Имя: Пароль:
1C
 
КД 2. Передача структуры правилу.
0 Zombi
 
28.08.18
09:10
В КД 2 есть правила, которые выгружают договор. Все работает. В ПВД происходит выборка данных запросом, далее результат помещается в структуру и потов ВыгрузитьПоПравилу(). Мне нужно добавить выгрузку табличной части этого договора в РС базы приемника. Одно из измерений РС - ссылка на этот самый договор. Я создал правила для РС, где для ПКС "Договор" указал то же правило, которым выгружается договор, туда передаю так же структуру и в поле "Договор" передаю структуру из исходящих данных. По логике как должно быть - ПВД отдает в ПКО структуру, ПКО доходит до ПКС "Договор" и передает туда структуру уже по договору, где отрабатывает правило. А я получаю ошибку:


Ошибка получения свойства объекта из входящих данных
    ПКО                    =  ДоговорыКонтрагентов  (:)
    ПКС                    =  2  (--> ОсновнаяСтатьяДвиженияДенежныхСредств)
    Объект                 =  Структура  (Структура)
    СвойствоПриемника      =  ОсновнаяСтатьяДвиженияДенежныхСредств  (СправочникСсылка.СтатьиДвиженияДенежныхСредств)
    ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
    ПозицияМодуля          =  ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8096)
    КодСообщения           =  68

То есть вместо того чтобы взять из структуры статьюДДС он видит там структуру в целом и получает ошибку. Как сделать правильно?
1 Zombi
 
28.08.18
09:13
Вот код ПВД:

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 1
    |    СтатьиДвиженияДенежныхСредствДокументов.Документ КАК Документ,
    |    СтатьиДвиженияДенежныхСредствДокументов.СтатьяДвиженияДенежныхСредств КАК СтатьяДвиженияДенежныхСредств,
    |    СтатьиДвиженияДенежныхСредствДокументов.Сумма КАК Сумма,
    |    СтатьиДвиженияДенежныхСредствДокументов.СуммаНДС КАК СуммаНДС
    |ПОМЕСТИТЬ ВТ_СтатьиДДС
    |ИЗ
    |    РегистрСведений.СтатьиДвиженияДенежныхСредствДокументов КАК СтатьиДвиженияДенежныхСредствДокументов
    |ГДЕ
    |    СтатьиДвиженияДенежныхСредствДокументов.Документ = &Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВнутренниеДокументы.2_Key,
    |    ВнутренниеДокументы.Категория,
    |    ВнутренниеДокументы.Подготовил,
    |    ВнутренниеДокументы.ВидСоглашения,
    |    ВнутренниеДокументы.Сумма,    
    |    ВТ_СтатьиДДС.СтатьяДвиженияДенежныхСредств
    |ИЗ
    |    Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СтатьиДДС КАК ВТ_СтатьиДДС
    |        ПО (ВТ_СтатьиДДС.Документ = ВнутренниеДокументы.Ссылка)
    |ГДЕ
    |    ВнутренниеДокументы.Действует
    |    И ВнутренниеДокументы.Ссылка = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ИсходящиеДанные = Новый Структура;
        ИсходящиеДанные.Вставить("2_Key", ВыборкаДетальныеЗаписи.2_Key);
        ИсходящиеДанные.Вставить("ОсновнаяСтатьяДвиженияДенежныхСредств", ВыборкаДетальныеЗаписи.СтатьяДвиженияДенежныхСредств);
        ИсходящиеДанные.Вставить("Категория", ВыборкаДетальныеЗаписи.СР_Категория);
        ИсходящиеДанные.Вставить("Куратор", ВыборкаДетальныеЗаписи.Подготовил);
        ИсходящиеДанные.Вставить("ВидСоглашения", ВыборкаДетальныеЗаписи.СР_ВидСоглашения);
        ИсходящиеДанные.Вставить("Стоимость", ВыборкаДетальныеЗаписи.Сумма);
                
        ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"ДоговорыКонтрагентов");
        
        ИсходящиеДанныеДоговор = ИсходящиеДанные;
        
    КонецЦикла;
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВнутренниеДокументыСР_СтатьиДДС.Ссылка КАК Договор,
        |    ВнутренниеДокументыСР_СтатьиДДС.ИнвестиционныйПроект КАК Проект,
        |    ВнутренниеДокументыСР_СтатьиДДС.СтатьяДДС КАК Статья,
        |    ВнутренниеДокументыСР_СтатьиДДС.Сумма
        |ИЗ
        |    Справочник.ВнутренниеДокументы.СР_СтатьиДДС КАК ВнутренниеДокументыСР_СтатьиДДС
        |ГДЕ
        |    ВнутренниеДокументыСР_СтатьиДДС.Ссылка = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        ИсходящиеДанные = Новый Структура;
        ИсходящиеДанные.Вставить("Договор", ИсходящиеДанныеДоговор);
        ИсходящиеДанные.Вставить("Проект", ВыборкаДетальныеЗаписи.Проект);
        ИсходящиеДанные.Вставить("Статья", ВыборкаДетальныеЗаписи.Статья);
        ИсходящиеДанные.Вставить("Сумма", ВыборкаДетальныеЗаписи.Сумма);
                
        ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"ас_КураторыСтатейДДС");
    КонецЦикла;    
    

Отказ = Истина;
2 Zombi
 
28.08.18
09:16
То есть первая часть(запрос, выборка и ВыгрузитьПоПравилу) - это то что было и работает, вторая часть - выборка ТЧ и ВыгрузитьПоПравилу(,,ИсходящиеДанные,,"ас_КураторыСтатейДДС"); это уже я делаю.
3 Optan
 
28.08.18
09:21
Договора отдельно, РС-отдельно. В РС надо передать Ссылку, а не объект в виде структуры...
ИсходящиеДанные.Вставить("Договор", ИсходящиеДанныеДоговор);  ---> ИсходящиеДанные.Вставить("Договор", ВыборкаДетальныеЗаписи.Договор);
4 Zombi
 
28.08.18
09:27
(3) Тогда и правило отдельное надо создать для Передачи договора как ссылки? А то текущее правило по выгрузке договора ждет же на входе структуру, там во всех свойствах галка "ПолучитьИзВходящихДанных"
5 Zombi
 
28.08.18
09:34
(3) Правило создал отдельное, так кажется выгрузилось. Спасибо.
6 azt-yur
 
28.08.18
09:51
(1) в твоем коде возможно что первый запрос пустой и тогда ИсходящиеДанныеДоговор остается неопределенным, возможно из за этого ошибка
7 Zombi
 
28.08.18
09:58
(6) Да щас с отдельным правилом нормально загрузилось. Действительно для заполнения поля нужно было отдельное правило создать с 1 ПКС для поиска договора.