Как установить параметры печати по умолчанию (ориентация, автомасштаб) для отчета на СКД в 1С?

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

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

Многие пользователи 1С сталкиваются с проблемой, когда отчет на СКД отлично работает, но каждый раз при печати приходится вручную выставлять такие параметры, как ориентация "Ландшафт" и "По ширине страницы" (автомасштаб). К счастью, платформа 1С предоставляет механизмы для решения этой задачи прямо в коде отчета.

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

Наиболее эффективный и рекомендуемый способ программной установки параметров печати по умолчанию – это добавление специального кода в процедуру ПриКомпоновкеРезультата, которая находится в модуле объекта вашего отчета на СКД. Эта процедура является ключевой точкой, вызываемой системой 1С в процессе формирования отчета. При программном управлении компоновкой в этой процедуре можно решать и другие задачи — например, для динамической настройки структуры пригодится метод программного скрытия пустых колонок СКД.

Рассмотрим, как это сделать:

  1. Откройте модуль объекта отчета: В конфигураторе найдите ваш отчет, разверните его структуру и дважды щелкните по пункту "Модуль объекта". Если он пуст, как это часто бывает, вы просто добавите нужный код.
  2. Создайте или дополните процедуру ПриКомпоновкеРезультата: Если такой процедуры еще нет, создайте ее. Она имеет следующую структуру:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

    // Здесь будем писать наш код для настройки параметров печати

КонецПроцедуры
  1. Установите альбомную ориентацию страницы: Внутри этой процедуры у нас есть доступ к объекту ДокументРезультат, который представляет собой Табличный документ, в котором формируется отчет. У него есть свойство ОриентацияСтраницы. Мы можем установить его в значение ОриентацияСтраницы.Ландшафт для альбомной ориентации.

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

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
    ДокументРезультат.АвтоМасштаб = Истина;
КонецПроцедуры

Теперь, при каждом формировании отчета, эти параметры будут применяться автоматически. Важно отметить, что процедура ПриКомпоновкеРезультата "живет" в модуле объекта отчета и вызывается при формировании отчета стандартной кнопкой. Параметр СтандартнаяОбработка позволяет управлять дальнейшей стандартной обработкой события. Если вы полностью переопределяете логику формирования, вы можете установить СтандартнаяОбработка = Ложь;, но для установки параметров печати это обычно не требуется.

Сохранение пользовательских настроек печати: "ИмяПараметровПечати" (или "КлючПараметровПечати")

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

Это свойство позволяет привязать набор параметров печати к определенному имени (ключу). Система 1С автоматически сохраняет и восстанавливает настройки печати, связанные с этим ключом. Давайте посмотрим, как это использовать:

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

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

Важный нюанс: Очередность установки параметров имеет критическое значение. Если вы хотите, чтобы ваши программно заданные параметры (ориентация, автомасштаб) действовали как *начальные* значения, которые потом пользователь может изменить и которые сохранятся, то присвоение ИмяПараметровПечати должно происходить *после* того, как вы установили все необходимые свойства ДокументРезультат. Это связано с тем, что при установке ИмяПараметровПечати, если по этому ключу уже есть сохраненные пользовательские настройки, они будут загружены и могут переопределить ваши программно установленные значения. Поэтому, чтобы программные настройки служили "дефолтом", устанавливайте их до ИмяПараметровПечати.

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

Настройка параметров для разных вариантов отчета

Что делать, если ваш отчет на СКД имеет несколько вариантов, и для каждого варианта требуются свои специфические настройки печати (например, для одного — альбомная ориентация, для другого — книжная)? Мы можем реализовать это, определяя текущий выбранный вариант отчета в модуле объекта.

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

Рассмотрим пример, где мы проверяем имя текущего варианта:


Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    // Получаем текущий вариант отчета. Это можно сделать разными способами,
    // например, через параметры компоновщика или если вы передаете имя варианта в форму.
    // Для простоты примера, предположим, что имя варианта можно получить из настроек компоновщика.
    // В реальных условиях вам может потребоваться получить это имя из КомпоновщикНастроек.Настройки.Имя.

    Перем ТекущийВариантОтчета;
    Если КомпоновщикНастроек.Настройки.Имя = "ВариантОтчета1" Тогда
        ТекущийВариантОтчета = "ВариантОтчета1";
    ИначеЕсли КомпоновщикНастроек.Настройки.Имя = "ВариантОтчета2" Тогда
        ТекущийВариантОтчета = "ВариантОтчета2";
    Иначе
        ТекущийВариантОтчета = "Основной"; // Вариант по умолчанию
    КонецЕсли;

    Если ТекущийВариантОтчета = "ВариантОтчета1" Тогда
        ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
        ДокументРезультат.АвтоМасштаб = Истина;
        ДокументРезультат.ИмяПараметровПечати = "ПараметрыПечатиВариант1";
    ИначеЕсли ТекущийВариантОтчета = "ВариантОтчета2" Тогда
        ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
        ДокументРезультат.АвтоМасштаб = Ложь; // Возможно, для этого варианта автомасштаб не нужен
        ДокументРезультат.ИмяПараметровПечати = "ПараметрыПечатиВариант2";
    Иначе
        // Настройки по умолчанию для других вариантов или основного
        ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
        ДокументРезультат.АвтоМасштаб = Истина;
        ДокументРезультат.ИмяПараметровПечати = "ПараметрыПечатиОсновной";
    КонецЕсли;

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

В этом примере мы используем КомпоновщикНастроек.Настройки.Имя для получения имени текущего варианта. Учтите, что в зависимости от вашей реализации и версии платформы, способ получения имени текущего варианта может немного отличаться. Вы можете также программно получать значения параметров СКД, например, используя КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(), если у вас есть параметр, хранящий имя варианта.

Альтернативный подход для АвтоМасштаба через форму отчета

Помимо установки свойства АвтоМасштаб в модуле объекта отчета, существует еще один способ, который иногда используется, особенно когда требуется применить автомасштаб уже после завершения вывода отчета в элемент формы. Этот подход заключается в работе с элементом формы отчета, который отображает табличный документ.

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

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

// Пример из процедуры "ПриЗагрузкеВариантаНаСервере" или "ПриСозданииНаСервере"
// или другой процедуры, где происходит формирование и вывод отчета.

// ... код формирования отчета СКД ...

ПроцессорВывода.ЗакончитьВывод(); // Завершаем вывод в табличный документ

// Теперь обращаемся к элементу формы
Элементы.Результат.АвтоМасштаб = Истина; // Где 'Результат' - это имя вашего элемента формы типа ТабличныйДокумент

Этот метод может быть полезен, если по каким-то причинам установка ДокументРезультат.АвтоМасштаб = Истина; в модуле объекта не дает желаемого эффекта или если вам нужна более тонкая настройка, зависящая от контекста формы. Однако, для большинства стандартных случаев достаточно использовать подход с процедурой ПриКомпоновкеРезультата в модуле объекта. Если же стоит задача спроектировать сложную форму с объединением результатов, можно использовать готовый шаблон вывода нескольких отчетов СКД в один табличный документ.

Заключение

Мы подробно рассмотрели основные способы программной установки параметров печати по умолчанию для отчетов на СКД в 1С. Использование процедуры ПриКомпоновкеРезультата в модуле объекта отчета является наиболее универсальным и рекомендуемым методом для установки ориентации страницы и автомасштаба. Для сохранения пользовательских настроек печати мы используем свойство ИмяПараметровПечати (или КлючПараметровПечати), помня о важности порядка установки свойств. Также мы затронули возможность настройки параметров для разных вариантов отчета и альтернативный способ установки автомасштаба через модуль формы.

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

← На главную