Как в заспросе агрегировать значения поля в строку через запятую #709497


#0 by Darklight
Подскажите, есть ли какое внятное решение. Необходимо при формировании ВРЕМЕННОЙ таблицы провести свёртку (группировку) данных источника так, чтобы по определённому полю (счет) произошло агрегирование значение через запятую (пускай в строке), какие-то остальные поля просуммировались и по каким=-то произошла, собственно, группировка. То есть ффф 100 10.01 ффф 200 10.01 ффф 300 10.02 ааа 100 10.02 ааа 150 10.03 ггг 100 10.03 превратилось в ффф 600 10.01, 10.02 ааа 250 10.02, 10.03 ггг 100 10.03 Это всё нужно получить во временной таблице, для дальнейшего использования в СКД Это вообще реально? Я пока вижу только вариант разбивания всего пакетного запроса на части, выполняемые отдельно - в одной формируется исходная таблица источника - она выгружается в вызывающий её алгоритм, где уже программно оно суммируется по нужному правилу - затем - это всё загружается в СКД уже в качестве внешнего набора данных с вытекающим геморроем с дальнейшим (с невозможностью использовать эти данных непосредственно в запросах, а только через соединения СКД - что подстегнёт вообще всё сначала и формировать в обычных запросах, а в СКД уже выгружать уже финальный результат для вывода, тогда с СКД придётся ещё больше тянуть всяких настроек, в первую очередь фильтров для того, чтобы применить их во внешнем запросе).
#1 by shuhard
если это СКД, то в чем проблема сделать в функции общего модуля ?
#2 by f_vadim
Штатными средствами - никак. С извращениями и ограничениями - можно.
#3 by kosts
Вроде затык начинается даже с преобразования числа в строку, не говоря уже про остальное...
#4 by Darklight
Потому что написано в , что это временная таблица - а не финальное агреггирование при выводе (было бы там - использовал бы штатную функцию СКД ВычислитьВыражениеСГруппировкойМассив)
#5 by Darklight
Число в строку преобразовать не надо - написано же - это счета - у них поле "код" строковое.
#6 by Darklight
Спасибо - уже читаю, хотя фраза "по сравнению с внезапросной техникой представляет больше спортивный, чем практический интерес." уже пугает :( возможно придётся всё-таки делать по внезапросной технике как я написал в
#7 by kosts
В таком случае. Т.к. количество счетов это ограниченная небольшая величина, то можно использовать искусственную таблицу, которую присоединяем там где надо, но огород еще тот будет. Чем больше счетов одновременно будет, тем огородистее.
#8 by Crush
В ресурсе напиши Массив(Различные Счет)
#9 by kosts
Колонка счет 1 | Колонка счет 2 | СтрокаСчетов 10.01 | 10.02 |  10.01, 10.02 10.01 | 10.03 |  10.01, 10.03 етк
#10 by Darklight
Любопытно, что в статье упоминается функция СКД СоединениеСтрок - но таковой я в справке не нашёл (у меня релиз платформы 8.2.19.80) Опять-таки - пишу что нужно сгруппировать во временной таблице - там нет понятие Ресурс СКД! И не доступны функции языка выражений СКД. , Идею почти понял - можно про соединение чуть подробнее.
#11 by f_vadim
а если счетов варьируется от 1 до 10? до n?
#12 by f_vadim
* количество счетов
#13 by kosts
Ну я же предупредил. Есть какая-то граница, после которой смысл в этом пропадает.
#14 by f_vadim
объемы большие? счетов много? может проще результат запроса в ТЗ, обработать и запихать во временную таблицу?
#15 by kosts
Схема запроса такая 1.Делаем обычную группировку, группируем первую колонку и счета, суммируем суммы. Результат ффф | 100 | 10.01 ффф | 200 | 10.01 ффф | 300 | 10.02 ааа | 100 | 10.02 ааа | 150 | 10.03 ггг | 100 | 10.03 2.Соединяя таблицу саму с собой По первому полю и минимаксу по счетам. Т.е. определяем какие счета должны быть суммированы (но находятся еще в разных колонках). Результат ффф | 600 | 10.01 | 10.02 ааа | 250 | 10.02 | 10.03 ггг | 100 | 10.03 | 3.Присоединяем искусственную таблицу, получаем конечны результат. Результат ффф | 600 | 10.01, 10.02 ааа | 250 | 10.02, 10.03 ггг | 100 | 10.03 И да, ужас конечно.
#16 by WildSery
Для двух счетов как раз очень частно, неуниверсально и не показывает общего алгоритма действий.
#17 by f_vadim
Для заранее известного набора счетов можно добавить для каждого счёта колонку, которую заполнить по КОГДА-ТОГДА. Затем свернуть.
#18 by kosts
Ну да, так проще.
#19 by nufnufcheg
СКД спасет
#20 by Darklight
Спасибо, я идею в принципе понял - счета у меня почти фиксированные, но их всё-таки много сочетаний. Буду пробовать разные варианты реализации.
#21 by Darklight
Сделал как описано в - получилось. Вот только у меня там ещё и агрегаты числового суммирования были. Пришлось вычисления разделять на отдельные ветви и потом соединять по полям группировок - но это уже мелочи. Да и ещё, мне нужно было конкатенировать через запятую, решил добавлением запятой к началу исходных строк (ВЫБРАТЬ ","+Счет.Код КАК а), но потом от первой запятой пришлось избавляться через ПОДСТРОКА(Результат,2, 2048) - что создало длинную строку с пробелами в конце. Есть красивое решение данной проблемы?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С