gifts2017

Подключение фискального регистратора MG N707TS по http (TCP/IP) протоколу JSON (на базе ФР Novitus)

Опубликовал Evgeny K (mar_a) в раздел Оборудование - Фискальный регистратор

Тестовая конфигурация и пример работы по общению с фискальным регистратором MG N707TS по HTTP протоколу командами в формате JSON.
Обратите внимание, что аппарат может работать и классическим методом по RS232 - подробнее тут http://infostart.ru/public/317286/, но производитель уделяет больше внимания протоколу HTTP JSON (TCP/IP)
Добавили еще обработку по работе с кассовым аппаратом MG-V545T по схожему принципу детальнее ... http://infostart.ru/public/530619/

Многие разработчики используют подключение фискального регистратора через OLE объекты различных разработчиков - как платных, так и бесплатных.
Пожалуй, вам будет интересна такая возможность, как работа с ФР (фискальным аппаратом) без участия драйверов, а именно по HTTP протоколу (именно как утверждают разработчики - это должно стать очередной фишкой данного аппарата), но из-за того, что программисты 1С не всегда понимают, как без OLE объекта работать с внешним устройством, мы (именно мы, не я совместно создали это чудо огромное, спасибо Игорь К (IgKR ) Особенная БЛАГОДАРНОСТЬ, Сергей Шепелев, замечаниям от pumbaE  и многим другим, которые уже используют HTTP протокол как основной в работе с 1С (7.7 - 8.2 и 8.3 полностью реализованы на внутреннем языке 1С) к ним добавился w-divin . 

Хочу порекомендовать использовать именно такое общение с аппаратом - через http протокол по рекомендациям производителя!

 - Работа c аппаратом возможна как в Windows, так и в любой другой ОС, будь то Linux, Android, iOS, т.к. все команды передаются по http протоколу TCP/IP .

Дополнил файлы новой обработкой 1С 8.х без дополнительных объектов .epf DLL для нее не требуется ... все выполненно через WinHttp.WinHttpRequest.5.1 - В доказательство того, что аппарат может работать без сторонних OLE объектов и дополнительных компонент.

Возможности

- Сформировать чек (продать товар) в тесте один  на практике (можно и более) чек отправляется после того, как он будет полностью сформирован в 1С документе, установлены все скидки и наценки, будет указана форма оплаты и введена сумма денег от клиента.

- Формирует штрих-код в чеке товара и штрих-код всего чека

- Дает возможность добавлять произвольный текст внутри чека как комментарий

- Позволяет печатать нефискальный чек, состоящий только из строк коментария (служебный отчет). Порою это необходимо или для печати рецептуры для аптек, или печати доп. документов, используя фискальный принтер просто как принтер.

- Позволяет делать служебный внос/вынос разменной монеты или всей суммы перед Zотчетом по правилам фискальной (налоговой) службы.

- Позволяет печатать отчеты как текущей смены, так и отчеты за период (по датам или по номерам Z-отчетов)

- Позволяет определить степень заполнения контрольной ленты

- Определяет при открытой смене финальную дату, при которой аппарат заблокируется, если была нарушена связь с эквайером (чеки и отчеты не передавались в налоговую)

-Прочитать настройки модемной части фискального аппарата и при необходимости перепрограммировать хост (IP адрес или доменное имя)

 

Для стабильной работы рекомендуется:

1 Вводить в эксплуатацию аппарат также в переключенном режиме http 

2 Заполнять шапку чека, загрузку логотипа - только через ОБНОВЛЕННУЮ оболочку web броузера аппарата, не имеет значения через USB (Интерфейс RNDIS) или Ethernet

3 Если ВЫ тестировали аппарат или уже работали на нем, то перед переключением  в HTTP режим на апарате необходимо выполнить обнуляющий Zотчет

Выполнив все эти требования, ВЫ избавите себя от огромной головной боли.

-------------------------------------------------------------------------
* P.S. все вопросы и пожелания оставляйте тут, буду держать производителя в курсе событий.

(По мере возможности)

Нюансы:

Дополнил файлы новой обработкой 1С 8.х без дополнительных объектов .epf DLL для нее не требуется... все выполненно через WinHttp.WinHttpRequest.5.1 - В доказательство того, что аппарат может работать без сторонних OLE объектов и дополнительных компонент.


В архиве приведены скриншоты регистрации этой DLL - cо свойственным мне описанием :)

Для полноценной работы в http протоколе и для корректной Digest авторизации я решил использовать 
http://www.morpher.ru/WebServices/Morpher.asmx Вы можете создавать любые сборки или использовать стандартные библиотеки без регистрации. NestNet45.dll для тестирования 4.5 TestWebServices.dll для тестов 2.0
(Помоему тут http://infostart.ru/public/102172/ )

Для универсальности решения (как 1С 7.7 и ... по 1С 8.х) была применена именная такая методика с привлечением стороннего драйвера для работы по http, в частности, для прохождения Digest авторизации.

Хотя в 8.3 один (пожелавшийся остаться неизвестным) реализовал ВСЕ ЭТО полностью на встроенном языке 1С без применеия внешних объектов.

 В качестве парсера был использован также не совсем удачный метод, который можно изучить тут https://helpf.pro/faq82/view/1417.html , но более продвинутый метод реализован тут  http://infostart.ru/public/119601/ и в дальнейшем я думаю на него перейти, когда будет свободное время.


Обратите внимание, что аппарат может работать и классическим методом по RS232, подробнее тут http://infostart.ru/public/317286/ но производитель уделяет больше внимания протоколу HTTP JSON (TCP/IP)

Пишите пожелания и вопросы, отвечу по мере загруженности.

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

Наименование Файл Версия Размер Кол. Скачив.
Сборка http-json + обработка 8.х
.zip 127,42Kb
23.06.16
24
.zip 1.0.0.1 127,42Kb 24 Скачать
Обработка под 1С 8.х без дополнительных объектов
.epf 43,39Kb
23.06.16
14
.epf 1.2.0.5 43,39Kb 14 Скачать
Инструкция по работе с HTTP протоколом в JSON формате
.pdf 333,11Kb
12.05.16
11
.pdf 1.0.2 333,11Kb 11 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Igor Krishen (IgKR) 10.07.15 08:53
Привет! Я первый!
А про меня и Сергея Шепелева где упоминания ?
:)

По сути аппарат в эксплуатации для своей цены даже очень хорош!
Хорошо, то что по http можно собрать текущие данные аппаратов (у меня их больше 40) не выходя из кабинета.

правда есть один глюк, по неизвестным причинам регистратор выдает ошибку "xF9 - Кассир не зарегистрирован", хотя по электронной ленте видна регистрация. Лечится просто, послать "ноль-чек" от оператора который еще не проходил регистрацию в регистраторе 32й,31й,30й...

парсер JSON я предпочел от Александра Переверзева http://infostart.ru/public/119601/ (отдельное огромное спасибо), работает шустро, ~2-3 мс на строку, удобно, при запросе на cgi/state - возвращает соответствие Параметр-Значение, при обращении к /cgi/chk возвращает массив соответствий
2. Evgeny K (mar_a) 10.07.15 08:55
(1) IgKR, Я Сереги незнал фамилию, ща поставлю, а Вы у меня значитесь как Игорь К, можно указывать вашу фамилию?
Отдельное спасибо за сообщение не только ошибок, но и методов их устранения.
Вот IT Support domkofe.ua (Имени не знаю) также интегрировал человек в своё ПО за рабочий день судя по словам.
Из проблем с которыми он столкнулся
>>>> После фискализации увеличилось время обработки запросов фискальным
>>>> регистратором и ответ не успевал приходить из-за наличия таймаута в
>>>> нашем приложении.
Подчеркну что до фискализации ответы на запросы якобы были значительно быстрее чем после. Знаю точно что на первый запрос действительно долго аппарат авторизирует пользователя (хотя авторизацию кидаю насильно).
Тем не менее аппарат отдает 401 ошибку (нет авторизации), а только потом принимает логин/пароль видимо отсюда еще дополнительное время задержки... Потом аппарат привыкает к открытой сессии и до истечения времени существования авторизированной сессии отвечает довольно шустро на запросы.
Если пользователя это сильно напрягает - можно поставить свой IP в белый лист и аппарат будет быстро обрабатывать запросы от этого IP.

Еще отдельно хотелось-бы обратить внимание , на ИГРЫ по переключению протоколов.
Крайне НЕ рекомендуется в течении открытой смены - туда-сюда менять протокол работы с аппаратом с RS232 на HTTP и обратно.
Все манипуляции необходимо выполнять только при закрытой смене и снятом Z-отчете!!!
3. magic soft (magicsoft) 03.08.15 16:18
Windows 7x64
При регистрации dll появляется сообщение:
RegAsm : warning RA0000 : Регистрация неподписанной сборки с использованием параметра /codebase может вызвать конфликт данной сборки с другими приложениями, которые могут быть установлены на том же компьютере. Параметр /codebase предназначен только для подписанных сборок. Присвойте сборке строгое имя и повторите регистрацию.
Типы зарегистрированы успешно

При подключении 1С выдает: "Недопустимая строка с указанием класса"

Что можно предпринять?
4. Evgeny K (mar_a) 05.08.15 13:31
(3) magicsoft,
Рассмотрим Ваш случай как уникальный - регистрация была от админа?
DOTNET - я так понял стоит , но не раз замечено что более новый не поддерживает более старый, другими словами 4.5 требует установки 2.0 ... 3.0 ...4.0..4.1 и 4.5 , а не только 4.5 (как показал мой горький опыт с другими программами - поэтому в моем случае все обновления DOTNET производились поочередно).
Обращу внимание на NetFramework и его актуальной версии...
Я такую ошибку еще не встречал... но попытаюсь помочь.

Эта ошибка явно не касается аппарата или его обработки.
Как было указано ранее, что я не являюсь разработчиком этой DLL, поэтому тонкостей работы с различными ОС я не знаю ( http://infostart.ru/public/238584/ ) проще и корректнее обратиться к нему Serginio .




Установите ComVisible собственность "TRUE" в AssemblyInfo.cs файла. (Этот ответ дает Гугль - если поискать).
5. Дмитрий Елисеев (w-divin) 23.11.15 11:34
Хотя в 8.3 один (пожелавшийся остаться неизвестным) реализовал ВСЕ ЭТО полностью на встроенном языке 1С без применеия внешних объектов.


ну почему один? у меня тоже реализовано штатными методами 1С )))

выглядит примерно так (выдернуто из тестовой обработки):

Функция ПослатьЗапрос(Соединение, УРИ, Заголовки, СтрокаДляАвторизации, Счетчик, Пост=Ложь)
	СтрокаАвторизации = СформироватьСтрокуАвторизации(УРИ, СтрокаДляАвторизации, Счетчик);
	Заголовки.Вставить("Authorization", СтрокаАвторизации);
	
	Запрос = Новый HTTPЗапрос(УРИ, Заголовки);
	Если НЕ Пост Тогда
		Ответ = Соединение.Получить(Запрос);
	Иначе
			
	КонецЕсли;
	
	Возврат Ответ;
КонецФункции

Функция СформироватьСтрокуАвторизации(УРИ, СтрокаДляАвторизации, Счетчик, Снонс=Неопределено, Метод="GET")
	//Пробуем авторизоваться
	МассивПараметров = ОбщегоНазначенияКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаДляАвторизации, ",");
	МассивНонс = ОбщегоНазначенияКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(МассивПараметров[1]), """");
	Нонс = МассивНонс[1];
	МассивОпак = ОбщегоНазначенияКлиентСервер.РазложитьСтрокуВМассивПодстрок(СокрЛП(МассивПараметров[2]), """");
	Опак = МассивОпак[1];
	
	Если Снонс=Неопределено Тогда
		Снонс = УправлениеПользователями.СгенерироватьПароль();
	КонецЕсли;
	СтрокаСчетчика = СтроковыеФункцииКлиентСервер.ДополнитьСтроку(Микротрон.ЧислоВСтроку(Счетчик), 8, "0", "Слева");
	
	Пользователь = "2"; //service
	Пароль = "0"; //751426
	СтрокаАвторизации = "Digest username="+Пользователь+", realm=""HTROM"", ";
	СтрокаАвторизации=СтрокаАвторизации+"nonce="""+Нонс+""", ";
	СтрокаАвторизации=СтрокаАвторизации+"uri="""+УРИ+""", algorithm=MD5, ";
	//Формируем ответ (https://xakep.ru/2005/07/04/27203/)
	//Параметр uri должен совпадать с URI в запросе, а response — это
	//ответ, который вычисляется так:
	//response = H(H(A1) + «:» + nonce + «:» + H(A2))
	//H — хеш-функция, по умолчанию MD5
	//A1 = логин + «:» + realm + «:» + пароль
	//A2 = метод запроса + «:» + URI
	//метод запроса — это GET, POST и тд.
	А1 = ОбщегоНазначения.ПолучитьMD5_Сервер(""+Пользователь+":HTROM:"+Пароль);
	//Сообщить(А1);
	А2 = ОбщегоНазначения.ПолучитьMD5_Сервер(""+Метод+":"+УРИ);
	//Сообщить(А2);
	Респонс = ОбщегоНазначения.ПолучитьMD5_Сервер(""+А1+":"+Нонс+":"+СтрокаСчетчика+":"+Снонс+":auth:"+А2);
	//Сообщить(Респонс);
	СтрокаАвторизации=СтрокаАвторизации+"response="""+Респонс+""­", "; 
	
	СтрокаАвторизации=СтрокаАвторизации+"opaque="""+Опак+""", qop=auth, nc="+СтрокаСчетчика+", cnonce="""+Снонс+"""";
	
	Возврат СтрокаАвторизации;
КонецФункции

//Из общего модуля
Функция ПолучитьMD5_Сервер(Текст) Экспорт

    ОбъектХеш = Новый ХешированиеДанных(ХешФункция.MD5);
    ОбъектХеш.Добавить(Текст);
	
	ХешСумма = Строка(ОбъектХеш.ХешСумма);
	ХешСумма = СтрЗаменить(ХешСумма, " ", "");
	ХешСумма = СтрЗаменить(ХешСумма, Символы.НПП, "");
	
    Возврат НРег(ХешСумма);
КонецФункции // ПолучитьMD5_Сервер

...Показать Скрыть
6. Дмитрий Елисеев (w-divin) 23.11.15 12:11
И еще непонятно почему
Инструкция по работе с HTTP протоколом в JSON формате
.pdf 10.07.15 333,11Kb 4 1sm


она вполне свободно доступна по ссылке:

http://www.gera.com.ua/gera/dbfiles/%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D­0%BB_JSON_MG_N707TS.pdf
7. Evgeny K (mar_a) 23.11.15 13:54
(5) w-divin, Хорошо уже двое.
В любом случае эту фразу будем считать как призыв творить что-то своё...

У меня пока нет 8.3.х но как только поставлю я обязательно проверю и выложу.

Кроме всего прочего постарался выполнить на WinHttpRequest.5.1 , но есть нюансы с UTF-8 кодировкой и ее переводе с УКР (по крайней мере у меня).
Как только решу несколько проблем то можно будет еще заняться и Вашим примером под 8.3.х как вариант.

Теперь по поводу информации которую можно найти и на официальном источнике , есть 3 причины тому:
1) Я хотел что-бы тут был полный перечень файлов.
2) Частенько сервер бывает недоступен и файлы не так часто там и своевременно меняются.
3) И да я незнаю как съделать этот файл доступным для скачивания БЕСПЛАТНО, тут либо всю тему надосоздавать как бесплатную либо так как сейчас.
8. Дмитрий Елисеев (w-divin) 23.11.15 14:19
(7) ))) если интересно - могу скинуть непричесанную обработку. До практического внедрения еще не дошли. в тестовом режиме вроде все работает )))
9. Evgeny K (mar_a) 23.11.15 16:22
(8) w-divin, Да интересно глянуть, тем более, что видите как приходиться осваивать новое так сказать в ОнЛайн (опять повторюсь 8.3 еще не ставил даже).
Давайте в общедоступное место , пусть все качают и правят. На какой-нить file-обменник.
10. Андрей Федоренко (andreykfk) 27.11.15 15:19
Скачал вашу разработку, очень заинтересовала. Но есть проблема. Немогу запустить на 7.7

в этой стороке
httpRequest.PreAuthenticate = 1;

Ругается, говорит, что такого метода нет.
Буду рад помощи.
11. Evgeny K (mar_a) 30.11.15 10:40
(10) andreykfk,
httpRequest = http.ПолучитьТип("System.Net.WebRequest").Create(Uri);
		httpRequest.Credentials = myCache;
		httpRequest.PreAuthenticate = Истина;
		httpResponse = httpRequest.GetResponse();

А метод httpRequest просто обязан быть...
Драйвер я надеюсь поставили?
На 7.7 честно не пробовал но должен запускаться... с небольшими доработками.
Странно но про 7 в последнее время мало кто сталкивается...
12. Александр (popenko) 19.01.16 13:24
полный архив не качал (мани нет) , но
можно еще добавить в обработку примерно такое (что бы не было более глупых вопросов)

[1C-CODE]Функция ВыполнитьGET(Объект,СтрокаНаВыполнение,РезультатВыполнние) Экспорт
	Результат = Неопределено;
	
	попытка
		http = Новый COMОбъект("NetObjectToIDispatch45");
	Исключение
		Сообщить ("Ошибка создания .Net NET Framework 4.5  (Native)");
		Возврат Результат;
	КонецПопытки;
		


Функция СтатусПринтера()	
	
    Status1=СостояниеФР();
    Если Status1.Количество() = 0 Тогда
	   Возврат "пустая структура Состояние ФР";
   КонецЕсли;
  
   Результат = Статус();
    Если Результат.Количество() = 0 Тогда
	   Возврат "пустая структура Статус";
   КонецЕсли;
...Показать Скрыть
[/1C-CODE]
13. Evgeny K (mar_a) 19.01.16 16:51
(12) popenko, Точно не качали...
ВыполнитьGET(Объект,СтрокаНаВыполнение,РезультатВыполнние) Экспорт - это и у меня так...
Кстати заметили это у меня буква Е и А западает , и кстати у ВАС тоже :)
Очень знакомая фраза - прямо мой подчерк.
Функция статус принтера у меня тоже есть , но видимо если именно такая(ВАША) формулировка более понятная то пожалуйста.
Могу добавить.
В моей помоему тоже понятен процес получения сведений от аппарата.
 Status1=СостояниеФР();
   Результат = Статус();
 
   unixtime =ПолучитьUnixTS(ТекущаяДата()); 
   Дата1С =Число(Status1.bt)+ unixtime; 
   Дата1С1=СконвертироватьВремяUnixTS(Дата1С); 
    
	Status=" " + Символы.ПС +
	"Версия ПО "+ Результат.dev_ver +""+ Символы.ПС +
	"Номер DEVID "+ Результат.dev_id +""+ Символы.ПС +
	"Дата прошивки "+ Результат.dev_dat +""+ Символы.ПС + 
    "Заводской номер "+ Результат.dev_zn +""+ Символы.ПС +
	"Фискакльный номер "+ Результат.dev_fn+""+ Символы.ПС +
	"Налоговый номер "+ Результат.dev_nn+""+ Символы.ПС +
	"Версия протокола "+ Результат.prot+""+ Символы.ПС+
	"Номер SAM модуля "+ Status1.card_no+""+ Символы.ПС+
	"Персонализация SAM "+ Status1.pers_sam_id+""+ Символы.ПС+
	"ID эквайера "+ Status1.eq_id+""+ Символы.ПС+
	"Блокировка "+ Дата1С1;			
 	Возврат Status;

...Показать Скрыть

Обращаю внимание на то , что ДАТА ВРЕМЯ в аппарате в формате Unix GM.



Теперь если ВАМ угодно используйте как и в моем примере стороннюю библиотеку NetObjectToIDispatch45
Повторюсь она не моя , это первое удачное что я нашел...

Можно смело использовать например :
WinHttp.WinHttpRequest.5.1
И использовать его методы и свойства (никто не запрещает).
Кстати сегодня - завтра выложу в достояния и этот пример обработки , так сказать непричесанный.
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"UTF-8"); /// 65001
uriResource = "http://"+СокрЛП(IP_kass)+"/"+СтрокаНаВыполнение;
WinHttp.Open("POST",uriResource,0);

Чет в этом духе...
14. Александр (popenko) 24.01.16 21:24
(13) mar_a, это ваша фраза, но я не качал, есть много других вариантов и еще я дал ответ на вашу личную почту. да и 2-я версия кажется мне лучше
15. Evgeny K (mar_a) 02.02.16 12:18
(14) popenko, Да все понял... Этот коментарий действительно вовсе не для общего обсуждения ...
Мы друг - друга поняли.
Кстати выложил обработку которая не требует дополнительных ДРАЙВЕРОВ и 100% работает в любой версии 1С 8.х.
Методология будет работать и в 7.7. разве что все операторы надо перевести на язык понятный старой версии... (проверил на 7.7 лично).
16. inda inda (inda) 05.07.16 15:50
Вот эта обработка:

"Обработка под 1С 8.х без дополнительных объектов.epf"

на закладке "Связь" кнопка "запросить статус" работает - я получаю ответ аппарата.
Но вот все остальные функции не работают.

Я взял обработку и просто открыл ее в своей базе.

Подскажите, возможно а что-то не так делаю, или нужно еще что-то установить?
17. Evgeny K (mar_a) 05.07.16 16:17
(16) inda, А пароль вводили (7х1хх6)? Если да то какой ?
Проблема часная , решим по личной почте...
у меня как и многих кто скачал этот файл - проблем нет иначе подобные вопросы были-бы давно.
Ну а кнопка статус - работает и без пароля... - это значит, что хоть с АйПи aдресом угадали.
18. Сергей Карнасевич (Avatarus) 17.08.16 22:17
Добрый день, а эта обработка работает на управляемых формах? Совместима ли она с Розница 2.0?
19. Evgeny K (mar_a) 18.08.16 12:06
(18) Avatarus, Обработка УНИВЕРСАЛЬНАЯ она одновременно подходит под ЛЮБУЮ
конфигурацию и одновременно НАДО ДОДЕЛЫВАТЬ под любую!
Управляемые формы мне не нужны и ВАМ на данном этапе тоже.
Эта обработка для ДЕМОНСТРАЦИИ ВСЕХ опций аппарата.
Применять их ВСЕ или взять (скопировать) только необходимые - решать ВАМ.

В своей конфигурации ВЫ хотите пользуйтесь управляемыми формами - хотите НЕТ (Решать ВАМ).
Я только показал КАК работать с аппаратом по HTTP протоколу (в стандарте JSON).
Основные нюансы в обработке учтены и судя по отзывам ВСЕХ УСТРАИВАЮТ , ну а вопросы как успели (если успели) прочитать то
особо не возникают по состыковке с ЛЮБОЙ ВЕРСИЕЙ 1С (7.7 ... 8.х) с любой конфигурацией.
20. Сергей Карнасевич (Avatarus) 18.08.16 15:18
Я не программист - больше администратор, нужна обработка и желательно руководство, как ее подключить к конфигурации Розница 2.0 для Украины. Можно ее посмотреть гдето в демке будет ли работать или мне проще вернуть фискальник и поменять на то, что поддерживается стандартным драйвером от АртСофта?
21. Evgeny K (mar_a) 18.08.16 17:42
(20) Avatarus, Мне абсолютно наплевать как ВЫ поступите ...
------------------------------------------------------------------------------------
Но Арт Софт поддержал в своей обработке данный ФР.
Единственное что он платный.
------------------------------------------------------------------------------------
Я не отвечаю на подобные вопросы как кому поступать ... это личное дело каждого.
22. Сергей Карнасевич (Avatarus) 19.08.16 13:12
Вопрос в другом - можете помочь подключить к Рознице 2.0 для Украины и цена вопроса? У меня нет специалиста с напильником который допилит под эту конфу, эту обработку.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа