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