Как решить проблему с печатью иероглифов на принтере чеков Xprinter в 1С

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

При подключении недорогих китайских термопринтеров (например, популярной линейки Xprinter XP-Q200II, XP-58, XP-365B и др.) к решениям на платформе 1С:Предприятие пользователи часто сталкиваются с неприятной проблемой: вместо понятного русского текста на чеке печатаются китайские иероглифы, знаки вопроса или нечитаемые символы («кракозябры»).

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

Давайте разберем по шагам, как заставить ваш принтер разговаривать на русском языке.

Выясним причину проблемы. По умолчанию большинство китайских принтеров поставляются с завода настроенными на внутренний азиатский рынок. В их прошивке активирован двухбайтовый режим кодирования (Double-byte mode) для поддержки китайских иероглифов (кодировка GBK/BIG5). Когда программа 1С отправляет на принтер текстовые данные в однобайтовой кодировке Windows-1251 или DOS (CP866), принтер пытается интерпретировать каждые два байта как один китайский иероглиф. В результате на чековой ленте появляется восточная письменность.

Чтобы решить эту проблему, нам необходимо перевести принтер в однобайтовый режим работы (Single-byte mode) и указать ему правильную кодовую страницу, содержащую символы кириллицы.

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

Способ 1: Русификация принтера с помощью утилиты Xprinter Test (Printer_Test.exe)

Большинство современных моделей Xprinter не имеют физических DIP-переключателей на корпусе. Вся настройка выполняется программно через заводскую утилиту Xprinter Test (также известную как Printer_Test.exe). Скачать её можно с официального сайта производителя.

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

  1. Подключите принтер чеков к компьютеру по интерфейсу USB, заправьте термоленту и включите питание устройства.
  2. Запустите утилиту Printer_Test.exe. Если интерфейс открылся на китайском языке, найдите в верхнем или правом углу кнопку English и переключите языковую локализацию.
  3. В разделе выбора портов (Port Select) укажите тип подключения USB. При необходимости нажмите кнопку проверки связи, чтобы убедиться, что утилита видит принтер.
  4. Очистите поле ввода команд с помощью кнопки Clear.
  5. Критически важно: Обязательно установите галочку HEX рядом с полем отправки данных. Если этого не сделать, команды уйдут на принтер как обычный текст и не будут им распознаны как управляющие инструкции.
  6. Введите команду для отключения китайского двухбайтового режима кодирования. В поле ввода наберите следующую HEX-последовательность: 1F 1B 1F FE 01 Нажмите кнопку Print (или Send). Принтер при этом не должен ничего печатать, но может издать короткий писк.
  7. Сразу после этого введите подтверждающую команду для записи изменений в EEPROM-память принтера: 1F 1B 1F FE 11 Снова нажмите кнопку Print. Это зафиксирует отключение китайского режима.
  8. Перейдите в расширенные настройки утилиты, нажав на кнопку Advanced (или Set DIP в зависимости от версии утилиты).
  9. Найдите блок настройки кодовых страниц (Code page Settings / Set Code Page). Нам необходимо выбрать страницу, содержащую кириллицу. В зависимости от прошивки вашего принтера введите одно из следующих значений:
    • 17 (Page17 — стандартная кодировка кириллицы CP866 для большинства моделей);
    • 7 (Page7 — альтернативный индекс CP866 на новых версиях плат управления);
    • 23 (Page23 — кодировка Windows-1251, часто используемая в гибридных принтерах этикеток и чеков).
  10. Нажмите кнопку SetCodePage для сохранения конфигурации. Затем нажмите кнопку PrintCodePage (Печать тестовой страницы кодировок). Принтер распечатает длинную ленту со всеми доступными символами. Проанализируйте распечатку: напротив выбранной вами страницы (например, Page17) должен корректно отображаться русский алфавит.
  11. Выключите принтер тумблером питания на 10 секунд, затем включите снова. Сделайте пробную печать чека из 1С.

Способ 2: Переключение режима работы гибридных принтеров (с этикеток на чеки)

Если в вашей работе используется гибридный принтер (например, серии Xprinter XP-365B или XP-370B), проблема с иероглифами может быть вызвана тем, что устройство функционирует в неверном режиме печати.

Такие принтеры поддерживают два протокола работы:

Если принтер находится в режиме этикеток, он игнорирует стандартные команды смены кодовых страниц ESC/POS, отправляемые из 1С:Розница или утилиты XP-Test, и выводит иероглифы. Переключим режим аппаратно:

  1. Полностью выключите питание принтера кнопкой на корпусе.
  2. Зажмите кнопку PAUSE (на некоторых моделях необходимо зажимать кнопку FEED) и, удерживая её нажатой, включите питание принтера.
  3. Не отпускайте кнопку до тех пор, пока принтер не пикнет и не распечатает небольшой сервисный чек, на котором будет указан текущий режим работы (например, Emulation: ESC/POS или Emulation: TSPL).
  4. Однократно нажмите кнопку FEED для переключения активного режима работы. Принтер должен распечатать строку с новым выбранным режимом (нам нужен Receipt или ESC/POS).
  5. Перезагрузите устройство, выключив и включив питание. Теперь принтер готов принимать чековые команды и настраиваться по первому способу.

Способ 3: Прямое управление кодировкой через ESC/POS из кода 1С

Если вы разрабатываете собственную систему печати чеков или кастомизируете существующую конфигурацию 1С, и данные отправляются напрямую в порт принтера (например, через COM, LPT или виртуальный USB-порт как RAW-данные), принтер берет шрифты из своего внутреннего ПЗУ. Чтобы текст на чеке не превратился в иероглифы, мы должны передать принтеру управляющие команды непосредственно перед отправкой самого текста.

Проанализируем пример кода на встроенном языке 1С. Для того чтобы принтер понял русский текст, мы должны инициализировать его, принудительно переключить кодовую страницу на кириллицу (например, страницу 17 - CP866) и перекодировать отправляемую строку в формат DOS (CP866).

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


Процедура НапечататьЧекНаXprinter()
    
    // Определяем имя порта, к которому подключен принтер (например, COM3 или LPT1)
    ИмяПорта = "COM3";
    
    // Создаем объект для записи данных в порт
    ЗаписьПорта = Новый ЗаписьТекста;
    
    Попытка
        // Открываем порт. Важно указать кодировку OEM (CP866) для корректной передачи кириллицы
        ЗаписьПорта.Открыть(ИмяПорта, КодировкаТекста.OEM);
    Исключение
        Предупреждение("Не удалось открыть порт принтера: " + ОписаниеОшибки());
        Возврат;
    КонецПопытки;
    
    // Формируем управляющие ESC/POS команды в виде символов по их ASCII-кодам
    
    // 1. Инициализация принтера: ESC @ (HEX: 1B 40, DEC: 27 64)
    КомандаИнициализации = Символ(27) + Символ(64);
    
    // 2. Выбор таблицы символов кириллицы (CP866): ESC t n (HEX: 1B 74 n)
    // Где n = 17 (DEC: 17) для выбора Page17
    КомандаВыбораКодировки = Символ(27) + Символ(116) + Символ(17);
    
    // Отправляем управляющие команды на принтер
    ЗаписьПорта.Записать(КомандаИнициализации);
    ЗаписьПорта.Записать(КомандаВыбораКодировки);
    
    // Формируем тело чека
    ЗаписьПорта.ЗаписатьСтроку("ДОБРО ПОЖАЛОВАТЬ!");
    ЗаписьПорта.ЗаписатьСтроку("ООО 'Наша Торговая Компания'");
    ЗаписьПорта.ЗаписатьСтроку("--------------------------------");
    ЗаписьПорта.ЗаписатьСтроку("Товар 1:                   100.00 руб.");
    ЗаписьПорта.ЗаписатьСтроку("Товар 2:                   250.50 руб.");
    ЗаписьПорта.ЗаписатьСтроку("--------------------------------");
    ЗаписьПорта.ЗаписатьСтроку("ИТОГО:                     350.50 руб.");
    ЗаписьПорта.ЗаписатьСтроку("СПАСИБО ЗА ПОКУПКУ!");
    
    // Команда частичной отрезки бумаги (если поддерживается принтером)
    // GS V m (HEX: 1D 56 00, DEC: 29 86 0)
    КомандаОтрезки = Символ(29) + Символ(86) + Символ(0);
    ЗаписьПорта.Записать(КомандаОтрезки);
    
    // Закрываем порт, завершая передачу данных
    ЗаписьПорта.Закрыть();
    
КонецПроцедуры

В данном примере использование объекта ЗаписьТекста с параметром КодировкаТекста.OEM гарантирует, что 1С автоматически преобразует строки из внутреннего формата UTF-16 в однобайтовую кодировку CP866. Команда Символ(27) + Символ(116) + Символ(17) указывает принтеру искать символы именно в 17-й кодовой таблице своей памяти.

Способ 4: Загрузка русских шрифтов для принтеров этикеток (EPL / ZPL)

Некоторые специализированные принтеры этикеток Xprinter работают по протоколам EPL или ZPL и не поддерживают стандартный набор команд ESC/POS. В таких устройствах кириллические шрифты могут полностью отсутствовать на аппаратном уровне. В этом случае смена кодовых страниц не поможет — принтер просто не знает, как рисовать русские буквы.

Решить эту проблему можно путем прямой загрузки файла кириллического шрифта в FLASH-память принтера:

  1. Запустите специализированную утилиту администрирования принтеров этикеток — Diagnostic Tool.
  2. Перейдите во вкладку управления файлами (File Manager или Command Tool).
  3. Выберите стандартный файл шрифта с расширением .ttf (например, Arial или Courier New из папки C:\Windows\Fonts), поддерживающий русский язык.
  4. Загрузите этот файл во внутреннюю память принтера, назначив ему уникальный буквенный идентификатор (например, шрифт "E").
  5. При формировании шаблона печати этикетки на языке ZPL укажите принтеру использовать загруженный шрифт и установите кодировку UTF-8 с помощью команды ^CI28. Пример ZPL-кода для отправки на принтер:

^XA
^CI28
^CWQ,E:ARI_CYR.TTF
^FO50,50^A0N,36,20^FDРусский текст на этикетке^FS
^XZ

Полезный бонус: Отключение раздражающего писка (пищалки) Xprinter

Многие владельцы принтеров Xprinter жалуются на очень громкий и неприятный звуковой сигнал (писк), который принтер издает при завершении печати каждого чека. Это сильно утомляет кассиров и раздражает покупателей. Отключить или вернуть этот звук можно программно с помощью HEX-команд в той же утилите Xprinter Test:

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

← На главную