Почему не сохраняются параметры печати в 1С и как заставить их запоминаться?

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

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

1. Проверим использование ключей сохранения настроек

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

Важно разграничить два понятия:

  1. КлючПараметровПечати — современное свойство, рекомендуемое к использованию. В нем сохраняется ключ, по которому восстанавливаются настройки.
  2. ИмяПараметровПечати — устаревшее свойство.

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


// Пример правильной установки ключа
ТабДок = Новый ТабличныйДокумент;
ТабДок.КлючПараметровПечати = "ПараметрыПечатиЗаказаКлиента";

2. Исключим жесткую установку параметров в коде

Самая распространенная причина "несохранения" настроек — это действия программиста, который принудительно устанавливает параметры при каждом формировании отчета. Посмотрим на логику формирования печатной формы.

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


// Этот код сбросит пользовательские настройки при каждом открытии
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.ПолеСлева = 10;

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

3. Применим "метод изменения полей" (Пользовательское решение)

Если с кодом все в порядке, но настройки все равно не "липнут", попробуем проверенный практикой метод. Часто проблема кроется в особенностях взаимодействия 1С и диспетчера печати Windows (спулера).

Выполним следующую последовательность действий вместе с пользователем:

  1. Сформируем печатную форму и выведем её на экран.
  2. Откроем "Параметры страницы" (Файл -> Параметры страницы).
  3. Изменим любой параметр незначительно. Например, поменяем размер поля с 10 на 11 или изменим масштаб.
  4. Обязательно отправим документ на печать (хотя бы одну страницу).

Именно факт отправки на печать с измененными параметрами часто заставляет платформу принудительно записать новые настройки в профиль пользователя или хранилище настроек.

4. Проанализируем проблему динамических имен принтеров (RDP)

Если пользователи работают через удаленный рабочий стол (RDP), мы можем столкнуться с тем, что принтеры пробрасываются с новыми именами при каждой сессии. Рассмотрим ситуацию подробнее.

Параметры печати в 1С привязываются к конкретному имени принтера. Сегодня принтер называется HP LaserJet (redirected 2), а завтра — HP LaserJet (redirected 5). Для 1С это совершенно новое устройство, и платформа загружает настройки по умолчанию.

Решение: Нам необходимо добиться статических имен принтеров на терминальном сервере (например, отключить перенаправление или использовать специализированное ПО вроде ScrewDrivers) или настроить сопоставление принтеров.

5. Проверим права доступа и корректность завершения работы

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

  1. Завершение процесса: Если процесс 1С "убивается" (снимается через диспетчер задач) или сессия RDP обрывается некорректно, событие сохранения настроек не срабатывает — для контроля активных пользователей поможет инструмент управления сеансами пользователей. Убедимся, что пользователи выходят из программы штатно.
  2. Права на реестр: В некоторых случаях (особенно для файловых баз) настройки могут зависеть от прав пользователя на ветки реестра Windows или файлы профиля. Попробуем запустить 1С от имени администратора и проверить, сохранятся ли настройки.
  3. Хранилище настроек: В клиент-серверном варианте настройки лежат в базе данных. Проверим, работает ли механизм ХранилищеСистемныхНастроек, используя инструменты для просмотра, восстановления и очистки хранилища настроек пользователя — для диагностики и очистки подойдет обработка просмотра и очистки хранилища настроек пользователя.

6. Исследуем сохраненные настройки (для разработчиков)

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

Для создания новых решений с нуля лучше использовать проверенный шаблон дополнительной обработки с сохранением параметров, который минимизирует риск возникновения подобных ошибок — в качестве готовой основы подойдёт конструктор и шаблон внешних печатных форм. Найдем настройки по пути Общее/НастройкиПечатиТабличногоДокумента/ВашКлюч. Там будет храниться XML или двоичные данные. Проанализируем содержимое XML на предмет наличия параметра pageOrientation или привязки к конкретному драйверу принтера.

7. Очистим кеш

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

AppData\Local\1C и AppData\Roaming\1C

После очистки проверим работу сохранения параметров заново.

← На главную