Динамический список

Источником данных для таблиц большинства форм списков (списки справочников клиентов, контактных лиц и др.) является системный компонент ДинамическийСписок (подробнее).

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

Тип: Таблица<ДинамическийСписок>
Имя: ТаблицаСписка
Источник:
    ОсновнаяТаблица:
        Таблица: Задачи
    Поля:
        -
            Тип: ПолеДинамическогоСписка
            Выражение: Код
        -
            Тип: ПолеДинамическогоСписка
            Выражение: Наименование
        -
            Тип: ПолеДинамическогоСписка
            Выражение: ДатаСоздания
        -
            Тип: ПолеДинамическогоСписка
            Выражение: Владелец.Клиент
            Псевдоним: Владелец_Клиент
            Представление: Клиент
            ОтображатьВНастройкахОтборов: Истина
            ОтображатьВПростыхОтборах: Истина
    Порядок:
        -
            Поле: ДатаСоздания
            НаправлениеСортировки: ПоУбыванию

Кроме того, существует возможность указывать присоединенные таблицы, которые соединяются с основной для уточнения выборки. Так, в примере ниже, в форме списка валют имеются присоединенные таблицы динамического списка. Основная таблица справочника Общие::КурсыВалют::Валюты соединяется с виртуальной таблицей среза последних регистра сведений Общие::КурсыВалют::КурсыВалют:

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

Кроме того, можно задать условия фильтрации данных в выборке с помощью свойства Отбор. Для отбора могут использоваться поля как основной, так и присоединённых таблиц. Условие фильтрации сравнивается со значением поля данных. Это может быть одно значение, выражение, или группа значений и/или выражений, соединенных логическими операторами.

Параметры и аргументы

Условие запроса можно указать непосредственно в описании динамического списка или одной из его таблиц, как значение свойства. Это может быть удобным, так как позволяет:
  • Передавать условия запроса во время исполнения программы.
  • Упрощать написание и чтение длинных, сложных запросов.
  • Переиспользовать одно и то же условие, которое повторяется несколько раз в одном или нескольких запросах.

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

Чтобы добавить параметр, добавьте в описание динамического списка свойство Параметры, после чего укажите один или несколько параметров, каждый из которых будет иметь специальный тип ПараметрДинамическогоСписка, имя и значение. Значением может быть как собственно значение определённого типа, так и ссылка на объект, например, условие выборки, переданное пользователем во время исполнения запроса. Например:
Тип: Таблица<ДинамическийСписок>
Параметры:
  - Тип: ПараметрДинамическогоСписка
    Имя: Параметр1
    Значение:
        Тип: Число
        Значение: 110
  - Тип: ПараметрДинамическогоСписка
    Имя: Параметр2
    Значение: =УсловиеОтПользователя
Отбор:
    Элементы:
        -
            Тип: ЭлементОтбораВыражение
            Выражение: Срез.Курс == &Параметр2

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

Чтобы добавить аргумент, добавьте свойство Аргументы, после чего укажите для него одно или несколько свойств Значение. Например, для следующей выборки на языке запросов:
ВЫБРАТЬ
    Период,
    Курс,
    Валюта
ИЗ
    Курсы.СрезПоследних(Дата{2021-04-05})
описание аргументов в файле YAML будет выглядеть следующим образом:

— для основной таблицы:

Тип: Таблица<ДинамическийСписок>
Источник:
    ОсновнаяТаблица:
        Таблица: КурсыВалют.СрезПоследних
        Псевдоним: Срез
        Аргументы:
            -
                Тип: АргументТаблицы
                Значение:
                    Тип: Дата
                    Значение: 2021-04-05
    Поля:
        - 
            Тип: ПолеДинамическогоСписка
            Выражение: Срез.Период
        - 
            Тип: ПолеДинамическогоСписка
            Выражение: Срез.Валюта

— для присоединенной таблицы:

ПрисоединенныеТаблицы:
    -   
        Тип: ПрисоединеннаяТаблица
        Таблица: КурсыВалют.СрезПоследних
        Аргументы:
            -
                Тип: АргументТаблицы
                Значение:
                    Тип: Дата
                    Значение: 2021-04-05

Пример использования выражения как аргумента таблицы:

Тип: Таблица<ДинамическийСписок>
ИспользованиеПоиска: НеИспользовать
Источник:
    ОсновнаяТаблица:
        Таблица: КурсыВалют.СрезПоследних
        Псевдоним: Срез
        Аргументы:
            -
                Тип: АргументТаблицыВыражение
                Выражение: =ПараметрДата
    Параметры:
        - 
            Тип: ПараметрДинамическогоСписка
            Имя: ПараметрДата
            Значение:
                Тип: Дата
                Значение: 10.10.2011
    Поля:
        - 
            Тип: ПолеДинамическогоСписка
            Выражение: Срез.Период
        - 
            Тип: ПолеДинамическогоСписка
            Выражение: Срез.Валюта               
    Отбор:
        Элементы:
            -
                Тип: ЭлементОтбораВыражение
                Выражение: Срез.Курс == &Параметр2
Общий пример использования различных типов значений параметров и аргументов в различных частях динамического списка:
ВидЭлемента: КомпонентИнтерфейса
ОбластьВидимости: ВПодсистеме
Ид: 157b069e-baa1-4a28-ab9e-5162f4b66688
Имя: МояТаблица
Свойства:
    -
        Имя: СвойствоФормат
        Тип: Строка
Наследует:
    Тип: Таблица<ДинамическийСписок>
    ИспользованиеПоиска: НеИспользовать
    Источник:
        ОсновнаяТаблица:
            Таблица: КурсыВалют.СрезПоследних
            Псевдоним: Срез
            Аргументы:
                -
                    Тип: АргументТаблицы
                    Значение:
                        Тип: Дата
                        Значение: 10.10.2011
        Поля:
            - 
                Тип: ПолеДинамическогоСписка
                Выражение: Период
            - 
                Тип: ПолеДинамическогоСписка
                Выражение: Валюта   
            - 
                Тип: ПолеДинамическогоСписка
                Выражение: Курс.Представление(&ПараметрСтрока) # Используем параметр в полях. Задаем формат курса валют
                Псевдоним: ФорматированныйКурс                 
        Параметры:
            - 
                Тип: ПараметрДинамическогоСписка
                Имя: ПараметрЧисло
                Значение:
                    Тип: Число
                    Значение: 110
            - 
                Тип: ПараметрДинамическогоСписка
                Имя: ПараметрБулево
                Значение:
                    Тип: Булево
                    Значение: Истина
            - 
                Тип: ПараметрДинамическогоСписка
                Имя: ПараметрСтрока
                Значение:
                    Тип: Строка
                    Значение: 0_11;DG=_ #  Применяем данный формат к числу 1234567. Получаем: 001_234_567
            - 
                # Берем строку формата из свойства компонента. Устанавливаем параметр динамического списка через ссылку на объект
                Тип: ПараметрДинамическогоСписка
                Имя: ПараметрФормат
                Значение: =СвойствоФормат 
        Отбор:
            Элементы:
                - # Используем параметр в ЭлементОтбораВыражение
                    Тип: ЭлементОтбораВыражение
                    Выражение: Срез.Курс == &ПараметрЧисло   # КурсыВалют.СрезПоследних(10.10.2011).Курс == 110
                -
                    Тип: ЭлементОтбораВыражение
                    Выражение: '&ПараметрБулево'
                -
                    Тип: ЭлементОтбораВыражение
                    Выражение: Срез.Курс.Представление(&ПараметрСтрока).Содержит("110")
        Порядок:
            - 
                Тип: ЭлементПорядка
                Поле: Валюта

Множественные реквизиты

Если в Справочнике либо Документе есть множественный реквизит, то можно его получить как поле выборки динамического списка. В частности, есть возможность получения множественных реквизитов в выборке динамического списка и использования множественных реквизитов в отборах динамического списка. Также можно осуществлять отбор по множественному полю с особыми условиями сравнения.

Пример описания поля со множественным реквизитом в выборке динамического списка:
Тип: Таблица<ДинамическийСписок>
Имя: Таблица
Источник:
    Тип: ДинамическийСписок
    ОсновнаяТаблица:
        Таблица: СправочникСотрудники
    Поля:
        -
            Тип: ПолеДинамическогоСписка
            ОтображатьВНастройкахОтборов: Истина
            ОтображатьВПростыхОтборах: Истина
            Выражение: Код
        -
            Тип: ПолеКоллекцияДинамическогоСписка
            ОтображатьВНастройкахОтборов: Истина
            ОтображатьВПростыхОтборах: Истина
            Выражение: НомераТелефонов
    Колонки:
        -
            Тип: СтандартнаяКолонкаТаблицы<СтрокаДинамическогоСписка>
            Заголовок: Код
            ПолеЗначения: Код
        -
            Тип: СтандартнаяКолонкаТаблицы<СтрокаДинамическогоСписка>
            ПолеЗначения: НомераТелефонов
            Заголовок: Номера телефонов
Для указания способа отбора строк по полю со множественным реквизитом используется перечисление ВидСравненияПоляКоллекция. Оно содержит следующие элементы:
  • Пусто — условие истинно, если множественное поле не содержит ни одного значения (поле отбора «Значение» игнорируется);
  • СодержитЛюбой — условие истинно, если хотя бы одно значение отбора присутствует в значении множественного поля;
  • СодержитВсе — условие истинно, если каждое значение отбора присутствует в значении множественного поля;
  • СодержитТолько — условие истинно, если все значения множественного поля совпадают с заданными значениями отбора;
  • НеСодержит — условие истинно, если ни одно значение отбора не совпадает со значениями множественного поля.
Пример отбора по полю со множественным реквизитом в среде разработки:
Тип: Таблица<ДинамическийСписок>
Имя: Таблица
Источник:
    Тип: ДинамическийСписок
    ОсновнаяТаблица:
        Таблица: СправочникСотрудники
    Поля:
        -
            Тип: ПолеДинамическогоСписка
            ОтображатьВНастройкахОтборов: Истина
            ОтображатьВПростыхОтборах: Истина
            Выражение: Код
        -
            Тип: ПолеКоллекцияДинамическогоСписка
            ОтображатьВНастройкахОтборов: Истина
            ОтображатьВПростыхОтборах: Истина
            Выражение: ПройденныеКурсы
    Колонки:
        -
            Тип: СтандартнаяКолонкаТаблицы<СтрокаДинамическогоСписка>
            Заголовок: Код
            ПолеЗначения: Код
        -
            Тип: СтандартнаяКолонкаТаблицы<СтрокаДинамическогоСписка>
            ПолеЗначения: ПройденныеКурсы
            Заголовок: Пройденные курсы
    Отбор:
        Элементы:
            - 
                Тип: ЭлементОтбораПоляКоллекция
                Поле: ПройденныеКурсы
                ВидСравненияПоляКоллекция: СодержитЛюбой
                Значение:
                    Тип: Строка
                    Значение: Курс по программированию
Пример отбора по полю со множественным реквизитом в пользовательском интерфейсе:
  • Для того чтобы использовать фильтрацию с особыми условиями в пользовательском интерфейсе, следует поменять тип фильтра на Продвинутый фильтр. Для этого откройте фильтр, нажмите на символ и выберите Тип фильтров:

  • В открывшемся окне выберите Продвинутые и нажмите Применить:

  • После этого снова откройте фильтр и нажмите + Добавить фильтр. В открывшемся окне укажите необходимый столбец со множественным реквизитом, условие отбора, а также отметьте в выпадающем списке, в поле Значение, все необходимые значения. Нажмите Сохранить:

Встроенный язык

Для работы с динамическим списком и его свойствами во встроенном языке см. соответствующий раздел Синтакс-помощника.