Получение значения расшифровки и значений вышестоящих группировок расшифровки в отчете СКД

20.07.16

Разработка - СКД

Ниже приводится небольшой кусок кода, позволяющий получить значение расшифровки и значения всех вышестоящих группировок расшифровки в отчете построенном на СКД при использовании обычных форм. Имя поля и значение просто выводится пользователю в сообщении. Соответственно, вы можете вставить свой алгоритм вместо вывода сообщений. Реализовано с помощью рекурсивного вызова процедуры, получающей значения вышестоящей группировки.

В форме для поля "Результат" определим для события "ОбработкаРасшифровки" процедуру "РезультатОбработкиРасшифровки". И, соответствено, тело процедуры будет следующим:

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;
 
    //Значение текущего поля     
    Поле = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0];
    Сообщить("Поле: " + Поле.Поле + ", значение: " + Поле.Значение);
    
    //Значения всех вышестоящих группировок     
    ВывестиЗначениеГруппировки(Расшифровка);

КонецПроцедуры 

Где процедура "ВывестиЗначениеГруппировки" имеет следующее содержание:

Процедура ВывестиЗначениеГруппировки(ТекРасшифровка)
	
	МассивРодителей = ДанныеРасшифровки.Элементы[ТекРасшифровка].ПолучитьРодителей();
	Для СчРодителей = 1 По МассивРодителей.Количество() Цикл
	
		ПолеРодитель = МассивРодителей[СчРодителей-1];
		Если Число(ПолеРодитель.Идентификатор) > 0 Тогда
			
			//Получим текущее поле
			Если ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
			   МассивПолей = ПолеРодитель.ПолучитьПоля();
			ИначеЕсли ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
			   МассивПолей = ПолеРодитель.ПолучитьРодителей()[0].ПолучитьПоля();
			КонецЕсли; 
			   
			Для СчПолей = 1 По МассивПолей.Количество() Цикл
				
				Поле = МассивПолей[СчПолей-1];
			
				//Выведем значения текущей расшифровки
				Сообщить("Поле: " + Поле.Поле + ", значение: " + Поле.Значение);
				
				//Рекурсивный вызов процедуры. 
				РасшифровкиВыше = ПолеРодитель.ПолучитьРодителей()[0].Идентификатор;
				ВывестиЗначениеГруппировки(РасшифровкиВыше);
				
			КонецЦикла;	
			
		КонецЕсли;		
	КонецЦикла;
	
КонецПроцедуры

Пример работы данных процедур можно посмотреть здесь  

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    249001    1381    421    

1140

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5569    299    shapa_pro    25    

66

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    16756    ovetgana    112    

107

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    9673    krasnoshchekovpavel    5    

67

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8959    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15842    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

СКД – инструмент, на базе которого в современных конфигурациях реализованы практически все отчеты. СКД используется в динамических списках, печатных формах и универсальных механизмах. Если построить простейший отчет может каждый разработчик, то с нюансами знакомы далеко не все. Расскажем о неочевидных на первый взгляд приемах, способных значительно повысить качество отчетов.

24.12.2024    13443    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    9966    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Chernov_Dmitriy 89 12.12.13 11:39 Сейчас в теме
Автор спасибо - после 5 часов поисков твой код подошел. Только немного модифицировал - так как не отрабатывал группировки:
Процедура ВывестиЗначениеГруппировки(ТекРасшифровка)

МассивРодителей = ДанныеРасшифровки.Элементы[ТекРасшифровка].ПолучитьРодителей();
Для Сч = 1 По МассивРодителей.Количество() Цикл

ПолеРодитель = МассивРодителей[Сч-1];
Если ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда

//Выведем значения текущей расшифровки
Поле = ПолеРодитель.ПолучитьПоля()[0];
Сообщить("Поле: " + Поле.Поле + ", значение: " + Поле.Значение);

//Рекурсивный вызов процедуры.
РасшифровкиВыше = ПолеРодитель.ПолучитьРодителей()[0].Идентификатор;
ВывестиЗначениеГруппировки(РасшифровкиВыше);
ИначеЕсли ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") тогда
Попытка
Поле = ПолеРодитель.ПолучитьРодителей()[0].ПолучитьПоля()[0] ;
Сообщить("Поле: " + Поле.Поле + ", значение: " + Поле.Значение);

//Рекурсивный вызов процедуры.
РасшифровкиВыше = ПолеРодитель.ПолучитьРодителей()[0].Идентификатор;
ВывестиЗначениеГруппировки(РасшифровкиВыше);

Исключение

КонецПопытки;
КонецЕсли;

КонецЦикла;

КонецПроцедуры
2. Tavalik 3454 20.12.13 13:12 Сейчас в теме
Спасибо. В статье исправил и тоже немного оптимизировал :)
3. AndrewVVS 07.02.14 16:26 Сейчас в теме
Поле = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0],
А если ДанныеРасшифровки = Неопределено, тогда будет ошибка...
Нашел: нужно было в типовой процедуре добавить "ДанныеРасшифровки", по умолчанию там Неопределено!

Процедура ОбновитьОтчет() Экспорт

СформироватьОтчет(ЭтаФорма.ЭлементыФормы.Результат, ДанныеРасшифровки, Ложь);

КонецПроцедуры
4. xten 49 22.04.14 13:14 Сейчас в теме
Я правильно понимаю, что это фактически универсальный шаблонный код (если можно так выразиться), который можно в много где использовать )) ?
5. Tavalik 3454 23.04.14 07:14 Сейчас в теме
(4) xten,
Да, конечно. Код будет работать в любом отчете на СКД.
6. katunya88 19 15.05.14 06:12 Сейчас в теме
ты просто супер! то что нужно! спасибо!
7. Cyberhawk 137 27.10.14 18:54 Сейчас в теме
А кто знает, как получать значения ресурса из расшифровки?
BenDigget; VickWood; echo77; +3 Ответить
22. GG_Dots 44 18.02.20 08:43 Сейчас в теме
(7) Привет. Недавно столкнулся с такой задачей. Достаточно поле ресурса описать в макете и указать у него параметр расшифровки с выражением. И тогда программно сможешь получить значение ресурса: www.craft1c.ru
8. ig0rec 17.11.14 13:22 Сейчас в теме
А если родителей несколько на одном уровне ( когда расшифровка и по столбцам и по колонкам), то выберутся только первые группировки, вот мой вариант

Процедура РекурсивноПолучитьРодителей(Элемент, Структура)
	
	Родители = Элемент.ПолучитьРодителей(); 
	Для Каждого Родитель из Родители Цикл
		Если ТипЗнч(Родитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
			Поля = Родитель.ПолучитьПоля();
			Для Каждого Поле из Поля Цикл
				Если Не Поле.Иерархия  Тогда
					Структура.Вставить(Поле.Поле,Поле.Значение);
				КонецЕсли;
			КонецЦикла;
        КонецЕсли;
		РекурсивноПолучитьРодителей(Родитель, Структура)	
	КонецЦикла;
	
КонецПроцедуры
Показать


А использую процедуру так

    
        Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
        Структура = Новый Структура;
	РекурсивноПолучитьРодителей(Данные.Элементы.Получить(Расшифровка), Структура);


но не могу получить значение ресурса, м.б. кто-нибудь подскажет?
1C_tradeomsk; T.A.Sh.; +2 Ответить
9. Tavalik 3454 23.05.15 12:23 Сейчас в теме
(8) ig0rec,

Спасибо за комментарий.
Столкнулся с подобной проблемой. Оптимизировал код в публикации для вывода всех группировочных полей на каждом уровне группировки.
32. 1C_tradeomsk 106 23.09.25 02:13 Сейчас в теме
(8)
Структура = Новый Структура;
РекурсивноПолучитьРодителей(Данные.Элементы.Получить(Расшифровка), Структура);


ПАРЕНЬ ТЫ ГЕНИЙ!
напиши мне свой номер в ТГ (@applesnail) переведу пару соток на пиво!
10. Oleg-and-reevich 6 29.01.16 17:15 Сейчас в теме
Автор, огромное спасибо! Просто не представляете, как выручил Ваш код)!
11. rif-nrr 15 16.02.16 23:01 Сейчас в теме
Спасибо за статью! очень выручило
12. Vika260740 14.08.16 10:53 Сейчас в теме
Спасибо за полезный код!
13. TreeDogNight 22 16.02.17 09:56 Сейчас в теме
Доработал ваш код, добавил возможность получения значений полей детальных записей (до этого получалось только значение текущего поля, откуда вызывалась расшифровка):
&НаКлиенте
Функция ПолучитьСтруктуруРасшифровки(Расшифровка)
	
	СтруктураРасшифровки = Новый Структура;	    
	ЗаполнитьСтруктуруПолейРасшифровки(Расшифровка, СтруктураРасшифровки); 
	
	Возврат СтруктураРасшифровки;
	
КонецФункции 

&НаСервере
Процедура ЗаполнитьСтруктуруПолейРасшифровки(Знач Расшифровка, СтруктураПолей, Знач Данные = "")
	
	Если Данные = "" Тогда
		Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
		
		Если ТипЗнч(Данные.Элементы[Расшифровка]) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
			Поля = Данные.Элементы[Расшифровка].ПолучитьПоля();                   
			Для каждого Поле Из Поля Цикл
				СтруктураПолей.Вставить(ПреобразоватьИмяПоляГруппировки(Поле.Поле), Поле.Значение);
			КонецЦикла;
			
			Индекс = Число(Расшифровка);
			Пока Индекс Цикл
				ЭлементРасшифровки = Данные.Элементы[Индекс];
				Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
					Прервать;	
				КонецЕсли;
				
				Индекс = Индекс + 1;
			КонецЦикла;
			
			Индекс = Индекс - 1;
			Пока Индекс Цикл
				ЭлементРасшифровки = Данные.Элементы[Индекс];
				Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
					Поля = ЭлементРасшифровки.ПолучитьПоля();                   
					Для каждого Поле Из Поля Цикл
						Если Не ТипЗнч(Поле.Значение) = Тип("Число") Тогда
							СтруктураПолей.Вставить(ПреобразоватьИмяПоляГруппировки(Поле.Поле), Поле.Значение);
						КонецЕсли; 	
					КонецЦикла;
					
					Индекс = Индекс - 1;
				Иначе 
					Прервать;
				КонецЕсли; 
			КонецЦикла; 
		КонецЕсли;
		
		ЗаполнитьСтруктуруПолейРасшифровки(Данные.Элементы[Расшифровка], СтруктураПолей, Данные);
	Иначе 
		МассивРодителей = Расшифровка.ПолучитьРодителей();
		Для каждого ПолеРодитель из МассивРодителей Цикл
			Если Число(ПолеРодитель.Идентификатор) > 0 Тогда
				Если ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
					МассивПолей = ПолеРодитель.ПолучитьПоля();
				ИначеЕсли ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
					МассивПолей = ПолеРодитель.ПолучитьРодителей()[0].ПолучитьПоля();
				КонецЕсли; 
				
				Для каждого Поле из МассивПолей Цикл
					СтруктураПолей.Вставить(ПреобразоватьИмяПоляГруппировки(Поле.Поле), Поле.Значение);
					
					РасшифровкиВыше = ПолеРодитель.ПолучитьРодителей();
					Для каждого РодительВыше Из РасшифровкиВыше Цикл
						ЗаполнитьСтруктуруПолейРасшифровки(РодительВыше, СтруктураПолей, Данные);              
					КонецЦикла; 
				КонецЦикла;    
			КонецЕсли;        
		КонецЦикла;
	КонецЕсли; 
		
КонецПроцедуры
Показать
16. Westbound 21.11.17 13:49 Сейчас в теме
(13) Забыли вставить функцию ПреобразоватьИмяПоляГруппировки, но это ладно. В любом случае все значения ресурсов возвращаются с Null'ом.
knyazke; AlexKoso; eeeio; TreeDogNight; +4 Ответить
14. queit 65 13.04.17 07:56 Сейчас в теме
Спасибо за статью. Очень полезная.
Только вот столкнулся с одной проблемкой. Почему-то "Поле.Значение" всегда null, при этом имя поля выводится правильно.
Что это может быть?
eeeio; COMPER; Ignatov_mu; romku; +4 Ответить
19. dmitrii665 22 10.10.19 16:38 Сейчас в теме
(14) Добрый день та же проблема, что то удалось выяснить?
knyazke; eeeio; COMPER; +3 Ответить
21. COMPER 147 06.11.19 12:17 Сейчас в теме
(19) Тоже самое. Как вылечить?
knyazke; eeeio; +2 Ответить
15. sulfur17 70 23.05.17 22:05 Сейчас в теме
Пытаюсь расшифровку таблицы сделать из строки ВСЕГО и вот в этой строке получается ошибка
МассивПолей = ПолеРодитель.ПолучитьРодителей()[0].ПолучитьПоля();

т.к. ПолучитьРодителей() возвращает пустой массив.
17. kanat1 29 21.02.18 15:03 Сейчас в теме
Спасибо. Очень помогло
18. zsergey_ 7 30.07.18 05:31 Сейчас в теме
20. mars30ob 15.10.19 10:03 Сейчас в теме
Очень помогло, спасибо!
Добавил вывод пути к полю, вариант для УФ
&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
	СтандартнаяОбработка = Ложь;
	РезультатОбработкаРасшифровкиНаСервере(Расшифровка);
КонецПроцедуры

&НаСервере
Процедура РезультатОбработкаРасшифровкиНаСервере(Расшифровка)
	ДанныеРасшифровкиНаСервере = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
	ВывестиЗначениеГруппировки(ДанныеРасшифровкиНаСервере, Расшифровка, "");
КонецПроцедуры

&НаСервере
Процедура ВывестиЗначениеГруппировки(ДанныеРасшифровкиНаСервере, ТекРасшифровка, Путь)
    
	МассивРодителей = ДанныеРасшифровкиНаСервере.Элементы[ТекРасшифровка].ПолучитьРодителей();
	Путь = Путь + ".ПолучитьРодителей()";
	Для СчРодителей = 0 По МассивРодителей.Количество()-1 Цикл
		
		ПолеРодитель = МассивРодителей[СчРодителей];
		Если Число(ПолеРодитель.Идентификатор) > 0 Тогда
			
			//Получим текущее поле
			Если ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
				МассивПолей = ПолеРодитель.ПолучитьПоля();
				ЭтоГруппировка = Ложь;
			ИначеЕсли ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
				МассивПолей = ПолеРодитель.ПолучитьРодителей()[0].ПолучитьПоля();
				ЭтоГруппировка = Истина;
			КонецЕсли; 
			
			Для СчПолей = 0 По МассивПолей.Количество()-1 Цикл
				
				Поле = МассивПолей[СчПолей];
				
				//Выведем значения текущей расшифровки
				Сообщить("Поле: " + Поле.Поле + ", значение: " + Поле.Значение+", путь = "+Путь+"["+СчРодителей+"]"+?(ЭтоГруппировка,".ПолучитьРодителей()[0].ПолучитьПоля()",".ПолучитьПоля()")+"["+СчПолей+"]");
				
				//Рекурсивный вызов процедуры. 
				РасшифровкиВыше = ПолеРодитель.ПолучитьРодителей()[0].Идентификатор;
				ВывестиЗначениеГруппировки(ДанныеРасшифровкиНаСервере, РасшифровкиВыше, Путь+"["+СчРодителей+"]"+?(ЭтоГруппировка,".ПолучитьРодителей()[0].ПолучитьПоля()",".ПолучитьПоля()")+"["+СчПолей+"]");
				
			КонецЦикла;    
			
		КонецЕсли;        
	КонецЦикла;
	
КонецПроцедуры
Показать


Получается типа: "Поле: Касса, значение: Основная касса, путь = .ПолучитьРодителей()[0].ПолучитьПоля()[1]"
и путь можно использовать для прямого получения поля в коде:

&НаСервере
Процедура РезультатОбработкаРасшифровкиНаСервере(Расшифровка)
	ДанныеРасшифровкиНаСервере = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);

	Попытка
		Касса = ДанныеРасшифровкиНаСервере.Элементы[Расшифровка].ПолучитьРодителей()[0].ПолучитьПоля()[1].Значение;
		//открыть расшифровку по кассе ...
	Исключение
	КонецПопытки;
КонецПроцедуры
Показать


путь, конечно, зависит от группировки, в которой находится выбранная пользователем ячейка. Способ не супер, но работает, когда надо сделать расшифровку только для определенной группировки
dammit666; +1 Ответить
26. BigBee 23.11.23 11:11 Сейчас в теме
(20) тоже воспользовался кодом, но исправил ошибку когда рекурсивная процедура доходит до самой верхней группировки и добавил входящий параметр МассивУровней:


  &НаСервере
Процедура РезультатОбработкаРасшифровкиНаСервере(Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)

	ДанныеРасшифровкиОтчета = ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки);

	МассивУровней = Новый Массив; //если пустой, то высший уровень - ИТОГО по отчету
	ВывестиЗначениеГруппировки(ДанныеРасшифровкиОтчета,Расшифровка,"",МассивУровней);
	
	Если МассивУровней.Количество() > 0 Тогда
		ДополнительныеПараметры.УровеньГруппировки  	= МассивУровней.Количество();
		ДополнительныеПараметры.ПолеГруппировки 	 	= МассивУровней[0].ПолеГруппировки;
		ДополнительныеПараметры.ЗначениеГруппировки 	= МассивУровней[0].ЗначениеГруппировки;
	Иначе	 
		ДополнительныеПараметры.УровеньГруппировки  	= 0;//итоги по отчету
	КонецЕсли;                                

.......
Показать


&НаСервере
Процедура ВывестиЗначениеГруппировки(ДанныеРасшифровкиНаСервере, ТекРасшифровка, Путь,мМУровней)
    
    МассивРодителей = ДанныеРасшифровкиНаСервере.Элементы[ТекРасшифровка].ПолучитьРодителей();
    Путь = Путь + ".ПолучитьРодителей()";
    Для СчРодителей = 0 По МассивРодителей.Количество()-1 Цикл
        
        ПолеРодитель = МассивРодителей[СчРодителей];
        Если Число(ПолеРодитель.Идентификатор) > 0 Тогда
            
            //Получим текущее поле
            Если ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
                МассивПолей = ПолеРодитель.ПолучитьПоля();
                ЭтоГруппировка = Ложь;
            ИначеЕсли ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
                МассивПолей = ПолеРодитель.ПолучитьРодителей(); 
				Если МассивПолей.Количество() > 0 Тогда
					 МассивПолей = МассивПолей[0].ПолучитьПоля();
                	 ЭтоГруппировка = Истина;
				 Иначе	                     
					 ЭтоГруппировка = Ложь;
				КонецЕсли;	 
            КонецЕсли; 
            
            Для СчПолей = 0 По МассивПолей.Количество()-1 Цикл
                
                Поле = МассивПолей[СчПолей];
                
                //Выведем значения текущей расшифровки
                //Сообщить("Поле: " + Поле.Поле + ", значение: " + Поле.Значение+", путь = "+Путь+"["+СчРодителей+"]"+?(ЭтоГруппировка,".ПолучитьРодителей()[0].ПолучитьПоля()",".ПолучитьПоля()")+"["+СчПолей+"]");
				мМУровней.Добавить(Новый Структура("ПолеГруппировки,ЗначениеГруппировки",Поле.Поле,Поле.Значение));
				
                //Рекурсивный вызов процедуры. 
                РасшифровкиВыше = ПолеРодитель.ПолучитьРодителей()[0].Идентификатор;
                ВывестиЗначениеГруппировки(ДанныеРасшифровкиНаСервере, РасшифровкиВыше, Путь+"["+СчРодителей+"]"+?(ЭтоГруппировка,".ПолучитьРодителей()[0].ПолучитьПоля()",".ПолучитьПоля()")+"["+СчПолей+"]",мМУровней);
                
            КонецЦикла;    
            
        КонецЕсли;        
    КонецЦикла;
    
КонецПроцедуры
Показать
23. userUlyana 03.07.20 17:27 Сейчас в теме
Спасибо большое!!!
это то что надо!
24. delat 33 15.07.20 16:35 Сейчас в теме
25. Неопределено 111 18.12.20 07:56 Сейчас в теме
Переменная ДанныеРасшифровки является строкой и имеет вид "e1cib/tempstorage/ff474301-f927-4908-868e-38d2416a115c?seanceId=71b2f942-a665-4245-b2c1-a07b183269e3".
27. Andrekaa 02.04.24 11:15 Сейчас в теме
А как получилось все таки Ресурс?
28. ig0rec 13.05.24 23:57 Сейчас в теме
(27) я получал запросом, подобным запросу отчета, но уже с указанием всех группировок в качестве параметров
29. G_109481006739202833089 11.07.24 15:51 Сейчас в теме
(28) Здравствуйте. А можно подробнее пожалуйста.
30. ig0rec 11.07.24 16:02 Сейчас в теме
(29) Напишите текст запроса, которым формируете отчет, добавьте в него доп условия по полям группировок, на выходе получите искомый набор строк, а дальше смотря чтотв ресурсе было. Не уверен, что так правильно, но 11 лет назад нашел только такой способ)
31. fixin 4332 16.08.24 15:13 Сейчас в теме
Спасибо, помогло.

Я вот такую функцию сделал:

Функция ИнформацияОТекущейРасшифровке(ДанныеРасшифровки, Расшифровка) Экспорт
	
	//https://infostart.ru/1c/articles/195432/    
	Р = Новый Структура("Поле, Значение");             
	Р.Вставить("Поля", Новый Соответствие());
	
	Поля = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля();
	Если Поля.Количество() > 0 Тогда
		//ВывестиЗначениеГруппировки(ДанныеРасшифровки, Поля[0]);
		Поле = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0];
		Р.Поле = Поле.Поле; Р.Значение = Поле.Значение;
	КонецЕсли;                                                           
	
	ЗаполнитьПоляРасшифровки(Р.Поля, ДанныеРасшифровки, Расшифровка);
	
	Возврат Р;
	
КонецФункции

Процедура ЗаполнитьПоляРасшифровки(СооПоля, ДанныеРасшифровки, ТекРасшифровка) 
    
    МассивРодителей = ДанныеРасшифровки.Элементы[ТекРасшифровка].ПолучитьРодителей();
    Для СчРодителей = 1 По МассивРодителей.Количество() Цикл
    
        ПолеРодитель = МассивРодителей[СчРодителей-1];
        Если Число(ПолеРодитель.Идентификатор) > 0 Тогда
            
            //Получим текущее поле
            Если ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
               МассивПолей = ПолеРодитель.ПолучитьПоля();
            ИначеЕсли ТипЗнч(ПолеРодитель) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
               МассивПолей = ПолеРодитель.ПолучитьРодителей()[0].ПолучитьПоля();
            КонецЕсли; 
               
            Для СчПолей = 1 По МассивПолей.Количество() Цикл
                
                Поле = МассивПолей[СчПолей-1];
            
                //Выведем значения текущей расшифровки 
				СооПоля.Вставить(Поле.Поле, Поле.Значение);
                
                //Рекурсивный вызов процедуры. 
                РасшифровкиВыше = ПолеРодитель.ПолучитьРодителей()[0].Идентификатор;
                ЗаполнитьПоляРасшифровки(СооПоля, ДанныеРасшифровки, РасшифровкиВыше);
                
            КонецЦикла;    
            
        КонецЕсли;        
    КонецЦикла;
    
КонецПроцедуры

Показать


Пример:

&НаКлиенте
Процедура БС_ОтчетТабличныйДокументВыборВместо(Элемент, Область, СтандартнаяОбработка)
	Если ПроверкаТипаОтчетаПоТехнике() Тогда                        
		Расшифровка = Область.Расшифровка;
		Инфо = БС_ПолучитьИнформациюРасшифровки(Расшифровка); 
		Если Инфо.Поле = "ВычАвтопарк" Тогда
			ПоказатьЗначение(, Инфо.Значение);
		ИначеЕсли Инфо.Поле = "ВычВидТехники" Тогда
			ПоказатьЗначение(, Инфо.Поля["БС_ШаблонХарактеристик"]);
		КонецЕсли;
		СтандартнаяОбработка = ложь;
	КонецЕсли;
	ПродолжитьВызов(Элемент, Область, СтандартнаяОбработка);
КонецПроцедуры

Функция БС_ПолучитьИнформациюРасшифровки(Расшифровка)
	ДанныеРасшифровки = ПолучитьИзВременногоХранилища(ОтчетДанныеРасшифровки);
	
	Инфо = БС_С.ИнформацияОТекущейРасшифровке(ДанныеРасшифровки, Расшифровка);
	Возврат Инфо;
КонецФункции 

Показать


Хотя можно сразу адрес строкой передавать данных расшифровки.
Для отправки сообщения требуется регистрация/авторизация