КлючСтрокиДинамическогоСписка.На основе структуры, фиксированной структуры, соответствия или фиксированного соответствия

Конструкторы

Создаваемый ключ строки заполняется значениями из переданной коллекции. Ключи элементов коллекции используются в качестве путей ключевых полей, а значения - в качестве значений полей.

Синтаксис

Новый КлючСтрокиДинамическогоСписка(<ИсточникКлюча>)
Полное описание, параметры и ограничения

КлючСтрокиДинамическогоСписка.На основе структуры, фиксированной структуры, соответствия или фиксированного соответствия

КлючСтрокиДинамическогоСписка (DynamicListRowKey)

На основе структуры, фиксированной структуры, соответствия или фиксированного соответствия

Доступен, начиная с версии 8.3.14.

Синтаксис:
Новый КлючСтрокиДинамическогоСписка(<ИсточникКлюча>)
Параметры:

<ИсточникКлюча> (обязательный)
Тип: Структура, ФиксированнаяСтруктура, Соответствие, ФиксированноеСоответствие.
Коллекция, используемая в качестве источника путей и значений ключевых полей.
Описание:

Создаваемый ключ строки заполняется значениями из переданной коллекции. Ключи элементов коллекции используются в качестве путей ключевых полей, а значения - в качестве значений полей.

Использование в версии:

Доступен, начиная с версии 8.3.14.

Методическая информация

Практические примеры

Получить один ключ из структуры и другой из соответствия

Конструктор берёт имена полей из ключей коллекции, а значения — из её значений. Для собственных числа и строки проверяем независимость от последующей правки источника.

Где и как запускать

Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.

Подготовка

  1. Учебная база 8.5.1.1343; фрагмент без директив выполняйте внутри серверной ВыполнитьПример() Экспорт собственного общего модуля УчебныеЗадачи.

  2. Два значения составного ключа — собственный номер 1 и категория Канцелярия. Ни запись товаров, ни открытие форм конфигурации не выполняются.

  3. Получить у этого типа принимает строковый путь ключевого поля, не числовой индекс. Количество показывает число полей ключа, не число строк списка.

Источник = Новый Структура("УчебныйНомер,Категория", 1, "Канцелярия");
ИзСтруктуры = Новый КлючСтрокиДинамическогоСписка(Источник);
Сопоставление = Новый Соответствие;
Сопоставление.Вставить("Категория", "Канцелярия");
Сопоставление.Вставить("УчебныйНомер", 1);
ИзСоответствия = Новый КлючСтрокиДинамическогоСписка(Сопоставление);
Сообщить(ИзСтруктуры.Количество() = 2);
Сообщить(ИзСоответствия.Количество() = 2);
Сообщить(ИзСтруктуры.Получить("УчебныйНомер") = ИзСоответствия.Получить("УчебныйНомер"));
Сообщить(ИзСтруктуры.Получить("Категория") = ИзСоответствия.Получить("Категория"));
Источник.УчебныйНомер = 99;
Источник.Категория = "Изменён только источник";
Сопоставление.Вставить("Категория", "Изменён только источник");
Сообщить(ИзСтруктуры.Получить("УчебныйНомер") = 1);
Сообщить(ИзСтруктуры.Получить("Категория") = "Канцелярия");
Сообщить(ИзСоответствия.Получить("Категория") = "Канцелярия");

Разбор по шагам

  1. Структура удобна для простых имён полей. Соответствие также принимается конструктором; его ключи используются как пути ключевых полей.

  2. Создаём ключи из двух источников и сравниваем составляющие по именам, не по порядку обхода соответствия.

  3. После создания меняем собственные скалярные значения источников. Уже созданные ключи сохраняют номер 1 и строку Канцелярия.

Как проверить результат

  1. Семь проверок дают Истина.

  2. Источник после правки содержит 99, но ИзСтруктуры.Получить("УчебныйНомер") по-прежнему 1.

Ожидаемый результат

Создание ключа по именованной коллекции с проверкой скалярных значений.

На что обратить внимание

  1. Это не обещание глубокой копии всех возможных вложенных изменяемых объектов; здесь только число и строка.

  2. Произвольное соответствие не является готовым отбором динамического списка.

  3. Имена путей должны соответствовать полям реального списка при использовании ключа в таблице.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Выбрать Книгу в таблице по составному ключу

Для двух ключевых полей используем вид КлючСтроки. Клиентская кнопка задаёт ТекущаяСтрока ключом с теми же путями, а не номером позиции на экране.

Где и как запускать

Модуль собственной управляемой формы внешней обработки. Вставляйте готовые процедуры с директивами на уровне модуля; каждый урок — в отдельной копии формы.

Подготовка

  1. В учебной базе 8.5.1.1343 создайте новую внешнюю обработку УчебныйСписок85, пустую управляемую основную форму. Режим совместимости — 8.3.19 или выше. Не переделывайте список рабочей конфигурации.

  2. В реквизитах формы добавьте Список типа ДинамическийСписок. Создайте один элемент ТаблицаФормы с именем ТаблицаТоваров и путём к данным Список. Колонки вручную не добавляйте: их создаёт код. Это не ТаблицаЗначений и не коллекция строк для Добавить().

  3. В событиях формы назначьте ПриСозданииНаСервере одноимённой процедуре из примера. Не используйте одновременно другой обработчик заполнения этого списка.

  4. При открытии код задаёт произвольный запрос из четырёх константных строк. Основная таблица не указана; таблицы базы, файлы и внешние сервисы не используются. Запись данных отсутствует.

  5. Каждый раз открывайте отдельную копию формы. Автоматическое сохранение настроек отключено: старый пользовательский отбор не должен вмешиваться в упражнение.

  6. В Командах формы добавьте ВыбратьКнигу, действие ВыбратьКнигу; перетащите команду на форму кнопкой. Пример уже содержит клиентский обработчик.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Список.ПроизвольныйЗапрос = Истина;
    Список.ОсновнаяТаблица = "";
    Список.ДинамическоеСчитываниеДанных = Ложь;
    Список.АвтоЗаполнениеДоступныхПолей = Истина;
    Список.АвтоматическоеСохранениеПользовательскихНастроек = Ложь;
    Список.ВидКлюча = ВидКлючаДинамическогоСписка.КлючСтроки;
    КлючевыеПоля = Новый Массив;
    КлючевыеПоля.Добавить("УчебныйНомер");
    КлючевыеПоля.Добавить("Категория");

    Список.ПоляКлюча = Новый ФиксированныйМассив(КлючевыеПоля);
    Список.ТекстЗапроса = "ВЫБРАТЬ
|    1 КАК УчебныйНомер,
|    ""Книга"" КАК Наименование,
|    ""Канцелярия"" КАК Категория,
|    3 КАК Количество,
|    250 КАК Цена
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 2, ""Ручка"", ""Канцелярия"", 1, 30
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 3, ""Чай"", ""Продукты"", 2, 150
|ОБЪЕДИНИТЬ ВСЕ
|ВЫБРАТЬ 4, ""Вода"", ""Продукты"", 0, 70";
    Элементы.ТаблицаТоваров.ТолькоПросмотр = Истина;
    Сообщить(Список.ПоляКлюча.Количество() = 2);
    Сообщить(Список.ВидКлюча = ВидКлючаДинамическогоСписка.КлючСтроки);

    Для Каждого ИмяПоля Из СтрРазделить("УчебныйНомер,Наименование,Категория,Количество,Цена", ",") Цикл
        Колонка = Элементы.Добавить("Товары" + ИмяПоля, Тип("ПолеФормы"), Элементы.ТаблицаТоваров);
        Колонка.Вид = ВидПоляФормы.ПолеВвода;
        Колонка.ПутьКДанным = "Список." + ИмяПоля;
        Колонка.Заголовок = ИмяПоля;
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьКнигу(Команда)
    КлючКниги = Новый КлючСтрокиДинамическогоСписка(Новый Структура("УчебныйНомер,Категория", 1, "Канцелярия"));
    Элементы.ТаблицаТоваров.ТекущаяСтрока = КлючКниги;
    Сообщить(КлючКниги.Количество() = 2);
    Сообщить(КлючКниги.Получить("УчебныйНомер") = 1);
    Сообщить("Проверьте выделенную строку Книга в учебной таблице");
КонецПроцедуры

Разбор по шагам

  1. Основная таблица пустая; собственный запрос создаёт четыре товара. Поля ключа УчебныйНомер и Категория задаются явно.

  2. Вид КлючСтроки подходит составному ключу. ЗначениеПоля в предыдущем уроке использовалось только для одного ключевого поля.

  3. Кнопка строит ключ Книги по двум значениям и присваивает ТекущаяСтрока. Она не меняет запрос и не добавляет товар.

  4. Проверка появления выбранной строки визуальная. Отсутствие строки с таким ключом не превращается автоматически в запись нового товара.

Как проверить результат

  1. При открытии две проверки дают Истина.

  2. Нажмите ВыбратьКнигу: две клиентские проверки дают Истина; в таблице должна быть выбрана Книга с номером 1 и категорией Канцелярия.

  3. Измените сортировку таблицы и повторите выбор: Книга выбирается по ключу, а не по позиции строки.

Ожидаемый результат

Выбор собственной строки по двум ключевым полям без изменения данных.

На что обратить внимание

  1. Нельзя подменять составной ключ числом 1 только потому, что у Книги номер 1.

  2. Указанная основная таблица имеет другие правила ключа: пример специально без неё.

  3. ТекущиеДанные после выбора и взаимодействия с сервером — отдельная операция; урок не выдаёт их до готовности строки.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.