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

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

Разработка в 1С:ERP (а также в УТ 11 и КА 2) существенно отличается от разработки в простых конфигурациях. Одной из самых частых проблем, с которой сталкиваются начинающие разработчики, является ситуация, когда новый реквизит успешно добавлен в расширение и даже программно выведен на форму, но в пользовательском режиме он упорно не желает отображаться. Рассмотрим подробнее, почему так происходит и как правильно решить эту задачу.

Разберем архитектурную особенность: Партнеры и Контрагенты

Прежде чем приступать к кодингу, проанализируем структуру базы. В 1С:ERP существует два тесно связанных справочника: Партнеры и Контрагенты. Партнер — это управленческая сущность (группа компаний, холдинг), а Контрагент — юридическое лицо для регламентированного учета.

Выясним причину невидимости реквизита: в системе включена функциональная опция ИспользоватьПартнеровКакКонтрагентов (в интерфейсе это звучит как «Независимо вести партнеров и контрагентов»). Если эта опция выключена, то при попытке открыть карточку контрагента система выполняет «подмену». Вместо стандартной формы справочника Контрагенты открывается форма из справочника Партнеры, которая специально адаптирована для ввода данных юридического лица.

Шаг 1. Точное определение открытой формы

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

  1. Запустим 1С:Предприятие и откроем карточку контрагента, в которую нужно добавить поле.
  2. В правом верхнем углу нажмем на кнопку «Сервис и настройки» (три вертикальные точки или стрелка).
  3. Выберем пункт Функции для технического специалиста (если пункт недоступен, его нужно включить в настройках параметров системы).
  4. В окне информации о форме мы увидим ее полное имя. Скорее всего, это будет Справочник.Партнеры.Форма.ФормаЭлементаРеквизитыКонтрагента.

Важный момент: если вы добавляли реквизит в форму справочника Контрагенты, а система открывает форму Партнеры, ваш реквизит никогда там не появится автоматически, так как это физически разные объекты метаданных.

Шаг 2. Добавление реквизита в расширение

Теперь, когда мы определили «виновника», приступим к доработке. Нам необходимо добавить наш реквизит в оба места (если мы хотим хранить данные именно в контрагенте):

Шаг 3. Программный вывод реквизита на форму

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

Посмотрим на пример кода, который позволит нам безопасно добавить элемент на форму:


&После("ПриСозданииНаСервере")
Процедура АВ_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Определим группу, в которую хотим поместить наш реквизит
    ИмяГруппы = "ГруппаЮридическийАдрес"; // Или любая другая существующая группа на форме
    ГруппаФормы = ЭтаФорма.Элементы.Найти(ИмяГруппы);
    
    Если ГруппаФормы <> Неопределено Тогда
        ИмяЭлемента = "АВ_ОКВЭД2";
        
        // Проверим, не добавлен ли элемент ранее
        Если ЭтаФорма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда
            НовыйЭлемент = ЭтаФорма.Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ГруппаФормы);
            НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
            
            // Указываем путь к данным. 
            // Если форма справочника Партнеры отображает данные Контрагента, 
            // путь может отличаться. Проверьте реквизиты формы!
            НовыйЭлемент.ПутьКДанным = "Объект.АВ_КлассификаторОКВЭД2";
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Шаг 4. Обеспечение связи данных

Проанализируем ситуацию: если форма принадлежит справочнику Партнеры, а реквизит мы добавили в Контрагенты, то просто указать Объект.ИмяРеквизита может быть недостаточно, так как Объект на форме — это Партнер.

В ERP форма ФормаЭлементаРеквизитыКонтрагента обычно содержит вспомогательный реквизит, хранящий ссылку на Контрагента. Нам необходимо:

  1. Убедиться, что значение из справочника Контрагенты считывается при открытии формы.
  2. Убедиться, что значение записывается обратно в справочник Контрагенты при нажатии кнопки «Записать».

Для этого в расширении формы используем следующие обработчики:


&После("ПриЧтенииНаСервере")
Процедура АВ_ПриЧтенииНаСервере(ТекущийОбъект)
    // Если на форме есть отдельный реквизит для отображения данных контрагента,
    // заполняем его значением из реального справочника Контрагенты
КонецПроцедуры

&Перед("ПередЗаписьюНаСервере")
Процедура АВ_ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    // Переносим значение из элемента формы в объект Контрагента перед фиксацией в базе
КонецПроцедуры

Шаг 5. Проверка прав и видимости

Если после всех манипуляций поле так и не появилось, проверим еще два важных момента:

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

← На главную