Почему пропадают колонтитулы при печати в 1С через RDP и как это исправить?

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

Разработчики и системные администраторы 1С часто сталкиваются с загадочным поведением печатных форм в терминальном режиме (RDP). Типичная ситуация: программист создаёт печатную форму, настраивает вывод колонтитулов, проверяет работу под своей учётной записью — всё отображается идеально. Однако при подключении реального пользователя под его терминальной сессией колонтитулы напрочь исчезают с листа, хотя код формирования документа остаётся абсолютно идентичным.

Давайте подробно разберёмся, почему возникает эта проблема, как на отображение колонтитулов влияют настройки Windows, драйверы принтеров, системный реестр и неочевидные особенности самой платформы 1С:Предприятие. Мы пошагово проанализируем каждую причину и рассмотрим практические методы их устранения.

Причина 1: Неверная очередность установки свойств в коде 1С

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


ТабДокумент.ПолеСнизу               = 5;
ТабДокумент.НижнийКолонтитул.ТекстВЦентре = "Лист [&НомерСтраницы] от "+ДатаКолонтитул+" № "+НомерКолонтикул+"";    
ТабДокумент.НижнийКолонтитул.НачальнаяСтраница = 1;
ТабДокумент.НижнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабДокумент.НижнийКолонтитул.Выводить = Истина;
ТабДокумент.ИмяПараметровПечати     = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ТРАНСПОРТНАЯНАКЛАДНАЯТаможня";
ТабДокумент.Показать();

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

Как это работает в платформе 1С: когда мы присваиваем табличному документу конкретное значение ИмяПараметровПечати, платформа обращается к сохранённым настройкам принтера и страницы текущего пользователя ОС. Если этот пользователь ранее уже открывал эту форму или настраивал параметры печати вручную, 1С автоматически считывает старые параметры и перезаписывает ими все программно заданные свойства (включая размеры полей, настройки колонтитулов и признак их вывода).

Если у проблемного пользователя в сохраненных настройках вывод колонтитулов был отключен или сброшен, то строка с назначением имени параметров печати полностью затрёт ваш программный код.

Решение: всегда задавайте программную настройку полей и колонтитулов после того, как документу было присвоено имя параметров печати. Перепишем этот участок кода правильно:


// Сначала привязываем имя параметров печати, чтобы платформа загрузила сохраненные настройки пользователя
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ТРАНСПОРТНАЯНАКЛАДНАЯТаможня";

// И только теперь принудительно переопределяем нужные нам свойства программно:
ТабДокумент.ПолеСнизу = 10; // Увеличим поле для надежности
ТабДокумент.НижнийКолонтитул.ТекстВЦентре = "Лист [&НомерСтраницы] от " + ДатаКолонтитул + " № " + НомерКолонтикул;    
ТабДокумент.НижнийКолонтитул.НачальнаяСтраница = 1;
ТабДокумент.НижнийКолонтитул.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
ТабДокумент.НижнийКолонтитул.Выводить = Истина;

ТабДокумент.Показать();

При таком подходе программные установки гарантированно перекроют любые старые или поврежденные настройки, сохраненные у пользователя в системе.

Причина 2: Хранение параметров печати в реестре Windows (ветки Moxel и BindPRN)

Многие администраторы при возникновении проблем с печатью спешат очистить локальный кэш пользователя в папках AppData\Local\1C и AppData\Roaming\1C. Однако параметры отображения табличных документов хранятся в совершенно другом месте.

Платформа 1С сохраняет индивидуальные настройки печати для каждого ключа ИмяПараметровПечати в системном реестре Windows конкретного пользователя (ветка HKEY_CURRENT_USER). Если у терминального пользователя повреждена эта ветка или в ней записались некорректные ("нулевые") размеры полей, колонтитулы выводиться не будут.

Выясним, где именно хранятся эти записи и как их очистить:

  1. Зайдите на терминальный сервер под учетной записью проблемного пользователя.
  2. Откройте редактор реестра Windows (нажмите комбинацию клавиш Win + R, введите regedit и нажмите Enter).
  3. Перейдите по следующему пути (в зависимости от версии платформы):
    Для 1С:Предприятия 8.3 путь обычно выглядит так:
    HKEY_CURRENT_USER\Software\1C\1Cv8\BindPRN
    Также проверьте ветку:
    HKEY_CURRENT_USER\Software\1C\1Cv82\Moxel (или аналогичные ветки Moxel для текущей версии платформы).
  4. Найдите ключи, содержащие имя ваших параметров печати (в нашем случае это ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ТРАНСПОРТНАЯНАКЛАДНАЯТаможня), и удалите их.

После удаления этих записей при следующем формировании печатной формы платформа 1С создаст параметры «с чистого листа», используя настройки по умолчанию, прописанные в вашем коде.

Причина 3: Технология TS Easy Print и физические ограничения принтеров

Когда пользователь работает через удаленный рабочий стол (RDP), его локальные принтеры перенаправляются в сессию. При этом операционная система Windows Server по умолчанию задействует универсальный драйвер Remote Desktop Easy Print. Этот драйвер разработан для упрощения печати, но он очень часто некорректно передает в 1С параметры физической страницы, размеры полей и масштабирование.

Проанализируем техническую сторону этой проблемы:

Способы решения:

  1. Увеличьте отступы в коде. Задайте более безопасное расстояние для нижнего поля и явно укажите высоту области самого колонтитула. Например:
    
    ТабДокумент.ПолеСнизу = 12; // Задаем нижнее поле 12 мм
    ТабДокумент.РазмерКолонтитулаСнизу = 8; // Явно выделяем 8 мм под колонтитул
    
  2. Проверьте параметры страницы вручную. Зайдите под проблемным пользователем в 1С, сформируйте печатную форму, выберите в главном меню Файл -> Параметры страницы. Убедитесь, что поля снизу и размер колонтитулов не равны нулю. Если они нулевые, укажите корректные значения вручную и сохраните настройки.
  3. Откажитесь от Easy Print для проблемных принтеров. Если есть возможность, установите "родной" драйвер принтера непосредственно на терминальный сервер и отключите использование Easy Print через групповые политики Windows (GPO) для этого принтера.

Причина 4: Влияние автомасштабирования на вывод данных

Рассмотрим еще один неочевидный фактор — свойство автоматического масштабирования табличного документа. Часто разработчики включают его, чтобы документ красиво умещался на один лист по ширине:

ТабДокумент.Автомасштаб = Истина;

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

При слишком сильном программном сжатии (когда масштаб уменьшается до 60-70% и ниже) элементы разметки, включая колонтитулы, могут "схлопнуться" до нулевого размера или стать практически невидимыми для человеческого глаза точками внизу страницы.

Решение: временно отключите свойство Автомасштаб в коде и посмотрите, появятся ли колонтитулы на стандартном масштабе в 100%. Если они появились, значит, необходимо оптимизировать ширину макета печатной формы, уменьшить ширину колонок или сократить выводимый текст, чтобы платформе не приходилось экстремально сжимать документ при печати.

Причина 5: Момент инициализации свойств колонтитула в коде

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

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

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

← На главную