При работе с торговым оборудованием в среде «1С:Предприятие 7.7» (особенно в конфигурации «Торговля и склад») системные администраторы часто сталкиваются со специфической проблемой: чековый принтер (например, популярный Posiflex Aura PP5200) начинает печатать на чеке нечитаемые символы, иероглифы или так называемые «крякозябры». При этом характер неисправности часто бывает «плавающим» — один чек выходит абсолютно нормальным, а на следующем позиции номенклатуры заменяются хаотичным набором знаков.
В этой статье мы подробно проанализируем причины возникновения этой проблемы — от аппаратных неисправностей электропитания до тонких настроек кодовых страниц и параметров передачи данных в операционной системе Windows. Мы разберем по шагам, как локализовать и устранить сбой.
Выясним причину, которая чаще всего приводит к «плавающему» характеру дефекта, когда принтер искажает символы случайным образом. В процессе печати термоголовка чекового принтера потребляет значительный импульсный ток, особенно при выводе плотного текста или графических элементов (например, логотипов). Если блок питания принтера выработал свой ресурс, в нем подсохли фильтрующие конденсаторы или его мощность просела, происходит следующее:
Решение проблемы:
Для проверки этой гипотезы временно подключите принтер к заведомо исправному блоку питания аналогичной мощности и напряжения (обычно для чековых принтеров используется БП на 24V). Если замена блока питания полностью решает проблему случайного появления иероглифов, значит, старый БП подлежит ремонту (замене конденсаторов) или утилизации.
Если принтер подключен через физический COM-порт (RS-232) или виртуальный COM-порт (через USB-интерфейс с эмуляцией USB-to-Serial), крайне важно правильно настроить синхронизацию передачи данных между операционной системой и принтером.
Когда 1С отправляет данные на печать быстрее, чем печатающий механизм успевает наносить их на термобумагу, внутренний буфер принтера переполняется. Если контроль потока отключен или настроен неверно, компьютер продолжает посылать байты в переполненный буфер. Происходит потеря управляющих ESC/POS-команд, из-за чего принтер перестает понимать кодировку и начинает выводить «мусор».
Разберем по шагам правильную настройку порта в Windows:
19200 или 115200 — она должна строго совпадать со значением на тест-листе самотестирования принтера Self-Test).Платформа 1С:Предприятие 7.7 по умолчанию формирует и передает текстовые данные в кодировке Windows-1251 (ANSI). В то же время большинство чековых принтеров аппаратно настроены на работу со стандартной DOS-кодировкой (CP866 / OEM 866) или требуют явного указания кодовой таблицы перед началом сессии печати.
Если кодовые страницы не совпадают, цифры и латинские символы будут печататься корректно, а вся кириллица превратится в нечитаемые символы.
Рассмотрим, как принудительно задать верную кодировку:
CP866 или CP1251 по умолчанию.
// Пример отправки ESC-команды выбора кодовой страницы CP866
Попытка
КомПорт = СоздатьОбъект("MSCOMMLib.MSComm");
КомПорт.CommPort = 1; // Номер вашего COM-порта
КомПорт.Settings = "19200,N,8,1";
КомПорт.PortOpen = 1;
// ESC t 7 — выбор кодовой страницы CP866 на многих ESC/POS принтерах
// Символ 27 (ESC), Символ 116 (t), Символ 7 (номер таблицы CP866)
КомандаИнициализации = Симв(27) + Симв(116) + Симв(7);
КомПорт.Output = КомандаИнициализации;
КомПорт.PortOpen = 0;
Исключение
Предупреждение("Не удалось инициализировать порт принтера!");
КонецПопытки
Многие чековые принтеры производятся в азиатских странах, и в их прошивках по умолчанию активен двухбайтовый режим отображения китайских иероглифов (Double-byte / Kanji / Chinese character mode). Если в потоке данных из 1С случайно проходит комбинация байтов, совпадающая с управляющей командой переключения режима, принтер мгновенно переходит в режим отображения иероглифов. После этого он начинает интерпретировать каждые два русских символа как один китайский знак.
Решение проблемы:
Запустите сервисную утилиту настройки принтера на компьютере и найдите опцию, связанную с поддержкой азиатских шрифтов (пункты Chinese character, Enable Kanji или Double-byte mode). Переведите эту настройку в состояние Disabled (Отключено) и сохраните конфигурацию в память принтера.
Если принтер подключен в системе как стандартный текстовый принтер через универсальный драйвер Generic / Text Only («Только текст»), операционная система задействует службу очереди печати (Print Spooler). При возникновении ошибок связи или накоплении старых заданий в очереди печати диспетчер печати Windows начинает отправлять данные некорректно.
Проанализируем шаги по очистке и настройке подсистемы печати:
C:\Windows\System32\spool\PRINTERS\ и удалите все находящиеся там файлы (это очистит зависший кэш печати).Выполнив предложенные шаги, мы сможем полностью исключить как аппаратные факторы (просадки блока питания, помехи кабеля), так и программные несоответствия кодировок и параметров портов, обеспечив стабильную и бесперебойную печать чеков из 1С 7.7.