Как реализовать групповую печать внешней печатной формы с отбором по номенклатуре в 1С:ERP?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

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

Постановка задачи и анализ механизмов

Прежде всего, разберем ситуацию. У нас есть внешняя печатная форма, зарегистрированная в справочнике ДополнительныеОтчетыИОбработки. Нам нужно создать отдельную обработку, в которой пользователь выберет номенклатуру, а система сама подберет документы (например, "Заказы клиентов" или "Реализации товаров и услуг") и сформирует для них печатные листы. Главная сложность здесь заключается в том, что внешняя печатная форма — это не просто макет, а отдельный объект с собственной логикой, и нам нужно правильно к нему обратиться через программный интерфейс БСП.

Шаг 1. Получение списка документов с отбором по номенклатуре

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	РеализацияТоваровУслугТовары.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
    |ГДЕ
    |	РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура";

Запрос.УстановитьПараметр("Номенклатура", ВыбраннаяНоменклатура);
РезультатЗапроса = Запрос.Выполнить();
МассивОбъектов = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка");

Важно: Мы используем ВЫБРАТЬ РАЗЛИЧНЫЕ, так как в одном документе одна и та же номенклатура может встречаться в нескольких строках, а для печати нам нужен уникальный список ссылок.

Шаг 2. Как программно "подступиться" к внешней печатной форме

В ERP за логику печати больше не отвечает мифический МодульПечати. Вместо него мы используем общие модули БСП. Чтобы вызвать внешнюю печатную форму, нам нужно получить ее экземпляр из справочника. Для этого используем функцию модуля ДополнительныеОтчетыИОбработки.

Разберем код получения объекта обработки:


// СсылкаНаВнешнююПФ - это ссылка на элемент справочника "Дополнительные отчеты и обработки"
ИмяОбъекта = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(СсылкаНаВнешнююПФ);
ВнешнийОбъект = ВнешниеОбработки.Создать(ИмяОбъекта);

Теперь у нас есть объект ВнешнийОбъект, у которого мы можем вызвать экспортную процедуру Печать. Но делать это нужно строго в соответствии со стандартами БСП.

Шаг 3. Подготовка структур данных для печати

Для корректной работы метода Печать нам необходимо подготовить четыре обязательных параметра:

  1. МассивОбъектов — массив ссылок на документы, который мы подготовили в первом шаге.
  2. КоллекцияПечатныхФорм — таблица, в которую будет помещен результат (табличный документ).
  3. ОбъектыПечати — список значений для связи строк табличного документа с объектами.
  4. ПараметрыВывода — структура с настройками (заголовок, копии и т.д.).

Выясним, как инициализировать эти структуры, используя стандартные функции модуля УправлениеПечатью:


// Создаем коллекцию печатных форм
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ИдентификаторКомандыИзВПФ");

// Подготавливаем структуру параметров вывода
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();

// Создаем список объектов печати
ОбъектыПечати = Новый СписокЗначений;

Обратите внимание: "ИдентификаторКомандыИзВПФ" должен в точности совпадать с тем идентификатором, который прописан в функции СведенияОВнешнейОбработке самой печатной формы.

Шаг 4. Выполнение печати и вывод результата

Теперь мы готовы вызвать основную процедуру. Мы вызываем ее непосредственно из модуля объекта внешней обработки. После выполнения процедуры табличный документ будет находиться внутри нашей коллекции.


// Вызываем печать
ВнешнийОбъект.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);

// Извлекаем результат
Если КоллекцияПечатныхФорм.Количество() > 0 Тогда
    ТабличныйДокумент = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
    ТабличныйДокумент.Показать("Печать карточек по номенклатуре");
КонецЕсли;

Особенности работы в ERP и безопасный режим

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

Также стоит помнить, что в ERP 2.5 вместо старых общих модулей печати рекомендуется использовать УправлениеПечатьюБСП для серверных операций и УправлениеПечатьюКлиент для вызова диалогов на стороне клиента. Если вам нужно просто открыть стандартное окно печати 1С с предварительным просмотром, можно воспользоваться методом УправлениеПечатьюКлиент.ВыполнитьКомандуПечати, передав туда имя менеджера и массив ссылок.

Резюме

Для реализации групповой печати с отбором выполните следующие действия:

  1. Сформируйте Запрос к базе данных для получения списка документов по нужной номенклатуре.
  2. Используйте метод ПодключитьВнешнююОбработку из БСП для доступа к логике внешней печатной формы.
  3. Подготовьте стандартные структуры КоллекцияПечатныхФорм и ПараметрыВывода.
  4. Передайте собранный МассивОбъектов в экспортную процедуру Печать модуля объекта внешней ПФ.
  5. Выведите полученный ТабличныйДокумент на экран или отправьте на принтер.

Такой подход полностью соответствует стандартам разработки 1С и обеспечивает корректную работу в конфигурациях на базе БСП.

← На главную