Табличная часть в Дерево значений
Сгруппировываю по паллет/наименование и суммирую коробки/вес
Тк в одном паллете могут быть разные наименования, не получится увидеть сумму коробок и веса по паллету.
И потому хочу по красоте из табличной части «Перепись» сделать Дерево значений «ДЗ», где Родителями будут значения из колонки «Паллет». Чтобы можно было увидеть примерно такой результат:
+Паллет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)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ТЗ.Паллет КАК Паллет,
| ТЗ.Название КАК Название,
| ТЗ.Вес КАК Вес,
| ТЗ.Мест КАК Мест
|ПОМЕСТИТЬ ВТ_ТЗ
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ТЗ.Паллет КАК Паллет,
| ВТ_ТЗ.Вес КАК Вес,
| ВТ_ТЗ.Мест КАК Мест,
| ВТ_ТЗ.Название КАК Название
|ИЗ
| ВТ_ТЗ КАК ВТ_ТЗ
|ИТОГИ
| СУММА(Вес),
| СУММА(Мест),
| «»Паллет»» КАК Название
|ПО
| Паллет»;
Источник
Табличная часть в виде дерева значений
Возникло желание отображать и работать с ТЧ документа в режиме УФ как с деревом значений.
Собственно вопрос: есть ли в какой конфигурации такое, чтобы подсмотреть и вдохновение почерпнуть?
(1) Там 1С на пустом месте перемудрило или реально «так сложно, что не стоит»?
не особенно сложно, выгружать в табличное поле при открытии и сохранять перед закрытием. http://infostart.ru/public/73969/
при открытии — загрузка из табличной части в дерево (табличное поле), а обратно — точно, в ПередЗаписью
зачем тебе при чтении на сервере, данные-то в табличной части сохраняются обычным порядком, при открытии их надо на форму загрузить
Если у кого такой же вопрос возникнет, есть интересная инструкташка с рабочим кодом:
http://help1c.com/faq/view/1149.html
Продолжу тему, чтобы не плодить ветки.
Пусть:
0) имеем реквизит формы А (тип «ДанныеФормыДерево»), имеем его отображение на форме в виде таблицы (тип «ТаблицаФормы»);
1) дерево имеет три уровня, одну колонку измерения и одну — как ресурс;
2) на каждом уровне измерение (его значения) имеет уникальный тип (например, магазин/витрина/товар).
Нужно:
1) при добавлении строки в дерево запретить добавлять уровни более 3х;
2) при добавлении 4го уровня (когда пользователь нажимает Ins стоя на элементе 3го уровня — назовем его Х) — операцию прервать и сделать ввод элемента 3го уровня, подчиненному родителю Ха.
Проблема: в событии ПередНачаломДобавления я могу отследить и прервать добавление 4го уровня, но туплю пока, как из этого же события инициировать ввод новой строки, родителем которой будет родитель элемента Х.
Источник