Чтобы подключить печать комплекта документов в 1С:ERP, УТ 11 или Комплексной автоматизации к своему документу, мало добавить две команды печати. Нужно описать состав комплекта, научить модуль менеджера формировать комплект и печатать его через процедуру Печать, зарегистрировать документ в регистре сведений НастройкиПечатиОбъектов и проверить, что каждая печатная форма размечает табличный документ по объектам печати. Всего семь шагов; образец для копирования — модуль менеджера документа РеализацияТоваровИУслуг.

Ниже разберу каждый шаг на примере документа ПриходныйОрдерНаТовары и отдельно — ошибки, на которых обычно спотыкаются.

Как устроена печать комплектов

Механизм состоит из трёх частей:

ЧастьГде находитсяЗа что отвечает
Команды «Комплект документов на принтер» и «с настройкой»ДобавитьКомандыПечати модуля менеджераКнопки в подменю «Печать»
Состав комплекта и количество экземпляровРегистр НастройкиПечатиОбъектовКакие формы входят по умолчанию и что сохранил пользователь
ФормированиеМодуль менеджера документаСобирает табличные документы всех форм комплекта

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

Код ниже — по мотивам ERP 2.4. В других релизах имена служебных процедур могут отличаться, поэтому перед доработкой я всегда сверяюсь с модулем РеализацияТоваровИУслуг в конкретной базе.

Шаг 1. Команды печати комплекта

В процедуре ДобавитьКомандыПечати модуля менеджера добавляем две команды. Ключевые свойства — обработчик (клиентские процедуры прикладной подсистемы печати) и порядок: комплекты принято ставить в начало списка.

1С
// Комплект документов сразу на принтер
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "КомплектДокументов";
КомандаПечати.Представление = НСтр("ru = 'Комплект документов на принтер'");
КомандаПечати.Обработчик = "УправлениеПечатьюУТКлиент.ПечатьКомплектаДокументов";
КомандаПечати.МенеджерПечати = "";
КомандаПечати.СразуНаПринтер = Истина;
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.Порядок = 1;

// Комплект документов с выбором состава и предпросмотром
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "КомплектДокументовСНастройкой";
КомандаПечати.Представление = НСтр("ru = 'Комплект документов с настройкой...'");
КомандаПечати.Обработчик = "УправлениеПечатьюУТКлиент.ПечатьКомплектаДокументовСНастройкой";
КомандаПечати.МенеджерПечати = "";
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.Порядок = 2;

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

Шаг 2. Состав комплекта по умолчанию

В модуле менеджера нужна экспортная функция КомплектПечатныхФорм, которая перечисляет формы, доступные для включения в комплект. Каждая форма добавляется методом регистра НастройкиПечатиОбъектов:

1С
РегистрыСведений.НастройкиПечатиОбъектов.ДобавитьПечатнуюФормуВКомплект(
	КомплектПечатныхФорм,
	"ПриходныйОрдерНаТовары",
	НСтр("ru = 'Приходный ордер на товары'"),
	1); // количество экземпляров по умолчанию; 0 — форма доступна, но не отмечена

Обрамление функции (создание пустой таблицы комплекта и возврат результата) скопируйте из документа-образца — оно зависит от релиза.

Шаг 3. Функция формирования комплекта

Экспортная функция СформироватьКомплектПечатныхФорм сначала определяет, какой комплект печатать: выбранный пользователем в диалоге (передаётся адресом во временном хранилище) или сохранённый в настройках.

1С
АдресКомплекта = Неопределено;
Если ТипЗнч(ПараметрыПечати) = Тип("Структура")
	И ПараметрыПечати.Свойство("АдресКомплектаПечатныхФорм", АдресКомплекта) Тогда
	// Состав выбран в диалоге «с настройкой»
	КомплектПечатныхФорм = ПолучитьИзВременногоХранилища(АдресКомплекта);
Иначе
	// Состав из сохранённых настроек печати объекта
	КомплектПечатныхФорм = РегистрыСведений.НастройкиПечатиОбъектов.КомплектПечатныхФорм(
		Метаданные.Документы.ПриходныйОрдерНаТовары.ПолноеИмя(),
		МассивОбъектов,
		Неопределено);
КонецЕсли;

Если КомплектПечатныхФорм = Неопределено Тогда
	Возврат Неопределено;
КонецЕсли;

Затем по каждой форме комплекта формируем табличный документ и кладём его в коллекцию печатных форм БСП:

1С
КомплектыПоОбъектам = РегистрыСведений.НастройкиПечатиОбъектов.КомплектыПечатиПоОбъектам(
	КоллекцияПечатныхФорм,
	КомплектПечатныхФорм,
	МассивОбъектов,
	"ПриходныйОрдерНаТовары");

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

Если в комплекте несколько разных форм, внутри цикла выбирайте функцию формирования по КомплектПечати.Имя.

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

Шаг 4. Поддержка комплекта в процедуре «Печать»

При печати с настройкой форма предпросмотра вызывает Печать модуля менеджера с идентификатором КомплектДокументов. Добавляем ветку:

1С
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

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

	// ... обработка остальных печатных форм документа

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

Очистить() обязателен: в коллекции лежит строка-заглушка с идентификатором комплекта, которую надо заменить реальными формами.

Шаг 5. Регистрация документа в НастройкиПечатиОбъектов

Документ должен попасть в список объектов, поддерживающих комплектную печать. Это делается в модуле менеджера регистра НастройкиПечатиОбъектов, в процедуре ТаблицаОбъектовДляПечатиКомплектно:

1С
НоваяСтрока = ТаблицаОбъектов.Добавить();
НоваяСтрока.ТипОбъекта = Метаданные.Документы.ПриходныйОрдерНаТовары.ПолноеИмя();
НоваяСтрока.Представление = Метаданные.Документы.ПриходныйОрдерНаТовары.Представление();
НоваяСтрока.ЕстьОрганизация = Ложь;
НоваяСтрока.ЕстьПартнер = Ложь;

Флаги ЕстьОрганизация и ЕстьПартнер определяют, можно ли настраивать состав комплекта отдельно по организации и по партнёру. У приходного ордера нет партнёра, поэтому оба флага сняты; для документов продаж их обычно включают.

Шаг 6. Исключаем формы с дополнительными диалогами

Некоторые формы перед печатью спрашивают параметры: «Ценники», «Этикетки», формы с выбором вида цен. В пакетном режиме ответить на вопрос некому, поэтому такие формы либо не добавляют в КомплектПечатныхФорм, либо дорабатывают так, чтобы при печати в составе комплекта они брали параметры по умолчанию.

Шаг 7. Разметка областей по объектам печати

Последний и самый коварный шаг. Каждая функция формирования печатной формы должна размечать табличный документ по объектам — после вывода каждого документа вызывать УправлениеПечатью.ЗадатьОбластьПечатиДокумента:

1С
Для Каждого Документ Из МассивОбъектов Цикл

	НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;

	// ... вывод областей макета по документу

	УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
		ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Документ);

КонецЦикла;

При обычной печати одной формы без разметки всё работает, поэтому её часто пропускают. Но комплект раскладывает листы разных форм по документам именно по этой разметке, и без неё печать падает с ошибкой.

Типичные ошибки

  • Команда есть, но ничего не печатает с настройкой. Не добавлена ветка КомплектДокументов в процедуру Печать (шаг 4).
  • Документ не появляется в настройках комплектов. Забыли шаг 5.
  • Ошибка только при комплектной печати. Нет ЗадатьОбластьПечатиДокумента в одной из форм (шаг 7).
  • Печать зависает или просит ввести данные. В комплект попала форма с диалогом (шаг 6).
  • После обновления доработка пропала. Правки вносились в типовые модули без расширения. Команды и регистрацию объекта удобнее держать в расширении с аннотацией &После.

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

Итог

  • Печать комплектов — механизм УТ 11, КА 2 и ERP поверх подсистемы печати БСП; образец — документ РеализацияТоваровИУслуг.
  • Нужны две команды, функция состава комплекта, функция формирования и ветка в процедуре Печать.
  • Документ регистрируется в НастройкиПечатиОбъектов.ТаблицаОбъектовДляПечатиКомплектно.
  • Формы с диалогами исключаются из комплекта или дорабатываются.
  • Каждая печатная форма обязана размечать табличный документ через ЗадатьОбластьПечатиДокумента.