Как настроить предварительный просмотр отчета в СКД, чтобы данные помещались на одну страницу

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

При разработке отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда результат компоновки идеально выглядит на экране монитора, но при попытке печати или в режиме предварительного просмотра данные «разваливаются». Колонки уходят за границы листа, подписи ФИО отрываются от основной таблицы и переносятся на следующую страницу, а масштаб становится нечитаемым. Пользователям неудобно каждый раз вручную менять настройки печати, поэтому наша задача как разработчиков — автоматизировать этот процесс.

Рассмотрим подробнее, какими инструментами обладает платформа 1С для управления внешним видом печатной формы отчета и как заставить СКД всегда выводить данные компактно и корректно.

Использование процедуры ПриКомпоновкеРезультата

Большинство настроек внешнего вида отчета можно задать интерактивно, но для управления параметрами страницы (такими как масштаб, ориентация или поля) нам потребуется программное вмешательство. Разберем ситуацию: у нас есть внешняя обработка или отчет, где используется стандартная схема СКД. Основная работа будет происходить в модуле объекта нашего отчета.

Для того чтобы программно изменить свойства итогового документа, необходимо переопределить стандартную процедуру ПриКомпоновкеРезультата. В этой процедуре нам доступен объект ДокументРезультат, который по сути является типом ТабличныйДокумент.

Проанализируем пример кода, который решает базовые проблемы с масштабом и ориентацией:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    // Устанавливаем автоматический масштаб, чтобы система сама вписала таблицу в лист
    ДокументРезультат.Автомасштаб = Истина;
    
    // Если колонок много, целесообразно использовать ландшафтную ориентацию
    ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    
    // Убираем лишние отступы по краям, чтобы высвободить место для данных
    ДокументРезультат.ПолеСлева = 0;
    ДокументРезультат.ПолеСправа = 0;
    ДокументРезультат.ПолеСверху = 0;
    ДокументРезультат.ПолеСнизу = 0;

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

Использование свойства Автомасштаб в значении Истина заставляет 1С пропорционально уменьшать весь отчет до тех пор, пока он не впишется в границы печатного листа по ширине. Однако, если данных слишком много, шрифт может стать критически мелким. В этом случае нам помогут дополнительные настройки.

Жесткое ограничение количества страниц

Бывают задачи, когда необходимо «впихнуть» отчет в одну страницу по ширине любой ценой. Для этого у ТабличногоДокумента существуют свойства КоличествоСтраницПоШирине и КоличествоСтраницПоВысоте. Если мы установим эти параметры в значение 1, платформа применит такой масштаб, при котором весь отчет гарантированно уместится на один лист.

Давайте посмотрим, как это реализовать:


ДокументРезультат.КоличествоСтраницПоШирине = 1;
// Если нужно, чтобы и в высоту отчет не разрывался (например, для коротких актов):
// ДокументРезультат.КоличествоСтраницПоВысоте = 1; 

Важный момент: если вы используете КоличествоСтраницПоШирине, свойство Автомасштаб следует отключить (или оно будет проигнорировано), так как эти механизмы управления масштабом работают по-разному.

Оптимизация ширины колонок через настройки СКД

Часто отчет не влезает на страницу из-за того, что 1С выделяет слишком много места под определенные поля. Мы можем управлять этим непосредственно в конструкторе СКД, не прибегая к сложному кодированию. Выясним причину избыточной ширины: обычно это длинные заголовки или широкие строковые данные.

Рассмотрим два способа сузить колонки:

  1. Максимальная ширина в Условном оформлении: Перейдите на вкладку «Настройки», выберите «Условное оформление». Добавьте новый элемент оформления, где укажите параметр Максимальная ширина (например, значение 12 или 15). В области использования выберите те поля, которые «раздувают» отчет. Это заставит систему принудительно ограничить ширину ячейки.
  2. Размещение текста: Чтобы данные не обрезались при узкой колонке, в том же условном оформлении установите параметр Размещение текста в значение Переносить. Теперь длинные названия будут отображаться в несколько строк, увеличивая высоту строки, но сохраняя компактность по горизонтали.

Сохранение настроек печати пользователя

Пользователи часто жалуются, что выставленные ими вручную настройки в предварительном просмотре (например, масштаб 95% или формат A4) сбрасываются при следующем открытии отчета. Чтобы 1С запоминала эти параметры для конкретного отчета, необходимо задать КлючПараметровПечати.

Это строковый идентификатор, по которому система связывает настройки принтера и страницы с данным отчетом. Добавим это в нашу процедуру:

ДокументРезультат.КлючПараметровПечати = "УникальныйКлючМоегоОтчета_001";

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

Как не допустить отрыва подписей от таблицы

Одной из самых неприятных проблем является перенос «подвалов» отчета (ФИО ответственных лиц, подписи) на отдельный чистый лист. Чтобы этого избежать, можно использовать программный вывод секций с флагом ВместеССледующим или ВместеСПредыдущим, но в рамках СКД это сделать сложнее.

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

Если вы используете собственные макеты в СКД, выделите строки с подписями и в палитре свойств установите флаг ЗапрещатьРазрывать. Это заставит платформу переносить блок подписей на новую страницу только вместе с последними строками таблицы, что выглядит гораздо более профессионально.

Итоговый алгоритм действий

Подводя итог, для создания идеально вписанного в страницу отчета мы должны:

  1. В модуле объекта в процедуре ПриКомпоновкеРезультата включить Автомасштаб и Ландшафт.
  2. Обнулить поля документа для максимизации полезной площади.
  3. Установить уникальный КлючПараметровПечати.
  4. В самой схеме СКД через условное оформление ограничить Максимальную ширину колонок и включить Переносить для текста.

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

← На главную