Каталог решений - Хранение настроек внешних отчетов на СКД в 1С

Хранение настроек внешних отчетов на СКД в 1С

Хранение настроек внешних отчетов на СКД в 1С

В наличии

Код для сохранения и восстановления настроек внешних отчетов на СКД в УПП 1.3, БП 1.6, 2.0, УТ 10.3, КА 1.1

Категория:

Описание

Задача: нужно хранить настройки отчета на СКД в базе, причем у каждого пользователя должно быть произвольное количество настроек.

 

Для хранения настроек отчетов в УПП существуют два метаданных. Регистр сведений «Сохраненные настройки» и одноименный справочник.

Структура метаданных

Их структура похожа, в обоих есть информация:

  1. О пользователе, который может использовать данную настройку
  2. «СохранятьАвтоматически» — сохранять настройку при закрытии
  3. «ИспользоватьПриОткрытии» — при открытии будет выведен отчет по настройке с данной галочкой. Галочка может стоять только у одной настройки к каждому отчету. Если ни у одной настройки галочки нет, то будет выведена типовая настройка СКД.
  4. Реквизит с типом «Хранилище значения» (в справочнике реквизит «ХранилищеНастроек», в регистре сведений ресурс «СохраненнаяНастройка»). В данном объекте собсвенно и хранятся настройки. Как известно хранилище значения может хранить любое значение.

 

В регистре сведений хранятся настройки для отчетов, построенных на универсальном отчете, в справочнике — построенных на СКД. Логично сохранять настройки в справочнике. Но после беглого взгляда возникает несколько но:

  1. Данный справочник содержит предопределенные элементы, имя которых совпадает с именами отчетов. Свои же отчеты туда добавить нельзя, так как в результате обновления может возникнуть коллизия, 1с добавит новые элементы и в тоже время будут существовать предопределенные элементы, добавленные пользователем. 
  2. Справочник заточен на работу с шаблоном отчета 1с, и процедуры и функции работы с сохранением настроек выдрать из него достаточно сложно. шаблон СКД

 

Регистр сведений. Как говорилось выше — в нем хранятся настройки для отчетов на универсальном отчете. Но просмотрев механизм, я решил использовать его, так как процедуры работы с сохранением и восстановлением настроек взять гораздо проще, и более того, данный механизм использован не только в отчетах, но и в типовой обработке «Универсальный журнал», код из которой, немного изменив, я и приспоспособил для решения данной задачи.

 

Итак. На форму надо добавить кнопки сохранения и восстановления значений настроек Сохранить / восстановить настройки, добавить процедуры к ним, и написать код в процедуры «ПриОткрытии» и «ПриЗакрытии».

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

Процедура ДействияФормыСохранитьНастройки(Кнопка)

    Если мТекущаяНастройка<>Неопределено Тогда
       
СтруктураНастройки = мТекущаяНастройка;
    Иначе
       
СтруктураНастройки = Новый Структура;
       
СтруктураНастройки.Вставить(«ИмяОбъекта», Строка(ЭтотОбъект));
       
СтруктураНастройки.Вставить(«НаименованиеНастройки», Неопределено);
       
СтруктураНастройки.Вставить(«ИспользоватьПриОткрытии», Ложь);
       
СтруктураНастройки.Вставить(«СохранятьАвтоматически», Ложь);
    КонецЕсли;

    СтруктураНастройки.Вставить(«Пользователь», глЗначениеПеременной(«глТекущийПользователь»));
   
СохраненнаяНастройка = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки());
   
СтруктураНастройки.Вставить(«СохраненнаяНастройка», СохраненнаяНастройка);

    ВозвращаемаяСтруктура = УниверсальныеМеханизмы.СохранениеНастроек(СтруктураНастройки);

    Если ВозвращаемаяСтруктура <> Неопределено Тогда
       
мТекущаяНастройка = ВозвращаемаяСтруктура;
    Иначе
       
мТекущаяНастройка = СтруктураНастройки;
    КонецЕсли;

КонецПроцедуры

 

Сохранение настройки

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

Процедура ДействияФормыВосстановитьНастройки(Кнопка)

    СтруктураНастройки = Новый Структура;
   
СтруктураНастройки.Вставить(«Пользователь», глЗначениеПеременной(«глТекущийПользователь»));
   
СтруктураНастройки.Вставить(«ИмяОбъекта», Строка(ЭтотОбъект));
   
СтруктураНастройки.Вставить(«НаименованиеНастройки», ?(мТекущаяНастройка = Неопределено, Неопределено, мТекущаяНастройка.НаименованиеНастройки));

    ВозвращаемаяСтруктура = УниверсальныеМеханизмы.ВосстановлениеНастроек(СтруктураНастройки);

    Если ВозвращаемаяСтруктура <> Неопределено Тогда
       
мТекущаяНастройка = ВозвращаемаяСтруктура;
       
КомпоновщикНастроек.ЗагрузитьНастройки(мТекущаяНастройка.СохраненнаяНастройка.Получить());
    КонецЕсли;

КонецПроцедуры

Восстановление настройки 

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

Процедура ПриОткрытии()
   
СтруктураНастройки = Новый Структура;
   
СтруктураНастройки.Вставить(«Пользователь», глЗначениеПеременной(«глТекущийПользователь»));
   
СтруктураНастройки.Вставить(«ИмяОбъекта», Строка(ЭтотОбъект));

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

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

Процедура ПриЗакрытии()

    Если мТекущаяНастройка <> Неопределено И мТекущаяНастройка.НаименованиеНастройки <> Неопределено
        И
мТекущаяНастройка.Свойство(«СохранятьАвтоматически») И мТекущаяНастройка.СохранятьАвтоматически Тогда

        ТекПользователь = глЗначениеПеременной(«глТекущийПользователь»);
        Если
ТекПользователь<> мТекущаяНастройка.Пользователь Тогда
           
Ответ = Вопрос(«Вы восстановили настройку другого пользователя, сохранить ее в
            |ваших настройках?»
, РежимДиалогаВопрос.ДаНет);
            Если
Ответ = КодВозвратаДиалога.Да Тогда
                Если
ВвестиСтроку(мТекущаяНастройка.НаименованиеНастройки,
                   
«Укажите наименование сохраняемой настройки») Тогда
                   
мТекущаяНастройка.Пользователь = ТекПользователь;
                   
УниверсальныеМеханизмы.СохранитьНастройку(мТекущаяНастройка);
                КонецЕсли;
            КонецЕсли;
        Иначе
           
УниверсальныеМеханизмы.СохранитьНастройку(мТекущаяНастройка);
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры

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

Данный, достаточно небольшой код, позволяет сохранять и восстанавливать настройки внешнего отчета на СКД.



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