gifts2017

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

Опубликовал Ivan Veres (MrFlanker) в раздел Оборудование - 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 20
.rar 2,76Mb
18.08.14
20
.rar 2,76Mb Скачать
Posiflex_Windows_Drivers.rar 43
.rar 386,25Kb
18.08.14
43
.rar 386,25Kb Скачать
Способ2.rar 36
.rar 1,40Mb
18.08.14
36
.rar 1,40Mb Скачать
MSCOMM32.rar 33
.rar 45,46Kb
18.08.14
33
.rar 45,46Kb Скачать
Документация, драйвера и т.п. 19
.rar 13,03Mb
22.03.15
19
.rar 13,03Mb Скачать

См. также

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

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


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

http://dropmefiles.com/xZqEw

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

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

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

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

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