При доработке типовых конфигураций на базе 1С:Предприятие (в частности, «Управление торговлей 11», «ERP Управление предприятием» или «Комплексная автоматизация») разработчики часто сталкиваются с ситуацией: в конфигураторе на форму элемента справочника Контрагенты добавляется новая группа или вкладка, но при открытии карточки в режиме «1С:Предприятие» внесенные изменения отсутствуют. При этом на экране отображаются совершенно другие поля и структуры вкладок.
Рассмотрим подробно причины такого поведения системы, разберем программные механизмы перенаправления и выясним, как правильно решить эту задачу без нарушения типовой логики учетной системы.
В конфигурации «Управление торговлей 11» реализовано четкое разделение управленческого и регламентированного учета контрагентов:
В зависимости от настроек системы работа с этими справочниками может происходить совместно или раздельно. За это отвечает функциональная опция ИспользоватьПартнеровКакКонтрагентов.
Когда опция включена, система считает, что партнер и контрагент — это единая сущность для пользователя. В этот момент при попытке открыть форму элемента справочника Контрагенты программа срабатывает на перехват события и перенаправляет пользователя на форму справочника Партнеры.
Проанализируем модуль формы элемента справочника Контрагенты. В процедуре ПриОткрытии прописана следующая логика:
Процедура ПриОткрытии(Отказ)
// СтандартныеПодсистемы.Свойства
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
// Конец СтандартныеПодсистемы.Свойства
Если ИспользоватьПартнеровКакКонтрагентов Тогда
Отказ = Истина;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", Объект.Партнер);
ПараметрыФормы.Вставить("ИНН", Объект.ИНН);
ПараметрыФормы.Вставить("Наименование", Объект.Наименование);
ИмяФормыДляОткрытия = ?(Объект.Ссылка.Пустая(), "Форма.ПомощникНового", "ФормаОбъекта");
ОткрытьФорму("Справочник.Партнеры." + ИмяФормыДляОткрытия, ПараметрыФормы, );
Возврат;
КонецЕсли;
КонецПроцедуры
В процедуре ПриСозданииНаСервере значение переменной инициализируется с помощью чтения функциональной опции:
ИспользоватьПартнеровКакКонтрагентов = ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровКакКонтрагентов");
Таким образом, если значение функциональной опции равно Истина, форма справочника Контрагенты отменяет свое открытие (переменная Отказ = Истина) и вместо себя открывает форму объекта справочника Партнеры. Добавленные нами реквизиты и вкладки остаются на неактивной форме контрагента и физически не отображаются пользователю.
Значение функциональной опции ИспользоватьПартнеровКакКонтрагентов хранится в одноименной константе и регулируется пользовательской настройкой программы.
Важно: Не следует комментировать код в конфигураторе или вручную менять значение константы через отладчик, так как это нарушит целостность данных и синхронизацию пар «Партнер — Контрагент» при оформлении документов.
Для управления этим режимом выполним следующие шаги в режиме «1С:Предприятие»:
ИспользоватьПартнеровКакКонтрагентов = Истина), и система открывает форму Партнера.ИспользоватьПартнеровКакКонтрагентов = Ложь), и при вызове контрагента открывается именно форма справочника Контрагенты.Выбор способа решения зависит от того, какой режим работы принят в конкретной базе данных:
Контрагенты бессмысленно. Новую вкладку и реквизиты необходимо добавлять на форму элемента справочника Партнеры.Партнеры и Контрагенты) и продублировать отображение нужных данных, чтобы вкладка была доступна при любых настройках системы.