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