Конвертация 3.0. Отбор выгружаемых объектов.
Возникла необходимость ограничить выгружаемые объекты по значению реквизита.
Казалось бы, что может быть проще...
Пытался ограничить состав объектов в момент выгрузки двумя способами (ради примера рассмотрим документ РКО):
Первый:
В правилах обработки данных изменил обработчик "Выборка данных". В этом обработчике формируется массив выгружаемых объектов. В нашем случае (РКО) это происходит с использованием запроса:
Добавляем ограничение по реквизиту "ВидОперации":
Элементарно, но эффекта никакого. Документы с прочими видами операций все равно выгружаются. Тогда попробовал второй вариант.
Второй:
В правилах конвертаций объектов добавил код в текст модуля "При отправке":
При выгрузке полезли ошибки типа:
Мне кажется, это связано с тем, что объект не выгрузился, а в массиве выгружаемых объектов он присутствует, что приводит к ошибке во время проверки.
Таким образом, элементарное, казалось бы, действие становится проблематичным.
Есть, конечно, вариант отсеивать объекты при загрузке, но гонять лишние объекты в обмене неправильно.
Может кто подсказать, каким образом в новой конвертации можно сделать этот простейший отсев объектов?
Казалось бы, что может быть проще...
Пытался ограничить состав объектов в момент выгрузки двумя способами (ради примера рассмотрим документ РКО):
Первый:
В правилах обработки данных изменил обработчик "Выборка данных". В этом обработчике формируется массив выгружаемых объектов. В нашем случае (РКО) это происходит с использованием запроса:
Запрос.Текст = "
|ВЫБРАТЬ
| Док.Ссылка
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК Док
|ГДЕ
| Док.Проведен
| И Док.Дата >= &ДатаНачала
| И Док.Дата <= &ДатаОкончания";
ПоказатьДобавляем ограничение по реквизиту "ВидОперации":
Запрос.Текст = "ВЫБРАТЬ
| Док.Ссылка
|ИЗ
| Документ.РасходныйКассовыйОрдер КАК Док
|ГДЕ
| Док.Проведен
| И Док.Дата >= &ДатаНачала
| И Док.Дата <= &ДатаОкончания
| И (Док.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ОплатаПоставщику)
| ИЛИ Док.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВозвратПокупателю))";
ПоказатьЭлементарно, но эффекта никакого. Документы с прочими видами операций все равно выгружаются. Тогда попробовал второй вариант.
Второй:
В правилах конвертаций объектов добавил код в текст модуля "При отправке":
Если НЕ ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийРКО.ОплатаПоставщику
ИЛИ НЕ ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийРКО.ВозвратПокупателю Тогда
Возврат;
КонецЕсли;
При выгрузке полезли ошибки типа:
Скрытый текст |
---|
Событие: Отправка.
ПОД: Документ_ПКО_Отправка. ПКО: Документ_ПКОПолучениеНаличныхВБанке_Отправка. Объект: Документ объект: Поступление наличных, Поступление наличных МФБП-000001 от 29.11.2016 17:18:28. {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(552)}: Ошибка при вызове метода контекста (Проверить) ОбъектXDTO.Проверить(); по причине: Ошибка проверки данных XDTO: Структура объекта не соответствует типу: { Проверка свойства 'ВидОперации': форма: Элемент имя: { тип: { Отсутствует обязательное свойство |
Мне кажется, это связано с тем, что объект не выгрузился, а в массиве выгружаемых объектов он присутствует, что приводит к ошибке во время проверки.
Таким образом, элементарное, казалось бы, действие становится проблематичным.
Есть, конечно, вариант отсеивать объекты при загрузке, но гонять лишние объекты в обмене неправильно.
Может кто подсказать, каким образом в новой конвертации можно сделать этот простейший отсев объектов?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Подсмотрел в типовом коде УТ:
Процедура ПОД_Документ_ВозвратТоваровПоставщику_ПриОбработке(ДанныеИБ, ИспользованиеПКО, КомпонентыОбмена)
// Провека на наличие записей в табличной части Товары.
// Если табличная часть пустая, то документ не выгружается, иначе он не пройдет проверку по схеме.
Запрос = Новый Запрос(
"ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА КАК ЕстьЗаписи
|ИЗ
| Документ.ВозвратТоваровПоставщику.ВидыЗапасов КАК ВидыЗапасов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК Аналитика
| ПО ВидыЗапасов.АналитикаУчетаНоменклатуры = Аналитика.КлючАналитики
|ГДЕ
| ВидыЗапасов.Ссылка = &Ссылка
| И (Аналитика.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
| ИЛИ Аналитика.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))");
Запрос.УстановитьПараметр("Ссылка", ДанныеИБ.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Не Выборка.Следующий() Тогда
ИспользованиеПКО.Документ_ВозвратТоваровПоставщику_Отправка = Ложь;
КонецЕсли;
КонецПроцедуры
Показать
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот