Динамический список - как сделать отбор по дате ?

1. vacony 28.01.19 15:08 Сейчас в теме
УФ. 8.3 , Розница

Есть список Чеков. Документов очень много. Как при открытии программно (!) установить отбор только за сегодня ?

Варианты фильтра - после открытия -

Пер = Новый СтандартныйПериод(НачалоДня(ТекущаяДата()),ТекущаяДата());
элементы.Список.Период = Пер;
Элементы.Список.Обновить();

Фильтруют уже отобранные данные. Т.е. сперва ты ждешь долго, потом видишь документы.

Как установить отбор в Списке до отбора данных ?

Даже ставлю дату руками, сохраняю значение - штатно. И потом ни в ПриСозданииНаСервере ни в ПриОткрытии не могу найти эти значения в отборах Списка
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. lefthander 28.01.19 16:03 Сейчас в теме
(1)а открыть настройки динамического списка и установить отбор не получается?
2. mcgoblin 3 28.01.19 15:25 Сейчас в теме
Сходу точно не скажу, но примерно следующий

Отбор = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы;
 

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

УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Период");

УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

УсловиеОтбора.ПравоеЗначение = ТекущаяДата();

 

Список.КомпоновщикНастроек.ЗагрузитьНастройки(Список.КомпоновщикНастроек.Настройки);
Показать
3. vacony 28.01.19 15:28 Сейчас в теме
(2) А это в какой момент делать ? Я не совсем понимаю , когда именно компоновщик выбирает значения из базы.
Самое ранее что происходит на форме списка - ПриСозданииНаСервере - сюда суваться ?

Сейчас попробую. Спасибо за наводку
17. mcgoblin 3 28.01.19 19:03 Сейчас в теме
(3) Ну это при открытии формы списка.
Кроме того, можно ручками настроить отбор
Прикрепленные файлы:
4. vacony 28.01.19 15:47 Сейчас в теме
Добавил , все проходит , но фактически журнал не фильтруется

&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)

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

КонецПроцедуры
5. vacony 28.01.19 15:54 Сейчас в теме
Может надо как то обновить отбор ?
Т.е. в компоновщик отбор добавили, а как то обновить, применить ?
6. vacony 28.01.19 15:59 Сейчас в теме
УсловиеОтбора.Использование = Истина;

пробуем...
7. vacony 28.01.19 16:02 Сейчас в теме
Не вышло.
Смущает что в настройках формы - в отборе - нет этого заданного отбора
9. lefthander 28.01.19 16:06 Сейчас в теме
Можно в конце Элементы.Список.Обновить()
11. vacony 28.01.19 16:17 Сейчас в теме
(9) это бы обновляло форму только , но я вижу что нет ни отбора, и скорость открытия долгая - т.е. данные не фильтруются

(10)
нет не уверен ) Но и не ругалось ... пробую с Датой
10. gudogu 93 28.01.19 16:08 Сейчас в теме
Вы уверены что в динамическом списке есть поле "Период"?

Попробуйте так

Отбор = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы;
УсловиеОтбора = Отбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
УсловиеОтбора.ПравоеЗначение = ТекущаяДата();
УсловиеОтбора.Использование = Истина;
12. vacony 28.01.19 16:22 Сейчас в теме
13. gudogu 93 28.01.19 17:11 Сейчас в теме
(12) Проверила у себя данный код, все работает. Возможна проблема в расширении?
14. vacony 28.01.19 17:14 Сейчас в теме
(13) вот тут подробнее...
у меня
1С:Предприятие 8.3 (8.3.12.1685)
Розница, редакция 2.2 (2.2.11.16) ну тут не так важно

У меня расширением перекрыто ПриСозданииНаСервере

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


У вас такой же текст ?
В какую процедуру помещали ?
В списке настройки формы - Ваш отбор появился ?
15. gudogu 93 28.01.19 17:38 Сейчас в теме
(14)

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

Вот этот код использую.

В форме списка Вашего расширения, посмотрите привязана ли эта функция к событию формы "ПриСозданииНаСервере"
16. vacony 28.01.19 17:58 Сейчас в теме
(15) да привязана, т.к. я туда попадаю при отладке
странно.. где же проблема
18. gudogu 93 28.01.19 19:03 Сейчас в теме
(16) Пробуйте так. Должно работать

Отбор = Список.Отбор.Элементы;
УсловиеОтбора = Отбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
УсловиеОтбора.ПравоеЗначение = ТекущаяДата();
УсловиеОтбора.Использование = Истина;
Istur; lefthander; +2 Ответить
19. vacony 29.01.19 10:40 Сейчас в теме
(18) пробую..
хотя так тоже пробовал вроде в процессе "проб и ошибок"

А в чем разница между -

Список.Отбор.Элементы
Список.КомпоновщикНастроек.Настройки.Отбор.Элементы
Список.КомпоновщикНастроек.ПользовательскиеНастройки.Отбор.Элементы

а то нигде не могу найти принципиальную разницу
20. vacony 29.01.19 11:16 Сейчас в теме
Попробовал. С указанием четко даты - не вышло - он точно по времени смотрит.
Поменял на
УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
УсловиеОтбора.ПравоеЗначение = Дата('20190108');

работает - отбирает быстрее, открывается быстрее. .... НО ! :)
1. не видно интервала отбора - сверху формы
2. В настройках формы - нет этого фильтра.
И как бы ни ставил период , сбрасывал настройки - отбор остается
Т.е. он устанавливается и жестко и все
21. vacony 29.01.19 11:31 Сейчас в теме
А если так -
Отбор = Список.КомпоновщикНастроек.Настройки.Отбор.Элементы;

то отбор не ставится вообще
22. vacony 04.02.19 14:13 Сейчас в теме
Пока решения не нашел (

Т.е. или тащатся не все данные, но тогда и отбора не видно и не отключить
Или тащатся все данные - но отбор не ставится
23. vacony 04.02.20 16:16 Сейчас в теме
24. mgreat75 07.02.20 06:20 Сейчас в теме
У меня сработал вот этот код:

лНовыйПериод = Новый СтандартныйПериод(НачалоДня(ТекущаяДата()), КонецДня(ТекущаяДата()+24*60*60));

ЗаполнитьЗначенияСвойств(Элементы.Список.Период, лНовыйПериод);

Элементы.Список.Обновить();

При этом отбор показывается в панели быстрых отборов, как будто бы период задали руками. Решение почерпнуто по этой ссылке: http://1000and1c.blogspot.com/2016/11/1.html
MefodevYV; +1 Ответить
25. YuruSar 06.03.20 22:30 Сейчас в теме
У меня подобная проблема возникла в ЗиКГУ в Журналах документов, особенно кадровых.
Там важна дата события, а не дата создания документа, т.е. нужны отборы по полям типа "ДатаСобытия", "ДатаНачала", "ПериодРегистрации"...

Можно, конешно, сделать в настройках два отбора по больше-меньше, но как-то фе.
Я кинул в реквизиты формы СтандартныйПериод и обрабатываю события

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
........
ПериодСобытий.ДатаНачала = НачалоДня(ОбщегоНазначения.ТекущаяДатаПользователя());
ПериодСобытий.ДатаОкончания = КонецДня(ОбщегоНазначения.ТекущаяДатаПользователя());
УстановитьПараметрыОтбораПоПериоду();
...................
КонецПроцедуры
////////////////////////////////////////////////////////////­/////////////////////////////
#Область ОтборПоПериодуДатыСобытий

&НаКлиенте
Процедура Подключаемый_ВыбратьПериод(Команда)
ВыбратьПериод(ЭтотОбъект, Команда.Имя);
КонецПроцедуры

&НаКлиенте
Процедура ПериодСобытийДатаНачалаПриИзменении(Элемент)
Если ПериодСобытий.ДатаОкончания < ПериодСобытий.ДатаНачала Тогда
ПериодСобытий.ДатаОкончания = ПериодСобытий.ДатаНачала;
КонецЕсли;
УстановитьПараметрыОтбораПоПериоду();
КонецПроцедуры

&НаКлиенте
Процедура ПериодСобытийДатаОкончанияПриИзменении(Элемент)
Если ПериодСобытий.ДатаНачала > ПериодСобытий.ДатаОкончания Тогда
ПериодСобытий.ДатаНачала = ПериодСобытий.ДатаОкончания;
КонецЕсли;
УстановитьПараметрыОтбораПоПериоду();
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьПериод(Форма, ИмяКоманды) Экспорт
Путь = СтрЗаменить(ИмяКоманды, "ВыбратьПериод", "ПериодСобытий");
Контекст = Новый Структура("Форма, Путь", Форма, Путь);

Диалог = Новый ДиалогРедактированияСтандартногоПериода;
Диалог.Период = Форма[Путь];
Диалог.Показать(Новый ОписаниеОповещения("ВыбратьПериодЗавершение", ЭтотОбъект, Контекст));
КонецПроцедуры

&НаКлиенте
Процедура ВыбратьПериодЗавершение(ВыбранныйПериод, Контекст) Экспорт
Если ВыбранныйПериод = Неопределено Тогда
Возврат;
КонецЕсли;
Контекст.Форма[Контекст.Путь] = ВыбранныйПериод;
УстановитьПараметрыОтбораПоПериоду();
КонецПроцедуры

&НаСервере
Процедура УстановитьПараметрыОтбораПоПериоду()
ДатаНачалаОтбора = НачалоДня(?(ЗначениеЗаполнено(ПериодСобытий.ДатаНачала), ПериодСобытий.ДатаНачала, НачалоГода(ОбщегоНазначения.ТекущаяДатаПользователя())));// '00010101'));
ДатаОкончанияОтбора = КонецДня(?(ЗначениеЗаполнено(ПериодСобытий.ДатаОкончания), ПериодСобытий.ДатаОкончания, ОбщегоНазначения.ТекущаяДатаПользователя()));

ПолеСобытия = Новый ПолеКомпоновкиДанных("ДатаСобытия");

Отборы = ЭтаФорма.Список.Отбор.Элементы;

Если Отборы.Количество() = 0 Тогда
Отбор = Отборы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = ПолеСобытия;
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
Отбор.ПравоеЗначение = ДатаНачалаОтбора;
Отбор.Использование = Истина;

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

#КонецОбласти
user591389_aska_rabota; +1 Ответить
26. YuruSar 06.03.20 23:21 Сейчас в теме
Вообще-то, в ЗиКГУ в механизме Установить период есть возможность
выбрать Показать стандартные периоды и установить Сегодня

В Вашей ситуации, если нет потребности в последующем изменении периода, достаточно:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
........
УстановитьПараметрыОтбораПоПериоду(ПолеСобытия, ДатаНачалаОтбора, ДатаОкончанияОтбора);
//ГДЕ:
//ПолеСобытия = Новый ПолеКомпоновкиДанных("Дата");
//ДатаНачалаОтбора = НачалоДня(ОбщегоНазначения.ТекущаяДатаПользователя());
//ДатаОкончанияОтбора = КонецДня(ОбщегоНазначения.ТекущаяДатаПользователя());
//Ускорит процесс открытия формы - отключить стандартную установку периода
...................
КонецПроцедуры

&НаСервере
Процедура УстановитьПараметрыОтбораПоПериоду(ПолеСобытия, ДатаНачалаОтбора, ДатаОкончанияОтбора)

Отборы = ЭтаФорма.Список.Отбор.Элементы;

Если Отборы.Количество() = 0 Тогда
Отбор = Отборы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = ПолеСобытия;
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
Отбор.ПравоеЗначение = ДатаНачалаОтбора;
Отбор.Использование = Истина;

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

КонецПроцедуры
Fristayla; vasiliy_b; user591389_aska_rabota; +3 Ответить
Оставьте свое сообщение

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