Как исправить ошибку печати в 1С на Linux, когда вместо формата А4 устанавливается Tabloid?

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

При переходе на операционные системы семейства Linux (такие как Ubuntu, Debian, Astra Linux, ALT Linux или OpenSUSE) пользователи и системные администраторы часто сталкиваются со специфическим поведением платформы «1С:Предприятие 8.3». Одной из наиболее раздражающих проблем является некорректный выбор формата страницы при отправке документов на печать. В параметрах страницы табличного документа может быть четко указан формат А4, однако при открытии стандартного диалога печати ОС Linux (через сочетание клавиш Ctrl+P или кнопку печати) система упорно предлагает формат Tabloid (фактически А3), edp, asme_f или Letter. В результате документы выводятся в неверном масштабе, обрезаются или вовсе блокируют очередь печати принтера.

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

Выясняем техническую причину сбоя

Для того чтобы понять, почему 1С заменяет стандартный А4 на гигантский Tabloid, обратимся к механизму взаимодействия платформы с подсистемой печати в Linux. В отличие от операционной системы Windows, где за маппинг принтеров отвечает стандартный графический подсистема GDI/Print Spooler, в Linux вывод на печать реализуется связкой библиотек GTK и службы печати CUPS (Common UNIX Printing System).

Процесс обмена данными выглядит следующим образом:

  1. При инициализации диалога печати платформа 1С обращается к CUPS и считывает параметры конфигурационных файлов принтера — так называемых PPD-файлов (PostScript Printer Description).
  2. В PPD-файле перечислены все поддерживаемые принтером физические форматы бумаги с их точными размерами в точках (например, "A4", "iso_a4_210x297mm", "Letter").
  3. Встроенный синтаксический анализатор (парсер) платформы 1С пытается сопоставить внутренние константы форматов 1С с текстовыми строками, полученными из CUPS.
  4. Из-за ошибки в логике парсера платформы (в версиях 8.3.14 и 8.3.15) точное сопоставление для строки формата А4 завершается неудачей. Платформа банально «не понимает», какой формат ей вернула система.
  5. В случае неудачи сопоставления алгоритм 1С сбрасывает выбор формата на значение по умолчанию. Этим значением становится первый элемент во внутреннем статическом массиве доступных форматов платформы. В зависимости от сборки и подключенной библиотеки графики libMagickCore, этим первым элементом оказывается либо американский стандарт Tabloid, либо инженерные форматы asme_f и edp.

Данная проблема носит массовый характер и зарегистрирована в баг-трекере 1С под номерами 60000024 и 000056916. Проявление ошибки сильно зависит от используемого PPD-драйвера принтера (наиболее подвержены сбою принтеры Kyocera, HP и виртуальные принтеры CUPS-PDF) и системных локалей.


Решение 1: Кардинальный способ (Обновление платформы)

Если в вашей организации развернута ИТ-инфраструктура на базе Linux, самым надежным и долгосрочным решением проблемы является обновление технологической платформы «1С:Предприятие».

Разработчики из компании 1С полностью исправили логику парсера PPD-файлов и маппинга системных форматов печати в Linux. Ошибка исправлена в следующих релизах:

Если у вас есть возможность обновить платформу на сервере и клиентах до указанных версий, выполните это обновление. Проблема с автоматическим выбором формата Tabloid исчезнет без необходимости внесения изменений в код или настройки операционной системы.


Решение 2: Программный обход проблемы в коде 1С (Для разработчиков)

Что делать, если конфигурация привязана к старой платформе и оперативно обновить ее невозможно? В этом случае мы можем прибегнуть к программному изменению параметров выводимого табличного документа во внешних печатных формах или модулях печати конфигурации.

Стандартный реквизит табличного документа РазмерСтраницы при явной установке в значение "A4" может игнорироваться парсером диалога печати Linux. Однако мы можем заставить систему применить точные геометрические размеры листа вручную. Для этого переопределим параметры страницы в миллиметрах, используя значение "Custom".

Рассмотрим пример кода, который необходимо внедрить в процедуру печати перед выводом документа на экран или отправкой на принтер:


// Создаем или получаем готовый табличный документ
ТабДок = Новый ТабличныйДокумент;

// Вместо стандартного ТабДок.РазмерСтраницы = "A4";
// задаем произвольный размер страницы
ТабДок.РазмерСтраницы = "Custom";

// Указываем точную высоту листа А4 в миллиметрах (297 мм)
ТабДок.ВысотаСтраницы = 297;

// Указываем точную ширину листа А4 в миллиметрах (210 мм)
ТабДок.ШиринаСтраницы = 210;

// Настраиваем автоматический масштаб, чтобы документ умещался по ширине листа
ТабДок.АвтоМасштаб = Истина;

Когда платформа 1С видит тип размера страницы "Custom" с жестко заданными величинами ВысотаСтраницы и ШиринаСтраницы, она генерирует для подсистемы GTK/CUPS точный запрос на создание пользовательского холста. Это исключает этап неверного автоматического сопоставления имен форматов А4, и документ уходит на печать в корректных пропорциях.


Решение 3: Системная настройка CUPS и параметров бумаги (Для администраторов)

Если изменять код конфигурации нельзя, системный администратор может вмешаться в работу подсистемы печати Linux на уровне операционной системы. Мы можем принудительно заставить демона CUPS перезаписывать любые запросы приложений на формат бумаги, жестко выставляя формат А4 для целевых принтеров.

Шаг 1. Переопределение настроек по умолчанию через CLI

Откроем терминал на клиентской машине под управлением Linux и выполним команду, которая принудительно устанавливает формат медианосителя A4 по умолчанию для всех подключенных принтеров:

lpoptions -o media=A4

Если проблема возникает на конкретном сетевом или локальном принтере, укажем настройки для этого конкретного устройства (где вместо <Имя_Принтера> подставим его системное имя в CUPS):

lpoptions -p <Имя_Принтера> -o media=A4

Шаг 2. Настройка через веб-интерфейс CUPS

Проделаем аналогичную операцию визуально:

  1. Откроем браузер на клиентском компьютере и перейдем по адресу локального администрирования CUPS: http://localhost:631.
  2. Перейдем во вкладку Printers (Принтеры) и выберем проблемное устройство.
  3. В выпадающем меню администрирования выберем пункт Set Default Options (Задать параметры по умолчанию).
  4. В разделе настроек размера бумаги (Paper Size / Media Size) принудительно выберем значение A4 вместо любых других и нажмем кнопку сохранения настроек.

Шаг 3. Проверка системной утилиты papersize

В Linux-дистрибутивах на базе Debian (таких как Ubuntu, Linux Mint, Astra Linux) глобальный размер бумаги контролируется пакетом papersize. Проверим конфигурационный файл:

Откроем для редактирования файл /etc/papersize (потребуются права суперпользователя):

sudo nano /etc/papersize

Убедимся, что внутри этого файла записана единственная строка строчными буквами:

a4

Если там написано letter или указаны другие значения, сотрите их, напишите a4, сохраните файл и перезапустите службу печати командой sudo systemctl restart cups.


Решение 4: Обходной путь "JB5" (Быстрое решение для пользователей)

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

Если у вас нет прав на обновление ПО и CUPS, откройте документ, подготовленный к печати, и выполните следующие действия:

  1. Перейдите в меню Таблица — Настройки печати — Параметры страницы.
  2. В поле выбора размера страницы найдите формат JB5 (или в некоторых дистрибутивах 17x11).
  3. Сохраните эти настройки и нажмите комбинацию клавиш Ctrl+P.
  4. Обратите внимание на открывшееся системное окно печати Linux: формат автоматически переключится на корректный А4!

Важное предупреждение: Метод с выбором формата JB5 является временным «костылем». Физические размеры формата JB5 составляют 182×257 мм, что меньше стандартного А4 (210×297 мм). На некоторых принтерах из-за разницы пропорций может сработать автоматическое масштабирование, из-за чего шрифты печатной формы станут незначительно меньше оригинальных. Используйте этот способ только в экстренных случаях.


Решение 5: Очистка кэша настроек печати в базе данных 1С

Нередко возникает ситуация, когда администраторы уже обновили платформу до исправленной версии 8.3.16.1148+, однако у конкретных пользователей при печати определенных документов все равно продолжает выскакивать назойливый Tabloid. Почему это происходит?

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

Общее/НастройкиПечатиТабличногоДокумента/ПАРАМЕТРЫ_ПЕЧАТИ_<ИмяПечатнойФормы>

Пока эти старые настройки сохранены в базе данных, 1С будет упорно считывать их и пытаться применить некорректно записанный некогда формат "Tabloid". Чтобы сбросить кэш индивидуальных настроек печати, воспользуемся программным методом.

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


// Инициализируем имя пользователя, у которого наблюдаются проблемы
ИмяПользователяОшибки = "ИвановИИ";

// Получаем все настройки печати табличных документов для данного пользователя
// и производим их программное удаление из системного хранилища настроек
КлючОбъектаНастроек = "Общее/НастройкиПечатиТабличногоДокумента";

Попытка
    // Удаляем устаревшую кэшированную запись из базы данных
    ХранилищеСистемныхНастроек.Удалить(КлючОбъектаНастроек, , ИмяПользователяОшибки);
    Сообщить("Кэш настроек печати для пользователя " + ИмяПользователяОшибки + " успешно очищен!");
Исключение
    Сообщить("Не удалось очистить кэш настроек: " + ОписаниеОшибки());
КонецПопытки;

После выполнения этой несложной процедуры очистки при следующей отправке документа на печать платформа 1С заново опросит CUPS по исправленным алгоритмам и запишет корректные настройки формата А4 в базу данных.

Резюме

Мы подробно изучили проблему сброса формата печати на Tabloid в ОС Linux и разобрали все возможные варианты борьбы с этой ошибкой. В качестве оперативных временных мер используйте установку размера "Custom" в миллиметрах в коде макетов 1С или принудительно задайте дефолтный размер бумаги в CLI CUPS с помощью lpoptions. В долгосрочной перспективе обязательно запланируйте обновление технологической платформы до актуальных релизов, где эта проблема решена разработчиками на системном уровне.

← На главную