Имя: Пароль:
1C
1С v8
Подскажите почему не срабатывает программный отбор в СКД?
0 vfrcbv
 
10.09.19
13:47
Добрый день!
В отчета на СКД добавил новый реквизит "ОтветственныйМенеджер", вывел его на форму. В событие ПриИзменение прописал код:

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

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

Если в вручную в пользовательком интерфейсе по кнопке "Показать настройки" - Отбор. Задать Этот отбор, то все работает.

Подскажите, что не так?
1 toypaul
 
гуру
10.09.19
14:13
не понятно зачем это делать "&НаСервере". вполне себе можно сделать на клиенте.
2 toypaul
 
гуру
10.09.19
14:14
ну и конечно же не понятно для чего добавлять поле, когда все тоже самое можно сделать пользовательскими настройками
3 toypaul
 
гуру
10.09.19
14:17
почему не работает = это чертова магия СКД. чтобы расколдовать ее нужно миллион картинок выложить на форум. тут форум на дает этого делать. поэтому вопросы по СКД решаются плохо.
4 toypaul
 
гуру
10.09.19
14:19
кстати если у тебя конфа на БСП воспользуйся хотя бы типовыми методами по установке отбора. что-то там из ОбщегоНазначенияКлиентСервер по-моему
5 Fragster
 
гуру
10.09.19
14:19
в УФ это пользовательские настройки,  а не просто настройки
6 DrZombi
 
гуру
10.09.19
14:29
(0) Ты его не помещаешь в компоновщик :)
7 Tonik992
 
10.09.19
14:30
Есть еще такая вероятность, что отбор по этому полю выведен в пользовательские настройки.
Из-за этого пользовательские настройки имеют приоритет над обычными.
8 vfrcbv
 
10.09.19
14:36
(2) Отчет на УФ. имеет произвольную форму.

В том то дело, что какая-то магия. В отладчике при установки отбора в пользователем и программной установке, настройки КомпоновщикНастроек идентичны, но в програмном отбор не срабатывает.
https://s8.hostingkartinok.com/uploads/images/2019/09/2b5d086516ec2922aa257a3c2e41d7e1.png
9 vfrcbv
 
10.09.19
14:38
(6) судя по скрину выше, все в компоновщике помещается.
10 vfrcbv
 
10.09.19
14:38
(7) это отпадает. пользовательский отбор убираю, для чистоты эксперимента
11 Tonik992
 
10.09.19
14:38
(8)
Зайди в отладчитке "ПриКомпоновкеРезультата"
Посмотри, что там стоит. Сравни пользовательские настройки и обычными настройками. Если пересекаются, значит пользовательские имеют приоритет.
Если в ПриКомпоновкеРезультата не будет твоих новых отборов, значит таким способом(на форме) как ты делаешь нельзя помещать в отбором.
12 Tonik992
 
10.09.19
14:40
Ты смотришь в отладчике на форме. Это неправильно.
Смотри в отладчике ПриКомпоновке. Вызови там процедуру КомпоновщикНастроек.ПолучитьНастройки() и посмотри, какая итоговая настройка применяется для компоновки
13 Tonik992
 
10.09.19
14:55
(8) Так у васна картинке идентификатор пользовательской настройки заполнен. А врете, что пользовательских настроек нет. -)
"Если идентификатор не пустой, объект включается в состав пользовательских настроек." (c)
14 vfrcbv
 
10.09.19
15:11
Всем спасибо за помощь!

Нашел проблему, при программном отборе нужно было добавил строчку:
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
и тогда все заработало.

по умолчанию если не указывать эту строчку, РежимОтображения выставляется обычный и отбор не работает.
незнаю с чем это связано...
Независимо от того, куда вы едете — это в гору и против ветра!