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

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С:Бухгалтерия. Отчеты по контрактам и контроль операций для исполнения в срок по 275-ФЗ. Минимальные требования: Версия платформы 1С: Предприятие 8.3 – 8.3.23 Версия конфигурации 1С: Бухгалтерия – 3.0.149.28 или выше.

28.08.2020    200999    1609    vvmanannikov    132    

829

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

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

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

30000 руб.

16.08.2019    88357    210    85    

127

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

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

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

8970 руб.

15.12.2015    166501    702    362    

390

SALE! 40%

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

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

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

18000 10800 руб.

28.03.2023    10327    38    9    

39

Обмен с системой ЦРПТ (Универсальная конфигурация ХамелеонЦРПТ + маркировка табака, обуви, одежды, лекарств, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин)

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

Данная публикация создана для помощи разработчикам, интеграторам и другим заинтересованным лицам по настройке системы маркировки обуви, одежды, лекарств, табака, фото, молока, духов(парфюма), питьевой воды, велосипедов и шин. Смело задавайте нам вопросы по работе с ЦРПТ, GS1, ЭДО, Национальным каталогом, мы накопили достаточно большую базу знаний по данным темам и готовы ответить на все Ваши вопросы.

104000 руб.

18.03.2019    110684    35    114    

178

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

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

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

15000 руб.

14.10.2020    59055    350    101    

278

Гособоронзаказ в 1С: УПП 1.3

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

Для 1С: УПП 1.3 предлагаем Вашему вниманию подсистему "Раздельный учет результатов финансово-хозяйственной деятельности организаций, выполняющих государственный оборонный заказ (раздельный учет ГОЗ)". Ключевые возможности подсистемы: - Автоматическое заполнение регламентированного отчета "Исполнение контрактов ГОЗ"; - Расшифровка показателей отчета об исполнении контрактов ГОЗ с детализацией до документов; - Контроль хозяйственных операций на соответствие требованиям Постановления Правительства № 47; - Автоматизированный ввод начальных данных по контрактам, заключенным ранее даты начала использования подсистемы.

90000 руб.

25.09.2020    28996    33    9    

36

Печать кассовых чеков на одну ККМ с нескольких рабочих мест для 1С:УТ11.х, КА2.х, Розница 2.х, УНФ, ERP 2.х, БП 3, БГУ2

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

Расширение конфигурации для УТ 11.4, 11.5, КА 2.4, 2.5, Розница 3.0, 2.3 и 2.2, УНФ 1.6, УНФ 3x, ERP 2.4, 2.5, БП 3, БГУ2 (Управляемые формы) позволяет выполнять печать кассовых чеков на одну ККМ 54-ФЗ с нескольких рабочих мест. НИКАКИХ НАСТРОЕК В РАЗРАБОТКЕ - ПОДКЛЮЧИЛ И ПЕЧАТАЙ. Если у вас несколько отделов и одна ККМ - печатайте на одной ККМ! Если у вас две ККМ и одна поломалась - печатайте на одной ККМ, пока ремонтируете другую!

4000 руб.

27.08.2018    117046    994    565    

835
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 Тогда 
	ПрочитатьОтвет(Результат.ПолучитьТелоКакСтроку());
КонецЕсли;
Показать
Оставьте свое сообщение