Проблема «слетающих» настроек печати — одна из самых раздражающих в работе системного администратора и программиста 1С, особенно когда речь идет о термопринтерах этикеток типа Zebra. Пользователи часто сталкиваются с тем, что настроенный размер страницы, ориентация или интенсивность печати возвращаются к значениям по умолчанию через некоторое время или после перезагрузки терминальной сессии. В этой статье мы подробно разберем, где именно 1С и операционная система Windows хранят эти данные и как зафиксировать их раз и навсегда.
Для начала разберемся с тем, как сама платформа 1С:Предприятие управляет параметрами страницы. Когда в коде используется свойство ИмяПараметровПечати (в обычных формах) или КлючПараметровПечати (в управляемых формах), система пытается найти сохраненные настройки для конкретного пользователя.
Рассмотрим, где физически лежат эти данные:
_SystemSettings. Это бинарное хранилище, в котором настройки сериализованы во внутренний формат 1С. Поиск нужной записи осуществляется по ключу, который включает в себя идентификатор пользователя и строку, переданную в ИмяПараметровПечати.%AppData%\1C\1cv8\.... Обычно это файлы с расширением .cld (например, 1Cv8.cld), которые представляют собой локальное хранилище системных настроек.ХранилищеСистемныхНастроек. Если нам нужно найти настройки печати для конкретного макета (например, УПД), путь в хранилище будет выглядеть примерно так: "Общее/НастройкиПечатиТабличногоДокумента/ПАРАМЕТРЫ_ПЕЧАТИ_УПД".Проанализируем важный нюанс: настройки сохраняются в момент закрытия окна предварительного просмотра или при успешной отправке документа на печать. Если сессия 1С завершилась аварийно, настройки могут не записаться.
Если ваша база 1С (например, УТ 10.3) работает через терминальный сервер, основной причиной проблем становится механизм перенаправления принтеров (Printer Redirection). Рассмотрим основные причины:
1. Динамические имена принтеров. При каждом входе пользователя в систему принтер может называться по-разному: Zebra (redirected 2), Zebra (redirected 5) и так далее. Для 1С это разные принтеры. Как только имя меняется, платформа не может сопоставить сохраненные настройки с текущим принтером и сбрасывает их в «дефолт».
2. Технология Easy Print. Если на сервере включена групповая политика «Использовать в первую очередь драйвер принтера Easy Print», настройки драйвера вообще не передаются в полной мере. Для принтеров Zebra это критично: теряются размеры этикеток и настройки датчиков.
3. Очистка веток реестра. Параметры принтера (DevMode) хранятся в реестре пользователя в ветке HKEY_CURRENT_USER\Printers\DevModePerUser. При выходе из системы (Logoff) профиль может очищаться, или временные ветки реестра могут не сохраняться корректно.
Выясним, как можно программно или административно «забэкапить» настройки принтера. Если речь идет о настройках драйвера в Windows, можно воспользоваться системной утилитой PRINTUI.DLL.
Экспорт настроек в файл:
Для сохранения всех параметров принтера (включая размер бумаги и плотность) в файл, выполните команду в командной строке:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Ss /n "ИмяВашегоПринтера" /a "C:\Settings\Zebra_Format.dat" m g
Восстановление настроек из файла:
Эту команду можно добавить в скрипт автозагрузки при входе пользователя в терминал:
RUNDLL32 PRINTUI.DLL,PrintUIEntry /Sr /n "ИмяВашегоПринтера" /a "C:\Settings\Zebra_Format.dat" m g
Это гарантирует, что даже если драйвер «забыл» настройки, они будут принудительно возвращены из эталонного файла.
Если манипуляции с драйверами не помогают, проанализируем способ жесткой фиксации параметров непосредственно в модуле печати 1С. Вместо того чтобы полагаться на то, что пользователь один раз настроил принтер, мы можем принудительно задавать параметры ТабличногоДокумента перед выводом на экран или печать.
Рассмотрим пример кода для УТ 10.3 (Обычные формы):
// В процедуре Печать или при формировании ТабДока
ТабДок = Новый ТабличныйДокумент;
// Указываем уникальное имя, чтобы не было конфликтов с другими отчетами
ТабДок.ИмяПараметровПечати = "УНИКАЛЬНЫЙ_КЛЮЧ_ПЕЧАТИ_ЭТИКЕТОК_ЗЕБРА";
// Принудительно задаем имя принтера, если оно известно
ТабДок.ИмяПринтера = "Zebra_2844";
// Установка параметров страницы для этикетки 58х40
ТабДок.РазмерСтраницы = "Custom";
ТабДок.ШиринаСтраницы = 58;
ТабДок.ВысотаСтраницы = 40;
// Убираем поля, которые часто сбивают центровку на термопринтерах
ТабДок.ПолеСлева = 0;
ТабДок.ПолеСправа = 0;
ТабДок.ПолеСверху = 0;
ТабДок.ПолеСнизу = 0;
ТабДок.АвтоМасштаб = Истина;
Важный совет: Если вы используете свойство ИмяПараметровПечати, попробуйте сделать его максимально уникальным, например, добавляя к нему имя пользователя или тип оборудования. Это исключит ситуацию, когда настройки печати обычного счета формата А4 «наезжают» на настройки маленькой этикетки.
Выясним еще одну причину «слетов». Часто настройки меняют через «Настройки печати» (Printing Preferences), которые являются индивидуальными для пользователя. Однако драйвер часто сбрасывает их к «Умолчаниям печати» (Printing Defaults).
Как зафиксировать настройки на уровне системы:
Настройки, сделанные в этом меню, прописываются в более «глубокие» ветки реестра и служат базой для всех новых сессий пользователей. Это самый надежный способ борьбы со сбросом параметров драйвера.
Подведем итог нашему исследованию. Для стабильной печати на принтерах Zebra в связке с 1С необходимо действовать комплексно:
ИмяПараметровПечати для разных типов документов.PRINTUI.DLL для импорта эталонных параметров при старте системы.Соблюдение этих правил позволит вам забыть о жалобах пользователей на «кривую» печать этикеток и сэкономит время на бесконечные перенастройки оборудования.