Соединить строки по полю

1. user1437416 16.02.21 12:03 Сейчас в теме
Добрый день! Подскажите пожалуйста, как в запросе или в СКД или обход по группировкам, объединить две строки и более , в дну строку
номер Подразделение Организация
50 Офис Главная
50 Офис1 Организация2
50 Офис2 Организация 3

Количество повторений не известно.

Необходимо объединить по номеру:

Номер Подразделение1 Организация1 Подразделение2 Организация2 Подразделение 3 Организация 3
50 Офис Главная Офис1 Организация2 Офис2 Организация3
По теме из базы знаний
Найденные решения
11. m_nazar 16.02.21 13:30 Сейчас в теме
Вот набросал пример:
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Контрагенты.ГоловнойКонтрагент КАК ГоловнойКонтрагент,
		|	Контрагенты.Наименование,
		|	Контрагенты.Код
		|ИЗ
		|	Справочник.Контрагенты КАК Контрагенты
		|ГДЕ
		|	Контрагенты.ГоловнойКонтрагент В(&ГоловнойКонтрагент)
		|
		|СГРУППИРОВАТЬ ПО
		|	Контрагенты.ГоловнойКонтрагент,
		|	Контрагенты.Наименование,
		|	Контрагенты.Код
		|ИТОГИ ПО
		|	ГоловнойКонтрагент";
	
	Сп = Новый СписокЗначений;
	Сп.Добавить(Справочники.Контрагенты.НайтиПоКоду("000016903"));
	Сп.Добавить(Справочники.Контрагенты.НайтиПоКоду("000009426"));
	Запрос.УстановитьПараметр("ГоловнойКонтрагент", Сп);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаГоловнойКонтрагент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

	ТЗ = Новый ТаблицаЗначений();
	ТЗ.Колонки.Добавить("ГК");

	Пока ВыборкаГоловнойКонтрагент.Следующий()  Цикл

	    ВыборкаДетальныеЗаписи = ВыборкаГоловнойКонтрагент.Выбрать();
		нКолонка = 0;
		нов = ТЗ.Добавить();
	    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			Если ТЗ.Колонки.Найти("К"+нКолонка) = Неопределено Тогда
			    ТЗ.Колонки.Добавить("К"+нКолонка);
			КонецЕсли;
			Если ТЗ.Колонки.Найти("Н"+нКолонка) = Неопределено Тогда
			    ТЗ.Колонки.Добавить("Н"+нКолонка);
			КонецЕсли;			
			нов.ГК = ВыборкаГоловнойКонтрагент.ГоловнойКонтрагент;		
			нов["К"+нКолонка] = ВыборкаДетальныеЗаписи.Код;
			нов["Н"+нКолонка] = ВыборкаДетальныеЗаписи.Наименование;
			
			нКолонка = нКолонка  +1;
	    КонецЦикла;
	    
	КонецЦикла;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 16.02.21 12:15 Сейчас в теме
(1) только обходом по группировкам, как-то так;


.....
ВыборкаНомера = Запрос.Выполнить().Выбрать(ОбходРезультата.ПоГруппировкам);

Пока ВыборкаНомера.Следующий() Цикл

	СтрокаРезультат = "";

	СтрокаРезультат = СтрокаРезультат + Выборка.НомерСтрока + " ";

	ВыборкаПодразделения = ВыбркаНомера.Выбрать(ОбходРезультата.ПоГруппировкам);

	Пока ВыборкаПодразделения.Следующий() Цикл

		СтрокаРезультат = СтрокаРезультат + Выборка.ПодразделениеНаименование + " ";

		ВыборкаОрганизации = ВыборкаПодразделения.Выбрать();

		Пока ВыборкаОрганизации.Следующий() Цикл

			СтрокаРезультат = СтрокаРезультат  + ВыборкаДетальныеЗаписи.ОрганизацияНаименование;

		КонецЦикла;

	КонецЦикла;

	МоеЗначение = СтрокаРезультат;
	
КонецЦикла;
Показать
3. user1437416 16.02.21 12:20 Сейчас в теме
(2) Спасибо, только я этот метод примерно знала, а как сделать в отдельных колонках ?
4. nomad_irk 76 16.02.21 12:21 Сейчас в теме
(3)В отдельных колонках оно у вас изначально будет или в чем именно вопрос?
5. user1437416 16.02.21 12:38 Сейчас в теме
(2) Спасибо, только я этот метод примерно знала, а как сделать в отдельных колонках ?


(4) Там получается в одной строчке , строкой
Прикрепленные файлы:
6. nomad_irk 76 16.02.21 12:48 Сейчас в теме
(5)Если количество подразделений и организаций по одному номеру изначально не известно, то запросом сделать результат в одну строку не представляется возможным.
7. user1437416 16.02.21 12:48 Сейчас в теме
(4) мне нужно в отдельных колонках в результате
8. user1437416 16.02.21 12:56 Сейчас в теме
а обходом по группировках , как сделать, чтобы в результате при обходе не собирать всё в одну строку, а был результат в новой колонке
9. user1437416 16.02.21 13:00 Сейчас в теме
(8) Так как в файле
Прикрепленные файлы:
10. m_nazar 16.02.21 13:03 Сейчас в теме
Ну если нужно в отдельных колонках то придется сформировать запрос с группировкой по номеру, создать отдельную таблицу значений А потом обход запроса по группировках с созданием и заполнением колонок на лету. Потом уже запрос новой ТЗ
11. m_nazar 16.02.21 13:30 Сейчас в теме
Вот набросал пример:
Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Контрагенты.ГоловнойКонтрагент КАК ГоловнойКонтрагент,
		|	Контрагенты.Наименование,
		|	Контрагенты.Код
		|ИЗ
		|	Справочник.Контрагенты КАК Контрагенты
		|ГДЕ
		|	Контрагенты.ГоловнойКонтрагент В(&ГоловнойКонтрагент)
		|
		|СГРУППИРОВАТЬ ПО
		|	Контрагенты.ГоловнойКонтрагент,
		|	Контрагенты.Наименование,
		|	Контрагенты.Код
		|ИТОГИ ПО
		|	ГоловнойКонтрагент";
	
	Сп = Новый СписокЗначений;
	Сп.Добавить(Справочники.Контрагенты.НайтиПоКоду("000016903"));
	Сп.Добавить(Справочники.Контрагенты.НайтиПоКоду("000009426"));
	Запрос.УстановитьПараметр("ГоловнойКонтрагент", Сп);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаГоловнойКонтрагент = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

	ТЗ = Новый ТаблицаЗначений();
	ТЗ.Колонки.Добавить("ГК");

	Пока ВыборкаГоловнойКонтрагент.Следующий()  Цикл

	    ВыборкаДетальныеЗаписи = ВыборкаГоловнойКонтрагент.Выбрать();
		нКолонка = 0;
		нов = ТЗ.Добавить();
	    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			Если ТЗ.Колонки.Найти("К"+нКолонка) = Неопределено Тогда
			    ТЗ.Колонки.Добавить("К"+нКолонка);
			КонецЕсли;
			Если ТЗ.Колонки.Найти("Н"+нКолонка) = Неопределено Тогда
			    ТЗ.Колонки.Добавить("Н"+нКолонка);
			КонецЕсли;			
			нов.ГК = ВыборкаГоловнойКонтрагент.ГоловнойКонтрагент;		
			нов["К"+нКолонка] = ВыборкаДетальныеЗаписи.Код;
			нов["Н"+нКолонка] = ВыборкаДетальныеЗаписи.Наименование;
			
			нКолонка = нКолонка  +1;
	    КонецЦикла;
	    
	КонецЦикла;
Показать
12. user1437416 16.02.21 16:36 Сейчас в теме
(11)
нов.ГК = ВыборкаГоловнойКонтрагент.ГоловнойКонтрагент;
нов["К"+нКолонка] = ВыборкаДетальныеЗаписи.Код;
нов["Н"+нКолонка] = ВыборкаДетальныеЗаписи.Наименование;

нКолонка = нКолонка +1;


Спасибо, сделала.
Оставьте свое сообщение

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