Как установить программно отбор по периоду в динамическом списке?

1. al_zzz 304 14.02.24 18:56 Сейчас в теме
Необходимо установить отбор по периоду для динамического списка формы журнала документов при открытии формы. Надо, чтоб отбор отрабатывал и отображался так как при ручном выборе периода. Пробовал тремя способами задать - ни один нормально не отрабатывает:
ДатаНачала    = ТекущаяДатаСеанса();//НачалоМесяца(НачалоМесяца(ТекущаяДатаСеанса())-1);
    ДатаОкончания = ТекущаяДатаСеанса();//КонецМесяца(ТекущаяДатаСеанса()); 
    //1.
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список,"Дата",ДатаНачала, ВидСравненияКомпоновкиДанных.БольшеИлиРавно,,Истина);
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список,"Дата",ДатаОкончания, ВидСравненияКомпоновкиДанных.МеньшеИлиРавно,,Истина);
    //2.
    ПользовательскийОтбор = Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(
    Список.КомпоновщикНастроек.Настройки.Отбор.ИдентификаторПользовательскойНастройки);
    УсловиеОтбора =  ПользовательскийОтбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
    УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
    УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    УсловиеОтбора.ПравоеЗначение = ТекущаяДата();
    УсловиеОтбора.Использование = Истина; 
    //3.
    УсловиеОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
    УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
    УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    УсловиеОтбора.ПравоеЗначение = ТекущаяДата();
    УсловиеОтбора.Использование = Истина;
Показать

Как его правильно задать?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
3. user5300 1078 15.02.24 08:20 Сейчас в теме
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    Период = новый СтандартныйПериод;
    Период.Вариант = ВариантСтандартногоПериода.Сегодня;
    
    Элементы.Список.Период = Период;
    Элементы.Список.Обновить();
    
КонецПроцедуры

Показать
9. al_zzz 304 16.02.24 11:19 Сейчас в теме
Вот так сработало.
Процедура УстановитьПериодПоУмолчанию(Форма) Экспорт 
    Список        = Форма.Список;
    ДатаНачала    = НачалоМесяца(ТекущаяДатаСеанса()); 
    ДатаНачала    = ДобавитьМесяц(ДатаНачала, -1);
    ДатаОкончания = КонецМесяца(ТекущаяДатаСеанса());
    лНовыйПериод = Новый СтандартныйПериод(ДатаНачала, ДатаОкончания);
    ЗаполнитьЗначенияСвойств(Форма.Элементы.Список.Период, лНовыйПериод);
    Форма.Элементы.Список.Обновить();
КонецПроцедуры
Показать

Вызвал из "ПриСозданииНаСервере"
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DENSKR 16 15.02.24 07:56 Сейчас в теме
Если "при открытии" то после установки отборов нужно добавить:
Элементы.Список.Обновить();

Но получится что "ПриСозданииНаСервере" список сформировался, потом "ПриОткрытии" вы устанавливаете отборы и список повторно формируется но уже с отборами.
Логичнее формировать список "ПриСозданииНаСервере"
Список.Параметры.УстановитьЗначениеПараметра("ДатаНачала", НачалоДня(ТекущаяДатаСеанса()));
    Список.Параметры.УстановитьЗначениеПараметра("ДатаОкончания", ТекущаяДатаСеанса());
5. al_zzz 304 15.02.24 09:26 Сейчас в теме
(2)С параметрами не работает:
https://disk.yandex.ru/i/NyB6PZa0sAG_sg
Сделал следующим образом:
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Список.Отбор,"Дата",ВидСравненияКомпоновкиДанных.БольшеИлиРавно, ДатаНачала,,Истина,РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный);
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Список.Отбор,"Дата",ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, ДатаОкончания,,Истина,РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный);


Отбор срабатывает, но в форме не отображается, что установлен отбор по периоду.
6. Vadim_174 2 15.02.24 09:36 Сейчас в теме
(5) Сделайте произвольный запрос в свойствах динамического списка с выбором нужных полей и укажите условия отбора по параметрам которые устанавливаете (&ДатаНачала и &ДатаОкончания) тогда ошибки не будет
7. DENSKR 16 15.02.24 09:41 Сейчас в теме
(5) Естественно, вы же не сказали какие параметры есть. Как должен отображаться отбор? Если это кнопка на форме то установить пометку например: Элементы.Период.Пометка = Истина;
8. Неопределено 91 15.02.24 11:57 Сейчас в теме
(5) А если установить РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ?
3. user5300 1078 15.02.24 08:20 Сейчас в теме
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    Период = новый СтандартныйПериод;
    Период.Вариант = ВариантСтандартногоПериода.Сегодня;
    
    Элементы.Список.Период = Период;
    Элементы.Список.Обновить();
    
КонецПроцедуры

Показать
4. Vlan 36 15.02.24 09:04 Сейчас в теме +1 $m
Недавно сам искал решение подобной задачи. Остановился вот на таком коде:
    НастройкиКомпоновки=Новый НастройкиКомпоновкиДанных;
    ГруппаОтбора=НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы=ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
    ЭлементОтбора=НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.Использование=Истина;
    ЭлементОтбора.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Номенклатура");
    ЭлементОтбора.ВидСравнения=ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора.ПравоеЗначение=МассивНоменклатуры;
    Если НЕ Элементы.Таб.ОтборСтрок=Неопределено Тогда
        ЭлементОтбора=ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
        ЭлементОтбора.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Период");
        ЭлементОтбора.ВидСравнения=ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
        ЭлементОтбора.Использование=Истина;
        ЭлементОтбора.ПравоеЗначение=Элементы.Таб.ОтборСтрок.Период;
        ЭлементОтбора=ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
        ЭлементОтбора.ЛевоеЗначение=Новый ПолеКомпоновкиДанных("Период");
        ЭлементОтбора.ВидСравнения=ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
        ЭлементОтбора.Использование=Истина;
        ЭлементОтбора.ПравоеЗначение=КонецДня(Элементы.Таб.ОтборСтрок.Период);
    КонецЕсли;
    ПараметрыВыбора=Новый Структура;
    ПараметрыВыбора.Вставить("ФиксированныеНастройки",НастройкиКомпоновки);
    ПараметрыВыбора.Вставить("РежимВыбора",Истина);
    ПараметрыВыбора.Вставить("МножественныйВыбор",Истина);    
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыводаРегистра",ЭтотОбъект,"Подбор");
    ОткрытьФорму("РегистрНакопления.ТоварыНаСкладах.Форма.ФормаСписка",ПараметрыВыбора,ЭтаФорма,УникальныйИдентификатор,,,ОписаниеОповещения);

Показать

Работает, как мне надо.
9. al_zzz 304 16.02.24 11:19 Сейчас в теме
Вот так сработало.
Процедура УстановитьПериодПоУмолчанию(Форма) Экспорт 
    Список        = Форма.Список;
    ДатаНачала    = НачалоМесяца(ТекущаяДатаСеанса()); 
    ДатаНачала    = ДобавитьМесяц(ДатаНачала, -1);
    ДатаОкончания = КонецМесяца(ТекущаяДатаСеанса());
    лНовыйПериод = Новый СтандартныйПериод(ДатаНачала, ДатаОкончания);
    ЗаполнитьЗначенияСвойств(Форма.Элементы.Список.Период, лНовыйПериод);
    Форма.Элементы.Список.Обновить();
КонецПроцедуры
Показать

Вызвал из "ПриСозданииНаСервере"
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот