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