Вход | Регистрация
 

Конкатенация в группировке запроса. как реализовать?

Конкатенация в группировке запроса. как реализовать?
Я
   golem14
 
05.07.21 - 09:39
ВЫБРАТЬ
    Сумма(Сумма),
    Контрагент,
    Конкатенация(Комментарий)
ИЗ
    Таблица
СГРУППИРОВАТЬ ПО
    Контрагент
   ДенисЧ
 
1 - 05.07.21 - 09:40
Переходи на СКД, там это реализовано
   golem14
 
2 - 05.07.21 - 09:41
мне в запросе надо.
   golem14
 
3 - 05.07.21 - 09:41
ну может кодом в постобработке
   mikecool
 
4 - 05.07.21 - 09:42
(3) давай кодом, в запросе никак
   golem14
 
5 - 05.07.21 - 09:44
(4) а как кодом, что-то не соображу.
   OldCondom
 
6 - 05.07.21 - 09:44
эмм, в ВТ без группировки и потом результат сгруппировать?
   golem14
 
7 - 05.07.21 - 09:45
только если перебирать всех контрагентов в цикле
   ДенисЧ
 
8 - 05.07.21 - 09:47
(7) Разумеется, перебирать. А как иначе, если тебе лень простую схему на СКД набросать и программно её выполнить
   golem14
 
9 - 05.07.21 - 09:49
(8) я попробую, но боюсь не осилю.
   Sserj
 
10 - 05.07.21 - 10:09
А вот если бы 1С довала доступ к SQL серверу, то можно было бы просто написать string_agg(Комментарий)
   ДенисЧ
 
11 - 05.07.21 - 10:12
(10) А исчо тибе ничо ни доть?
   acht
 
12 - 05.07.21 - 10:18
(10) Особенно на каком-нибудь DB2, да.
   Said_We
 
13 - 05.07.21 - 10:27
(0) Недавно давал вариант в SQL на 1С как это сделать, но это Извращенский вариант.
   Said_We
 
14 - 05.07.21 - 10:30
(4) :-) прямо-таки ни как?
   Said_We
 
15 - 05.07.21 - 10:47
(0) Тут умножение, но так же можно и складывать строки.
Произведение чисел в запросе
пост 12 с пояснениями в 32 и 33. Остальное можно не читать, кроме того что это ахинея, но работает :-)

Тут тоже п посте 12 ссылка:
Объединение повторяющихся строк в Запросе с различным полем
   Said_We
 
16 - 05.07.21 - 10:56
(0) Есть ещё один способ, он где-то тоже в этих или соседних ветках был описан.
Суть в несколько итераций сложить соседние строки. Тоже через нумерацию. Складываются 1+2, 3+4, 5+6... Перенумеровываются. Итерация повторяется. 10 итераций Это 2**10 = 1024 куска можно сложить.
й ц у к е н г ш щ з
йц ук ен гш щз
йцук енгш щз
йцукенгш щз
йцукенгшщз
   golem14
 
17 - 05.07.21 - 12:13
у меня получилось! вот минимальный пример если кому интересно 
выражение в СКД: СоединитьСтроки(Комментарий, ",")

Получение ТЗ из СКД:
    ОбъектОтчет = РеквизитФормыВЗначение("Отчет");
    ОСКД = ОбъектОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    НастройкиОСКД = ОСКД.НастройкиПоУмолчанию;
    ПараметрыДанныхОСКД = НастройкиОСКД.ПараметрыДанных.Элементы;
    Параметр = ПараметрыДанныхОСКД.Найти("Сумма");
    Параметр.Значение = 1;
    КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет = КомпоновщикМакетаОСКД.Выполнить(ОСКД, НастройкиОСКД,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    ПроцессорКомпоновкиОСКД = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиОСКД.Инициализировать(Макет);
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ТЗ = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ТЗ);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиОСКД);
   ДенисЧ
 
18 - 05.07.21 - 12:15
Вот... Могут же люди, когда сильно прижмёт )))

(17) Молодец!
   ДенисЧ
 
19 - 05.07.21 - 12:16
Только вместо
ПараметрыДанныхОСКД = НастройкиОСКД.ПараметрыДанных.Элементы;
Параметр = ПараметрыДанныхОСКД.Найти("Сумма");
Параметр.Значение = 1;

Лучше 

НастройкиОСКД.ПараметрыДанных.УстановитьЗначениеПараметра("Сумма", 1);

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.