При переходе на операционные системы семейства 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).
Процесс обмена данными выглядит следующим образом:
"A4", "iso_a4_210x297mm", "Letter").libMagickCore, этим первым элементом оказывается либо американский стандарт Tabloid, либо инженерные форматы asme_f и edp.Данная проблема носит массовый характер и зарегистрирована в баг-трекере 1С под номерами 60000024 и 000056916. Проявление ошибки сильно зависит от используемого PPD-драйвера принтера (наиболее подвержены сбою принтеры Kyocera, HP и виртуальные принтеры CUPS-PDF) и системных локалей.
Если в вашей организации развернута ИТ-инфраструктура на базе Linux, самым надежным и долгосрочным решением проблемы является обновление технологической платформы «1С:Предприятие».
Разработчики из компании 1С полностью исправили логику парсера PPD-файлов и маппинга системных форматов печати в Linux. Ошибка исправлена в следующих релизах:
Если у вас есть возможность обновить платформу на сервере и клиентах до указанных версий, выполните это обновление. Проблема с автоматическим выбором формата Tabloid исчезнет без необходимости внесения изменений в код или настройки операционной системы.
Что делать, если конфигурация привязана к старой платформе и оперативно обновить ее невозможно? В этом случае мы можем прибегнуть к программному изменению параметров выводимого табличного документа во внешних печатных формах или модулях печати конфигурации.
Стандартный реквизит табличного документа РазмерСтраницы при явной установке в значение "A4" может игнорироваться парсером диалога печати Linux. Однако мы можем заставить систему применить точные геометрические размеры листа вручную. Для этого переопределим параметры страницы в миллиметрах, используя значение "Custom".
Рассмотрим пример кода, который необходимо внедрить в процедуру печати перед выводом документа на экран или отправкой на принтер:
// Создаем или получаем готовый табличный документ
ТабДок = Новый ТабличныйДокумент;
// Вместо стандартного ТабДок.РазмерСтраницы = "A4";
// задаем произвольный размер страницы
ТабДок.РазмерСтраницы = "Custom";
// Указываем точную высоту листа А4 в миллиметрах (297 мм)
ТабДок.ВысотаСтраницы = 297;
// Указываем точную ширину листа А4 в миллиметрах (210 мм)
ТабДок.ШиринаСтраницы = 210;
// Настраиваем автоматический масштаб, чтобы документ умещался по ширине листа
ТабДок.АвтоМасштаб = Истина;
Когда платформа 1С видит тип размера страницы "Custom" с жестко заданными величинами ВысотаСтраницы и ШиринаСтраницы, она генерирует для подсистемы GTK/CUPS точный запрос на создание пользовательского холста. Это исключает этап неверного автоматического сопоставления имен форматов А4, и документ уходит на печать в корректных пропорциях.
Если изменять код конфигурации нельзя, системный администратор может вмешаться в работу подсистемы печати Linux на уровне операционной системы. Мы можем принудительно заставить демона CUPS перезаписывать любые запросы приложений на формат бумаги, жестко выставляя формат А4 для целевых принтеров.
Откроем терминал на клиентской машине под управлением Linux и выполним команду, которая принудительно устанавливает формат медианосителя A4 по умолчанию для всех подключенных принтеров:
lpoptions -o media=A4
Если проблема возникает на конкретном сетевом или локальном принтере, укажем настройки для этого конкретного устройства (где вместо <Имя_Принтера> подставим его системное имя в CUPS):
lpoptions -p <Имя_Принтера> -o media=A4
Проделаем аналогичную операцию визуально:
http://localhost:631.В Linux-дистрибутивах на базе Debian (таких как Ubuntu, Linux Mint, Astra Linux) глобальный размер бумаги контролируется пакетом papersize. Проверим конфигурационный файл:
Откроем для редактирования файл /etc/papersize (потребуются права суперпользователя):
sudo nano /etc/papersize
Убедимся, что внутри этого файла записана единственная строка строчными буквами:
a4
Если там написано letter или указаны другие значения, сотрите их, напишите a4, сохраните файл и перезапустите службу печати командой sudo systemctl restart cups.
Существует удивительный, но работающий эмпирический метод обхода ошибки непосредственно из интерфейса 1С. Системные администраторы и опытные пользователи заметили, что разные форматы в 1С по-разному транслируются в диалог печати Linux.
Если у вас нет прав на обновление ПО и CUPS, откройте документ, подготовленный к печати, и выполните следующие действия:
Ctrl+P.Важное предупреждение: Метод с выбором формата JB5 является временным «костылем». Физические размеры формата JB5 составляют 182×257 мм, что меньше стандартного А4 (210×297 мм). На некоторых принтерах из-за разницы пропорций может сработать автоматическое масштабирование, из-за чего шрифты печатной формы станут незначительно меньше оригинальных. Используйте этот способ только в экстренных случаях.
Нередко возникает ситуация, когда администраторы уже обновили платформу до исправленной версии 8.3.16.1148+, однако у конкретных пользователей при печати определенных документов все равно продолжает выскакивать назойливый Tabloid. Почему это происходит?
Дело в том, что платформа 1С сохраняет индивидуальные настройки печати для каждого типа документов и каждого пользователя внутри информационной базы в специальном системном хранилище настроек (таблица SystemSettingsStorage). Ключи этих настроек имеют вид:
Общее/НастройкиПечатиТабличногоДокумента/ПАРАМЕТРЫ_ПЕЧАТИ_<ИмяПечатнойФормы>
Пока эти старые настройки сохранены в базе данных, 1С будет упорно считывать их и пытаться применить некорректно записанный некогда формат "Tabloid". Чтобы сбросить кэш индивидуальных настроек печати, воспользуемся программным методом.
Разберем пример кода обработки, которая удаляет устаревшие настройки печати для конкретного пользователя:
// Инициализируем имя пользователя, у которого наблюдаются проблемы
ИмяПользователяОшибки = "ИвановИИ";
// Получаем все настройки печати табличных документов для данного пользователя
// и производим их программное удаление из системного хранилища настроек
КлючОбъектаНастроек = "Общее/НастройкиПечатиТабличногоДокумента";
Попытка
// Удаляем устаревшую кэшированную запись из базы данных
ХранилищеСистемныхНастроек.Удалить(КлючОбъектаНастроек, , ИмяПользователяОшибки);
Сообщить("Кэш настроек печати для пользователя " + ИмяПользователяОшибки + " успешно очищен!");
Исключение
Сообщить("Не удалось очистить кэш настроек: " + ОписаниеОшибки());
КонецПопытки;
После выполнения этой несложной процедуры очистки при следующей отправке документа на печать платформа 1С заново опросит CUPS по исправленным алгоритмам и запишет корректные настройки формата А4 в базу данных.
Мы подробно изучили проблему сброса формата печати на Tabloid в ОС Linux и разобрали все возможные варианты борьбы с этой ошибкой. В качестве оперативных временных мер используйте установку размера "Custom" в миллиметрах в коде макетов 1С или принудительно задайте дефолтный размер бумаги в CLI CUPS с помощью lpoptions. В долгосрочной перспективе обязательно запланируйте обновление технологической платформы до актуальных релизов, где эта проблема решена разработчиками на системном уровне.