Как изменить ориентацию страницы табличного документа в 1С, если программные настройки не срабатывают?

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

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

Причина 1: Коварство свойства ИмяПараметровПечати

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

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

Разберем пример кода, который часто приводит к ошибке:


ТабДок = Новый ТабличныйДокумент;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт; // Устанавливаем ландшафт
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_МойОтчет"; // Здесь 1С может вернуть "Портрет" из памяти пользователя

Для исправления этой ситуации мы можем поступить двумя способами:

  1. Изменить порядок строк: сначала назначаем имя параметров, а затем переопределяем свойства. В этом случае программная установка будет иметь приоритет над загруженной из кэша.
  2. Очистить настройки у пользователя: зайти в меню "Файл" — "Параметры страницы" в режиме "1С:Предприятие" и вручную выставить нужную ориентацию один раз. После этого система запомнит правильный выбор.

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


ТабДок = Новый ТабличныйДокумент;
ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПочтовыйПеревод"; 
// Устанавливаем ориентацию ПОСЛЕ назначения имени параметров
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.АвтоМасштаб = Истина;

Причина 2: Особенности типовых конфигураций (УТ 10.3, УПП)

Если вы работаете с конфигурациями на обычных формах, такими как "Управление торговлей 10.3" или "Управление производственным предприятием 1.3", проблема может крыться в модуле УниверсальныеМеханизмы. Проанализируем ситуацию: когда вы вызываете функцию УниверсальныеМеханизмы.НапечататьДокумент(), система открывает общую форму "ПечатьДокументов".

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

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


// В модуле формы "ПечатьДокументов"
ЭлементыФормы.ПолеТабличногоДокумента.АвтоМасштаб = ПечатныйДокумент.АвтоМасштаб;
ЭлементыФормы.ПолеТабличногоДокумента.ПолеСверху = ПечатныйДокумент.ПолеСверху;
ЭлементыФормы.ПолеТабличногоДокумента.ПолеСлева = ПечатныйДокумент.ПолеСлева;
ЭлементыФормы.ПолеТабличногоДокумента.ПолеСнизу = ПечатныйДокумент.ПолеСнизу;
ЭлементыФормы.ПолеТабличногоДокумента.ПолеСправа = ПечатныйДокумент.ПолеСправа;
ЭлементыФормы.ПолеТабличногоДокумента.ОриентацияСтраницы = ПечатныйДокумент.ОриентацияСтраницы;

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

Причина 3: Взаимодействие с драйвером принтера

Иногда проблема лежит за пределами кода 1С. Платформа тесно взаимодействует с подсистемой печати Windows. Проанализируем несколько технических моментов:

  1. Принтер по умолчанию: Если в системе не установлен принтер по умолчанию, 1С может некорректно инициализировать параметры страницы. Убедитесь, что принтер выбран и он доступен.
  2. Настройки драйвера: Некоторые драйверы принтеров имеют жесткую предустановку ориентации в своих внутренних свойствах. В этом случае 1С посылает команду "Ландшафт", но драйвер интерпретирует её через призму своих настроек "Портрет". Попробуйте сменить принтер в диалоге печати на виртуальный (например, PDF-принтер) для проверки.

Причина 4: Принудительный расчет макета

Рассмотрим еще одну хитрость, которую применяют опытные разработчики. Иногда 1С не успевает пересчитать границы документа до того, как он будет передан на форму или принтер. Чтобы заставить систему "осознать" новую ориентацию, можно вызвать метод, инициирующий расчет страниц.

Посмотрим на пример использования метода КоличествоСтраниц():


ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
// Вызов этого метода заставляет движок 1С пересчитать документ с учетом новой ориентации
ТестовоеКоличество = ТабДок.КоличествоСтраниц(); 
ТабДок.Показать();

Рекомендация по настройке макета в конфигураторе

Если вы создаете фиксированный макет, который всегда должен печататься в альбомном виде, самым надежным способом будет установка параметров непосредственно в самом объекте Макет. Рассмотрим пошагово:

  1. Откройте нужный макет в конфигураторе.
  2. Перейдите в главное меню: Таблица — Настройки печати — Параметры страницы...
  3. В открывшемся окне выберите ориентацию "Ландшафт" и установите нужные поля.
  4. Сохраните конфигурацию.

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

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

← На главную