Продолжаем разговор о открытие форм различным способом (и с различными целями), предыдущая статья рассказывала о том, как открыть форму с заполнением, а данная статья расскажет о том, ка открыть форму с отбором (форма списка, форма выбора) в обычном и управляемом приложении.
Открытие формы с отбором в обычном приложении
В обычном приложении (я пробовал на платформе 8.2.18.102) я знаю только один способ открытия формы списка или формы выбора с отбором (буду рад увидеть другие варианты), выглядит он примерно так:
1 2 3 4 5 | нФормаВыбора = Справочники.ТестСправочник.ПолучитьФормуВыбора(, ЭлементыФормы.тестОбъект); нФормаВыбора.Отбор.ТестРеквизит.ВидСравнения = ВидСравнения.Равно; нФормаВыбора.Отбор.ТестРеквизит.Значение = "Тест1"; нФормаВыбора.Отбор.ТестРеквизит.Использование = Истина; нФормаВыбора.Открыть(); |
В этом примере при получении формы владельца открывающейся формы (второй параметр) можно ничего не указывать (для формы списка, например), я указал поле в которое должен попадать выбранный элемент.
Кроме этого, если код открытия формы у Вас размещается в событии «НачалоВыбора», то не забудьте отменить стандартную обработку, а в качестве владельца открывающейся формы можно указать первый параметр события — «Элемент».
Открытие формы с отбором в управляемом приложении
В управляемом приложении я знаю несколько способов открыть форму с отбором. Первый способ простой, но сильно ограничен по возможностям, выглядит он примерно так:
1 2 3 4 5 6 7 | ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("ТестРеквизит", "Тест1"); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора); ОткрытьФорму("Справочник.ТестСправочник.Форма.ФормаВыбора", ПараметрыФормы, Элементы.тестОбъект); |
Проблема в том, что нельзя выбрать вид сравнения (только «равно») и нет доступа к некоторым другим параметрам.
Второй способ лишен недостатков первого способа, но выглядит значительно более громоздко:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | фиксНастройки = Новый НастройкиКомпоновкиДанных; эОтбор = фиксНастройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); эОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТестРеквизит"); эОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; эОтбор.ПравоеЗначение = "Тест2"; эОтбор.Использование = Истина; эОтбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ФиксированныеНастройки", фиксНастройки); ОткрытьФорму("Справочник.ТестСправочник.Форма.ФормаВыбора", ПараметрыФормы, Элементы.тестОбъект); |
И на всякий случай приведу третий способ, который, на самом деле, мало чем отличается от второго, но смотрите сами:
1 2 3 4 5 6 7 8 9 10 11 | нФормаВыбора = ПолучитьФорму("Справочник.ТестСправочник.Форма.ФормаВыбора", , Элементы.тестОбъект); эОтбор = нФормаВыбора.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); эОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТестРеквизит"); эОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно; эОтбор.ПравоеЗначение = "Тест2"; эОтбор.Использование = Истина; эОтбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; нФормаВыбора.Открыть(); |
Не забывайте отключать стандартную обработку, если это требуется, а также указывать/не указывать владельца при получении/открытии формы.
В заключение отмечу, что я намеренно не использую модальное открытие формы списка/выбора (1С с некоторых пор приказала отказываться от модальности), но если у Вас есть потребность в модальности, то такое, разумеется, тоже возможно.
На этом все, надеюсь данная статья Вам помогла.
Загрузка...
Большое спасибо, именно то что я искал!
Спасибо, для отбора по нескольким реквизитам очень второй способ помог!
Спасибо вам большое за информацию. То, что нужно.
БП 3.0 при открытии формы выбора реализаций — работает 2 способ.
Большое спасибо. особенно за то, что рассмотрели разные случаи
Большое спасибо, помог 1 пункт в управляемом приложении, только без пункта «Элементы.тестОбъект.». Главное заработало!!!!
Дякую. Мені дуже допомогло.
Спасибо !!!