Как настроить печать конвертов DL из 1С в Linux на принтерах Kyocera?

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

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

Выясним причину такого поведения подсистемы печати и подробно разберем все способы решения данной проблемы.

Почему возникает сброс формата в Linux

Проанализируем цепочку взаимодействия платформы 1С с подсистемой печати CUPS на Linux:

  1. Несовпадение идентификаторов формата бумаги: в PPD-файлах драйверов принтеров Kyocera (KPDL/PostScript) конверт DL обычно обозначается техническим кодом EnvDL или DL. В то же время платформа 1С в программном свойстве РазмерСтраницы использует строковые значения ("Envelope DL" или "Конверт DL"). Если GTK/CUPS-прослойка клиента 1С не может сопоставить строковое значение с опциями конкретного PPD-файла, выбор сбрасывается на системное значение по умолчанию.
  2. Системные настройки libpaper и CUPS: если точный формат не определен, CUPS подставляет дефолтный системный размер страницы, которым в дистрибутивах Linux часто является US Letter.
  3. Специфика наименования принтеров: наличие пробелов и кириллических символов в системном имени принтера может вызывать сбои при передаче служебных параметров печати в CUPS.

Способ 1. Использование встроенных команд Kyocera PRESCRIBE

Принтеры Kyocera поддерживают аппаратный язык управления печатью PRESCRIBE. С его помощью можно принудительно задать параметры вывода, поместив специальную управляющую команду непосредственно в первую ячейку макета табличного документа со служебным шрифтом.

Посмотрим на пример программной установки команды принтеру:


ТабДокумент.Область("КомандаПринтеру").Текст = "!R! SPO P; DUPX 1; EXIT;";
ТабДокумент.Область("КомандаПринтеру").Шрифт = "PRESCRIBE";

Разберем данный подход: принтер перехватывает служебную последовательность !R! ... EXIT;, не выводит ее на печать, а применяет указанные параметры печати (ориентацию, лоток подачи, формат или дуплекс) на аппаратном уровне.

Способ 2. Создание отдельной очереди печати в CUPS

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

Разберем по шагам порядок настройки:

  1. Создадим в CUPS новую очередь печати с коротким именем на латинице без пробелов, например Kyocera_Envelope_DL.
  2. В настройках очереди по умолчанию (Default Options) укажем:
    • Размер страницы (Page Size): EnvDL (или DL);
    • Источник бумаги (Paper Source / Media Source): Manual Feed (Обходной лоток / ручная подача).
  3. В коде 1С укажем только имя настроенного принтера, не переопределяя свойство РазмерСтраницы:

ТабДокумент.ИмяПринтера = "Kyocera_Envelope_DL";
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Конверт_DL";
ТабДокумент.КлючПараметровПечати = "Ключ_Конверт_DL";
// Свойство РазмерСтраницы программно не заполняем,
// чтобы применились параметры по умолчанию из CUPS

Способ 3. Прямая печать через PDF и системную утилиту lp

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

Рассмотрим пример реализации:


ПутьКФайлу = ПолучитьИмяВременногоФайла("pdf");
ТабДокумент.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.PDF);

КомандаCUPS = "lp -d Kyocera_M2535 -o media=EnvDL " + ПутьКФайлу;
ЗапуститьПриложение(КомандаCUPS, , Истина);

УдалитьФайлы(ПутьКФайлу);

Движок 1С при экспорте в PDF сохраняет точные физические размеры макета, а утилита lp корректно передает параметр media=EnvDL драйверу принтера.

Способ 4. Корректировка PPD-файла и системного формата

Проанализируем конфигурационные файлы операционной системы:

  1. В файле /etc/papersize убедимся, что системный формат по умолчанию задан как a4, а не letter.
  2. При необходимости отредактируем файл конфигурации принтера в /etc/cups/ppd/<ИмяПринтера>.ppd, установив параметры по умолчанию:
    • *DefaultPageSize: EnvDL
    • *DefaultPageRegion: EnvDL
    • *DefaultImageableArea: EnvDL
  3. После внесения правок перезапустим службу CUPS в операционной системе.
← На главную