Имя: Пароль:
1C
1С v8
Не обходит выборку по иерархии.
,
0 batmansoft
 
15.07.14
19:09
Добрый день. Подскажите пожалуйста, почему вот в такой программе:
Процедура ВыгрузитьНаСервере()
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура.Наименование,
    |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    |    ТоварыНаСкладахОстатки.Характеристика,
    |    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
    |    ТоварыНаСкладахОстатки.Характеристика.ДополнительныеРеквизиты.(
    |        Ссылка КАК Поле1,
    |        НомерСтроки КАК Поле2,
    |        Свойство КАК Поле3,
    |        Значение КАК Поле4,
    |        ТекстоваяСтрока КАК Поле5
    |    ) КАК Реквизиты
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(
    |            &Дата,
    |            &ПоВсей
    |                ИЛИ Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки
    |ИТОГИ ПО
    |    Номенклатура ИЕРАРХИЯ"
    ;
    Запрос.УстановитьПараметр("Дата",Объект.ДатаВыгрузки);
    Запрос.УстановитьПараметр("Номенклатура",Объект.ФильтрПоНоменклатуре);
    Запрос.УстановитьПараметр("ПоВсей",Не ЗначениеЗаполнено(Объект.ФильтрПоНоменклатуре));
    Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
    ОбходЗапроса(Выборка);
КонецПроцедуры


Процедура ОбходЗапроса(Выборка)
    Пока Выборка.Следующий() Цикл
        сообщить(Выборка.Номенклатура);
        ВыборкаНиже=Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
        ОбходЗапроса(ВыборкаНиже);
    КонецЦикла;
КонецПроцедуры

Выборка идет только до первого уровня, хотя в справочнике Номенклатуры есть и более низкие уровни?
1 mistеr
 
15.07.14
19:12
(0) Элементы от групп не отличаешь?
2 batmansoft
 
15.07.14
19:14
(1) Отличаю. В группе есть подгруппы. И их почему то не выводит.
3 Мимохожий Однако
 
15.07.14
19:27
Убери для начала
"|            &ПоВсей
|                ИЛИ
4 batmansoft
 
15.07.14
19:52
(3) Тоже самое
5 alle68
 
15.07.14
19:55
У метода "Выбрать" не хватает 2-го параметра.
6 Птица
 
15.07.14
19:56
(0) избыточное употребление иерархии
- или из запроса убери ИЕРАРХИЯ
- или обход запроса делай не по ПоГруппировкамСИерархией,
а по ПоГруппировкам
7 batmansoft
 
15.07.14
19:56
Если сделать вот так:
    Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
    ОбходЗапроса(Выборка);
КонецПроцедуры


Процедура ОбходЗапроса(Выборка)
    Пока Выборка.Следующий() Цикл
        сообщить(Выборка.Номенклатура);
        ВыборкаНиже=Выборка.Выбрать(); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
        ОбходЗапроса(ВыборкаНиже);
    КонецЦикла;
КонецПроцедуры
то почему то работает.
8 batmansoft
 
15.07.14
19:59
(6) Тоесть, это получается, что можно двумя способами получить иерархию? Либо через итоги, либо через выборку, та что ли?
9 Птица
 
15.07.14
20:00
(8) угу
10 batmansoft
 
15.07.14
20:34
еще подскажите пожалуйста, почему не попадает на самый нижний уровень (там где характеристики), когда я сделал вот так:
Процедура ВыгрузитьНаСервере()
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура.Наименование,
    |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    |    ТоварыНаСкладахОстатки.Характеристика,
    |    ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
    |    ТоварыНаСкладахОстатки.Характеристика.ДополнительныеРеквизиты.(
    |        Ссылка КАК Ссылка,
    |        Свойство КАК Свойство,
    |        Значение КАК Значение
    |    ) КАК Реквизиты,
    |    ТоварыНаСкладахОстатки.Номенклатура.ЭтоГруппа КАК ЭтоГруппа
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки(
    |            &Дата,
    |            &ПоВсей
    |                ИЛИ Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК ТоварыНаСкладахОстатки
    |ИТОГИ ПО
    |    Номенклатура ИЕРАРХИЯ"
    ;
    Запрос.УстановитьПараметр("Дата",Объект.ДатаВыгрузки);
    Запрос.УстановитьПараметр("Номенклатура",Объект.ФильтрПоНоменклатуре);
    Запрос.УстановитьПараметр("ПоВсей",Не ЗначениеЗаполнено(Объект.ФильтрПоНоменклатуре));
    //Объект.ТЗ=Запрос.Выполнить().Выгрузить();
    Выборка=Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
    ОбходЗапроса(Выборка);
КонецПроцедуры


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


Остатки по характеристикам есть.
11 batmansoft
 
15.07.14
20:36
О, блин, пародн.
Надо Если НЕ Выборка.ЭтоГруппа Тогда    
сосем заработлася
Ошибка? Это не ошибка, это системная функция.