Приветствую Вас ГостьЧетверг, 16.01.2025, 03:11

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


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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

Чтобы значение обновилось надо явно указать его в пользовательских настройках:   

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

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

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

Кроме изменения параметров можно менять пользовательские настройки. Важно, чтобы параметр был указан в пользовательских настройках (в макете СКД, в настройках варианта у параметра должна стоять галка "Включать в пользовательские настройки"). Если параметра в пользовательских настройка нет, то создать его принудительно не получиться, надо искать и менять основной параметр.

Пример изменения параметров:

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

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

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


 

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

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