Многие пользователи и разработчики сталкиваются с ситуацией, когда настроенные параметры печати (ориентация страницы, поля, масштаб) сбрасываются при следующем открытии печатной формы. Вместо того чтобы каждый раз настраивать печать заново, разберем подробно причины этого поведения и найдем способы решения. Проанализируем как программные ошибки, так и особенности платформы 1С.
В первую очередь обратимся к коду конфигурации. Для того чтобы платформа "помнила" настройки конкретной печатной формы, она должна знать, куда их сохранять. За это отвечает свойство табличного документа КлючПараметровПечати.
Важно разграничить два понятия:
КлючПараметровПечати — современное свойство, рекомендуемое к использованию. В нем сохраняется ключ, по которому восстанавливаются настройки.ИмяПараметровПечати — устаревшее свойство.Давайте проверим код на наличие конфликтов. Если мы используем оба свойства одновременно, поведение системы может быть непредсказуемым. Убедимся, что мы задаем уникальный ключ для каждой печатной формы, взяв за основу корректный пример внешней печатной формы на БСП — для этого подойдёт комплект протестированных внешних печатных форм с инструментами отладки.
// Пример правильной установки ключа
ТабДок = Новый ТабличныйДокумент;
ТабДок.КлючПараметровПечати = "ПараметрыПечатиЗаказаКлиента";
Самая распространенная причина "несохранения" настроек — это действия программиста, который принудительно устанавливает параметры при каждом формировании отчета. Посмотрим на логику формирования печатной формы.
Если в коде присутствуют строки, жестко задающие ориентацию или поля, они будут выполняться каждый раз, перезаписывая сохраненные пользователем настройки. Изучая, как функционирует объектная модель печатной формы, можно понять, почему принудительные свойства имеют приоритет над сохраненными. Проанализируем пример кода, который вызывает проблему:
// Этот код сбросит пользовательские настройки при каждом открытии
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.ПолеСлева = 10;
Чтобы исправить ситуацию, нам нужно убрать принудительную установку свойств после того, как был назначен КлючПараметровПечати, либо делать это с проверкой условия (например, только при первом открытии).
Если с кодом все в порядке, но настройки все равно не "липнут", попробуем проверенный практикой метод. Часто проблема кроется в особенностях взаимодействия 1С и диспетчера печати Windows (спулера).
Выполним следующую последовательность действий вместе с пользователем:
Именно факт отправки на печать с измененными параметрами часто заставляет платформу принудительно записать новые настройки в профиль пользователя или хранилище настроек.
Если пользователи работают через удаленный рабочий стол (RDP), мы можем столкнуться с тем, что принтеры пробрасываются с новыми именами при каждой сессии. Рассмотрим ситуацию подробнее.
Параметры печати в 1С привязываются к конкретному имени принтера. Сегодня принтер называется HP LaserJet (redirected 2), а завтра — HP LaserJet (redirected 5). Для 1С это совершенно новое устройство, и платформа загружает настройки по умолчанию.
Решение: Нам необходимо добиться статических имен принтеров на терминальном сервере (например, отключить перенаправление или использовать специализированное ПО вроде ScrewDrivers) или настроить сопоставление принтеров.
Настройки печати должны корректно сохраняться в момент закрытия формы или завершения сеанса. Обратим внимание на следующие моменты:
ХранилищеСистемныхНастроек, используя инструменты для просмотра, восстановления и очистки хранилища настроек пользователя — для диагностики и очистки подойдет обработка просмотра и очистки хранилища настроек пользователя.Если ничего не помогает, давайте заглянем "под капот". Мы можем использовать инструменты разработчика, такие как универсальная форма отладки для внешней обработки печатных форм (для этого есть готовая универсальная форма отладки внешних печатных форм), чтобы посмотреть, что физически записывается в систему при формировании документа.
Для создания новых решений с нуля лучше использовать проверенный шаблон дополнительной обработки с сохранением параметров, который минимизирует риск возникновения подобных ошибок — в качестве готовой основы подойдёт конструктор и шаблон внешних печатных форм. Найдем настройки по пути Общее/НастройкиПечатиТабличногоДокумента/ВашКлюч. Там будет храниться XML или двоичные данные. Проанализируем содержимое XML на предмет наличия параметра pageOrientation или привязки к конкретному драйверу принтера.
Не будем забывать про классическое решение многих проблем. Иногда локальный кеш метаданных повреждается, и платформа перестает считывать или записывать изменения. Попробуем очистить папки кеша пользователя:
AppData\Local\1C и AppData\Roaming\1C
После очистки проверим работу сохранения параметров заново.