Dev ›
свернуть таблицу значений содержащей строковое поле ›
#18
05.06.22 4:45
(4) Если использовать СтрСоединить, то можно так:
Код |
---|
таблицаРезультата = таблицаИсходная.Скопировать();
таблицаРезультата.Свернуть("Контрагент", "Итог, Итог2");
таблицаРезультата.Колонки.Добавить("Договор", Новый ОписаниеТипов("Строка"));
таблицаИсходная.Индексы.Добавить("Контрагент"); // Не обязательно, это для ускорения поиска, если таблица большая
Для каждого строкаРезультата Из таблицаРезультата Цикл
массивДоговоров = Новый Массив;
Для каждого строкаИсходная Из таблицаИсходная.НайтиСтроки(Новый Структура("Контрагент", строкаРезультата.Контрагент)) Цикл
массивДоговоров.Добавить(строкаИсходная.Договор);
КонецЦикла;
строкаРезультата.Договор = СтрСоединить(массивДоговоров, ",");
КонецЦикла; |
или
Код |
---|
таблица.Сортировать("Контрагент");
массивСтрокДляУдаления = Новый Массив;
контрагент = Неопределено;
строкаКонтрагента = Неопределено; // Это нужно для синтакс-контроля, код отрабатывает без этой строки
Для каждого строка Из таблица Цикл
Если контрагент <> строка.Контрагент Тогда
Если контрагент <> Неопределено Тогда
строкаКонтрагента.Договор = СтрСоединить(массивДоговоров, ",");
КонецЕсли;
контрагент = строка.Контрагент;
строкаКонтрагента = строка;
массивДоговоров = Новый Массив;
Иначе
строкаКонтрагента.Итог = строкаКонтрагента.Итог+строка.Итог;
строкаКонтрагента.Итог2 = строкаКонтрагента.Итог2+строка.Итог2;
массивСтрокДляУдаления.Добавить(строка);
КонецЕсли;
массивДоговоров.Добавить(строка.Договор);
КонецЦикла;
Если контрагент <> Неопределено Тогда
строкаКонтрагента.Договор = СтрСоединить(массивДоговоров, ",");
КонецЕсли;
Для каждого строка Из массивСтрокДляУдаления Цикл
таблица.Удалить(строка);
КонецЦикла; |
Но СтрСоединить можно использовать только начиная с релиза 8.3.6.1977 или писать свою функцию. Считаю, что в данном алгоритме это избыточная функция.