Разработка и Конфигурация · 11 мин
1С: как заполнить поле списка
Как заполнить поле списка в 1С: выбор из выпадающего списка, список значений, динамический список и программное заполнение. Пошаговые инструкции и типичные ошибки.
Поле списка в 1С — один из самых частых элементов, с которым сталкиваются и пользователи, и разработчики. Под этим термином скрывается несколько разных объектов: выпадающий список выбора в форме документа, реквизит «Список значений», табличная часть справочника и динамический список на форме. Способ заполнения зависит от того, о каком именно поле идёт речь и в какой роли вы работаете — вводите данные в готовую конфигурацию или дорабатываете её в конфигураторе.
Для пользователя заполнение поля списка обычно сводится к выбору значения из предложенных вариантов или добавлению строк в табличную часть. Для разработчика задача шире: нужно определить источник данных списка, настроить состав выбора, а иногда — заполнить список программно через встроенный язык 1С. Ниже разобраны оба сценария с конкретными действиями и проверками результата.
Перед началом работы важно понять, какой тип списка перед вами: от этого зависят доступные действия. Попытка заполнить динамический список вручную или добавить произвольное значение в поле с фиксированным перечислением закончится ошибкой или отказом платформы сохранить данные.
Как определить, какой тип списка перед вами
Признаки типа поля видны прямо в интерфейсе. Если рядом с полем есть кнопка со стрелкой вниз и при нажатии открывается короткий перечень вариантов — это поле выбора с выпадающим списком. Если список представлен таблицей с колонками и кнопками «Добавить», «Удалить», «Подобрать» — это табличная часть или динамический список. Если при нажатии на кнопку выбора открывается отдельная форма справочника — поле ссылается на объект базы данных.
Для разработчика определить тип ещё проще: откройте форму в конфигураторе, выделите элемент и посмотрите его свойства. Поле с типом «СписокЗначений» заполняется коллекцией значений, динамический список имеет свойство «Произвольный запрос» и настройки источника, а поле выбора связано с реквизитом, тип которого задаёт состав доступных значений.
Список значений задан в свойствах или типом реквизита
Строки добавляются вручную или подбором
Состав определяется запросом и отбором
Значение выбирается из существующих объектов базы
Заполнение выпадающего списка выбора
В пользовательском режиме всё просто: нажмите на поле или стрелку рядом с ним и выберите нужное значение из открывшегося перечня. Если вариантов много, начните вводить название с клавиатуры — платформа отфильтрует список по подстроке. Если нужного значения нет, значит оно либо не заведено в соответствующем справочнике, либо список зафиксирован разработчиком и расширить его может только администратор.
Разработчик задаёт состав выпадающего списка двумя способами. Первый — через свойство элемента формы «СписокВыбора»: в конфигураторе откройте палитру свойств поля, найдите «СписокВыбора» и добавьте нужные значения с представлениями. Второй — программно, в обработчике формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Элементы.СтатусЗаявки.СписокВыбора.Добавить("Новая", "Новая заявка");
Элементы.СтатусЗаявки.СписокВыбора.Добавить("ВРаботе", "В работе");
Элементы.СтатусЗаявки.СписокВыбора.Добавить("Закрыта", "Закрыта");
КонецПроцедуры;
Если реквизит имеет тип «Перечисление», состав списка формируется автоматически из значений перечисления, заданных в конфигураторе. Добавить новый вариант можно только через конфигуратор: откройте ветку «Перечисления», найдите нужное и добавьте значение, после чего обновите конфигурацию базы данных.
Заполнение табличной части документа или справочника
Табличная часть — самый частый вид «поля списка» в документах: товары в накладной, сотрудники в приказе, этапы в проекте. В пользовательском режиме строки добавляются кнопкой «Добавить» (или клавишей Insert), после чего в каждой колонке строки выбираются или вводятся значения. Кнопка «Подобрать», если она есть, открывает форму множественного выбора — удобно, когда строк много.
Признак корректного заполнения: документ проводится без сообщений об ошибках, а в строках заполнены все колонки, отмеченные как обязательные (обычно они подсвечены или проверяются при записи). Если при проведении появляется сообщение «Не заполнена колонка...», вернитесь к указанной строке и заполните пропущенное поле.
Программно табличная часть заполняется через коллекцию строк объекта. Типовой пример — добавление строки при обработке:
НоваяСтрока = Объект.Товары.Добавить();
НоваяСтрока.Номенклатура = ВыбраннаяНоменклатура;
НоваяСтрока.Количество = 1;
НоваяСтрока.Цена = ПолучитьЦену(ВыбраннаяНоменклатура);
Работа с реквизитом типа «Список значений»
Реквизит типа «СписокЗначений» встречается в обработках, отчётах и настройках отборов — например, когда нужно выбрать несколько контрагентов для отчёта. В пользовательском режиме такое поле открывается отдельной формой: кнопка «Добавить» создаёт новый элемент списка, для каждого элемента указывается значение и, при необходимости, пометка флажком.
В коде список значений заполняется методом «Добавить», где первый параметр — само значение, второй — представление для отображения, третий (необязательный) — пометка:
СписокКонтрагентов = Новый СписокЗначений;
СписокКонтрагентов.Добавить(КонтрагентСсылка, "Основной поставщик", Истина);
Типичное применение — передача списка в параметр запроса для отбора по нескольким значениям через оператор «В (&Список)». Учтите: все элементы списка должны иметь совместимый тип, иначе запрос вернёт ошибку или неполный результат.
Типичные ошибки и их устранение
Самая частая проблема пользователя — нужного значения нет в выпадающем списке. Причины две: либо элемент не создан в справочнике (тогда создайте его через форму выбора кнопкой «Создать»), либо список зафиксирован перечислением или свойством «СписокВыбора», и тогда требуется доработка конфигурации.
Вторая группа ошибок — программные. Платформа выдаёт «Ошибка при установке значения атрибута контекста», если в список выбора или табличную часть подставляется значение несовместимого типа: например, строка вместо ссылки на справочник. Проверяйте тип реквизита в конфигураторе и приводите значение к нужному типу перед добавлением.
Третья ситуация — динамический список не обновляется после изменения данных. Обычно помогает команда «Обновить» (F5) в списке; если список на форме обработки, вызовите метод Элементы.Список.Обновить() после записи объекта.
Как проверить, что список заполнен правильно
Контроль зависит от типа списка. Для выпадающего списка достаточно убедиться, что выбранное значение отображается в поле и сохраняется после записи объекта. Для табличной части — что документ проводится без ошибок и итоговые суммы сходятся. Для динамического списка — что отбор применён (рядом с кнопкой настройки виден индикатор) и в списке отображаются ожидаемые записи.
При программном заполнении добавьте отладочную проверку: выведите количество элементов списка через Сообщить() или проверьте в отладчике содержимое коллекции перед передачей в запрос. Это экономит время при поиске причин пустого результата.
Как проверить результат
Значение отображается и сохраняется при повторном открытии
Поле пустое или сброшено — значение не подошло по типу
Документ проведён без сообщений
Сообщения о незаполненных колонках табличной части
Записи соответствуют установленному отбору
Список пуст или показывает лишнее — проверьте отбор и параметры запроса
Отчёт учитывает все выбранные элементы
Часть значений игнорируется — несовместимые типы элементов
Что важно запомнить
Сначала определите тип поля списка: выпадающий список, табличная часть, список значений или динамический список. Каждый тип заполняется своим способом — выбором, добавлением строк, настройкой отбора или кодом. Любые изменения конфигурации проверяйте на копии базы.
Частые вопросы
Почему в выпадающем списке нет нужного значения?
Если поле связано со справочником — значение просто не создано: откройте форму выбора и нажмите «Создать». Если список задан перечислением или свойством «СписокВыбора», добавить вариант может только разработчик через конфигуратор.
Как добавить сразу много строк в табличную часть?
Используйте кнопку «Подобрать», если она есть — форма подбора позволяет выбрать несколько позиций. В некоторых конфигурациях доступна загрузка из файла через «Ещё» → «Заполнить» или внешние обработки загрузки.
Можно ли заполнить список значений из запроса?
Да. Выполните запрос, выгрузите результат в таблицу значений и загрузите нужную колонку в список методом ЗагрузитьЗначения(Таблица.ВыгрузитьКолонку("ИмяКолонки")).
Динамический список пуст, хотя данные в базе есть. Что проверить?
Сначала снимите все отборы через «Настроить список». Затем проверьте параметры произвольного запроса, если он используется, и права доступа к объектам — при нехватке прав записи скрываются без сообщений.
Как ограничить состав выпадающего списка для пользователя?
Разработчик задаёт свойство «СписокВыбора» у элемента формы или использует параметры выбора и связи параметров выбора для ссылочных полей. Для перечислений состав фиксируется в конфигураторе и не меняется пользователем.