Замена курса валют при выгрузке через обмен в универсальном формате
Требовалось поменять при выгрузке в бухгалтерию Беларуси курс с курса российского рубля на курс белорусского рубля.
Сначала хотел поменять правила конвертации объекта в модуле МенеджерОбменаЧерезУниверсальныйФормат:
&После("ЗаполнитьПравилаКонвертацииОбъектов") Процедура дор_ЗаполнитьПравилаКонвертацииОбъектов(НаправлениеОбмена, ПравилаКонвертации) //2024-01-10 Осипов - меняем при отправке курс Если НаправлениеОбмена = "Отправка" Тогда Для Каждого ПравилоКонвертации ИЗ ПравилаКонвертации Цикл МД = ПравилоКонвертации.ОбъектДанных; Если НЕ дор_Сервер.ЕстьКурсРБВМетаданных(МД) Тогда Продолжить; КонецЕсли; СвойстваШапки = ПравилоКонвертации.Свойства; Для Каждого Строка ИЗ СвойстваШапки Цикл Если Строка.СвойствоКонфигурации = "Курс" Тогда Строка.СвойствоКонфигурации = "дор_КурсРБ"; КонецЕсли; Если Строка.СвойствоКонфигурации = "Кратность" Тогда Строка.СвойствоКонфигурации = "дор_КратностьРБ"; КонецЕсли; //ДобавитьПКС(РодительПКС, СвойствоКонфигурации, СвойствоФормата, ИспользуетсяАлгоритмКонвертации = //ДобавитьПКС(СвойстваШапки, "Курс", "КурсДокумента"); //НоваяСтрока = РодительПКС.Добавить(); //НоваяСтрока.СвойствоКонфигурации = СвойствоКонфигурации; //НоваяСтрока.СвойствоФормата = СвойствоФормата; //НоваяСтрока.ИспользуетсяАлгоритмКонвертации = ?(ИспользуетсяАлгоритмКонвертации = 0, Ложь, Истина); //НоваяСтрока.ПравилоКонвертацииСвойства = ПравилоКонвертацииСвойства; //НоваяСтрока.ПространствоИмен = ПространствоИмен; КонецЦикла; КонецЦикла; КонецЕсли; КонецПроцедуры
Но это не гибко, т.к. работает для всех узлов обмена и если курс не заполнен, выгрузит ноль.
Поэтому доработал формирование представления ДанныхXDTO из источника в модуле ОбменДаннымиXDTOСервер:
&Вместо("ДанныеXDTOИзДанныхИБ") Функция дор_ДанныеXDTOИзДанныхИБ(КомпонентыОбмена, Источник, Знач ПравилоКонвертации, СтекВыгрузки) ЭтоОбменПоОрганизацииЧерезУниверсальныйФормат = КомпонентыОбмена.Свойство("УзелКорреспондента") И ТипЗнч(КомпонентыОбмена.УзелКорреспондента) = Тип("ПланОбменаСсылка.СинхронизацияДанныхЧерезУниверсальныйФормат") И КомпонентыОбмена.УзелКорреспондента.ИспользоватьОтборПоОрганизациям; //Старый метод Результат = ПродолжитьВызов(КомпонентыОбмена, Источник, ПравилоКонвертации, СтекВыгрузки); Если ЭтоОбменПоОрганизацииЧерезУниверсальныйФормат Тогда Если Найти(ВРЕГ(КомпонентыОбмена.УзелКорреспондента), "БЕЛАРУС") <> 0 Тогда МД = Метаданные.НайтиПоТипу(ТипЗнч(Источник)); //Подменяем курс и кратность Если дор_Сервер.ЕстьКурсРБВМетаданных(МД) Тогда дор_ЗаменититьСвойство(Результат, Источник, "КурсВзаиморасчетов", "дор_КурсРБ"); дор_ЗаменититьСвойство(Результат, Источник, "КратностьВзаиморасчетов", "дор_КратностьРБ"); КонецЕсли; КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции Процедура дор_ЗаменититьСвойство(Результат, Источник, СвойствоРезультат, СвойствоИсточник) Экспорт Если Результат.Свойство(СвойствоРезультат) Тогда НовоеЗначение = Источник[СвойствоИсточник]; Если ЗначениеЗаполнено(НовоеЗначение) Тогда Результат[СвойствоРезультат] = НовоеЗначение; КонецЕсли; КонецЕсли; КонецПроцедуры
При этом выгружаю только для определенного узла обмена (определяю его по наименованию, позже добавлю галочку). И если курс не заполнен, оставляю исходный курс.
Важно заметить, что в структуре Результат курс называется уже КурсВзаиморасчетов, как это принято в в формате EnterpriseData:
Среда: 3.0.4.88. Объем: 1 час.
Свежие комментарии