Сгруппировать результат запроса перед обходом в цикле

1. Johney20 17.01.20 15:45 Сейчас в теме
Добрый день.

Есть типовой запрос, который не хотелось бы трогать, менять. Но есть проблема, в нем встречаются строки с одинаковыми данными, как их сгруппировать до обхода в цикле?

ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ЕПСБУ.Ссылка КАК Счет,
	МенюТребование.Ссылка КАК Ссылка
ПОМЕСТИТЬ СчетаДокументов
ИЗ
	ПланСчетов.ЕПСБУ КАК ЕПСБУ,
	Документ.МенюТребование КАК МенюТребование
ГДЕ
	ЕПСБУ.Ссылка = МенюТребование.Материалы.СчетУчета
	И ЕПСБУ.ЭлементГруппа = ЛОЖЬ
	И МенюТребование.Ссылка В(&МассивОбъектов)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ЕПСБУ.Ссылка,
	МенюТребование.Ссылка
ИЗ
	ПланСчетов.ЕПСБУ КАК ЕПСБУ,
	Документ.МенюТребование КАК МенюТребование
ГДЕ
	ЕПСБУ.Родитель = МенюТребование.Материалы.СчетУчета
	И ЕПСБУ.ЭлементГруппа = ЛОЖЬ
	И МенюТребование.Ссылка В(&МассивОбъектов)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ЕПСБУ.Ссылка,
	МенюТребование.Ссылка
ИЗ
	ПланСчетов.ЕПСБУ КАК ЕПСБУ,
	Документ.МенюТребование КАК МенюТребование
ГДЕ
	ЕПСБУ.Родитель.Родитель = МенюТребование.Материалы.СчетУчета
	И ЕПСБУ.ЭлементГруппа = ЛОЖЬ
	И МенюТребование.Ссылка В(&МассивОбъектов)

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	ЕПСБУ.Ссылка,
	МенюТребование.Ссылка
ИЗ
	ПланСчетов.ЕПСБУ КАК ЕПСБУ,
	Документ.МенюТребование КАК МенюТребование
ГДЕ
	ЕПСБУ.Родитель.Родитель.Родитель = МенюТребование.Материалы.СчетУчета
	И ЕПСБУ.ЭлементГруппа = ЛОЖЬ
	И МенюТребование.Ссылка В(&МассивОбъектов)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ЕСТЬNULL(ЖурналПроводокЕПСБУДвиженияССубконто.СчетДт, ЗНАЧЕНИЕ(ПланСчетов.ЕПСБУ.ПустаяСсылка)) КАК СчетДт,
	ЕСТЬNULL(ЖурналПроводокЕПСБУДвиженияССубконто.КПСДт, ЗНАЧЕНИЕ(Справочник.КлассификационныеПризнакиСчетов.ПустаяСсылка)) КАК КПСДт,
	ЕСТЬNULL(ЖурналПроводокЕПСБУДвиженияССубконто.КЭКДт, ЗНАЧЕНИЕ(Справочник.КОСГУ.ПустаяСсылка)) КАК КЭКДт,
	ЖурналПроводокЕПСБУДвиженияССубконто.КФО КАК КФО,
	ЕСТЬNULL(ЖурналПроводокЕПСБУДвиженияССубконто.СчетКт, ЗНАЧЕНИЕ(ПланСчетов.ЕПСБУ.ПустаяСсылка)) КАК СчетКт,
	ЕСТЬNULL(ЖурналПроводокЕПСБУДвиженияССубконто.КПСКт, ЗНАЧЕНИЕ(Справочник.КлассификационныеПризнакиСчетов.ПустаяСсылка)) КАК КПСКт,
	ЕСТЬNULL(ЖурналПроводокЕПСБУДвиженияССубконто.КЭККт, ЗНАЧЕНИЕ(Справочник.КОСГУ.ПустаяСсылка)) КАК КЭККт,
	ВЫБОР
		КОГДА ЖурналПроводокЕПСБУДвиженияССубконто.ВидСубконтоКт1 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Номенклатура)
			ТОГДА ВЫРАЗИТЬ(ЖурналПроводокЕПСБУДвиженияССубконто.СубконтоКт1 КАК Справочник.Номенклатура)
		КОГДА ЖурналПроводокЕПСБУДвиженияССубконто.ВидСубконтоКт2 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Номенклатура)
			ТОГДА ВЫРАЗИТЬ(ЖурналПроводокЕПСБУДвиженияССубконто.СубконтоКт2 КАК Справочник.Номенклатура)
		КОГДА ЖурналПроводокЕПСБУДвиженияССубконто.ВидСубконтоКт3 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Номенклатура)
			ТОГДА ВЫРАЗИТЬ(ЖурналПроводокЕПСБУДвиженияССубконто.СубконтоКт3 КАК Справочник.Номенклатура)
	КОНЕЦ КАК Номенклатура,
	ЖурналПроводокЕПСБУДвиженияССубконто.Регистратор КАК Регистратор,
	СУММА(ЖурналПроводокЕПСБУДвиженияССубконто.КоличествоКт) КАК Количество,
	СУММА(ЖурналПроводокЕПСБУДвиженияССубконто.Сумма) КАК Сумма
ИЗ
	РегистрБухгалтерии.ЖурналПроводокЕПСБУ.ДвиженияССубконто(
			,
			,
			Регистратор В (&МассивОбъектов)
				И Регистратор ССЫЛКА Документ.МенюТребование,
			,
			) КАК ЖурналПроводокЕПСБУДвиженияССубконто
ГДЕ
	ЖурналПроводокЕПСБУДвиженияССубконто.СчетКт В
			(ВЫБРАТЬ
				СчетаДокументов.Счет
			ИЗ
				СчетаДокументов КАК СчетаДокументов
			ГДЕ
				СчетаДокументов.Ссылка = ЖурналПроводокЕПСБУДвиженияССубконто.Регистратор)

СГРУППИРОВАТЬ ПО
	ВЫБОР
		КОГДА ЖурналПроводокЕПСБУДвиженияССубконто.ВидСубконтоКт1 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Номенклатура)
			ТОГДА ВЫРАЗИТЬ(ЖурналПроводокЕПСБУДвиженияССубконто.СубконтоКт1 КАК Справочник.Номенклатура)
		КОГДА ЖурналПроводокЕПСБУДвиженияССубконто.ВидСубконтоКт2 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Номенклатура)
			ТОГДА ВЫРАЗИТЬ(ЖурналПроводокЕПСБУДвиженияССубконто.СубконтоКт2 КАК Справочник.Номенклатура)
		КОГДА ЖурналПроводокЕПСБУДвиженияССубконто.ВидСубконтоКт3 = ЗНАЧЕНИЕ(ПланВидовХарактеристик.ВидыСубконто.Номенклатура)
			ТОГДА ВЫРАЗИТЬ(ЖурналПроводокЕПСБУДвиженияССубконто.СубконтоКт3 КАК Справочник.Номенклатура)
	КОНЕЦ,
	ЖурналПроводокЕПСБУДвиженияССубконто.СчетКт,
	ЖурналПроводокЕПСБУДвиженияССубконто.КЭКДт,
	ЖурналПроводокЕПСБУДвиженияССубконто.КЭККт,
	ЖурналПроводокЕПСБУДвиженияССубконто.Регистратор,
	ЖурналПроводокЕПСБУДвиженияССубконто.КПСКт,
	ЖурналПроводокЕПСБУДвиженияССубконто.СчетДт,
	ЖурналПроводокЕПСБУДвиженияССубконто.КПСДт,
	ЖурналПроводокЕПСБУДвиженияССубконто.КФО
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	МенюТребование.Ссылка КАК Ссылка,
	МенюТребование.Номер КАК ТекстНомер,
	МенюТребование.Дата КАК ТекстДата,
	МенюТребование.Организация КАК Организация,
	МенюТребование.Организация.НаименованиеПолное КАК НаименованиеОрганизации,
	МенюТребование.Организация.КодОКПО КАК КодОКПО,
	МенюТребование.Организация.ИНН КАК ИНН,
	МенюТребование.Организация.КПП КАК КПП,
	МенюТребование.Подразделение КАК ПодразделениеОтправитель,
	МенюТребование.Подразделение.Наименование КАК Подразделение,
	МенюТребование.ЦМО КАК ЦМООтправитель,
	МенюТребование.ЦМО.Сотрудник.Контрагент КАК ЦМО,
	МенюТребование.Материалы.(
		Ссылка КАК Ссылка,
		НомерСтроки КАК НомерСтроки,
		Номенклатура КАК НоменклатураСсылка,
		ВЫБОР
			КОГДА МенюТребование.Материалы.Номенклатура.НаименованиеПолное = ""
				ТОГДА МенюТребование.Материалы.Номенклатура.Наименование
			ИНАЧЕ МенюТребование.Материалы.Номенклатура.НаименованиеПолное
		КОНЕЦ КАК НоменклатураПредставление,
		Номенклатура.Наименование КАК НоменклатураНаименование,
		Номенклатура.НаименованиеПолное КАК НоменклатураНаименованиеПолное,
		Количество КАК Количество,
		ПРЕДСТАВЛЕНИЕ(МенюТребование.Материалы.Номенклатура.ЕдиницаИзмерения) КАК Единица,
		Номенклатура.Код КАК КодНоменклатуры,
		Номенклатура.НоменклатурныйНомер КАК НоменклатурныйНомерНоменклатуры,
		ВЫБОР
			КОГДА МенюТребование.Материалы.Номенклатура.НоменклатурныйНомер = ""
				ТОГДА МенюТребование.Материалы.Номенклатура.Код
			ИНАЧЕ МенюТребование.Материалы.Номенклатура.НоменклатурныйНомер
		КОНЕЦ КАК НоменклатурныйНомер,
		СчетУчета КАК СчетУчета,
		КПС КАК КПС
	) КАК Материалы
ИЗ
	Документ.МенюТребование КАК МенюТребование
ГДЕ
	МенюТребование.Ссылка В(&МассивОбъектов)

УПОРЯДОЧИТЬ ПО
	ТекстДата,
	ТекстНомер
Показать


Очень смущает МенюТребование.Материалы(..), я бы не вытаскивала так ТЧ в поля запроса, но, попросили оставить запрос типовым. Так вот здесь как раз и встречается одинаковая номенлкатура, которую нужно склеить в одну.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. soft_wind 17.01.20 15:59 Сейчас в теме
Очень весело звучит
Есть запрос, который не надо менять
и как его изменить?
Это как?
Доктор - вы уж определитесь!
3. user633533_encantado 11 17.01.20 16:00 Сейчас в теме
Выгрузите результат запроса в ТЗ. Сверните по нужным полям, затем обходите строки таблицы в цикле.
4. VmvLer 17.01.20 16:05 Сейчас в теме
после (3) можно приступать к выполнению
7. shard 279 17.01.20 18:05 Сейчас в теме
(3) а если не хочется переписывать обработку результата запроса, то можно заменить содержимое переменной результата запроса полученной ТЗ через запрос вида "выбрать .... поместить ВТ из &тз как тз; выбрать ВТ.* из ВТ как ВТ".
5. mrChOP93 96 17.01.20 16:07 Сейчас в теме
Можно создать тз и в цикле, сначала искать в ней обрабатываемую строчку, если не нашли, то обработать ее и добавить в созданную тз.
6. user774630 17.01.20 16:08 Сейчас в теме
Я бы написал
Текст.Запрос = СтрЗаменить(Текст.Запрос, "ВЫБРАТЬ РАЗРЕШЕННЫЕ", "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ");

То, что добавится к трем выборкам - проблемой не выглядит.
Kolyasik; +1 Ответить
Оставьте свое сообщение

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