Перенос видов оплат из ОРП УНФ 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 час.

fixin

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

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

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

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