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