Каталог решений - Выбор варианта отчета СКД для обычных форм

Выбор варианта отчета СКД для обычных форм

Выбор варианта отчета СКД для обычных форм

В наличии

Выбор варианта отчета СКД для обычных форм

Категория:

Описание

Всем добрый день!

Рассказать я хочу о том как мне пришлось бороться с выбором варианта отчета написанном при помощи СКД в НЕ управляемой форме. С управляемыми проблем нет. Там эта возможность включена по-умолчанию. Что касается обычных форм, то после безуспешного поиска в интернете стандартных решений, реализовал все сам вручную (кодом) через хранилище настроек. Может конечно я не умею искать, но думаю, что решение будет полезно и для других.

Вот ворма отчета:

Нижнее поле — результат, куда печ. форма выводится.

Чуть выше — стандартные настройки СКД Данные: «КомпоновщикНастроек.Настройки.ПараметрыДанных»

И верхнее — поле для выбора варианта, который нас и интересует.

Для выбора варианта отчета создал отдельную форму. На ней просто список вариантов.

Код из основной формы:

//////////////////////////////

Перем ИмяТекВар;

Процедура ЗаполнитьВарианты()
    Для каждого Вар из СхемаКомпоновкиДанных.ВариантыНастроек Цикл
        СЗВариантов.Добавить(Вар,Вар.Представление);
    КонецЦикла;    
КонецПроцедуры    

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

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

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    Он = Новый ОписаниеНастроек;
    Он.Представление =  СокрЛП(ВыбВариант);    
    ХранилищеВариантовОтчетов.Сохранить("ЭтотОтчетОтчетПоПроизведеннойНекондицииЛяляля", СокрЛП(ИмяТекВар), КомпоновщикНастроек.Настройки, СокрЛП(ВыбВариант));
КонецПроцедуры
///////////////////////////////////////



Код в форме выбора:

////////////////////////

Перем Схема Экспорт;
Перем Компановщ Экспорт;

Процедура КоманднаяПанель1Добавить(Кнопка)
    имя = "";
    Если ВвестиСтроку(имя) Тогда
        Схема.ВариантыНастроек.Добавить();
        Схема.ВариантыНастроек[Схема.ВариантыНастроек.Количество()-1].Представление = имя;
        Схема.ВариантыНастроек[Схема.ВариантыНастроек.Количество()-1].Имя = СокрЛП(Схема.ВариантыНастроек.Количество()); 
        Варианты.Добавить(Схема.ВариантыНастроек[Схема.ВариантыНастроек.Количество()-1],Схема.ВариантыНастроек[Схема.ВариантыНастроек.Количество()-1].Представление);
        
        Он = Новый ОписаниеНастроек;
        Он.Представление =  СокрЛП(имя);
        
        ХранилищеВариантовОтчетов.Сохранить("ЭтотОтчетОтчетПоПроизведеннойНекондицииЛяляля", СокрЛП(Схема.ВариантыНастроек.Количество()), Схема.ВариантыНастроек[Схема.ВариантыНастроек.Количество()-1].Настройки, Он);
    КонецЕсли;
КонецПроцедуры

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    
КонецПроцедуры

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

Процедура КоманднаяПанель1Удалить(Кнопка)
    ТекДан = ЭлементыФормы.Варианты.ТекущиеДанные;
    Если НЕ (ТекДан = Неопределено) Тогда
        ХранилищеВариантовОтчетов.Удалить("ЭтотОтчетОтчетПоПроизведеннойНекондицииЛяляля",ТекДан.Значение.Имя,ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
        Варианты.Удалить(Варианты.НайтиПоЗначению(ТекДан.Значение));
    КонецЕсли;    
КонецПроцедуры

Процедура ВариантыПередУдалением(Элемент, Отказ)
    ХранилищеВариантовОтчетов.Удалить("ЭтотОтчетОтчетПоПроизведеннойНекондицииЛяляля",Элемент.ТекущиеДанные.Значение.Имя,ПользователиИнформационнойБазы.ТекущийПользователь().Имя);
КонецПроцедуры

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

////////////////////

Вот как-то так.

Конечно, если кто-нибудь покажет, как сохранять и выбирать варианты СКД для обычных форм стандартными средствами, буду рад посмотреть 🙂

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