Имя: Пароль:
1C
1С v8
Конвертация 3.0. Отбор выгружаемых объектов.
0 Rollam
 
10.05.17
12:06
Возникла необходимость ограничить выгружаемые объекты по значению реквизита.
Казалось бы, что может быть проще...

Пытался ограничить состав объектов в момент выгрузки двумя способами (ради примера рассмотрим документ РКО):




Первый:
В правилах обработки данных изменил обработчик "Выборка данных". В этом обработчике формируется массив выгружаемых объектов. В нашем случае (РКО) это происходит с использованием запроса:


Запрос.Текст = "
    |ВЫБРАТЬ
    |    Док.Ссылка
    |ИЗ
    |    Документ.РасходныйКассовыйОрдер КАК Док
    |ГДЕ
    |    Док.Проведен
    |    И Док.Дата >= &ДатаНачала
    |    И Док.Дата <= &ДатаОкончания";

Добавляем ограничение по реквизиту "ВидОперации":

    Запрос.Текст = "ВЫБРАТЬ
                   |    Док.Ссылка
                   |ИЗ
                   |    Документ.РасходныйКассовыйОрдер КАК Док
                   |ГДЕ
                   |    Док.Проведен
                   |    И Док.Дата >= &ДатаНачала
                   |    И Док.Дата <= &ДатаОкончания
                   |    И (Док.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ОплатаПоставщику)
                   |            ИЛИ Док.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРКО.ВозвратПокупателю))";


Элементарно, но эффекта никакого. Документы с прочими видами операций все равно выгружаются. Тогда попробовал второй вариант.




Второй:
В правилах конвертаций объектов добавил код в текст модуля "При отправке":

Если НЕ ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийРКО.ОплатаПоставщику
        ИЛИ НЕ ДанныеИБ.ВидОперации = Перечисления.ВидыОперацийРКО.ВозвратПокупателю Тогда
        Возврат;
КонецЕсли;




При выгрузке полезли ошибки типа:

Событие: Отправка.
ПОД: Документ_ПКО_Отправка.
ПКО: Документ_ПКОПолучениеНаличныхВБанке_Отправка.
Объект: Документ объект: Поступление наличных, Поступление наличных МФБП-000001 от 29.11.2016 17:18:28.

{ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(552)}: Ошибка при вызове метода контекста (Проверить)
            ОбъектXDTO.Проверить();
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1}Документ.ПКОПолучениеНаличныхВБанке
Проверка свойства 'ВидОперации':
    форма: Элемент
    имя: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1}ВидОперации
    тип: {http://v8.1c.ru/edi/edi_stnd/EnterpriseData/1.1}ВидыОперацийПКОПолучениеНаличныхВБанке
Отсутствует обязательное свойство

Мне кажется, это связано с тем, что объект не выгрузился, а в массиве выгружаемых объектов он присутствует, что приводит к ошибке во время проверки.




Таким образом, элементарное, казалось бы, действие становится проблематичным.
Есть, конечно, вариант отсеивать объекты при загрузке, но гонять лишние объекты в обмене неправильно.

Может кто подсказать, каким образом в новой конвертации можно сделать этот простейший отсев объектов?
1 Romyr
 
11.05.17
04:50
Видов документов много? Я добавлял параметр, и в обработке "перед выгрузкой" у конкретных документов прописывал отказ при несоблюдении условия.
2 MaxS
 
11.05.17
06:32
В КД 3 в ПОД - При Обработке  есть кнопка с вопросом. Это справка! ))
Там указано про ИспользоватьПКО
Например, чтобы не выгружалось пишем ИспользованиеПКО.Документ_ЗаказКлиента_Отправка = Ложь;

А ещё есть правила регистрации. Их меняют в КД2.
3 Rollam
 
11.05.17
13:52
(2) Про "ИспользоватьПКО" я знаю. Но разве это единственный способ? Зачем тогда нужен модуль "Выборка данных"?
Вот пока пришлось изменить правила регистрации объектов, по другому не получилось сделать.
4 Rollam
 
11.05.17
13:53
(1) Это было в КД 2.1, в КД 3.0 такого, вроде, нет.
5 MaxS
 
11.05.17
15:23
(3) Выборка данных по идее должна решать вопрос, но возможно это баг или фича БСП. Не учитывает этот момент.
Так же как флаг "Выгружать очистку данных по неиспользуемым ПКО". В КД 3 есть, а БСП игнорирует эту настройку.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший