Программно открыть форму списка с отбором по интервалу

1. DWZ2 31.05.22 14:18 Сейчас в теме
Добрый день!

Есть форма списка (регистра сведений, но это неважно) (рис. 1) с полями ПодкаталогTS, ЛеваяГраница, ПраваяГраница.

Делаю кнопку, чтобы при нажатии на неё открывалась форма списка другого регистра сведений "ПорядокM3u8" с отборами, чтобы ПорядокM3u8.ПодкаталогTS=ПодкаталогTS И ЛеваяГраница<= ПорядокM3u8.НомерСтрокиM3u8<= ПраваяГраница. Был бы простой отбор на равенство - заморачиваться не пришлось бы, а тут:

В первой форме списка сделал команду "ПорядокM3u8", в её обработчике написал:
&НаКлиенте
Процедура ПорядокM3u8(Команда)
	
	ТекДанные=Элементы.Список.ТекущиеДанные;
	ЗначениеОтбора = Новый Структура("ПодкаталогTS, ЛеваяГраница, ПраваяГраница", ТекДанные.ПодкаталогTS, ТекДанные.ЛеваяГраница, ТекДанные.ПраваяГраница);
	ПараметрыВыбора = Новый Структура("МойОтбор", ЗначениеОтбора);

	ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка",ПараметрыВыбора);
КонецПроцедуры
Показать


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

КонецПроцедуры
Показать


В результате форма открывается, но в ней ПУСТО. (Рис. 2) Самое интересное, что, если открыть форму как обычно и такой же отбор задать руками, то значения появляются. (Рис. 3)

Значения передаются, проверил под отладчиком. Устанавливал стандартные настройки - не помогает. Самое весёлое, что, когда закомментирую всё, кроме правой границы - устанавливается отбор по каталогу, хотя он как раз закомментирован, а отбор по правой границе не устанавливается. Меняю
Список.Отбор.Элементы


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


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


ругается
Коллекция пользовательских настроек не может изменять свой состав, так как она связана с настройками компоновки данных


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


не ругается, но ничего не фильтрует.

Как сделать правильно и, желательно, чтобы не пропадал пользовательский отбор наверху? (Желательно, чтобы подкаталог и интервал менялись там, а другие отборы, если будут, отключить)
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
13. user5300 1064 31.05.22 15:30 Сейчас в теме +0.5 $m
(9)
так?
&НаКлиенте
Процедура ПорядокM3u8(Команда)
    
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("РежимВыбора",Истина);
    ПараметрыФормы.Вставить("МножественныйВыбор",Истина);

    ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");

			
	Форма = ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка", ПараметрыОткрытия, Элемент,,,,);


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

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

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

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

Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. user5300 1064 31.05.22 14:47 Сейчас в теме
(1) Все проще чем кажется...


&НаКлиенте
Процедура ПорядокM3u8(Команда)
	
	НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;

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

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

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

	ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");

	ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка",ПараметрыФормы,
	        ЭтаФорма, , , , ОбработкаВыбора);

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

Показать
5. DWZ2 31.05.22 14:50 Сейчас в теме
(4) А с пользовательскими настройками можно так?
6. user5300 1064 31.05.22 14:56 Сейчас в теме
(5) Скорее нет...
Тогда так (3):

 Форма = ОткрытьФорму("РегистрСведений.МойРегистр.ФормаСписка");
    ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Форма.Список.КомпоновщикНастроек.Настройки.Отбор, "ПодкаталогTS",
        ТекДанные.ПодкаталогTS, ВидСравненияКомпоновкиДанных.Равно, ,Истина,
        РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ, Новый УникальныйИдентификатор);
7. DWZ2 31.05.22 14:56 Сейчас в теме
(6) Это с БСП. А без него?
8. user5300 1064 31.05.22 15:00 Сейчас в теме
(7) А без него - ответ в (3)ilnur75
10. DWZ2 31.05.22 15:17 Сейчас в теме
(4) Это тоже не работает.
17. spacecraft 31.05.22 16:37 Сейчас в теме
(1) вот еще пример:
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;

	Если ЗначениеЗаполнено(ДатаНачала) Тогда
		ЭлементОтбораМин = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	    ЭлементОтбораМин.ЛевоеЗначение     = Новый ПолеКомпоновкиДанных("Дата");
	    ЭлементОтбораМин.ВидСравнения         = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
	    ЭлементОтбораМин.Использование     = Истина;
	    ЭлементОтбораМин.ПравоеЗначение     = ДатаНачала;
	КонецЕсли;
	
	Если ЗначениеЗаполнено(ДатаОкончания) Тогда
		ЭлементОтбораМакс = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	    ЭлементОтбораМакс.ЛевоеЗначение     = Новый ПолеКомпоновкиДанных("Дата");
	    ЭлементОтбораМакс.ВидСравнения         = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
	    ЭлементОтбораМакс.Использование     = Истина;
	    ЭлементОтбораМакс.ПравоеЗначение     = ДатаОкончания;
	КонецЕсли;
	
	ПараметрыФормыВыбора = Новый Структура;
	ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина);
	ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина);
	ОповещениеОЗакрытии = Новый ОписаниеОповещения("ОбработкаЗакрытияФормыВыбора",ЭтаФорма);
	Форма = ОткрытьФорму("ВнешняяОбработка.ТестОткрытиеСпискаПоОтбору.Форма.ФормаВыбора", ПараметрыФормыВыбора, ЭтаФорма,,,,ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	Форма.список.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновки);
Показать
Прикрепленные файлы:
ТестОткрытиеСпискаПоОтбору.epf
2. starik-2005 3090 31.05.22 14:34 Сейчас в теме
11. DWZ2 31.05.22 15:20 Сейчас в теме
(2) Хотел сделать, как Слава Крон из коммента №20, правда, GUID меня смутил - поменяют и привет! Уж не знаю из-за GUID'а или нет, но не работает тоже, что даже немного и хорошо тем, что не надо платить $m человеку, который даже не участвует в обсуждении :)

Короткий вариант из коммента №7 требует УправлениеНебольшойФирмойКлиент, а я на него ТАК надеялся!
3. ilnur75 31.05.22 14:35 Сейчас в теме
по другому надо делать.

напрмер


&НаКлиенте
Процедура ТоварыПродавецНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
ПараметрыОткрытия = Новый Структура("РежимВыбора,ЗакрыватьПриВыборе", Истина, Истина);

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

КонецПроцедуры
9. DWZ2 31.05.22 15:13 Сейчас в теме
12. ilnur75 31.05.22 15:23 Сейчас в теме
(9)
для начала одно условие отбора надо выполнить. если получится тогда следующее.
13. user5300 1064 31.05.22 15:30 Сейчас в теме +0.5 $m
(9)
так?
&НаКлиенте
Процедура ПорядокM3u8(Команда)
    
    
    ПараметрыФормы = Новый Структура;
    ПараметрыФормы.Вставить("РежимВыбора",Истина);
    ПараметрыФормы.Вставить("МножественныйВыбор",Истина);

    ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");

			
	Форма = ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка", ПараметрыОткрытия, Элемент,,,,);


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

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

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

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

Показать
14. DWZ2 31.05.22 15:36 Сейчас в теме
15. ilnur75 31.05.22 15:36 Сейчас в теме
(13) по коду с отбором да, только значения границ известны ?
16. DWZ2 31.05.22 15:37 Сейчас в теме
(15) По первому полю на равенство, по второму - на интервал.
Оставьте свое сообщение

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