При разработке в крупных конфигурациях, таких как 1С:Комплексная автоматизация 2 или 1С:ERP Управление предприятием, программисты часто сталкиваются с ситуацией: новый реквизит добавлен в метаданные справочника Контрагенты, размещен на форме, но при запуске приложения в пользовательском режиме его просто нет. При этом отладчик показывает, что свойства Видимость и Доступность установлены в значение Истина. Разберем по шагам, почему это происходит и как правильно вносить изменения в такие справочники.
Первое, что нам необходимо понять — это фундаментальное различие между управленческим и регламентированным учетом в современных решениях 1С. Для этого используются два справочника:
Партнера может быть множество Контрагентов.Проанализируем ситуацию, когда в настройках программы включена функциональная опция ИспользоватьПартнеровКакКонтрагентов. В этом режиме система старается скрыть от пользователя разделение на два справочника. Для пользователя существует единая карточка, но «под капотом» система управляет обоими объектами одновременно. Именно здесь кроется причина проблемы с видимостью реквизитов.
Выясним причину, по которой визуальный редактор форм в конфигураторе может нас обманывать. В типовых решениях часто реализован механизм перенаправления. Когда мы открываем карточку контрагента, система проверяет настройки. Если партнеры и контрагенты объединены, то вместо стандартной ФормаЭлемента справочника Контрагенты может открываться:
Партнеры.ФормаЭлементаРеквизитов справочника Контрагенты.Рассмотрим пример из практики. Программист добавляет реквизит на ФормаЭлемента, но при работе через интерфейс Партнеров система вызывает ФормаЭлементаРеквизитов. В итоге изменения в основной форме просто не задействуются в текущем контексте работы пользователя.
Проанализируем алгоритм действий, который поможет найти «потерянный» реквизит:
Шаг 1. Проверка используемой формы через отладчик.
Не доверяйте только визуальному совпадению. Поставьте точку останова в процедуре ПриСозданииНаСервере той формы, которую вы правите. Если при открытии карточки в режиме предприятия отладка не сработала — значит, открывается совершенно другая форма. Чтобы понять, какая именно, можно воспользоваться кнопкой «Сервис и настройки» -> «Функции для технического специалиста» и открыть справочник напрямую, либо отследить вызов в процедурах БСП (Библиотеки стандартных подсистем).
Шаг 2. Добавление реквизита во вспомогательные формы.
Если вы выяснили, что открывается ФормаЭлементаРеквизитов, необходимо добавить ваш элемент именно на нее. В конфигурациях ERP и КА 2 основные юридические данные контрагента часто редактируются в отдельном окне, которое вызывается из карточки партнера. Найдите эту форму в списке форм справочника Контрагенты и перенесите туда ваш новый реквизит КлассКонтрагента или аналогичный.
Шаг 3. Синхронизация между Партнером и Контрагентом.
Если ваш реквизит имеет значение для управленческого учета, рассмотрим необходимость его дублирования в справочнике Партнеры. В режиме «Партнеры как контрагенты» важно, чтобы данные были консистентны. Хорошей практикой считается создание реквизита в обоих справочниках и написание кода по их синхронизации:
// В модуле объекта справочника Контрагенты
Процедура ПередЗаписью(Отказ)
Если Не ЭтотОбъект.ОбменДанными.Загрузка Тогда
// Пример синхронизации реквизита с Партнером
ОбъектПартнер = ЭтотОбъект.Партнер.ПолучитьОбъект();
Если ОбъектПартнер <> Неопределено Тогда
ОбъектПартнер.ВашНовыйРеквизит = ЭтотОбъект.ВашНовыйРеквизит;
ОбъектПартнер.Записать();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Важно помнить, что в 1С:Предприятии 8.3 форма может быть программно закрыта сразу после открытия или перенаправлена. Рассмотрим ситуацию: сработала процедура ПриОткрытии основной формы, но внутри кода стоит условие:
Если ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровКакКонтрагентов") Тогда
ПараметрыФормы = Новый Структура("Ключ", Объект.Партнер);
ОткрытьФорму("Справочник.Партнеры.ФормаОбъекта", ПараметрыФормы);
Отказ = Истина; // Закрываем текущую форму контрагента
КонецЕсли;
В этом случае вы увидите срабатывание отладчика в форме контрагента, но перед глазами у вас в итоге окажется форма партнера. Именно поэтому добавление реквизита «напрямую» в одну форму часто не дает результата.
Для стабильной работы и легкости обновлений придерживайтесь следующих правил:
ГруппаОбщиеРеквизиты или аналогичные системные группы, которые программно выводятся на разные формы.ИспользоватьПартнеровКакКонтрагентов в настройках системы (НСИ и администрирование -> Настройка НСИ и разделов -> CRM и маркетинг).Таким образом, решение задачи кроется не в программных ошибках Visibility, а в понимании сложной структуры метаданных и логики переключения интерфейсов в современных учетных системах 1С.