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