Перенос видов оплат из ОРП УНФ 3.0 в БП 3.0
Я уже писал ранее про обмен из УНФ 3.0 в БП3 по поступлениям из банка по эквайрингу.
Клиент продолжил и дал новую задачу на эту тему. В УНФ в ОРП в табличной части оплат указаны терминалы. Нужно чтобы эти терминалы соотносились с видами оплат в БП3. Создавать виды оплат при обмене не надо, нужно только поставлять существующие.
Создал в БП у видов оплаты строковое поле «Терминал УНФ»:
Передаю виды оплат документа ОРП в табличной части в виде массива структур расширением модуля МенеджерОбменаЧерезУниверсальныйФормат13:
&После("ПКО_Документ_ОтчетОРозничныхПродажах_Отправка_ПриОтправкеДанных") Процедура доуф_ПКО_Документ_ОтчетОРозничныхПродажах_Отправка_ПриОтправкеДанных(ДанныеИБ, ДанныеXDTO, КомпонентыОбмена, СтекВыгрузки) М = Новый Массив(); Для Каждого СтрокаОплаты ИЗ ДанныеИБ.Ссылка.БезналичнаяОплата Цикл С = Новый Структура(); С.Вставить("НомерСтроки", СтрокаОплаты.НомерСтроки); ИдентификаторВидаОплаты = ПолучитьИдентификаторЗначенияПеречисления(СтрокаОплаты.ВидОплаты); С.Вставить("ВидОплаты", ИдентификаторВидаОплаты); С.Вставить("ЭквайринговыйТерминал", СокрЛП(СтрокаОплаты.ЭквайринговыйТерминал)); М.Добавить(С); КонецЦикла; //Передаем виды оплат массивом доуф_ДобавитьДополнительныеДанные(ДанныеXDTO, "ВидыОплат", М); КонецПроцедуры Функция ПолучитьИдентификаторЗначенияПеречисления(Значение) Экспорт Если НЕ ЗначениеЗаполнено(Значение) Тогда Возврат ""; КонецЕсли; МД = Значение.Метаданные(); Возврат МД.ЗначенияПеречисления.Получить(Перечисления[МД.Имя].Индекс(Значение)).Имя; КонецФункции
Массив нормально сериализируется в файле обмена:
Далее нужно только прочитать эти данные в БП в том же модуле обмена:
&Вместо("ПКО_Документ_ОтчетОРозничныхПродажах_ПриКонвертацииДанныхXDTO") Процедура доуф_ПКО_Документ_ОтчетОРозничныхПродажах_ПриКонвертацииДанныхXDTO(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена) ПродолжитьВызов(ДанныеXDTO, ПолученныеДанные, КомпонентыОбмена); //Загружаем виды оплат Если ДанныеXDTO.Свойство("AdditionalInfo") И ТипЗнч(ДанныеXDTO.AdditionalInfo)=Тип("Структура") Тогда ДопДанные = ДанныеXDTO.AdditionalInfo; //Получаем виды оплат Если ДопДанные.Свойство("ВидыОплат") И ПолученныеДанные.ДополнительныеСвойства.Свойство("Оплата") Тогда //1С размещает в доп.свойствах загруженные оплаты ТаблицаОплат = ПолученныеДанные.ДополнительныеСвойства.Оплата; Для Каждого СтрокаОплатыМассива ИЗ ДопДанные.ВидыОплат Цикл НомерСтроки = СтрокаОплатыМассива.НомерСтроки; Если НомерСтроки > ТаблицаОплат.Количество() Тогда Продолжить; КонецЕсли; //Ищем и заполняем вид оплаты ТекЭквайринговыйТерминал = СокрЛП(СтрокаОплатыМассива.ЭквайринговыйТерминал); Если СтрокаОплатыМассива.ВидОплаты = "БанковскаяКарта" И ТекЭквайринговыйТерминал <> "" Тогда ИскВидОплаты = доуф_НайтиВидОплаты(ТекЭквайринговыйТерминал); Если ЗначениеЗаполнено(ИскВидОплаты) Тогда ТекСтруктура = ТаблицаОплат[НомерСтроки - 1]; ТекСтруктура.Вставить("ВидОплатыПоУНФ", ИскВидОплаты); КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры Функция доуф_НайтиВидОплаты(ТерминалУНФ) Экспорт З = Новый Запрос( "ВЫБРАТЬ | Т.Ссылка КАК Ссылка |ИЗ | Справочник.ВидыОплатОрганизаций КАК Т |ГДЕ | Т.доуф_ТерминалУНФ = &ТерминалУНФ | И НЕ Т.ПометкаУдаления"); З.УстановитьПараметр("ТерминалУНФ", ТерминалУНФ); Выборка = З.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.Ссылка; КонецЕсли; КонецФункции &После("УстановитьВидОплатыВТабличнойЧасти") Процедура доуф_УстановитьВидОплатыВТабличнойЧасти(КомпонентыОбмена, ПолученныеДанные, ИмяТабличнойЧасти) Если ИмяТабличнойЧасти = "Оплата" Тогда Для Каждого СтрокаТЧ ИЗ ПолученныеДанные[ИмяТабличнойЧасти] Цикл СтрокаТабличнойЧасти = ПолученныеДанные.ДополнительныеСвойства[ИмяТабличнойЧасти]; СтрокаДопСвойств = СтрокаТабличнойЧасти[СтрокаТЧ.НомерСтроки - 1]; Если СтрокаДопСвойств.Свойство("ВидОплатыПоУНФ") Тогда СтрокаТЧ.ВидОплаты = СтрокаДопСвойств.ВидОплатыПоУНФ; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры
Среда: УНФ 3.0.9.163, БП 3.0.161.22 Объем: 4 час.
Свежие комментарии