IE2017

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

Оборудование - POS терминал

Некоторые варианты для работы с принтером чеков 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;

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




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


 

Скачать файлы

Наименование Файл Версия Размер
PL2303_Prolific_DriverInstaller_v1.5.0.rar
.rar 2,76Mb
18.08.14
29
.rar 2,76Mb 29 Скачать
Posiflex_Windows_Drivers.rar
.rar 386,25Kb
18.08.14
55
.rar 386,25Kb 55 Скачать
Способ2.rar
.rar 1,40Mb
18.08.14
44
.rar 1,40Mb 44 Скачать
MSCOMM32.rar
.rar 45,46Kb
18.08.14
37
.rar 45,46Kb 37 Скачать
Документация, драйвера и т.п.
.rar 13,03Mb
22.03.15
25
.rar 13,03Mb 25 Скачать

См. также

Комментарии
1. Ruslan Ruslan (flyer) 240 19.08.14 15:11 Сейчас в теме
у них есть модель с LAN. подскажи может знаешь как отправить на нее команды для формирования чека.
2. Ivan Veres (MrFlanker) 105 19.08.14 22:29 Сейчас в теме
Не сталкивался с LAN (они дороже стоят :-))

Не знаю помогут ли мои теоретические рассуждения:
- По любому есть еще другие интерфейсы (USB, RSR-232)
- Полюбас должны быть дрова для Windows принтера (способ 1.)
- Может есть дрова для проброса RSR-232 через LAN
3. Константин Юрин (kostyaomsk) 70 26.08.14 11:30 Сейчас в теме
Очень интересно написано. Надеюсь подобное изложение пригодится.
4. Ivan Veres (MrFlanker) 105 26.08.14 12:23 Сейчас в теме
Вчера заставил работать один из таких принтеров, который выжил при пожаре.... Весь поплавился но работает, никакая другая техника не выжила. Короче заставил его работать в локальной 1с-ке, и паралельно в терминальной режиме в другой 1с-ке. А так же с соседних компьютеров в любом режиме локально или из rdp-сессии.


Все штатно даже конфу УТ 10.3 не менял, только печатную форму создал. Для соседних компов естественно проброс порта com over ethernet сторонней прогой.
5. Алексей Сентяков (oooeks) 8 15.11.14 23:15 Сейчас в теме
По первому варианту хочу добавить: если в настройка принтера поставить 90 dpi вместо 180, то скорость печати через Win-драйвер увеличивается. Не летает, конечно, но хоть работать можно уже...
6. Ivan Veres (MrFlanker) 105 16.11.14 14:49 Сейчас в теме
(5) oooeks,
Спасибо за совет.... а вот новые принтера AURA 8800 c USB интерфейсом, сразу летают, и прекрасно печатают через Win драйвер. Просто делаешь макет, в том числе логотипы и любая графика, все летает. Недавно парочку установил.
7. semario (semario) 9 29.12.14 12:26 Сейчас в теме
настроил p-6900 через ком-порт. перемычки передвинул в состояние "ON" с 1-6. Печатает иероглифы вместо кириллицы, как обойти это?
8. Ivan Veres (MrFlanker) 105 05.01.15 18:08 Сейчас в теме
(7) semario,
Очевидно что-то с кодировкой... отправь символы Chr(1..255) для проверки....есть ли вообще русские буквы.
Тут много заковырок из-за того что новая 1С используют кодировку UTF а не ANSI.... нужно вникать.
9. Александр Зайцев (ozaycev) 183 24.02.15 13:56 Сейчас в теме
Все скачал, но так и не нашел "Документация.rar". Пробую способ №3, печатает не корректно. Что то с кодировкой. Подскажите где найти коды и как исправить проблемы с кодировкой.
10. Ivan Veres (MrFlanker) 105 25.02.15 09:12 Сейчас в теме
У меня нормальная кодировка, вникать некогда.
Вот рабочая обработка для 1С 8 Управление Торговлей 10.3. Форма. Печать товарного чека.
Можешь ее поковырять.

http://dropmefiles.com/xZqEw

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

Я уже писал по кодировке много вариантов, нужно вникать... некогда.
Обрати внимание что функции ASC и CHR я привожу свои, так как 1С-кие работать не будут.(они есть в обработке)
11. Алексей Т. (CratosX) 98 12.03.15 19:18 Сейчас в теме
Разве фискальный регистратор нельзя использовать в качестве принтера чеков, в случае если он нефискализирован?
12. Ivan Veres (MrFlanker) 105 13.03.15 04:40 Сейчас в теме
(11) CratosX,
Можно конечно, по крайней мере те что мне попадались поддерживают команду Печать().....печатай что хочешь на здоровье.
Просто не пользуйся функционалам для пробития чека.
13. Pavel Kur (profnet) 13.03.15 15:33 Сейчас в теме
Здравствуйте, у меня тоже проблема с кодировкой, решить не удалось. Решение кто нибудь нашел? )
14. pakko (pakko) 6 18.03.15 19:03 Сейчас в теме
И у меня проблема с кодировкой. Пока ничего не нашёл. Таблица символов не подошла
15. pakko (pakko) 6 18.03.15 19:25 Сейчас в теме
Хотя нет, разобрался
Ïîðò.Output=Chr(27)+"t"+Chr(17);
русский язык
16. Ivan Veres (MrFlanker) 105 20.03.15 03:39 Сейчас в теме
(15) pakko,
Ну вот хоть кто-то разобрался..,

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

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

Недавно купил пару Posiflex 8000, в компании Первый БИТ, поставил родные дрова для винды, печатает как пулемет как обычный принтер, в конце сам отрезает ленту..... ничего выдумывать даже не нужно....
17. Александр (user674850_sss-02) 20.01.17 22:24 Сейчас в теме
Если есть у кого-то ESC последовательность для открытия денежного ящика? Мне принтер достался PP6800B (com port)
19. Станислав Мотрий (snels.sm) 13.07.17 12:22 Сейчас в теме
Довольно полезная статья. Перемучился я с Posiflex PP-9000. Надо попробовать отвязаться от атоловских драйверов.
Оставьте свое сообщение