Проверка статуса и владельца кодов маркировки

Клиенту понадобилось найти владельца марки. В личном кабинете ЧЗ он этой возможности не нашел.

Решил попробовать посмотреть через готовую обработку с инфостарта.

Но она оказалась очень уж сырым (или устаревшим) полуфабрикатом. Диагностики ошибок никакой, пришлось разбираться отладчиком.

Сразу пришлось отключить все обращения к торговому оборудованию, обработка была написана под УТ изначально.

На компьютере пользователя должен быть установлен сертификат организации (ЭЦП). Как его установить и проверить, можно посмотреть тут.

Однако 1С не могла получить ключ сеанса.

Подсказку, как получать ключи, нашел тут.

По сути, нужно смотреть, как получаются ключи сеанса при сканировании марок в расходной накладной.

Ключи сеанса можно использовать даже при запросе с сервера. Поэтому не страшно, что код обработки выполняется на сервере.

Добавил вот такие строки и с ключом все заработало:

&НаСервере
Процедура ПроверитьКодыМаркировкиЧЗНаСервере()   
	
	ТребуетсяОбновлениеКлючаСессииРозница = ИнтерфейсАвторизацииИСМПВызовСервера.ТребуетсяОбновлениеКлючаСессииРозница(
	ИнтерфейсИСМПОбщегоНазначенияКлиентСервер.ПараметрыЗапросаКлючаСессииИСМПРозница(Организация));
	
	ТребуетсяОбновлениеКлючаСессии = ИнтерфейсАвторизацииИСМПВызовСервера.ТребуетсяОбновлениеКлючаСессии(
	ИнтерфейсИСМПОбщегоНазначенияКлиентСервер.ПараметрыЗапросаКлючаСессии(Организация));
	....
КонецПроцедуры

Немного меня подвели упаковки. Нужно при запросе в параметрах устанавливать код упаковки «Потребительский», я передавал пустую строку и выходила ошибка типового кода в процедуре ЗапроситьСтатусыКодовМаркировкиПакетно:

Также у клиента было устаревшее расширение, тоже только по стеку понял, что оно чудит:

Ответ не стал укладывать в таблицу, просто выводил как JSON. Названия некоторых методов тоже изменились (смотрите комментарии).

	Для Каждого ТекСтрока ИЗ ТабКодыМаркировки Цикл
		ТекСтрока.Штрихкод = ТекСтрока.КодМаркировки;
		Сч = Сч + 1;
		МассивСтрок.Добавить(ТекСтрока);
		Если ЦЕЛ(Сч/1000) = Сч/1000 ИЛИ Сч = КоличествоСтрок Тогда
			ТекСоответствиеСтатусыКодовМаркировки = "";
			Попытка 	
				//Результат = ИнтерфейсИСМП.СтатусыКодовМаркировкиПакетно(МассивСтрок, СтатусыКодовМаркировкиКеш, Организация);
				Результат = ИнтерфейсИСМП.СтатусыКодовМаркировки(МассивСтрок, Организация);
				
				Если Результат.РезультатОтправкиЗапроса = Неопределено Тогда
					Сообщить("Получен пустой результат отправки запроса, возможно не назначены ключи сессии ИСМП!");
					Прервать;
				КонецЕсли;
				//ТекСоответствиеСтатусыКодовМаркировки = ИнтерфейсМОТПСлужебный.ТекстJSONВОбъект(Результат.РезультатОтправкиЗапроса.ТекстВходящегоСообщенияJSON, Истина);
				json = Результат.РезультатОтправкиЗапроса.ТекстВходящегоСообщенияJSON;             
				сообщить(json);
				Возврат; //Временно
				ТекСоответствиеСтатусыКодовМаркировки = ОбщегоНазначенияИСМП.ТекстJSONВОбъект(json, Истина);
				
			Исключение
				Сообщить("Не удалось получить статусы кодов маркировки. Выберите другую организацию: " + ОписаниеОшибки() + Символы.ПС + " Текст: " + ТекСоответствиеСтатусыКодовМаркировки);
				Возврат;
			КонецПопытки;
		   МассивСтрок = Новый Массив;
		   Для Каждого Элемент ИЗ ТекСоответствиеСтатусыКодовМаркировки Цикл
			   для Каждого эл2 ИЗ Элемент Цикл    //Осипов - там возвращается еще одо соответсвтие
			     СоответствиеСтатусыКодовМаркировки.Вставить(эл2.Ключ, эл2.Значение);
				КонецЦикла;
		   КонецЦикла;	   
		КонецЕсли;	
	КонецЦикла;

Среда: БП 3.0.155.23. Объем 1 час.

fixin

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

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

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

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