Версия для печати темы (https://pro1c.org.ua/index.php?s=e85bbcbe4422dc2f21a05d0d507cb1a5&showtopic=67546)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Программно изменить (установить) отбор динамического списка в быстром доступе

Автор: AnryMc 20.05.24, 16:02

Доброго времени суток!

Дано: Форма списка. Основной реквизит - СПИСОК - Динамический список.

Произвольный запрос. В "Настройке списка" - "Настройки" - "Отбор" добавлен НовыйОтбор с "включать в настройки пользователя" и режим редактирования "быстрый доступ"
Т.е. данный отбор виден и доступен пользователю в форме Списка

ВОПРОС: Как его (этот отбор) заполнить программно при открытии формы Списка

Автор: AnryMc 21.05.24, 9:46

AnryMc @ Вчера, 17:02 * ,

Ап!!!

Если делать так:

        Список.Отбор.Элементы.Очистить();
    текНастройка = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

всё отрабатывает но на форме (элементы отбора с "быстрым доступом") - пустые
И в "Ещё" - "настройка списка" - данный отбор тоже не виден, т.е. его нельзя отменить...

Если использовать коды (варианты)
        //            //текНастройка = Элементы.Список.ПолучитьИсполняемыеНастройкиКомпоновкиДанных().Отбор.Элементы[0];
        //            //текНастройка = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы[0];
        //            //текНастройка = Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0];

видны элементы с "быстрым доступом" но они не сохраняются...

Автор: sava1 21.05.24, 10:21

отбор надо не добавлять, а найти и установить

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

Автор: AnryMc 21.05.24, 11:16

Цитата(sava1 @ 21.05.24, 11:21) *
вообще в БСп есть процедура


Да есть, но она не устанавливает отбор для элементов с "быстрым доступом" на форме
и не устанавливает отбор в "настройках списка"

т.е. пользователь не может изменить / отменить данный отбор.

З.Ы, Т.е. нужно делать свои реквизиты на форма - заполнять их - и уже на основании информации в них пользоваться установкой из БСП.

И если в настройке Списка есть "быстрый отбор", например Номенклатура =
и я добавлю свой реквизит "Номенклатура = (по моему)"
То есть на форме будет 2 реквизита с дублирующимися функциями - это путаница, перезагрузка интерфейса, ...
Объяснить Пользователю что нужно сначала "очистить" мой реквизит а затем выбрать то что нужно в стандартном (к которому он привык)

Автор: sava1 21.05.24, 11:28

Вы хотя-бы смотрели процедуру ?

    Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
        ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
    Иначе
        ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор;
    КонецЕсли;

Автор: AnryMc 30.05.24, 12:52

Цитата(sava1 @ 21.05.24, 12:28) *
Вы хотя-бы смотрели процедуру ?


Смотрел...

Ещё раз ПОВТОРЯЮ вопрос:

Я могу установить отбор программно, но я хочу чтобы он отображался в элементах со свойством "быстрый доступ" и пользователь мог его изменить / отменить...

Вопрос - КАК ОТОБРАЗИТЬ НЕОБХОДИМЫЙ ОТБОР НА ФОРМЕ В ПРЕДОПРЕДЕЛЕННЫХ ЭЛЕМЕНТАХ ОТБОРА СО СВОЙСТВОМ "БЫСТРЫЙ ДОСТУП"

Автор: sava1 30.05.24, 13:11

может, определиться когда его устанавливать?

Автор: AnryMc 30.05.24, 13:47

Цитата(sava1 @ 30.05.24, 14:11) *
может, определиться когда его устанавливать?


Я "вижу" элементы "быстрого доступа" при создании на сервере (открытии) - позиционируюсь на них - меняю...
Но при открытии формы они снова "пусты" и отбор не срабатывает...

если делаю
        ОбщийМодульКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "КлючевыеСлова.КлючевоеСлово", СписокКлючевыхСлов, ВидСравненияКомпоновкиДанных.Равно,, ИСТИНА,,"2bfdf78c-437f-4a3e-9c4b-0561e4543a8b");


отбор срабатывает но элемент отбора с индификатором "2bfdf78c-437f-4a3e-9c4b-0561e4543a8b" - пуст на форме

Если так:
        ОбщийМодульКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "КлючевыеСлова.КлючевоеСлово", СписокКлючевыхСлов, ВидСравненияКомпоновкиДанных.Равно,, ИСТИНА, [b]РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ[/b] ,"2bfdf78c-437f-4a3e-9c4b-0561e4543a8b");
- отбор не срабатывает элементы на форме тоже пусты

Автор: sava1 30.05.24, 15:11

Посмотрите на ПриЗагрузкеПользовательскихНастроек - вроде так называется

Автор: AnryMc 30.05.24, 16:29

Цитата(sava1 @ 30.05.24, 16:11) *
ПриЗагрузкеПользовательскихНастроек


Цитата
Властивість "ЛевоеЗначение" не підтримується елементом колекції користувацьких настройок компонування даних



Выложил простенькую конфу
Нужно при открытии формы списка Справочник1 отобрать Контрагента из константы...

https://pro1c.org.ua/redirect.php?https://fex.net/ru/s/oanbbxc

Автор: AnryMc 31.05.24, 8:46

Так получилось добавить в отбор (по кнопке "Ещё" - настройка списка)
Но в "быстрый доступ" на форме не отображается...

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
     НужныйКонтрагент = Константы.Константа1.Получить(); //Реквизит формы - ссылка клиент

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

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

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua