[РЕШЕНО] Отчет обход вложенного запроса

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем IgorArhangel, 16 дек 2014.

  1. TopicStarter Overlay
    IgorArhangel
    Offline

    IgorArhangel

    Регистрация:
    16 дек 2014
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Форум прочитал. Похожее встречается, но у меня чуть другое дело.

    Суть такова, что делаю отчет.
    Запрос вот такой
    Код:
    ВЫБРАТЬ РАЗЛИЧНЫЕ
        ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
        ПродажиОбороты.СтоимостьОборот КАК СтоимостьОборот,
        ПродажиОбороты.НДСОборот КАК НДСОборот,
        ПродажиОбороты.Номенклатура КАК Номенклатура,
        ВложенныйЗапрос1.КоличествоОборот КАК КоличествоОборот1,
        ПродажиОбороты.Регистратор КАК Регистратор,
        ВложенныйЗапрос1.СтоимостьОборот КАК СтоимостьОборот1,
        ВложенныйЗапрос1.НДСОборот КАК НДСОборот1,
        ВложенныйЗапрос.Товар КАК Товар,
        ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Товар),
        ПродажиОбороты.Контрагент КАК Контрагент,
        ПРЕДСТАВЛЕНИЕ(ПродажиОбороты.Контрагент)
    ИЗ
        РегистрНакопления.Продажи.Обороты(, , Регистратор, ) КАК ПродажиОбороты
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
                ДеталиНаСкладах.Регистратор КАК Регистратор,
                ДеталиНаСкладах.Товар КАК Товар
            ИЗ
                РегистрНакопления.ДеталиНаСкладах КАК ДеталиНаСкладах) КАК ВложенныйЗапрос
            ПО ПродажиОбороты.Регистратор = ВложенныйЗапрос.Регистратор
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
                ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
                ПРЕДСТАВЛЕНИЕ(ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура) КАК НоменклатураПредставление,
                ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоОборот КАК КоличествоОборот,
                ПартииТоваровНаСкладахОстаткиИОбороты.СтоимостьОборот КАК СтоимостьОборот,
                ПартииТоваровНаСкладахОстаткиИОбороты.НДСОборот КАК НДСОборот,
                ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор КАК Регистратор,
                ПРЕДСТАВЛЕНИЕ(ПартииТоваровНаСкладахОстаткиИОбороты.Регистратор) КАК РегистраторПредставление
            ИЗ
                РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(, , Регистратор, , ) КАК ПартииТоваровНаСкладахОстаткиИОбороты) КАК ВложенныйЗапрос1
            ПО ПродажиОбороты.Регистратор = ВложенныйЗапрос1.Регистратор
                И (ВложенныйЗапрос1.Номенклатура = ПродажиОбороты.Номенклатура)
    ИТОГИ
        СУММА(КоличествоОборот),
        СУММА(СтоимостьОборот),
        СУММА(НДСОборот),
        СУММА(КоличествоОборот1),
        СУММА(СтоимостьОборот1),
        СУММА(НДСОборот1)
    ПО
        Товар,
        Регистратор,
        Контрагент
    С запросом проблем нет.
    Я начинаю разбирать данный запрос в 4-х циклах:

    Код:
     // Выбор детали из ремфонда
        ВыборкаТовар = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "Товар");   
        Пока ВыборкаТовар.Следующий() Цикл
            ОбластьНоменклатура.Параметры.Заполнить(ВыборкаТовар);
            ОбластьДеталь.Параметры.Деталь = ВыборкаТовар.Товар;
            ОбластьДеталь.Параметры.КодДетали = ВыборкаТовар.Товар.Код;
            ОбластьДеталь.Параметры.ДетальКоличество = ВыборкаТовар.Количество;
            ТабДок.Вывести(ОбластьДеталь);
            // Выбор контрагента
            ВыборкаКонтрагент = ВыборкаТовар.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "Контрагент");
            Пока ВыборкаКонтрагент.Следующий() Цикл
                ОбластьКонтрагент.Параметры.Контрагент = ВыборкаКонтрагент.Контрагент;                   
                ТабДок.Вывести(ОбластьКонтрагент);
                // Выбор документа регистратора
                ВыборкаДокумент = ВыборкаКонтрагент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, "Регистратор");
                Пока ВыборкаДокумент.Следующий() Цикл
                    ОбластьДокумент.Параметры.Регистратор = ВыборкаДокумент.Регистратор;
                    ТабДок.Вывести(ОбластьДокумент);
                      // Выбор номенклатуры (запчасти + услуги)
                      Выборка = ВыборкаДокумент.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
                        Пока Выборка.Следующий() Цикл
                            ОбластьДокумент.Параметры.Номенклатура = Выборка.Номенклатура;
                            ТабДок.Вывести(ОбластьНоменклатура);
                        КонецЦикла;
                КонецЦикла;
            КонецЦикла;
           
        КонецЦикла;
    Первые 3 цикла отрабатывают нормально, нужные области заполняются. А вот последний цикл Выборка Номенклатуры (запчасти+услуги) не отрабатывает. При вычеслении выражения пишет ошибка чтения данных.

    Не могу догнать что делать.
    Уже пробовал группировку добавить по Номенклатуре и итоги, но ни хрена не идет.

    В универсальном отчете работает нормально. Конструктором выходной формы пользовался - болт.

    может кто подскажет кудой копать?
  2. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    Последняя выборка должна иметь прямой обход, т.е. можно просто Выборка = ВыборкаДокумент.Выбрать();
  3. TopicStarter Overlay
    IgorArhangel
    Offline

    IgorArhangel

    Регистрация:
    16 дек 2014
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    делал и так

    Код:
    Выборка = ВыборкаДокумент.Выбрать();
                        Пока Выборка.Следующий() Цикл
                            ОбластьДокумент.Параметры.Номенклатура = Выборка.Номенклатура;
                            ТабДок.Вывести(ОбластьНоменклатура);
                       КонецЦикла;
    Но мне почему-то выдает: Поле объекта не обнаружено (Номенклатура)

    я по разному пробовал: добавлял Номенклатуру в итоги и в группировки.
    Один хрен..
    Не понятно как-будто Номенклатура не вытягивается.

    А вот в Универсальном отчете нормально выдает.

    Тупо не знаю что делать...
  4. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    Судя по тексту ошибки, в выборке вообще нет реквизита с именем "номенклатура". Проверьте корректность указания имени поля в запросе и коде обработки выборки.
  5. TopicStarter Overlay
    IgorArhangel
    Offline

    IgorArhangel

    Регистрация:
    16 дек 2014
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    проверял.
    Реквизит есть 100%
    Код:
    ПродажиОбороты.Номенклатура КАК Номенклатура
    Прикол еще в том что когда вычисляю выражение в выборках на каждом из циклов там
    Номенклатура = Null

    чтоб это могло значить?
  6. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.748
    Симпатии:
    509
    Баллы:
    204
    Запросы идут из глубины (т.е. сначала выполняется самый-самый вложенный, далее к нему подцепляются уровнем старше), может что-то с запросом ? Понятно что в консоли может отработать. но в ней(консоли) вы же не можете организовать программную обработку ?
  7. TopicStarter Overlay
    IgorArhangel
    Offline

    IgorArhangel

    Регистрация:
    16 дек 2014
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Мужики сорри..
    Не правильно указал область макета...

    Труба... целый день просидел над этой ошибкой..

    Та просто начинающий я..
    Коллега по работе сменил работу и меня поставили на сопровождение 1С одного.. так вот сижу читаю и воплощаю)

    Спасибо за помощь
  8. alexburn
    Online

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.748
    Симпатии:
    509
    Баллы:
    204
    Тему закрывать ?
  9. TopicStarter Overlay
    IgorArhangel
    Offline

    IgorArhangel

    Регистрация:
    16 дек 2014
    Сообщения:
    25
    Симпатии:
    0
    Баллы:
    1
    Да вопрос решен.

    Всем еще раз спасибо

Поделиться этой страницей