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

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

  
Сообщений: 4

-1
Помогите разобраться моей задачей. Уже 3-й день мучаю и множество вариантов перепробовал, но так и не добился необходимого результата.

Задача следующая: Есть регистр накопления ТМЦ (партионный учет товара на складах), Необходимо построить отчет остатки товаров на складах по группировкам.

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

И т.д.

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

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

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

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

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

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

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


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

Проблема заключается в том что Обход по группировкам запроса выполнить неполучается, всевремя обходит по группировке ТМЦ, а если я изменяю
ВыборкаПоСкладу = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
на
ВыборкаПоСкладу = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Склад");
то выдает ошибку о том что данной группировки не существует.
Помогите пожалуйста. Буду Вам очень признателен!
Сообщений: 2

0
Необходимо добавить
ИТОГИ
СУММА(КоличествоОстаток),СУММА(СуммаЗакупкиОстаток)
ПО Склад,ТМЦ

Если отсутствуют Итоги, то не сможешь сделать Обход ПоГруппировкам, ты из компании тех, кто путают понятия группировки по итогам с СГРУППИРОВАТЬ ПО
В начало страницы 
|
Перейти на форум: