Онлайн проверка марок Честный знак при разрешительном порядке в розничной торговле для v.8 и 7.7

01.04.24

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

Уже с 01.04.2024 вводится так называемый "разрешительный" режим продажи маркированной продукции в розницу. Это значит, что перед продажей нужно запрашивать у сервиса ЦРПТ разрешение на реализацию каждой марки. Здесь кратко опишу, как это делается, и приложу примеры для 1С 8 и 7.7.

Скачать исходный код

Наименование Файл Версия Размер
Онлайн проверка марок для 7.7
.ert 37,50Kb
16
.ert 37,50Kb 16 Скачать
Онлайн проверка марок для v.8
.epf 15,00Kb
23
.epf 15,00Kb 23 Скачать

Подписано постановление правительства РФ № 1944 от 21 ноября 2023 о продаже маркированной продукции с предварительной проверкой в информационной системе «Честный ЗНАК».

Основные этапы запуска данного режима:

1 апреля 2024

Табачная продукция, Пиво, сидр, слабоалкогольные напитки (в кегах)

1 мая 2024 — для сетей из 50 и более магазинов

Молочные товары и упакованная вода

1 сентября 2024 — для всех

Молочные товары и упакованная вода

1 ноября 2024 года

Парфюмерия, БАДы и антисептики, Одежда и обувь, Фототовары, Шины

5 февраля 2025

Соки и безалкогольные напитки

 

Как можно выполнять такую проверку из 1С 8 и 7.7:

 

На самом деле, все просто.

 - В личном кабинете Честного Знака можно получить токен авторизации для ККТ (см 4-ю картинку).

 - Определить сервер (CDN площадку), через который пойдет проверка марки

    - До 01.04.2024 можно использовать markirovka.crpt.ru

    - После 01.04.2024 надо получать список доступных площадок проверки кода через API сервиса https://cdn.crpt.ru/api/v4/true-api/cdn/info

        - ЦРПТ вернет список доступных серверов, из них надо будет выбрать тот, что наименее нагружен

          - Нагрузку определяем через api/v4/true-api/cdn/health/check , там возвращается среднее время ожидания

 - Используя HTTPЗапрос (post) передать марку и ИНН на этот сервер (площадку) через API сервиса api/v4/true-api/codes/check

 - Получить обратно информацию по марке в JSON, разобрать ее.

 - Сделать вывод, можно ли продавать данную марку.

 - При продаже на ККТ в отраслевой реквизит чека (тег 1260) передать идентификатор запроса и отметку времени, которые вернет ЦРПТ.

 

Электронная подпись не нужна!

 

Как передавать результаты в чек ККТ:

1260:отраслевой реквизит предмета расчета
  1262: 030 идентификатор ФОИВ
  1263: 21.11.2023 дата документа основания
  1264: 1944 номер документа основания
  1265: UUID=56662403-e336-4114-88f3-6bd727f61a02&Time=1710432829649 значение отраслевого реквизита

 

В публикацию включены обработки, демонстрирующие весь процесс для 1С 8.х и 1С 7.7:

 - Получение площадок CDN из ЦРПТ через /cdn/info

 - Выбор самой быстрой из них через /cdn/health/check

 - Запрос данных о статусе марки через /codes/check и разбор полученного ответа json

 - Определение возможности продажи марки

 

ВАЖНО:

Марки должны передаваться на контроль с символом <GS> в тех местах, где он положен по правилам маркировки.

Обычно он идет перед крипто-хвостом, т.е. перед маркерами 91,92,93 в коде  марки.

Символ этот должен передаваться в JSON формате экранированным, как \u001d

Пример запроса: { "codes":[ "01048657365749062155esJWe\u001d93dGVz" ], "fiscalDriveNumber": "1234567890123456" }

Чтобы обработки из этой публикации корректно отправляли символ <GS> на контроль, марку надо вводить в следующем виде: 0104601662006162215rP23&(29)93wOyt

Т.е символ <GS> обозначать как (29)

 

Пример запроса статуса марки для 1С 8.х:

Функция ВыполнитьОнлайнКонтрольМаркиЧестныйЗнак(Марка,Токен,ИНН,НомерФН,ТестовыйКонтур,ПлощадкаCDN) Экспорт
     
        Заголовки = Новый Соответствие();
	Заголовки.Вставить("X-API-KEY",Токен);
	Заголовки.Вставить("Accept-Charset","utf-8");
	Заголовки.Вставить("Content-Type","application/json; charset=utf-8");
	
	HTTPЗапрос = Новый HTTPЗапрос("api/v4/true-api/codes/check",Заголовки);
	
	Если ЗначениеЗаполнено(ИНН) Тогда
		ЧастьЗапросаИНН = ",""inn"":"""+СокрЛП(ИНН)+"""";
	Иначе
		ЧастьЗапросаИНН = "";
	КонецЕсли;
	
	Если ЗначениеЗаполнено(НомерФН) Тогда
		ЧастьЗапросаФН  = ",""fiscalDriveNumber"":"""+СокрЛП(НомерФН)+"""";
	Иначе
		ЧастьЗапросаФН  = "";
	КонецЕсли;	
	
	ТелоЗапросаJSON = "{""codes"":["""+СокрЛП(Марка)+"""]"+ЧастьЗапросаИНН+ЧастьЗапросаФН+"}";
	
	HTTPЗапрос.УстановитьТелоИзСтроки(ТелоЗапросаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
	
        Если ЗначениеЗаполнено(ПлощадкаCDN) Тогда
            АдресРесурса = ПлощадкаCDN;
        Иначе   
	    АдресРесурса = ?(ТестовыйКонтур=Истина,"markirovka.sandbox.crptech.ru","markirovka.crpt.ru");
        КонецЕсли;
	
	Попытка
		
		ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
		
		Соединение = Новый HTTPСоединение(АдресРесурса,443,,,Неопределено,1.5,ЗащищенноеСоединение);
		
		HTTPОтвет = Соединение.ОтправитьДляОбработки(HTTPЗапрос); //post
		
	Исключение
		
		Сообщить(ОписаниеОшибки());
		
		Возврат Ложь;
		
	КонецПопытки;
	
	ТелоОтветаJSON = HTTPОтвет.ПолучитьТелоКакСтроку();
	
	Сообщить("Код состояния: "+HTTPОтвет.КодСостояния);
	Сообщить("Текст ответа: "+ТелоОтветаJSON);

        Возврат Истина;
 
КонецФункции

 

Пример запроса CDN-площадок для  1С 8.х

Функция ЗапроситьДанныеПлощадокCDN(Токен,ТестовыйКонтур) Экспорт
		
	Заголовки = Новый Соответствие();
	Заголовки.Вставить("X-API-KEY",Токен);
	Заголовки.Вставить("Accept-Charset","utf-8");
	Заголовки.Вставить("Content-Type","application/json; charset=utf-8");
	
	HTTPЗапрос = Новый HTTPЗапрос("api/v4/true-api/cdn/info",Заголовки);
	
	АдресРесурса = ?(ТестовыйКонтур=Истина,"markirovka.sandbox.crptech.ru","cdn.crpt.ru"); //Тут хост продуктивного контура другой
	
	Попытка
		
		ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
		
		Соединение = Новый HTTPСоединение(АдресРесурса,443,,,Неопределено,1.5,ЗащищенноеСоединение);
		
		HTTPОтвет = Соединение.Получить(HTTPЗапрос); //GET
		
	Исключение
				
		Сообщить(ОписаниеОшибки());
		
		Возврат Ложь;
		
	КонецПопытки;
	
	ТелоОтветаJSON = HTTPОтвет.ПолучитьТелоКакСтроку();
	
	Сообщить("Код состояния: "+HTTPОтвет.КодСостояния);
	Сообщить("Текст ответа: "+ТелоОтветаJSON);
	
	Если HTTPОтвет.КодСостояния = 200 Тогда
		
		Возврат Истина;
				
	Иначе	
		
		Сообщить("Не удалось получить площадку CDN. Код ответа: "+Строка(HTTPОтвет.КодСостояния));
		
		Возврат Ложь;

	КонецЕсли;
	
КонецФункции

 

Пример проверки CDN-площадки для  1С 8.х

Функция ПроверитьПлощадкуCDN(Токен,ПлощадкаCDN) Экспорт
	
	Заголовки = Новый Соответствие();
	Заголовки.Вставить("X-API-KEY",Токен);
	Заголовки.Вставить("Accept-Charset","utf-8");
	Заголовки.Вставить("Content-Type","application/json; charset=utf-8");
	
	HTTPЗапрос = Новый HTTPЗапрос("api/v4/true-api/cdn/health/check",Заголовки);
		
	АдресРесурса  = ПлощадкаCDN;
	ПортРесурса   = 443;
	ИспШифрование = Истина;
	
	ВремяЗапроса = 0;
	
	Попытка
		
		Если ИспШифрование Тогда
			ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
		Иначе	                   
			ЗащищенноеСоединение = Неопределено;
		КонецЕсли;	
		
		Соединение = Новый HTTPСоединение(АдресРесурса,ПортРесурса,,,Неопределено,1.5,ЗащищенноеСоединение);
		
		ВремяНачала = ТекущаяУниверсальнаяДатаВМиллисекундах();
		
		HTTPОтвет = Соединение.Получить(HTTPЗапрос); //Get
		
		ВремяОкончания = ТекущаяУниверсальнаяДатаВМиллисекундах();
		
		ВремяЗапроса = ВремяОкончания - ВремяНачала;
		
	Исключение
		
		//Нет соединения или таймаут - продажа разрешена
		
		Сообщить(ОписаниеОшибки());
		
		Возврат -1;
		
	КонецПопытки;
	
	ТелоОтветаJSON = HTTPОтвет.ПолучитьТелоКакСтроку();
	
	Сообщить("Код состояния: "+HTTPОтвет.КодСостояния);
	Сообщить("Текст ответа: "+ТелоОтветаJSON);
		
	Если HTTPОтвет.КодСостояния=200 Тогда
		
		//ВремяОжиданияСтр = ПолучитьИзСтрокиJSON(ТелоОтветаJSON,"avgTimeMs");
				
		Возврат ВремяЗапроса ;
						
	Иначе
				
		Сообщить("Не удалось проверить площадку CDN. Код ответа: "+Строка(HTTPОтвет.КодСостояния));
		
		Возврат -1;
		
	КонецЕсли;	
	
	
КонецФункции

 

Пример запроса статуса марки для 1С 7.7 :

Функция ВыполнитьОнлайнКонтрольМаркиЧестныйЗнак(Марка,Токен,ИНН,НомерФН,ТестовыйКонтур,ПлощадкаCDN)
	
        Если ПустоеЗначение(ПлощадкаCDN)=0 Тогда
            АдресРесурса = ПлощадкаCDN;
        Иначе   
	    АдресРесурса = ?(ТестовыйКонтур=1,"markirovka.sandbox.crptech.ru","markirovka.crpt.ru");
        КонецЕсли;
	
	АдресРесурса = "https://"+АдресРесурса+"/api/v4/true-api/codes/check";
	
	HTTPЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
	HTTPЗапрос.Option(2,"utf-8");
	HTTPЗапрос.SetTimeouts(1500, 1500, 1500, 1500);
	
	HTTPЗапрос.Open("POST",АдресРесурса,1);
	
	HTTPЗапрос.SetRequestHeader("X-API-KEY", СокрЛП(Токен));
	HTTPЗапрос.SetRequestHeader("Accept-Charset", "utf-8");
	HTTPЗапрос.SetRequestHeader("Content-Type", "application/json; charset=utf-8");
	
	Если ПустаяСтрока(ИНН)=0 Тогда
		ЧастьЗапросаИНН = ",""inn"":"""+СокрЛП(ИНН)+"""";
	Иначе
		ЧастьЗапросаИНН = "";
	КонецЕсли;
	
	Если ПустаяСтрока(НомерФН)=0 Тогда
		ЧастьЗапросаФН  = ",""fiscalDriveNumber"":"""+СокрЛП(НомерФН)+"""";
	Иначе
		ЧастьЗапросаФН  = "";
	КонецЕсли;	
	
	ТелоЗапросаJSON = "{""codes"":["""+СокрЛП(Марка)+"""]"+ЧастьЗапросаИНН+ЧастьЗапросаФН+"}"; 
	
	HTTPЗапрос.Send(ТелоЗапросаJSON);
	ТаймаутОжидания = 5;
	Попытка
		РезЗапроса = HTTPЗапрос.WaitForResponse(ТаймаутОжидания);
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат 0;
	КонецПопытки;
	
	Если РезЗапроса = -1 Тогда
		КодСостояния = HTTPЗапрос.status();
		КодСостоянияТекст = HTTPЗапрос.statusText();
		ТелоОтветаJSON = СокрЛП(HTTPЗапрос.ResponseText());
		
		Сообщить("Код состояния: "+Строка(КодСостояния));
		Сообщить("Состояние: "+КодСостоянияТекст);
		Сообщить("Текст ответа: "+ТелоОтветаJSON); //Строка длинная, может не влезть, в файле для скачивания она делится на короткие строки
        
              Возврат 1;

       Иначе
  
        Сообщить("Нет связи с ЦРПТ.");
        Возврат 0;
      
       КонецЕсли;  

КонецФункции

 

Пример запроса CDN-площадок для  1С 7.7 :

Функция ЗапроситьДанныеПлощадокCDN(Токен,ТестовыйКонтур) Экспорт
		
	АдресРесурса = ?(ТестовыйКонтур=1,"markirovka.sandbox.crptech.ru","cdn.crpt.ru"); //Тут хост продуктивного контура другой
	АдресРесурса = "https://"+АдресРесурса +"/api/v4/true-api/cdn/info";
	
	HTTPЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
	HTTPЗапрос.Option(2,"utf-8");
	HTTPЗапрос.SetTimeouts(3000, 3000, 3000, 3000);
	
	HTTPЗапрос.Open("GET",АдресРесурса,1);
	
	HTTPЗапрос.SetRequestHeader("X-API-KEY", СокрЛП(Токен));
	HTTPЗапрос.SetRequestHeader("Accept-Charset", "utf-8");
	HTTPЗапрос.SetRequestHeader("Content-Type", "application/json; charset=utf-8");
	
	ВремяНачала = _GetPerformanceCounter();
	
	HTTPЗапрос.Send();
	ТаймаутОжидания = 5;
	Попытка
		РезЗапроса = HTTPЗапрос.WaitForResponse(ТаймаутОжидания);
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат 0;
	КонецПопытки;
	
	ВремяОкончания = _GetPerformanceCounter();
	ВремяЗапроса = ВремяОкончания - ВремяНачала;
	
	Если РезЗапроса = -1 Тогда
		КодСостояния = HTTPЗапрос.status();
		КодСостоянияТекст = HTTPЗапрос.statusText();
		ТелоОтветаJSON = СокрЛП(HTTPЗапрос.ResponseText());
		
		Сообщить("Код состояния: "+Строка(КодСостояния));
		Сообщить("Состояние: "+КодСостоянияТекст);
		Сообщить("Текст ответа: "+ТелоОтветаJSON);
		
		Если КодСостояния=200 Тогда
			
			Возврат 1;
			
		Иначе	
						
			Сообщить("Не удалось получить площадку CDN. Код ответа: "+Строка(КодСостояния));
			
			Возврат 0;
			
		КонецЕсли;
		
	Иначе
		
		Сообщить("Нет связи с ГИС МТ.");
		Возврат Рез;
		
	КонецЕсли;	
	
КонецФункции

 

Пример проверки CDN-площадки для  1С 7.7

Функция ПроверитьПлощадкуCDN(Токен,ПлощадкаCDN) Экспорт
		
	АдресРесурса  = ПлощадкаCDN;
	ПортРесурса   = 443;
	
	ИспШифрование = 1;
	
	Если ИспШифрование=1 Тогда
		АдресРесурса = "https://"+АдресРесурса;
	Иначе	
		АдресРесурса = "http://"+АдресРесурса;
	КонецЕсли;
		
	АдресРесурса = АдресРесурса +"/api/v4/true-api/cdn/health/check";
	
	HTTPЗапрос = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
	HTTPЗапрос.Option(2,"utf-8");
	HTTPЗапрос.SetTimeouts(3000, 3000, 3000, 3000);
	
	HTTPЗапрос.Open("GET",АдресРесурса,1);
	
	HTTPЗапрос.SetRequestHeader("X-API-KEY", СокрЛП(Токен));
	HTTPЗапрос.SetRequestHeader("Accept-Charset", "utf-8");
	HTTPЗапрос.SetRequestHeader("Content-Type", "application/json; charset=utf-8");
	
	ВремяНачала = _GetPerformanceCounter();
	
	HTTPЗапрос.Send();
	ТаймаутОжидания = 5;
	Попытка
		РезЗапроса = HTTPЗапрос.WaitForResponse(ТаймаутОжидания);
	Исключение
		Сообщить(ОписаниеОшибки());
		Возврат -1;
	КонецПопытки;
	
	ВремяОкончания = _GetPerformanceCounter();
	ВремяЗапроса = ВремяОкончания - ВремяНачала;
	
	Если РезЗапроса = -1 Тогда
		КодСостояния = HTTPЗапрос.status();
		КодСостоянияТекст = HTTPЗапрос.statusText();
		ТелоОтветаJSON = СокрЛП(HTTPЗапрос.ResponseText());
		
		Сообщить("Код состояния: "+Строка(КодСостояния));
		Сообщить("Состояние: "+КодСостоянияТекст);
		Сообщить("Текст ответа: "+ТелоОтветаJSON);
		
		Если КодСостояния=200 Тогда
						
			//ВремяОжиданияСтр = ПолучитьИзСтрокиJSON(ТелоОтветаJSON,"avgTimeMs");
						
			Возврат ВремяЗапроса;
			
		Иначе	
			
			Сообщить("Не удалось получить площадку CDN. Код ответа: "+Строка(КодСостояния));
			
			Возврат -1;
			
		КонецЕсли;
		
	Иначе
		
		Сообщить("Нет связи с ГИС МТ.");
		Возврат -1;
		
	КонецЕсли;	
	
КонецФункции

 

UPD 15.03.2024

Добавлено получение площадок CDN

Добавлен выбор наилучшей площадки CDN

 

UPD 21.03.2024

Добавлена проверка площадок CDN

Добавлена передача номера ФН при проверке марки (это рекомендуется делать, чтобы при "подозрительной активности" ЦРПТ блокировало запросы по номеру ФН а не токен целиком")

 

UPD 25.03.2024

Добавлено важно замечание относительно символа <GS> в коде марки, отправляемом на контроль.

Обновлены обработки.

 

UPD 27.03.2024

Все таймауты увеличены до 15 секунд. Как показала практика эксплуатации, 3 секунд крайне мало.

 

UPD 01.04.2024

Добавил экранирование символа GS1 (код 29) при передаче в ЦРПТ.

 

UPD 02.04.2024

Добавил обработку тега isOwner в ответе ЦРПТ при проверке марки

Проверено на следующих конфигурациях и релизах:

  • Управление торговлей, редакция 10.3, релизы 10.3.87.2

Честный Знак Разрешительный порядок Онлайн проверка марок Розница ЦРПТ CDN площадки

См. также

АИС: Онлайн-кассы для 1С 7.7 (с поддержкой маркировки ЕГАИС, ТАБАКА, ОБУВИ, ЛЕКАРСТВ, ШИН, ОДЕЖДЫ, МОЛОКА, ВОДЫ и пр.) и Обмен с 1С 7.7 Честный ЗНАК (ГИСМТ, ЦРПТ, ЭДО)

Оптовая торговля Розничная торговля ККМ ЭДО и ОФД Обмен с ГосИС Системный администратор Программист Оперативный учет 7.7 Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия Платные (руб)

Подключение фискального регистратора к 1С 7.7 в режиме онлайн-кассы (в соответствии с 54-ФЗ). Поддержка крайних версий драйверов ККТ: ДТО 10 и ДТО 8 для Атол, 4.15, 5.16 для Штрих-М. Поддержка протоколов ФФД 1.0, 1.05, 1.1 и 1.2, развитые настройки для применения частичных оплат и авансов в оптовой и розничной торговле. Поддержка чеков коррекции всех версий. Поддержка розничной продажи маркированной продукции (ЕГАИС, табак, обувь, лекарства, шины, одежда, белье, парфюмерия, молочная продукция, вода и пр.). Вывод электронного чека (на е-майл, телефон) по требованию покупателя, поддерживаются комбинированные типы оплаты, режим эмуляции печати чека на ФР. Полный цикл работы из 1С 7.7 с маркировкой Честный ЗНАК (ГИСМТ, ЦРПТ) из 1С 7.7. ЭДО (табак, обувь, шины, одежда, молочная продукция, вода и прочие группы товаров) для розницы и опта (приемка и оптовая отгрузка маркированной продукции). Поддерживается как объемно-сортовой учет (ОСУ) так и поштучный (поэкземплярный) учет.

2000 руб.

28.03.2017    466007    4302    3463    

2434

Интеграция 1С и ФГИС Меркурий

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

Модуль интеграции устанавливается в вашу 1С. Сокращает время оформления ветсправок с 8 часов до 30 минут в день. Проверяет ошибки в каждом документе. Обмен данными с ФГИС Меркурий из 1С через ВетИС API

36000 руб.

14.04.2017    51994    100    44    

35

Обмен с системой Меркурий (полный цикл) через Ветис.API для 1С 7.7

Оптовая торговля Обмен с ГосИС Программист Бухгалтер Платформа 1С v7.7 Конфигурации 1cv7 Сельское хозяйство и рыболовство Оптовая торговля, дистрибуция, логистика Пищевая промышленность Бухгалтерский учет Платные (руб)

В обработке реализован полный цикл работы с ГИС Меркурий из 1С на платфоме 7.70.027 (поддерживается конфигурация "Торговля и Склад") через Ветис.API: реализованы процедуры обмена с подсистемами заявок и справочников Ветис.API в формате 2.0.

5040 руб.

03.07.2018    37069    79    27    

60

Обмен с ЕГАИС из 1С V7.7

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

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

6000 руб.

13.11.2015    123164    169    2529    

232

АИС: Обмен с ФГИС Меркурий (Ветис.API) для всех* конфигураций 1С 7.7

Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Обмен с ГосИС Программист Бухгалтер Оперативный учет 7.7 Бухгалтерский учет 7.7 1С:Бухгалтерия 7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 1С:Упрощенное налогообложение 7.7 Сельское хозяйство и рыболовство Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Пищевая промышленность Россия Бухгалтерский учет Управленческий учет Платные (руб)

Полностью автоматизированный обмен между конфигурациями 1С 7.7 и ФГИС Меркурий через Ветис.API для всех видов деятельности (Опт, Розница, Производство). Для организации обмена с ФГИС Меркурий требуется минимальная доработка конфигураций (поддерживается "из коробки" 1С: "Торговля и склад ред. 9.2", 1С: "Комплексная ред. 4.5", 1С: "Бухгалтерия 7.7", 1С: "УСН 7.7", 1С Предприниматель, другие конфигурации по заказу, включая нетиповые и самописные). Модуль разработан таким образом, чтобы минимизировать затраты по внедрению в произвольную конфигурацию на базе 1С 7.7. Вы можете БЕСПЛАТНО скачать демо-версию без ограничения по функционалу и опробовать решение в полном объеме перед покупкой. В данном программном продукте реализованы все технические требования Россельхознадзора по обмену в формате 2.0 и 2.1. Решение прошло опытную эксплуатацию и тестирование на крупных объектах всех видов деятельности: Производство, Опт, Розница.

10000 руб.

21.11.2018    53255    155    105    

69

АИС: ГИИС ДМДК для 1С 7.7 (маркировка ювелирных изделий и драгоценных камней)

Обмен с ГосИС Программист Платформа 1С v7.7 1С:Комплексная 7.7 1С:Торговля и склад 7.7 Ювелирная промышленность и торговля Россия Бухгалтерский учет Абонемент ($m)

Интеграция 1С 7.7 с ГИИС ДМДК (маркировка ювелирных изделий и драгоценных камней). Данная публикация является попыткой выяснения спроса на полноценную интеграцию конфигураций на базе платформы 1С 7.7 с ГИИС ДМДК (https://dmdk.ru/). На текущий момент реализована печать ценников-бирок, содержащие УИН продукции в формате ШК Datamatrix. Имеются планы разработки решения для учета розничных продаж через УТМ (Универсальный Транспортный Модуль) из 1С 7.7.

1 стартмани

01.03.2022    5749    1    victuan    0    

17
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. pablo_escobar 15.03.24 11:37 Сейчас в теме
В документации сказано
адрес для обращения к codes/check (https://markirovka.crpt.ru) будут действовать до 1 апреля
2024 года. С этой даты метод можно будет вызывать только по адресам CDN-площадок,
полученных методом /cdn/info
2. kirlog 119 15.03.24 11:55 Сейчас в теме
(1) Но методика запроса там будет та же, только адреса другие
3. pablo_escobar 15.03.24 12:31 Сейчас в теме
(2)Методика чуть посложнее, предварительно нужно получить сервера, потом проверить их доступность, потом только слать марку на проверку.
4. kirlog 119 15.03.24 14:26 Сейчас в теме
(3) Получать сервера и проверять доступность надо будет в начале смены или при недоступности выбранной ранее площадки. Этот механизм тоже выложу здесь, как сделаю.
5. user2067856 17.03.24 22:52 Сейчас в теме
скажите пожалуйста, а всегда ли значения такие ?
1260:отраслевой реквизит предмета расчета
1262: 030 идентификатор ФОИВ
1263: 21.11.2023 дата документа основания
1264: 1944 номер документа основания
6. kirlog 119 18.03.24 00:30 Сейчас в теме
(5) Над данный момент - да, всегда такие. По крайней мере, типовые программы 1С шлют именно так. В УНФ 3, например, эти значения прописаны прямо в коде. Но со временем это может измениться, конечно.
7. Tarlich 116 18.03.24 11:37 Сейчас в теме
(8) (не совсем в теме) а проверка марок средствами ККТ не решает эту проблему ?
т.е если раньше мне надо было в момент приема для ИП постоянно идти в Бухгалтерию за ЭЦП (т.к там ЭДО)
то теперь мне надо будет ЭЦП еше на каждую точку ? или судя по коду пока токена достаточно ? в Типовых же есть настройка СУЗ где мы вводим данные Токена - или это не то ?
8. kirlog 119 18.03.24 16:11 Сейчас в теме
(7) Проверка марок средствами ККТ не решает вопрос. Новый механизм онлайн проверки марок вводится в дополнение к нему. Одного механизма им показалось мало:)
ЭЦП на каждую точку не нужно. Достаточно токена. По крайней мере до 01.04.2025. Что будет после, пока неясно. Обещают оффлайн проверку по аналогии с УТМ ЕГАИС.
В типовых (новых релизах 2024г) есть справочник "токены авторизации", который можно открыть из панели "Обмен с ИС МП (Обувь, одежда, табак..)". В этом справочнике можно указать токен с типом "ИС МП (розница)". Вот этот тот самый токен, который будет использоваться на кассовых местах для онлайн проверки марок без ЭЦП.
Однако, насколько мне известно, типовые конфигурации 1С на данный момент не в полной мере поддерживают новый механизм. Обновления с полноценной поддержкой обещают в ближайшее время.
9. AlexJustAlex 3 24.03.24 21:49 Сейчас в теме
Наверное надо КодОшибки = "5" пропускать.
Это вроде ошибка отсуствие криптохвоста в марке, в сигаретах и молочке его у нас нет, в пиве вроде тоже.
С криптохвостом видимо слишком большой QR-код получается, не помещается у производителей.
И ещё в марке есть код проверки - "93" + 4 символа, с ними не находит это нужно отрезать.

А остальное ОК, работает, спасибо.
10. kirlog 119 25.03.24 02:15 Сейчас в теме
(9) В табаке, молочке и пиве, крипто-хвост это 4 последние символа "кода проверки". В молочке и пиве есть маркер "93" для него, а в табаке код проверки идет прямо после МРЦ.

Но с табаком проверка работает корректно: на нормальные марки, считанные с реальных пачек, ошибку 5 я не получал. Они нормально ищутся целиком. Но если специально исказить код проверки, ошибка тут как тут. А значит, у ЦРПТ это учтено. Поэтому, я пока не вижу необходимости игнорировать ошибку 5, по крайней мере, в табаке.

Что касается молока и пива, в методическом руководстве ЦРПТ есть пример, где марка передается на контроль целиком, включая "93" и код проверки. Может быть, проблема в том, что надо обязательно передать еще символ <GS> \u001d перед "93" ?
Мне пока негде проверить, нет токенов с молоком или пивом в обороте.

Вот из руководства.

>>Пример тела запроса:
{ "codes":[ "01048657365749062155esJWe\u001d93dGVz" ], "fiscalDriveNumber": "1234567890123456" }
11. kirlog 119 25.03.24 15:19 Сейчас в теме
(9)Проверил молочную продукцию. Перед крипто-хвостом надо отправлять на контроль символ <GS> в экранированном виде \u001d для тех видов маркировки, где он предполагается.

Вот так: { "codes":[ "01048657365749062155esJWe\u001d93dGVz" ], "fiscalDriveNumber": "1234567890123456" }

Тогда код находится, крипто-хвост корректно обрабатывается, проблем нет.

По итогу:
- Игнорировать ошибку 5 не надо
- Отбрасывать код проверки и маркер "93" не надо
- Марка передается на контроль целиком, включая символы <GS>

Публикация обновлена.
Обработки обновлены.
Кто уже скачал обработки, пишите в личку, я отправлю новые версии.
26. HSV 3 01.04.24 15:30 Сейчас в теме
(11)
\u001d

Все таки не пойму как экранировать.
Если так делаю
ПодготовленныйШК = СтрЗаменить(_Марка,Символ29,"\u001d");
выдает:
Текст запроса: {"codes":["0104600605031841215,T**q\\u001d93n***"],"inn":"150201234567","fiscalDriveNumber":"1234567890123456"}
Код состояния: 200
Состояние: OK
Текст ответа: {"code":0,"description":"ok","codes":[{"cis":"0104600605031841215,T**q\\u001d93n***","valid":true,"printView":"0104600605031841215,T**q\\u001d93n***","gtin":"04600605031841","verified":f
alse,"message":"cannot find code [0104600605031841215,T**q\\u001d93n***] in db","found":false,"realizable":false,"utilised":false,"isBlocked":false,"isOwner":false,"errorCode":10,"isTracking":false,"s
old":false,"grayZone":false}],"reqId":"741b3894-cbe6-420b-9b52-3527a697286c","reqTimestamp":1711973307102}
Продажа разрешена: 0
ИД запроса:
Временная метка:
Время запроса: 335
Текст ошибки: КМ не найден в ГИС МТ. cannot find code [0104600605031841215,T**q\u001d93n***] in db

*****************
Если отправлять марку как есть, то выдает
Код состояния: 400
Состояние: Bad Request
Текст ответа: {"code":400,"description":"400 BAD_REQUEST \"Failed to read HTTP message\"","codes":[]}
Продажа разрешена: 0
ИД запроса:
Временная метка:
Время запроса: 0
Текст ошибки: Не удалось выполнить проверку марки. Код ответа: 400. 400 BAD_REQUEST "Failed to read HTTP message"
12. basil_m 6 28.03.24 11:20 Сейчас в теме
Добрый день! А вообще на каком этапе это должно проводится? Получается при каждом сканировании маркированного товара или уже потом перед фискализацией всего чека? С десяток маркированных товаров и наверное чек минут 5 будет кассир пробивать.
Интересно кто-нибудь в реальных условиях это опробовал, как долго это происходит?
Реквизиты 1260, 1262, 1263, 1264 получается при регистрации каждой позиции надо вносить. Нет примера реквизита 1260? Еще интересно откуда берутся значения реквизитов 1262, 1263 и 1264, они у всех одинаковые что-ли?
14. kirlog 119 28.03.24 12:23 Сейчас в теме
(12)Добрый день!
Рекомендуется выполнять онлайн-проверку при добавлении марки в чек, т.е. при сканировании каждой марки.
На каждую марку ЦРПТ обещает ответ за 1.5 секунды (что уже сейчас не везде так, хотя, очевидно, это зависит от канала связи и прочих вещей, а не только от ЦРПТ). У меня на тестах никогда не было задержек более 800 мс. Однако, на кассовых местах со слабым интернетом наблюдаю 2-3 секунды. Это терпимо.
Теги 1262, 1263, 1264 у всех одинаковые.
Тег 1265 это идентификатор и временная метка, которые вернет ЦРПТ в ответ на запрос онлайн-проверки марки, в случае если ее продажа разрешена.
Пример программирования тега 1260 на драйвере АТОЛ 10 сейчас напишу ответом на следующее сообщение.
13. vitaliysv 28.03.24 12:08 Сейчас в теме
Добрый день

Может у кого есть пример кода записи тега 1260 для 1с77 и драйвера Атол10

Вот мой код:

Объект.setParam(1262, "030");
Объект.setParam(1263, "21.11.2023");
Объект.setParam(1264, "1944");
Объект.setParam(1265, "UUID=e4a7049b-e0ad-4d89-9e10-11d118106f8f&Time=1711615815316");

Если Объект.utilFormTlv() = 0 Тогда
Тег1260 = Объект.getParamString(Объект.LIBFPTR_PARAM_TAG_VALUE);
КонецЕсли;


Если ПустоеЗначение(Тег1260) = 0 Тогда
Объект.setParamStrHex(1260, Тег1260);
КонецЕсли;


после регистрации позиции получаю ошибку:
148: Ошибка программирования реквизита 1260 (Ошибка программирования реквизита 1260
15. kirlog 119 28.03.24 12:29 Сейчас в теме
(13)Добрый день!

У Вас ошибка вот в этой строке:

Тег1260 = Объект.getParamString

Надо использовать:

Тег1260 = Объект.getParamStringHex

Мой рабочий пример:

ДрайверККМ.setParam(1262, "030");
ДрайверККМ.setParam(1263, "21.11.2023");
ДрайверККМ.setParam(1264, "1944");
ДрайверККМ.setParam(1265, "UUID="+СокрЛП(ИдЗапроса)+"&Time="+СокрЛП(ВременнаяМетка));
ДрайверККМ.utilFormTLV();

ДанныеТега1260 = ДрайверККМ.getParamStringHex(ДрайверККМ.LIBFPTR_PARAM_TAG_VALUE);

//.........

ДрайверККМ.setParamStrHex(1260,ДанныеТега1260);

Также, учитывайте, что метод utilFormTLV() очищает все установленные ранее теги.
Поэтому, его надо использовать до того, как заполняются остальные реквизиты чека.
Т.е. порядок такой:

- формируем тег 1260, запоминаем его в переменной
- заполняем остальные параметры чека
- заполняем тег 1260
HSV; basil_m; +2 Ответить
16. vitaliysv 28.03.24 12:31 Сейчас в теме
(15) Огромное Вам спасибо
18. basil_m 6 28.03.24 13:44 Сейчас в теме
(15)
utilFormTLV


ИдЗапроса и Временная ветка берем из ответа ТелоОтветаJSON ?
19. kirlog 119 28.03.24 15:57 Сейчас в теме
(18) Да. Это параметры reqId и reqTimestamp в этом ответе.
В обработках, присоединенных к публикации, это есть.
63. nevs1 15.04.24 23:26 Сейчас в теме
(15) Подскажите, пожалуйста, не пойму, что не так. Вроде все скопировано из Вашего примера:

ECR.setParam(1262, "030");
ECR.setParam(1263, "21.11.2023");
ECR.setParam(1264, "1944");
ECR.setParam(1265, тз.ДанныеТега1265);
ECR.utilFormTLV();

ДанныеТега1260 = ECR.getParamStringHex(ECR.LIBFPTR_PARAM_TAG_VALUE);

//заполнение других тегов

ECR.setParamStrHex(1260, ДанныеТега1260);


Но появляется ошибка:

Объекту 0x0697E418 присвоен код ошибки 148 [Ошибка программирования реквизита 1260 (Превышение длины реквизита)]
64. nevs1 15.04.24 23:43 Сейчас в теме
(63) Нашлась ошибка. При создании колонки ТЗ ДанныеТега1265 убрала указание длины и все заработало. Спасибо!
65. nevs1 16.04.24 12:41 Сейчас в теме
(15) Подскажите, пожалуйста, что не так.

В 1с77 в документ добавляю две позиции номенклатуры, а в логе первая позиция нормально проходит, а на второй ошибка. Видно, что для второй позиции теги 1262-1265 не прописываются, и прописана ошибка Код ошибки ККТ - 4459h. Соответственно в ЧЗ чек уходит только с одной первой позицией.

Код из 1с:
Пока тз.ПолучитьСтроку()=1 Цикл

	ECR.setParam(1262, "030"); 
	ECR.setParam(1263, "21.11.2023"); 
	ECR.setParam(1264, "1944"); 
	ECR.setParam(1265, тз.ДанныеТега1265); 
	ECR.utilFormTLV(); 

	ДанныеТега1260 = ECR.getParamStringHex(ECR.LIBFPTR_PARAM_TAG_VALUE); 

       //данные других тегов

       ECR.setParamStrHex(1260, ДанныеТега1260);

	Если ОшибкаДрайвера()=0 Тогда
		ECR.registration(); 
	Иначе
		Возврат;
	КонецЕсли;
		
КонецЦикла; 
Показать

Фрагмент лога:

Скрытый текст
66. kirlog 119 16.04.24 14:24 Сейчас в теме
(65)Сложно сказать что то определенное без полного кода формирования чека в 1С.
Судя по логу, вторая регистрация продажи как то сильно отличается от первой.
Видимо, что то совсем иное происходит в цикле на второй строке.
Похоже, вторая позиция у Вас идет как немаркированная. Нет ни марки в логе, ни попытки передать тег 1260, еще тега 1212 нет (а он обязательный).

Почему Вы не проверяете результат выполнения команды registration ?
По идее, если эта команда не прошла, надо запрашивать у драйвера описание ошибки, и отменять чек.
Драйвер даст более менее развернутое описание ошибки, что именно не так. Код ошибки из лога не всегда однозначен.

Например, так:

Ответ = ДрайверККМ.registration();
Если Ответ <> 0 Тогда
	Сообщить(ДрайверККМ.errorDescription());
	ДрайверККМ.cancelReceipt();
	Возврат 0;
КонецЕсли;


Ну и общий совет для 7.7: всегда и везде для передачи строчных данных в драйвер ККТ используйте СокрЛП()
Иначе драйвер будет получать строку добитую пробелами до длины поля в 1С.
67. nevs1 16.04.24 17:42 Сейчас в теме
(66) Большое спасибо за направление!
Команда registration ошибок не выдает.
Одна и та же марка почему-то может проходить как маркированный товар, так и немаркированный.
Продолжаю искать.
68. kirlog 119 16.04.24 20:11 Сейчас в теме
(67)Если команда registration не выдает ошибок (Вы проверили errorCode() и errorDescription() после ее выполнения), значит позиция добавилась в чек.
Но если позиция не маркированная (а по логу именно так), в ЧЗ она не пойдет.
69. nevs1 16.04.24 20:40 Сейчас в теме
(68) Большое спасибо за помощь!

Кажется немного стало понятно, почему так отрабатывает.
Все дело в старой проверке средствами драйвера. Непонятно, как приходят ответы.
С выбывшей маркой может быть ответ 15, а с рабочей маркой может быть ответ 5 (правда, сюда же входят случаи превышения ожидания).
Для одной и той же марки могут приходить разные ответы.
Соответственно, так было задумано, если результат проверки <> 15, то товар продается как немаркированный.

Правильно ли я понимаю, что такие случаи записываются в статистику отклонений ЧЗ, как "Продажа товара без проверки КМ"?

На форумах пишут, что сейчас М+ необязательный параметр. Можно, чтобы было просто М.
Подскажите, пожалуйста, чтобы мне не разбираться еще и со старым механизмом, можно ли принудительно установить такое значение нужного тега, чтобы в чеке печаталась просто М?
70. kirlog 119 16.04.24 21:56 Сейчас в теме
(69) По проверке марки средствами ККТ, да, не важно М+ будет, М-, или просто М.
Важно, чтобы такая проверка просто выполнялась для данной марки. Это обязательно.
Проверка марки средствами ККТ это уведомительный механизм.
Важно отличать этот механизм от нового - разрешительного, того что обсуждается в этой публикации.
Механизмы эти не связаны. Сейчас нужно использовать оба.

А вот продавать товар как немаркированный при получении ответа М-, это, с моей точки зрения, нарушение.
Марка у Вас в таком случае не уходит с оборота в ЧЗ, т.к. Вы ее не передаете в чек.
Кроме того, что эти марки повисают у Вас в обороте, а за это обещают штрафовать по истечении срока годности партии (и в лекарствах уже штрафуют), отсутствие в чеке кода маркировки, например на сигареты, это уже сейчас 100% штраф при первом же обращении покупателя "куда следует" или контрольной закупке.

Поэтому, методика проверки средствами ККТ должна быть такая:
- Проверяем все марки в чеке
- Если проверка не прошла, не пробиваем весь чек.
- Или изымаем из чека ту марку, что вызывает проблемы, и не продаем этот товар вовсе, т.к. это скорее всего некорректная марка с точки зрения структуры кода, и ошибку мы получим все равно на добавлении ее в чек.
- Если проверка прошла, пробиваем в чеке все марки с теми статусами, что вернула проверка (М+/М-/М)

Это, опять же, мое личное мнение.
17. s_vasenin 28.03.24 13:24 Сейчас в теме
Здравствуйте. "Все таймауты увеличены до 15 секунд. Как показала практика эксплуатации, 3 секунд крайне мало." - подскажите о чем идет речь? Какие таймауты вы увеличили?
20. kirlog 119 28.03.24 16:00 Сейчас в теме
(17) Таймауты на HTTP-запрос.
Вот эти:

Для 1С v.8:
ТАЙМАУТ = 15; //Тут в секундах
Соединение = Новый HTTPСоединение(АдресРесурса,ПортРесурса,,,Неопределено,ТАЙМАУТ,ЗащищенноеСоединение);


Для 1С 7.7:
HTTPЗапрос.SetTimeouts(15000, 15000, 15000, 15000); //Тут в мс
21. s_vasenin 29.03.24 07:07 Сейчас в теме
(20)
ТАЙМАУТ

Правильно я понимаю, что всё-таки 1.5 секунды на данный момент не хватает для получения ответа по коду маркировки от CDN площадки?
Я пробовал проводить тесты и по моим результатам на ожидание ответа от CDN площадки уходит 9 - 10 секунд, хотя если отправлять ответ не на CDN площадку, а на сам портал, то время ожидания ответа составляет менее секунды.
22. kirlog 119 30.03.24 01:32 Сейчас в теме
(21) По моему опыту 1.5 секунды не хватает, да.

И ведь с 01.04.2024 использовать адрес markirovka.crpt.ru будет нельзя. Можно только CDN-площадки.

По идее, эти площадки и вводились, чтобы распределить нагрузку и уменьшить время ответа.
А 9-10 секунд это не просто много для проверки одной марки, это катастрофически много.

Может быть, у Вас что то не так с интернетом/антивирусом/сетевым экраном? Часто работе с CDN-площадками мешает, например, защитник windows. Основные адреса markirovka.crpt.ru и cdn.crpt.ru он при этом не трогает. Т.е. список площадок получить удается, но подключиться к площадке - нет.

Или у ЦРПТ плановые работы какие то?
23. HSV 3 01.04.24 10:29 Сейчас в теме
Здравствуйте, скачал обработку, попробовал проверить марку:

Код состояния: 400
Состояние: Bad Request
Текст ответа: {"code":400,"description":"400 BAD_REQUEST \"Failed to read HTTP message\"","codes":[]}
Продажа разрешена: 0
ИД запроса:
Временная метка:
Время запроса: 0
Текст ошибки: Не удалось выполнить проверку марки. Код ответа: 400. 400 BAD_REQUEST "Failed to read HTTP message"


что делать?
24. HSV 3 01.04.24 11:26 Сейчас в теме
(23) простите, табак проверяет.
25. kirlog 119 01.04.24 15:30 Сейчас в теме
(24) Это 7.7? А на какую марку дает ошибку? В ней, наверное, какие то символы непечатные остались? Вы заменили в марке символ с кодом 29 (GS1) на последовательность "(29)"? Эти символы идут обычно перед маркерами 91, 92, и 93 т.е. перед крипто-частью марки.
В табаке символов GS1 нет, как и этих маркеров. Но у меня работает и молоко и вода нормально.

Вот так например:
01048657365749062155esJW(29)93dGVz
010460507701248021010001H966T09(29)91ee05(29)92Cksz/NoXpOzkFGgHxIBWyoB51u299V1ElFHA7sUOis8=
27. HSV 3 01.04.24 17:42 Сейчас в теме
(25) Да у меня 7.7
Табак (пачка)до 29 символов проходит, а вот с разделителями GS1 (по молоку, воды и блок сигарет) нет.

ПодготовленныйШК = СтрЗаменить(_Марка,Симв("29"),"\u001d");

Вот пример марки 25 позиция символ с кодом 29 (GS1)
0104600605031841215xZRn,93CT/k
Длина марки 31
Как ее нужно преобразовать? Ели заменить символ с кодом 29 (GS1) на "\u001d"),
во так 0104600605031841215xZRn,\u001d93CT/k
то выдает, что марка не найдена
Текст ошибки: КМ не найден в ГИС МТ. cannot find code [0104600605031841215xZRn,\u001d93CT/k] in db

Так тоже не проходит 0104600605031841215xZRn,\u00193CT/k
Текст ошибки: Не удалось выполнить проверку марки. Код ответа: 400. 400 BAD_REQUEST "Failed to read HTTP message"
28. HSV 3 01.04.24 18:44 Сейчас в теме
(25)
010460507701248021010001H966T09(29)91ee05(29)92Cksz/NoXpOzkFGgHxIBWyoB51u299V1ElFHA7sUOis8=

Все спасибо! Работает так:
ПодготовленныйШК = СтрЗаменить(_Марка,Симв("29"),"(29)");
29. kirlog 119 01.04.24 19:53 Сейчас в теме
(28) Если Вы используете мою обработку, то на вход ей надо подавать марку в таком вот виде
0104600605031841215xZRn,(29)93CT/k

Ну а в запросе ЦРПТ вместо (29) должно стоять ,\u001d

Т.е., например, так:

{ "codes":[ "01048657365749062155esJWe\u001d93dGVz" ], "fiscalDriveNumber": "1234567890123456" }

Моя обработка последовательность "(29)" сама заменяет на "\u001d"

Но ни в запросе ЦРПТ, ни на входе обработки не должно быть непечатных символов типа Симв(29).

Поэтому, по итогу Вы, конечно, правильно его заменяете. Однако, его просто не должно быть там:)

Я сейчас в обработках своих это подправлю, добавлю замену.
30. HSV 3 01.04.24 20:14 Сейчас в теме
(29) Да, ступил, в ВАЖНО это написано, сейчас перечитал сначала, не заметил днем видимо. Спасибо!
31. falcon 01.04.24 21:41 Сейчас в теме
(22) подскажи куда копать.

Текст запроса: {"codes":["0104602864016539215E5&L6M\\u001d93Ux16"],"inn":"*********"}

Текст ответа: {"code":0,"description":"ok","codes":[{"cis":"0104602864016539215E5&L6M\\u001d93Ux16","valid":true,"printView":"0104602864016539215E5&L6M\\u001d93Ux16","gtin":"04602864016539","verified"
:false,"message":"cannot find code [0104602864016539215E5&L6M\\u001d93Ux16] in db","found":false,"realizable":false,"utilised":false,"isBlocked":false,"isOwner":false,"errorCode":10,"isTracking":false
,"sold":false,"grayZone":false}],"reqId":"5993345d-8e5b-463f-b688-1208b86aa749","reqTimestamp":1711996577180}

Текст ошибки: КМ не найден в ГИС МТ. cannot find code [0104602864016539215E5&L6M\u001d93Ux16] in db

Текст запроса: {"codes":["0104602864016539215E5&L6M93Ux16"],"inn":"***********"}
Текст ответа: {"code":0,"description":"ok","codes":[{"cis":"0104602864016539215E5&L6M93Ux16","valid":true,"printView":"0104602864016539215E5&L6M93Ux16","gtin":"04602864016539","verified":false,"messag
e":"cannot find code [0104602864016539215E5&L6M93Ux16] in db","found":false,"realizable":false,"utilised":false,"isBlocked":false,"isOwner":false,"errorCode":10,"isTracking":false,"sold":false,"grayZo


Текст ошибки: КМ не найден в ГИС МТ. cannot find code [0104602864016539215E5&L6M93Ux16] in db


с табаком проблем нет, пиво - не хочет находится в ГИС МТ, что с экранированием \u001d, что без.....
32. kirlog 119 01.04.24 22:45 Сейчас в теме
(31)На мой взгляд лишний слеш в запросе при экранировании. Он там должен быть один.

Должно быть так: {"codes":["0104602864016539215E5&L6M\u001d93Ux16"],"inn":"*********"}


Вот пример из методических рекомендаций ЦРПТ, который я тут приводил:
{ "codes":[ "01048657365749062155esJWe\u001d93dGVz" ], "fiscalDriveNumber": "1234567890123456" }
33. falcon 02.04.24 08:02 Сейчас в теме
(32) ты прав....
надо сначала JSONСтрока(), а потом уже \u001d добавлять.....
34. kirlog 119 02.04.24 13:17 Сейчас в теме
(33) Ну или при передаче в функцию JSONСтрока() на месте символа GS1 (код 29) ставить "(29)", тогда JSONСтрока() сама корректно заменит на \u001d
35. VZhulanov 5 02.04.24 20:01 Сейчас в теме
запрос "codes/check" позволяет за 1 вызов проверить до 1000 марок
так что можно вызывать проверку не при добавлении товара в чек, а перед пробитием

И нигде не нашел в документации можно ли заранее вызвать проверку кодов по остаткам БД, запомнить результат,ИД и датувремя проверки и потом просто их в чек подставлять при добавлении товара
В таком случае можно было бы фоном проверять марки, по которым в базе есть полный код (с криптохвостом) и не тратить время при продаже
36. VZhulanov 5 02.04.24 20:24 Сейчас в теме
И еще нашел 3 (три) интересных ситуаций - видимо косяк Честного Знака и в будущем могут поправить.
А может и не косяк, но важно это учитывать при проверке!

1. Токен и ИНН взял от одного юр.лица, а проверяю упаковку, которая принадлежит совсем другому юр.лицу и еще не продана.
Проверка прошла успешно, вроде бы можно продавать.
Единственное что в ответе по этой упаковке поле isOwner=false, только проанализировав его видно что упаковка принадлежит другому юр.лицу, т.е. нельзя продать.

2. Токен от одного юр.лица, ИНН и упаковка от другого.
Результат как и в 1ом варианте

3. Токен от одного юр.лица, ИНН от второго, упаковка от третьего (ну есть у меня доступ к разным клиентам ))
Результат как и в 1ом варианте

Т.е. делаю выводы:
1. можно без проблем чужие токены использовать
2. обязательно нужно проверять поле isOwner, чтобы запретить продажу чужой упаковки. Но только если используешь свой токен, так как если используешь чужой токен, то это поле будет Ложь даже на собственных упаковках
37. VZhulanov 5 02.04.24 20:31 Сейчас в теме
Проверка идет быстро, 5 марок одним запросом за 300 миллисекунд
Площадка cdn05.crpt.ru
40. basil_m 6 03.04.24 09:48 Сейчас в теме
(37)Добрый день. А ID ответа в данном случае будет один на все марки?
Подскажите, в запрос 5 штук их как можно добавить, через запятую?
"{""codes"":["""+СокрЛП(Марка)+"""]"+ЧастьЗапросаИНН+ЧастьЗапросаФН+"}"
Тут непонятно как удобнее, по каждому товару делать или сразу на всё перед пробитием, будет позиций 20 в чеке - и разбирайся потом.
41. VZhulanov 5 03.04.24 10:08 Сейчас в теме
(40)
ИД ответа и ДатаВремя проверки одни на все марки
Тяжело воспринимать такую строку запроса так как это формат JSON
Проще делать так:
ТелоЗапроса = Новый Структура("codes", Новый Массив);
ТелоЗапроса.codes.Добавить(марка1); // марки с нормальным разделителем GS (символ с кодом 29)
ТелоЗапроса.codes.Добавить(марка2);
Если ЗначениеЗаполнено(ИНН) Тогда
    ТелоЗапроса.Вставить("inn", ИНН);
КонецЕсли;
Если ЗначениеЗаполнено(НомерФН) Тогда
    ТелоЗапроса.Вставить("fiscalDriveNumber", НомерФН);
КонецЕсли;
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ТелоЗапроса);
ТелоЗапросаJSON = ЗаписьJSON.Закрыть();
Показать


получите текст
{
"codes": [
"0108594737231018212016424583902\u001D91EE08\u001D92AWcK9yOi­QvlTxWMD+w9Ur4cHd6xgJG/eEcL/kdc8VRA=",
"010460714356060421F0L50AAT37GD6\u001D91EE09\u001D92YdP09S5l­PNU27j0NiLU12edNOnJXTYzH+ZRGPnfe1k4="
],
"inn": "4222016254"
}
и символы GS автоматом преобразуются как надо
44. basil_m 6 03.04.24 11:14 Сейчас в теме
42. VZhulanov 5 03.04.24 10:11 Сейчас в теме
(40)
Тут непонятно как удобнее, по каждому товару делать или сразу на всё перед пробитием, будет позиций 20 в чеке - и разбирайся потом.


У меня в программе настройка добавлена и уже клиент сам выбирает перед добавлением марки в чек проверку делать или перед пробитием чека.
53. kirlog 119 04.04.24 18:16 Сейчас в теме
(42)Проверка перед пробитием вызывает ряд сложно разрешимых методических проблем.
Вот пример:

1. Покупается 3 пачки одинаковых сигарет (более 1 пачки берет каждый четвертый покупатель, из статистики).
2. Вот их пикнули, добавили в чек, хотим пробить.
3. На одну из марок приходит запрет.
4. Как теперь убрать эту марку из чека и забрать у покупателя нужную пачку?
5. Только считывая заново все 3 марки.
6. Значит, надо забрать у покупателя эти три пачки, все считать, одну отменить. Это не просто сложность, это конфликтная ситуация и серьезный затор на кассовом узле. Особенно, если пачек не три а пять, и в чеке 20 позиций, которые покупатель уже рассовал по пакетам.
7. Я не говорю уже о том, что для отмены позиции из чека во всех приличных магазинах нужен старший кассир или администратор смены со своей карточкой доступа или ключом.

Выводы:
1. В универсамах и вообще в магазинах с большой проходимостью проверка марок перед пробитием не годится.
2. На кассах самообслуживания тоже не годится.
3. В магазинах с небольшой проходимостью экономить время на добавление марки в чек нет необходимости в принципе.

Поэтому, ИМХО, онлайн-проверку марок целесообразно реализовывать только при добавлении в чек.
38. kirlog 119 02.04.24 23:48 Сейчас в теме
(36)Я тоже замечал, что на ИНН Честный Знак не обращает внимание.
Кстати, из последних версий методических рекомендаций ЦРПТ ИНН вообще исчез. В запросе марок остался только номер ФН. Т.е. принадлежность марки определяется только по токену.

Я добавил в обработки этой публикации проверку isOwner
Спасибо.
39. HSV 3 03.04.24 06:54 Сейчас в теме
(38)Не совсем по теме, но нет у вас такой обработки для постановки кеги на кран для 7.7?
43. kirlog 119 03.04.24 11:01 Сейчас в теме
45. nevs1 03.04.24 22:01 Сейчас в теме
Добрый день! В обработке нажимаю кнопку Проверить площадку CDN (площадка https://cdn01.crpt.ru), получаю:

Ответ получен: 0
Время ожидания: 0
Время запроса: 0
Текст ошибки: WinHttp.WinHttpRequest: Ошибка поддержки безопасных каналов

Подскажите, пожалуйста, как это исправить.
48. nevs1 04.04.24 12:30 Сейчас в теме
(45) Нашлась еще одна публикация 2077143, в которой описаны способы подключения для старых Windows. Буду пробовать.
Обоим авторам огромная благодарность!
49. basil_m 6 04.04.24 14:29 Сейчас в теме
54. nevs1 04.04.24 21:27 Сейчас в теме
50. kirlog 119 04.04.24 17:45 Сейчас в теме
(48)На windows 7 помогло вот это (Раздел Easy Fix, там качается msi файл, установил, и все заработало): https://support.microsoft.com/en-us/topic/update-to-enable-tls-1-1-and-tls-1-2-as-default-secure-protocols-in-winhttp-in-windows-c4bd73d2-31d7-761e-0178-11268bb10392
Нужны сервис-паки, конечно тоже.
Возможно, еще надо будет обновить корневые сертификаты. На 7-ке, т.е. заставить это работать 100% можно.

Под обычную windows xp без SP3 решения нет и можно не искать.
Но вот вот под windows POSEmbedded на базе XP решения в сети есть. Они заключаются в добавлении поддержки TLS 1.2 и обновлении корневых сертификатов. Пишут также, что обычную winXP можно переделать в POSEmbedded добавлением ключей в реестр.
Однако, я все это проделал, и результат неудовлетворительный. Возможно, когда то пару лет назад это было актуально. Но сейчас в 2024г запросы идут очень медленно (из за глюков в согласовании безопасности), и в 90% случаев приходит ошибка. Т.е. корректно отрабатывает только один запрос из 10.
Так что, мы у себя решили, что кассы на базе XP - всё. Их заменяем.
shaggy.vgh; +1 Ответить
55. nevs1 04.04.24 21:28 Сейчас в теме
(50)Спасибо! Потестируем с админом.
59. shaggy.vgh 08.04.24 11:21 Сейчас в теме
(50)
Добрый день! По ссылке ничего не нашел. Выложите пожалуйста другую ссылку на файл, или если можно пришлите на почту.
61. shaggy.vgh 08.04.24 14:46 Сейчас в теме
(50)

Нашел, скачал, установил, помогло. Большое спасибо!
46. DimanZ 27 04.04.24 08:22 Сейчас в теме
Добрый день!
Поделитесь, пожалуйста, примером формирования тега 1260 из 7.7 для Штрих.
Какие команды посылать и в какой последовательности.
И нужно ли оставить локальную проверку
				// Локальная проверка
		        Объект.BarCode = СокрЛП(ПолныйКМ);
				
		        Если ТипЧека = 0 Тогда
		            Объект.ItemStatus = 1; //1 - Штучный товар, подлежащий обязательной маркировке средством  
		        ИначеЕсли ТипЧека = 2 Тогда
		            Объект.ItemStatus = 3;  // возвращен
		        КонецЕсли;

			Объект.CheckItemMode = 0; //Указанный реквизит должен принимать значение, равное «0»

		        Объект.FNCheckItemBarcode();
			РезультатПроверки = Объект.CheckItemLocalResult;
Показать
51. kirlog 119 04.04.24 17:55 Сейчас в теме
(46)
1260


Проверку марок средствами ККТ надо оставлять. Новый механизм ее не отменяет.

Рабочий код формирования тега 1260 для Штриха.

ДрайверФР.TagNumber=1262;
ДрайверФР.TagType=7;
ДрайверФР.TagValueStr="030";
ДрайверФР.FNSendTagOperation();

ДрайверФР.TagNumber=1263;
ДрайверФР.TagType=7;
ДрайверФР.TagValueStr="21.11.2023";
ДрайверФР.FNSendTagOperation();

ДрайверФР.TagNumber=1264;
ДрайверФР.TagType=7;
ДрайверФР.TagValueStr="1944";
ДрайверФР.FNSendTagOperation();

ДрайверФР.TagNumber=1265;
ДрайверФР.TagType=7;
ДрайверФР.TagValueStr="UUID=56662403-e336-4114-88f3-6bd727f61a028&Time=1710432829649"
ДрайверФР.FNSendTagOperation();
47. basil_m 6 04.04.24 10:50 Сейчас в теме
Добрый день.
Попробовал без ИНН, запрос нормально проходит.
Что-то почитал вчера эти методические указания, чего там только не наворотили.
Я вот не пойму как это реализовывать. Ну допустим в начале работы запрос площадок и выбор быстрой. В метод.указаниях пишут, что надо все площадки сохранить в своё ПО и проставить приоритеты, чтобы потом не делать запрос, вообще пишут запрос не чаще раз в 6 часов. Потом получается,если в течении дня первая площадка отваливается, мне надо переключаться на другую, а ту помечать как неработающую (еще и время написано на 15 минут). А если все перестали работать, вообще проверку отключать. Справочник что-ли делать отдельный для этих площадок? Или просто если площадка отвалилась, снова делать запрос площадок с выбором лучшей?
Столько понаписано с этим режимом, жуть просто.
Кто как это реализовывает?
52. kirlog 119 04.04.24 18:02 Сейчас в теме
(47)Мы сделали справочник (регистр сведений) площадок.
Запрашиваем список площадок раз в сутки и пишем туда. Выбираем лучшую и помечаем. Если тут есть ответ - контроль включен. Иначе контроль выключаем до конца дня.
Запрашиваем статус площадки каждый раз при входе в режим продаж. Если она не отвечает выбираем лучшую, если ни одна не отвечает, отключаем контроль до конца дня.
При проверке кода, если нет ответа, повторяем запрос, если на второй нет ответа, меняем площадку, если ни одна не ответила, отключаем контроль до конца дня.
Все сопровождаем записью подробных логов и сообщениями на экран.

В распределенке площадки запрашивает только центральный узел и раздает на точки.
Точки только выбирают из уже полученных площадок.
56. basil_m 6 05.04.24 09:32 Сейчас в теме
(52)Спасибо! Да уж, всё не так просто
57. DimanZ 27 05.04.24 11:17 Сейчас в теме
58. shaggy.vgh 07.04.24 23:17 Сейчас в теме
Здравствуйте!
Пробую делать проверку CDN-площадки для 1С 7.7, а она выдает ответ: "..WinHttp.WinHttpRequest: Данные, необходимые для завершения этой операции еще не доступны..."
В чем может быть проблема?
60. shaggy.vgh 08.04.24 11:33 Сейчас в теме
Добрый день!
Не получается проверить площадку CDN.
По кнопке "Запрос площадок CDN" список получает, а проверки ни одна площадка не проходит, пишет "Ответ получен: НЕТ".
Если проверить просто площадку приходит ответ: Текст ошибки: WinHttp.WinHttpRequest: Ошибка поддержки безопасных каналов
Прикрепленные файлы:
62. shaggy.vgh 08.04.24 14:48 Сейчас в теме
(60)
Скачал предложенный в (50) Easy Fix и все заработало!)
71. djmarat3 23.05.24 17:34 Сейчас в теме
Здравствуйте. Подскажите пожалуйста, проверка кода маркировки одежды выдает такой результат:
Текст ответа:
{"code":0,
"description":"ok",
"codes":[{"cis":"XXXX",
"valid":true,
"printView":"XXXX",
"gtin":"XXXX",
"groupIds":[1],
"verified":false,
"message":"AI 91 for [XXXX] is invalid",
"found":true,
"realizable":true,
"utilised":true,
"isBlocked":false,
"isOwner":false,
"errorCode":7,
"isTracking":true,
"sold":false,
"packageType":"UNIT",
"producerInn":"XXXXX",
"grayZone":false}]

Код маркировки состоит из 31 символа и символов GS не содержит. Вроде бы проверка показывает, что код в обороте, но ошибка 7 меня смущает. Можете подсказать можно ли с такой ошибкой в чек данные передавать и пробивать?
Оставьте свое сообщение