Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Программно изменить (установить) отбор динамического списка в быстром доступе
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
AnryMc
Доброго времени суток!

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

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

ВОПРОС: Как его (этот отбор) заполнить программно при открытии формы Списка
AnryMc
AnryMc @ Вчера, 17:02 необходимо зарегистрироваться для просмотра ссылки ,

Ап!!!

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

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

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

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

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


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

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

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

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

    Если РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
        ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
    Иначе
        ОтборДинамическогоСписка = ДинамическийСписок.КомпоновщикНастроек.Настройки.Отбор;
    КонецЕсли;
AnryMc
Цитата(sava1 @ 21.05.24, 12:28) необходимо зарегистрироваться для просмотра ссылки
Вы хотя-бы смотрели процедуру ?


Смотрел...

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

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

Вопрос - КАК ОТОБРАЗИТЬ НЕОБХОДИМЫЙ ОТБОР НА ФОРМЕ В ПРЕДОПРЕДЕЛЕННЫХ ЭЛЕМЕНТАХ ОТБОРА СО СВОЙСТВОМ "БЫСТРЫЙ ДОСТУП"
sava1
может, определиться когда его устанавливать?
AnryMc
Цитата(sava1 @ 30.05.24, 14:11) необходимо зарегистрироваться для просмотра ссылки
может, определиться когда его устанавливать?


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

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


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

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


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



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

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

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

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

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

КонецПроцедуры
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.