Многие технические специалисты, работающие с платформой 1С:Предприятие 7.7, сталкивались с неприятной особенностью: при выводе на печать многостраничного документа или нескольких копий одного документа (например, счета-фактуры) первый экземпляр выходит корректно в альбомной ориентации, а все последующие — в книжной. Эта проблема носит системный характер и связана с тем, как движок печати 1С взаимодействует с реестром Windows и драйверами принтера. Разберем подробно, почему это происходит и как решить задачу несколькими способами.
Основной виновник такого поведения — механизм Moxel. Это внутренний компонент 1С 7.7, отвечающий за формирование и отображение табличных документов. Для оптимизации работы пользователя 1С сохраняет настройки печати для каждой конкретной формы и каждого принтера в реестре Windows. Со временем в этих ветках накапливаются некорректные параметры или возникают конфликты между программно заданными настройками в коде (ПараметрыСтраницы) и теми, что хранятся в «памяти» системы. В результате после печати первого листа движок может «сбросить» настройки к значениям по умолчанию, которые он берет из своей закэшированной ветки или из настроек принтера в Windows.
Это самый эффективный и часто используемый метод. Нам необходимо удалить ветку реестра, в которой 1С хранит индивидуальные настройки таблиц для пользователя. Проанализируем, как это сделать правильно.
Алгоритм действий через редактор реестра:
regedit (желательно от имени того пользователя, у которого наблюдается проблема).HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<Имя_Вашей_Базы>\V7\<Имя_Пользователя_1С>\Moxel.Moxel или подразделы внутри него, относящиеся к конкретному принтеру.Важный нюанс: если у пользователя нет прав на запуск regedit, мы можем воспользоваться автоматизированным способом. Создадим простой batch-файл (с расширением .bat) и выполним его на рабочем месте пользователя:
reg delete "HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\<ИмяБазы>\V7\<ИмяПользователя>\Moxel" /f
После перезапуска 1С программа заново создаст чистые настройки в реестре, и ориентация страниц должна прийти в норму.
Если проблема повторяется часто, рассмотрим возможность внесения изменений непосредственно в модуль внешней печатной формы. Помимо стандартного метода ПараметрыСтраницы, разработчики часто забывают об использовании метода Опции. Разберем пример правильной инициализации таблицы перед печатью.
В коде формирования печатной формы найдем место, где определяется объект Таблица, и добавим следующие строки:
// Устанавливаем альбомную ориентацию (2) и масштаб по ширине листа (1)
Таб.ПараметрыСтраницы(2, 1, , 0, 0, 0, 0, 0, 0, 1, , );
// Используем метод Опции для задания уникального ключа сохранения настроек
// Пятый параметр - "ИмяНастройки" - должен быть уникальным для этого отчета
Таб.Опции(0, 0, 0, 0, "ПечатьСчетФактуры_Альбом");
Использование уникального имени в методе Опции заставляет 1С сохранять настройки в отдельную подветку реестра. Это предотвращает ситуацию, когда настройки от одного документа (например, книжного «Приходного кассового ордера») влияют на «Счет-фактуру».
Выясним простой пользовательский способ, который не требует прав администратора или навыков программирования. Иногда помогает простое удаление пути к информационной базе из окна запуска 1С.
При таком действии 1С создает в реестре новую ветку для этой базы (с новым GUID или порядковым номером), и старые «битые» настройки печати перестают подтягиваться.
Рассмотрим ситуацию, когда манипуляции с 1С не помогают. Проблема может крыться в самом драйвере принтера. Проанализируем технические нюансы:
PCL5 или PCL6. Современные драйверы PostScript (PS) или универсальные драйверы печати (Universal Print Driver) могут некорректно обрабатывать команды смены ориентации, поступающие от старых приложений.Если печать происходит через удаленный рабочий стол, проанализируем влияние технологии Easy Print. Эта технология часто «зацикливает» настройки. Если на сервере и локальном ПК стоят разные драйверы, 1С 7.7 может терять параметры копий. В этом случае рекомендуется:
Easy Print в групповых политиках сервера.Таким образом, мы рассмотрели комплексный подход к решению проблемы. Начинать всегда стоит с самого простого — очистки ветки Moxel в реестре, так как в 90% случаев это полностью устраняет дефект печати второго листа.