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