Гарантированный прием заказов с сайта. Розница 2.3

У клиента возникла проблема, решить которую проще было бы на стороне сайта, но, увы, пришлось решать на стороне 1С.

Когда 1С забирает заказы с сайта, вызывается HTTP-запрос:
exchange1c?type=sale&mode=query&sessid=

Когда 1С подтверждает, что заказы с сайта обработаны, вызывается HTTP-запрос:
exchange1c?type=sale&mode=success&sessid=

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

Исправления вносятся в модуль ОбменССайтом:

&Вместо("ПолучитьДанныеССервера")
Функция дор_ПолучитьДанныеССервера(Соединение, ОписаниеОшибки, ПараметрыЗапроса, Знач Заголовки)
	
	УстановитьПривилегированныйРежим(Истина); //Чтобы не было проблем с правами доступа
	
	//Если это запрос с сайта, проверяем, а был ли запрос ранее
	Если  ТипЗнч(ПараметрыЗапроса) = Тип("Строка") Тогда
		
		//Запрос на заказы
		Если ВРЕГ(СокрЛП(ПараметрыЗапроса)) = ВРЕГ("exchange1c?type=sale&mode=query&sessid=") Тогда
			ПрошлыйЗапрос = Константы.дор_ПоследнийЗапросПоЗаказам.Получить();
			Если ПрошлыйЗапрос <> "" Тогда
				Результат = ПрошлыйЗапрос;
				Сообщить("Запрос на сайт не был осуществлен, т.к. есть сохраненный непустой запрос в константе ""Последний запрос по заказам (Доработки)""");
			Иначе
				Результат = ПродолжитьВызов(Соединение, ОписаниеОшибки, ПараметрыЗапроса, Заголовки);
				//Результат - это просто строка вида:
				// 
				//<КоммерческаяИнформация ВерсияСхемы="2.04" ...
				ТекущийЗапрос = СокрЛП(Результат);
				Константы.дор_ПоследнийЗапросПоЗаказам.Установить(ТекущийЗапрос);
			КонецЕсли;
			
			Возврат Результат; //Стандартно не работаем, запрос не вызываем
			
		КонецЕсли;
		
		//Подтверждение успешной выгрузки заказов
		Если ВРЕГ(СокрЛП(ПараметрыЗапроса)) = ВРЕГ("exchange1c?type=sale&mode=success&sessid=") Тогда
			//Сбрасываем последний запрос
			Константы.дор_ПоследнийЗапросПоЗаказам.Установить("");
		КонецЕсли;
		
	КонецЕсли;
	
	Результат = ПродолжитьВызов(Соединение, ОписаниеОшибки, ПараметрыЗапроса, Заголовки);
	
	Возврат Результат;
	
КонецФункции

О том, что запрос не будет делаться с сайта, пользователю выдается диагностическое сообщение вида:

Среда: Розница 2.3.10.61. Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *