Чтобы подключить печать комплекта документов в 1С:ERP, УТ 11 или Комплексной автоматизации к своему документу, мало добавить две команды печати. Нужно описать состав комплекта, научить модуль менеджера формировать комплект и печатать его через процедуру Печать, зарегистрировать документ в регистре сведений НастройкиПечатиОбъектов и проверить, что каждая печатная форма размечает табличный документ по объектам печати. Всего семь шагов; образец для копирования — модуль менеджера документа РеализацияТоваровИУслуг.
Ниже разберу каждый шаг на примере документа ПриходныйОрдерНаТовары и отдельно — ошибки, на которых обычно спотыкаются.
Как устроена печать комплектов
Механизм состоит из трёх частей:
| Часть | Где находится | За что отвечает |
|---|---|---|
| Команды «Комплект документов на принтер» и «с настройкой» | ДобавитьКомандыПечати модуля менеджера | Кнопки в подменю «Печать» |
| Состав комплекта и количество экземпляров | Регистр НастройкиПечатиОбъектов | Какие формы входят по умолчанию и что сохранил пользователь |
| Формирование | Модуль менеджера документа | Собирает табличные документы всех форм комплекта |
Есть две ветки исполнения. При печати сразу на принтер вызывается функция формирования комплекта напрямую. При печати с настройкой пользователь видит диалог состава, а затем — стандартную форму предпросмотра БСП, которая вызывает процедуру Печать модуля менеджера с идентификатором команды. Поэтому комплект нужно поддержать в обоих местах.
Код ниже — по мотивам ERP 2.4. В других релизах имена служебных процедур могут отличаться, поэтому перед доработкой я всегда сверяюсь с модулем РеализацияТоваровИУслуг в конкретной базе.
Шаг 1. Команды печати комплекта
В процедуре ДобавитьКомандыПечати модуля менеджера добавляем две команды. Ключевые свойства — обработчик (клиентские процедуры прикладной подсистемы печати) и порядок: комплекты принято ставить в начало списка.
// Комплект документов сразу на принтер
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "КомплектДокументов";
КомандаПечати.Представление = НСтр("ru = 'Комплект документов на принтер'");
КомандаПечати.Обработчик = "УправлениеПечатьюУТКлиент.ПечатьКомплектаДокументов";
КомандаПечати.МенеджерПечати = "";
КомандаПечати.СразуНаПринтер = Истина;
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.Порядок = 1;
// Комплект документов с выбором состава и предпросмотром
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Идентификатор = "КомплектДокументовСНастройкой";
КомандаПечати.Представление = НСтр("ru = 'Комплект документов с настройкой...'");
КомандаПечати.Обработчик = "УправлениеПечатьюУТКлиент.ПечатьКомплектаДокументовСНастройкой";
КомандаПечати.МенеджерПечати = "";
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.Порядок = 2;МенеджерПечати оставляем пустым: формированием управляет обработчик, а не стандартный вызов менеджера.
Шаг 2. Состав комплекта по умолчанию
В модуле менеджера нужна экспортная функция КомплектПечатныхФорм, которая перечисляет формы, доступные для включения в комплект. Каждая форма добавляется методом регистра НастройкиПечатиОбъектов:
РегистрыСведений.НастройкиПечатиОбъектов.ДобавитьПечатнуюФормуВКомплект(
КомплектПечатныхФорм,
"ПриходныйОрдерНаТовары",
НСтр("ru = 'Приходный ордер на товары'"),
1); // количество экземпляров по умолчанию; 0 — форма доступна, но не отмеченаОбрамление функции (создание пустой таблицы комплекта и возврат результата) скопируйте из документа-образца — оно зависит от релиза.
Шаг 3. Функция формирования комплекта
Экспортная функция СформироватьКомплектПечатныхФорм сначала определяет, какой комплект печатать: выбранный пользователем в диалоге (передаётся адресом во временном хранилище) или сохранённый в настройках.
АдресКомплекта = Неопределено;
Если ТипЗнч(ПараметрыПечати) = Тип("Структура")
И ПараметрыПечати.Свойство("АдресКомплектаПечатныхФорм", АдресКомплекта) Тогда
// Состав выбран в диалоге «с настройкой»
КомплектПечатныхФорм = ПолучитьИзВременногоХранилища(АдресКомплекта);
Иначе
// Состав из сохранённых настроек печати объекта
КомплектПечатныхФорм = РегистрыСведений.НастройкиПечатиОбъектов.КомплектПечатныхФорм(
Метаданные.Документы.ПриходныйОрдерНаТовары.ПолноеИмя(),
МассивОбъектов,
Неопределено);
КонецЕсли;
Если КомплектПечатныхФорм = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;Затем по каждой форме комплекта формируем табличный документ и кладём его в коллекцию печатных форм БСП:
КомплектыПоОбъектам = РегистрыСведений.НастройкиПечатиОбъектов.КомплектыПечатиПоОбъектам(
КоллекцияПечатныхФорм,
КомплектПечатныхФорм,
МассивОбъектов,
"ПриходныйОрдерНаТовары");
Для Каждого КомплектПечати Из КомплектыПоОбъектам Цикл
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
КомплектПечати.Имя,
КомплектПечати.Представление,
ПечатьПриходногоОрдера(МассивОбъектов, ОбъектыПечати));
КонецЦикла;Если в комплекте несколько разных форм, внутри цикла выбирайте функцию формирования по КомплектПечати.Имя.

Шаг 4. Поддержка комплекта в процедуре «Печать»
При печати с настройкой форма предпросмотра вызывает Печать модуля менеджера с идентификатором КомплектДокументов. Добавляем ветку:
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КомплектДокументов") Тогда
КоллекцияПечатныхФорм.Очистить();
СформироватьКомплектПечатныхФорм(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати);
Возврат;
КонецЕсли;
// ... обработка остальных печатных форм документа
КонецПроцедурыОчистить() обязателен: в коллекции лежит строка-заглушка с идентификатором комплекта, которую надо заменить реальными формами.
Шаг 5. Регистрация документа в НастройкиПечатиОбъектов
Документ должен попасть в список объектов, поддерживающих комплектную печать. Это делается в модуле менеджера регистра НастройкиПечатиОбъектов, в процедуре ТаблицаОбъектовДляПечатиКомплектно:
НоваяСтрока = ТаблицаОбъектов.Добавить();
НоваяСтрока.ТипОбъекта = Метаданные.Документы.ПриходныйОрдерНаТовары.ПолноеИмя();
НоваяСтрока.Представление = Метаданные.Документы.ПриходныйОрдерНаТовары.Представление();
НоваяСтрока.ЕстьОрганизация = Ложь;
НоваяСтрока.ЕстьПартнер = Ложь;Флаги ЕстьОрганизация и ЕстьПартнер определяют, можно ли настраивать состав комплекта отдельно по организации и по партнёру. У приходного ордера нет партнёра, поэтому оба флага сняты; для документов продаж их обычно включают.
Шаг 6. Исключаем формы с дополнительными диалогами
Некоторые формы перед печатью спрашивают параметры: «Ценники», «Этикетки», формы с выбором вида цен. В пакетном режиме ответить на вопрос некому, поэтому такие формы либо не добавляют в КомплектПечатныхФорм, либо дорабатывают так, чтобы при печати в составе комплекта они брали параметры по умолчанию.
Шаг 7. Разметка областей по объектам печати
Последний и самый коварный шаг. Каждая функция формирования печатной формы должна размечать табличный документ по объектам — после вывода каждого документа вызывать УправлениеПечатью.ЗадатьОбластьПечатиДокумента:
Для Каждого Документ Из МассивОбъектов Цикл
НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1;
// ... вывод областей макета по документу
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(
ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, Документ);
КонецЦикла;При обычной печати одной формы без разметки всё работает, поэтому её часто пропускают. Но комплект раскладывает листы разных форм по документам именно по этой разметке, и без неё печать падает с ошибкой.
Типичные ошибки
- Команда есть, но ничего не печатает с настройкой. Не добавлена ветка
КомплектДокументовв процедуруПечать(шаг 4). - Документ не появляется в настройках комплектов. Забыли шаг 5.
- Ошибка только при комплектной печати. Нет
ЗадатьОбластьПечатиДокументав одной из форм (шаг 7). - Печать зависает или просит ввести данные. В комплект попала форма с диалогом (шаг 6).
- После обновления доработка пропала. Правки вносились в типовые модули без расширения. Команды и регистрацию объекта удобнее держать в расширении с аннотацией
&После.
Такие доработки печати я делаю в рамках услуги по печатным формам 1С: обычно подключение комплекта к одному документу с проверкой всех форм занимает несколько часов.
Итог
- Печать комплектов — механизм УТ 11, КА 2 и ERP поверх подсистемы печати БСП; образец — документ
РеализацияТоваровИУслуг. - Нужны две команды, функция состава комплекта, функция формирования и ветка в процедуре
Печать. - Документ регистрируется в
НастройкиПечатиОбъектов.ТаблицаОбъектовДляПечатиКомплектно. - Формы с диалогами исключаются из комплекта или дорабатываются.
- Каждая печатная форма обязана размечать табличный документ через
ЗадатьОбластьПечатиДокумента.




