В процессе сопровождения сложных конфигураций 1С, таких как «Управление производственным предприятием» (УПП 1.3), разработчики часто сталкиваются с ситуацией, когда к документу привязано множество внешних печатных форм. Если названия обработок в справочнике неинформативны или их слишком много, поиск конкретного файла, отвечающего за формирование печатного листа, становится нетривиальной задачей. Рассмотрим подробнее несколько эффективных способов определения нужной внешней обработки.
Чаще всего кнопки печати в конфигурациях на обычных формах формируются динамически при открытии документа. Чтобы понять, какой программный код вызывается при нажатии на кнопку, мы можем исследовать состав командной панели через отладчик. Проанализируем этот процесс по шагам.
ПриОткрытии.ЭлементыФормы.ОсновныеДействияФормы.Кнопки (название командной панели может отличаться, например, ДействияФормы).Действие.Разберем ситуацию, когда действие указывает на стандартную процедуру, например, ОсновныеДействияФормыПечать(Кнопка). Внутри этой процедуры обычно происходит вызов механизмов печати, где в параметрах (часто в переменной типа Структура или через Расшифровка) передается ссылка на элемент справочника «Внешние обработки».
В типовых решениях на обычных формах (УПП, КА 1.1, УТ 10.3) за формирование внешних печатных форм отвечает специализированный механизм. Если точка останова в модуле самого документа не дает быстрого ответа, нам следует обратиться к общему модулю УниверсальныеМеханизмы. Выясним причину, почему этот метод считается наиболее надежным.
Найдем функцию НапечататьВнешнююФорму. Именно здесь система извлекает двоичные данные обработки из базы и подготавливает их к запуску. Поставим точку останова внутри этой функции. Проанализируем параметр ИсточникМакета. В нем, как правило, содержится ссылка на элемент справочника ВнешниеОбработки. Получив ссылку, мы можем легко найти объект в интерфейсе программы по его внутреннему идентификатору (коду) или наименованию.
Пример кода, который можно встретить в подобных механизмах:
// Пример логики поиска внешней формы
Если ТипЗнч(ИсточникМакета) = Тип("СправочникСсылка.ВнешниеОбработки") Тогда
Сообщить("Используется обработка: " + ИсточникМакета.Наименование);
КонецЕсли;
Рассмотрим интересный и быстрый способ, который не требует глубокого погружения в код конфигурации. Когда 1С запускает внешнюю печатную форму, она предварительно выгружает файл .epf из хранилища значений во временную папку пользователя на локальном диске.
%TEMP% или C:\Users\ИмяПользователя\AppData\Local\Temp)..epf и случайным именем (например, v8_2BC4_12.epf).Этот файл и есть та самая обработка, которая выполняется в данный момент. Вы можете скопировать его, открыть в конфигураторе и изучить алгоритм работы или макеты. Это отличный способ, если нужно быстро внести правки, не разыскивая оригинал в справочнике.
Если визуальный поиск в справочнике затруднен, а отладка занимает много времени, проанализируем ситуацию с помощью запроса. Внешние обработки имеют таблицу принадлежности к объектам метаданных. Мы можем написать запрос к табличной части справочника ВнешниеОбработки, чтобы увидеть все формы, зарегистрированные для конкретного документа.
Пример структуры запроса (для обычных форм):
ВЫБРАТЬ
ВнешниеОбработкиПринадлежность.Ссылка.Наименование КАК НазваниеОбработки,
ВнешниеОбработкиПринадлежность.ПредставлениеОбъекта КАК Документ
ИЗ
Справочник.ВнешниеОбработки.Принадлежность КАК ВнешниеОбработкиПринадлежность
ГДЕ
ВнешниеОбработкиПринадлежность.Ссылка.ВидОбработки = ЗНАЧЕНИЕ(Перечисление.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма)
Для конфигураций на БСП (управляемые формы) логика аналогична, но запрос следует делать к справочнику ДополнительныеОтчетыИОбработки и его табличным частям Назначение или Команды.
Выясним еще один метод, который помогает в самых запутанных случаях. Если стандартные точки останова не срабатывают (например, из-за использования Выполнить() или сложных динамических вызовов), воспользуемся замером производительности.
В колонке «Исходный текст» или «Модуль» часто будут видны пути к временным файлам .epf. Это даст вам точную наводку на то, какой программный код отрабатывал последним перед выводом результата на экран.
Важный момент: В УПП 1.3 внешние формы могут быть настроены как «Заменяющие стандартную печатную форму». В этом случае при нажатии на стандартную кнопку «Печать» (которая кажется встроенной в конфигурацию) на самом деле вызывается внешняя обработка. Всегда проверяйте флаг Заменять стандартную печатную форму в карточке справочника «Внешние обработки», если поведение типовой печати кажется вам измененным.