Приветствую Вас ГостьСуббота, 18.05.2024, 21:39

Каталог статей


Программная установка Настроек СКД

Прежде всего следует различать три вида настроек:

  • Фиксированные настройки, сделанные программным путем, помещаются в свойство динамического списка КомпоновщикНастроек.ФиксированныеНастройки;
  • Настройки, сделанные в конфигураторе, помещаются в свойство динамического списка КомпоновщикНастроек.Настройки;
  • Пользовательские настройки, сделанные в режиме 1С:Предприятие, помещаются в свойство динамического списка КомпоновщикНастроек.ПользовательскиеНастройки.

Пользовательские настройки загружаются из системного хранилища и накладываются на настройки, сделанные в конфигураторе. В случае пересечения этих настроек пользовательские настройки имеют больший приоритет, то есть «затирают» настройки конфигуратора.

Затем к полученным настройкам применяются фиксированные настройки. Но в случае пересечения этих настроек будет выдаваться ошибка. Например, при передачи отбора в параметрах формы отчета, этот отбор помещается в фиксированные настройки. Поэтому пользователь уже не сможет установить отбор по тому же полю.


Если у отчет сформирована форма, то параметры отчета можно установить в процедурах модуля формы:

  • ПередЗагрузкойВариантаНаСервере() - если нет пользовательских настроек или если отчет формируется в первых раз и пользовательские настройки ещё не были автоматически созранены
  • ПередЗагрузкойПользовательскихНастроекНаСервере()  - так как эта процедура выполняется после ПередЗагрузкойВариантаНаСервере(), и, если пользовательские настройки есть, то они перезапишут настройки варианта отчета.

Если форма не создана и надо установить параметры независимо от пользовательских настроек, например заполнение обязательного поля, то в настройки можно установить в модуле объекта отчета в процедуре ПриКомпоновкеРезультата().

Предварительно надо получить настройки отчета с учетом установленных пользовательских настроек:

Настройки = КомпоновщикНастроек.ПолучитьНастройки(); 

Надо иметь ввиду, что это не ссылка на настройки отчета, а копия настроек с учетом примененных пользовательских настроек. После внесения изменений в настройки надо их передать в компоновщик макета (МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки))

Если учитывать пользовательские настройки не обязательно, то можно обратиться к настройкам как 

Настройки = КомпоновщикНастроек.Настройки;

Здесь идет прямое обращение к настройкам отчета, а не копия настроек и можно напрямую вносит изменения, не передавая их потом в компоновщик макета.

Можно конечно использовать метод КомпоновщикНастроек.ПользовательскиеНастройки для прямого обращения к пользовательским настройкам, но проще работать через КомпоновщикНастроек.ПолучитьНастройки().

После того, как обратились к настройкам, надо найти нужный параметр или отбор или сортировку, в зависимости от того, что хотим изменить.

Изменение параметров

Если получили настройки  через КомпоновщикНастроек.Настройки или КомпоновщикНастроек.ПолучитьНастройки(), то получить параметр можно следующим образом:

НужныйПараметр = Настройки.ПараметрыДанных.Элементы.Найти("Подразделение"); 

здесь "Подразделение" - это название параметра.

Если надо прочитать значение то:
    Если НужныйПараметр.Использование Тогда 
        Подразделение = пПодразделение.Значение;
    Иначе
        Подразделение = Неопределено;
    КонецЕсли;

Если надо установить значение то

НужныйПараметр.Использование = Истина;

НужныйПараметр.Значение = Подразделение;

Так же можно обращаться к параметрам по индексу, но надо иметь ввиду, что при изменении параметров, надо проверять, не поменялись ли индексы тех параметров, к которым обращались программно.

Есть метод установки значения параметра по имени с одновременной установкой признака "Использование" = Истина:

Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода",'20111201');


При установки параметра в Пользовательских настройках значение параметра не будет отображаться на форме.

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

 


Бывали случай, когда метод УстановитьЗначениеПараметра() не срабатывал (причины пока не понял, возможно выверт версии платформы). Помогало заполнение пользовательских настроек.

Ниже пример кода заполнения параметров настроек, который сработал:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
        
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();     
    
    УстановитьЗначениеПараметра(Настройки, "Организация", ПолучитьОрганизациюГРО());
    УстановитьЗначениеПараметра(Настройки, "ВидыДоговоров", ПолучитьВидыДоговоров());
    
КонецПроцедуры    

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

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

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

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

Категория: СКД | Добавил: leshic (22.11.2021)
Просмотров: 1584 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Вход на сайт
Поиск
Категории раздела
СКД [48]
Регистры [7]
Формы [41]
Администрирование [35]
Запросы [10]
Объекты конфигурации и типы данных [20]
Взаимодействие с другими базами, приложениями и источниками данных [16]
Программирование [29]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0