ЗАПРОС с иерархией без СКД
Платформа 8.3.5
Делаю отчет "Остатки товаров". Запрос берет остатки из регистра накопления. Подскажите как привести его к нужному виду.
Картинки прикрепляю, базу на всякий случай тоже
Делаю отчет "Остатки товаров". Запрос берет остатки из регистра накопления. Подскажите как привести его к нужному виду.
Картинки прикрепляю, базу на всякий случай тоже
//Область остатки
ЗапросОстатков = Новый Запрос;
ЗапросОстатков.Текст =
"ВЫБРАТЬ
| РН_ОстаткиТоваровОстатки.Организация КАК Организация,
| РН_ОстаткиТоваровОстатки.Склад КАК Склад,
| РН_ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
| РН_ОстаткиТоваровОстатки.Цена КАК Цена,
| РН_ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоОстаток
|ИЗ
| РегистрНакопления.РН_ОстаткиТоваров.Остатки(
| &Период,
| Организация = &Организация
| И Склад В ИЕРАРХИИ (&Склад)
| И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК РН_ОстаткиТоваровОстатки
|ИТОГИ
| СУММА(КоличествоОстаток)
|ПО
| Организация,
| Склад ИЕРАРХИЯ,
| Номенклатура ИЕРАРХИЯ";
ЗапросОстатков.УстановитьПараметр("Организация" , Отчет.Организация);
ЗапросОстатков.УстановитьПараметр("Склад" , Отчет.Склад);
ЗапросОстатков.УстановитьПараметр("Номенклатура" , Отчет.Номенклатура);
Если ЭтотОбъект.НаКонецДня Тогда
ЗапросОстатков.УстановитьПараметр("Период" , КонецДня(Отчет.ДатаОстатка));
Иначе
ЗапросОстатков.УстановитьПараметр("Период" , НачалоДня(Отчет.ДатаОстатка));
КонецЕсли;
РезультатЗапроса = ЗапросОстатков.Выполнить();
ВыборкаОстатков = РезультатЗапроса.Выбрать();
ОбластьОстатки = Макет.ПолучитьОбласть("Остатки");
Пока ВыборкаОстатков.Следующий() Цикл
//**************
КонецЦикла;
ТабДок.Вывести(ОбластьОстатки);
ПоказатьПрикрепленные файлы:
По теме из базы знаний
Найденные решения
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) qqwweerrttyy160679,
Выборка = Результат.Выбрать(); // обход прямой!!
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке И Выборка.Группировка() = "Организация" Тогда
ИмяОбласти = ....
ИначеЕсли ...
КонецЕсли;
Область = Макет.ПолучитьОбласть(ИмяОбласти);
Область.Параметры.Заполнить(Выборка);
ТабДок.Вывести(Область);
КонецЦикла;
Показать
(1) qqwweerrttyy160679, Это конечно, не СКД, но как вариант могу предложить. Работать будет быстро и правильно.
1. Добавить в запрос:
|Сгруппировать По
| Организация,
| Склад,
| Номенклатура,
| Цена
2. в Макет добавляете соответствующие области "Организация", "Склад", "Номенклатура", "Строка". в каждой строки по 3 параметра, как в таблице на картинке (наименование, кол-во, сумма).
3. Организовываем сам процесс выборки из запроса.
1. Добавить в запрос:
|Сгруппировать По
| Организация,
| Склад,
| Номенклатура,
| Цена
2. в Макет добавляете соответствующие области "Организация", "Склад", "Номенклатура", "Строка". в каждой строки по 3 параметра, как в таблице на картинке (наименование, кол-во, сумма).
3. Организовываем сам процесс выборки из запроса.
(31) vadim28, Роутер повис не отправил всё что набирал, ну да ладно. В кратце так:
Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ТабличныйДокумент.НачатьАвтогруппировкуСтрок();
ТабличныйДокумент.НачатьГруппуСтрок();
Пока Результат.Следующий() Цикл //Органицазию
ОбластьОрг.параметр.Наименование = Результат.Организация;
......
......
ТабличныйДокумент.НачатьАвтогруппировкуСтрок();
ТабличныйДокумент.НачатьГруппуСтрок();
РезультатСклад = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока РезультатСклад.Следующий() Цикл // выводим Склады
ОбластьДок.Параметры.Наименование = РезультатСклад.Наименование;
.....
......
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
Как-то так, только у вас будет ещё и По номенклатуре и по цене циклы.
РезультатНоменклатура = РезультатСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока РезультатНоменклатура.Следующий() Цикл // выводим Номенклатуру
РезультатЦена = РезультатНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока РезультатЦена.Следующий() Цикл // выводим Номенклатуру по цене
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ТабличныйДокумент.НачатьАвтогруппировкуСтрок();
ТабличныйДокумент.НачатьГруппуСтрок();
Пока Результат.Следующий() Цикл //Органицазию
ОбластьОрг.параметр.Наименование = Результат.Организация;
......
......
ТабличныйДокумент.НачатьАвтогруппировкуСтрок();
ТабличныйДокумент.НачатьГруппуСтрок();
РезультатСклад = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока РезультатСклад.Следующий() Цикл // выводим Склады
ОбластьДок.Параметры.Наименование = РезультатСклад.Наименование;
.....
......
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
Как-то так, только у вас будет ещё и По номенклатуре и по цене циклы.
РезультатНоменклатура = РезультатСклад.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока РезультатНоменклатура.Следующий() Цикл // выводим Номенклатуру
РезультатЦена = РезультатНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока РезультатЦена.Следующий() Цикл // выводим Номенклатуру по цене
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
(8) qqwweerrttyy160679, это немного сложнее. нужно в зависимости от изменения Выборка.Уровень() для недетальных (выборка.ТипЗаписи) записей либо ТабДок.НачатьАвтогруппировкуСтрок() (при увеличении уровня) либо ЗакончитьАвтогруппировкуСтрок() (при уменьшении уровня) перед выводом области в ТабДок.
(8) qqwweerrttyy160679, плюсик, папочки - это все стандартный набор, который уже сразу есть в СКД. Это как "Кристал репорт" юзать сразу, а не с нуля интерфейс отчета колбасить. Хотя СКД конечно мощнее кристала, но это уже другая история.
Сразу концентрируйтесь на современных технологиях, вы ведь не с 1С77 начали изучать 8-ку.
Сразу концентрируйтесь на современных технологиях, вы ведь не с 1С77 начали изучать 8-ку.
(20)+ В зависимости от того, на какой группировке мы находимся (и являются ли это итоги по группе или по элементу) будет разный Выборка.ТипЗаписи(), Выборка.Группировка() и Выборка.Уровень(). Если хочется сложно - то тогда надо писать кучу вложенных циклов, а для иерархии - еще и рекурсивных.
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)