Каталог решений - Данные строки в обработке расшифровки СКД

Данные строки в обработке расшифровки СКД

Данные строки в обработке расшифровки СКД

В наличии

Скорее заметка на память, чем статья. Прошелся по форумам и не нашел решения данной проблемы. Везде предлагается получить значения только группировок, в которые входит эта ячейка. Был еще способ создать свой макет и там в параметрах ячейки указать параметры расшифровки, но мне показалось такое решение слишком сложным. Предлагаю другой путь — обойти ячейки строки, для каждой ячейки получить реквизит "Расшифровка" и данные расшифровки.

Категория:

Описание

Код должен располагаться в модуле формы отчета. У поля табличного документа событие «ОбработкаРасшифровки» должно ссылаться на процедуру РезультатОбработкаРасшифровки

Решение, которое предлагают на форумах для получения значений группировок:

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

Функции для передвижения по строке: разбирается имя ячейки и увеличивается или уменьшается номер колонки:

Функция РаспарситьИмяПоля(ИмяПоля)
	
	ИндексСи = Найти(ИмяПоля, "C");
	БазаИмени = Лев(ИмяПоля, ИндексСи);
	НомерКолонкиСтрокой = СтрЗаменить(ИмяПоля, БазаИмени, "");
	НомерКолонки = Число(НомерКолонкиСтрокой);
	
	Возврат Новый Структура (
		"БазаИмени, НомерКолонки",
		БазаИмени,
		НомерКолонки
		);
		
	
КонецФункции
 
Функция ИмяПредыдущегоПоляВСтроке(ИмяПоля)

	Данные = РаспарситьИмяПоля(ИмяПоля);
	
	Если Данные.НомерКолонки = 1 Тогда
		Возврат "";
	КонецЕсли;
	
	Результат = Данные.БазаИмени + (Данные.НомерКолонки - 1);
	
	Возврат Результат;
	
КонецФункции
 
Функция ИмяСледующегоПоляВСтроке(ИмяПоля, МаксНомерКолонки = 100)

	Данные = РаспарситьИмяПоля(ИмяПоля);
	
	Если Данные.НомерКолонки = МаксНомерКолонки Тогда
		Возврат "";
	КонецЕсли;
	
	Результат = Данные.БазаИмени + (Данные.НомерКолонки + 1);
	
	Возврат Результат;
	
КонецФункции

Собственно функции, которые собирают значения ячеек строки и добавляют их к переданной структуре

Функция ПолучитьДанныеРасшифровкиПоИмени(Элемент, ИмяПоля, СтруктураОтбора = Неопределено)
	
	Если СтруктураОтбора = Неопределено Тогда
		СтруктураОтбора = Новый Структура;
	КонецЕсли; 

	Расшифровка = Элемент.ПолучитьОбласть(ИмяПоля).ТекущаяОбласть.Расшифровка;
	Если Расшифровка = Неопределено тогда
		Возврат СтруктураОтбора;
	КонецЕсли;
	
	Поле = ДанныеРасшифровки.Элементы[Расшифровка];
	
	СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(Поле, СтруктураОтбора);
	
	Возврат СтруктураОтбора;
	
КонецФункции
 

Функция ПолучитьДанныеРасшифровкиЯчеекСтроки(Элемент, СтруктураОтбора = Неопределено)
	
	Если СтруктураОтбора = Неопределено Тогда
		СтруктураОтбора = Новый Структура;
	КонецЕсли; 

	Если ТипЗнч(Элемент) = Тип("ПолеТабличногоДокумента") Тогда
		
		ТекущееИмя = Элемент.ТекущаяОбласть.Имя;
		
		ИмяСчетчик = ИмяПредыдущегоПоляВСтроке(ТекущееИмя);
		Пока ИмяСчетчик <> "" Цикл
			
			СтруктураОтбора = ПолучитьДанныеРасшифровкиПоИмени(Элемент, ИмяСчетчик, СтруктураОтбора);
			ИмяСчетчик = ИмяПредыдущегоПоляВСтроке(ИмяСчетчик);
			
		КонецЦикла; 
	    
		ИмяСчетчик = ИмяСледующегоПоляВСтроке(ТекущееИмя);
		Пока ИмяСчетчик <> "" Цикл
			
			СтруктураОтбора = ПолучитьДанныеРасшифровкиПоИмени(Элемент, ИмяСчетчик, СтруктураОтбора);
			ИмяСчетчик = ИмяСледующегоПоляВСтроке(ИмяСчетчик);
			
		КонецЦикла; 
		
	КонецЕсли;
	
	Возврат СтруктураОтбора;
	
	
КонецФункции

Теперь в обработке расшифровки мы можем получить структуру со значениями группировок и ячеек нашей строки

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	Поле = ДанныеРасшифровки.Элементы[Расшифровка];
	СтруктураОтбора = ПолучитьРекурсивноСтруктуруОтбора(Поле);
	СтруктураОтбора = ПолучитьДанныеРасшифровкиЯчеекСтроки(Элемент, СтруктураОтбора);
	
КонецПроцедуры

 

has been added to your cart:
Оформление заказа