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