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