К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как добавить значения в список выбора в 1С

Как добавить значения в список выбора в 1С: работа со списком выбора в конфигураторе, программное добавление элементов, справочники и перечисления.

Список выбора в 1С — это набор значений, из которых пользователь подбирает нужный вариант при заполнении реквизита документа, справочника или поля формы. В зависимости от задачи значения добавляются тремя способами: через свойства реквизита в конфигураторе, программно через объект «СписокЗначений» или через изменение состава перечисления. Выбор способа определяется тем, откуда берутся данные и кто должен их поддерживать — разработчик или пользователь.

Частая ситуация: реквизит «Способ доставки» хранится как строка, и бухгалтер просит добавить вариант «Самовывоз со склада №2». Если список зашит в свойствах формы, без конфигуратора не обойтись. Если значения формируются программно, достаточно изменить процедуру заполнения. Если же реквизит ссылается на справочник или перечисление, логика совсем другая — список выбора как таковой не редактируется, а добавляется новый элемент данных.

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

Определите, как устроен список выбора в вашем случае

Первый шаг — понять, откуда поле берёт варианты. Откройте форму объекта в конфигураторе, найдите нужный реквизит и посмотрите его тип данных. Если это строка или число с заполненным свойством «Список выбора», значения хранятся прямо в форме. Если тип — «ПеречислениеСсылка», варианты задаются составом перечисления в дереве конфигурации. Если тип — «СправочникСсылка», список формируется из элементов справочника, и «добавить значение» означает создать новый элемент.

Ещё один вариант — динамический список, который заполняется кодом при создании формы или при изменении связанных полей. Признак такого подхода: в свойствах реквизита список пуст, но в модуле формы есть обращения к Элементы.ИмяПоля.СписокВыбора. В этом случае редактировать нужно код, а не свойства.

Добавление значений через свойства реквизита в конфигураторе

Это самый простой сценарий для статических списков. Откройте конфигуратор, найдите нужный объект (документ, справочник, обработку), откройте его форму и выделите поле ввода, к которому привязан список. В палитре свойств найдите пункт «Список выбора» и нажмите кнопку выбора (троеточие). Откроется редактор, где можно добавить новую строку, указать значение и при необходимости представление — текст, который увидит пользователь.

После добавления сохраните конфигурацию и обновите конфигурацию базы данных (клавиша F7 в конфигураторе), если изменения затронули структуру. Для изменения только свойств формы достаточно сохранения конфигурации. Затем запустите режим «Предприятие» и проверьте, что новый вариант появился в выпадающем списке.

Учтите: если конфигурация типовая и находится на полной поддержке, потребуется включить возможность изменения через «Конфигурация → Поддержка → Настройка поддержки». Изменения, внесённые в типовой объект, при очередном обновлении могут быть затёрты, если обновление выполняется без сопоставления изменений.

Добавление значения через конфигуратор
  1. 1
    Сделайте резервную копию информационной базы
  2. 2
    Откройте конфигуратор и найдите форму объекта
  3. 3
    Выделите поле ввода и откройте свойство «Список выбора»
  4. 4
    Добавьте строку со значением и представлением
  5. 5
    Сохраните конфигурацию и при необходимости обновите конфигурацию БД
  6. 6
    Проверьте результат в режиме «Предприятие»

Программное добавление значений через СписокЗначений

Когда набор вариантов зависит от контекста — роли пользователя, выбранной организации, периода — список формируют кодом. Обычно это делается в обработчиках формы «ПриСозданииНаСервере» или «ПриОткрытии», а также в обработчиках изменения связанных полей. Для работы используется объект «СписокЗначений» и его метод Добавить().

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Список = Элементы.СпособДоставки.СписокВыбора;

Список.Добавить("Самовывоз", "Самовывоз со склада");

Список.Добавить("Курьер", "Доставка курьером");

Список.Добавить("ТК", "Транспортная компания");

КонецПроцедуры

Метод Добавить() принимает значение, представление и при необходимости пометку и картинку. Если нужно полностью переформировать список, сначала вызовите Очистить(), иначе при повторном выполнении обработчика значения задублируются. Для вставки в конкретную позицию используйте Вставить() с индексом.

Добавление значений через справочник или перечисление

Если реквизит ссылается на справочник

Когда поле ввода имеет тип «СправочникСсылка», никакого отдельного списка выбора нет — варианты берутся из элементов справочника. Чтобы добавить значение, пользователю достаточно создать новый элемент прямо в режиме «Предприятие»: открыть список справочника, нажать «Создать», заполнить наименование и записать. Конфигуратор не нужен, и это предпочтительный вариант, если набор значений регулярно меняется силами пользователей.

Если реквизит ссылается на перечисление

Перечисление — жёстко заданный набор значений, который меняется только в конфигураторе. Откройте в дереве конфигурации ветку «Перечисления», найдите нужное, откройте его и на закладке «Данные» добавьте новое значение, указав имя и синоним. После обновления конфигурации базы данных новое значение станет доступно во всех полях, ссылающихся на это перечисление.

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

Сравнение подходов

Список выбора в свойствах формы

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

Программное заполнение

Подходит для динамических наборов, зависящих от контекста. Ограничение: требует поддержки кода

Справочник

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

Перечисление

Подходит для стабильных системных вариантов. Ограничение: любое изменение — только через конфигуратор

Настройка кнопки выбора и быстрого выбора

Чтобы список выбора реально работал, проверьте связанные свойства поля ввода. Свойство «КнопкаСпискаВыбора» должно быть установлено в «Да» — иначе стрелка выпадающего списка не появится. Свойство «РежимВыбораИзСписка» заставляет поле работать только с заданным списком и запрещает ввод произвольного текста, что полезно для контроля данных.

Для ссылочных полей (справочники, документы) вместо списка выбора работают «Быстрый выбор» и «Кнопка выбора». Если нужно ограничить варианты для ссылочного поля, используйте «Параметры выбора» или «Связи параметров выбора» — например, чтобы в поле «Договор» подставлялись только договоры выбранного контрагента. Это более правильный механизм, чем попытка сформировать список выбора для ссылочного типа.

Проверка результата и типичные ошибки

После изменений откройте форму в режиме «Предприятие» и проверьте три вещи: новое значение видно в выпадающем списке, его можно выбрать и записать объект, при повторном открытии записанного объекта значение отображается корректно. Проверьте также старые документы, где поле уже было заполнено, — они не должны «потерять» свои значения.

Типичные ошибки
01
Добавление значения в список формы, когда реквизит ссылается на перечисление — изменение не сработает, нужно править перечисление
02
Повторный вызов Добавить() без Очистить() — значения дублируются в списке при каждом открытии формы
03
Несовпадение типа значения в списке и типа реквизита — значение не сохраняется или вызывает ошибку преобразования
04
Изменение типовой конфигурации без фиксации доработки — при обновлении изменения теряются
05
Удаление старого значения из списка — документы, где оно было выбрано, отображаются некорректно

Когда стоит передумать и выбрать другой механизм

Не каждый выпадающий список должен быть списком выбора. Если вариантов больше десятка или они периодически дополняются пользователями, заведите справочник — это избавит от постоянных обращений к разработчику. Если нужно хранить к каждому варианту дополнительные данные (коэффициент, комментарий, ответственного), справочник — единственный адекватный вариант, потому что список выбора хранит только значение и представление.

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

Маршрут решения

Как выбрать подход

Вариантов 2–7 и они не меняются годамиИспользуйте список выбора в свойствах формы или перечисление
Набор зависит от контекста: роли, организации, периодаЗаполняйте СписокЗначений программно в обработчиках формы
Значения должны добавлять сами пользователиПеределайте реквизит на ссылку на справочник
К каждому варианту нужны дополнительные реквизитыОднозначно справочник, список выбора этого не умеет
Итог

Что важно запомнить

Способ добавления значений зависит от типа реквизита: статический список правится в свойствах формы, динамический — кодом через СписокЗначений, ссылочные типы наполняются через справочник или перечисление. Перед изменениями делайте резервную копию и проверяйте результат на старых документах.

Частые вопросы

Почему добавленное в конфигураторе значение не появилось в режиме «Предприятие»?

Чаще всего не выполнено сохранение конфигурации или обновление конфигурации базы данных (F7). Также проверьте, что вы изменили именно ту форму, которая открывается у пользователя, — у объекта может быть несколько форм, а в толстом и тонком клиенте могут использоваться разные.

Можно ли добавить значение в список выбора без конфигуратора?

Да, если реквизит ссылается на справочник: пользователь просто создаёт новый элемент справочника в режиме «Предприятие». Если список зашит в свойствах формы или является перечислением, без конфигуратора не обойтись.

Как запретить ввод значения, которого нет в списке?

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

Что будет со старыми документами, если удалить значение из списка?

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

Как добавить значение в список выбора управляемой формы программно?

В модуле формы обратитесь к элементу формы: Элементы.ИмяПоля.СписокВыбора.Добавить(Значение, "Представление"). Обычно это делается в обработчике ПриСозданииНаСервере, а при необходимости обновления — в обработчиках изменения связанных полей с предварительным вызовом Очистить().

Почему при повторном открытии формы значения в списке дублируются?

Потому что Добавить() вызывается каждый раз при выполнении обработчика, а список не очищается. Добавьте Элементы.ИмяПоля.СписокВыбора.Очистить() перед циклом добавления, и дубли исчезнут.