Имя: Пароль:
1C
1С v8
Не работает отбор динамического списка
, ,
0 Serega103
 
31.08.17
13:26
Добрый день.
Суть проблемы такая: не получается установить отбор у динамического списка, вот код:

Процедура УстановитьОтборВСписке(Список,ИмяПоля,ПравоеЗначение,ВидСравнения) Экспорт    
    УдалитьОтборВСписке(СПисок,ИмяПоля);
    НовОтб=Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовОтб.Использование=Истина;
    НовОтб.ЛевоеЗначение=Новый ПолеКомпоновкиДанных(ИмяПоля);
    НовОтб.ВидСравнения=ВидСравнения;
    НовОтб.РежимОтображения=РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
    НовОтб.ПравоеЗначение=ПравоеЗначение;
КонецПроцедуры
1 Serega103
 
31.08.17
13:30
Причем раньше этот код работал на ура, но после обновления платформы видимо что то поменялось.
2 Serega103
 
31.08.17
13:31
Вот кстати накопал на форуме такую же проблему, но там так никто и не ответил толком
3 Serega103
 
31.08.17
13:31
4 DrShad
 
31.08.17
13:42
(3) тогда давай ответ на вопрос в (1) из этой ветки
5 Serega103
 
31.08.17
13:44
(4)Причем когда открываю отбор этого списка (в режиме 1с предприятие), то там всё есть и после того как в окне отбора нажимаю "ОК", то отбор происходит таки.
6 Serega103
 
31.08.17
13:45
(4) у меня отбор по полю типа "булево", должны отображаться строки без галочки, а отображаются все.
7 Serega103
 
31.08.17
13:47
пробовал после этого кода делать ОбновитьОтображениеДанных(), но результат тот же
8 Вафель
 
31.08.17
13:48
на клиенте или на серевере код?
9 Serega103
 
31.08.17
13:48
получается что не хватает вот этого самого нажатия кнопки "ОК", но только программно.
10 Serega103
 
31.08.17
13:49
(8) Код выполняется на сервере
11 Вафель
 
31.08.17
13:50
Нужно не Список.Отбор, а (из типовой кусок)
    Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
        ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
    Иначе
        ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор;
    КонецЕсли;
12 Вафель
 
31.08.17
13:51
ну и вообще
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка
13 Serega103
 
31.08.17
13:57
(12) У нас УТ 11.0 старая, там это в другом модуле (кстати код взят именно оттуда)
14 Радим1987
 
31.08.17
13:59

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

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

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


15 Serega103
 
31.08.17
14:00
(12) щас гляну в БП типовой, она свежая
16 Serega103
 
31.08.17
14:02
(14) вот спасибо, даже в БП похоже лезть не придется
17 Вафель
 
31.08.17
14:03
(13) до версии 8.3.5 все было по другому
18 Вафель
 
31.08.17
14:04
вы наверно режим совместимости изменили?
19 Serega103
 
31.08.17
14:14
(18) режим совместимости не менял, просто обновили платформу, так как БП требовала свежую.
20 GANR
 
31.08.17
14:23
(0) В общем модуле современных конфигураций ОбщегоНазначенияКлиентСервер как написана эта процедура?