|
Правила обмена УТ 10.3 - БП 3.0 | ☑ | ||
---|---|---|---|---|
0
Rollam
20.08.15
✎
13:08
|
Столкнулся с проблемой в правилах обмена УТ 10.3 - БП 3.0.
Проблема возникает при загрузке табличной части "Оплата" документа "Отчет о розничных продажах". Версия УТ "10.3.28.1", БП "3.0.40.24". В последующих версиях различий с указанными для этого документа объектов не нашел. Суть в том, что в источнике имеются две табличные части "ОплатаПлатежнымиКартами" и "ОплатаБанковскимиКредитами". ТЧ "ОплатаБанковскимиКредитами" имеет реквизиты "ВидОплаты", "Сумма", "БанкКредитор" (Контрагент) и "ДоговорВзаиморасчетовБанкаКредитора" (Договор контрагента). Следующая ТЧ "ОплатаПлатежнымиКартами" имеет реквизиты "ВидОплаты" и "Сумма". Плюс, имеются два реквизита документа: "Эквайрер" (Контрагент) и "ДоговорВзаиморасчетовЭквайрера" (Договор контрагента). В приемнике имеется одна ТЧ "Оплата" с реквизитами: "ВидОплаты", "СуммаОплаты", "Контрагент" и "ДоговорКонтрагента". Задача состоит в том, что данные этиз двух ТЧ необходимо перегружать в ТЧ Приемника "Оплата". Сразу скажу, что я пытался скопировать правила из типового обмена. Ничего не получилось. Я пытался решить задачу двумя способами: Первый. Создал два правила для каждой ТЧ источника, указав для обоих одну ТЧ приемника. В каждой в модуле "Перед обработкой" добавил "НеОчищать = ИСТИНА;". Далее для правила "ОплатаБанковскимиКредитами - Оплата" указал соответствия реквизитов и правила ПКО. Для правила "ОплатаПлатежнымиКартами - Оплата" указал соответствия и ПКО для реквизитов "ВидОплаты" и "Сумма". Для реквизитов приемника "Контрагент" и "ДоговорКонтрагента" соответствующих данных в ТЧ источника нет, ибо эти данные лежат в реквизитах самого источника. Создаю правила без источника, но с приемником. В обработке "Перед выгрузкой" пишу: "Значение = Источник.Эквайрер;", и "Значение = Источник.ДоговорВзаиморасчетовЭквайрера;". Подставляю соответствующие ПКО. Второй способ: Создаю правило без источника, но с приемником в виде ТЧ "Оплата". В обработке "Перед обработкой" пишу: ///////////////////////////////////////////// КоллекцияОбъектов = Новый ТаблицаЗначений; КоллекцияОбъектов.Колонки.Добавить("ВидОплаты"); КоллекцияОбъектов.Колонки.Добавить("Контрагент"); КоллекцияОбъектов.Колонки.Добавить("ДоговорКонтрагента"); КоллекцияОбъектов.Колонки.Добавить("СуммаОплаты"); Для Каждого СтрокаПлатежа Из Источник.ОплатаПлатежнымиКартами Цикл СтрокаИтоговогоТаблицы = КоллекцияОбъектов.Добавить(); СтрокаИтоговогоТаблицы.ВидОплаты = СтрокаПлатежа.ВидОплаты; СтрокаИтоговогоТаблицы.СуммаОплаты = СтрокаПлатежа.Сумма; СтрокаИтоговогоТаблицы.Контрагент = Источник.Эквайрер; СтрокаИтоговогоТаблицы.ДоговорКонтрагента = Источник.ДоговорВзаиморасчетовЭквайрера; КонецЦикла; Для Каждого СтрокаПлатежа Из Источник.ОплатаБанковскимиКредитами Цикл СтрокаИтоговогоТаблицы = КоллекцияОбъектов.Добавить(); СтрокаИтоговогоТаблицы.ВидОплаты = СтрокаПлатежа.ВидОплаты; СтрокаИтоговогоТаблицы.СуммаОплаты = СтрокаПлатежа.Сумма; СтрокаИтоговогоТаблицы.Контрагент = СтрокаПлатежа.БанкКредитор; СтрокаИтоговогоТаблицы.ДоговорКонтрагента = СтрокаПлатежа.ДоговорВзаиморасчетовБанкаКредитора; КонецЦикла; ВходящиеДанные = Новый Структура("Оплата"); ВходящиеДанные.Оплата = Новый ТаблицаЗначений; ВходящиеДанные.Оплата.Колонки.Добавить("ВидОплаты"); ВходящиеДанные.Оплата.Колонки.Добавить("СуммаОплаты"); ВходящиеДанные.Оплата.Колонки.Добавить("Контрагент"); ВходящиеДанные.Оплата.Колонки.Добавить("ДоговорКонтрагента"); Для каждого стр из КоллекцияОбъектов Цикл НовСтрока = ВходящиеДанные.Оплата.Добавить(); НовСтрока.ВидОплаты = стр.ВидОплаты; НовСтрока.Контрагент = стр.Контрагент; НовСтрока.ДоговорКонтрагента = стр.ДоговорКонтрагента; НовСтрока.СуммаОплаты = стр.СуммаОплаты; КонецЦикла; //////////////////////////////////////////// Затем внутри группы правила добавляю реквизиты ТЧ приемника, а на самой группе включаю флаг "Получить из входящих данных". В обоих случаях происходит следующее: Выгрузка проходит без проблем. В xml-файле выгрузки можно найти данные из ТЧ источника "ОплатаПлатежнымиКартами", но при загрузке (опять без каких-либо ошибок), в строках ТЧ приемника "Оплата" не заполняются поля "Контрагент" и "ДоговорКонтрагента" тех строк ТЧ, которые имеют отношение к оплатам по карте (оплаты банковскими кредитами заполняются без проблем), хотя сами элементы справочников перегрузились. Я перепробовал уже все, что знал. Мне нужна ваша мудрость) Заранее спасибо. |
|||
1
Rollam
20.08.15
✎
13:31
|
Надо же. Прочитал свою же тему и пришла в голову мысль.
Верно говорят, что правильно заданный вопрос - уже практически готовый ответ. Оказалось, в обработке самого объекта обмена (документа) в модуле "После загрузки" есть такой код: Для каждого СтрокаТЧ Из Объект.Оплата Цикл Если ЗначениеЗаполнено(СтрокаТЧ.ВидОплаты) Тогда ЗаполнитьЗначенияСвойств(СтрокаТЧ, ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаТЧ.ВидОплаты,"Контрагент,ДоговорКонтрагента,СчетУчетаРасчетов")); СтрокаТЧ.СчетУчетаРасчетов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаТЧ.ВидОплаты, "СчетУчетаРасчетов").СчетУчетаРасчетов; Иначе СчетаУчета = БухгалтерскийУчетПереопределяемый.ПолучитьСчетаРасчетовСКонтрагентом( Объект.Организация, СтрокаТЧ.Контрагент, СтрокаТЧ.ДоговорКонтрагента); СтрокаТЧ.СчетУчетаРасчетов = СчетаУчета.СчетРасчетов; КонецЕсли; КонецЦикла; В данном случае, при вызове "ЗаполнитьЗначенияСвойств", почему-то очищаются "Контрагент" и "ДоговорКонтрагента" в записях ТЧ, связванных с эквайрингом. |
|||
2
lxndr
20.08.15
✎
13:34
|
(1) ты пропустил скобочку в уме. Ничего там не очищается, наоборот заполняется
|
|||
3
Rollam
20.08.15
✎
14:09
|
(2) По идее, должны заполняться, согласен. Результат вызова этого метода - именно очищение реквизитов строки ТЧ, связанной с эквайрингом. Для строк, связанных с кредитом, все проходит нормально.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |