Печать чеков на Меркурии 119Ф USB по сети

Публикация № 1072928 06.06.19

Интеграция - ККМ

Фискальный_регистратор Меркурий_119Ф Инкотекс 54-ФЗ

Стандартный драйвер Меркурия 119Ф usb не позволяет осуществлять печать на фискальный регистратор с другого компьютера, поэтому был сделан простейший http сервер, который транслирует post запросы в вызовы методов com-объекта.

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

 

Установка

 

Подключаем Меркурий-119Ф к компьютеру.

Устанавливаем драйвер usb https://www.incotexkkm.ru/attachments/54-fz/119f/Mercury_119F_USB.zip.

Устанавливаем драйвер "Инкотекс: ККТ Меркурий с передачей данных в ОФД (54-ФЗ)" (М119Ф, МФ) https://forum.incotexkkm.ru/viewtopic.php?f=19&t=2066 файл MercuryOfdFPDrv.exe.

Берем исходники и собираем проект https://github.com/philippovomsk/MercuryServer, например, в визуал-студии комьюнити 2017. Или качаем собранный проект отсюда и распаковываем архив куда-нибудь.

Вешаем в автозагрузку MercuryServer.exe.

 

Настройка

В папке с MercuryServer.exe есть файл конфигурации MercuryServer.exe.config, в котором нужно настроить ip-адрес и порт ОФД. По умолчанию в качестве ОФД настроен Петер-сервис.

<add key="ofdIP" value="94.143.160.11"/> 
<add key="ofdPort" value="4000"/>

Так же может понадобиться изменить порт http сервера Меркурия.

<add key="httpServerPort" value="8090" />

 

Проверка работоспособности

Запускаем MercuryServer.exe, в панели уведомлений появляется иконка сервера.

Левый клик по иконке отображает окно сервера, в котором показывается текущее состояние Меркурия 119Ф.

 

Правый клик по иконке позволяет закрыть сервер. Перед повторным запуском стоит выждать до 30 секунд, потому что драйвер меркурия может отправлять данные в ОФД и не успеть закрыться.

В браузере в строке адреса набираем localhost:8090 нажимаем ентер, смотрим на страницу ошибки сервера Меркурия.

При настройке печати по сети аналогично в браузере компьютера, с которого будут печататься чеки, набираем айпи-адрес-серверамеркурия:8090 и смотрим страницу ошибки. Если страницы ошибки нет, то проверяем настройки брендмауэра.

 

Использование

В папке драйвера Меркурия есть документация C:\Program Files (x86)\incotex\MercuryOfdFPDriver\MercuryComOFDFPDriver Manual.pdf Параметры методов драйвера оборачиваются в json и передаются как тело POST-запроса.

Сервер умеет обрабатывать следующие запросы:

  1. /openshift открытие смены

  2. /closeshift закрытие смены

  3. /status состояние фискального регистратора

  4. /printxreport печать х-отчета

  5. /printcheck печать чека

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

Результат возвращается в виде json, согласно документации. Если при выполнении запроса происходит ошибка, то в json возвращается поле "error" со строковым описанием ошибки.

 

openshift

Вызывается метод драйвера OpenShift2.

Тело запроса

{
   "CashierName": "имя кассира",
   "CashierVATIN": "инн кассир"
}

Тело ответа

{
    "SessionNumber": номер текущей смены,
    "DocumentNumber": номер отчета об открытии смены,
    "UrgentReplacementFN":  Признак необходимости срочной замены ФН,
    "MemoryOverflowFN":  Признак переполнения памяти ФН,
    "ResourcesExhaustionFN": Признак исчерпания ресурса ФН,
    "OFDtimeout": Признак того, что подтверждение оператора для переданного фискального документа отсутствует более двух дней. Для ФД с версией ФФД 1.0 более 5 дней
}

 

closeshift

Вызывается метод драйвера CloseShift2.

Тело запроса

{
   "CashierName": "имя кассира",
   "CashierVATIN": "инн кассир"
}

Тело ответа

{
    "SessionNumber": номер текущей смены,
    "DocumentNumber": номер отчета о закрытии смены,
    "NumberOfChecks": Количество кассовых чеков за смену,
    "NumberOfDocuments": Количество общее ФД за смену,
    "BacklogDocumentsCounter": Количество непереданных документов,
    "BacklogDocumentFirstNumber"  Номер первого непереданного документа,
    "BacklogDocumentFirstDateTime" Дата и время первого из непереданных документов,
    "UrgentReplacementFN":  Признак необходимости срочной замены ФН,
    "MemoryOverflowFN":  Признак переполнения памяти ФН,
    "ResourcesExhaustionFN": Признак исчерпания ресурса ФН,
    "OFDtimeout": Признак того, что подтверждение оператора для переданного фискального документа отсутствует более двух дней. Для ФД с версией ФФД 1.0 более 5 дней
}

 

status

Вызывается метод драйвера GetCurrentStatus.

Тело запроса

Пустое.

Тело ответа

{
    "CheckNumber": Номер последнего пробитого фискального документа из ФН,
    "SessionNumber": Номер смены,
    "SessionState":  Статус смены: 1-Закрыта, 2-Открыта,
    "BacklogDocumentsCounter": Количество непереданных документов,
    "BacklogDocumentFirstNumber"  Номер первого непереданного документа,
    "BacklogDocumentFirstDateTime" Дата и время первого из непереданных документов
}

 

printxreport

Вызывается метод драйвера PrintXReport.

Тело запроса

Пустое.

Тело ответа

Пустое.

 

printcheck

Вызывается метод драйвера ProcessCheck.

{
   "CashierName": "имя кассира",
   "CheckPackage": "xml с чеком"
}

Тело ответа

{
    "CheckNumber": Номер фискального чека, возвращаемый ФН,
    "SessionNumber": Номер открытой смены,
    "FiscalSign":  Фискальный признак,
    "AddressSiteInspections": Адрес сайта проверки
}

 

Лог сервера

В папке сервера формируется подробный лог запросов и ответов. Файл mercury.log. Настройки лога log4net.config.

 

Пример печати чека из 1С:Предприятия 8.3

Кусок кода, который печатает чек на сервере меркурия. Таймаут http соединения нужно ставить достаточно большим, потому что печать большого чека может занимать продолжительное время.

ДокЧек = "<?xml version=""1.0"" encoding=""UTF-8""?>
|<CheckPackage>
|<Parameters PaymentType=""1"" TaxVariant=""#Налогообложение#"" #ИННКассира#/>
|<Positions> 
|#Строки# 
|</Positions> 
|<Payments Cash=""#СуммаЧека#""/> 
|</CheckPackage>";

ДокЧек = СтрЗаменить(ДокЧек, "#Налогообложение#", 2); // 0-общая, 1-усн-доход, 2 - усн-расход, 3-енвд
ДокЧек = СтрЗаменить(ДокЧек, "#ИННКассира#", "CashierVATIN=""123456789012""");

ШаблонСтроки = "<FiscalString Name=""#Товар#"" Quantity=""#Количество#"" Price=""#Цена#"" Tax=""#СтавкаНДС#"" Amount=""#Сумма#""/>";

Строки = "";
Сумма = 0;
Для Каждого СтрТоваров Из СтрокиДокумента Цикл 
	
	ТекСтрока = ШаблонСтроки;
	ТекСтрока = СтрЗаменить(ТекСтрока, "#Товар#", ЭкранироватьСимволы(СокрЛП(СтрТоваров.Номенклатура))); 
	ТекСтрока = СтрЗаменить(ТекСтрока, "#Количество#", Формат(СтрТоваров.Количество, "ЧРД=.; ЧГ=0")); 
	ТекСтрока = СтрЗаменить(ТекСтрока, "#Цена#", Формат(СтрТоваров.Цена, "ЧРД=.; ЧГ=0")); 
	ТекСтрока = СтрЗаменить(ТекСтрока, "#СтавкаНДС#", "none"); //СтавкаНДСМеркурий(СтрТоваров.СтавкаНДС, ПлательщикНДС)); 
	ТекСтрока = СтрЗаменить(ТекСтрока, "#Сумма#", Формат(СтрТоваров.Сумма, "ЧРД=.; ЧГ=0")); 
	
	Строки = Строки + ТекСтрока;
	Сумма = Сумма + СтрТоваров.Сумма;
КонецЦикла;
ДокЧек = СтрЗаменить(ДокЧек, "#Строки#", Строки);
ДокЧек = СтрЗаменить(ДокЧек, "#СуммаЧека#", Формат(Сумма, "ЧРД=.; ЧГ=0"));

ПараметрыЗапроса = Новый Структура();
ПараметрыЗапроса.Вставить("CashierName", "Иванов И.И.");
ПараметрыЗапроса.Вставить("CheckPackage", ДокЧек);

ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ПараметрыЗапроса);
ТелоЗапроса = ЗаписьJSON.Закрыть();

Запрос = Новый HTTPЗапрос("/printcheck");
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);

Соединение = Новый HTTPСоединение("айпи сервера меркурия", 8090,,,,60);
Попытка
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Исключение
	ПоказатьПредупреждение(,"Не удалось пробить чек! Нет соединения с сервером чеков!");
	Возврат;
КонецПопытки;

Если Ответ.КодСостояния <> 200 Тогда
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());

	Результат = ПрочитатьJSON(ЧтениеJSON, Ложь);
	ПоказатьПредупреждение(,"Не удалось пробить чек! " + ?(Результат.Свойство("error"), Результат.error, ""));
	Возврат;
КонецЕсли;

 

Подключение через стандартную подсистему торгового оборудования 1С:Предприятия 8.3

Мне было не нужно, но вполне можно написать обработку, которая будет взаимодействовать с сервером. За основу можно смело брать стандартную обработку от Инкотекс.

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

Наименование Файл Версия Размер
Сервер для Меркурия 119Ф USB для печати по сети

.zip 635,95Kb
2
.zip 1.1 635,95Kb 2 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. muskul 10.06.19 01:57 Сейчас в теме
Сколько клиент за это заплатил и не проще было купить фискальник который может работать в тех режимах в которых хочет клиент
2. philya 76 10.06.19 11:27 Сейчас в теме
"Клиент" заплатил зарплату. Было не проще - мы меняем наши 12 Атолов на Меркурии, которых у нас под 400 штук.

Меркурий дешевле, умеет широкую и узкую ленту, есть отрезчик чека, перепрошивается своими силами бесплатно. Чтобы перепрошить Атол в Тевризе Омской области мне нужно проехать 1400 километров и заплатить за перепрошивку, т.е. одна перепрошивка Атола займет больше моего рабочего времени, чем написание этого сервера )
3. aspirator23 340 26.07.19 16:28 Сейчас в теме
(2) Насколько надежны меркурии? Рынок захватил Атол и Штрих, поэтому интересно как у других фискальных регистраторов. Насколько просто сложно обслуживать меркурии в сравнении с атолом. Есть ли проблемы при их работе в сравнении с атолами?
5. philya 76 28.07.19 16:47 Сейчас в теме
(3) ответ ниже - промазал кнопкой.
4. philya 76 28.07.19 16:44 Сейчас в теме
(3) Надежны. У нас штук 400. У части был заводской брак - не включались, отремонтировали по гарантии. Те которые включились работают пока в киоск молния не ударит, а там как повезет. )

Мне нравятся больше Атолов тем, что перепрошиваются бесплатно и своими силами. В итоге специально обученный человек с ноутбуком ездит по киоскам, меняет ФН и заливает прошивку с поддержкой маркированной табачной продукции. В поддержке Меркурия на телефоне сидят не девочки, которые говорят "обратитесь в цто", а нормальные люди, которые могут даже подключить разработчиков ПО. Лента закидывается, есть автоотрезчик, скорость печати нормальная, честный юсб, стоят дешевле.

Есть ровно одна проблема: на самой дешевой тонкой кассовой ленте в конце катушки начинает делать гормошку из чека - при использовании нормальной бумаги проблем нет.
6. aspirator23 340 28.07.19 20:51 Сейчас в теме
(4) Спасибо. "..Нормальные люди.." - это действительно проблема. :)
7. user1871052 15.12.22 11:27 Сейчас в теме
Здравствуйте. Как с вами можно связаться (автор статьи (philya)?
Нам очень нужно решить точно такую же проблему. Мы хотели бы обратиться к вам за помощью. Как с вами можно связаться?
8. philya 76 21.12.22 23:41 Сейчас в теме
(7) я отошел от кассовых аппаратов и 1с. Вряд ли я смогу вам помочь.
Оставьте свое сообщение

См. также

Подключение онлайн касс (ФЗ-54) к старой 1С конфигурации УТ 10.2. Описание и реализация проекта

ККМ Кассовые операции Розничная торговля Платформа 1С v8.3 Розничная и сетевая торговля (FMCG) Россия Абонемент ($m)

Статья предназначена в первую очередь начинающим 1С программистам, а также будет полезна знакомым с ИТ-спецификой управленцам, пред которыми встанет вопрос об интеграции новой онлайн кассы, работающей по ФЗ-54 со старой информационной системой. В статье изложен ряд возможных подходов к решению задачи и показана реализация оптимального в данном случае варианта. Здесь нет готового тиражного решения, с одной стороны это пример реализации как иллюстрация к тексту, а с другой это рабочая программа для случая описанного ниже и если ваш случай похож, то решение с минимальными затратами может быть адаптировано. Также я слегка приоткрыл «фрилансерскую кухню».

1 стартмани

28.11.2018    12830    Petr54-ru    22    

14

Настройка подключения ККТ ШТРИХ-ON-LINE

ККМ Кассовые операции Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Абонемент ($m)

После подключения кассы к компьютеру и настройке ее для локальной работы, следующим этапом шла настройка работы кассы через RDP, да еще когда удаленный компьютер находится в другой сети, нежели ваш стационарный, на котором подключена касса физически. Если с Атолом у меня проблем не было, там Com порты пробрасываются средствами того же RPD соединения, то пробросить локальную сеть не представляется возможность. Необходимо настраивать это через проброс портов. Далее расскажу, как это делал я, так как на текущий момент (07.2018) я не смог найти статьи, которая решила бы мою проблему, возможно, я плохо искал, но сути это не меняет. Решил поделиться знаниями с такими же ищущими решения данного вопроса.

1 стартмани

06.07.2018    27649    ohyen    20    

6

Подключение ККТ "К1-Ф" к конфигурациям на обычных формах

ККМ Кассовые операции Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Абонемент ($m)

Описание подключения он-лайн кассы "К1-Ф" к конфигурациям на обычных формах. П.С. С подключением к конфигурациям на управляемых формах (Розница 2, УТ 11, ERP) проблем быть не должно, есть подробное описание на сайте ИТС, доступно без регистрации на примере Розницы 2.2 https://its.1c.ru/db/kkt/content/97/hdoc.

1 стартмани

13.04.2018    17676    de0nis    17    

5

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Опыт интеграции ФР Штрих-М с 1С

Кассовые операции ККМ Платформа 1С v8.3 Конфигурации 1cv8 Россия Бухгалтерский учет Абонемент ($m)

Надвигается 1 июля и всем срочно нужны ККМ-онлайн. Публикую свой опыт быстрого и простого решения на базе фискального регистратора Штрих-М для обычных форм.

1 стартмани

01.05.2017    52859    Yashazz    79    

27