СКД. Своя расшифровка.

1. denis_aka_wolf 79 29.03.18 14:25 Сейчас в теме
Всем доброго времени суток!

Подскажите в чем может быть затык.
Имеется отчет на СКД, расшифровка реализована "ручками"
Вот код формирования отчета:

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

	//У-у-и-и-и-ху-у-у
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
	
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.Результат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
	
КонецПроцедуры //Процедура ДействияФормыДействие(Кнопка)
Показать


а вот код оборботки расшифровки:

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

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

Показать


Сам отчет:


Расшифровываем по любому полю:


И отлично все сформировалось - как надо, но настройки отчета все слетели на стандартные:


И если еще раз сформируем, то получаем дефолтный отчет:


Подскажите как исправить
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
4. Sashares 35 29.03.18 15:24 Сейчас в теме +10 $m
(2)
Как-то так:
//Определим настройки 
Если Настройки = Неопределено Тогда 
Настройки = КомпоновщикНастроек.Настройки; 
Иначе
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
КонецЕсли;
denis_aka_wolf; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 29.03.18 14:34 Сейчас в теме
(1)
//Определим настройки 
Если Настройки = Неопределено Тогда 
Настройки = КомпоновщикНастроек.Настройки; 
КонецЕсли;


При расшифровке настройке передаются как параметр в процедуру.
Их надо не просто применить при формировании отчета, но и загрузить в компоновщик настроек.
У вас же при расшифровке используются настройки расшифровки, а при повторном формировании - настройки компоновщика.
4. Sashares 35 29.03.18 15:24 Сейчас в теме +10 $m
(2)
Как-то так:
//Определим настройки 
Если Настройки = Неопределено Тогда 
Настройки = КомпоновщикНастроек.Настройки; 
Иначе
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
КонецЕсли;
denis_aka_wolf; +1 Ответить
5. denis_aka_wolf 79 29.03.18 16:19 Сейчас в теме
(4) Спасибо, теперь все ок.
3. mifka186 8 29.03.18 14:40 Сейчас в теме
Если платформа 8.3, то еще можно посмотреть в сторону пользовательских настроек, они имеют приоритет перед настройками отчета.
Оставьте свое сообщение

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