Имя: Пароль:
1C
1С v8
Установка и очистка отбора (управляемые формы)
,
0 ac13
 
02.05.17
16:15
При установлен флаге надо скрывать документы, где стоит дата выдачи.
А при снятом флаге показывать все без отбора.
При открытии формы отбор по документам, где Дата выдачи - заполнена - работает. А когда снимаю флаг, отбор не снимается.

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

КонецПроцедуры
1 ac13
 
02.05.17
16:16
ой, в коде бред ...
2 ac13
 
02.05.17
16:18
Вот, но все равно не работает:

Если ЭтотОбъект.СкрыватьАрхивные = Истина Тогда
        Отбор = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        Отбор.ЛевоеЗначение = Список.Отбор.ДоступныеПоляОтбора.Элементы.Найти("ДатаВыдачи").Поле;
        Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
        Отбор.Использование = Истина;
    Иначе
        Отбор = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        Отбор.ЛевоеЗначение = Список.Отбор.ДоступныеПоляОтбора.Элементы.Найти("ДатаВыдачи").Поле;
        Отбор.Использование = Ложь;
    КонецЕсли;
3 Неверный Параметр И
 
02.05.17
16:19
.Очистить()
4 Mort
 
02.05.17
16:19
Ты не снимаешь использование у существующего элемента отбора, а добавляешь новый. Старый, соответственно, остается.
5 Mort
 
02.05.17
16:21
Если конфа типовая (или нетиповая на БСП) то для этого есть функции шоб велосипед не изобретать.
6 ac13
 
02.05.17
16:22
(3) а если мне не надо весь отбор снимать, а только у этого поля
7 ac13
 
02.05.17
16:22
(5) так какие функции?
чтобы удалить отбор только для одного поля
8 Mort
 
02.05.17
16:23
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(...)

ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(...)
9 AsadRoman
 
02.05.17
16:36
(2) Вот и каждый раз идет добавление нового условия отбора. После 10 нажиманий на форме на поле с галочкой будет десять условий отбора для одного поля.
Нужно циклом пройтись по элементам отбора, найти нужное и установить для него НЕИСПОЛЬЗОВАТЬ, когда галочка снята.
А еще лучше построить динамический список так, чтобы было поле Выводить с типом Булево, которое будет Истина, если ДатаВыдачи не заполнена и Ложь - Если заполнена ( или наоборот). Тогда вывести на форму это поле в качестве поля отбора. И не нужно огород городить. Использовать поле отбора : с датой выдачи, или без даты выдачи и не использовать поле - выводить все.
10 ac13
 
02.05.17
16:55
(8) спасибо!

&НаКлиенте
Процедура СкрытьПоказатьархивные()
    
    Если ЭтотОбъект.СкрыватьАрхивные = Истина Тогда    
        ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список.Отбор, "ДатаВыдачи", , ВидСравненияКомпоновкиДанных.НеЗаполнено, , Истина);        
    Иначе    
        ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбора(Список.Отбор, "ДатаВыдачи", );            
    КонецЕсли;

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