1с табличную часть деревом значений

Табличная часть в Дерево значений

Сгруппировываю по паллет/наименование и суммирую коробки/вес
Тк в одном паллете могут быть разные наименования, не получится увидеть сумму коробок и веса по паллету.

И потому хочу по красоте из табличной части «Перепись» сделать Дерево значений «ДЗ», где Родителями будут значения из колонки «Паллет». Чтобы можно было увидеть примерно такой результат:

+Паллет1 /12/123
.Товар1 /10/111
.Товар2 /2/12

+Паллет2 /3/22
.Товар1 /1/10
.Товар2 /2/12

То что находил в интернете адаптировать не смог. У меня точно известно что у родителя всего один подуровень. Помогите с реализацией задумки. Спасибо

Добился результата таким кодом:

&НаСервере Процедура ВДЗНаСервере() ЗначениеВРеквизитФормы(ТаблицаЗначенийВДеревоЗначений(РеквизитФормыВЗначение("Перепись"),"Паллет"),"ДЗ"); КонецПроцедуры &НаСервере Функция ТаблицаЗначенийВДеревоЗначений(ТЗ, ГруппировкаКолонка) Экспорт ПЗ = Новый ПостроительЗапроса; ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);//передаем ТЗ ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять; ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка].Измерение = Истина;//по этой колонке идет группировка ПЗ.ЗаполнитьНастройки(); ПЗ.Выполнить(); Дерево = ПЗ.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Возврат Дерево; КонецФункции

Но нет суммы колонок в родителе, есть идеи как реализовать?

(0) >> Но нет суммы колонок в родителе

«Тк в одном паллете могут быть разные наименования, не получится увидеть сумму коробок и веса по паллету.» Основная задача. Мне удалось только Сгруппировать по Паллету, а сумму я не вижу

(12) ДЗ имеет такие колонки: Паллет/Наименование/Коробки/Вес
в сумме должны быть и штуки(коробки) и киллограммы(вес).
В итоге строка Родителя должна выглядеть так : Паллет1/(пусто)/12(это коробки)/123 (это киллограммы)

(0) Вот Вы пишете «Сгруппировываю по паллет/наименование и суммирую коробки/вес»

Что мешает сгруппировать по «паллет» и суммировать «коробки/вес»?

https://ibb.co/4m7pGCC — Изначальные данные полученные из ТСД
Далее я их группирую в отдельное табличное поле по Паллету, Наименованию и суммирую коробки и вес паллета и с определенным наименованием (верхняя таблица) https://ibb.co/MgH8THT
Получаю в ДЗ (нижняя таблица) группировку по родителю, мне не хватает сумм ДЗ по подчиненным родителю строкам в колонках «Мест» и «Вес» (уж извините что не все наименования колонок совпадают из первого топика, надеялся что так задача будет понятней)

(17) Теперь группируйте данные по паллету, без наименования, суммируя коробки и вес.

Читайте также:  Какие деревья любят опилки

Кстати, у Вас на скриншоте нет коробок (или мест)

(18) «(уж извините что не все наименования колонок совпадают из первого топика, надеялся что так задача будет понятней)»
Подскажете как должен выглядеть код?

(19) Вам не нужно дерево значений. Вам нужен отчёт на СКД к табличной части. В запросе нужны итоги по группировкам

(21) Я в программировании 1с совсем зеленый. Я раньше такого не делал и с ходу на ум приходит куча вопросов.
1. Как без запроса получить данные для отчета, ведь я данные не сохраняю (все манипуляции должны быть произведены до сохранения) и не умею к ним обращаться без этого «выбрать * из Документ.Тсд где Документ.Тсд.Ссылка = &Ссылка» и тд.
2. Как отчет поместить на форму документа
Это пока первое что пришло на ум.
Вам виднее, безусловно. Но вместо одного вопроса по пути создания дерева, мне придется задавать кучу других, а все мы знаем как на такие вопросы отвечают на форуме))
Вряд ли найдутся желающие помочь мне в этом разобраться.

и я маленько наврал, из табличной части по итогу получить данные для дерева значений у меня не получилось и пришлось создать еще таблицу с типом таблица значений, которую я заполнил аналогично табличной части «перепись». Тк из ТЗ получить ДЗ больше информации в интернете.

(24) Сохранять не вариант.
(27) Давайте я попробую ввести новые 100% данные. Все предыдущие забыли.
В документы на форме присутствуют 2 табличные части:
1. Объект.Перепись (Большая таблица с переписью коробок в первом скриншоте) эта таблица мне нужна для дальнейшей распечатки переписи каждого паллета. Она заполняется из данных ТСД по кнопке.
2. Объект.Заказ (верхняя таблица из второго скриншота) эта таблица формируется на основании первой в ряде случаев, группируя по паллету и названию и суммируя колонки «Мест» и «Вес» в соответвии с группировкой. Эта таблица мне тоже нужна как табличная часть, тк при другом формате считывания данных ТСД сам суммирует коробки и Вес в соответствии со штришкодом, данные из такого считывания заполняют эту таблицу минуя таблицу перепись, тк там уже и не перепись а просуммированные данные, на основании которых я планирую заполнять Документ реализации, именно по этому эта таблица и называется «Заказ».

Читайте также:  Удаление узла авл дерева

Возвращаясь к нашим баранам с переписью. Мне нужна информативная таблица (В моем случае это дерево значений, которое я назвал «ДеревоПаллет») с переписью паллет, где будет номер «Паллет»а, сумма «Мест», и сумма «Вес», и чтобы была возможность развернуть этот паллет и увидеть из чего он состоит (меня устраивает нижняя таблица значений из второго скриншота, за исключением того что нет суммы «мест» и «Вес»а всего паллета.

Теоритически можно не использовать табличную часть «Заказ». И напрямую получать данные из таблицы «перепись», но мне было проще с ней, по шагам, получил одно, из этого другое и тд. В данном случае табличную часть «Заказ» я планировал скрывать и выводить таблицу «ДеревоПаллет».

Далее при клике в таблице «Дерево паллет» на строку паллета я хотел распечатывать перепись каждого паллета в отдельности по коробке, данные для которой я буду брать из табличной части «Перепись».

Мой рабочий код для заполнения «ДеревоПаллет» такой:

&НаСервере Процедура ВДЗНаСервере() ЗначениеВРеквизитФормы(ТаблицаЗначенийВДеревоЗначений(РеквизитФормыВЗначение("ТЗ"),"Паллет"),"ДеревоПаллет"); КонецПроцедуры &НаСервере Функция ТаблицаЗначенийВДеревоЗначений(ТЗ, ГруппировкаКолонка) Экспорт ПЗ = Новый ПостроительЗапроса; ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);//передаем ТЗ ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять; ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка].Измерение = Истина;//по этой колонке идет группировка ПЗ.ЗаполнитьНастройки(); ПЗ.Выполнить(); Дерево = ПЗ.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Возврат Дерево; КонецФункции

Минус его в том, что у меня пока не получилось заполнить данные из табличной части «Заказ» и пришлось создать таблицу значений «ТЗ» заполняемую точно также как и табличную часть «Заказ» (тк в интернете больше примеров как и ТЗ сделать ДЗ).

Собственно проблема осталась одна: мне нужна сумма каждого паллета в дереве значений «ДеревоПаллет», в строке родителя.
Или подскажите как реализовать задуманное иначе.
Спасибо

(29) Пока никакая, я за подсказкой сюда и обратился.
Я не понимаю как работает Построитель запроса. Да и вообще дерево значений. Такие задачи решаю с помощью поиска типовых решений в интернете и адаптирую под себя.

Читайте также:  Какие еще бывают листья деревьев

(32) Увы ПЗ.ИсточникДанных.Колонки[«Вес»].Ресурс = Истина; Поле объекта ресурс не найдено.
Я вот думаю, может существует костыль в виде обхода дерева и таким образом как то у родителя вносить в колонки суммы подчиненных значений?

(33)
ПЗ.ИсточникДанных.Колонки[«Вес»].Поле = Истина;
ПЗ.ИсточникДанных.Колонки[«Вес»].Итог = «Сумма(Вес)»;

&НаСервере
Функция ТаблицаЗначенийВДеревоЗначений(ТЗ, ГруппировкаКолонка) Экспорт
ПЗ = Новый ПостроительЗапроса;
ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);//передаем ТЗ
ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка].Измерение = Истина;//по этой колонке идет группировка
ПЗ.ИсточникДанных.Колонки.Мест.Итог = «СУММА(Мест)»;
ПЗ.ИсточникДанных.Колонки.Вес.Итог = «СУММА(Вес)»;
ПЗ.ЗаполнитьНастройки();
ПЗ.Выполнить();
Дерево = ПЗ.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Возврат Дерево;
КонецФункции

Подскажи, как убрать возникшую родительскую строку с общими итогами? (раньше не было)
И как в колонке «Название» написать текстом слово «Паллет»?

(36) Никак через построитель запроса с источником данных. Общие итоги там не отключить.
Сделайте шаг назад. Так ли нужен вам этот построитель?
Да и вообще, если то, что вы демонстрируете — это и есть задача, а не упрощённая интерпретация, может и не мудрить, а загнать свою ТЗ в запрос как параметр, вытащить нужные результаты, обойти и заполнить дерево как требуется?

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ТЗ.Паллет КАК Паллет,
| ТЗ.Название КАК Название,
| ТЗ.Вес КАК Вес,
| ТЗ.Мест КАК Мест
|ПОМЕСТИТЬ ВТ_ТЗ
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ТЗ.Паллет КАК Паллет,
| ВТ_ТЗ.Вес КАК Вес,
| ВТ_ТЗ.Мест КАК Мест,
| ВТ_ТЗ.Название КАК Название
|ИЗ
| ВТ_ТЗ КАК ВТ_ТЗ
|ИТОГИ
| СУММА(Вес),
| СУММА(Мест),
| «»Паллет»» КАК Название
|ПО
| Паллет»;

Запрос.Параметры.Вставить(«ТЗ», ТЗ);
РезультатЗапроса = Запрос.Выполнить();

(39)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ТЗ.Паллет КАК Паллет,
| ТЗ.Название КАК Название,
| ТЗ.Вес КАК Вес,
| ТЗ.Мест КАК Мест
|ПОМЕСТИТЬ ВТ_ТЗ
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ТЗ.Паллет КАК Паллет,
| ВТ_ТЗ.Вес КАК Вес,
| ВТ_ТЗ.Мест КАК Мест,
| ВТ_ТЗ.Название КАК Название
|ИЗ
| ВТ_ТЗ КАК ВТ_ТЗ
|ИТОГИ
| СУММА(Вес),
| СУММА(Мест),
| «»Паллет»» КАК Название
|ПО
| Паллет»;

Источник

Оцените статью