Как найти внешнюю печатную форму, вызываемую из формы документа

Программист 1С v8.3 (Обычные формы)
← На главную

В процессе сопровождения сложных конфигураций 1С, таких как «Управление производственным предприятием» (УПП 1.3), разработчики часто сталкиваются с ситуацией, когда к документу привязано множество внешних печатных форм. Если названия обработок в справочнике неинформативны или их слишком много, поиск конкретного файла, отвечающего за формирование печатного листа, становится нетривиальной задачей. Рассмотрим подробнее несколько эффективных способов определения нужной внешней обработки.

Способ 1. Анализ элементов формы и действий командной панели

Чаще всего кнопки печати в конфигурациях на обычных формах формируются динамически при открытии документа. Чтобы понять, какой программный код вызывается при нажатии на кнопку, мы можем исследовать состав командной панели через отладчик. Проанализируем этот процесс по шагам.

  1. Откроем модуль формы интересующего нас документа и найдем процедуру ПриОткрытии.
  2. Поставим точку останова в самом конце этой процедуры. Это важно, так как кнопки меню «Печать» обычно создаются программно в процессе инициализации формы.
  3. Запустим документ в режиме «Предприятие». Когда выполнение кода остановится на точке останова, воспользуемся окном «Вычислить выражение» (Shift+F9).
  4. Введем выражение ЭлементыФормы.ОсновныеДействияФормы.Кнопки (название командной панели может отличаться, например, ДействияФормы).
  5. Найдем в списке кнопку «Печать» и изучим ее подменю. Нас интересует свойство Действие.

Разберем ситуацию, когда действие указывает на стандартную процедуру, например, ОсновныеДействияФормыПечать(Кнопка). Внутри этой процедуры обычно происходит вызов механизмов печати, где в параметрах (часто в переменной типа Структура или через Расшифровка) передается ссылка на элемент справочника «Внешние обработки».

Способ 2. Отладка через общий модуль «УниверсальныеМеханизмы»

В типовых решениях на обычных формах (УПП, КА 1.1, УТ 10.3) за формирование внешних печатных форм отвечает специализированный механизм. Если точка останова в модуле самого документа не дает быстрого ответа, нам следует обратиться к общему модулю УниверсальныеМеханизмы. Выясним причину, почему этот метод считается наиболее надежным.

Найдем функцию НапечататьВнешнююФорму. Именно здесь система извлекает двоичные данные обработки из базы и подготавливает их к запуску. Поставим точку останова внутри этой функции. Проанализируем параметр ИсточникМакета. В нем, как правило, содержится ссылка на элемент справочника ВнешниеОбработки. Получив ссылку, мы можем легко найти объект в интерфейсе программы по его внутреннему идентификатору (коду) или наименованию.

Пример кода, который можно встретить в подобных механизмах:


// Пример логики поиска внешней формы
Если ТипЗнч(ИсточникМакета) = Тип("СправочникСсылка.ВнешниеОбработки") Тогда
    Сообщить("Используется обработка: " + ИсточникМакета.Наименование);
КонецЕсли;

Способ 3. Поиск через временные файлы системы

Рассмотрим интересный и быстрый способ, который не требует глубокого погружения в код конфигурации. Когда 1С запускает внешнюю печатную форму, она предварительно выгружает файл .epf из хранилища значений во временную папку пользователя на локальном диске.

  1. Откройте папку временных файлов вашего профиля Windows (обычно это путь %TEMP% или C:\Users\ИмяПользователя\AppData\Local\Temp).
  2. Очистите папку от старых файлов (по возможности) или просто отсортируйте список по дате изменения.
  3. Нажмите кнопку «Печать» в документе 1С.
  4. В момент формирования формы в папке появится новый файл с расширением .epf и случайным именем (например, v8_2BC4_12.epf).

Этот файл и есть та самая обработка, которая выполняется в данный момент. Вы можете скопировать его, открыть в конфигураторе и изучить алгоритм работы или макеты. Это отличный способ, если нужно быстро внести правки, не разыскивая оригинал в справочнике.

Способ 4. Использование консоли запросов

Если визуальный поиск в справочнике затруднен, а отладка занимает много времени, проанализируем ситуацию с помощью запроса. Внешние обработки имеют таблицу принадлежности к объектам метаданных. Мы можем написать запрос к табличной части справочника ВнешниеОбработки, чтобы увидеть все формы, зарегистрированные для конкретного документа.

Пример структуры запроса (для обычных форм):


ВЫБРАТЬ
    ВнешниеОбработкиПринадлежность.Ссылка.Наименование КАК НазваниеОбработки,
    ВнешниеОбработкиПринадлежность.ПредставлениеОбъекта КАК Документ
ИЗ
    Справочник.ВнешниеОбработки.Принадлежность КАК ВнешниеОбработкиПринадлежность
ГДЕ
    ВнешниеОбработкиПринадлежность.Ссылка.ВидОбработки = ЗНАЧЕНИЕ(Перечисление.ВидыДополнительныхВнешнихОбработок.ПечатнаяФорма)

Для конфигураций на БСП (управляемые формы) логика аналогична, но запрос следует делать к справочнику ДополнительныеОтчетыИОбработки и его табличным частям Назначение или Команды.

Способ 5. Замер производительности

Выясним еще один метод, который помогает в самых запутанных случаях. Если стандартные точки останова не срабатывают (например, из-за использования Выполнить() или сложных динамических вызовов), воспользуемся замером производительности.

  1. Включите замер производительности (Отладка — Замер производительности).
  2. Нажмите кнопку печати в форме.
  3. Сразу после появления печатной формы или окна с ошибкой остановите замер.
  4. В результатах замера найдите строки кода, которые выполнялись дольше всего или вызывались из внешних файлов.

В колонке «Исходный текст» или «Модуль» часто будут видны пути к временным файлам .epf. Это даст вам точную наводку на то, какой программный код отрабатывал последним перед выводом результата на экран.

Важный момент: В УПП 1.3 внешние формы могут быть настроены как «Заменяющие стандартную печатную форму». В этом случае при нажатии на стандартную кнопку «Печать» (которая кажется встроенной в конфигурацию) на самом деле вызывается внешняя обработка. Всегда проверяйте флаг Заменять стандартную печатную форму в карточке справочника «Внешние обработки», если поведение типовой печати кажется вам измененным.

← На главную