Использование Универсального транспортного модуля ГИИС ДМДК в розничной торговле ювелирными изделиями

18.04.23

Интеграция - Обмен с ГосИС

Универсальный транспортный модуль "Государственная интегрированная информационная система "Драгоценные металлы и драгоценные камни". Разбор руководства программиста. Практическое использование регистрации розничных продаж ювелирных изделий.

Предлагаю на разбор появившееся в апреле Руководство программиста "Транспортный модуль" на сайте ГИИС ДМДК.

На сегодняшний день мы используем для регистрации списания в архив Ювелирных изделий методами 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С, чем сейчас и занимаюсь.   

ГИИС ДМДК информационная интегрированная государственная система

См. также

Раздельный учет по ГОЗ (Гособоронзаказу) в 1С: Бухгалтерия 3.0

Бюджетный учет Обмен с ГосИС Бухгалтерский учет 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 1С:Управление холдингом Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Управляйте учетной политикой раздельного учета ГОЗ и ведения затрат по контракту с подсистемой для 1С:Бухгалтерия 3.0. Отчеты по исполнению контрактов и контроль операций для исполнения в срок по 275-ФЗ. Минимальные требования: Версия платформы 1С: Предприятие 8.3 – 8.3.23 Версия конфигурации 1С: Бухгалтерия – 3.0.150.39 или выше.

28.08.2020    204008    1651    vvmanannikov    132    

839

Гособоронзаказ: учет и отчетность БП3.0 КОРП + ПРОФ + БИТ.ФИНАНС

Бюджетный учет Обмен с ГосИС Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Государственные, бюджетные структуры Россия Бухгалтерский учет Платные (руб)

Доработка конфигурации 1С: Бухгалтерия предприятия, редакция 3.0. Предназначена для ведения раздельного учета и автоматизации заполнения отчетности исполнения контрактов ГОЗ в конфигурациях 1С БП КОРП, ПРОФ, БИТ.ФИНАНС.

30000 руб.

16.08.2019    88672    210    85    

129

ЕГАИС++. Опт, производство, импорт

Оптовая торговля Розничная торговля Обмен с ГосИС Платформа 1С v8.3 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Управленческий учет Акцизы Платные (руб)

Полнофункциональное расширение (ранее известное как Модуль 1С-ЕГАИС) для взаимодействия типовых конфигураций 1С и ЕГАИС, предоставляющее максимум возможностей по работе с УТМ. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

8970 руб.

15.12.2015    167134    709    362    

391

Обмен с системой ФГИС Зерно через API для любых конфигураций (универсальная подсистема ХамелеонЗерно)

Обмен с ГосИС Платформа 1С v8.3 Конфигурации 1cv8 Оптовая торговля, дистрибуция, логистика Россия Управленческий учет Платные (руб)

Универсальная конфигурация ХамелеонЗерно для взаимодействия с системой ФГИС Зерно (тестовый+рабочий контур) может использоваться для интеграции в любую конфигурацию на базе 1С, версии ПРОФ и выше. Работа через API 1.0.5 и на API 1.0.7. Для удобства реализован общий интерфейс в виде обработки, схожей с интерфейсом ФГИС Зерно, но возможностей гораздо больше, т.к. при интеграции в Вашу учетную систему, можно на основании Ваших справочников и документов, создавать соответствующие документы и справочники в системе ФГИС Зерно и наоборот.

124800 руб.

27.06.2023    3183    23    0    

9

Обмен 1С с Честным Знаком для УТ11, УНФ, КА2, ERP, Розница: Расширение для работы с СУЗ, ГИС МТ, ЦРПТ

Обмен с ГосИС Платформа 1С v8.3 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Полноценное интеграционное решение которое манипулирует сотнями задач по ведению учета в системе мониторинга честный знак, особенности: такие как полная поддержка учета карточек в национальном каталоге (модерация, редактирование, подписание, получение информации), получение кодов маркировок в станции управления заказами "СУЗ Облако", удобная отправка и получение "УПД" через систему "ЭДОЛайт" из документов реализации или корректировки, так же существует механизм приема через ЭДОЛайт, отправка и получения таких документов как перемаркировка , списание, отгрузка и еще более 40 типов документов в ГИСМТ которые описаны ниже, моментальное сопоставление и внедрение в типовую конфигурацию которое обеспечивает ракетную мега скорость ...

18000 руб.

28.03.2023    10701    39    9    

42

Обмен с системами Казначейства: Электронный бюджет

Обмен с ГосИС Платформа 1С v8.3 Бухгалтерский учет 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обработка для обмена платежными документами в формате xml для системы Федерального казначейства "Электронный бюджет" из конфигураций 1С. Поставляется в двух вариантах для БП 3.0 и КА 2.х/ERP 2.х. Работа только с контрагентами.

15000 руб.

14.10.2020    59467    352    101    

281

Алкогольные Декларации по Форме 7 и 8 по данным ЕГАИС из 1С Розница 3.0 и 2.3 (УТ 11.5.х) (Комплексная Автоматизация)

Регламентированный учет и отчетность Розничная торговля Файловый обмен (TXT, XML, DBF), FTP Обмен с ГосИС Платформа 1С v8.3 1С:Розница 2 1С:Розница 3.0 Розничная и сетевая торговля (FMCG) Россия Бухгалтерский учет Акцизы Платные (руб)

Обработка формирует файлы алкогольных декларации форм 7,8 с 1С:Розницы от 2.3.8. ,Управление Торговлей 11.х Проста в использовании. Формат выгрузки деклараций: 4.4, есть возможность объединять сформированные декларации из файлов XML.Дополнительно можно делать передачу в рег2 по остаткам и списывать остатки ЕГАИС по данным базы (пиво)

3600 руб.

20.07.2016    171404    2274    1703    

1016
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. guglion 1 28.04.23 09:39 Сейчас в теме
Ну думаю, что то вот такое должно работать непосредственно из 1С

Процедура ПрочитатьОтвет(СтрокаОтвета)
// разбираем полученый ответ
// скорее всего он придет не как показано в описании, а одной строй, без символов переноса
// это на основанни, что все ответы "Сheck" их ДМДК приходят одной строкой
МассивОтвета = Новый Массив();
МассивОтвета = ИзСтрокиВМассив(СтрокаОтвета, "><");

// либо ИзСтрокиВМассив(СтрокаОтвета, ">" + Символы.ПС+"<"); если ответ будет с сиволами переноса 

// анализировать массив  МассивОтвета думаю лучше простым перебором строк, без XML разбора, так как файл буквально на пять стро

Для Каждого ЭлементМассива ИЗ МассивОтвета Цикл
        // все приводить не буду, только "положительную строку"
        Если СтрНайти(ЭлементМассива, "<sign>") > 0 Тогда
                  // xml содержит тэг sign - подпись ГИИС о успешном ответе
        КонецЕсли;
КонецЦикла

КонецПроцедуры

Функция ИзСтрокиВМассив(НачальнаяСтрока,Разделитель) экспорт
    
    СтрокаПреобразованнаяВМногострочныйТекст     = СтрЗаменить(НачальнаяСтрока,Разделитель,Символы.ПС);
    ТекстовыйДокументИзСтроки                                   = Новый ТекстовыйДокумент;
    Результат                                                                       = Новый Массив;
    ТекстовыйДокументИзСтроки.УстановитьТекст(СтрокаПреобразованнаяВМногострочныйТекст);
    Для СчетчикСтрок = 1 по ТекстовыйДокументИзСтроки.КоличествоСтрок() цикл
        Результат.Добавить(СокрЛП(ТекстовыйДокументИзСтроки.ПолучитьСтроку(СчетчикСтрок));
    КонецЦикла;
    Возврат Результат;
    
КонецФункции

...

// Сообщение - это наш подготовленный запрос на УТМ. Например:
//?xml version="1.0" encoding="UTF-8"?>
//<Cheque
//shift="1"
//number="2"
//name="ИП Иванов"
//address="Россия,117105,Москва Г"
//kassa="93030781125555110367"
//kpp="781301001"
//datetime="0308221103"
//inn="7813252159">
//<Bottle price="2550.00" barcode="6432200004560697"/>
//</Cheque>

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "text/xml;charset=UTF-8");

Соединение = Новый HTTPСоединение("http://localhost:8383/xml");

HTTPЗапрос = Новый HTTPЗапрос("/" + ПараметрыВыполнения.ИмяМетода,Заголовки);
HTTPЗапрос.УстановитьТелоИзСтроки(Сообщение);

Результат = Соединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
//
Если Результат.КодСостояния = 200 Тогда
		
	ПрочитатьОтвет(Результат.ПолучитьТелоКакСтроку());
		
КонецЕсли;
...
Показать
2. guglion 1 02.05.23 05:20 Сейчас в теме
Есть также серьезный вопрос к ГИИС ДМДК. Вышла вторая редакция руководства программиста УТМ и в нем ни слова о КПП индивидуального предпринимателя. УТМ изначально написан для алкоголя, в алкогольной торговле нет ИП, там все юр. лица, соответственно проблема не стоит. Есть вероятность, что УТМ для ИП вообще не будет работать.
3. guglion 1 03.05.23 11:31 Сейчас в теме
Вариантов к сожалению как оказывается масса, редактирую сообщение (1):
при этом руководствуюсь текстом отправки в ГИИС ДМДК сообщений из БСП 3.1.5, которая однозначно работает и позволяет надеяться, что сработает и с УТМ

// Содержит Истина при положительном ответе, Ложь при ошибке

Перем ОтветОтУТМПоложительный Экспорт;

Процедура ПрочитатьОтвет(СтрокаОтвета)
// разбираем полученый ответ
// скорее всего он придет не как показано в описании, а одной строй, без символов переноса
// это на основанни, что все ответы "Сheck" их ДМДК приходят одной строкой
МассивОтвета = Новый Массив();
МассивОтвета = ИзСтрокиВМассив(СтрокаОтвета, "><");

// либо ИзСтрокиВМассив(СтрокаОтвета, ">" + Символы.ПС+"<"); если ответ будет с сиволами переноса 

// анализировать массив  МассивОтвета думаю лучше простым перебором строк, без XML разбора, так как файл буквально на пять стро

ОтветОтУТМПоложительный = Ложь;
Для Каждого ЭлементМассива ИЗ МассивОтвета Цикл
        // все приводить не буду, только "положительную строку"
        Если СтрЧислоВхождений(ЭлементМассива, "<sign>") > 0 Тогда
                  // xml содержит тэг sign - подпись ГИИС о успешном ответе 
				  ОтветОтУТМПоложительный = Истина;
				  Перейти ~ВыходИзЦикла;   
			  ИначеЕсли СтрЧислоВхождений(ЭлементМассива, "<error>") > 0 Тогда
				  // вывести сообщение об ошибке    
				  // пока просто в формате текста
				  // скорее всего этот текст нужно будет сохранять на всякий случай в отдельном журнале обмена с УТМ
        КонецЕсли;
КонецЦикла;
~ВыходИзЦикла:

КонецПроцедуры  

Функция ИзСтрокиВМассив(НачальнаяСтрока,Разделитель)
    
    СтрокаПреобразованнаяВМногострочныйТекст     = СтрЗаменить(НачальнаяСтрока,Разделитель,Символы.ПС);
    ТекстовыйДокументИзСтроки                    = Новый ТекстовыйДокумент;
    Результат                                    = Новый Массив;
    ТекстовыйДокументИзСтроки.УстановитьТекст(СтрокаПреобразованнаяВМногострочныйТекст);
    Для СчетчикСтрок = 1 по ТекстовыйДокументИзСтроки.КоличествоСтрок() цикл
        Результат.Добавить(СокрЛП(ТекстовыйДокументИзСтроки.ПолучитьСтроку(СчетчикСтрок)));
    КонецЦикла;
    Возврат Результат;
    
КонецФункции

// Сообщение - это наш подготовленный запрос на УТМ. Например:
//?xml version="1.0" encoding="UTF-8"?>
//<Cheque
//shift="1"
//number="2"
//name="ИП Иванов"
//address="Россия,117105,Москва Г"
//kassa="93030781125555110367"
//kpp="781301001"
//datetime="0308221103"
//inn="7813252159">
//<Bottle price="2550.00" barcode="6432200004560697"/>
//</Cheque>

Заголовки = Новый Соответствие;
Заголовки.Вставить("Content-Type", "text/xml;charset=UTF-8");
					  
// Константа АдресДляСообщенийУТМ = http://localhost:8383/xml
					  
Соединение = Новый HTTPСоединение(СокрЛП(Константы.АдресДляСообщенийУТМ.Получить()));

HTTPЗапрос = Новый HTTPЗапрос;
HTTPЗапрос.Заголовки = Заголовки;
HTTPЗапрос.УстановитьТелоИзСтроки(Сообщение,КодировкаТекста.UTF8);

Результат = Соединение.ВызватьHTTPМетод("POST", HTTPЗапрос);
						
Если Результат.КодСостояния = 200 Тогда 
	ПрочитатьОтвет(Результат.ПолучитьТелоКакСтроку());
КонецЕсли;
Показать
Оставьте свое сообщение