Определение наличия детальных записей СКД

1. frkbvfnjh 787 17.01.20 08:22 Сейчас в теме
Доброго всем время! Как можно программно определить наличие детальных записей в структуре группировок СКД?
По теме из базы знаний
Найденные решения
3. dhurricane 17.01.20 09:02 Сейчас в теме
(1) Примерно вот так:
Процедура ВыполнитьПроверку()
	
	НастройкиКД = Новый НастройкиКомпоновкиДанных;
	
	Результат = ЕстьДетальныеЗаписи(НастройкиКД.Структура); 
	
КонецПроцедуры

Функция ЕстьДетальныеЗаписи(СтруктураНастроекКД)
	
	Для каждого ЭлементСтруктуры Из СтруктураНастроекКД Цикл
		
		Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных")
			Или ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаТаблицыКомпоновкиДанных")
			Или ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда
			
			Если ЭлементСтруктуры.ПоляГруппировки.Элементы.Количество() = 0
				Или ЕстьДетальныеЗаписи(ЭлементСтруктуры.Структура) Тогда 
				Возврат Истина;
			КонецЕсли; 
			
		ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда 
			
			Если ЕстьДетальныеЗаписи(ЭлементСтруктуры.Строки)
				Или ЕстьДетальныеЗаписи(ЭлементСтруктуры.Колонки) Тогда
				Возврат Истина;
			КонецЕсли; 
			
		ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда 
			
			Если ЕстьДетальныеЗаписи(ЭлементСтруктуры.Серии)
				Или ЕстьДетальныеЗаписи(ЭлементСтруктуры.Точки) Тогда
				Возврат Истина;
			КонецЕсли;
			
		ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
			
			Если ЕстьДетальныеЗаписи(ЭлементСтруктуры.Настройки.Структура) Тогда
				Возврат Истина;
			КонецЕсли; 
			
		КонецЕсли; 
		
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции
Показать
frkbvfnjh; login1020; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 17.01.20 08:48 Сейчас в теме
(1) Рекурсивно обойти структуру отчета, попутно проверяя наличие группировки без полей группировки.
3. dhurricane 17.01.20 09:02 Сейчас в теме
(1) Примерно вот так:
Процедура ВыполнитьПроверку()
	
	НастройкиКД = Новый НастройкиКомпоновкиДанных;
	
	Результат = ЕстьДетальныеЗаписи(НастройкиКД.Структура); 
	
КонецПроцедуры

Функция ЕстьДетальныеЗаписи(СтруктураНастроекКД)
	
	Для каждого ЭлементСтруктуры Из СтруктураНастроекКД Цикл
		
		Если ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаКомпоновкиДанных")
			Или ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаТаблицыКомпоновкиДанных")
			Или ТипЗнч(ЭлементСтруктуры) = Тип("ГруппировкаДиаграммыКомпоновкиДанных") Тогда
			
			Если ЭлементСтруктуры.ПоляГруппировки.Элементы.Количество() = 0
				Или ЕстьДетальныеЗаписи(ЭлементСтруктуры.Структура) Тогда 
				Возврат Истина;
			КонецЕсли; 
			
		ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ТаблицаКомпоновкиДанных") Тогда 
			
			Если ЕстьДетальныеЗаписи(ЭлементСтруктуры.Строки)
				Или ЕстьДетальныеЗаписи(ЭлементСтруктуры.Колонки) Тогда
				Возврат Истина;
			КонецЕсли; 
			
		ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("ДиаграммаКомпоновкиДанных") Тогда 
			
			Если ЕстьДетальныеЗаписи(ЭлементСтруктуры.Серии)
				Или ЕстьДетальныеЗаписи(ЭлементСтруктуры.Точки) Тогда
				Возврат Истина;
			КонецЕсли;
			
		ИначеЕсли ТипЗнч(ЭлементСтруктуры) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
			
			Если ЕстьДетальныеЗаписи(ЭлементСтруктуры.Настройки.Структура) Тогда
				Возврат Истина;
			КонецЕсли; 
			
		КонецЕсли; 
		
	КонецЦикла;
	
	Возврат Ложь;
	
КонецФункции
Показать
frkbvfnjh; login1020; +2 Ответить
4. frkbvfnjh 787 17.01.20 09:43 Сейчас в теме
(3) Блииин, как вы во всем этом разбираетесь? Спасибо большое все работает!
Оставьте свое сообщение

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