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

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

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

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

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

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

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

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