Сгруппировать и объединить строки Таблицы Значений

1. NicolasCage 14.10.24 08:54 Сейчас в теме
Здравствуйте! Подсобите, пожалуйста.

Есть у меня таблица значений. Приложил скрин со строками. Мне нужно объединить строки по контрагенту: колонки НДС и Оплачено суммировать. Значение колонок Описание, ДокНачисления, Элект.Накладная и Заказ нужно объединить как строки. Вопрос в том как лучше было бы это сделать? Думал, сделать так: пройтись с конца по строкам ТЗ. На первой итерации выбрать контрагента, потом запустить второй цикл, пройти по всем строкам, найти нужного контрагента, объединить и суммировать нужные колонки. После каждой итерации с нужным контрагентом удалять строку. Все это записать в новую ТЗ. Но мне кажется это костыльный вариант. Может у кого-то появятся идеи лучше?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
8. lmnlmn 69 14.10.24 10:03 Сейчас в теме
(1) Не претендую на истину и не люблю давать готовые ответы, но тут проще запрогать, чем объяснить. Ваш вариант можно трансформировать примерно в это
ИтоговаяТЗ = ТЗ.Скопировать(,"Контрагент,Оплачено,НДС");
ИтоговаяТЗ.Свернуть("Контрагент", "Оплачено,НДС");
ИтоговаяТЗ.Колонки.Добавить("Описание");

Отбор = Новый Структура("Контрагент");
Для Каждого Стр из ИтоговаяТЗ Цикл
	ЗаполнитьЗначенияСвойств(Отбор, Стр);
	СтрокиПоКонтрагенту = ТЗ.НайтиСтроки(Отбор);
	Стр.Описание = СтрСоединить(ТЗ.Скопировать(СтрокиПоКонтрагенту, "Описание").ВыгрузитьКолонку("Описание"), ";");
КонецЦикла;
Показать
NicolasCage; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
5. nomad_irk 76 14.10.24 09:40 Сейчас в теме
(1)
1. Создать новую чистую ТЗ с колонками из исходной ТЗ
2. Получить набор уникальных контрагентов без цикла
3. Циклом по набору контрагентов формировать копию исходной ТЗ с колонками для получения сумм + копию исходной с колонками для получения строк, выполняя отбор по контрагенту.
а. копию ТЗ свернуть для вычисление суммы по нужным числовым полям. результат свертки поместить в ТЗ из п1.
б. сделать копию ТЗ, содержащей колонки, значения которых нужно превратить в строку, получить из нужной колонки массив значений без цикла и выполнить конкатенацию строк так же без цикла. Результат поместить в строку ТЗ из п.1 по контрагенту так же без цикла.
NicolasCage; user2107184; +2 Ответить
8. lmnlmn 69 14.10.24 10:03 Сейчас в теме
(1) Не претендую на истину и не люблю давать готовые ответы, но тут проще запрогать, чем объяснить. Ваш вариант можно трансформировать примерно в это
ИтоговаяТЗ = ТЗ.Скопировать(,"Контрагент,Оплачено,НДС");
ИтоговаяТЗ.Свернуть("Контрагент", "Оплачено,НДС");
ИтоговаяТЗ.Колонки.Добавить("Описание");

Отбор = Новый Структура("Контрагент");
Для Каждого Стр из ИтоговаяТЗ Цикл
	ЗаполнитьЗначенияСвойств(Отбор, Стр);
	СтрокиПоКонтрагенту = ТЗ.НайтиСтроки(Отбор);
	Стр.Описание = СтрСоединить(ТЗ.Скопировать(СтрокиПоКонтрагенту, "Описание").ВыгрузитьКолонку("Описание"), ";");
КонецЦикла;
Показать
NicolasCage; +1 Ответить
10. NicolasCage 15.10.24 08:14 Сейчас в теме
(8) Спасибо большое! Сделал таким образом.
2. user2107184 14.10.24 09:10 Сейчас в теме
Выгрузку колонок и поиск строк в ТЗ уже отменили? Остались только циклы?
NicolasCage; +1 Ответить
9. NicolasCage 15.10.24 08:13 Сейчас в теме
(2) Вы правы. Спасибо что обратили внимание на это.
3. BarsukM 14.10.24 09:11 Сейчас в теме
Без двойной итерации не обойтись, похоже.
Сначала суммируемые поля сгруппировать запросом.
Потом в выборке искать строки с контрагентом в таблице значений и соединять их строки в новую ТЗ.
Я бы так сделал.
4. user2107184 14.10.24 09:15 Сейчас в теме
(3)
Сначала суммируемые поля сгруппировать запросом.
Да что ж вы все в СУБД лезете со своими таблицами??? Там своих хватает.
NicolasCage; +1 Ответить
6. starjevschik 14.10.24 09:57 Сейчас в теме
Работает? результат правильный? значит, правильно сделано.
7. user2107184 14.10.24 10:02 Сейчас в теме
(6) Съездил вчера на танке в магазин через дорогу, за кульком семечек.
По дороге разворотил 3 легковушки, и повалил одно дерево.
Но кулек семечек привез. Добился правильного результата.
Значит, все правильно сделал.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот