Почему добавленный реквизит не отображается в справочнике Контрагенты в 1С:КА 2 и ERP?

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

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

Анализ архитектуры: связь Партнеров и Контрагентов

Первое, что нам необходимо понять — это фундаментальное различие между управленческим и регламентированным учетом в современных решениях 1С. Для этого используются два справочника:

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

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

Разберем логику выбора формы

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

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

Пошаговое решение проблемы

Проанализируем алгоритм действий, который поможет найти «потерянный» реквизит:

Шаг 1. Проверка используемой формы через отладчик.
Не доверяйте только визуальному совпадению. Поставьте точку останова в процедуре ПриСозданииНаСервере той формы, которую вы правите. Если при открытии карточки в режиме предприятия отладка не сработала — значит, открывается совершенно другая форма. Чтобы понять, какая именно, можно воспользоваться кнопкой «Сервис и настройки» -> «Функции для технического специалиста» и открыть справочник напрямую, либо отследить вызов в процедурах БСП (Библиотеки стандартных подсистем).

Шаг 2. Добавление реквизита во вспомогательные формы.
Если вы выяснили, что открывается ФормаЭлементаРеквизитов, необходимо добавить ваш элемент именно на нее. В конфигурациях ERP и КА 2 основные юридические данные контрагента часто редактируются в отдельном окне, которое вызывается из карточки партнера. Найдите эту форму в списке форм справочника Контрагенты и перенесите туда ваш новый реквизит КлассКонтрагента или аналогичный.

Шаг 3. Синхронизация между Партнером и Контрагентом.
Если ваш реквизит имеет значение для управленческого учета, рассмотрим необходимость его дублирования в справочнике Партнеры. В режиме «Партнеры как контрагенты» важно, чтобы данные были консистентны. Хорошей практикой считается создание реквизита в обоих справочниках и написание кода по их синхронизации:


// В модуле объекта справочника Контрагенты
Процедура ПередЗаписью(Отказ)
    Если Не ЭтотОбъект.ОбменДанными.Загрузка Тогда
        // Пример синхронизации реквизита с Партнером
        ОбъектПартнер = ЭтотОбъект.Партнер.ПолучитьОбъект();
        Если ОбъектПартнер <> Неопределено Тогда
            ОбъектПартнер.ВашНовыйРеквизит = ЭтотОбъект.ВашНовыйРеквизит;
            ОбъектПартнер.Записать();
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Почему точка останова может вводить в заблуждение?

Важно помнить, что в 1С:Предприятии 8.3 форма может быть программно закрыта сразу после открытия или перенаправлена. Рассмотрим ситуацию: сработала процедура ПриОткрытии основной формы, но внутри кода стоит условие:


Если ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровКакКонтрагентов") Тогда
    ПараметрыФормы = Новый Структура("Ключ", Объект.Партнер);
    ОткрытьФорму("Справочник.Партнеры.ФормаОбъекта", ПараметрыФормы);
    Отказ = Истина; // Закрываем текущую форму контрагента
КонецЕсли;

В этом случае вы увидите срабатывание отладчика в форме контрагента, но перед глазами у вас в итоге окажется форма партнера. Именно поэтому добавление реквизита «напрямую» в одну форму часто не дает результата.

Рекомендации по разработке

Для стабильной работы и легкости обновлений придерживайтесь следующих правил:

  1. Используйте Расширения конфигурации вместо изменения типовых форм «напрямую». Это позволит избежать проблем при обновлении конфигурации.
  2. Если реквизит должен быть виден везде, добавляйте его в группу ГруппаОбщиеРеквизиты или аналогичные системные группы, которые программно выводятся на разные формы.
  3. Всегда проверяйте значение функциональной опции ИспользоватьПартнеровКакКонтрагентов в настройках системы (НСИ и администрирование -> Настройка НСИ и разделов -> CRM и маркетинг).

Таким образом, решение задачи кроется не в программных ошибках Visibility, а в понимании сложной структуры метаданных и логики переключения интерфейсов в современных учетных системах 1С.

← На главную