Как решить проблему печати этикеток формата А4 вместо заданного размера на платформах 1С 8.3.16 и 8.3.17 под ОС Linux?

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

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

Причины возникновения проблемы

Мы выяснили, что основная причина возникновения данной проблемы кроется в полной переработке подсистемы работы с принтером, которая была реализована в версии 1С:Предприятие 8.3.16. Ранее для взаимодействия с принтерами использовались DLL-библиотеки в адресном пространстве клиента, но в новой архитектуре был введен отдельный запускаемый процесс. Это изменение, призванное, вероятно, повысить стабильность и изолировать ошибки, привело к возникновению новых сложностей, особенно при работе в среде Linux.

Рассмотрим подробнее сценарии, в которых проявляется некорректное поведение:

  1. Явное указание размеров: Когда мы явно указываем размеры листа под размер этикетки, 1С под ОС Linux просто не видит их и подставляет стандартные размеры листа формата А4.
  2. Принтер по умолчанию: В ситуации, когда под ОС Linux по умолчанию установлен принтер этикеток с заданным размером листа, 1С под Windows корректно берет принтер и размер бумаги по умолчанию (то есть размер этикетки). Однако в Linux 1С берет принтер по умолчанию из системы, но размер бумаги ошибочно устанавливает формата А4.

Дополнительно, проблемы с печатью из 1С под Linux возникают уже давно и могут быть связаны с некорректной работой внутренней библиотеки 1С libMagickCore-6.Q8.so.2 (которая является частью ImageMagick). Предполагается, что эта библиотека может жестко прописывать формат "Tabloid" или неправильно определять размеры бумаги, что, как мы видели, приводило к проблемам даже в версии 8.3.15, где 1С-ка автоматом подставляла формат Tabloid вместо А4, требуя ручной корректировки. Служба поддержки 1С часто акцентирует внимание на использовании только официально поддерживаемых дистрибутивов Linux, и любое отклонение от этого списка может привести к непредсказуемым проблемам.

Комплексный подход к решению проблемы

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

1. Проверка и настройка системных компонентов Linux

Для стабильной и корректной работы клиента 1С:Предприятия под Linux, включая функциональность печати, критически важно убедиться в наличии и правильной установке всех необходимых системных библиотек и шрифтов.

Установка необходимых библиотек:

Мы должны убедиться, что следующие библиотеки установлены в вашей операционной системе:

  1. libwebkitgtk-3.0.0: Важно, чтобы была установлена версия 1.4.3 или выше. Эта библиотека отвечает за корректное отображение веб-компонентов, которые могут использоваться 1С.
  2. libpng12: Библиотека для работы с PNG изображениями.
  3. libicu48: Библиотека для поддержки интернационализации и Unicode.
  4. ImageMagick (пакет libmagickcore-6.q16-dev): Используется для обработки изображений, и, как мы упоминали, её некорректная работа может влиять на определение размеров бумаги.
  5. libfontconfigl и libfreetype6-dev: Отвечают за работу со шрифтами и их растеризацию.
  6. libgsf-l-dev и libglib2.0-dev: Общие библиотеки для графического интерфейса и базовых функций.
  7. libodbcl: Библиотека для работы с ODBC-драйверами, если ваше решение использует их.

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

Шрифты:

Для корректного отображения и печати шрифтов мы настоятельно рекомендуем установить шрифты из состава Microsoft Core Fonts. Это обеспечит единообразие отображения документов, разработанных в 1С, независимо от операционной системы.

Актуальность дистрибутива Linux:

Мы заметили, что проблемы с печатью могут возникать даже в более новых версиях платформы 1С, таких как 8.3.18, особенно при обновлении дистрибутива Linux (например, переход с Ubuntu 20.04 на 22.04). В таких случаях часто проявляются артефакты в виде некорректной растеризации шрифтов, что может свидетельствовать о конфликтах новых версий системных библиотек с внутренними компонентами 1С.

2. Настройки принтера и CUPS

Настройки системы печати CUPS (Common Unix Printing System) в Linux играют ключевую роль в корректной работе принтеров.

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

Мы должны тщательно проверить и убедиться, что в настройках драйвера принтера в ОС Linux (которые обычно доступны через веб-интерфейс CUPS по адресу http://localhost:631 или через системные настройки печати) корректно установлен пользовательский размер бумаги, полностью соответствующий размеру вашей этикетки. Это критически важный шаг, так как 1С, по-видимому, не всегда корректно взаимодействует с этой системной информацией в версиях 8.3.16 и выше.

Переустановка принтера:

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

Обходное решение через CUPS-PDF и скрипты (Микросервис):

Это один из наиболее надежных обходных путей, упомянутых в форуме, который по сути является реализацией "микросервиса" или "прокладки". Мы можем настроить печать через виртуальный принтер cups-pdf. Логика следующая:

  1. Установка cups-pdf: Если он еще не установлен, устанавливаем пакет cups-pdf. Он создает виртуальный принтер, который вместо физической печати генерирует PDF-файлы.
  2. Настройка печати в 1С: В 1С мы отправляем документ на печать, выбирая в качестве принтера виртуальный CUPS-PDF Printer. Это позволит 1С корректно сформировать PDF-файл с нужными данными и размерами (если они были правильно заданы в макете 1С).
  3. Скриптовая отправка на физический принтер: После генерации PDF-файла (который обычно сохраняется в определенной директории, например, /var/spool/cups-pdf/ANONYMOUS/), мы можем использовать специальный скрипт. Этот скрипт будет отслеживать появление новых PDF-файлов в этой директории, обрабатывать их (при необходимости, например, преобразовывать в формат ZPL для термопринтеров) и отправлять на физический принтер этикеток. Например, для отправки ZPL можно использовать команду lpr -P <имя_принтера> -o raw <файл.zpl> или cat <файл.zpl> > /dev/usb/lp0. Для PDF-файлов можно использовать lp -d <имя_принтера> <файл.pdf>.

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

3. Настройки печати в 1С:Предприятии

Помимо системных настроек, мы должны также уделить внимание параметрам печати непосредственно в конфигурации 1С.

Параметры страницы в макетах этикеток:

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

  1. Установка масштаба: Всегда устанавливайте масштаб "По ширине страницы". Это поможет избежать обрезания содержимого, если размеры печати вдруг немного изменятся.
  2. Поля и колонтитулы: Для этикеток, где важен каждый миллиметр, мы рекомендуем устанавливать все поля и колонтитулы в значение "0" в параметрах страницы макета 1С. Это обеспечит максимальное использование доступной площади этикетки.

Особенности выбора типа печати:

При печати этикеток из табличных документов в 1С, мы можем столкнуться с двумя опциями, которые ведут себя по-разному:

  1. "Лента этикеток": Выбор этой опции иногда может привести к печати только одной этикетки, даже если в документе их несколько.
  2. "Лист А4": Парадоксально, но выбор "Лист А4" может напечатать все этикетки, но при этом с некорректными границами или размерами, поскольку 1С все еще "думает", что печатает на А4. Это подчеркивает суть проблемы, когда 1С игнорирует заданные пользовательские размеры.

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

4. Альтернативные подходы и общие рекомендации

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

Использование промежуточного ПО (Микросервис/Прокладка):

Как мы уже упоминали, это одно из наиболее эффективных решений. Мы можем разработать или использовать готовый "микросервис" (или "прокладку"), который будет принимать данные для печати от 1С. Этот сервис может:

  1. Принимать PDF-файлы: 1С отправляет на печать в виртуальный PDF-принтер (как описано выше), а микросервис затем берет эти PDF-файлы.
  2. Принимать необработанные данные: 1С может передавать сырые данные (например, XML, JSON с описанием этикетки) в микросервис.

После получения данных микросервис берет на себя задачу по их преобразованию в нужный формат (например, ZPL для термопринтеров TSC) и отправке непосредственно на принтер. Этот подход позволяет полностью изолировать проблемы взаимодействия 1С с принтерной подсистемой Linux и обеспечить надежную печать. На рынке существуют готовые решения для серверной печати, которые могут быть интегрированы.

Обновление драйверов принтера:

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

Настройка принтера в 1С:Библиотеке подключаемого оборудования:

Если вашего принтера нет в "Библиотеке подключаемого оборудования" 1С, мы можем настроить его как обычный системный принтер. В этом случае 1С будет использовать системные драйверы, и все настройки, сделанные в CUPS, станут критически важными.

Тестовая печать из другой программы:

Перед тем как пытаться печатать из 1С, мы всегда должны выполнить тестовую печать из другой программы в Linux (например, текстового редактора, браузера или графического редактора). Это позволит нам убедиться в общей работоспособности принтера и его драйверов в системе, исключив проблемы, не связанные с 1С.

Актуальные версии платформы 1С:

Мы выяснили, что проблема с подсистемой печати, появившаяся в 8.3.16, вроде как была исправлена в более поздних версиях платформы, возможно, начиная с 8.3.18. Если у вас есть возможность, мы рекомендуем попробовать обновиться до самой актуальной стабильной версии 1С:Предприятия. Однако, как мы уже отмечали, даже в 8.3.18 могут возникать новые проблемы, например, с растеризацией шрифтов при обновлении дистрибутива Linux, что свидетельствует о продолжающейся эволюции и отладке подсистемы печати под Linux.

В целом, эффективное решение проблемы печати этикеток в 1С под Linux на платформах 8.3.16 и 8.3.17 требует тщательного и системного подхода. Мы должны последовательно проверять и настраивать каждый уровень: от базовых системных библиотек и драйверов в Linux, через настройки CUPS, до параметров печати в самой 1С:Предприятии. В некоторых случаях, наиболее надежным решением может оказаться применение дополнительного программного слоя, такого как микросервис, для управления процессом печати.

← На главную