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

24.04.24

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

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

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

Наименование Файл Версия Размер
Архив с данными 002
.zip 3,47Mb
7
.zip 002 3,47Mb 7 Скачать

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

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



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

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

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

См. также

АИС: Онлайн-кассы для 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    464265    4293    3461    

2434

КБ99: ГИС Меркурий + 1С 7.7 / 8.2 / 8.3 = Дружба

Оптовая торговля Производство готовой продукции (работ, услуг) Логистика, склад и ТМЦ Обмен с ГосИС Оперативный учет 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    51893    100    44    

35

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

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

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

5040 руб.

03.07.2018    37002    79    27    

60

АИС: Обмен с ФГИС Меркурий (Ветис.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    53122    155    105    

68

АИС: Обмен с ЕГАИС 4.0 для конфигураций 1С 7.7

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

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

3000 руб.

13.12.2015    135555    159    400    

146

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

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

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

6000 руб.

13.11.2015    122685    170    2529    

232

HTTP сервер, HTTP асинхронный клиент, клиент ГИС МТ "Честный знак": внешние компоненты для 1С 7.7

Разработка внешних компонент 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    7941    19    14    

31

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

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

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

1 стартмани

15.03.2024    2521    34    kirlog    70    

16
Оставьте свое сообщение