Зачастую при разработке печатных форм возникает задача оптимизации расхода бумаги, например, необходимость распечатать две доверенности на одном листе формата А4. В процессе решения этой задачи разработчики сталкиваются с рядом технических ограничений платформы 1С:Предприятие. Давайте разберем, какие подходы существуют, почему они могут работать нестабильно и как реализовать это решение наиболее надежным способом.
Первое, что приходит на ум при групповой печати — это использование стандартных механизмов формирования табличного документа. Однако при попытке вывести несколько документов подряд возникают следующие трудности:
Вывести(): По умолчанию каждый вызов этого метода начинает новую страницу. Если вы хотите разместить два документа рядом, стандартный вывод будет разрывать их, даже при использовании альбомной ориентации.Присоединить(): Этот метод предназначен для расширения текущей области, а не для добавления целого документа. Если макеты имеют разную структуру колонок, ширина столбцов, количество ячеек или их объединение не совпадают, табличный документ «разъезжается», что приводит к некорректному отображению данных.ТабДок.ЭкземпляровНаСтранице: Хотя это свойство выглядит как готовое решение, его поведение крайне нестабильно. Оно сильно зависит от установленного драйвера принтера и настроек операционной системы. Во многих случаях платформа игнорирует этот параметр, либо некорректно обрабатывает предварительный просмотр.Наиболее профессиональным и предсказуемым способом является создание отдельного «сборного» макета. Вместо того чтобы пытаться склеить два разных документа программно, мы создаем один шаблон, в котором предусмотрены области для двух документов.
Шаги по реализации:
ДокументОбъект1 в первую область и из ДокументОбъект2 во вторую.Этот метод исключает зависимость от алгоритмов автоматического разбиения страниц платформы, так как вы сами задаете жесткую структуру документа. Это гарантирует, что при отправке на печать принтер получит «готовый» лист, который не требует дополнительной интерпретации драйвером.
Если вы все же решили использовать метод Присоединить(), вам необходимо добиться полной идентичности макетов. Проанализируем, что для этого нужно сделать:
Пример программного вывода при использовании адаптированного макета:
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет(\"МакетДляДвухДокументов\");
// Заполняем первую доверенность
Область1 = Макет.ПолучитьОбласть(\"Доверенность1\");
Область1.Параметры.Заполнить(ДанныеОбъекта1);
ТабДок.Вывести(Область1);
// Заполняем вторую доверенность
Область2 = Макет.ПолучитьОбласть(\"Доверенность2\");
Область2.Параметры.Заполнить(ДанныеОбъекта2);
ТабДок.Присоединить(Область2);
Если после переработки макета вы все еще наблюдаете проблемы с выводом, обратите внимание на следующие моменты:
ТабличногоДокумента перед выводом, используя свойство ОриентацияСтраницы.Подводя итог: создание специализированного макета — это самый надежный способ. Он позволяет избежать «сюрпризов» при смене принтеров или обновлении версий платформы 1С. Посвятив время правильной разметке макета один раз, вы сэкономите часы на отладке некорректной печати в будущем.