Как правильно напечатать два документа на одной странице в 1С?

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

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

Анализ проблемных методов

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

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

Решение 1: Использование специализированного макета

Наиболее профессиональным и предсказуемым способом является создание отдельного «сборного» макета. Вместо того чтобы пытаться склеить два разных документа программно, мы создаем один шаблон, в котором предусмотрены области для двух документов.

Шаги по реализации:

  1. Создайте в конфигураторе новый макет или дополните существующий.
  2. Расположите две области доверенностей рядом (например, слева и справа) или друг под другом, в зависимости от того, как вам удобнее компоновать данные.
  3. В модуле обработки или печатной формы разработайте алгоритм, который заполняет обе области данными из двух выбранных объектов одновременно.
  4. При заполнении вы используете параметры макета, передавая данные из ДокументОбъект1 в первую область и из ДокументОбъект2 во вторую.

Этот метод исключает зависимость от алгоритмов автоматического разбиения страниц платформы, так как вы сами задаете жесткую структуру документа. Это гарантирует, что при отправке на печать принтер получит «готовый» лист, который не требует дополнительной интерпретации драйвером.

Решение 2: Оптимизация структуры для метода Присоединить

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

  1. Убедитесь, что количество колонок в обеих присоединяемых областях совпадает.
  2. Проверьте ширину каждой колонки. Если в одном макете ширина колонки 10, а в другом 12, 1С будет пытаться усреднить или деформировать сетку, что приведет к визуальным искажениям.
  3. Приведите все макеты к «общему знаменателю» — единой сетке колонок. Для этого часто приходится объединять ячейки в более простом макете, чтобы он соответствовал структуре более сложного.

Пример программного вывода при использовании адаптированного макета:


ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет(\"МакетДляДвухДокументов\");

// Заполняем первую доверенность
Область1 = Макет.ПолучитьОбласть(\"Доверенность1\");
Область1.Параметры.Заполнить(ДанныеОбъекта1);
ТабДок.Вывести(Область1);

// Заполняем вторую доверенность
Область2 = Макет.ПолучитьОбласть(\"Доверенность2\");
Область2.Параметры.Заполнить(ДанныеОбъекта2);
ТабДок.Присоединить(Область2);

Рекомендации по настройке печати

Если после переработки макета вы все еще наблюдаете проблемы с выводом, обратите внимание на следующие моменты:

Подводя итог: создание специализированного макета — это самый надежный способ. Он позволяет избежать «сюрпризов» при смене принтеров или обновлении версий платформы 1С. Посвятив время правильной разметке макета один раз, вы сэкономите часы на отладке некорректной печати в будущем.

← На главную