Как создать внешнюю печатную форму (ВПФ) УПД для 1С:Бухгалтерии предприятия 3.0 в управляемом приложении?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

При работе в 1С:Бухгалтерии предприятия 3.0 (БП 3.0) в управляемом приложении часто возникает необходимость модифицировать стандартные печатные формы, например, Универсальный Передаточный Документ (УПД) (в этом поможет конструктор печатных форм в 1С без программирования). Чтобы внести изменения, не снимая конфигурацию с поддержки, мы используем механизм внешних печатных форм (ВПФ). Давайте рассмотрим подробнее, как создать такую ВПФ для УПД, основываясь на встроенной логике системы.

Создание внешней печатной формы – это процесс имитации работы встроенной печатной формы, но с возможностью изменения макета и логики без снятия конфигурации с поддержки. ВПФ в 1С:Предприятие 8.3 представляют собой внешние обработки или отчеты, которые содержат макеты и код для их заполнения. Они подключаются к конфигурации через стандартный механизм "Дополнительные отчеты и обработки" — для решения этой задачи доступен готовый набор внешних печатных форм УПД для 1С:Бухгалтерии 3.0.

Шаг 1: Идентификация основной функции формирования печатной формы УПД

Первым делом нам нужно найти, какая функция в типовой конфигурации отвечает за формирование табличного документа УПД. Классический способ – это поиск экспортной процедуры Печать в модуле менеджера соответствующего документа. Для УПД в БП 3.0 этот документ – Реализация товаров и услуг. Откройте конфигуратор, найдите документ РеализацияТоваровУслуг, затем его модуль менеджера.

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


Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "УниверсальныйПередаточныйДокументКомплект") Тогда
    ИменаФайлов = Неопределено;
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "УниверсальныйПередаточныйДокумент", "УПД", УчетНДС.ПечатьКомплектаУПД(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати, ИменаФайлов, ПараметрыПечати, ПараметрыВывода),,, ИменаФайлов);
КонецЕсли;

Здесь мы видим, что функция УчетНДС.ПечатьКомплектаУПД возвращает объект с типом ТабличныйДокумент. Это именно то, что нам нужно! Данная функция находится в общем модуле УчетНДС и является основной функцией, формирующей УПД. Мы можем рассматривать ее как эквивалент функции СформироватьПечатнуюФорму, о которой часто говорят при создании ВПФ.

Шаг 2: Создание структуры внешней печатной формы

Создадим новую внешнюю обработку в конфигураторе. Откройте файл – Новый – Внешняя обработка. Затем необходимо заполнить ее метаданные: название, синоним. Перейдите на вкладку "Сведения о внешней обработке". На этой вкладке мы указываем, что это печатная форма, прикрепляем ее к соответствующим объектам (например, к документу "Реализация товаров и услуг") и определяем команды печати.

  1. В поле Назначение укажите "ПечатнаяФорма".
  2. На вкладке Команды добавьте новую команду.
  3. Укажите Идентификатор команды (например, "ПечатьУПД") и Представление (например, "УПД (внешняя)").
  4. Установите флажок Использовать как "ВызовСерверногоМетода".
  5. В поле Модификатор выберите "Печать" (этот механизм позволяет, например, настроить вывод произвольного текста в поле «Основание»). Это означает, что при нажатии на кнопку печати будет вызываться наша процедура Печать.
  6. На вкладке Макеты добавьте макет печатной формы. Скопируйте существующий макет УПД из конфигурации в эту внешнюю обработку. Для этого можно открыть макет "УниверсальныйПередаточныйДокумент" документа "РеализацияТоваровУслуг", выделить все области и скопировать их в новый макет вашей ВПФ.

Шаг 3: Копирование основной функции и процедуры Печать

Теперь нам нужно скопировать функцию УчетНДС.ПечатьКомплектаУПД и все ее зависимости в модуль нашей внешней обработки. Откройте общий модуль УчетНДС в конфигураторе, найдите функцию ПечатьКомплектаУПД и скопируйте ее целиком в основной модуль вашей внешней обработки.

Далее, нам понадобится экспортная процедура Печать, которая будет вызываться системой 1С при запуске внешней печатной формы. Ее сигнатура должна соответствовать стандартным требованиям для ВПФ:


// Процедура вызывается при формировании печатной формы
//
// Параметры:
//  МассивОбъектов        - Массив       - ссылки на объекты, для которых формируются печатные формы.
//  ОбъектыПечати         - Структура    - структура объектов, по которым печатаем.
//  ПараметрыПечати       - Структура    - параметры печати.
//  КоллекцияПечатныхФорм - КоллекцияПечатныхФорм - коллекция, в которую необходимо добавить табличные документы.
//  ИменаФайлов           - Структура    - служебный параметр.
//  ДополнительныеПараметры - Структура - дополнительные параметры печати.
//
Процедура Печать(МассивОбъектов, ОбъектыПечати, ПараметрыПечати, КоллекцияПечатныхФорм, ИменаФайлов, ДополнительныеПараметры) Экспорт

    Для Каждого СсылкаНаОбъект Из МассивОбъектов Цикл
        // Здесь мы вызываем скопированную функцию
        // УчетНДС.ПечатьКомплектаУПД (теперь она в нашей ВПФ)
        ТабличныйДокумент = ПечатьКомплектаУПД(КоллекцияПечатныхФорм, МассивОбъектов, ОбъектыПечати, ИменаФайлов, ПараметрыПечати, ДополнительныеПараметры);

        // Мы можем вывести табличный документ напрямую:
        // ТабличныйДокумент.Показать();

        // Или, что предпочтительнее для интеграции со стандартным механизмом,
        // использовать УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию:
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "УниверсальныйПередаточныйДокумент", "УПД", ТабличныйДокумент);
    КонецЦикла;

КонецПроцедуры

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

Шаг 4: Разрешение зависимостей (итеративный процесс)

После копирования основной функции и попытки запуска ВПФ, вы почти наверняка столкнетесь с ошибками типа "Метод объекта не обнаружен" или "Переменная не определена". Это означает, что скопированная функция ПечатьКомплектаУПД вызывает другие функции или процедуры, которые не были скопированы вместе с ней и не доступны из контекста вашей внешней обработки.

Это самый трудоемкий, но и самый важный шаг. Выполняйте его итеративно:

  1. Запустите печать вашей ВПФ в пользовательском режиме.
  2. Получите ошибку.
  3. Прочитайте сообщение об ошибке: оно укажет на имя отсутствующей функции/процедуры и, возможно, на модуль, где она должна быть.
  4. Найдите эту функцию/процедуру в конфигураторе (часто в общих модулях, таких как УчетНДС, УправлениеПечатью, ОбщегоНазначения или в модулях объектов).
  5. Скопируйте найденную функцию/процедуру в модуль вашей внешней обработки.
  6. Повторяйте шаги 1-5, пока печатная форма не начнет формироваться без ошибок.

Ключевые моменты при разрешении зависимостей:

Шаг 5: Работа с макетами

Макет печатной формы (обычно с типом "МакетТабличногоДокумента") также нужно скопировать из конфигурации в ВПФ. Внутри модуля ВПФ доступ к макетам осуществляется через функцию ПолучитьМакет(). Убедитесь, что имя макета в вашей ВПФ совпадает с именем, которое ожидается в скопированном коде (или измените код, чтобы он ссылался на ваше новое имя макета).

Шаг 6: Отладка внешней печатной формы

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

  1. Откройте конфигуратор и перейдите в меню "Отладка" -> "Начать отладку".
  2. Установите точки останова (F9) в ключевых местах кода вашей ВПФ, особенно в процедуре Печать и в начале скопированных функций.
  3. В режиме предприятия (после запуска отладки) нажмите кнопку, которая запускает печать УПД через вашу ВПФ.
  4. Отладчик остановится на первой точке останова. Теперь мы можем пошагово (F10 - шаг через, F11 - шаг в) проходить по коду, просматривать значения переменных и выявлять проблемные участки.

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

Шаг 7: Финальные проверки

Прежде чем считать ВПФ готовой, убедитесь в следующем:

  1. Сведения о внешней обработке: Проверьте, что на вкладке "Команды" у вас добавлена команда, которая запускает вашу ВПФ, и ее "Идентификатор" соответствует имени процедуры, которую вы вызываете для печати (часто это "Печать" или другое осмысленное имя).
  2. Сигнатура процедуры Печать: Убедитесь, что ваша экспортная процедура Печать() в ВПФ имеет правильную сигнатуру, то есть принимает все необходимые параметры, которые передаются ей системой 1С при вызове внешней обработки. Обычно это МассивОбъектов, ОбъектыПечати, ПараметрыПечати, КоллекцияПечатныхФорм, ИменаФайлов, ДополнительныеПараметры. Отсутствие или неверный порядок параметров может привести к ошибкам выполнения.
  3. Доступность общих модулей: Помните, что из ВПФ доступны только экспортные функции общих модулей, доступные клиентскому или серверному вызову, в зависимости от контекста выполнения. Если вы копируете неэкспортные функции, они становятся частью вашей ВПФ.

Следуя этим шагам и методично разрешая зависимости, вы сможете успешно создать и модифицировать внешнюю печатную форму УПД для 1С:Бухгалтерии предприятия 3.0 — альтернативой ручной разработке служат готовые внешние печатные формы УПД и ТОРГ-12 для БП 3.0. Помните, что этот процесс требует внимательности и понимания структуры типовой конфигурации, но позволяет достичь гибкости в настройке форм без изменения самой конфигурации.

← На главную