Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Изменение пользовательских настроек отбора СКД перед открытием отчета

Изменение пользовательских настроек отбора СКД перед открытием отчета
Я
   s-n-a-y
 
28.10.20 - 13:55
Пытаюсь переопределить пользовательские настройки перед открытием отчета. Вот так работает

ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].ПравоеЗначение = МоеЗначение;

Проблема в том, что не могу найти нужный элемент по Представлению или по ЛевоеЗначение. Могу только по ИдентификаторПользовательскойНастройки. А этот идентификатор у под разными пользователями разный, но поле одно и тоже (после открытия отчета).  Можно ли по этому идентификатору как-то определить представление поля?
   s-n-a-y
 
1 - 28.10.20 - 14:07
все нашел
   CepeLLlka
 
2 - 28.10.20 - 14:09
(1)Нашёл, так напиши как нашёл, распиши всё, не ленись..

Сам же через полгода будешь гуглить, найдёшь свою тему, порадуешься :)
   Радим1987
 
3 - 28.10.20 - 14:17
(2) Если ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Твое поле") тогда
   fisher
 
4 - 28.10.20 - 14:28
Еще можно найти нужный элемент в обычных настройках, получить у него идентификатор пользовательской настройки и по нему получить уже элемент пользовательских настроек.
   s-n-a-y
 
5 - 28.10.20 - 15:21
Как в (3) не получится. К сожалению у "ПользовательскиеНастройки.Элементы"   ЛевоеЗначение недоступно 

Можно отыскать по идентификатору

вот типа процедура

Процедура ИзменитьЭлементПользовательскогоОтбора(ФормаОтчета, ИмяПоля, Значение)

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

КонецПроцедуры
   s-n-a-y
 
6 - 28.10.20 - 15:22
то же самое в более полном варианте
&НаКлиенте
Процедура ИзменитьЭлементПользовательскогоОтбора(ФормаОтчета, ИмяПоля, Значение, ВидСравнения, Использование = истина)

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

    УстановитьЭлементПользовательскогоОтбора(ФормаОтчета, ИмяПоля, Значение, ВидСравнения, Использование);

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


&НаКлиенте
Процедура УстановитьЭлементПользовательскогоОтбора(ФормаОтчета, ИмяЭлемента, ЗначениеЭлемента, ВидСравнения, Использование = истина)

    ПолеКомпоновки = новый ПолеКомпоновкиДанных(ИмяЭлемента);
    Для Каждого ЭлементНастройки Из ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл

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

КонецПроцедуры
   s-n-a-y
 
7 - 28.10.20 - 15:25
по сути сделал как в (4)
   fisher
 
8 - 28.10.20 - 16:08
Зачем же все перебирать. У коллекции элементов пользовательских настроек есть метод Найти, который находит по идентификатору пользовательской настройки.
   s-n-a-y
 
9 - 28.10.20 - 17:02
(8) в отладчике ИдентификаторПользовательскойНастройки - это строка, конструктора из строки нету, поэтому перебор

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.