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

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


При расшифровке настройке передаются как параметр в процедуру.
Их надо не просто применить при формировании отчета, но и загрузить в компоновщик настроек.
У вас же при расшифровке используются настройки расшифровки, а при повторном формировании - настройки компоновщика.
4. Sashares 33 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 9 29.03.18 14:40 Сейчас в теме
Если платформа 8.3, то еще можно посмотреть в сторону пользовательских настроек, они имеют приоритет перед настройками отчета.
Оставьте свое сообщение

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