Предлагаю на разбор появившееся в апреле Руководство программиста "Транспортный модуль" на сайте ГИИС ДМДК.
На сегодняшний день мы используем для регистрации списания в архив Ювелирных изделий методами SendBatchSale / CheckBatchSale. Для них необходимы параметры Номера фискального накопителя ККМ, Номера фискального документа ККМ и Дата фискального документа (без часов, минут и секунд) и собственно УИН Ювелирного изделия.
Если кому интересно, смотрите публикацию № 1522396. Там описаны способы получения параметров ККМ.
УТМ ГИИС ДМДК предполагает использование тех же параметров, плюс еще один - Номер смены ККМ:
/// Получить реквизиты чека ККМ для ГИИС ДМДК ////////////////////////////////////////////////////////////
Попытка
// Запрос информации о последнем чеке
ECR.setParam(ECR.LIBFPTR_PARAM_FN_DATA_TYPE, ECR.LIBFPTR_FNDT_LAST_DOCUMENT);
ECR.fnQueryData();
ФискальныйДокумент = ECR.getParamInt(ECR.LIBFPTR_PARAM_DOCUMENT_NUMBER);
Сообщить("Номер Фискального Документа : " + ФискальныйДокумент);
ФискальныйПризнакДокумента = ECR.getParamString(ECR.LIBFPTR_PARAM_FISCAL_SIGN);
Сообщить("Фискальный признак документа : " + ФискальныйПризнакДокумента);
ДатаФискальногоДокумента = ECR.getParamDateTime(ECR.LIBFPTR_PARAM_DATE_TIME);
Сообщить("Дата фискального документа : " + ДатаФискальногоДокумента);
// Запрос информации о номере фискального накопителя
ECR.setParam(ECR.LIBFPTR_PARAM_FN_DATA_TYPE, ECR.LIBFPTR_FNDT_FN_INFO);
ECR.fnQueryData();
ФискальныйНакопитель = ECR.getParamString(ECR.LIBFPTR_PARAM_SERIAL_NUMBER);
Сообщить("Номер Фискального Накопителя : " + ФискальныйНакопитель);
// Запрос информации о номере смены
ECR.setParam(ECR.LIBFPTR_PARAM_FN_DATA_TYPE, ECR.LIBFPTR_FNDT_SHIFT);
ECR.fnQueryData();
НомерСмены = ECR.getParamInt(ECR.LIBFPTR_PARAM_SHIFT_NUMBER);
Сообщить("Номер смены : " + НомерСмены);
Исключение
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Ошибка сохранения реквизитов ФД : " + ОписаниеОшибки();
Сообщение.Сообщить();
КонецПопытки;
/// Получить реквизиты чека ККМ для ГИИС ДМДК ////////////////////////////////////////////////////////////
Сформировать XML файл для УТМ значительно проще, чем для сервиса интеграции запрос SendBatchSale. И подписывать файл ЭП не нужно, т.е. для ККМ не потребуется флешка ЭЦП.
Что понадобится для запуска УТМ:
1. Установка и настройка УТМ, тут вроде все понятно из руководства. Может на практике и будут сложности, пока не знаю, не устанавливал.
2. Формирование XML файла - приводить текст формирования не буду, товарные программы у всех разные. Я пошел по пути "шаблона", см. скрин, примерно так:
СписокТовара = ЭлементДокумент.Список;
СтрокаТовары = "";
Для КАЖДОГО ТекСтрокаСписок ИЗ СписокТовара Цикл
Если СтрДлина(ТекСтрокаСписок.УИН) = 16 Тогда
ЦенаТовара = Формат(ТекСтрокаСписок.Наличными + ТекСтрокаСписок.Безналичными + ТекСтрокаСписок.Кредитом,"ЧГ=; ЧДЦ=2");
СтрокаТовары = СтрокаТовары
+ "<Bottle barcode="
+ """ + ТекСтрокаСписок.УИН + """
+ " price="
+ """ + ЦенаТовара + """
+ "/>"
+ Символы.ПС;
КонецЕсли;
КонецЦикла;
Сообщение = СтрЗаменить(Сообщение, "%<Bottleprice=barcode=/>%", СтрокаТовары);
3. Выполнить командой curl отправку сформированного файла чека (http запрос). Вот тут я долго вникал в руководство, и не сразу понял, что главный недостаток в описании - это получение ответа от УТМ в командную строку, т.е. по сути мы не получаем ничего. Предлагаю следующее:
// создаем папку ответов от УТМ, номера файлов ответов можно нумеровать, скажем otvet1.xml, otvet2.xml ...
// параметр -o команды curl позволяет записать ответ запроса -F в файл
ПутьКФайлуОтвета = "C:\УТМответ\otvet.xml"
СтрокаКоманды = ""curl -F "xml_file=@cheque.xml" http://localhost:8383/xml"";
СтрокаКоманды = СтрокаКоманды + " -o " + ПутьКФайлуОтвета;
ЗапуститьПриложение(СтрокаКоманды);
4. Разбор полученного ответа. Если ответ "положительный" - имеем ввиду, что УИН ушел в архив и чек ККМ пробивается уже без изменений.
Критикуйте. Может, кто предложит свой вариант, например HTTPЗапрос средствами 1С, чем сейчас и занимаюсь.