Добрый день! Подскажите пожалуйста, как в запросе или в СКД или обход по группировкам, объединить две строки и более , в дну строку
номер Подразделение Организация
50 Офис Главная
50 Офис1 Организация2
50 Офис2 Организация 3
Количество повторений не известно.
Необходимо объединить по номеру:
Номер Подразделение1 Организация1 Подразделение2 Организация2 Подразделение 3 Организация 3
50 Офис Главная Офис1 Организация2 Офис2 Организация3
номер Подразделение Организация
50 Офис Главная
50 Офис1 Организация2
50 Офис2 Организация 3
Количество повторений не известно.
Необходимо объединить по номеру:
Номер Подразделение1 Организация1 Подразделение2 Организация2 Подразделение 3 Организация 3
50 Офис Главная Офис1 Организация2 Офис2 Организация3
По теме из базы знаний
Найденные решения
Вот набросал пример:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.ГоловнойКонтрагент КАК ГоловнойКонтрагент,
| Контрагенты.Наименование,
| Контрагенты.Код
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ГоловнойКонтрагент В(&ГоловнойКонтрагент)
|
|СГРУППИРОВАТЬ ПО
| Контрагенты.ГоловнойКонтрагент,
| Контрагенты.Наименование,
| Контрагенты.Код
|ИТОГИ ПО
| ГоловнойКонтрагент";
Сп = Новый СписокЗначений;
Сп.Добавить(Справочники.Контрагенты.НайтиПоКоду("000016903"));
Сп.Добавить(Справочники.Контрагенты.НайтиПоКоду("000009426"));
Запрос.УстановитьПараметр("ГоловнойКонтрагент", Сп);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаГоловнойКонтрагент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТЗ = Новый ТаблицаЗначений();
ТЗ.Колонки.Добавить("ГК");
Пока ВыборкаГоловнойКонтрагент.Следующий() Цикл
ВыборкаДетальныеЗаписи = ВыборкаГоловнойКонтрагент.Выбрать();
нКолонка = 0;
нов = ТЗ.Добавить();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ТЗ.Колонки.Найти("К"+нКолонка) = Неопределено Тогда
ТЗ.Колонки.Добавить("К"+нКолонка);
КонецЕсли;
Если ТЗ.Колонки.Найти("Н"+нКолонка) = Неопределено Тогда
ТЗ.Колонки.Добавить("Н"+нКолонка);
КонецЕсли;
нов.ГК = ВыборкаГоловнойКонтрагент.ГоловнойКонтрагент;
нов["К"+нКолонка] = ВыборкаДетальныеЗаписи.Код;
нов["Н"+нКолонка] = ВыборкаДетальныеЗаписи.Наименование;
нКолонка = нКолонка +1;
КонецЦикла;
КонецЦикла;
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) только обходом по группировкам, как-то так;
.....
ВыборкаНомера = Запрос.Выполнить().Выбрать(ОбходРезультата.ПоГруппировкам);
Пока ВыборкаНомера.Следующий() Цикл
СтрокаРезультат = "";
СтрокаРезультат = СтрокаРезультат + Выборка.НомерСтрока + " ";
ВыборкаПодразделения = ВыбркаНомера.Выбрать(ОбходРезультата.ПоГруппировкам);
Пока ВыборкаПодразделения.Следующий() Цикл
СтрокаРезультат = СтрокаРезультат + Выборка.ПодразделениеНаименование + " ";
ВыборкаОрганизации = ВыборкаПодразделения.Выбрать();
Пока ВыборкаОрганизации.Следующий() Цикл
СтрокаРезультат = СтрокаРезультат + ВыборкаДетальныеЗаписи.ОрганизацияНаименование;
КонецЦикла;
КонецЦикла;
МоеЗначение = СтрокаРезультат;
КонецЦикла;
Показать
Ну если нужно в отдельных колонках то придется сформировать запрос с группировкой по номеру, создать отдельную таблицу значений А потом обход запроса по группировках с созданием и заполнением колонок на лету. Потом уже запрос новой ТЗ
Вот набросал пример:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Контрагенты.ГоловнойКонтрагент КАК ГоловнойКонтрагент,
| Контрагенты.Наименование,
| Контрагенты.Код
|ИЗ
| Справочник.Контрагенты КАК Контрагенты
|ГДЕ
| Контрагенты.ГоловнойКонтрагент В(&ГоловнойКонтрагент)
|
|СГРУППИРОВАТЬ ПО
| Контрагенты.ГоловнойКонтрагент,
| Контрагенты.Наименование,
| Контрагенты.Код
|ИТОГИ ПО
| ГоловнойКонтрагент";
Сп = Новый СписокЗначений;
Сп.Добавить(Справочники.Контрагенты.НайтиПоКоду("000016903"));
Сп.Добавить(Справочники.Контрагенты.НайтиПоКоду("000009426"));
Запрос.УстановитьПараметр("ГоловнойКонтрагент", Сп);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаГоловнойКонтрагент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТЗ = Новый ТаблицаЗначений();
ТЗ.Колонки.Добавить("ГК");
Пока ВыборкаГоловнойКонтрагент.Следующий() Цикл
ВыборкаДетальныеЗаписи = ВыборкаГоловнойКонтрагент.Выбрать();
нКолонка = 0;
нов = ТЗ.Добавить();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Если ТЗ.Колонки.Найти("К"+нКолонка) = Неопределено Тогда
ТЗ.Колонки.Добавить("К"+нКолонка);
КонецЕсли;
Если ТЗ.Колонки.Найти("Н"+нКолонка) = Неопределено Тогда
ТЗ.Колонки.Добавить("Н"+нКолонка);
КонецЕсли;
нов.ГК = ВыборкаГоловнойКонтрагент.ГоловнойКонтрагент;
нов["К"+нКолонка] = ВыборкаДетальныеЗаписи.Код;
нов["Н"+нКолонка] = ВыборкаДетальныеЗаписи.Наименование;
нКолонка = нКолонка +1;
КонецЦикла;
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот