Программно открыть форму списка с отбором по интервалу
Добрый день!
Есть форма списка (регистра сведений, но это неважно) (рис. 1) с полями ПодкаталогTS, ЛеваяГраница, ПраваяГраница.
Делаю кнопку, чтобы при нажатии на неё открывалась форма списка другого регистра сведений "ПорядокM3u8" с отборами, чтобы ПорядокM3u8.ПодкаталогTS=ПодкаталогTS И ЛеваяГраница<= ПорядокM3u8.НомерСтрокиM3u8<= ПраваяГраница. Был бы простой отбор на равенство - заморачиваться не пришлось бы, а тут:
В первой форме списка сделал команду "ПорядокM3u8", в её обработчике написал:
Во второй форме обработки события:
В результате форма открывается, но в ней ПУСТО. (Рис. 2) Самое интересное, что, если открыть форму как обычно и такой же отбор задать руками, то значения появляются. (Рис. 3)
Значения передаются, проверил под отладчиком. Устанавливал стандартные настройки - не помогает. Самое весёлое, что, когда закомментирую всё, кроме правой границы - устанавливается отбор по каталогу, хотя он как раз закомментирован, а отбор по правой границе не устанавливается. Меняю
на
или
ругается
На
не ругается, но ничего не фильтрует.
Как сделать правильно и, желательно, чтобы не пропадал пользовательский отбор наверху? (Желательно, чтобы подкаталог и интервал менялись там, а другие отборы, если будут, отключить)
Есть форма списка (регистра сведений, но это неважно) (рис. 1) с полями ПодкаталогTS, ЛеваяГраница, ПраваяГраница.
Делаю кнопку, чтобы при нажатии на неё открывалась форма списка другого регистра сведений "ПорядокM3u8" с отборами, чтобы ПорядокM3u8.ПодкаталогTS=ПодкаталогTS И ЛеваяГраница<= ПорядокM3u8.НомерСтрокиM3u8<= ПраваяГраница. Был бы простой отбор на равенство - заморачиваться не пришлось бы, а тут:
В первой форме списка сделал команду "ПорядокM3u8", в её обработчике написал:
&НаКлиенте
Процедура ПорядокM3u8(Команда)
ТекДанные=Элементы.Список.ТекущиеДанные;
ЗначениеОтбора = Новый Структура("ПодкаталогTS, ЛеваяГраница, ПраваяГраница", ТекДанные.ПодкаталогTS, ТекДанные.ЛеваяГраница, ТекДанные.ПраваяГраница);
ПараметрыВыбора = Новый Структура("МойОтбор", ЗначениеОтбора);
ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка",ПараметрыВыбора);
КонецПроцедуры
ПоказатьВо второй форме обработки события:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Перем ПодкаталогTS, ЛеваяГраница, ПраваяГраница;
Если НЕ Параметры.Свойство("МойОтбор") Тогда
Возврат;
КонецЕсли;
МойОтбор=Параметры.МойОтбор;
Если МойОтбор.Свойство("ПодкаталогTS", ПодкаталогTS) Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодкаталогTS");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто;
ЭлементОтбора.ПравоеЗначение = ПодкаталогTS;
КонецЕсли;
Если МойОтбор.Свойство("ЛеваяГраница", ЛеваяГраница) Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерСтрокиM3u8");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто;
ЭлементОтбора.ПравоеЗначение = ЛеваяГраница;
КонецЕсли;
Если МойОтбор.Свойство("ПраваяГраница", ПраваяГраница) Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерСтрокиM3u8");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Авто;
ЭлементОтбора.ПравоеЗначение = ПраваяГраница;
КонецЕсли;
КонецПроцедуры
ПоказатьВ результате форма открывается, но в ней ПУСТО. (Рис. 2) Самое интересное, что, если открыть форму как обычно и такой же отбор задать руками, то значения появляются. (Рис. 3)
Значения передаются, проверил под отладчиком. Устанавливал стандартные настройки - не помогает. Самое весёлое, что, когда закомментирую всё, кроме правой границы - устанавливается отбор по каталогу, хотя он как раз закомментирован, а отбор по правой границе не устанавливается. Меняю
Список.Отбор.Элементы
на
Список.КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеНастройки.Элементы
или
Список.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы
ругается
Коллекция пользовательских настроек не может изменять свой состав, так как она связана с настройками компоновки данных
На
Список.КомпоновщикНастроек.Настройки.Отбор.Элементы
не ругается, но ничего не фильтрует.
Как сделать правильно и, желательно, чтобы не пропадал пользовательский отбор наверху? (Желательно, чтобы подкаталог и интервал менялись там, а другие отборы, если будут, отключить)
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
(9)
так?
так?
&НаКлиенте
Процедура ПорядокM3u8(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина);
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");
Форма = ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка", ПараметрыОткрытия, Элемент,,,,);
///Если хотим несколько условий
ГруппаОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодкаталогTS");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение= ПодкаталогTS;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерСтрокиM3u8");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ЛеваяГраница;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерСтрокиM3u8");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение= ПраваяГраница;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Все проще чем кажется...
&НаКлиенте
Процедура ПорядокM3u8(Команда)
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
///Если хотим несколько условий
ГруппаОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодкаталогTS");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ПодкаталогTS;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерСтрокиM3u8");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ЛеваяГраница;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерСтрокиM3u8");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ПраваяГраница;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомпоновки);
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина);
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");
ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка",ПараметрыФормы,
ЭтаФорма, , , , ОбработкаВыбора);
КонецПроцедуры
Показать
(5) Скорее нет...
Тогда так (3):
Тогда так (3):
Форма = ОткрытьФорму("РегистрСведений.МойРегистр.ФормаСписка");
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Форма.Список.КомпоновщикНастроек.Настройки.Отбор, "ПодкаталогTS",
ТекДанные.ПодкаталогTS, ВидСравненияКомпоновкиДанных.Равно, ,Истина,
РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ, Новый УникальныйИдентификатор);
(1) вот еще пример:
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
Если ЗначениеЗаполнено(ДатаНачала) Тогда
ЭлементОтбораМин = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораМин.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементОтбораМин.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбораМин.Использование = Истина;
ЭлементОтбораМин.ПравоеЗначение = ДатаНачала;
КонецЕсли;
Если ЗначениеЗаполнено(ДатаОкончания) Тогда
ЭлементОтбораМакс = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораМакс.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементОтбораМакс.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
ЭлементОтбораМакс.Использование = Истина;
ЭлементОтбораМакс.ПравоеЗначение = ДатаОкончания;
КонецЕсли;
ПараметрыФормыВыбора = Новый Структура;
ПараметрыФормыВыбора.Вставить("РежимВыбора", Истина);
ПараметрыФормыВыбора.Вставить("МножественныйВыбор", Истина);
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ОбработкаЗакрытияФормыВыбора",ЭтаФорма);
Форма = ОткрытьФорму("ВнешняяОбработка.ТестОткрытиеСпискаПоОтбору.Форма.ФормаВыбора", ПараметрыФормыВыбора, ЭтаФорма,,,,ОповещениеОЗакрытии, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Форма.список.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКомпоновки);
ПоказатьПрикрепленные файлы:
ТестОткрытиеСпискаПоОтбору.epf
(2) Хотел сделать, как Слава Крон из коммента №20, правда, GUID меня смутил - поменяют и привет! Уж не знаю из-за GUID'а или нет, но не работает тоже, что даже немного и хорошо тем, что не надо платить $m человеку, который даже не участвует в обсуждении :)
Короткий вариант из коммента №7 требует УправлениеНебольшойФирмойКлиент, а я на него ТАК надеялся!
Короткий вариант из коммента №7 требует УправлениеНебольшойФирмойКлиент, а я на него ТАК надеялся!
по другому надо делать.
напрмер
&НаКлиенте
Процедура ТоварыПродавецНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыОткрытия = Новый Структура("РежимВыбора,ЗакрыватьПриВыборе", Истина, Истина);
Форма = ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыОткрытия, Элемент,,,,);
ОтборВладелец = Форма.ПользователиСписок.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборВладелец.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборВладелец.Использование = Истина;
ОтборВладелец.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("имя");
ОтборВладелец.ПравоеЗначение = "имя");
КонецПроцедуры
напрмер
&НаКлиенте
Процедура ТоварыПродавецНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыОткрытия = Новый Структура("РежимВыбора,ЗакрыватьПриВыборе", Истина, Истина);
Форма = ОткрытьФорму("Справочник.Пользователи.ФормаВыбора", ПараметрыОткрытия, Элемент,,,,);
ОтборВладелец = Форма.ПользователиСписок.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборВладелец.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборВладелец.Использование = Истина;
ОтборВладелец.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("имя");
ОтборВладелец.ПравоеЗначение = "имя");
КонецПроцедуры
(9)
так?
так?
&НаКлиенте
Процедура ПорядокM3u8(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина);
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");
Форма = ОткрытьФорму("РегистрСведений.ПорядокM3u8.ФормаСписка", ПараметрыОткрытия, Элемент,,,,);
///Если хотим несколько условий
ГруппаОтбора = Форма.Список.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПодкаталогTS");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение= ПодкаталогTS;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерСтрокиM3u8");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ЛеваяГраница;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерСтрокиM3u8");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.МеньшеИлиРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение= ПраваяГраница;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот