Имя: Пароль:
1C
1С v8
Запрос по родителю
0 BFG9000
 
26.07.17
10:52
Добрый день.
Есть ТЗ с определенной номенклатурой. Необходимо получить родителей у номенклатуры из ТЗ и вывести всю номенклатуру из родительских папок. Я получаю все родительские папки, но не могу затем передать их в запрос для выборки номенклатуры.

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

Этот запрос отрабатывает нормально - получаю родительские папки.
Пытаюсь выбрать номенклатуру из этих папок - получаю пустую выборку:
    Запрос.Текст = "ВЫБРАТЬ
        |   ТаблицаЗаказа.Номенклатура
        |   ПОМЕСТИТЬ втТаблица
        |ИЗ
        |   &Таблица КАК ТаблицаЗаказа;
        |
        |ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |Номенклатура.Родитель В (
        |   ВЫБРАТЬ Номенклатура.Родитель
        |ИЗ втТаблица
        |СГРУППИРОВАТЬ ПО
        |    Номенклатура.Родитель)";

В чем проблема?
Спасибо.
1 1dvd
 
26.07.17
10:56
ГДЕ
        |Номенклатура.Ссылка В ИЕРАРХИИ (
        |   ВЫБРАТЬ Номенклатура.Родитель
        |ИЗ втТаблица
        |СГРУППИРОВАТЬ ПО
        |    Номенклатура.Родитель)
2 Ненавижу 1С
 
гуру
26.07.17
10:56
(1) не взлетит
3 1dvd
 
26.07.17
10:57
(2) возможно. Пусть ТС потестит
4 Ненавижу 1С
 
гуру
26.07.17
10:59
у меня вот такой вполне взлетел:

ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ втТаблица
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Номенклатура.Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Родитель В
            (ВЫБРАТЬ
                втТаблица.Номенклатура.Родитель
            ИЗ
                втТаблица
            СГРУППИРОВАТЬ ПО
                        втТаблица.Номенклатура.Родитель)
5 1dvd
 
26.07.17
11:02
(4) чет не ощущаю разницы :)
6 Ненавижу 1С
 
гуру
26.07.17
11:02
(5) по сравнению с чем?
7 BFG9000
 
26.07.17
11:15
Никак не летит (((
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
        |   ТаблицаЗаказа.Номенклатура
        |   ПОМЕСТИТЬ втТаблица
        |ИЗ
        |   &Таблица КАК ТаблицаЗаказа;
        
        |   ВЫБРАТЬ Номенклатура.Родитель КАК ГруппаНоменклатуры
        |ИЗ втТаблица
        |СГРУППИРОВАТЬ ПО
        |    Номенклатура.Родитель";
        
        Запрос.УстановитьПараметр("Таблица", ТаблицаЗаказа.Выгрузить());
        Результат = Запрос.Выполнить();
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
            Сообщить(Выборка.ГруппаНоменклатуры);
        КонецЦикла;

Выводит:
ВБД
ВБД детское питание
Т.е. родительские папки получает нормально

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

        Запрос.Текст = "ВЫБРАТЬ
        |   ТаблицаЗаказа.Номенклатура
        |   ПОМЕСТИТЬ втТаблица
        |ИЗ
        |   &Таблица КАК ТаблицаЗаказа;
        |
        |ВЫБРАТЬ
        |    Номенклатура.Ссылка
        |ИЗ
        |Справочник.Номенклатура КАК Номенклатура
        |ГДЕ
        |Номенклатура.Родитель В (
        |   ВЫБРАТЬ втТаблица.Номенклатура.Родитель.Ссылка
        |ИЗ втТаблица
        |СГРУППИРОВАТЬ ПО
        |    втТаблица.Номенклатура.Родитель.Ссылка)";

Тоже пустой.
8 Рэйв
 
26.07.17
11:20
Может так?

//-------------------
ТЗ.Колонки.Добавить("Родитель");
Для каждого Стр из ТЗ Цикл
    Стр.Родитель=СТр.Номенклатура.Родитель;
КонецЦикла;

ТЗ.Свернуть("Родитель");
Запрос=Новый Запрос("Выбрать Спр.Ссылка Из Справочник.Номенклатура КАК Спр Где Спр.Ссылка В ИЕРАРХИИ(&Родители)");

Запрос.УстановитьПараметр("Родители",ТЗ.ВыгрузитьКолонку("Родитель"));
9 BFG9000
 
26.07.17
11:42
Проблема решена. Сам дурак, неправильно обрабатывал результат запроса.
Программист всегда исправляет последнюю ошибку.