Как добавить и отобразить новый вид контрагента в форме элемента 1С:Бухгалтерия 3.0

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При адаптации типовой конфигурации «1С:Бухгалтерия предприятия 3.0» под специфические нужды бизнеса или при выполнении учебных задач часто возникает необходимость расширить стандартный перечень видов контрагентов. По умолчанию система предлагает три варианта: Юридическое лицо, Физическое лицо и Обособленное подразделение. Однако на практике может потребоваться выделить, например, «Государственный орган» в отдельную категорию.

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

Анализ проблемы: почему метаданных недостаточно

Типовая конфигурация БП 3.0 построена на принципах динамического формирования интерфейса. Реквизит ВидКонтрагента (связанный с перечислением ЮридическоеФизическоеЛицо) жестко контролируется программным кодом. Даже если вы добавите новое значение ГосОрган в дерево метаданных, при открытии формы элемента справочника Контрагенты вы его не увидите. Это происходит потому, что список доступных значений для выбора формируется программно при создании формы, отсекая всё «лишнее» с точки зрения стандартной логики.

Шаг 1: Программное добавление значения в список выбора

Первым делом нам необходимо вмешаться в процесс инициализации формы. Разберем, где именно это происходит. В управляемых формах за заполнение списков отвечает серверное событие ПриСозданииНаСервере или вызываемые из него процедуры.

Рассмотрим алгоритм действий:

  1. Откроем модуль формы элемента справочника Контрагенты.
  2. Найдем процедуру ПриСозданииНаСервере.
  3. Проанализируем код на предмет инициализации реквизита Вид или ВидКонтрагента. Обычно система заполняет СписокВыбора программно.

Чтобы добавить наше значение, необходимо использовать следующий программный код:


// В процедуре ПриСозданииНаСервере или специализированном методе заполнения списков
Элементы.Вид.СписокВыбора.Добавить(Перечисления.ЮридическоеФизическоеЛицо.ГосОрган, "Государственный орган");

Важный момент: если конфигурация находится на поддержке, крайне рекомендуется вносить эти изменения через Расширение конфигурации, используя аннотацию &После для процедуры ПриСозданииНаСервере. Это позволит сохранить возможность типового обновления программы.

Шаг 2: Обеспечение сохранения данных при изменении

После того как мы добились отображения пункта «Государственный орган» в списке, мы столкнемся со следующей проблемой: при выборе этого значения и сохранении карточки система может сбросить его обратно на «Юридическое лицо». Это происходит из-за того, что в обработчике события ПриИзменении для поля вида контрагента прописана жесткая логика распределения состояний.

Разберем, как это исправить. Нам нужно найти обработчик ВидПриИзменении на клиенте и соответствующий ему серверный вызов. Проанализируем ситуацию: система должна понимать, что ГосОрган — это валидное состояние. Нам потребуется добавить условие «Если».


&НаКлиенте
Процедура ВидПриИзменении(Элемент)
    // Стандартная логика может перезаписывать значение. 
    // Нам нужно убедиться, что наш новый вид корректно обрабатывается.
    Если Объект.Вид = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ГосОрган") Тогда
        // Здесь мы задаем поведение для нашего вида
        УстановитьВидимостьПолейДляГосОргана();
    КонецЕсли;
КонецПроцедуры

Шаг 3: Динамическое управление видимостью реквизитов

Форма контрагента в БП 3.0 очень сложная. В зависимости от вида (ЮрЛицо или ФизЛицо) скрываются или отображаются целые группы полей (ИНН, КПП, паспортные данные, ОГРН). Проанализируем, что должен видеть пользователь при выборе «ГосОргана».

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

Выясним причину возможного отсутствия полей: система использует функции типа ЭтоЮридическоеЛицо = (Вид = Перечисления.ЮридическоеФизическоеЛицо.ЮрЛицо). Нам нужно дополнить эти выражения:


ЭтоЮрЛицоИлиГосОрган = (Объект.Вид = Перечисления.ЮридическоеФизическоеЛицо.ЮрЛицо) 
                     ИЛИ (Объект.Вид = Перечисления.ЮридическоеФизическоеЛицо.ГосОрган);

Шаг 4: Риски и влияние на отчетность

Нужно четко понимать, что изменение базового перечисления ЮридическоеФизическоеЛицо — это серьезное вмешательство. Рассмотрим основные риски:

Рекомендации по правильному внедрению

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

  1. Использование дополнительных реквизитов: Вместо изменения перечисления можно добавить дополнительный реквизит (признак) «Это государственный орган» через стандартный механизм «Дополнительные сведения и реквизиты». Это не требует программирования и не ломает логику системы.
  2. Расширение существующего вида: Оставить вид «Юридическое лицо», но добавить уточняющий признак. Госорганы по своей сути являются юридическими лицами, и для целей учета (ИНН, банковские счета, договоры) их свойств в типовой БП 3.0 обычно достаточно.

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

← На главную