Подключение фискального регистратора MG N707TS, MG-T777TL, MG-T787TL по http (TCP/IP) протоколу JSON



Тестовая конфигурация и пример работы по общению с фискальным регистратором MG N707TS, MG-T787TL, MG-T777TL по 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 объектов и дополнительных компонент

Добавил обработку обслуживания для подключения торгового оборудования.
Огромное спасибо ВСЕМ КТО ПОМОГ , участвовал в создании этой обработки. (Перечислять ВСЕХ не буду , но Ивано-Франковск — реально классный город).  WinHttp.WinHttpRequest.5.1 — не использовалось (оказывается и без него будет работать, кому не понравиться расчет MD5 сумм можно подключить WinHttp.WinHttpRequest.5.1 и не париться работать по старому алгоритму).

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

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

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

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

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

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

22 Comments

  1. IgKR

    Привет! Я первый!

    А про меня и Сергея Шепелева где упоминания ?

    🙂

    По сути аппарат в эксплуатации для своей цены даже очень хорош!

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

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

    парсер JSON я предпочел от Александра Переверзева http://infostart.ru/public/119601/ (отдельное огромное спасибо), работает шустро, ~2-3 мс на строку, удобно, при запросе на cgi/state — возвращает соответствие Параметр-Значение, при обращении к /cgi/chk возвращает массив соответствий

    Reply
  2. mar_a

    (1) IgKR, Я Сереги незнал фамилию, ща поставлю, а Вы у меня значитесь как Игорь К, можно указывать вашу фамилию?

    Отдельное спасибо за сообщение не только ошибок, но и методов их устранения.

    Вот IT Support domkofe.ua (Имени не знаю) также интегрировал человек в своё ПО за рабочий день судя по словам.

    Из проблем с которыми он столкнулся

    >>>> После фискализации увеличилось время обработки запросов фискальным

    >>>> регистратором и ответ не успевал приходить из-за наличия таймаута в

    >>>> нашем приложении.

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

    Тем не менее аппарат отдает 401 ошибку (нет авторизации), а только потом принимает логин/пароль видимо отсюда еще дополнительное время задержки… Потом аппарат привыкает к открытой сессии и до истечения времени существования авторизированной сессии отвечает довольно шустро на запросы.

    Если пользователя это сильно напрягает — можно поставить свой IP в белый лист и аппарат будет быстро обрабатывать запросы от этого IP.

    Еще отдельно хотелось-бы обратить внимание , на ИГРЫ по переключению протоколов.

    Крайне НЕ рекомендуется в течении открытой смены — туда-сюда менять протокол работы с аппаратом с RS232 на HTTP и обратно.

    Все манипуляции необходимо выполнять только при закрытой смене и снятом Z-отчете!!!

    Reply
  3. magicsoft

    Windows 7×64

    При регистрации dll появляется сообщение:

    RegAsm : warning RA0000 : Регистрация неподписанной сборки с использованием параметра /codebase может вызвать конфликт данной сборки с другими приложениями, которые могут быть установлены на том же компьютере. Параметр /codebase предназначен только для подписанных сборок. Присвойте сборке строгое имя и повторите регистрацию.

    Типы зарегистрированы успешно

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

    Что можно предпринять?

    Reply
  4. mar_a

    (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 файла. (Этот ответ дает Гугль — если поискать).

    Reply
  5. w-divin
    Reply
  6. w-divin

    И еще непонятно почему

    Инструкция по работе с 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

    Reply
  7. mar_a

    (5) w-divin, Хорошо уже двое.

    В любом случае эту фразу будем считать как призыв творить что-то своё…

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

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

    Как только решу несколько проблем то можно будет еще заняться и Вашим примером под 8.3.х как вариант.

    Теперь по поводу информации которую можно найти и на официальном источнике , есть 3 причины тому:

    1) Я хотел что-бы тут был полный перечень файлов.

    2) Частенько сервер бывает недоступен и файлы не так часто там и своевременно меняются.

    3) И да я незнаю как съделать этот файл доступным для скачивания БЕСПЛАТНО, тут либо всю тему надосоздавать как бесплатную либо так как сейчас.

    Reply
  8. w-divin

    (7) ))) если интересно — могу скинуть непричесанную обработку. До практического внедрения еще не дошли. в тестовом режиме вроде все работает )))

    Reply
  9. mar_a

    (8) w-divin, Да интересно глянуть, тем более, что видите как приходиться осваивать новое так сказать в ОнЛайн (опять повторюсь 8.3 еще не ставил даже).

    Давайте в общедоступное место , пусть все качают и правят. На какой-нить file-обменник.

    Reply
  10. andreykfk

    Скачал вашу разработку, очень заинтересовала. Но есть проблема. Немогу запустить на 7.7

    в этой стороке

    httpRequest.PreAuthenticate = 1;

    Ругается, говорит, что такого метода нет.

    Буду рад помощи.

    Reply
  11. mar_a

    (10) andreykfk,

    httpRequest = http.ПолучитьТип(«System.Net.WebRequest»).Create(Uri);
    httpRequest.Credentials = myCache;
    httpRequest.PreAuthenticate = Истина;
    httpResponse = httpRequest.GetResponse();

    А метод httpRequest просто обязан быть…

    Драйвер я надеюсь поставили?

    На 7.7 честно не пробовал но должен запускаться… с небольшими доработками.

    Странно но про 7 в последнее время мало кто сталкивается…

    Reply
  12. popenko

    полный архив не качал (мани нет) , но

    можно еще добавить в обработку примерно такое (что бы не было более глупых вопросов)

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

    Показать

    [/1C-CODE]

    Reply
  13. mar_a

    (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);

    Чет в этом духе…

    Reply
  14. popenko

    (13) это ваша фраза, но я не качал, есть много других вариантов и еще я дал ответ на вашу личную почту. да и 2-я версия кажется мне лучше

    Reply
  15. mar_a

    (14) popenko, Да все понял… Этот коментарий действительно вовсе не для общего обсуждения …

    Мы друг — друга поняли.

    Кстати выложил обработку которая не требует дополнительных ДРАЙВЕРОВ и 100% работает в любой версии 1С 8.х.

    Методология будет работать и в 7.7. разве что все операторы надо перевести на язык понятный старой версии… (проверил на 7.7 лично).

    Reply
  16. inda

    Вот эта обработка:

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

    на закладке «Связь» кнопка «запросить статус» работает — я получаю ответ аппарата.

    Но вот все остальные функции не работают.

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

    Подскажите, возможно а что-то не так делаю, или нужно еще что-то установить?

    Reply
  17. mar_a

    (16) inda, А пароль вводили (7х1хх6)? Если да то какой ?

    Проблема часная , решим по личной почте…

    у меня как и многих кто скачал этот файл — проблем нет иначе подобные вопросы были-бы давно.

    Ну а кнопка статус — работает и без пароля… — это значит, что хоть с АйПи aдресом угадали.

    Reply
  18. Avatarus

    Добрый день, а эта обработка работает на управляемых формах? Совместима ли она с Розница 2.0?

    Reply
  19. mar_a

    (18) Avatarus, Обработка УНИВЕРСАЛЬНАЯ она одновременно подходит под ЛЮБУЮ

    конфигурацию и одновременно НАДО ДОДЕЛЫВАТЬ под любую!

    Управляемые формы мне не нужны и ВАМ на данном этапе тоже.

    Эта обработка для ДЕМОНСТРАЦИИ ВСЕХ опций аппарата.

    Применять их ВСЕ или взять (скопировать) только необходимые — решать ВАМ.

    В своей конфигурации ВЫ хотите пользуйтесь управляемыми формами — хотите НЕТ (Решать ВАМ).

    Я только показал КАК работать с аппаратом по HTTP протоколу (в стандарте JSON).

    Основные нюансы в обработке учтены и судя по отзывам ВСЕХ УСТРАИВАЮТ , ну а вопросы как успели (если успели) прочитать то

    особо не возникают по состыковке с ЛЮБОЙ ВЕРСИЕЙ 1С (7.7 … 8.х) с любой конфигурацией.

    Reply
  20. Avatarus

    Я не программист — больше администратор, нужна обработка и желательно руководство, как ее подключить к конфигурации Розница 2.0 для Украины. Можно ее посмотреть гдето в демке будет ли работать или мне проще вернуть фискальник и поменять на то, что поддерживается стандартным драйвером от АртСофта?

    Reply
  21. mar_a

    (20) Avatarus, Мне абсолютно наплевать как ВЫ поступите …

    ————————————————————————————

    Но Арт Софт поддержал в своей обработке данный ФР.

    Единственное что он платный.

    ————————————————————————————

    Я не отвечаю на подобные вопросы как кому поступать … это личное дело каждого.

    Reply
  22. Avatarus

    Вопрос в другом — можете помочь подключить к Рознице 2.0 для Украины и цена вопроса? У меня нет специалиста с напильником который допилит под эту конфу, эту обработку.

    Reply

Leave a Comment

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