При работе в современных конфигурациях на базе 1С:ERP 2.5 или других решениях, использующих Библиотеку стандартных подсистем (БСП), часто возникает задача автоматизации печати. Одной из типовых задач является создание обработки, которая должна найти все документы, содержащие определенную номенклатуру, и отправить их на печать, используя уже существующую внешнюю печатную форму (ВПФ). Рассмотрим подробно, как это реализовать программно, какие модули использовать и как правильно передать параметры.
Прежде всего, разберем ситуацию. У нас есть внешняя печатная форма, зарегистрированная в справочнике ДополнительныеОтчетыИОбработки. Нам нужно создать отдельную обработку, в которой пользователь выберет номенклатуру, а система сама подберет документы (например, "Заказы клиентов" или "Реализации товаров и услуг") и сформирует для них печатные листы. Главная сложность здесь заключается в том, что внешняя печатная форма — это не просто макет, а отдельный объект с собственной логикой, и нам нужно правильно к нему обратиться через программный интерфейс БСП.
Первым делом проанализируем, как собрать массив документов, которые мы будем передавать на печать. Для этого нам потребуется выполнить запрос к табличной части нужного документа. Рассмотрим пример для документа РеализацияТоваровУслуг.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РеализацияТоваровУслугТовары.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
| РеализацияТоваровУслугТовары.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", ВыбраннаяНоменклатура);
РезультатЗапроса = Запрос.Выполнить();
МассивОбъектов = РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Ссылка");
Важно: Мы используем ВЫБРАТЬ РАЗЛИЧНЫЕ, так как в одном документе одна и та же номенклатура может встречаться в нескольких строках, а для печати нам нужен уникальный список ссылок.
В ERP за логику печати больше не отвечает мифический МодульПечати. Вместо него мы используем общие модули БСП. Чтобы вызвать внешнюю печатную форму, нам нужно получить ее экземпляр из справочника. Для этого используем функцию модуля ДополнительныеОтчетыИОбработки.
Разберем код получения объекта обработки:
// СсылкаНаВнешнююПФ - это ссылка на элемент справочника "Дополнительные отчеты и обработки"
ИмяОбъекта = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(СсылкаНаВнешнююПФ);
ВнешнийОбъект = ВнешниеОбработки.Создать(ИмяОбъекта);
Теперь у нас есть объект ВнешнийОбъект, у которого мы можем вызвать экспортную процедуру Печать. Но делать это нужно строго в соответствии со стандартами БСП.
Для корректной работы метода Печать нам необходимо подготовить четыре обязательных параметра:
Выясним, как инициализировать эти структуры, используя стандартные функции модуля УправлениеПечатью:
// Создаем коллекцию печатных форм
КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("ИдентификаторКомандыИзВПФ");
// Подготавливаем структуру параметров вывода
ПараметрыВывода = УправлениеПечатью.ПодготовитьСтруктуруПараметровВывода();
// Создаем список объектов печати
ОбъектыПечати = Новый СписокЗначений;
Обратите внимание: "ИдентификаторКомандыИзВПФ" должен в точности совпадать с тем идентификатором, который прописан в функции СведенияОВнешнейОбработке самой печатной формы.
Теперь мы готовы вызвать основную процедуру. Мы вызываем ее непосредственно из модуля объекта внешней обработки. После выполнения процедуры табличный документ будет находиться внутри нашей коллекции.
// Вызываем печать
ВнешнийОбъект.Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
// Извлекаем результат
Если КоллекцияПечатныхФорм.Количество() > 0 Тогда
ТабличныйДокумент = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
ТабличныйДокумент.Показать("Печать карточек по номенклатуре");
КонецЕсли;
Проанализируем важный нюанс: внешние обработки в ERP часто подключаются в безопасном режиме. Если ваша логика отбора или формирования печатной формы требует обращения к файловой системе или специфическим серверным вызовам, это может вызвать ошибку. В таких случаях в карточке дополнительной обработки следует проверить разрешения или временно отключить безопасный режим для отладки.
Также стоит помнить, что в ERP 2.5 вместо старых общих модулей печати рекомендуется использовать УправлениеПечатьюБСП для серверных операций и УправлениеПечатьюКлиент для вызова диалогов на стороне клиента. Если вам нужно просто открыть стандартное окно печати 1С с предварительным просмотром, можно воспользоваться методом УправлениеПечатьюКлиент.ВыполнитьКомандуПечати, передав туда имя менеджера и массив ссылок.
Для реализации групповой печати с отбором выполните следующие действия:
Запрос к базе данных для получения списка документов по нужной номенклатуре.ПодключитьВнешнююОбработку из БСП для доступа к логике внешней печатной формы.КоллекцияПечатныхФорм и ПараметрыВывода.МассивОбъектов в экспортную процедуру Печать модуля объекта внешней ПФ.ТабличныйДокумент на экран или отправьте на принтер.Такой подход полностью соответствует стандартам разработки 1С и обеспечивает корректную работу в конфигурациях на базе БСП.