INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Кривенок Александра | Разработчик мобильных приложений | 1С-Рарус

«Монетизация. Как заставить приложение приносить прибыль раньше, чем вы потратите на него все деньги»

Кажется, что самое сложное в работе над тиражными приложениями - это этап разработки. Вроде бы "родили" конкурентоспособный продукт, и все , можно расслабиться, пить коктейли на пляже и ждать, пока пользователи выстроятся в очередь за подписками на ваше детище. Но нет...тут как раз и начинается все самое интересное. Оказалось, что так тщательно продуманная вами схема монетизации совсем не работает. Или работает, но далеко не так эффективно, как вы ожидали. Подписки не продаются, количество платников не растет, а график роста выручки похож на кардиограмму трупа. Жизнь - боль, а коктейли пьют ваши конкуренты. Так как же найти ее - оптимальную схему монетизации именно для вашего продукта? Как заставить приложение приносить деньги? За годы работы над Boss мы попробовали, наверное, все возможные варианты. Провели массу экспериментов. И кое-чему научились. - За что будем требовать деньги? Главные ошибки при выборе схемы монетизации. - Подписки vs покупки : кто круче? Основные плюсы и минусы обоих вариантов. - Триальный период. А надо ли? - Так за что же все таки готов платить ваш пользователь? Поиск оптимальной схемы. - Главное не спугнуть или как интерфейс влияет на рост продаж. Это и еще много чего интересного я расскажу в своем докладе. P.S. На основе реальных событий.

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

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

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

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

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

См. также

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

Не знаю помогут ли мои теоретические рассуждения:
- По любому есть еще другие интерфейсы (USB, RSR-232)
- Полюбас должны быть дрова для Windows принтера (способ 1.)
- Может есть дрова для проброса RSR-232 через LAN
3. kostyaomsk 74 26.08.14 11:30 Сейчас в теме
Очень интересно написано. Надеюсь подобное изложение пригодится.
4. MrFlanker 143 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-драйвер увеличивается. Не летает, конечно, но хоть работать можно уже...
MrFlanker; +1 Ответить
6. MrFlanker 143 16.11.14 14:49 Сейчас в теме
(5) oooeks,
Спасибо за совет.... а вот новые принтера AURA 8800 c USB интерфейсом, сразу летают, и прекрасно печатают через Win драйвер. Просто делаешь макет, в том числе логотипы и любая графика, все летает. Недавно парочку установил.
7. semario 10 29.12.14 12:26 Сейчас в теме
настроил p-6900 через ком-порт. перемычки передвинул в состояние "ON" с 1-6. Печатает иероглифы вместо кириллицы, как обойти это?
8. MrFlanker 143 05.01.15 18:08 Сейчас в теме
(7) semario,
Очевидно что-то с кодировкой... отправь символы Chr(1..255) для проверки....есть ли вообще русские буквы.
Тут много заковырок из-за того что новая 1С используют кодировку UTF а не ANSI.... нужно вникать.
9. ozaycev 210 24.02.15 13:56 Сейчас в теме
Все скачал, но так и не нашел "Документация.rar". Пробую способ №3, печатает не корректно. Что то с кодировкой. Подскажите где найти коды и как исправить проблемы с кодировкой.
10. MrFlanker 143 25.02.15 09:12 Сейчас в теме
У меня нормальная кодировка, вникать некогда.
Вот рабочая обработка для 1С 8 Управление Торговлей 10.3. Форма. Печать товарного чека.
Можешь ее поковырять.

http://dropmefiles.com/xZqEw

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

Я уже писал по кодировке много вариантов, нужно вникать... некогда.
Обрати внимание что функции ASC и CHR я привожу свои, так как 1С-кие работать не будут.(они есть в обработке)
11. CratosX 101 12.03.15 19:18 Сейчас в теме
Разве фискальный регистратор нельзя использовать в качестве принтера чеков, в случае если он нефискализирован?
12. MrFlanker 143 13.03.15 04:40 Сейчас в теме
(11) CratosX,
Можно конечно, по крайней мере те что мне попадались поддерживают команду Печать().....печатай что хочешь на здоровье.
Просто не пользуйся функционалам для пробития чека.
13. profnet 13.03.15 15:33 Сейчас в теме
Здравствуйте, у меня тоже проблема с кодировкой, решить не удалось. Решение кто нибудь нашел? )
14. pakko 11 18.03.15 19:03 Сейчас в теме
И у меня проблема с кодировкой. Пока ничего не нашёл. Таблица символов не подошла
15. pakko 11 18.03.15 19:25 Сейчас в теме
Хотя нет, разобрался
Ïîðò.Output=Chr(27)+"t"+Chr(17);
русский язык
16. MrFlanker 143 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. Надо попробовать отвязаться от атоловских драйверов.
20. Alever 4 25.10.17 06:51 Сейчас в теме
Ничего не понимаю. Устанавливал этот принтер удаленно, Устал уже и намучился. Входные данные таковы: Соединение через COM-кабель, На принтере в служебном окне установлены 1 и 2 перемычки в состояние OFF, инструкция прочитана до дыр и включал и выключал и все что угодно делал удаленными руками кассира. Затем попросил сделать протяжку (зажать на кнопку вкл на принтере и держать пока длинный тестовый чек не выдаст) - и в итоге мне кассир говорт что где то этот принтер ей выдал сообщение Paper out. Сделал вывод - подобное оборудование удаленно настраивать не получится при наличии неквалифицированных людей на местах и никакие драйверы и софт не помогут!. Уф. Жалко (
21. user758409 17.04.18 13:47 Сейчас в теме
Запустил такие принтера в работу. У меня два 6800 и 6900. Поставил как windows-принтер. По другому не взлетело. Вопрос как теперь подать команду на денежный ящик?
22. MrFlanker 143 19.04.18 03:00 Сейчас в теме
(21) Насколько я понимаю команды подаются только через COM-порт.
- нужно установить соответствующий драйвер
- посылать соответствующие команды через COM-порт.

Через Windows-драйвер принтера это вряд ли возможно.
23. user787534 13.06.18 10:29 Сейчас в теме
Может кто знает как убрать разрезание длинного чека (на несколько страниц) у Posiflex 6900? Пробовал менять размер бумаги, но не помогло.
Оставьте свое сообщение