Расшифровка отчета СКД этим же отчетом, но другой схемой на 8.3 УФ

1. Lord_Kingovich 6 20.09.22 11:26 Сейчас в теме
Добрый день!!!

Есть внешний самописный отчет, созданы две схемы (основнаясхемаотчета и схемарасшифровки) и одна форма. Отчет должен работать следующим образом: выбирается период отчета задается отбор и после нажатия кнопки сформировать формируется отчет по основной схеме компоновки, далее, если нам необходимо расшифровать определенную ячейку, то по клике мышкой по этой ячейки должна открываться расшифровка в виде отдельного окна с отчетом по расшифровке в разрезе регистраторов по другой схеме. Получилось все, кроме одной проблемы, которую никак не можем победить. Кода открывается окно с расшифровкой и в этом окне нажимаешь на кнопку изменить вариант, то внутри на вкладке "Поля" в окне доступные поля находятся все поля от основной схемы и название варианта тоже от основной схемы, а не от схемы расшифровки и соответственно нет возможности сделать дополнительные отборы в этом окне расшифровки. Если через кнопку "еще" применить стандартные настройки и нажать кнопку Сформировать, то отчет формируется полностью по основной схеме. Почему то окно открывается только по основной схеме. Перерыли кучу форумов и статей, но внятной информации, а тем более примера так и не нашли, такое ощущение, что никто и никогда не делал отчеты с расшифровкой по другой схеме на 8.3 управляемые формы . Люди добрые, подскажите, есть ли решение такой проблемы?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SanyMaga 68 20.09.22 13:24 Сейчас в теме
У вас одна форма. и основной реквизит ее отчет, и схема соответственно основная. Соответственно компоновщик тоже основной.
Нужно делать новую форму без основного реквизита и на ней уже привязывать компоновщик от другой скд и саму СКД.
Lord_Kingovich; +1 Ответить
3. SanyMaga 68 20.09.22 13:27 Сейчас в теме
первый попавшийся пример без доп форм. Для обычных форм.

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


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

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

	
КонецПроцедуры
Показать
4. Lord_Kingovich 6 20.09.22 15:48 Сейчас в теме
(3)То есть, без доп. формы такое сделать никак нельзя? Надо в доп. форме снять с основного реквизита галочку "основной реквизит" и программно обработать полностью вывод? Может пример есть на УФ?
5. SanyMaga 68 20.09.22 16:26 Сейчас в теме
(4) Наверно проще второй внешний отчет СКД написать и на основании первого формировать второй программно.
6. Lord_Kingovich 6 20.09.22 18:29 Сейчас в теме
(5) Дело в том еще, что таких расшифровок на разных ячейках будет 4 (расшифровка выручки, затрат 20 счета, затрат 26 счета, расшифровка 91 счета) и получается, что надо делать 4 доп. внешних отчета((( Как-то не очень вариант получается((( Но спасибо за совет с формой, попробуем, что из этого может получиться.
Оставьте свое сообщение

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