Имя: Пароль:
1C
1С v8
Помогите с запросом: комбинации элементов в таб.части документов
0 Новичок_1С
 
04.03.25
16:02
Добрый день.
Подскажите в какую сторону смотреть. Есть документ с табличной частью. В табличной части допустим указаны цвета и количества.
Док №1
   Синий   1
   Красный 2
Док №2
   Оранжевый 3
   Красный 2
Док №3
   Синий 1
   Красный 2


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

Синий,Красный     2
Оранжевый,Красный 1

Понимаю надо какую то группировку делать, но как собрать уникальность комбинаций табличной части ?
1 Волшебник
 
04.03.25
16:04
Заведите строковый реквизит шапки, куда записывайте все цвета, отсортированные по возрастанию.
Потом по нему сгруппируйте в запросе.
2 vicof
 
04.03.25
16:09
(1) +1
3 Новичок_1С
 
04.03.25
16:15
Да, спасибо. Я думал в запросе собрать все варианты табличных частей. Но не получается. Так действительно легче.
4 Ильф
 
05.03.25
09:52
https://infostart.ru/1c/articles/336783/

если не ошибаюсь - пример №2
5 Ильф
 
05.03.25
09:54
если же менять конфу - то справочник "Наборы..."
и при записи выбирать или создавать новый набор и писать его в реквизит документа
6 Ильф
 
05.03.25
10:26
Функция ПолучитьНабор(Знач ТаблицаНабора) Экспорт
	
	Если Ложь Тогда ТаблицаНабора = Новый ТаблицаЗначений КонецЕсли;
	
	Если ТаблицаНабора.Количество() = 0 Тогда
		Возврат Справочники.НаборыВыполняемойНоменклатуры.ПустойНабор;
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос;
	
	Запрос.УстановитьПараметр("ТаблицаНабора",	ТаблицаНабора);	 
	
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ТаблицаНабора.Номенклатура КАК Номенклатура,
	|	ТаблицаНабора.ВыполняетсяКакМедсестра КАК ВыполняетсяКакМедсестра
	|ПОМЕСТИТЬ втТаблицаНабораСПустыми
	|ИЗ
	|	&ТаблицаНабора КАК ТаблицаНабора
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	втТаблицаНабора.Номенклатура КАК Номенклатура,
	|	втТаблицаНабора.ВыполняетсяКакМедсестра КАК ВыполняетсяКакМедсестра
	|ПОМЕСТИТЬ втТаблицаНабора
	|ИЗ
	|	втТаблицаНабораСПустыми КАК втТаблицаНабора
	|ГДЕ
	|	втТаблицаНабора.Номенклатура <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	втТаблицаНабора.Номенклатура КАК Номенклатура,
	|	втТаблицаНабора.ВыполняетсяКакМедсестра КАК ВыполняетсяКакМедсестра,
	|	НаборыВыполняемойНоменклатуры.Ссылка КАК Ссылка1
	|ПОМЕСТИТЬ втУмножение
	|ИЗ
	|	втТаблицаНабора КАК втТаблицаНабора
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НаборыВыполняемойНоменклатуры КАК НаборыВыполняемойНоменклатуры
	|		ПО (ИСТИНА)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ЕСТЬNULL(втУмножение.Ссылка1, СоставНабора.Ссылка) КАК Ссылка1
	|ПОМЕСТИТЬ втИсключаемые
	|ИЗ
	|	втУмножение КАК втУмножение
	|		ПОЛНОЕ СОЕДИНЕНИЕ Справочник.НаборыВыполняемойНоменклатуры.СоставНабора КАК СоставНабора
	|		ПО втУмножение.Ссылка1 = СоставНабора.Ссылка
	|			И втУмножение.Номенклатура = СоставНабора.Номенклатура
	|			И втУмножение.ВыполняетсяКакМедсестра = СоставНабора.ВыполняетсяКакМедсестра
	|ГДЕ
	|	(СоставНабора.Ссылка ЕСТЬ NULL
	|			ИЛИ втУмножение.Ссылка1 ЕСТЬ NULL)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	НаборыВыполняемойНоменклатуры.Ссылка КАК Ссылка
	|ПОМЕСТИТЬ втНаборыВыполняемойНоменклатуры
	|ИЗ
	|	Справочник.НаборыВыполняемойНоменклатуры КАК НаборыВыполняемойНоменклатуры
	|		ЛЕВОЕ СОЕДИНЕНИЕ втИсключаемые КАК Исключаемые
	|		ПО (Исключаемые.Ссылка1 = НаборыВыполняемойНоменклатуры.Ссылка)
	|ГДЕ
	|	Исключаемые.Ссылка1 ЕСТЬ NULL
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	СоставНабора.Ссылка КАК Ссылка
	|ИЗ
	|	втТаблицаНабора КАК втТаблицаНабора
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыВыполняемойНоменклатуры.СоставНабора КАК СоставНабора
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ втНаборыВыполняемойНоменклатуры КАК втНаборыВыполняемойНоменклатуры
	|			ПО СоставНабора.Ссылка = втНаборыВыполняемойНоменклатуры.Ссылка
	|		ПО втТаблицаНабора.Номенклатура = СоставНабора.Номенклатура
	|			И втТаблицаНабора.ВыполняетсяКакМедсестра = СоставНабора.ВыполняетсяКакМедсестра";
	
	РезультатЗапроса = Запрос.Выполнить();	
	
	ВыборкаВариаций = РезультатЗапроса.Выбрать();
	
	Если ВыборкаВариаций.Следующий() Тогда
		
		НаборНоменклатуры = ВыборкаВариаций.Ссылка;	
		
	Иначе
		
		НаборНоменклатуры = Неопределено;
		
		НовыйНабор = Справочники.НаборыВыполняемойНоменклатуры.СоздатьЭлемент();
		
		Записывать = Ложь;
		
		Для Каждого СтрокаТЗ Из ТаблицаНабора Цикл
			
			Если ЗначениеЗаполнено(СтрокаТЗ.Номенклатура) Тогда
				СтрокаТЧ = НовыйНабор.СоставНабора.Добавить();
				ЗаполнитьЗначенияСвойств(СтрокаТЧ,СтрокаТЗ);
				Записывать = Истина;
			КонецЕсли;
			
		КонецЦикла;
		
		Если Записывать Тогда
			НовыйНабор.Записать();
			НаборНоменклатуры = НовыйНабор.Ссылка;
		КонецЕсли;
		
	КонецЕсли;
	
	Возврат НаборНоменклатуры;
	
КонецФункции
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой