Имя: Пароль:
1C
1С v8
Обход запроса по группировкам
0 эцп
 
10.10.11
17:18
|ИТОГИ
|    СУММА(КоличествоОстаток)
|ПО
|    Номенклатура,
|    Характеристика";

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

Можно ли такую конструкцию сократить до 2 циклов путем объединения первого и второго цикла в один?
1 Лефмихалыч
 
10.10.11
17:19
(10) замени итоги на группировку
2 эцп
 
10.10.11
17:19
(0) сорри, вот так:
|ИТОГИ
|    СУММА(КоличествоОстаток)
|ПО
|    Номенклатура,
|    Характеристика";

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

Можно ли такую конструкцию сократить до 2 циклов путем объединения первого и второго цикла в один?
3 эцп
 
10.10.11
17:20
(1) Не понял, поясни
4 Ненавижу 1С
 
гуру
10.10.11
17:21
можно, а зачем?
5 Лефмихалыч
 
10.10.11
17:22
или даже просто вообще удали итоги нафиг. Судя по "КоличествоОстаток", ты получаешь данные из виртуальной таблицы, а они уже и так сгруппированы.
6 Maxus43
 
10.10.11
17:22
если используеш ИТОГИ то у тебя в результате Дерево. дерево обходится в зависимсости от уровня вложенности... если дерево не надо то Обход результата ПРЯМОЙ сделай, но хз что будет в выборке тогда
7 Лефмихалыч
 
10.10.11
17:23

Запрос = Новый Запрос("Выбрать Номенклатура, Характеристика, КоличествоОстаток ИЗ РегистрНакопления.ТОварыНаСкладах.Остатки()");
Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
КонецПока
8 Лефмихалыч
 
10.10.11
17:24
(6) таблица, в которой итоговые строки будут содержать NULL для не суммируемых и не группировочных полей
9 эцп
 
10.10.11
17:33
(4) Как?
(5) Выборка производится из двух регистров (остатки одного вычитаются из остатков другого)
(6) Дерево надо: на какой-то ветви дерева (см. комментарии в коде) нужно принять решение, идти к листьям (3 уровень вложенности) или нет, поэтому плоский запрос не подходит
10 эцп
 
10.10.11
17:41
Хотел бы сократить до такого варианта, но 1Ска ругается благим матом

Выборка1 = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Номенклатура,Характеристика");
Пока Выборка1.Следующий() Цикл
   //Здесь проверяются каке-то условия
   Если не {удовлетворяет условию} Тогда Продолжить; КонецЕсли;
   Выборка3 = Выборка1.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
   Пока Выборка3.Следующий() Цикл
       //Тело цикла
   КонецЦикла;
КонецЦикла;
11 unregistered
 
10.10.11
18:00
Почему условие нельзя в запросе написать? Зачем его проверять именно при обходе?
12 эцп
 
10.10.11
18:27
(11) Условие в запросе сработает на самом нижнем уровне группировки, а мне нужно проверить на 2 уровне
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.