Разработка и Конфигурация · 10 мин
Как добавить поле в динамический список в 1С
Как добавить поле в динамический список 1С: через запрос, вычисляемое поле и программно. Разбор настроек СКД, типичных ошибок и способов проверки результата.
Динамический список в управляемых формах 1С строится на базе системы компоновки данных, поэтому добавить в него поле можно несколькими способами: через текст запроса, через вычисляемое поле настроек или программно из модуля формы. Выбор зависит от того, откуда берутся данные: из таблицы самого списка, из связанной таблицы или их нужно рассчитать «на лету».
Чаще всего задача сводится к простому сценарию: в списке документов или справочника нужна колонка, которой нет в стандартной выборке — например, ответственный менеджер, сумма по связанному регистру или признак просрочки. Ниже разобраны все рабочие способы с точными действиями, ограничениями и проверкой результата.
Важно понимать: динамический список не хранит данные, а формирует их запросом при каждом обновлении. Поэтому любое добавленное поле должно быть либо полем запроса, либо вычисляемым выражением СКД — иначе платформа просто не найдёт источник данных и колонка останется пустой или вызовет ошибку.
Где находятся настройки динамического списка
Откройте конфигуратор, найдите нужную форму списка (например, «ФормаСписка» у справочника или документа) и откройте её. В дереве реквизитов формы найдите реквизит типа «ДинамическийСписок» — обычно он называется «Список». В палитре свойств обратите внимание на два ключевых свойства: «ПроизвольныйЗапрос» и «Настройка».
Если флаг «Произвольный запрос» снят, платформа сама строит запрос по основной таблице, и добавить своё поле можно только через настройки компоновки (вычисляемые поля) или программно. Если флаг установлен, доступна кнопка «Открыть» у свойства «Настройка» — откроется конструктор с полным текстом запроса, который можно редактировать вручную.
Элемент формы, отображающий список (таблица с данными «Список»), берёт колонки из выбранных полей настройки. Поэтому недостаточно добавить поле в запрос — его ещё нужно включить в выбранные поля, иначе колонка не появится.
Способ 1: добавить поле через произвольный запрос
Это основной способ, когда нужные данные есть в основной таблице или в связанных таблицах базы. Установите у реквизита списка флаг «Произвольный запрос», затем откройте настройку и перейдите к тексту запроса. Допишите нужное поле в секцию выборки, при необходимости добавив соединение.
// Пример: добавляем поле "Ответственный" из справочника
// и остаток из регистра накопления
ВЫБРАТЬ
Товары.Ссылка,
Товары.Наименование,
Товары.Ответственный,
ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток
ИЗ
Справочник.Номенклатура КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
ПО Товары.Ссылка = Остатки.Номенклатура
После правки запроса перейдите на закладку «Настройки» → «Выбранные поля» и перетащите новое поле из доступных в список выбранных. Сохраните форму и проверьте результат в режиме предприятия. Если поле добавлено через псевдоним (КАК Остаток), именно этот псевдоним будет именем колонки в настройках.
- 1Откройте форму списка в конфигураторе и найдите реквизит «Список»
- 2Установите флаг «Произвольный запрос» и откройте свойство «Настройка»
- 3Допишите поле в текст запроса (с соединением, если данные в другой таблице)
- 4На закладке «Выбранные поля» добавьте новое поле в список
- 5Сохраните форму и откройте список в режиме предприятия — проверьте колонку
Способ 2: вычисляемое поле через настройки СКД
Если поле нужно рассчитать из уже выбираемых данных (например, «Сумма с НДС» или текстовый признак), необязательно менять запрос — достаточно вычисляемого поля. Откройте настройку списка, перейдите на закладку «Компоновка данных» → «Вычисляемые поля» и нажмите «Добавить». Укажите путь к данным (имя поля), выражение и заголовок.
Выражение пишется на языке выражений СКД, который близок к языку запросов: поддерживаются арифметика, функции работы со строками, конструкция ВЫБОР КОГДА...ИНАЧЕ КОНЕЦ. После создания поле появится в доступных — добавьте его в выбранные поля настройки.
Ограничение способа: вычисляемое поле не может обращаться к таблицам, которых нет в запросе. Если данные нужно получить соединением — используйте первый способ с произвольным запросом.
Сравнение вариантов
Подходит для данных из любых таблиц базы, включая соединения и виртуальные таблицы регистров. Требует включения произвольного запроса.
Подходит для расчётов на основе уже выбранных полей. Не требует правки запроса, но не имеет доступа к другим таблицам.
Подходит, когда состав полей зависит от условий (роль пользователя, параметры). Требует кода в модуле формы и аккуратной работы со схемой компоновки.
Способ 3: добавить поле программно из модуля формы
Программный вариант нужен, когда набор колонок зависит от условий: например, колонка видна только руководителю или добавляется при определённом параметре. Код размещается в обработчике «ПриСозданииНаСервере» формы списка.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Добавление вычисляемого поля в схему компоновки
Поле = Список.КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(
Тип("ВыбранноеПолеКомпоновкиДанных"));
Поле.Поле = Новый ПолеКомпоновкиДанных("Ответственный");
Поле.Использование = Истина;
КонецПроцедуры
Учтите важный нюанс: программно можно включить в выбор только то поле, которое уже существует в запросе или вычисляемых полях схемы. Если поля нет в источнике, сначала нужно программно изменить текст запроса через свойство «Список.ТекстЗапроса» — и делать это до первого обращения к данным списка.
Для управления видимостью колонки без изменения запроса достаточно свойства «Использование» выбранного поля или свойства «Видимость» элемента формы — это безопаснее, чем перестройка запроса.
Особенности для полей с отбором и сортировкой
Добавленное поле автоматически становится доступным для отбора и сортировки, если оно является полем запроса. Для вычисляемых полей отбор и сортировка работают с ограничениями: сложные выражения могут не поддерживаться механизмом динамического списка, и при попытке отбора пользователь получит ошибку.
Если по новой колонке планируется частый отбор или сортировка, предпочтительнее добавить поле именно в запрос, а не вычисляемым выражением. Для полей из соединённых таблиц проверьте производительность: соединение с виртуальной таблицей регистра без индексов по условию связи может заметно замедлить открытие списка на больших объёмах.
Чтобы запретить сортировку по вычисляемой колонке, откройте настройку списка и на закладке «Порядок» снимите доступность поля, либо установите у элемента формы свойство, запрещающее изменение порядка.
Проверка результата и типичные ошибки
После изменений обновите конфигурацию базы данных (если правили форму в конфигураторе) и откройте список в режиме предприятия. Новая колонка должна появиться сразу; если её нет — проверьте, добавлено ли поле в выбранные поля настройки, а не только в запрос.
Если колонка есть, но пустая — чаще всего причина в соединении: левое соединение не нашло соответствий, или поле содержит NULL. Используйте ЕСТЬNULL() для подстановки значения по умолчанию. Если список вообще не открывается с ошибкой — проверьте синтаксис запроса и имена полей через конструктор запроса.
Как проверить результат
Новая колонка видна и заполнена данными
Колонки нет — поле не добавлено в выбранные поля настройки
Данные соответствуют источнику, нет массовых пустых значений
Пусто или NULL — проблема соединения, нужен ЕСТЬNULL
Список открывается за привычное время
Заметное замедление — тяжёлое соединение, нужна оптимизация запроса
Отбор работает без ошибок
Ошибка компоновки — поле вычисляемое со сложным выражением
FAQ
Можно ли добавить поле в динамический список без изменения конфигурации?
Частично да: пользователь может через «Ещё» → «Изменить форму» включить видимость колонок, которые уже есть в настройке списка. Но добавить новое поле, которого нет в запросе или вычисляемых полях, без правки формы в конфигураторе или расширении нельзя. Расширение конфигурации — рабочий компромисс, если типовую конфигурацию нельзя изменять.
Как добавить поле в динамический список через расширение?
Создайте расширение, заимствуйте нужную форму списка, затем в ней измените реквизит «Список»: установите произвольный запрос и допишите поле, либо добавьте программную логику в «ПриСозданииНаСервере» через аннотацию &После или &ИзменениеИКонтроль. Это сохраняет конфигурацию на поддержке.
Почему программно добавленное поле не отображается?
Наиболее вероятные причины: поле отсутствует в источнике данных (запросе или вычисляемых полях), код добавления выполняется после того, как список уже получил данные, либо у выбранного поля не установлено свойство «Использование = Истина». Также проверьте, что имя поля в «Новый ПолеКомпоновкиДанных()» точно совпадает с псевдонимом в запросе.
Как добавить картинку или флажок в динамический список?
Прямо в запросе булево поле отобразится как флажок автоматически. Для картинки (например, индикатор состояния) добавьте числовое поле-индекс, затем у элемента формы-колонки установите вид «Поле картинки» и задайте картинку значений из библиотеки картинок платформы.
Влияет ли добавление поля на права доступа?
Да. Если пользователь не имеет права чтения объекта, из которого берётся новое поле (например, регистра), поле будет пустым или запрос выдаст ошибку нарушения прав. Проверяйте работу списка под ролью конечного пользователя, а не только под администратором.
Что важно запомнить
Поле в динамический список добавляется тремя путями: в текст произвольного запроса, как вычисляемое поле СКД или программно в модуле формы. В любом случае поле должно попасть в выбранные поля настройки. Для отбора и сортировки предпочтителен запрос, а тяжёлые соединения перед внедрением проверяйте на копии базы.