Разработчики и системные администраторы 1С часто сталкиваются с загадочным поведением печатных форм в терминальном режиме (RDP). Типичная ситуация: программист создаёт печатную форму, настраивает вывод колонтитулов, проверяет работу под своей учётной записью — всё отображается идеально. Однако при подключении реального пользователя под его терминальной сессией колонтитулы напрочь исчезают с листа, хотя код формирования документа остаётся абсолютно идентичным.
Давайте подробно разберёмся, почему возникает эта проблема, как на отображение колонтитулов влияют настройки Windows, драйверы принтеров, системный реестр и неочевидные особенности самой платформы 1С:Предприятие. Мы пошагово проанализируем каждую причину и рассмотрим практические методы их устранения.
Начнем анализ с самой частой программной ошибки, которую допускают даже опытные разработчики. Обратим внимание на то, в каком порядке задаются свойства табличного документа в коде:
ТабДокумент.ПолеСнизу = 5;
ТабДокумент.НижнийКолонтитул.ТекстВЦентре = "Лист [&НомерСтраницы] от "+ДатаКолонтитул+" № "+НомерКолонтикул+"";
ТабДокумент.НижнийКолонтитул.НачальнаяСтраница = 1;
ТабДокумент.НижнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабДокумент.НижнийКолонтитул.Выводить = Истина;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ТРАНСПОРТНАЯНАКЛАДНАЯТаможня";
ТабДокумент.Показать();
В данном примере свойство ИмяПараметровПечати заполняется в самом конце, непосредственно перед выводом документа на экран с помощью метода Показать(). В этом и кроется главная проблема.
Как это работает в платформе 1С: когда мы присваиваем табличному документу конкретное значение ИмяПараметровПечати, платформа обращается к сохранённым настройкам принтера и страницы текущего пользователя ОС. Если этот пользователь ранее уже открывал эту форму или настраивал параметры печати вручную, 1С автоматически считывает старые параметры и перезаписывает ими все программно заданные свойства (включая размеры полей, настройки колонтитулов и признак их вывода).
Если у проблемного пользователя в сохраненных настройках вывод колонтитулов был отключен или сброшен, то строка с назначением имени параметров печати полностью затрёт ваш программный код.
Решение: всегда задавайте программную настройку полей и колонтитулов после того, как документу было присвоено имя параметров печати. Перепишем этот участок кода правильно:
// Сначала привязываем имя параметров печати, чтобы платформа загрузила сохраненные настройки пользователя
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ТРАНСПОРТНАЯНАКЛАДНАЯТаможня";
// И только теперь принудительно переопределяем нужные нам свойства программно:
ТабДокумент.ПолеСнизу = 10; // Увеличим поле для надежности
ТабДокумент.НижнийКолонтитул.ТекстВЦентре = "Лист [&НомерСтраницы] от " + ДатаКолонтитул + " № " + НомерКолонтикул;
ТабДокумент.НижнийКолонтитул.НачальнаяСтраница = 1;
ТабДокумент.НижнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабДокумент.НижнийКолонтитул.Выводить = Истина;
ТабДокумент.Показать();
При таком подходе программные установки гарантированно перекроют любые старые или поврежденные настройки, сохраненные у пользователя в системе.
Многие администраторы при возникновении проблем с печатью спешат очистить локальный кэш пользователя в папках AppData\Local\1C и AppData\Roaming\1C. Однако параметры отображения табличных документов хранятся в совершенно другом месте.
Платформа 1С сохраняет индивидуальные настройки печати для каждого ключа ИмяПараметровПечати в системном реестре Windows конкретного пользователя (ветка HKEY_CURRENT_USER). Если у терминального пользователя повреждена эта ветка или в ней записались некорректные ("нулевые") размеры полей, колонтитулы выводиться не будут.
Выясним, где именно хранятся эти записи и как их очистить:
regedit и нажмите Enter).HKEY_CURRENT_USER\Software\1C\1Cv8\BindPRN
HKEY_CURRENT_USER\Software\1C\1Cv82\Moxel (или аналогичные ветки Moxel для текущей версии платформы).ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ТРАНСПОРТНАЯНАКЛАДНАЯТаможня), и удалите их.После удаления этих записей при следующем формировании печатной формы платформа 1С создаст параметры «с чистого листа», используя настройки по умолчанию, прописанные в вашем коде.
Когда пользователь работает через удаленный рабочий стол (RDP), его локальные принтеры перенаправляются в сессию. При этом операционная система Windows Server по умолчанию задействует универсальный драйвер Remote Desktop Easy Print. Этот драйвер разработан для упрощения печати, но он очень часто некорректно передает в 1С параметры физической страницы, размеры полей и масштабирование.
Проанализируем техническую сторону этой проблемы:
ТабДокумент.ПолеСнизу = 5; (всего 5 миллиметров). Если у принтера проблемного пользователя минимальное непечатное поле составляет, к примеру, 7 или 10 миллиметров, принтер аппаратно отсечет всё, что выходит за эти рамки, и колонтитул просто пропадет.Способы решения:
ТабДокумент.ПолеСнизу = 12; // Задаем нижнее поле 12 мм
ТабДокумент.РазмерКолонтитулаСнизу = 8; // Явно выделяем 8 мм под колонтитул
Рассмотрим еще один неочевидный фактор — свойство автоматического масштабирования табличного документа. Часто разработчики включают его, чтобы документ красиво умещался на один лист по ширине:
ТабДокумент.Автомасштаб = Истина;
Если печатная форма получилась избыточно широкой (например, из-за длинных наименований номенклатуры, обилия колонок или специфического разрешения экрана/настроек принтера у конкретного пользователя), платформа 1С пытается сжать документ, чтобы он вписался в физические границы листа.
При слишком сильном программном сжатии (когда масштаб уменьшается до 60-70% и ниже) элементы разметки, включая колонтитулы, могут "схлопнуться" до нулевого размера или стать практически невидимыми для человеческого глаза точками внизу страницы.
Решение: временно отключите свойство Автомасштаб в коде и посмотрите, появятся ли колонтитулы на стандартном масштабе в 100%. Если они появились, значит, необходимо оптимизировать ширину макета печатной формы, уменьшить ширину колонок или сократить выводимый текст, чтобы платформе не приходилось экстремально сжимать документ при печати.
В некоторых релизах платформы 1С:Предприятие 8.3 наблюдается специфический баг: если свойства колонтитулов настраиваются в самом начале формирования табличного документа (до того, как в него были выведены области макета методами Вывести() или Присоединить()), параметры могут сброситься в процессе заполнения документа данными.
Решение: перенесите блок настройки полей, колонтитулов и параметров печати в самый конец процедуры формирования печатной формы. Настраивайте колонтитулы непосредственно перед вызовом метода Показать() или отправкой на печать, когда тело табличного документа уже полностью сформировано и заполнено.
Применяя эти комплексные методы диагностики — от исправления очередности строк кода до очистки веток реестра BindPRN и корректировки полей печати, вы сможете оперативно решить проблему пропадания колонтитулов у любых терминальных пользователей.