Как установить ландшафтную ориентацию во внешней печатной форме 1С, если настройки не применяются

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

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

Почему 1С игнорирует ОриентацияСтраницы в коде

Основная причина кроется в механизме сохранения параметров печати. В платформе 1С существует свойство КлючПараметровПечати (в старых версиях — ИмяПараметровПечати), которое отвечает за запоминание настроек, сделанных пользователем в окне печати (принтер, количество копий, поля и, главное, ориентация страницы).

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

Разбор решения: работа с ключом параметров печати

Выясним, как обойти этот приоритет. Самый быстрый и эффективный способ — изменить идентификатор в свойстве КлючПараметровПечати. Как только мы меняем строку ключа на новую, платформа перестает находить старые «залипшие» настройки и применяет те, что прописаны в коде.

Посмотрим на пример правильной инициализации табличного документа в функции Печать():


ТабДок = Новый ТабличныйДокумент;
// Указываем новый уникальный ключ, чтобы сбросить старый кэш
ТабДок.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Промежуточный_V2";

// Только после этого (или вместе с этим) задаем ориентацию
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;

Важный нюанс: если вы хотите, чтобы ландшафт применился гарантированно у всех пользователей, у которых форма уже «запомнилась» как портретная, просто добавьте символ или цифру к строковому идентификатору ключа. Например, замените "ПЕЧАТЬ_ДОКУМЕНТА" на "ПЕЧАТЬ_ДОКУМЕНТА_ЛАНДШАФТ".

Правильный порядок установки свойств

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

Рассмотрим структуру кода внешней печатной формы:

  1. Создаем объект ТабличныйДокумент.
  2. Устанавливаем КлючПараметровПечати.
  3. Устанавливаем ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт.
  4. Устанавливаем АвтоМасштаб = Истина (это критично для ландшафта, чтобы широкая таблица вписалась в лист).
  5. Получаем макет и выводим области.

Оптимизация запросов в печатных формах

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

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


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|   ТЧ.НомерСтроки КАК Номер,
|   ТЧ.Номенклатура.НаименованиеПолное КАК Товар,
|   ТЧ.Количество,
|   ТЧ.Ссылка.Номер КАК НомерДока,
|   ТЧ.Ссылка.Дата КАК ДатаДока,
|   ТЧ.Ссылка.СкладОтправитель.Представление КАК Поставщик
|ИЗ
|   Документ.ПеремещениеТоваров.Товары КАК ТЧ
|ГДЕ
|   ТЧ.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", СсылкаНаОбъект);
РезультатЗапроса = Запрос.Выполнить();

Использование одного запроса снижает нагрузку на сервер базы данных и делает код более читаемым. Обратите внимание, что реквизиты шапки (например, Номер или СкладОтправитель) доступны через поле Ссылка табличной части.

Дополнительные параметры для идеальной печати

Чтобы ландшафтная форма выглядела профессионально, рекомендуем использовать дополнительные свойства объекта ТабличныйДокумент:

Как очистить настройки пользователя без изменения кода

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

Подводя итог: если ваша печатная форма «упрямо» открывается в книжной ориентации — проверьте КлючПараметровПечати. Смена этого ключа решает проблему в 99% случаев.

← На главную