ЗАПРОС с иерархией без СКД

1. qqwweerrttyy160679 9 09.06.15 12:33 Сейчас в теме
Платформа 8.3.5
Делаю отчет "Остатки товаров". Запрос берет остатки из регистра накопления. Подскажите как привести его к нужному виду.
Картинки прикрепляю, базу на всякий случай тоже

//Область остатки
	ЗапросОстатков = Новый Запрос;
	ЗапросОстатков.Текст =
	    "ВЫБРАТЬ
        |	РН_ОстаткиТоваровОстатки.Организация КАК Организация,
        |	РН_ОстаткиТоваровОстатки.Склад КАК Склад,
        |	РН_ОстаткиТоваровОстатки.Номенклатура КАК Номенклатура,
        |	РН_ОстаткиТоваровОстатки.Цена КАК Цена,
        |	РН_ОстаткиТоваровОстатки.КоличествоОстаток КАК КоличествоОстаток
        |ИЗ
        |	РегистрНакопления.РН_ОстаткиТоваров.Остатки(
        |			&Период,
        |			Организация = &Организация
        |				И Склад В ИЕРАРХИИ (&Склад)
        |				И Номенклатура В ИЕРАРХИИ (&Номенклатура)) КАК РН_ОстаткиТоваровОстатки
        |ИТОГИ
        |	СУММА(КоличествоОстаток)
        |ПО
        |	Организация,
        |	Склад ИЕРАРХИЯ,
        |	Номенклатура ИЕРАРХИЯ";
	
	ЗапросОстатков.УстановитьПараметр("Организация"         , Отчет.Организация);
	ЗапросОстатков.УстановитьПараметр("Склад"               , Отчет.Склад);
	ЗапросОстатков.УстановитьПараметр("Номенклатура"        , Отчет.Номенклатура);
	Если ЭтотОбъект.НаКонецДня Тогда
	     ЗапросОстатков.УстановитьПараметр("Период"         , КонецДня(Отчет.ДатаОстатка));
	Иначе
	     ЗапросОстатков.УстановитьПараметр("Период"         , НачалоДня(Отчет.ДатаОстатка));
	КонецЕсли;
	
	РезультатЗапроса = ЗапросОстатков.Выполнить();
	ВыборкаОстатков = РезультатЗапроса.Выбрать();
	
	ОбластьОстатки = Макет.ПолучитьОбласть("Остатки");
	
	Пока ВыборкаОстатков.Следующий() Цикл
		//**************
	КонецЦикла;


	
    ТабДок.Вывести(ОбластьОстатки);
Показать
Прикрепленные файлы:
info_base.dt
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
39. karpik666 3761 10.06.15 09:55 Сейчас в теме
Немного переделал, чтобы и иерархия номенклатуры отображалась
Прикрепленные файлы:
1Cv8.dt
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. ture 606 09.06.15 13:00 Сейчас в теме
(1) qqwweerrttyy160679, я всегда на СКД делаю и прячу кнопарик "изменить Вариант"
4. Fragster 1138 09.06.15 13:33 Сейчас в теме
(1) qqwweerrttyy160679,

Выборка = Результат.Выбрать(); // обход прямой!!

Пока Выборка.Следующий() Цикл
  Если Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке И Выборка.Группировка() = "Организация" Тогда
    ИмяОбласти = ....
  ИначеЕсли ...

  КонецЕсли;

  Область = Макет.ПолучитьОбласть(ИмяОбласти);
  Область.Параметры.Заполнить(Выборка);
  ТабДок.Вывести(Область);

КонецЦикла;
Показать
5. Fragster 1138 09.06.15 13:35 Сейчас в теме
(4)+ единственное, отступ для иерархии надо будет делать ручками, ну да это не сложно
7. qqwweerrttyy160679 9 09.06.15 13:37 Сейчас в теме
(4) Fragster, У меня группировка идет не только по организации, но и по группам складов, складам, группам номенклатура, подгруппам номенклатуры и цене номенклатуры. Во как!
9. Fragster 1138 09.06.15 13:59 Сейчас в теме
(7) qqwweerrttyy160679, ну я по этому там "если" и написал. В нем надо имя нужной области макета получать
31. vadim28 09.06.15 17:14 Сейчас в теме
(1) qqwweerrttyy160679, Это конечно, не СКД, но как вариант могу предложить. Работать будет быстро и правильно.
1. Добавить в запрос:
|Сгруппировать По
| Организация,
| Склад,
| Номенклатура,
| Цена
2. в Макет добавляете соответствующие области "Организация", "Склад", "Номенклатура", "Строка". в каждой строки по 3 параметра, как в таблице на картинке (наименование, кол-во, сумма).
3. Организовываем сам процесс выборки из запроса.
33. vadim28 09.06.15 17:44 Сейчас в теме
(31) vadim28, Роутер повис не отправил всё что набирал, ну да ладно. В кратце так:
Результат = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ТабличныйДокумент.НачатьАвтогруппировкуСтрок();
ТабличныйДокумент.НачатьГруппуСтрок();
Пока Результат.Следующий() Цикл //Органицазию
ОбластьОрг.параметр.Наименование = Результат.Организация;
......
......
ТабличныйДокумент.НачатьАвтогруппировкуСтрок();
ТабличныйДокумент.НачатьГруппуСтрок();
РезультатСклад = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока РезультатСклад.Следующий() Цикл // выводим Склады
ОбластьДок.Параметры.Наименование = РезультатСклад.Наименование;
.....
......
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
Как-то так, только у вас будет ещё и По номенклатуре и по цене циклы.

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

РезультатЦена = РезультатНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока РезультатЦена.Следующий() Цикл // выводим Номенклатуру по цене
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
КонецЦикла;
ТабличныйДокумент.ЗакончитьГруппуСтрок();
ТабличныйДокумент.ЗакончитьАвтогруппировкуСтрок();
36. nSpirit2 09.06.15 17:48 Сейчас в теме
(33) vadim28,
РезультатСклад = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Что то мне подсказывает что вот это не сработает :) Вы попробуйте обход с иерархией написать :)
37. ture 606 09.06.15 18:17 Сейчас в теме
(1) qqwweerrttyy160679, мы здесь так сумбурно высказались все, вам удалось получить ответ на свой вопрос?
40. qqwweerrttyy160679 9 11.06.15 10:52 Сейчас в теме
(37) ture,
karpik, vadim28 были ближе всех.
3. qqwweerrttyy160679 9 09.06.15 13:31 Сейчас в теме
Мне не нужно на СКД. Мне нужно так.
6. Fragster 1138 09.06.15 13:36 Сейчас в теме
ОбластьЯчеекТабличногоДокумента (SpreadsheetDocumentRange)
Отступ (Indent)
Использование:

Чтение и запись.
Описание:

Тип: Число.
Отступ текста от края ячейки в символах.
8. qqwweerrttyy160679 9 09.06.15 13:39 Сейчас в теме
и Еще нужно чтобы были слева плюсики (свертка по группам как в консоли запросов на картинке)
10. Fragster 1138 09.06.15 14:01 Сейчас в теме
(8) qqwweerrttyy160679, это немного сложнее. нужно в зависимости от изменения Выборка.Уровень() для недетальных (выборка.ТипЗаписи) записей либо ТабДок.НачатьАвтогруппировкуСтрок() (при увеличении уровня) либо ЗакончитьАвтогруппировкуСтрок() (при уменьшении уровня) перед выводом области в ТабДок.
29. ture 606 09.06.15 16:27 Сейчас в теме
(8) qqwweerrttyy160679, плюсик, папочки - это все стандартный набор, который уже сразу есть в СКД. Это как "Кристал репорт" юзать сразу, а не с нуля интерфейс отчета колбасить. Хотя СКД конечно мощнее кристала, но это уже другая история.

Сразу концентрируйтесь на современных технологиях, вы ведь не с 1С77 начали изучать 8-ку.
11. Fragster 1138 09.06.15 14:02 Сейчас в теме
Кстати, в отступ можно Выборка.Уровень() и запихивать
12. qqwweerrttyy160679 9 09.06.15 14:20 Сейчас в теме
А может как-нибудь видоизменить сам запрос? чтобы не заморачиваться с (ТабДок.НачатьАвтогруппировкуСтрок()) и (Выборка.Уровень())
30. ditp 91 09.06.15 16:46 Сейчас в теме
(12) qqwweerrttyy160679, если не хочешь ни СКД использовать, ни код писать - используй построитель отчета.
13. qqwweerrttyy160679 9 09.06.15 15:26 Сейчас в теме
ни каких предложений?
14. nSpirit2 09.06.15 15:29 Сейчас в теме
(13) qqwweerrttyy160679, Итоги с видом иерархия не пробовали ? )
15. qqwweerrttyy160679 9 09.06.15 15:39 Сейчас в теме
(14) nSpirit2,
А у меня и есть итоги с иерархией

вот же в запросе
|ИТОГИ
| СУММА(КоличествоОстаток)
|ПО
| Организация,
| Склад ИЕРАРХИЯ,
| Номенклатура ИЕРАРХИЯ";
25. tarassov 111 09.06.15 16:14 Сейчас в теме
(15) qqwweerrttyy160679,
зачем "Номенклатура ИЕРАРХИЯ"?
Может лучше "Номенклатура ТОЛЬКО ИЕРАРХИЯ"?
28. ture 606 09.06.15 16:24 Сейчас в теме
(15) qqwweerrttyy160679, Ну есть итоги, но есть они только в модели "выборка".
Выборка, а в ней другая выборка. На деле просто фильтр на исходный рекорд сет. Ну есть суммовые итоги, но по сути - это обертка на обертке.
16. qqwweerrttyy160679 9 09.06.15 15:41 Сейчас в теме
В консоле запросов на картинке же видно что итоги - ИЕРАРХИЯ.
17. nSpirit2 09.06.15 15:44 Сейчас в теме
(16) qqwweerrttyy160679, Ну да а вы что хотите чтобы вы в запросе выбирали в разные колонки а итоги у вас собирались все в 1 ?
18. qqwweerrttyy160679 9 09.06.15 15:52 Сейчас в теме
(17) nSpirit2,
Ну вот я и спрашиваю как можно реализовать. В СКД все просто, показываешь иерархию полей и всё, а тут как сделать ума не приложу.
Здесь должен быть какой-то сложный механизм обхода результата запроса и вывода его в ТЧ
19. nSpirit2 09.06.15 15:58 Сейчас в теме
(18) qqwweerrttyy160679, Вы что на выходе то получить хотите ? XLS ?
20. Fragster 1138 09.06.15 15:59 Сейчас в теме
(18) qqwweerrttyy160679, можно сложно обходить, можно использовать (4). это реально будет работать. Можно даже с одной областью, если не надо разное оформление. Только тогда надо в Если вместо получения имени области сделать заполнение параметров.
21. Fragster 1138 09.06.15 16:03 Сейчас в теме
(20)+ В зависимости от того, на какой группировке мы находимся (и являются ли это итоги по группе или по элементу) будет разный Выборка.ТипЗаписи(), Выборка.Группировка() и Выборка.Уровень(). Если хочется сложно - то тогда надо писать кучу вложенных циклов, а для иерархии - еще и рекурсивных.
22. qqwweerrttyy160679 9 09.06.15 16:04 Сейчас в теме
(20) Fragster,
Так вот же нужно чтобы группы отображались жирным шрифтом. Нужны плюсики сворачивания и разворачивания групп и чтобы итоги подставлялись в каждую подргуппу и группу по номенклатуре, складам и подразделениям.
23. nSpirit2 09.06.15 16:05 Сейчас в теме
(22) qqwweerrttyy160679, Я может че не понимаю что вам мешает СКД то генерировать свой ТабДок зачем все эти фокусы с запросами ? )
24. qqwweerrttyy160679 9 09.06.15 16:10 Сейчас в теме
26. nSpirit2 09.06.15 16:15 Сейчас в теме
(24) qqwweerrttyy160679, Цель сделать костыль ?
27. ture 606 09.06.15 16:21 Сейчас в теме
(24) qqwweerrttyy160679, зачем использовать старую технологию?
32. zikonza 09.06.15 17:37 Сейчас в теме
дохлый номер, многоуровненый цикл и обходи выборку, цель блин
34. Fragster 1138 09.06.15 17:45 Сейчас в теме
(32) zikonza, можно без вложенных циклов, автору был показан пример кода в (4), но она так не хочет, видимо.

(24) что уже сделано, кроме запроса?
35. vadim28 09.06.15 17:46 Сейчас в теме
(32) zikonza, работает очень быстро. Проверено.
38. karpik666 3761 10.06.15 09:32 Сейчас в теме
Сделал, как вам нужно
Прикрепленные файлы:
1Cv8.dt
39. karpik666 3761 10.06.15 09:55 Сейчас в теме
Немного переделал, чтобы и иерархия номенклатуры отображалась
Прикрепленные файлы:
1Cv8.dt
41. laf 08.07.15 03:17 Сейчас в теме
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)