Имя: Пароль:
1C
1С v8
ВыгрузитьПоПравилу не получается настроить
0 Gena1984
 
22.12.15
15:50
В ПВД пишу следующий код:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|    ОтчетКомитентуОПродажах.Ссылка КАК Док
|ИЗ
|    Документ.ОтчетКомитентуОПродажах КАК ОтчетКомитентуОПродажах
|ГДЕ
|    ОтчетКомитентуОПродажах.Проведен
|    И ОтчетКомитентуОПродажах.Организация = &Организация
|    И ОтчетКомитентуОПродажах.ДоговорКонтрагента = &ДоговорКонтрагента
|    И ОтчетКомитентуОПродажах.Контрагент = &Контрагент
|    И ОтчетКомитентуОПродажах.Дата >= &ДатаНачала
|    И ОтчетКомитентуОПродажах.Дата <= КОНЕЦПЕРИОДА(&ДатаОкончания, ДЕНЬ)
|
|СГРУППИРОВАТЬ ПО
|    ОтчетКомитентуОПродажах.Ссылка";
Запрос.УстановитьПараметр("Контрагент",Параметры.Контрагент);
Запрос.УстановитьПараметр("Организация",Параметры.Организация);
Запрос.УстановитьПараметр("ДатаНачала",ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания",ДатаОкончания);
Запрос.УстановитьПараметр("ДоговорКонтрагента",Параметры.ДоговорКонтрагента);
гВыборка = Запрос.Выполнить().Выбрать();
Пока гВыборка.Следующий() Цикл
    Для каждого стр из гВыборка.Док.Поставщики Цикл
        ВходящиеДанные = Новый Структура;
        ТаблицаТоваров = Новый ТаблицаЗначений;

        ТаблицаТоваров.Колонки.Добавить("ЕдиницаИзмерения");
        ТаблицаТоваров.Колонки.Добавить("Количество");
        ТаблицаТоваров.Колонки.Добавить("КоличествоМест");
        ТаблицаТоваров.Колонки.Добавить("Коэффициент");
        ТаблицаТоваров.Колонки.Добавить("Номенклатура");
        ТаблицаТоваров.Колонки.Добавить("СтавкаНДС");
        ТаблицаТоваров.Колонки.Добавить("Сумма");
        ТаблицаТоваров.Колонки.Добавить("СуммаНДС");
        ТаблицаТоваров.Колонки.Добавить("Цена");
        ТаблицаТоваров.Колонки.Добавить("СчетУчетаБУ");
        ТаблицаТоваров.Колонки.Добавить("СчетУчетаНУ");
        ТаблицаТоваров.Колонки.Добавить("СчетУчетаНДС");
        ТаблицаТоваров.Колонки.Добавить("СерияНоменклатуры");
        Попытка
            ВходящиеДанные.Вставить("НомерВходящегоДокумента",Число(стр.СчетФактура.Номер));
        Исключение
            ВходящиеДанные.Вставить("НомерВходящегоДокумента",стр.СчетФактура.Номер);
        КонецПопытки;
        ВходящиеДанные.Вставить("Дата", стр.СчетФактура.Дата);
        ВходящиеДанные.Вставить("ДатаВходящегоДокумента", стр.СчетФактура.Дата);
        ВходящиеДанные.Вставить("Грузоотправитель", стр.Поставщик);
        ВходящиеДанные.Вставить("ВалютаДокумента", гВыборка.Док.ВалютаДокумента);
        ВходящиеДанные.Вставить("ДоговорКонтрагента", гВыборка.Док.ДоговорКонтрагента);
        Ключ = ""+гВыборка.Док.Номер+" "+Формат(гВыборка.Док.Дата,"ДФ = гггг")+"_"+стр.НомерСтроки;
        ВходящиеДанные.Вставить("Комментарий", Ключ);
        ВходящиеДанные.Вставить("Контрагент", гВыборка.Док.Организация);
        ВходящиеДанные.Вставить("КратностьВзаиморасчетов", гВыборка.Док.КратностьВзаиморасчетов);
        ВходящиеДанные.Вставить("КурсВзаиморасчетов", гВыборка.Док.КурсВзаиморасчетов);
        ВходящиеДанные.Вставить("Организация", гВыборка.Док.Контрагент);
        ВходящиеДанные.Вставить("ПометкаУдаления", гВыборка.Док.ПометкаУдаления);
        ВходящиеДанные.Вставить("Проведен", гВыборка.Док.Проведен);
        ВходящиеДанные.Вставить("ВидОперации", "ПокупкаКомиссия");
        ВходящиеДанные.Вставить("ВидПоступления", "НаСклад");
        ВходящиеДанные.Вставить("СчетУчетаРасчетовПоАвансам", "РасчетыПоАвансамВыданным");
        ВходящиеДанные.Вставить("СчетУчетаРасчетовСКонтрагентом", "РасчетыСПоставщиками");
        ВходящиеДанные.Вставить("ОтражатьВБухгалтерскомУчете", Истина);
        ВходящиеДанные.Вставить("ОтражатьВНалоговомУчете", Истина);
        ВходящиеДанные.Вставить("ОтражатьВУправленческомУчете", Истина);
        Для каждого стр2 из гВыборка.Док.Товары Цикл
            Если стр2.КлючСтроки = стр.КлючСтроки Тогда
                ТабСтр = ТаблицаТоваров.Добавить();

                ТабСтр.ЕдиницаИзмерения         = стр2.ЕдиницаИзмерения;
                ТабСтр.Количество                 = стр2.Количество;
                ТабСтр.КоличествоМест             = стр2.КоличествоМест;
                ТабСтр.Коэффициент                 = стр2.Коэффициент;
                ТабСтр.Номенклатура                = стр2.Номенклатура;
                ТабСтр.СтавкаНДС                 = стр2.СтавкаНДС;
                ТабСтр.Сумма                     = стр2.Сумма;
                ТабСтр.СуммаНДС                 = стр2.СуммаНДС;
                ТабСтр.Цена                     = стр2.Цена;
                ТабСтр.СчетУчетаБУ                = "СырьеИМатериалы";
                ТабСтр.СчетУчетаНУ                = "СырьеИМатериалы";
                ТабСтр.СчетУчетаНДС                = "НДСпоПриобретеннымМПЗ";
                Запрос = Новый Запрос;
                Запрос.Текст = "ВЫБРАТЬ
                |    ПоступлениеТоваровУслугТовары.НомерГТД
                |ИЗ
                |    Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
                |ГДЕ
                |    ПоступлениеТоваровУслугТовары.Ссылка = &Документ
                |    И ПоступлениеТоваровУслугТовары.Номенклатура = &Номенклатура
                |    И ПоступлениеТоваровУслугТовары.Количество = &Количество";
                Запрос.УстановитьПараметр("Номенклатура",стр2.Номенклатура);
                Запрос.УстановитьПараметр("Количество",стр2.Количество);
                Запрос.УстановитьПараметр("Документ",гВыборка.Док.Ссылка);
                гВыборка = Запрос.Выполнить().Выбрать();
                Пока гВыборка.Следующий() Цикл
                    ТабСтр.СерияНоменклатуры        = гВыборка.НомерГТД;
                КонецЦикла;
            КонецЕсли;            
        КонецЦикла;
        ВходящиеДанные.Вставить("ТаблицаТоваров",ТаблицаТоваров);
        ВыгрузитьПоПравилу(,,ВходящиеДанные,,"ПоступлениеТоваровУслугИзРеализации_ОтчетКом2");
    КонецЦикла;
КонецЦикла;
После первого проход цикла пишет: Поле объекта не онаружено "Док". Что я делаю не так?
1 akaBrr
 
22.12.15
15:55
у вас 3 цикла, после первого прохода какого из них?

почему все данные сразу не получаете запросом?
2 Gena1984
 
22.12.15
15:57
Процедуру ВыгрузитьПоПравилу он 1 раз проходит, после этого пишет ощибку
3 Krolik Bezobraznik
 
22.12.15
15:59
У вас в переменную гВыборка записывается результат выполнения запроса. Затем когда вы обходите результат, снова выполняете другой запрос и снова в переменную гВыборка передаете выборку иного запроса.

Затем когда у вас происходит вторая итерация по первой выборке у вас ссылается на Док, а его уже нет.
4 mehfk
 
22.12.15
16:02
(0)
              гВыборка = Запрос.Выполнить().Выбрать();
                Пока гВыборка.Следующий() Цикл
                    ТабСтр.СерияНоменклатуры        = гВыборка.НомерГТД;
                КонецЦикла;
5 Gena1984
 
22.12.15
16:03
Все, тупанул, спасибо большое.