|
Вывод запроса с обработкой результата в табдок с иерархией | ☑ | ||
---|---|---|---|---|
0
Кто-то-кто
07.08.18
✎
21:44
|
Доброго времени суток. Продолжаю марафон глупых вопросов и умных ответов, но ближе к телу:
Есть запрос: &НаСервере Процедура СерверЗаполнитьТабличныйДокумент(АдресХранилища, ТабДок); ТЗ = ПолучитьИзВременногоХранилища(АдресХранилища); //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Макет = Обработки.ДеревоРесурсныхСпецификаций.ПолучитьМакет("МакетРасчетПотребностей"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Данные.Номенклатура, | Данные.ЕдиницаИзмерения, | Данные.Количество, | Данные.Разница |ПОМЕСТИТЬ ТЗ |ИЗ | &Данные КАК Данные |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТЗ.Номенклатура КАК Спецификация, | ТЗ.ЕдиницаИзмерения, | ТЗ.Количество КАК Количество, | СвободныеОстатки.Номенклатура КАК Номенклатура, | СвободныеОстатки.Склад, | СвободныеОстатки.ВНаличии КАК ВНаличии, | ВЫБОР | КОГДА СвободныеОстатки.ВНаличии > ТЗ.Количество | ТОГДА 0 | ИНАЧЕ ТЗ.Количество - СвободныеОстатки.ВНаличии | КОНЕЦ КАК Разница |ИЗ | ТЗ КАК ТЗ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки КАК СвободныеОстатки | ПО ТЗ.Номенклатура = СвободныеОстатки.Номенклатура |ГДЕ | НЕ ТЗ.Номенклатура ЕСТЬ NULL | |СГРУППИРОВАТЬ ПО | ТЗ.Номенклатура, | ТЗ.ЕдиницаИзмерения, | ТЗ.Количество, | СвободныеОстатки.Номенклатура, | СвободныеОстатки.Склад, | СвободныеОстатки.ВНаличии, | ТЗ.Разница"; Запрос.УстановитьПараметр("Данные", ТЗ); РезультатЗапроса = Запрос.Выполнить(); ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы"); ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали"); ТабДок.Очистить(); ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапкаТаблицы); ТабДок.НачатьАвтогруппировкуСтрок(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень()); КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.Вывести(ОбластьПодвалТаблицы); ТабДок.Вывести(ОбластьПодвал); "Задолго до сотворения мира" - я разбираю СтруктуруДерева, передаю в ТаблицуЗначений, умножаю на нужное мне число колонку "количество", передаю в запрос и на выходе имею запрос с обработкой результата и выводом в ТабДок. выводятся следующие поля: 1)Спецификация - дерево, что пройдено и кинуто в ТЗ 2)ЕдИзм - понятно (дерево) 3) Кол-во - (дерево) по умолчанию 1, умножаю на вводимое от руки число 4)Номенклатура - сопоставляется по левому соединению (регистр) 5)Склад - где лежит (регистр) 6)ВНаличии - остаток (регистр) 7)Разница - 3-6 - (вычисляю) Получаю вполне себе табдок(если выровнять по середине) с нужными данными. Вопрос века: Спецификация (то что грузится в ТЗ из Дерева) заполняется по 4 колонкам с объявленными типами: Номенклатура, ЕдИзм, Кол-во и Разница. Как дерево прочиталось, так и положилось Пример - В Позицию1 входят Позиция2 и Позиция3, В Позицию2 входят Позиции с 0 по 10, в Позицию3 так же входят позиции с 0 по 10 и так далее... Все выводится, все считается, все отлично... Объясните дураку, как сделать так чтобы все это в табдок выводилось так же в форме дерева... Поз1+ Поз2+ что-то1 что-то2 что-то3 что-то1 что-то2 что-то4 Поз3+ Что-то1 Что-то2 Что-то1 Что-то2 Что-то3 и.т.д скд не предлагать, до...фига переписывать. хотелось бы все реализовать именно с учетом запроса с обработкой результата и выводом в табдок. |
|||
1
Cyberhawk
07.08.18
✎
21:45
|
Какому телу?
|
|||
2
Кто-то-кто
07.08.18
✎
21:52
|
(1) Ближе к делу (телу запроса, моему трупу - тут уж кому что нравится)
|
|||
3
DrShad
07.08.18
✎
21:58
|
на СКД вообще ничего переписывать не нужно чтобы вывести твою иерархию
|
|||
4
Кто-то-кто
07.08.18
✎
22:01
|
И тем не менее, возможно ли это реализовать с учетом того что имеется?
|
|||
5
DrShad
07.08.18
✎
22:06
|
ну когда-то же, еще на клюшках, делали - значит возможно
|
|||
6
AnisaL
07.08.18
✎
22:09
|
(4) вот я недавно делала отчет с выводом в табдок с иерархией, может поможет
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы"); ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы"); ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщиеИтоги"); ОбластьПериод = Макет.ПолучитьОбласть("Период"); ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура"); ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали"); ТабДок.Очистить(); ТабДок.Вывести(ОбластьЗаголовок); ТабДок.Вывести(ОбластьШапкаТаблицы); ТабДок.НачатьАвтогруппировкуСтрок(); ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ВыборкаОбщийИтог.Следующий(); // Общий итог ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог); ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень()); ВыборкаПериод = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПериод.Следующий() Цикл ОбластьПериод.Параметры.Заполнить(ВыборкаПериод); ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень()); ВыборкаНоменклатура = ВыборкаПериод.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаНоменклатура.Следующий() Цикл ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура); ТабДок.Вывести(ОбластьНоменклатура, ВыборкаНоменклатура.Уровень()); ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетальныеЗаписи); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетальныеЗаписи.Уровень()); КонецЦикла; КонецЦикла; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.ПоказатьУровеньГруппировокСтрок(0); |
|||
7
Кто-то-кто
07.08.18
✎
22:13
|
(6) в цикле выборки сделать отдельный цикл выборки по номенклатуре... и ее уже обойти по группировкам с учетом уровней, а дальше уже выводить все остальное - спасибо, это мысль!)
|
|||
8
AnisaL
07.08.18
✎
22:15
|
(7) пожалуйста :)
|
|||
9
Кто-то-кто
07.08.18
✎
23:05
|
Увы, видимо я все таки воробушек с лапками - ничего не меняется. В любом случае спасибо, буду копать дальше =)
|
|||
10
Cyberhawk
07.08.18
✎
23:36
|
Что за воробушек?
|
|||
11
Кто-то-кто
07.08.18
✎
23:48
|
Воробушек который тупой =)
|
|||
12
МихаилМ
07.08.18
✎
23:58
|
(11)
просто Вы не знакомы с азами программирования. может Вам стоит сменить работу. |
|||
13
Кто-то-кто
08.08.18
✎
00:02
|
(12) Ну мести улицы так же профессионально как дворник я тоже не умею и азов подметания так же не знаю) но к совету прислушаюсь, со временем) спасибо!
|
|||
14
МихаилМ
08.08.18
✎
00:11
|
(13) мести улицы можно научиться за месяц, а программировать - года за 2 минимум.
|
|||
15
Кто-то-кто
08.08.18
✎
00:16
|
Я пожалуй поучусь, время терпит. До пенсии все равно не дотяну)
Оффтоп разводить не вижу смысла. AnisaL спасибо за годную подсказку, остальным спасибо за конструктивную критику =) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |