Modber Сообщество
профессионалов по 1С

Обход результата запроса по группировкам 1С 8.

  
Сообщений: 41

+2
Нужна помощь в решении задачи. Три дня мучаю, пробовал массу вариаций, но нужного результата не получается.
Условия задачи: Имеется регистр накопления ТМЦ (партионный учет товара на складах). Нужно создать отчет – «остатки товаров по группировкам на складах».

--Склад-
| |- ТМЦ-
| | |- партия-
| | |- партия-
| |- ТМЦ-
| | |- партия-
| | |- партия-
--Склад-
| |- ТМЦ-
| | |- партия-

И т.д.

Вывести отчет следует в свой макет без применения построителя.
Это мой запрос и его вывод в форму:

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

КонецЕсли;
Иначе
Если ТабличнаяЧастьТМЦ.Количество() <> 0 Тогда
Запрос.Текст = Запрос.Текст+"
|ГДЕ
| ТМЦОстатки.ТМЦ В (&ТМЦ)";
Иначе

КонецЕсли;
КонецЕсли;
Запрос.Текст = Запрос.Текст+"
|
|СГРУППИРОВАТЬ ПО
| ТМЦОстатки.Склад,
| ТМЦОстатки.ТМЦ,
| ТМЦОстатки.Дата
|УПОРЯДОЧИТЬ ПО
| Склад,
| ТМЦ,
| Дата";

Запрос.УстановитьПараметр("Период",КонецДня(ДатаОтчета));
Если ПоСкладам = Истина Тогда
Если Не Склад.Пустая() И ТабличнаяЧастьТМЦ.Количество() <> 0 Тогда
Запрос.УстановитьПараметр("Склад",Склад.Ссылка);
Запрос.УстановитьПараметр("ТМЦ",МассивТМЦ);
ИначеЕсли Не Склад.Пустая() И ТабличнаяЧастьТМЦ.Количество() = 0 Тогда
Запрос.УстановитьПараметр("Склад",Склад.Ссылка);
ИначеЕсли Склад.Пустая() И ТабличнаяЧастьТМЦ.Количество() <> 0 Тогда
Запрос.УстановитьПараметр("ТМЦ",МассивТМЦ);
ИначеЕсли Склад.Пустая() И ТабличнаяЧастьТМЦ.Количество() = 0 Тогда

КонецЕсли;
Иначе
Если ТабличнаяЧастьТМЦ.Количество() <> 0 Тогда
Запрос.УстановитьПараметр("ТМЦ",МассивТМЦ);
Иначе

КонецЕсли;
КонецЕсли;
// Обойти запрос группировками ..............

// Вывести по результатам группировок отчет


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

Проблема в том, что Обход по запрашиваемым группировкам сделать не получается, постоянно обходит по ТМЦ группировке, а когда я меняю

ВыборкаПоСкладу = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
на
ВыборкаПоСкладу = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Склад");
то выдается ошибка — не существует такой группировки.
Кто может – помогите разобраться!
Сообщений: 50

0
ты подпадаешь под значительный тип лиц, путающих постоянно СГРУППИРОВАТЬ ПО и группировку по итогам.
(2) добавь
ИТОГИ
СУММА(КоличествоОстаток),СУММА(СуммаЗакупкиОстаток)
ПО Склад,ТМЦ
В начало страницы 
|
Перейти на форум: