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

  
Сообщений: 41

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

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