несколько документов из одной конфигурации в один документ другой конфигурации
Добрый день.
В одной конфигурации есть документы вида "Оплата", у которого есть только реквизиты шапки "Дата", "Номер", "Контрагент", "Валюта", "Сумма". Эти документы формируются по каждому факту оплаты по несколько штук в день.
В другой конфигурации есть документы вида "ОплатыТоваров", у которых в шапке только стандартные реквизиты "Дата" и "Номер", а вот в табличной части "Платежи" есть те же самые реквизиты "Контрагент", "Валюта", "Сумма". Такие документы создаются по одной штуке за целый день.
Пытаюсь создать правила обмена данными (ПКД) следующим образом:
создал правила конвертации объектов (ПКО), в котором объект-источник оставил пустой, а объект-приемник указал "ДокументСсылка.ОплатыТоваров", имя правила назвал "ОплатыТоваров", на закладке настройки установил флажок только на пункте "Автоматически генерировать номер или код, если он не задан";
в правилах конвертации свойств (ПКС) для реквизитов приёмника "Контрагент", "Валюта", "Сумма" в табличной части "Платежи" установил флажки "Получить из входящих данных" правило конвертации "ОплатыТоваров";
В правилах выгрузки данных (ПВД) создал Объект выборки "ДокументСсылка.Оплата", способ выборки "Произвольный алгоритм", правило конвертации "ОплатыТоваров"на закладке "Основная" в разделе "Перед обработкой" создал следующий алгоритм:
К сожалению, при попытке выгрузить по этому правило из конфигурации Источника выдаёт следующие ошибки:
пожалуйста, подскажите на что следует обратить внимание для решения проблемы?
Спасибо.
В одной конфигурации есть документы вида "Оплата", у которого есть только реквизиты шапки "Дата", "Номер", "Контрагент", "Валюта", "Сумма". Эти документы формируются по каждому факту оплаты по несколько штук в день.
В другой конфигурации есть документы вида "ОплатыТоваров", у которых в шапке только стандартные реквизиты "Дата" и "Номер", а вот в табличной части "Платежи" есть те же самые реквизиты "Контрагент", "Валюта", "Сумма". Такие документы создаются по одной штуке за целый день.
Пытаюсь создать правила обмена данными (ПКД) следующим образом:
создал правила конвертации объектов (ПКО), в котором объект-источник оставил пустой, а объект-приемник указал "ДокументСсылка.ОплатыТоваров", имя правила назвал "ОплатыТоваров", на закладке настройки установил флажок только на пункте "Автоматически генерировать номер или код, если он не задан";
в правилах конвертации свойств (ПКС) для реквизитов приёмника "Контрагент", "Валюта", "Сумма" в табличной части "Платежи" установил флажки "Получить из входящих данных" правило конвертации "ОплатыТоваров";
В правилах выгрузки данных (ПВД) создал Объект выборки "ДокументСсылка.Оплата", способ выборки "Произвольный алгоритм", правило конвертации "ОплатыТоваров"на закладке "Основная" в разделе "Перед обработкой" создал следующий алгоритм:
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| Оплата.Дата КАК Дата,
| Оплата.Контрагент КАК Контрагент,
| Оплата.Валюта КАК Валюта,
| СУММА(Оплата.Сумма) КАК Сумма
| ИЗ
| Документ.Оплата КАК Оплата
|
| СГРУППИРОВАТЬ ПО
| Оплата.Дата,
| Оплата.Контрагент,
| Оплата.Валюта
|
| УПОРЯДОЧИТЬ ПО
| Дата,
| Контрагент,
| Валюта
| ИТОГИ
| СУММА(Сумма)
| ПО
| Дата,
| Контрагент,
| Валюта";
Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТаблицаДанные = Новый ТаблицаЗначений;
ТаблицаДанные.Колонки.Добавить("Номер", Новый ОписаниеТипов("Строка"));
ТаблицаДанные.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ТаблицаДанные.Колонки.Добавить("ПометкаУдаления", Новый ОписаниеТипов("Булево"));
ТаблицаДанные.Колонки.Добавить("Проведен", Новый ОписаниеТипов("Булево"));
ТаблицаДанные.Колонки.Добавить("Платежи", Новый ОписаниеТипов("ТаблицаЗначений"));
Платежи = Новый ТаблицаЗначений();
Платежи.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
Платежи.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
Платежи.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
Пока Выборка.Следующий() Цикл
СтрокаПлатежи = Платежи.Добавить();
СтрокаПлатежи.Контрагент = Выборка.Контрагент;
СтрокаПлатежи.Валюта = Выборка.Валюта;
СтрокаПлатежи.Сумма = Выборка.Сумма;
КонецЦикла;
НоваяСтрокаДанные = ТаблицаДанные.Добавить();
НоваяСтрокаДанные.Дата = Выборка.Дата;
НоваяСтрокаДанные.ПометкаУдаления = Ложь;
НоваяСтрокаДанные.Проведен = Ложь;
НоваяСтрокаДанные.Платежи = Платежи;
ВыборкаДанных = ТаблицаДанные;
ПоказатьК сожалению, при попытке выгрузить по этому правило из конфигурации Источника выдаёт следующие ошибки:
Ошибка получения значения свойства объекта (по имени свойства источника)
ПКО = ОплатыТоваров (Документ: Оплата)
ПКС = 5 (Валюта -->)
Объект = СтрокаТаблицыЗначений (Строка таблицы значений)
СвойствоПриемника = ()
ОписаниеОшибки = Поле объекта не обнаружено (Валюта)
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
КодСообщения = 13
Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1693)}: Ошибка получения значения свойства объекта (по имени свойства источника)
ПКО = ОплатыТоваров (Документ: Оплата)
ПКС = 5 (Валюта -->)
Объект = СтрокаТаблицыЗначений (Строка таблицы значений)
СвойствоПриемника = ()
ОписаниеОшибки = Поле объекта не обнаружено (Валюта)
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
КодСообщения = 13
ПоказатьПКО = ОплатыТоваров (Документ: Оплата)
ПКС = 5 (Валюта -->)
Объект = СтрокаТаблицыЗначений (Строка таблицы значений)
СвойствоПриемника = ()
ОписаниеОшибки = Поле объекта не обнаружено (Валюта)
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
КодСообщения = 13
Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1693)}: Ошибка получения значения свойства объекта (по имени свойства источника)
ПКО = ОплатыТоваров (Документ: Оплата)
ПКС = 5 (Валюта -->)
Объект = СтрокаТаблицыЗначений (Строка таблицы значений)
СвойствоПриемника = ()
ОписаниеОшибки = Поле объекта не обнаружено (Валюта)
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8282)
КодСообщения = 13
пожалуйста, подскажите на что следует обратить внимание для решения проблемы?
Спасибо.
По теме из базы знаний
- Загрузка документов и номенклатуры из Excel в 1С "одним нажатием": УПД, ТОРГ-12, отчеты маркетплейсов, заказы, счета, прайсы
- Переход с УПП на ERP с сохранением документов. Фантастика или реальность?
- Гарантированное проведение документов (подключаемое расширение)
- RabbitMQ+КД 3. История повторения чужого опыта. Наступаем на одни и те же грабли дважды
- Универсальный журнал документов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) sergiobargio1, как мне кажется, ВыборкаДанных будет работать, только если в ПКО источник непустой и его реквизиты совпадают с колонками ВыборкаДанных.
Я бы сделала вот так:
1. в ПКО поиск по Дате
2. в ПВД делать обход выборки по датам, формировать ТЧ и структуру для ВходящихДанных, и выгружать с помощью ВыгрузитьПоПравилу.
3. в ПКС убрать галочки "Получить из входящих данных", в обработчиках "Перед выгрузкой" написать:
- в реквизитах, например, Значение = ВходящиеДанные.Дата;
- в ТЧ КоллекцияОбъектов = ВходящиеДанные.ТаблицаПлатежей;
- в реквизитах ТЧ, например, Значение = ОбъектКоллекции.Валюта;
Я бы сделала вот так:
1. в ПКО поиск по Дате
2. в ПВД делать обход выборки по датам, формировать ТЧ и структуру для ВходящихДанных, и выгружать с помощью ВыгрузитьПоПравилу.
3. в ПКС убрать галочки "Получить из входящих данных", в обработчиках "Перед выгрузкой" написать:
- в реквизитах, например, Значение = ВходящиеДанные.Дата;
- в ТЧ КоллекцияОбъектов = ВходящиеДанные.ТаблицаПлатежей;
- в реквизитах ТЧ, например, Значение = ОбъектКоллекции.Валюта;
(3) sergiobargio1, в ПКС "Дата" ставите галочку "Поиск объекта при загрузке по свойству". Необходимо ли это, зависит от ваших целей. Если Вы 1 раз выгрузите всё, то поиск не нужен. Если будете периодически выгружать, то при выгрузке за одну и ту же дату в приемнике создастся несколько одинаковых документов.
(5) sergiobargio1, в ПВД как раз надо прописать ВыгрузитьПоПравилу (сейчас попробую на коленке сляпать).
Ставите курсор на ПКС табличной части, нажимаете "Изменить", в обработчике "Перед выгрузкой" пишите КоллекцияОбъектов = ВходящиеДанные.ТаблицаПлатежей;
ТаблицаПлатежей - это то, как назовете таблицу с платежами в ПВД.
Ставите курсор на ПКС табличной части, нажимаете "Изменить", в обработчике "Перед выгрузкой" пишите КоллекцияОбъектов = ВходящиеДанные.ТаблицаПлатежей;
ТаблицаПлатежей - это то, как назовете таблицу с платежами в ПВД.
Как-то так в ПВД:
Если хотите переносить признак Проведен и ПометкаУдаления, то также нужно в запросе группировать и создавать уже несколько документов за одну дату. Или в запросе сделать отбор по Проведенным (врядли остальные нужны).
Понятно, что писать в обработчиках ПКС? Там явно указываем значение из ТЗ ВходящиеДанные, в которую передается таблица ДанныеЗагрузки.
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| Оплата.Дата КАК Дата,
| Оплата.Контрагент КАК Контрагент,
| Оплата.Валюта КАК Валюта,
| СУММА(Оплата.Сумма) КАК Сумма
| ИЗ
| Документ.Оплата КАК Оплата
|
| СГРУППИРОВАТЬ ПО
| Оплата.Дата,
| Оплата.Контрагент,
| Оплата.Валюта
|
| УПОРЯДОЧИТЬ ПО
| Дата,
| Контрагент,
| Валюта
| ИТОГИ
| СУММА(Сумма)
| ПО
| Дата,
| Контрагент,
| Валюта";
Платежи = Новый ТаблицаЗначений();
Платежи.Колонки.Добавить("Контрагент", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
Платежи.Колонки.Добавить("Валюта", Новый ОписаниеТипов("СправочникСсылка.Валюты"));
Платежи.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
ВыборкаДата = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Дата");
Пока ВыборкаДата.Следующий() Цикл
ДанныеЗагрузки = Новый Структура("ТаблицаПлатежей,Дата");
ДанныеЗагрузки.Вставить("Дата", ДатаНачОст - 1);
Платежи.Очистить();
ВыборкаКонтрагент = ВыборкаДата.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент");
Пока ВыборкаКонтрагент.Следующий() Цикл
ТекКонтрагент = ВыборкаКонтрагент.Контрагент;
ВыборкаВалюта = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Валюта");
Пока ВыборкаВалюта.Следующий() Цикл
СтрокаПлатежей = Платежи.Добавить();
СтрокаПлатежей.Контрагент = ТекКонтрагент;
СтрокаПлатежей.Валюта = ВыборкаВалюта.Валюта;
СтрокаПлатежей.Сумма = ВыборкаВалюта.Сумма;
КонецЦикла;
КонецЦикла;
ДанныеЗагрузки.Вставить("ТаблицаПлатежей", Платежи);
ВыгрузитьПоПравилу(,, ДанныеЗагрузки,, "ОплатыТоваров");
КонецЦикла;
ПоказатьЕсли хотите переносить признак Проведен и ПометкаУдаления, то также нужно в запросе группировать и создавать уже несколько документов за одну дату. Или в запросе сделать отбор по Проведенным (врядли остальные нужны).
Понятно, что писать в обработчиках ПКС? Там явно указываем значение из ТЗ ВходящиеДанные, в которую передается таблица ДанныеЗагрузки.
(7) sonne, огромное Вам спасибо. К сожалению, параметр "ДатаНачОст" не находит, вместо его поставил "ВыборкаДата.Дата", увы не спасает
Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = ОплатыТоваров (Документ: Оплата)
ПКС = 1 (--> Дата)
Объект = 25.08.2015 12:00:00 (Дата)
СвойствоПриемника = Дата (Дата)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Значение не является значением объектного типа (Дата)
ПозицияМодуля = (1)
КодСообщения = 55
Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = ОплатыТоваров (Документ: Оплата)
ПКС = 1 (--> Дата)
Объект = 25.08.2015 12:00:00 (Дата)
СвойствоПриемника = Дата (Дата)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Значение не является значением объектного типа (Дата)
ПозицияМодуля = (1)
КодСообщения = 55
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1693)
КодСообщения = 31
Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1716)}: Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = ОплатыТоваров (Документ: Оплата)
ПКС = 1 (--> Дата)
Объект = 25.08.2015 12:00:00 (Дата)
СвойствоПриемника = Дата (Дата)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Значение не является значением объектного типа (Дата)
ПозицияМодуля = (1)
КодСообщения = 55
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1693)
КодСообщения = 31
ПоказатьПКО = ОплатыТоваров (Документ: Оплата)
ПКС = 1 (--> Дата)
Объект = 25.08.2015 12:00:00 (Дата)
СвойствоПриемника = Дата (Дата)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Значение не является значением объектного типа (Дата)
ПозицияМодуля = (1)
КодСообщения = 55
Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = ОплатыТоваров (Документ: Оплата)
ПКС = 1 (--> Дата)
Объект = 25.08.2015 12:00:00 (Дата)
СвойствоПриемника = Дата (Дата)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Значение не является значением объектного типа (Дата)
ПозицияМодуля = (1)
КодСообщения = 55
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1693)
КодСообщения = 31
Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1716)}: Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Ошибка в обработчике события ПередВыгрузкой (свойства)
ПКО = ОплатыТоваров (Документ: Оплата)
ПКС = 1 (--> Дата)
Объект = 25.08.2015 12:00:00 (Дата)
СвойствоПриемника = Дата (Дата)
Обработчик = ПередВыгрузкойСвойства
ОписаниеОшибки = Значение не является значением объектного типа (Дата)
ПозицияМодуля = (1)
КодСообщения = 55
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1693)
КодСообщения = 31
(9) sonne, очистил для каждого ПКС колонку "Правила конвертации", вышеописанная проблема ушла, однако вылезла другая:
Н следующая версия правил прикреплена
Н
ачало выгрузки: 31.08.2015 16:09:26
Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Получение элемента по индексу для значения не определено
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7999)
КодСообщения = 31
Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1716)}: Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Получение элемента по индексу для значения не определено
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7999)
КодСообщения = 31
ПоказатьОшибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Получение элемента по индексу для значения не определено
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7999)
КодСообщения = 31
Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1716)}: Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Получение элемента по индексу для значения не определено
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7999)
КодСообщения = 31
У вас в ПВД и ПКС было указано правило конвертации "ОплатыТоваров". В ПВД это не нужно, т.к. вручную указываем в ВыгрузитьПоПравилу, а в ПКС вообще неправильно. Поэтому выгрузка и ругалась, т.к. Дату не смогла сконвертировать по правилу "ОплатыТоваров". Я везде исправила правила конвертации, для Валюты нужно его создать (создайте и выберете в ПКС валюты).
(12) sonne, снова большое спасибо. в мойе попытке было только , ошибку исправил
ПКО для справочника "Валюты" создал, соответственно для него и ПКС и подправил ПКС табличной части "Платежи".
Блин, снова засада:
| КОНЕЦПЕРИОДА(Оплата.Дата, ДЕНЬ) КАК Дата,
ПКО для справочника "Валюты" создал, соответственно для него и ПКС и подправил ПКС табличной части "Платежи".
Блин, снова засада:
Начало выгрузки: 31.08.2015 16:33:05
Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Получение элемента по индексу для значения не определено
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7999)
КодСообщения = 31
Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1716)}: Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Получение элемента по индексу для значения не определено
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7999)
КодСообщения = 31
ПоказатьОшибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Получение элемента по индексу для значения не определено
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7999)
КодСообщения = 31
Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1716)}: Ошибка в обработчике события ПередОбработкойПравилаВыгрузки
ПВД = Оплата
Обработчик = ПередОбработкойВыгрузкиДанных
ОписаниеОшибки = Получение элемента по индексу для значения не определено
ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7999)
КодСообщения = 31
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот