Работа с принтером чеков Posiflex PP 6000, 7000, 8000

Некоторые варианты для работы с принтером чеков POSIFLEX AURA 6000, 7000, 8000.

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

Рассмотрим для начала пути которые у нас есть для работы с этим оборудованием.

Если у вас типовая конфигурация например «1С Управление Торговлей 10.3« идем в раздел «Сервис -> Торговое оборудование -> Подключение и настройка»
И видим что разделом «Принтер чеков» там и не пахнет.

Очевидно что 1С предполагает работу с принтерами чеков как с обычными принтерами и специальных обработок не требуется.

Способ 1. Установить Windows драйвер 

 — найти и установить Windows драйвер (в итоге на принтере можно будет печатать с любого приложения будь то Word, Paint, Notepad или 1С)
 — настроить макеты, печатные формы, чтобы влезало на ленту.

Плюсы: 
 — печать картинок без проблем ( не нужно задумываться как это сделать, сюда же штрих коды)
 — работает с любой 1С 7.7, 8.1, 8.2, 8.3 и т.д.
 — легок в установке и внедрении

Минусы:
 — Тормозит виндовский драйвер, печать идет медленно (если не вру всегда в графическом режиме)
 — ограниченные возможности принтера (не получится издавать звуки, фигурно нарезать ленту,… там на самом деле очень богатый API у принтера)

Установка:
1) Если принтер подключен через USB эмулятор COM порта, установим вначале драйвер порта. 
Для большинства «шнурков» (кабель USB->COM) что мне попадались подходил следующий драйвер «Prolific Driver PL2303«, поддерживает все Windows системы (32 и 64 bit)

 Supports the following Windows OS Family:
 — Windows 2000 SP4  
 — Windows XP SP2 and above (32 & 64 bit)  
 — Windows Server 2003 (32 & 64 bit)  — Windows Vista (32 & 64 bit)  
 — Windows 7 (32 & 64 bit)  
 — Windows Server 2008 / 2008 R2 (32 & 64 bit) . 

USB 1.1/2.0/3.0 Host Controller
 — Device using PL-2303H/HX/X version chips
 — Device using Prolific next-gen version chips (Codename EA/TA/TB)

Выкладываю файл для скачки:  PL2303_Prolific_DriverInstaller_v1.5.0.rar

2) После того как у нас появился COM-порт к которому подключен принтер чеков, самое время установить Windows драйвер, который будет взаимодействовать с этим портом. Мне в свое время попалось три файла.
 — PP7000-PP7000II-PP7700 for Windows 9x.zip
 — PP7000II-PP7700 Thermal Printer Driver for Windows 2000-NT-XPServer2003-VISTA.rar
 — PP8000-Windows Vista x64-Windows XP x64-Windows Server 2003 x64.zip

Выкладываю файл для скачки:  Posiflex_Windows_Drivers.rar

Способ 2. Установить родные драйвера POSIFLEX

Когда-то мне удалось скачать на официальном сайте родные драйвера. Не буду выкладывать дистрибутив, выложу готовые dll.

Родные дрова:
OPOSPOSPrinter.ocx — Файл драйвера необходимо зарегестрировать
flex.dll — Файл драйвера необходимо зарегестрировать
demo.exe — утилита для проверки драйвера, которая идет в комплекте с драйверами POSIFLEX

Для обращения из 1С нужно написать еще внешнюю компоненту, которая будет обращаться к этому драйверу и передавать ему ваши команды.

В свое время я накидал на Delphi:
PP7000.dll — Внешняя компонента для 1С, необходимо регестрировать Имя объекта: «Addin.PP7000» 
PPDemo.exe — Утилита вызывающая окно настройки PP7000.DLL. Программа подобно 1С обращается к внешней компоненте PP7000.DLL. При запуске вызывает функццию ShowProperties в которой можно установить необходимые параметры оборудования и протестировать работу устройства.
PP7000.ert — Обработка для работы с внешней компонентой PP7000. Подключает принтер чеков, как фискальный регистратор. (1С 7.7.)

Плюсы: 
 — работает все быстро
 — используется родной драйвер 
 — Отслеживает статус возврата принтера (то есть функции возвращают ответ, может быть ошибка какая приключилась)

Минусы:

 — нужно регистрировать две родных библиотеки и еще одну внешнюю компоненту PP7000.dll
 — Необходимо настраивать COM порт при помощи родных утилит или PPDemo.exe или ручками в реестре
 — Принтеру присваивается имя например «PP Demo» и в реестре прописывается какой COM-порт и baud rate используется для него. Так работает родной драйвер, вы сообщаете ему имя, а он из реестра считывает уже параметры соответствующие параметры порта и скорости. Пользователям нужны права доступа к реестру.

Выложу сразу все в одном архиве: родные дрова, компонента 1С, мои исходники на delphi = «Способ2.rar«

Способ 3. Обращаться к принтеру через порт (ESC — последовательности)

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

Для начала можно проверить работу принтера самым простым способом: Введите в командной строке «copy con com1» или «copy file.txt com1«, где file.txt — содержит ваш текст. Вместо com1 — укажите ваш порт. Не помню нужно ли двоеточие после «com1:«, попробуйте. Если принтер фурычит значит можно начинать посылать на него команды.

Нашел пару документов описывающих команды:
 — PP6000/PP7000/PP7000-II Детализация команд (Cjmmand1.doc)
 — Technical Documentation Printer Control Codes for SAMSUNG SRP-270 in Epson Emulation mode compared with Posiflex PP-5600 (Printer Control Codes for SAMSUNG SRP-270 and PP5600.pdf)

Насколько мне известно 1С 8.х не умеет напрямую работать с RS-232 портом, поэтому поищем любую библиотеку/компоненту для работы с портом.

Я выбрал MSCOMM32.OCX:
 — MSCOMM32.OCX — сама библиотека
 — MSCOMM32_License.reg — файл лицензии (вообще-то библиотека платная вроде)
 — regmscomm32.bat — сделал батничек для регистрации
 — readme.txt — на всякий случай если вы забыли что делать 🙂

Выложу одном архиве:  «MSCOMM32.rar«
Еще выкладываю расширенную документацию, там есть ESC-коды и многое другое. «Документация.rar«

Ну и самое главное код, выкладываю здесь, чтобы ничего не нужно было скачивать, если есть лишние $качайте все подряд 🙂

// Для получения кода в кодировке ANSI (1С использует UNICOD)
Функция Asc(value)
value = Лев(value,1);
Если value = """" Тогда return 34; КонецЕсли;

sc = Новый COMОбъект("MSScriptControl.ScriptControl");
sc.language="VBscript";
Возврат sc.eval("Asc("""+value+""")");
КонецФункции

// Для получения символа по коду ANSI (1С использует UNICOD)
Функция Chr(Code)
sc = Новый COMОбъект("MSScriptControl.ScriptControl");
sc.language="VBscript";
Возврат sc.eval("Chr("""+Code+""")");
КонецФункции

// Функция возващает структуру с управляющими кодами для принтера чеков POSIFLEX, коды отправляются на COM порт.
Функция POSIFLEX_Commands() Экспорт
Команды = новый Структура;

Команды.Вставить("ESC", Chr(27));                        // Escape (ESC)
Команды.Вставить("LF",  Chr(10));                     // Line feed (LF)

Команды.Вставить("Init", Chr(27) + Chr(64) );           // Инициализация принтера
Команды.Вставить("CharSetRus", Chr(27) + Chr(116) +  Chr(5) );       // Установить ANSI кодировку CP1251
Команды.Вставить("Cut", Chr(27) + Chr(105));            // Отрезать, Есть еше несколько других способов (1D 56 n) и другие


Команды.Вставить("Font",   Chr(27) + Chr(33));           // Установить шрифт, следущий символ номер шрифта
Команды.Вставить("Font1",  Chr(27) + Chr(33)+ Chr(0) );     // FONT 1
Команды.Вставить("Font1U", Chr(27) + Chr(33)+ Chr(128));     // FONT 1 Underline
Команды.Вставить("Font1B", Chr(27) + Chr(33)+ Chr(8) );     // FONT 1 Bold
Команды.Вставить("Font1BU",Chr(27) + Chr(33)+ Chr(136) );     // FONT 1 Bold Underline

Команды.Вставить("Font2",  Chr(27) + Chr(33)+ Chr(16));     // FONT 2
Команды.Вставить("Font2U", Chr(27) + Chr(33)+ Chr(144));     // FONT 2 Underline
Команды.Вставить("Font2B", Chr(27) + Chr(33)+ Chr(24));     // FONT 2 Bold
Команды.Вставить("Font2BU",Chr(27) + Chr(33)+ Chr(152));     // FONT 2 Bold Underline

Команды.Вставить("Font3",  Chr(27) + Chr(33)+ Chr(32));     // FONT 3
Команды.Вставить("Font3U", Chr(27) + Chr(33)+ Chr(160));     // FONT 3 Underline
Команды.Вставить("Font3B", Chr(27) + Chr(33)+ Chr(40));     // FONT 3 Bold
Команды.Вставить("Font3BU",Chr(27) + Chr(33)+ Chr(168));     // FONT 3 Bold Underline

Команды.Вставить("Font4",  Chr(27) + Chr(33)+ Chr(48));     // FONT 4
Команды.Вставить("Font4U", Chr(27) + Chr(33)+ Chr(176));     // FONT 4 Underline
Команды.Вставить("Font4B", Chr(27) + Chr(33)+ Chr(56));     // FONT 4 Bold
Команды.Вставить("Font4BU",Chr(27) + Chr(33)+ Chr(184));     // FONT 4 Bold Underline


// Русские аналоги
Команды.Вставить("Протянуть", Char(10) );
Команды.Вставить("Отрезать", Char(27) + Char(105));

возврат Команды;
КонецФункции


// Открывает порт, инициализирует принтер, возвращает ссылку на СОМОбъект MSCOMMLib для работы спортом
Функция POSIFLEX_OpenPort() Экспорт
// Использует библиотеку MSCOMM32.OCX для работы напрямую с портом
// Инициализирует принтер

CommPort = глСервер.POSIFLEX_GetPort(); // Считываем константу (Ваш порт, чиссло 1..255)

Попытка
Порт = новый COMОбъект("MSCOMMLib.MSComm.1");
Исключение
Сообщить("Не удается подключить библиотеку mscomm32.ocx");
Сообщить("Библиотека должна быть зарегестрирована и лицензирована");
КонецПопытки;

Если Порт.PortOpen = 1 Тогда Порт.PortOpen = 0; КонецЕсли;  //Закроем порт, если он уже открыт

Попытка
Порт.CommPort = CommPort;    // Номер порта
Порт.Settings = "19200,N,8,1";      // Параметры порта
Порт.PortOpen = 1;      // Открываем порт
Исключение
Сообщить("Не удается открыть порт COM"+CommPort+":");
возврат Неопределено;
КонецПопытки;


// Выбор устройства 1B 3D 01, Инициализация 1B 40, плюс фигня какая-то 1D 61 0F (такую строку посылвает на порт родной драйвер)
Порт.Output=Char(27)+Char(61)+Char(1) + Char(27)+Char(64) + Char(29)+Char(97)+Char(15);

// 1B 74 05, 1B 52 00 - Set Russian character code table
Порт.Output=Char(27)+Char(116)+Char(5) + Char(27)+Char(82)+Char(0);

Возврат Порт;
КонецФункции

Процедура POSIFLEX_Test() Экспорт
// Тест печати на принтере

Коды=POSIFLEX_Commands();
Порт=POSIFLEX_OpenPort();

Если Порт = Неопределено Тогда возврат; КонецЕсли;

Порт.Output=Коды.Font4BU+"Тест устройства";
Порт.Output=Коды.LF;
Порт.Output=Коды.Font1+Коды.LF;

Порт.Output=Коды.Font1+"Font 1.........................[42 symbol]"+Коды.LF;
Порт.Output=Коды.Font2+"Font 2.........................[42 symbol]"+Коды.LF;
Порт.Output=Коды.Font3+"Font 3....[21 symbol]"+Коды.LF;
Порт.Output=Коды.Font4+"Font 4....[21 symbol]"+Коды.LF;


Порт.Output=Коды.LF;
Порт.Output=Коды.LF;
Порт.Output=Коды.Cut;

/// Закрываем порт
Порт.PortOpen = 0;

КонецПроцедуры

Все способы могут работать параллельно друг другу, по очереди обращаясь к принтеру из разных приложений.
На этом все, надеюсь статья была полезной или интересной 🙂 

 

24 Comments

  1. flyer

    у них есть модель с LAN. подскажи может знаешь как отправить на нее команды для формирования чека.

    Reply
  2. MrFlanker

    Не сталкивался с LAN (они дороже стоят :-))

    Не знаю помогут ли мои теоретические рассуждения:

    — По любому есть еще другие интерфейсы (USB, RSR-232)

    — Полюбас должны быть дрова для Windows принтера (способ 1.)

    — Может есть дрова для проброса RSR-232 через LAN

    Reply
  3. jobkostya1c8

    Очень интересно написано. Надеюсь подобное изложение пригодится.

    Reply
  4. MrFlanker

    Вчера заставил работать один из таких принтеров, который выжил при пожаре…. Весь поплавился но работает, никакая другая техника не выжила. Короче заставил его работать в локальной 1с-ке, и паралельно в терминальной режиме в другой 1с-ке. А так же с соседних компьютеров в любом режиме локально или из rdp-сессии.

    Все штатно даже конфу УТ 10.3 не менял, только печатную форму создал. Для соседних компов естественно проброс порта com over ethernet сторонней прогой.

    Reply
  5. oooeks

    По первому варианту хочу добавить: если в настройка принтера поставить 90 dpi вместо 180, то скорость печати через Win-драйвер увеличивается. Не летает, конечно, но хоть работать можно уже…

    Reply
  6. MrFlanker

    (5) oooeks,

    Спасибо за совет…. а вот новые принтера AURA 8800 c USB интерфейсом, сразу летают, и прекрасно печатают через Win драйвер. Просто делаешь макет, в том числе логотипы и любая графика, все летает. Недавно парочку установил.

    Reply
  7. semario

    настроил p-6900 через ком-порт. перемычки передвинул в состояние «ON» с 1-6. Печатает иероглифы вместо кириллицы, как обойти это?

    Reply
  8. MrFlanker

    (7) semario,

    Очевидно что-то с кодировкой… отправь символы Chr(1..255) для проверки….есть ли вообще русские буквы.

    Тут много заковырок из-за того что новая 1С используют кодировку UTF а не ANSI…. нужно вникать.

    Reply
  9. ozaycev

    Все скачал, но так и не нашел «Документация.rar». Пробую способ №3, печатает не корректно. Что то с кодировкой. Подскажите где найти коды и как исправить проблемы с кодировкой.

    Reply
  10. MrFlanker

    У меня нормальная кодировка, вникать некогда.

    Вот рабочая обработка для 1С 8 Управление Торговлей 10.3. Форма. Печать товарного чека.

    Можешь ее поковырять.

    http://dropmefiles.com/xZqEw

    Чтобы в типовой работала, номер COM порта прописывается в контактной информации пользователя. (Смотри скриншот).

    Я уже писал по кодировке много вариантов, нужно вникать… некогда.

    Обрати внимание что функции ASC и CHR я привожу свои, так как 1С-кие работать не будут.(они есть в обработке)

    Reply
  11. CratosX

    Разве фискальный регистратор нельзя использовать в качестве принтера чеков, в случае если он нефискализирован?

    Reply
  12. MrFlanker

    (11) CratosX,

    Можно конечно, по крайней мере те что мне попадались поддерживают команду Печать()…..печатай что хочешь на здоровье.

    Просто не пользуйся функционалам для пробития чека.

    Reply
  13. profnet

    Здравствуйте, у меня тоже проблема с кодировкой, решить не удалось. Решение кто нибудь нашел? )

    Reply
  14. pakko

    И у меня проблема с кодировкой. Пока ничего не нашёл. Таблица символов не подошла

    Reply
  15. pakko

    Хотя нет, разобрался

    Ïîðò.Output=Chr(27)+»t»+Chr(17);

    русский язык

    Reply
  16. MrFlanker

    (15) pakko,

    Ну вот хоть кто-то разобрался..,

    p.s. Играйте с ESC последовательностями пробуйте разные кодировки, можно установить снифер для ком порта и смотреть какие команды посылают родные драйвера…. можно таблицы по ESC кодам найти…. для многих принтеров они похожи.

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

    Недавно купил пару Posiflex 8000, в компании Первый БИТ, поставил родные дрова для винды, печатает как пулемет как обычный принтер, в конце сам отрезает ленту….. ничего выдумывать даже не нужно….

    Reply
  17. user674850_sss-02

    Если есть у кого-то ESC последовательность для открытия денежного ящика? Мне принтер достался PP6800B (com port)

    Reply
  18. snels.sm

    Довольно полезная статья. Перемучился я с Posiflex PP-9000. Надо попробовать отвязаться от атоловских драйверов.

    Reply
  19. Alever

    Ничего не понимаю. Устанавливал этот принтер удаленно, Устал уже и намучился. Входные данные таковы: Соединение через COM-кабель, На принтере в служебном окне установлены 1 и 2 перемычки в состояние OFF, инструкция прочитана до дыр и включал и выключал и все что угодно делал удаленными руками кассира. Затем попросил сделать протяжку (зажать на кнопку вкл на принтере и держать пока длинный тестовый чек не выдаст) — и в итоге мне кассир говорт что где то этот принтер ей выдал сообщение Paper out. Сделал вывод — подобное оборудование удаленно настраивать не получится при наличии неквалифицированных людей на местах и никакие драйверы и софт не помогут!. Уф. Жалко (

    Reply
  20. user758409

    Запустил такие принтера в работу. У меня два 6800 и 6900. Поставил как windows-принтер. По другому не взлетело. Вопрос как теперь подать команду на денежный ящик?

    Reply
  21. MrFlanker

    (21) Насколько я понимаю команды подаются только через COM-порт.

    — нужно установить соответствующий драйвер

    — посылать соответствующие команды через COM-порт.

    Через Windows-драйвер принтера это вряд ли возможно.

    Reply
  22. user787534

    Может кто знает как убрать разрезание длинного чека (на несколько страниц) у Posiflex 6900? Пробовал менять размер бумаги, но не помогло.

    Reply
  23. progres5

    Во втором способе при печати из PPDemo.exe не работает кириллица, т.е. латинские символы и цифры печатаются, а русские — в виде иероглифов. Параметр SharacterSet изменить не удается. Прошу подсказать, как можно работать с русскими символами 2-м способом?

    Reply
  24. progres5

    Проблему печати кириллицы решил. Пришлось доработать (перекомпилировать) pp7000.dll и заменить dll posiflex последней версии. Удалось реализовать способ 2 для работы по LAN интерфейсу .

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *