| 
    
            
         
         | 
    
  | 
Изменение пользовательских настроек отбора СКД перед открытием отчета | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        s-n-a-y    
     28.10.20 
            ✎
    13:55 
 | 
         
        Пытаюсь переопределить пользовательские настройки перед открытием отчета. Вот так работает
 
        ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].ПравоеЗначение = МоеЗначение; Проблема в том, что не могу найти нужный элемент по Представлению или по ЛевоеЗначение. Могу только по ИдентификаторПользовательскойНастройки. А этот идентификатор у под разными пользователями разный, но поле одно и тоже (после открытия отчета). Можно ли по этому идентификатору как-то определить представление поля?  | 
|||
| 
    1
    
        s-n-a-y    
     28.10.20 
            ✎
    14:07 
 | 
         
        все нашел     
         | 
|||
| 
    2
    
        CepeLLlka    
     28.10.20 
            ✎
    14:09 
 | 
         
        (1)Нашёл, так напиши как нашёл, распиши всё, не ленись..
 
        Сам же через полгода будешь гуглить, найдёшь свою тему, порадуешься :)  | 
|||
| 
    3
    
        Радим1987    
     28.10.20 
            ✎
    14:17 
 | 
         
        (2) Если ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Твое поле") тогда     
         | 
|||
| 
    4
    
        fisher    
     28.10.20 
            ✎
    14:28 
 | 
         
        Еще можно найти нужный элемент в обычных настройках, получить у него идентификатор пользовательской настройки и по нему получить уже элемент пользовательских настроек.     
         | 
|||
| 
    5
    
        s-n-a-y    
     28.10.20 
            ✎
    15:21 
 | 
         
        Как в (3) не получится. К сожалению у "ПользовательскиеНастройки.Элементы"   ЛевоеЗначение недоступно 
 
        Можно отыскать по идентификатору вот типа процедура Процедура ИзменитьЭлементПользовательскогоОтбора(ФормаОтчета, ИмяПоля, Значение) ПолеКомпоновки = новый ПолеКомпоновкиДанных(ИмяПоля); Для каждого ТекЭлемент Из ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл Для каждого ТекЭлементНастроек Из ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл Если ТекЭлемент.ИдентификаторПользовательскойНастройки = ТекЭлементНастроек.ИдентификаторПользовательскойНастройки и ТекЭлементНастроек.ЛевоеЗначение = ПолеКомпоновки Тогда ТекЭлемент.ПравоеЗначение = Значение; Возврат; КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры  | 
|||
| 
    6
    
        s-n-a-y    
     28.10.20 
            ✎
    15:22 
 | 
         
        то же самое в более полном варианте
 
        &НаКлиенте Процедура ИзменитьЭлементПользовательскогоОтбора(ФормаОтчета, ИмяПоля, Значение, ВидСравнения, Использование = истина) ПолеКомпоновки = новый ПолеКомпоновкиДанных(ИмяПоля); Для каждого ТекЭлемент Из ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл Для каждого ТекЭлементНастроек Из ФормаОтчета.Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл Если ТекЭлемент.ИдентификаторПользовательскойНастройки = ТекЭлементНастроек.ИдентификаторПользовательскойНастройки и ТекЭлементНастроек.ЛевоеЗначение = ПолеКомпоновки Тогда ТекЭлемент.ПравоеЗначение = Значение; ТекЭлемент.Использование = Использование; ТекЭлемент.ВидСравнения = ВидСравнения; ТекЭлемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; Возврат; КонецЕсли; КонецЦикла; КонецЦикла; // если не нашли в пользовательских настройках - добавляем свой УстановитьЭлементПользовательскогоОтбора(ФормаОтчета, ИмяПоля, Значение, ВидСравнения, Использование); КонецПроцедуры &НаКлиенте Процедура УстановитьЭлементПользовательскогоОтбора(ФормаОтчета, ИмяЭлемента, ЗначениеЭлемента, ВидСравнения, Использование = истина) ПолеКомпоновки = новый ПолеКомпоновкиДанных(ИмяЭлемента); Для Каждого ЭлементНастройки Из ФормаОтчета.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл Если ТипЗнч(ЭлементНастройки) = Тип("ОтборКомпоновкиДанных") Тогда ЭлементОтбораПользовательский = Неопределено; Для каждого ТекЭлементНастройки Из ЭлементНастройки.Элементы Цикл Если ТекЭлементНастройки.ЛевоеЗначение = ПолеКомпоновки Тогда ЭлементОтбораПользовательский = ТекЭлементНастройки; Прервать; КонецЕсли; КонецЦикла; Если ЭлементОтбораПользовательский = Неопределено Тогда ЭлементОтбораПользовательский = ЭлементНастройки.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораПользовательский.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор(); ЭлементОтбораПользовательский.ЛевоеЗначение = ПолеКомпоновки; КонецЕсли; ЭлементОтбораПользовательский.ВидСравнения = ВидСравнения; ЭлементОтбораПользовательский.ПравоеЗначение = ЗначениеЭлемента; ЭлементОтбораПользовательский.Использование = Использование; ЭлементОтбораПользовательский.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ; КонецЕсли; КонецЦикла; КонецПроцедуры  | 
|||
| 
    7
    
        s-n-a-y    
     28.10.20 
            ✎
    15:25 
 | 
         
        по сути сделал как в (4)     
         | 
|||
| 
    8
    
        fisher    
     28.10.20 
            ✎
    16:08 
 | 
         
        Зачем же все перебирать. У коллекции элементов пользовательских настроек есть метод Найти, который находит по идентификатору пользовательской настройки.     
         | 
|||
| 
    9
    
        s-n-a-y    
     28.10.20 
            ✎
    17:02 
 | 
         
        (8) в отладчике ИдентификаторПользовательскойНастройки - это строка, конструктора из строки нету, поэтому перебор     
         | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |