1С 7.7. Разрешительный режим на кассах. Честный знак. Онлайн проверка с 01.04.2024. Три варианта отправки API запросов, два из них работают на старых Windows

29.08.24

Интеграция - WEB-интеграция

В связи с нововведением Разрешительного Режима Онлайн проверки, написал механизм взаимодействия 1С 7.7 с Честным знаком. Использовал три варианта отправки запросов.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Архив с данными 004
.zip 3,44Mb ver:004
38
38 Скачать (3 SM) Купить за 2 450 руб.

Согласно документации, находящейся по ссылке:
https://честныйзнак.рф/business/projects/retail/checkout/regulations/ описал методику работы. Учел временные блокировки серверов (по умолчанию на 15 мин.), то, что запросы доступных площадок нужно делать раз в шесть часов, то, что может быть аварийный режим в самом ЦРПТ,...... , все эти ситуации работают в автоматическом режиме:

//****************************************************************************** 
Процедура глУстановитьАварийнуюБлокировкуСервераОнлайнПроверкиЦРПТ(ПроверитьБлокировку=0,КолДнейБлокировки=0) Экспорт        //Позволяется устанавливать блокировку! По умолчанию устанавливаем блокировку на сутки.
	Если ПроверитьБлокировку=1 Тогда
		Если ТекущаяДата()>Константа.ДатаВременнойБлокировкиОнлайнПроверокМарокЧерезЦРПТ Тогда
			Константа.АварийнаяБлокировкаОнлайнПроверокМарокЧерезЦРПТ		= 0;
			Константа.ДатаВременнойБлокировкиОнлайнПроверокМарокЧерезЦРПТ	= "";		
		КонецЕсли;
	Иначе
		Если КолДнейБлокировки<=0 Тогда
			КолДнейБлокировки	= 1;
		КонецЕсли;
.................  и т.д.



//****************************************************************************** 
Процедура глУстановитьБлокировкуСервераОнлайнПроверкиЦРПТ(АдресПлощадки,ВремяБлокировкиЦРПТ=0) Экспорт  
	Если ВремяБлокировкиЦРПТ<=0 Тогда
		ВремяБлокировкиЦРПТ	= 15; //По умолчанию блокируем на 15 мин.
	КонецЕсли;   	
	ТекДатаБлокировки	= ТекущаяДата(); 
	ТекЧасПроверки	= 0;	        
	ТекМинПроверки	= 0;	        
	ТекущееВремя(ТекЧасПроверки,ТекМинПроверки);
	ТекМинБлокировки	= ТекЧасПроверки*60+ТекМинПроверки+ВремяБлокировкиЦРПТ;	
	КолДнейПлюсом		= Цел(ТекМинБлокировки/1440);
	Если КолДнейПлюсом>0 Тогда
		ТекДатаБлокировки	= ТекДатаБлокировки+КолДнейПлюсом;
		ТекМинБлокировки	= ТекМинБлокировки-КолДнейПлюсом*1440;
	КонецЕсли;  	
.................  и т.д.


//****************************************************************************** 
Функция ВернутьТекущийСерверОнлайнПроверкиЦРПТ(ТекДатаПроверки,ТекЧасПроверки,ТекМинПроверки) Экспорт
	глКоличествоДоступныхСерверовОнлайнПроверкиЦРПТ	= 0;
	ВыбТекСервЦРПТ	= "";
	СпрСервераДляОнлайнПроверкиВЦРПТ	= СоздатьОбъект("Справочник.СервераДляОнлайнПроверкиВЦРПТ");
	СпрСервераДляОнлайнПроверкиВЦРПТ.ПорядокРеквизита("Приоритет");
	СпрСервераДляОнлайнПроверкиВЦРПТ.ВыбратьЭлементы();
	Пока  СпрСервераДляОнлайнПроверкиВЦРПТ.ПолучитьЭлемент() = 1 Цикл		
		Если ТекДатаПроверки=СпрСервераДляОнлайнПроверкиВЦРПТ.ДатаПровеки Тогда 
			Если (ТекЧасПроверки-СпрСервераДляОнлайнПроверкиВЦРПТ.ЧасПроверки)<6 Тогда //Проверка серверов еще не требуется				
				врЕстьБлокировкаЦРПТ	=0;
				Если ПустоеЗначение(СпрСервераДляОнлайнПроверкиВЦРПТ.ДатаБлокировкиДо)=0 Тогда //Проверяем, а не заблокирован ли временно сервер!
					Если (ТекДатаПроверки<СпрСервераДляОнлайнПроверкиВЦРПТ.ДатаБлокировкиДо) Тогда
						врЕстьБлокировкаЦРПТ	=1;
					ИначеЕсли (ТекДатаПроверки=СпрСервераДляОнлайнПроверкиВЦРПТ.ДатаБлокировкиДо) и ((ТекЧасПроверки*60+ТекМинПроверки)<СпрСервераДляОнлайнПроверкиВЦРПТ.ВремяБлокировкиДо) Тогда
.................  и т.д.

Функция  глОбновитьДанныеПлощадокCDN(ПринудительноОбновить=0,ВывестиСообщение=0) Экспорт	                     	
	Рез = СоздатьОбъект("СписокЗначений");
	Рез.Установить("ТекстОшибки","");
	Рез.Установить("КодОтвета",0);		
	ТекЧасПроверки	= 0;	        
	ТекМинПроверки	= 0;	        
	ТекущееВремя(ТекЧасПроверки,ТекМинПроверки);
	ТекДатаПроверки	= ТекущаяДата();                                                                                                
	Если ПринудительноОбновить=0 Тогда
		глТекущийСерверОнлайнПроверкиЦРПТ	= ВернутьТекущийСерверОнлайнПроверкиЦРПТ(ТекДатаПроверки,ТекЧасПроверки,ТекМинПроверки);		
		Если ПустоеЗначение(глТекущийСерверОнлайнПроверкиЦРПТ)=0 Тогда
			Возврат Рез;
		КонецЕсли;
	КонецЕсли;	
	РезЗапроса 	= глЗапроситьДанныеПлощадокCDN(ВывестиСообщение); 			
	ТекстОшибки	= СокрЛП(РезЗапроса.Получить("ТекстОшибки"));  		
	КодОтвета	= РезЗапроса.Получить("КодОтвета");
	Рез.Установить("КодОтвета",КодОтвета);
	Рез.Установить("ТекстОшибки",ТекстОшибки);
	Если КодОтвета=203 Тогда //Включена Аварийная ситуация!
		Если ВывестиСообщение=1 Тогда
			Сообщить("Текст ошибки: Включена аварийная ситуация в ЦРПТ! Код ошибки: 203");	
		КонецЕсли;		
		Возврат Рез;
	ИначеЕсли (КодОтвета=401) или (ПустоеЗначение(КодОтвета)=1) Тогда
		Возврат Рез;
	КонецЕсли;	
	ЕстьОшибки	= 0;
	Если ПустоеЗначение(ТекстОшибки)=1 Тогда //Ошибок нет
		ВыбраннаяПлощадка	= РезЗапроса.Получить("ВыбраннаяПлощадка");
		Если ВыбраннаяПлощадка<>"" Тогда
			глТекущийСерверОнлайнПроверкиЦРПТ 	= ВыбраннаяПлощадка;			
		Иначе
			ЕстьОшибки	= 1;
			Если ВывестиСообщение=1 Тогда
				Сообщить("Текст ошибки: Не определен оптимальный сервер в ЦРПТ!");	
			КонецЕсли;		
		КонецЕсли;		

                ...................... и т.д.


Функция ВыполнитьОнлайнПроверкуЦРПТ(ТекНом,текКМ,РезОнлайнПроверкиЦРПТ,ТекНомерФН="",ПовторЗапроса=0)
	Рез	= 1;      
    Если (Константа.ОнлайнПроверкаМарокЧерезЦРПТ=1) и (Константа.АварийнаяБлокировкаОнлайнПроверокМарокЧерезЦРПТ<>1) Тогда		
		//Если ПроверитьТипМаркируемойПродукцииДляОнлайнПроверкиВЦРПТ(ТекНом)=1 Тогда    //Здесь проверяем, а нужно ли вообще делать проверку данного типа продукции
			Токен	= СокрЛП(Константа.ТокенДляОнлайнПроверкиВЦРПТ);
			Если ПустоеЗначение(Токен)=1 Тогда       			
				ОписаниеРезультата = "Ошибка! Не заполнен Токен в Константах для онлайн проверки ЦРПТ!";
				Рез	= 0;
			Иначе   
				КодОтвета	= 0;  
				ТекстОшибки	= "";
				Если ПустоеЗначение(глТекущийСерверОнлайнПроверкиЦРПТ)=1 Тогда
					РезПроверки	= глОбновитьДанныеПлощадокCDN();			
					КодОтвета	= РезПроверки.Получить("КодОтвета");					
					ТекстОшибки	= РезПроверки.Получить("ТекстОшибки");
				КонецЕсли; 
				Если КодОтвета=203 Тогда
					//Включили аварийный режим!
				ИначеЕсли КодОтвета=401 Тогда					
					ОписаниеРезультата = ТекстОшибки;
					Рез	= 0;
				ИначеЕсли ПустоеЗначение(глТекущийСерверОнлайнПроверкиЦРПТ)=1 Тогда
					ОписаниеРезультата = "Ошибка! Нет доступных серверов для онлайн проверки в ЦРПТ!";
					Рез	= 0;
				Иначе
					РезПроверки = глВыполнитьОнлайнКонтрольМаркиЧестныйЗнак(СокрЛП(текКМ),ТекНомерФН);				
					ТекстОшибки	= РезПроверки.Получить("ТекстОшибки");					
					Если ПустоеЗначение(ТекстОшибки)=0 Тогда          
						Рез	= 0;
						КодОтвета	= РезПроверки.Получить("КодОтвета");
						ОписаниеРезультата = ТекстОшибки;						
						Если ПустоеЗначение(КодОтвета)=1 Тогда //сервер не ответил
							Если (глКоличествоДоступныхСерверовОнлайнПроверкиЦРПТ>1) и (ПовторЗапроса =0) Тогда
								ПовторЗапроса	= 1;
								глУстановитьБлокировкуСервераОнлайнПроверкиЦРПТ(глТекущийСерверОнлайнПроверкиЦРПТ,15);     
								глОбновитьДанныеПлощадокCDN();								
								Рез =ВыполнитьОнлайнПроверкуЦРПТ(ТекНом,текКМ,РезОнлайнПроверкиЦРПТ,ТекНомерФН,ПовторЗапроса); //Повторная проверка
								Если Рез=1 Тогда
									ОписаниеРезультата = "";
								КонецЕсли;
							КонецЕсли;							     						
						ИначеЕсли (КодОтвета=203) или (КодОтвета=429) или (КодОтвета>=500) Тогда     							
							ЗаписатьЛогОшибкиОнлайнПроверкиЦРПТ(ТекНом,текКМ,ТекстОшибки,КодОтвета);
							Если (КодОтвета=203) или ((КодОтвета=5000) и (ПовторЗапроса=1)) Тогда //203 - Включена Аварийная ситуация!   5000 - просто можно пробивать далее без проверки!
								Если (КодОтвета=203) Тогда
									глУстановитьАварийнуюБлокировкуСервераОнлайнПроверкиЦРПТ();
								КонецЕсли;	
								Рез	= 1;
								ОписаниеРезультата = "";
							Иначе                                                           
								Если ПовторЗапроса	= 0 Тогда
									ПовторЗапроса	= 1;
								Иначе                    
									ПовторЗапроса	= 0;
									глУстановитьБлокировкуСервераОнлайнПроверкиЦРПТ(глТекущийСерверОнлайнПроверкиЦРПТ,15);     
									глОбновитьДанныеПлощадокCDN();
.................  и т.д.

Сделал три варианта отправки API запросов (марки экранируются, проблем с двойными кавычками внутри я не увидел - проходят корректно):

1) WinHttp.WinHttpRequest.5.1 - за описание этого метода, огромное спасибо: Кириллу Логинову
(kirlog). Но этот метод работает только на свежих операционках Windows. Два способа ниже работают и на старых операционках;
        

        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");    
                ...................... и т.д.


2) Curl1С.dll - через внешнюю компоненту, визуально, по ощущениям, скорость работы аналогична первому варианту. Проблем с запросами я не увидел. 
        

        глКарлик.УстановитьПараметр("URL",АдресРесурса);              
        глКарлик.УстановитьПараметр("TIMEOUT",ТаймаутОжидания);
        глКарлик.УстановитьПараметр("HTTPHEADER","Content-Type: application/json;charset=utf-8");
        глКарлик.УстановитьПараметр("HTTPHEADER","Accept-Charset: utf-8");
        глКарлик.УстановитьПараметр("HTTPHEADER","X-API-KEY: "+СокрЛП(Токен)); 
        глКарлик.УстановитьПараметр("CUSTOMREQUEST","POST");   
    
                ...................... и т.д.


3) Curl.exe -  бросаемся командами на экзешник. Визуально работает чуть медленней двух предыдущих вариантов, т.к. все делаем через файлы (запись, удаление). Но, несмотря на чуть медленную работу, для меня этот вариант весьма рабочий, т.к. еще несколько лет назад сделал работу с ЕГАИСом по аналогичной схеме и до сих пор работает все замечательно.
                  

КомандаСистемыСкрипт( КаталогИБ()+"curl.exe -d ""@"+ПутьКТелуЗапроса+""" -s -w \nRespCode:%{response_code} -H ""X-API-KEY: "+СокрЛП(Токен)+..................................... и т.д.

В архиве находятся все необходимые файлы, включая MD, в котором реализовано описанное выше. Код полностью открыт. 

Тестировалось все на платформе: 7.70.027. Конфигурация: любая!!!

Данный механизм можно взять как готовую основу для внедрения в свою программу. Логика работы с ЦРПТ реализована (согласно документации), думаю, почти вся.  Как минимум можно сэкономить немало времени на внедрении.

 

Обновление: 14.04.2024 - Архив с данными 002.zip

Улучшен механизм обработки результата ответа от ЦРПТ.

Устранены выявленные ошибки.

Обновление: 15.08.2024 - Архив с данными 003.zip

Устранены выявленные ошибки.

Обновление: 29.08.2024 - Архив с данными 004.zip

Устранена ошибка связанная с внешней компонентой Curl1C.dll - плодились заголовки в запросах, в следствии чего, начинали приходить отрицательные ответы в запросах.

См. также

Оптовая торговля Розничная торговля ККМ ЭДО и ОФД Обмен с ГосИС Системный администратор Программист Оперативный учет 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    478215    4443    3488    

2457

Оптовая торговля Производство готовой продукции (работ, услуг) Розничная торговля Обмен с ГосИС Программист Бухгалтер Оперативный учет 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    53978    156    105    

70

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

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

6000 руб.

13.11.2015    126790    171    2529    

232

Разработка внешних компонент WEB-интеграция Программист Платформа 1С v7.7 Конфигурации 1cv7 Платные (руб)

Компонента HttpSrv7 позволяет создавать веб-сервисы в среде 1С 7.7 и даже, используя файлы HTML, несложные веб-сайты. С помощью нее можно обеспечить доступ к данным 1С 7.7 из браузера. Дополнительно используя компоненту HTTP_Async или синхронный клиент HTTP для 1С 7.7 (публикация № 1152364) можно наладить обмен данными между удаленными информационными базами. С помощью компоненты HTTP_Async можно сначала послать несколько запросов к сайтам, веб-сервисам (в т.ч. к HttpSrv7), а затем обрабатывать данные по мере их поступления. Компонента GISMT в дополнение к HTTP_Async имеет функцию цифровой подписи и, таким образом, имеет все возможности для работы с API ГИС МТ "Честный знак" непосредственно из среды 1С 7.7.

2000 руб.

27.05.2022    8781    23    17    

34

Обмен с ГосИС Программист Платформа 1С v7.7 Платформа 1С v8.3 1С:Управление торговлей 10 Россия Абонемент ($m)

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

1 стартмани

15.03.2024    10408    139    kirlog    107    

28

Обмен с ГосИС Программист Платформа 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    5970    1    victuan    0    

17

WEB-интеграция Мастера заполнения Программист Пользователь Платформа 1С v7.7 1С:Торговля и склад 7.7 Россия Абонемент ($m)

Обработка для заполнения контрагента по ИНН с сайта DAData для Торговли.

2 стартмани

17.02.2022    4667    11    lazarsr    0    

1
Отзывы
15. buka99999 7 29.08.24 23:51 Сейчас в теме
(14) Ошибка найдена!
То, что я посоветовал сделать постом выше - дописать строчку:
глКарлик = ""; 

делать не нужно! Дабы не делать утечку по памяти, т.к. при данном подходе компонента весьма прожорлива.

Исправление делается так. Нужно найти в трех местах вот эти строчки:

глКарлик.УстановитьПараметр("HTTPHEADER","Content-Type: application/json;charset=utf-8");
глКарлик.УстановитьПараметр("HTTPHEADER","Accept-Charset: utf-8");
глКарлик.УстановитьПараметр("HTTPHEADER","X-API-KEY: "+СокрЛП(Токен)); 


и заменить их на:

ТЗ_Заголовок	= глКарлик.ПолучитьЗаголовки();
Если ТЗ_Заголовок.КоличествоСтрок()=0 Тогда
	глКарлик.УстановитьПараметр("HTTPHEADER","Content-Type: application/json;charset=utf-8");
	глКарлик.УстановитьПараметр("HTTPHEADER","Accept-Charset: utf-8");
	глКарлик.УстановитьПараметр("HTTPHEADER","X-API-KEY: "+СокрЛП(Токен)); 
КонецЕсли;



По сути, ошибка была связана с не совсем очевидным, для меня, нюансом работы с внешней компонентой Curl1C.dll
При установке параметров запроса методом: "глКарлик.УстановитьПараметр", все параметры каждый раз перезаписывались, кроме заголовочных параметров "HTTPHEADER", они как раз-то плодились.
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. 658078 13.08.24 09:28 Сейчас в теме
Добрый день.
Работа модулей актуальна на сегодняшний день?
2. 658078 13.08.24 09:31 Сейчас в теме
Как с вами связаться "напрямую"?
4. Bukaska 140 13.08.24 23:05 Сейчас в теме
(2) Через тикет поддержки
3. пользователь 13.08.24 19:24
Сообщение было скрыто модератором.
...
5. 658078 14.08.24 11:51 Сейчас в теме
Проверяю вашей обработкой:
1. 0104640033505996215EZmQfEQ"o_2W93F6IY
2. 0104640033505996215EZmQfEQ"o_2W93F6IY
Пишет: ТекстОшибки: КМ не прошел верификацию в стране эмитента/ошибка разбора КМ. cannot parse code. AiGroupNotSupportedException: AI group [F] is not supported
Сервера проверки заполнены.

Проверяю другим софтом:
КМ: 0104640033505996215EZmQfEQ"o_2W93F6IY
cis: 0104640033505996215EZmQfEQ"o_2W93F6IY
valid: -1
printView: 0104640033505996215EZmQfEQ"o_2W
gtin: 04640033505996
groupIds: 23
verified: -1
found: -1
realizable: -1
utilised: -1
isBlocked: 0
expireDate: 2025-04-17T00:00:00.000Z
productionDate: 2024-07-21T00:00:00.000Z
isOwner: 0
errorCode: 0
isTracking: 0
sold: 0
packageType: UNIT
parent: 046400335062765u0<qKk-8*OP2
producerInn: 2287003050
grayZone: 0
reqId: 253ff90a-8b15-44dd-bed7-e0890d57dc92
reqTimestamp: 1723625280554
Товар с кодом маркировки 0104640033505996215EZmQfEQ"o_2W93F6IY
Проверки пройдены успешно, товар продавать можно

Что не так?
6. victuan 4266 14.08.24 19:31 Сейчас в теме
(5) Если "другой софт" работает как нужно, то зачем использовать что-то иное? ;)
Из-за открытого кода и отсутствия лицензионных ограничений?
7. buka99999 7 15.08.24 13:03 Сейчас в теме
(5) Спасибо, что обратили на это внимание. Небольшая моя невнимательность. Данная ошибка связана с экранированием символов в строке JSON.
Ошибка убирается следующем образом, в "Глобальном модуле", в функции: "глВыполнитьОнлайнКонтрольМаркиЧестныйЗнак" сделать два исправления:
1) перед строкой с номером двести семьдесят один:
Марка = СтрЗаменить(Марка, Симв(29), "\u001d");
вставить строку:
Марка = JSONСтрока(СокрЛП(Марка));
2) в этой же функции найти строку:
ТелоЗапросаJSON = "{""codes"":["""+JSONСтрока(СокрЛП(Марка))+"""]"+ЧастьЗапросаИНН+ЧастьЗапросаФН+"}";
и заменить ее на:
ТелоЗапросаJSON = "{""codes"":["""+Марка+"""]"+ЧастьЗапросаИНН+ЧастьЗапросаФН+"}";

На днях выложу исправленный вариант.
8. 658078 27.08.24 19:15 Сейчас в теме
Добрый день.
Захожу в справочник "Сервера для онлайн проверки в ЦРПТ". Нажимаю "Запрос площадок CDN".
На текущий момент добавляется
Выбранная площадка: https://cdn04.crpt.ru
Доступная площадка: https://cdn01.crpt.ru
Доступная площадка: https://cdn02.crpt.ru
Доступная площадка: https://cdn03.crpt.ru
Доступная площадка: https://cdn04.crpt.ru
Доступная площадка: https://cdn05.crpt.ru
Доступная площадка: https://cdn06.crpt.ru
Доступная площадка: https://cdn07.crpt.ru
Доступная площадка: https://cdn08.crpt.ru
Доступная площадка: https://cdn10.crpt.ru
Количество доступных серверов: 9

Спустя секунд 5 нажимаю "Запрос площадок CDN".
Выбранная площадка: https://cdn03.crpt.ru
Доступная площадка: https://cdn01.crpt.ru
Доступная площадка: https://cdn02.crpt.ru
Доступная площадка: https://cdn03.crpt.ru
Количество доступных серверов: 3

Удаляю площадки, нажимаю "Запрос площадок CDN".
Текст ошибки: Не определен оптимальный сервер в ЦРПТ!
Количество доступных серверов: 0

Доступных серверов нет. Помогает только закрытие 1С.
Что не так?
10. buka99999 7 28.08.24 16:12 Сейчас в теме
(8) Это не только у Вас. Периодически наблюдаются проблемы с ЦРПТ. А последние два дня - это ужас. По всей видимости их сервера ддосят.
Возвращаемый список площадок придумывается не мною, а высылается в виде ответа, а что внутри ответа - девять площадок, три площадки,....... На это я повлиять не могу.
Постараться повлиять можно только в том случае, если вообще ответа не получаем. Можно изменить время ожидания ответа.
В глобальном модуле есть переменные под названием: ТаймаутОжидания. Они не глобальные, присутствуют в трех функциях:
глВыполнитьОнлайнКонтрольМаркиЧестныйЗнак
глПроверитьПлощадкуCDN
глЗапроситьДанныеПлощадокCDN
Можно увеличить или уменьшить время ожидания изменив эти переменные.
В боевых конфигурациях это время ожидания я вывел в константы.
11. 658078 29.08.24 06:49 Сейчас в теме
(10) Странно, что после всех описанных действий, закрыв и открыв 1с все площадки определяются в том же порядке (9-3-не определены). Думаю, что дело не в проблемах ЧЗ. Какой таймаут стоит у вас на текущий момент в боевой конфигурации?
12. 658078 29.08.24 07:34 Сейчас в теме
(10) Заполнить справочник площадками получается ТОЛЬКО после закрытия-открытия 1С. Это не проблема ЧЗ.
13. buka99999 7 29.08.24 12:40 Сейчас в теме
(12) Это Ваше желание сделать какие-либо выводы. Продолжать спорить в слепую по данному утверждению смысла не вижу.
Если у Вас есть минимальные знания программирования 1С, то посмотрите, что происходит по нажатию данной кнопки. Там не так много кода и сам код довольно линейный (без каких-то ветвистых замудренностей). И Вы увидите, что по нажатию данной кнопки происходит одно и тоже действие, что первый раз нажали, что десятый.
Если Вы покажите мне подтверждение своего утверждения: "...что вот смотрите, здесь логика не верна...." , т.е. окажется что я все же не прав, то без проблем я приложу все усилия, чтобы механизм работал правильно. И Вам вышлю исправленный вариант.
Пытаясь понять, что может быть не так (исходя из Вашего утверждения), уточните, каким способом отправки запросов Вы пользуетесь? Попробуйте все это делать через "Curl.exe" - это полностью независимый вариант запросов, рекомендуемый самим Честным знаком. И скажите, все тоже самое будет?
Это не сильно будет объективно, т.к. на ЦРПТ идут большие атаки, проблемы с проверкой РР есть и не в программах 1С, на Франтолах это тоже наблюдается.
14. buka99999 7 29.08.24 17:42 Сейчас в теме
(13) Отвечу сам себе. Решил все же прогнать все три варианта отправки запросов, чтобы попытаться увидеть описанную проблему. Так вот, описанная Вами проблема наблюдается только при работе с Curl1C.dll. В других двух вариантах, я как не пытался - данной проблемы не увидел. Хотя ранее я этого не видел ни в одном варианте. Судя по всему, проблема кроется в специфики самой внешней компоненты, которая мне, к сожалению, не известна. У меня на данный момент сделано так, что переменная отвечающая за работу с данной внешней компонентой, является глобальной и создается один раз. Если данную переменную создавать каждый раз (сделав ее локальной) или каждый раз прибивать и создавать заново или ее очищать внутренней ее командой (есть такая команда: глКарлик.ОчиститьПараметры(); ), то все начинает работать нормально, НО увеличивается оперативная память и какие либо попытки выгрузить данную компоненту или ее прибить не приводят к успеху. Данный вопрос получается, пока, за пределами моих возможностей. Сделал проверку на ста тысячах итераций - при этом съедается памяти на 370МБ, все запросы работают корректно, но пока не закроешь 1С память продолжит сжераться. )))

Выхода пока вижу два: либо пользоваться двумя другими вариантами - на них я не наблюдаю проблем, либо в функции глобального модуля:
глКарлик_Создать()
первой строчкой написать:
глКарлик = "";
и если оборот товара не миллион позиций в день или хватает оперативки, то проблем не будет.
И как дополнение можно сделать так, как я уже давно сделал на своих боевых базах, что после снятия Z-отчета автоматически идет закрытие 1С, ее архивация (для истории), далее запуск на реиндексацию (на случай если было аварийное закрытие) и далее она загружается для дальнейшей работы с проверкой на необходимость запуститься первого числа в монопольном режиме, открыть период и запуститься в обычном режиме. Все это реализовано батником, который сама же 1Ска запускает и небольшим кодом при старте 1Ски.
15. buka99999 7 29.08.24 23:51 Сейчас в теме
(14) Ошибка найдена!
То, что я посоветовал сделать постом выше - дописать строчку:
глКарлик = ""; 

делать не нужно! Дабы не делать утечку по памяти, т.к. при данном подходе компонента весьма прожорлива.

Исправление делается так. Нужно найти в трех местах вот эти строчки:

глКарлик.УстановитьПараметр("HTTPHEADER","Content-Type: application/json;charset=utf-8");
глКарлик.УстановитьПараметр("HTTPHEADER","Accept-Charset: utf-8");
глКарлик.УстановитьПараметр("HTTPHEADER","X-API-KEY: "+СокрЛП(Токен)); 


и заменить их на:

ТЗ_Заголовок	= глКарлик.ПолучитьЗаголовки();
Если ТЗ_Заголовок.КоличествоСтрок()=0 Тогда
	глКарлик.УстановитьПараметр("HTTPHEADER","Content-Type: application/json;charset=utf-8");
	глКарлик.УстановитьПараметр("HTTPHEADER","Accept-Charset: utf-8");
	глКарлик.УстановитьПараметр("HTTPHEADER","X-API-KEY: "+СокрЛП(Токен)); 
КонецЕсли;



По сути, ошибка была связана с не совсем очевидным, для меня, нюансом работы с внешней компонентой Curl1C.dll
При установке параметров запроса методом: "глКарлик.УстановитьПараметр", все параметры каждый раз перезаписывались, кроме заголовочных параметров "HTTPHEADER", они как раз-то плодились.
9. пользователь 27.08.24 19:20
Сообщение было скрыто модератором.
...
16. kadet 53 03.10.24 18:57 Сейчас в теме
А какой метод API ЧЗ обработка использует? Они показывает статус, владельца и т.д. марки?
17. buka99999 7 04.10.24 12:01 Сейчас в теме
(16) Метод API в ЧЗ для РР, на сколько мне известно один.
Описание метода доступно на сайте ЧЗ: https://честныйзнак.рф/business/projects/retail/checkout/regulations/
Моя обработка получает полный ответ, который может вернуть ЧЗ. Из этого ответа Вы можете вытащить любую информацию которая для Вас интересна.
18. ЗС1 30.10.24 00:49 Сейчас в теме
Подскажите, ввел токен в константы прямо, как он есть в лк ЧЗ, но при проверке кода маркировки получаю ответ
ТекстОшибки: Ошибка верификации крипто-подписи КМ в ГИС МТ (крипто-ключ не валиден). AI 91 for [0104600002322608215*ScqwDrbZzzz] is invalid (км тут изменил), но с разными кодами ошибка та же
Может я что-то не так сделал?
19. buka99999 7 31.10.24 12:26 Сейчас в теме
(18) Сходу не могу ничего сказать. Сегодня с утра не могли зайти на сайт честного знака. Но на данный момент все работает штатно. Токен копируется как есть, все верно! Если проблема сохраняется, то скиньте саму марку, сюда или мне в личку, проверю от себя, чтобы хоть как-то можно было понять что не так!
20. ЗС1 31.10.24 17:12 Сейчас в теме
(19) Оказалось, если передать код с криптохвостом, то все ок. Такая ошибка почему-то при указании короткого кода
21. buka99999 7 31.10.24 17:29 Сейчас в теме
(20) Не "почему-то", а все правильно, ошибка и должна быть если не передавать полную марку! )))
В разрешительном режиме марки необходимо всегда полные использовать.
22. egaleks 11.11.24 12:07 Сейчас в теме
Всем добрый день. Приобрел обработку. С водой работает без проблем. Спасибо автору. Есть вопрос по БАДам. При попытке проверки марки ЦРПТ возвращает ответ "Чужой товар". Подскажите, пожалуйста, что надо доработать. Спасибо.
23. buka99999 7 11.11.24 22:14 Сейчас в теме
(22) Для начала убедитесь, что проверяемый товар, действительно является вашим. Имеется введу по мнению "Честного знака"!
Не раз видел эту ошибку и когда разбирались (так как начинали утверждать что это не правда), оказывалось, что действительно по "Честному знаку" данный товар не принадлежит тому, кто его пытается продать.
В данной обработке, ответ который приходит от "Честного знака" я не придумываю, просто перевожу его в более удобоваримый вид. Можете посмотреть получаемый ответ, тег под названием "isOwner". Когда этот тег не равен "Истина", то моя обработка возвращает ответ: "Чужой товар"
24. egaleks 11.11.24 22:24 Сейчас в теме
Спасибо за ответ.От ЦРПТ приходит ответ isOvner false.. Но товар точно наш. При продаже без разрешительного режима продажа регистрируется. Фиксируется расход. Если я правильно понимаю , если Вода нормально проходит регистрацию, то и БАДы при этих настройках должны нормально регистрироваться?
25. buka99999 7 12.11.24 02:06 Сейчас в теме
(24) На сколько мне известно, разрешительный режим работает по одной схеме для всех участвующих в ней товарах. Разница только в доп. реквизитах (типа минимальная цена, срок годности,...). А вот когда честный знак будет заворачивать продажи с неверными реквизитами, вот на этот вопрос я не отвечу. Вы можете отключить контроль "Чужого товара" и продажа пройдет, но на сколько это будет правильно (для честного знака) ??????
Не буду далее с Вами спорить, но дыма без огня не бывает, не просто так приходит ответ о том, что товар не Ваш (ну либо что-то в системе честный знак по данной группе товара не так и поэтому приходит такой ответ))) ).
26. egaleks 12.11.24 13:33 Сейчас в теме
Всем добрый день.
Возможно кому то еще будет полезна информация от ЦРПТ про ситуацию, когда приходит ответ "isOwner" false.
"...В ходе проведенного анализа было выявлено, что КИ 0104601669008695215E+8QddCwr(Ek был передан в адрес организации Вашей организации в УПД в объемно-сортовом учете.

Проверка принадлежности маркированных товаров будет отключена на период отсутствия прослеживаемости товара, в связи с этим при передаче сведений о выводе из оборота товара посредством применения контрольно-кассовой техники (ККТ) при сканировании могут возникать ошибки, сообщающие о том, что продукция не принадлежит участнику. В таком случае участник может отключить проверку на собственника на используемом устройстве.

По вопросу настройки стороннего оборудования рекомендуем обратиться к производителю, сервисной организации либо сотруднику, осуществляющему обслуживание Вашего устройства. В компетенции технической поддержки системы маркировки «Честный знак» не входит консультация, настройка и донастройка продуктов сторонних организаций.

Все инструкции по работе в системе, в том числе: Вывод из оборота, размещены на сайте честныйзнак.рф и в разделе «Помощь» личного кабинета системы маркировки. "
Всем добра, и еще раз благодарность автору за работу и отзывчивость! :)
27. omega757 12.11.24 19:58 Сейчас в теме
Подскажите все марки с ошибкой: ТекстОшибки: КМ не прошел верификацию в стране эмитента/ошибка разбора КМ. cannot parse code. AiGroupNotSupportedException: AI group [u] is not supported

Коды:

0104650339131768215,Qvprhsrz2IE9100C292uZlHznLWC8Qfl8uyliEtTbc51x+yxTEA/PfBw3EyE­1G5iOP9HaNitx9lWtRjjUjnMmqB6W3coEfD2S48ULlZFg==

0104640216949562215tU4OgiJp-Id99100C292a14icSH6/GAxZhgTOxdliL1eN8FaUf1zZjxOWpKkIj0dhx62X­WoTwPcn7EjoUBvYFiO0MfEj4sx4iNiu3muhLQ==

0104640216936166215ITGIJJH)Hb2Q9180C192AL2o6Bw9Zyr8DTC5SmxdB2JhaYjgpotVB5keCU/pHvGQsT3O­f5rAH/VRYiZC0DubQpUJTLuigA3FMEWBDJUdgg==
28. buka99999 7 12.11.24 23:21 Сейчас в теме
(27) Добрый вечер.
Здесь два момента, которые я могу предположить:
1) Данная ошибка говорит о том, что не удалось разложить марку на составляющие. Скорей всего Вы отправляете марку без спец символов <GS>. У моей обработки задача произвести проверку марки через РР, а не проверить корректность самого штрихкода.
2) Но даже если проставить недостающие символы <GS>, то получаю другую ошибку, которая говорит о том, что не корректный крипто хвост. Вы к сожалению не указали, что это за марки, но они очень похожи на обувные. Если это так, то во всех трех кодах у вас есть ошибка связанная с длинной марки. Длина кода обувной марки (включая символ <GS>) должна быть 129 символов, а у Вас 130 символов во всех трех марках. "Код проверки" - т.е. крипто хвост, у обувной марки должен быть 88 символов, а у Вас 89.
Думаю стоит как следует проверить марки
Прикрепленные файлы:
30. victuan 4266 13.11.24 19:09 Сейчас в теме
(27)
0104650339131768215,Qvprhsrz2IE9100C292uZlHznLWC8Qfl8uyliEtTbc51x+yxTEA/PfBw3EyE­1G5iOP9HaNitx9lWtRjjUjnMmqB6W3coEfD2S48ULlZFg==

0104640216949562215tU4OgiJp-Id99100C292a14icSH6/GAxZhgTOxdliL1eN8FaUf1zZjxOWpKkIj0dhx62X­­WoTwPcn7EjoUBvYFiO0MfEj4sx4iNiu3muhLQ==

0104640216936166215ITGIJJH)Hb2Q9180C192AL2o6Bw9Zyr8DTC5SmxdB2JhaYjgpotVB5keCU/pHvGQsT3O­­f5rAH/VRYiZC0DubQpUJTLuigA3FMEWBDJUdgg==

Все эти коды содержат в крипточасти недопустимые символы SHY, это символ с кодом 173 (выглядит как "-"). Если этот символ удалить, то эти КМы радостно и успешно пройдут проверку по РР.
Видимо, редактор так вставил перенос строки для длинных строк. Аккуратнее нужно со всякими редакторами.
Для проверки можно еще приложить фото марки в хорошем качестве. Тогда точнее станет ясен "виновник".
29. Djelf 254 13.11.24 18:29 Сейчас в теме
Дублирование заголовков это нормально, это изначально заложено в libcurl.
Там дурная коллекция, добавить можно, а изменить или удалить выборочно нельзя.
И это подтветверждается примерами на сайте curl.
Пересоздание объекта это очень быстро, подтверждено тестами.
Не надо его его использовать таким образом...
Оставьте свое сообщение