Почему одна и та же печатная форма в 1С выводится по-разному у разных пользователей и как это исправить?

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

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

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

Выясняем причину: как работает механизм КлючПараметровПечати

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

Рассмотрим по шагам логику работы этого механизма:

  1. Когда разработчик указывает текстовый идентификатор в свойстве КлючПараметровПечати в коде печатной формы, платформа 1С понимает, что для данного документа нужно запоминать настройки печати.
  2. Если пользователь во время предварительного просмотра или печати изменяет какие-либо параметры (например, выбирает альбомную ориентацию вместо портретной, меняет размер полей, задает масштаб "По ширине страницы" или выбирает конкретный принтер), платформа автоматически сохраняет эти параметры в базу данных.
  3. Местом хранения выступает специальная системная таблица СУБД — Хранилище системных настроек. Запись сохраняется по уникальному пути: Общее/НастройкиПечатиТабличногоДокумента/ПАРАМЕТРЫ_ПЕЧАТИ_<ИмяКлюча>.
  4. Эти настройки являются строго индивидуальными. Они привязываются к конкретному пользователю информационной базы. При копировании базы данных на другой сервер или компьютер настройки "переезжают" внутри СУБД вместе с пользователями. Именно поэтому создание копии базы не решает проблему.

Если пользователь хотя бы один раз случайно зашел в параметры страницы и установил там некорректные настройки (например, формат бумаги Letter вместо стандартного А4, огромные поля или печать в масштабе 100% при широкой таблице), то при каждом последующем формировании этой печатной формы 1С будет принудительно применять эти искаженные параметры. В итоге документ, состоящий всего из двух строк, начинает разбиваться на несколько листов.

Почему стандартная очистка кэша и настроек не помогает?

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

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

Рассмотрим подробно несколько эффективных способов решения данной проблемы.

Способ 1. Интерактивный сброс настроек (самый простой для пользователя)

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

  1. Сформируем на экране проблемную печатную форму.
  2. Перейдем в главное меню программы. В управляемом интерфейсе для этого нажмем на системную кнопку со стрелкой (в левом верхнем углу окна) и выберем пункт Файл, далее — Параметры страницы.
  3. В открывшемся диалоговом окне внимательно проанализируем установленные значения. Нам необходимо убедиться, что:
    • Размер бумаги установлен как А4.
    • Ориентация страницы соответствует задумке разработчика (обычно — Портрет).
    • Масштаб установлен в значение "По ширине страницы" (или включен флажок "Автомасштаб"). Это гарантирует, что колонки документа автоматически уменьшатся под ширину листа А4 и не будут уходить на второй лист.
    • Размеры полей (левое, правое, верхнее, нижнее) установлены в стандартные значения (например, по 10 мм).
  4. Нажмем кнопку ОК, чтобы применить настройки, и отправим документ на печать.

После этого новые корректные параметры перезапишут старые искаженные данные в системном хранилище СУБД, и последующий вывод печатной формы придет в норму.

Способ 2. Программное удаление настроек из хранилища (для администратора)

Если проблемных пользователей много, или у вас нет возможности зайти под учетной записью каждого из них, мы можем очистить сохраненные настройки программно. Для этого используется глобальный объект ХранилищеСистемныхНастроек.

Выполним очистку с помощью внешней обработки или консоли кода. Нам потребуется написать следующую строку:


ХранилищеСистемныхНастроек.Удалить("Общее/НастройкиПечатиТабличногоДокумента/ПАРАМЕТРЫ_ПЕЧАТИ_ИмяВашегоКлючаПечати", , "ИмяПроблемногоПользователя");

Разберем параметры этого метода:

Рассмотрим пример функции, которая производит полную очистку системных настроек для определенной печатной формы:


Процедура СброситьНастройкиПечати(ИмяКлюча, ИмяПользователя = Неопределено) Экспорт
    ПутьКНастройке = "Общее/НастройкиПечатиТабличногоДокумента/ПАРАМЕТРЫ_ПЕЧАТИ_" + ИмяКлюча;
    Попытка
        ХранилищеСистемныхНастроек.Удалить(ПутьКНастройке, , ИмяПользователя);
        Сообщить("Настройки печати по ключу '" + ИмяКлюча + "' успешно сброшены.");
    Исключение
        ЗаписьЖурналаРегистрации("Печать.СбросНастроек", УровеньЖурналаРегистрации.Ошибка, , , ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

Способ 3. Корректировка логики формирования документа в коде (для разработчика)

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

Рассмотрим типичный неправильный вариант инициализации:


// НЕПРАВИЛЬНО!
ТабДок = Новый ТабличныйДокумент;
ТабДок.КлючПараметровПечати = "СправкаОДоходах"; 
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;

Почему такой код может работать некорректно? Дело в том, что как только строке ТабДок.КлючПараметровПечати = "СправкаОДоходах"; присваивается значение, платформа 1С тут же пытается прочитать ранее сохраненные настройки пользователя из СУБД и применить их к объекту ТабДок. Если у пользователя сохранены некорректные настройки, они загружаются в документ, затирая дефолтные параметры, которые разработчик пытается задать строками ниже.

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


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

При такой последовательности платформа сначала инициализирует табличный документ правильными жестко заданными параметрами. Если у пользователя в системе еще нет сохраненных индивидуальных настроек печати для ключа "СправкаОДоходах", документ сформируется по правилам разработчика (с авто-масштабом и полями по 10 мм). Если же пользователь решит переопределить настройки вручную, его персональные изменения наложатся поверх базовых, но не сломают первичное формирование у других сотрудников.

Влияние принтеров и драйверов на печатные формы

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

Рассмотрим типичные ситуации:

Решением в данном случае является проверка принтера по умолчанию в операционной системе Windows у проблемного пользователя и приведение параметров страницы в соответствие со стандартным офисным принтером А4.

Резюме и рекомендации

Для предотвращения проблем с разным отображением печатных форм у пользователей придерживайтесь следующих правил:

  1. Всегда пишите код инициализации ТабличныйДокумент в правильном порядке: сначала задавайте АвтоМасштаб, ОриентацияСтраницы и поля, и только затем присваивайте КлючПараметровПечати.
  2. Если форма у конкретного пользователя начала вести себя непредсказуемо, используйте интерактивное меню "Файл - Параметры страницы" для быстрой ручной корректировки.
  3. Для массового сброса настроек печати у всех пользователей используйте метод ХранилищеСистемныхНастроек.Удалить().
← На главную