Пользовательские настройки в отчете

  1. 8 г. назад

    Добрый день!
    Помогите разобраться с использованием настроек в отчете! Что-то уже долго бьюсь, но никак не получается так, как хочется.
    Есть некий отчет. Нужно извне установить в нем отбор, открыть форму и сформировать отчет. Желательно пользователю показывать, какой отбор бы сделали. Вроде бы, совершенно простая задача.
    Что удалось добиться: получаю элементы пользовательских настроек, соответствующих элементам отбора основных настроек, устанавливаю настройки отбора, применяю настройки и формирую отчет в процедуре ПриСозданииНаСервере.
    В принципе, это всё даже работает так, как я этого хочу: отборы устанавливаются и отчет формируется.
    НО: открывается он с надписью поверх таблицы "отчет не сформирован..." и отборы в пользовательских настройках пустые.
    Вопросы: в какой момент 1С затирает установленные пользовательские настройки, зачем она это делает и как бы ей это дело запретить?

    Ответы: (3)
  2. 10.06.2015 17:14:37 отредактировано andrewks

    Код у меня такой:

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

    Вот это всё вполне нормально отрабатывает, а потом при открытии отчета все настройки слетают :(

  3. В общем, вроде, поборол.
    Перенес код с установкой отборов в процедуру ПриЗагрузкеВариантаНаСервере.
    Из минусов: пришлось параметры отбора сделать реквизитами формы, чтобы не потерять их значение.

  4. (0) Какое-то стрёмное решение.

    Ответы: (4)
  5. (3) А как правильно?
    Я пока мало работал со всеми этими настройками. В подавляющем большинстве случаев это не нужно.

  6. Ещё новая проблема появилась: если пользователь снял флаг "использовать" в отборе, то в следующие разы при открытии отчета этот флаг сбрасывается, даже если установить программно в процедуре ПриЗагрузкеВариантаНаСервере. Печально :(

  7. Перенес код в процедуру ПриЗагрузкеПользовательскихНастроекНаСервере, проблема решилась.

или зарегистрируйтесь чтобы ответить!