При обмене с ккм офлайн товары выгружаются частично. Да, в настройках стоит выгрузка только с остатками, но даже при наличии остатков товары выгружаются не все. Конфигурация: Розница, редакция 3.0 (3.0.9.105)
Прохождение по отладчику привело к следующим результатм:
Изначально все происходит в процедуре из общего модуля МенеджерОфлайнОборудованияКлиент:
Процедура НачатьВыгрузкуДанныхНаККМ(ИдентификаторУстройства, УникальныйИдентификатор, ОповещениеПриЗавершении, ОтображатьСообщения = Истина) Экспорт // замер производительности КлючеваяОперация = "ОбщийМодуль.МенеджерОфлайнОборудованияКлиент.ВыгрузкаДанныхНаККМ"; ОбщегоНазначенияБПОКлиент.ЗамерВремениБПО(КлючеваяОперация, ОповещениеПриЗавершении); НаборВыгружаемыхДанных = Новый Структура; НаборВыгружаемыхДанных.Вставить("Настройки", Истина); НаборВыгружаемыхДанных.Вставить("ПрайсЛист", Истина); НаборВыгружаемыхДанных.Вставить("Заказы", Истина); НаборВыгружаемыхДанных.Вставить("ПолныйПрайсЛист", Ложь); Контекст = Новый Структура; Контекст.Вставить("СледующееОповещение" , ОповещениеПриЗавершении); Контекст.Вставить("УникальныйИдентификатор" , УникальныйИдентификатор); Контекст.Вставить("ОтображатьСообщения" , ОтображатьСообщения); Контекст.Вставить("НаборВыгружаемыхДанных" , НаборВыгружаемыхДанных); Контекст.Вставить("Команда", "ВыгрузитьДанные"); НачатьВыгрузкуДанныхНаККМПроверкаПодключенияРасширения(ИдентификаторУстройства, Контекст); КонецПроцедуры
Уже здесь настораживает параметр ПолныйПрайсЛист, который равен Ложь. И дальнейшие исследования показали что именно в этом и кроется секрет.
Далее в модуле МенеджерОфлайнОборудованияВызовСервера можно встретить такое условие:
Если НаборВыгружаемыхДанных.ПрайсЛист Тогда ПрайсЛист = МенеджерОфлайнОборудованияКлиентСервер.ПрайсЛистККМ(); ПолнаяВыгрузкаПрайсЛиста = Ложь; МенеджерОфлайнОборудованияПереопределяемый.ПриВыгрузкеПрайсЛиста(ОфлайнОборудование, ПрайсЛист, ПолнаяВыгрузкаПрайсЛиста); ПрайсЛист.Вставить("ПолнаяВыгрузка", Ложь); ИначеЕсли НаборВыгружаемыхДанных.ПолныйПрайсЛист Тогда ПрайсЛист = МенеджерОфлайнОборудованияКлиентСервер.ПрайсЛистККМ(); ПолнаяВыгрузкаПрайсЛиста = Истина; МенеджерОфлайнОборудованияПереопределяемый.ПриВыгрузкеПрайсЛиста(ОфлайнОборудование, ПрайсЛист, ПолнаяВыгрузкаПрайсЛиста); ПрайсЛист.Вставить("ПолнаяВыгрузка", Истина); КонецЕсли;
Наш параметр преобразуется в параметр ПолнаяВыгрузка со значением Ложь.
Ну и наконец в процедуре ПодключаемоеОборудованиеOfflineВызовСервера.ПолучитьТоварыКВыгрузкеККМ встречается запрос, в котором происходит дополнительная фильтрация(при условии что ПолнаяВыгрузка=Ложь) выгружаемых данных по вот такому подзапросу:
ВЫБРАТЬ ТоварыНаСкладахИзменения.Регистратор КАК Регистратор ПОМЕСТИТЬ РегистраторыТоварыНаСкладах ИЗ РегистрНакопления.Запасы.Изменения КАК ТоварыНаСкладахИзменения ГДЕ ТоварыНаСкладахИзменения.Узел = &Узел И &РегистрироватьПриИзмененииОстатка ;
Т.е. выгружаются не все остатки по регистру накопления ТоварыНаСкладах, а только те, по которым зарегистрированы изменения на узле из плана обмена ОбменСПодключаемымОборудованиемOffline.
Почему при выгрузке в процедуре НачатьВыгрузкуДанныхНаККМ значение ПолныйПрайсЛист устанавливается в Ложь, а ПрайсЛист в значение Истина остается загадкой. Никаких условий при этом нет, чтобы можно было как-то повлиять на процесс выгрузки.
Для себя сделал расширение, чтобы можно было выгружать либо полностью, либо типовым методом.
Отправить комментарий