Как установить отбор в открываемой форме
Содержание[Убрать]
-
- Установка отбора в форме при открытии
- Установка отбора в 8.1 обычное приложение
- Установка отбора в 8.2, 8.3 тонкий клиент (управляемая форма)
- Фильтр по одному элементу
- Как открыть форму выбора с отбором в списке? Как установить выбор групп и элементов?
- Ещё один вариант открытия формы с отбором в списке для 8.3
- Установка отбора в форме при открытии
Как программно установить отбор в открываемой форме?
Установка отбора в форме при открытии
Установка отбора в 8.1 обычное приложение
Для установки отбора используется свойство «Отбор» у менеджеров списков объектов, например, для открытия списка договоров определенного контрагента можно написать следующий код:
ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора("ФормаВыбора", ЭтаФорма, "ФормаВыбораДоговора");
ФормаВыбора.Отбор.Владелец.Значение = КонтрагентСсылка;
ФормаВыбора.Отбор.Владелец.Использование = ИСТИНА;
ФормаВыбора.ОткрытьМодально();
В данном случае мы применили вид сравнения «Равно«, но не указывали его т.к. оно стоит по умолчанию. Используя разные значения вида сравнения мы значительно расширяем возможности.
Например, у нас в базе контрагент является и продавцом и покупателем, при этом договоры находятся в соответствующей группе внутри справочника. Поэтому мы сделаем отбор не только на самого контрагента, но и на группу «Группа Покупатели» в которой находится договор:
ФормаВыбора = Справочники.ДоговорыКонтрагентов.ПолучитьФормуВыбора("ФормаВыбора", ЭтаФорма, "ФормаВыбораДоговора");
ФормаВыбора.Отбор.Владелец.Значение = КонтрагентСсылка;
ФормаВыбора.Отбор.Владелец.Использование = ИСТИНА;
ГруппаПокупатели = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Группа Покупатели");
ФормаВыбора.Отбор.Родитель.ВидСравнения = ВидСравнения.ВИерархии;
ФормаВыбора.Отбор.Родитель.Значение = ГруппаПокупатели;
ФормаВыбора.Отбор.Родитель.Использование = ИСТИНА;
ФормаВыбора.ОткрытьМодально();
Установка отбора в 8.2, 8.3 тонкий клиент (управляемая форма)
Фильтр по одному элементу
&НаКлиенте
Процедура СписокДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ЗначениеОтбора = Новый Структура("Владелец", Элементы.Список.ТекущиеДанные.Контрагент);
ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);
ОткрытьФорму("Справочник.ДоговорыКонтрагентов.ФормаВыбора",ПараметрыВыбора, Элемент); // здесь передан Элемент, чтобы выбранное значение попало в поле
КонецПроцедуры
Как открыть форму выбора с отбором в списке? Как установить выбор групп и элементов?
&НаКлиенте
Процедура СписокДоговорНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
МассивДоговоров = ПолучитьДоговорыНаСервере();
СЗДоговоров = Новый СписокЗначений;
СЗДоговоров.ЗагрузитьЗначения(МассивДоговоров);
НастройкиКомп = Новый НастройкиКомпоновкиДанных;
ОтборСписка = НастройкиКомп.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборСписка.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ОтборСписка.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ОтборСписка.ПравоеЗначение = СЗДоговоров;
ОтборСписка.Использование = Истина;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомп);
ПараметрыФормы.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы); // Здесь устанавливается возможность выбора не только элементов, но групп
ОткрытьФорму("Справочник.ДоговорыКонтрагентов.Форма.ФормаВыбора", ПараметрыФормы, Элемент);
КонецПроцедуры
Ещё один вариант открытия формы с отбором в списке для 8.3
Ниже текст процедуры открытия формы для команды объекта
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
СписокПокупателей = ПолучитьСписокПокупателей();
Отбор = Новый Структура;
Отбор.Вставить("Ссылка", СписокПокупателей );
ПараметрыФормы.Вставить("Отбор", Отбор);
ОткрытьФорму("Справочник.Контрагенты.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры
Недостаточно прав для комментирования
Ermak |
|
||
---|---|---|---|
|
Документ Допуски
Создан Реквизит Должность, тип Справочник Должность Создана ТЧ с реквизитом Описание, тип Строка Справочник Должность Реквизит Наименование, Тип Строка Справочник Описание Реквизит Должность, тип Справочник Должность Реквизит Описание, тип Строка. Нужно когда в документе Допуски выбираю в реквизите Должность значение например Слесарь, в ТЧ при выборе Описания открывался справочник Описания в выбором только Слесарь. Код 1C v 8.х
Изменено 14.05.13 11:36:17 |
Yandex |
|
||
---|---|---|---|
|
E_Migachev |
|
||
---|---|---|---|
|
(0) Ermak, посмотри v8.x: Как установить отбор в форме списка справочника? там все есть и описано |
Ermak |
|
||
---|---|---|---|
|
(1) E_Migachev, Я сделал по первому варианту но почему то у меня не работает отбор по реквизиту Должность. |
Mokey |
|
||
---|---|---|---|
|
(0) Ermak, где-то я это уже видел, только запросом))) |
Ermak |
|
||
---|---|---|---|
|
(3) Mokey, запрос я напишу он не сложный
Код 1C v 8.х
А как дальше прописать чтобы открылся справочник и сделал отбор по реквизиту Должность |
Mokey |
|
||
---|---|---|---|
|
(4) Ermak, так запрос заработал или не заработал?
https://help1c.com/help/view/11138.html Изменено 14.05.13 14:45:26 |
Ermak |
|
||
---|---|---|---|
|
нет , я так и не понял почему когда ставлю отбор по Должности он у меня не выгружает. |
Ermak |
|
||
---|---|---|---|
|
Мне нужно чтобы человек заходил в сам справочник с отбором по должности |
Mokey |
|
||
---|---|---|---|
|
(6) Ermak, значит, нет такой должности |
Ermak |
|
||
---|---|---|---|
|
(8) Mokey, ну как нет, если справочник один и значение одинаковое |
Mokey |
|
||
---|---|---|---|
|
(9) Ermak, если вот так не работает,
Код 1C v 8.х
а вот так работает: Код 1C v 8.х
то однозначно либо нет такой должности, либо в ЭлементыФормы.Должность.Значение хранится не то значение. Других вариантов просто нет. Изменено 15.05.13 10:02:22 |
Ermak |
|
||
---|---|---|---|
|
Без Параметров работает, как можно проверить какой значение попадает ЭлементыФормы.Должность.Значение |
Ermak |
|
||
---|---|---|---|
|
я проверил вот так Код 1C v 8.х
Значение выдала правильное, такое как в реквизите Должность в форме документа. Как проверить какое значение выдает в справочнике реквизит Должность |
Ermak |
|
||
---|---|---|---|
|
Вообще не понимаю, что можно еще сделать подскажите. Я сделал внешнюю обработку чтобы проверить выгрузкуКод 1C v 8.х
Все работает как надо. Аналогично сделал в своем документе, не работает. Че такое *15 |
Ermak |
|
||
---|---|---|---|
|
Создал новый документ все работает, что за бред так и не понял |
Ermak |
|
||
---|---|---|---|
|
А как мне теперь сделать Форму выбора справочника с отбором по реквизиту |
Ermak |
|
||
---|---|---|---|
|
Все разобрался, сделал вот так
Код 1C v 8.х
Подскажите почему после выбора значение, в ячейки появляется <> |
Mokey |
|
||
---|---|---|---|
|
(16) Ermak, если представление справочника по наименованию, а нименование не заполнено, то будет выдавать <> |
Ermak |
|
||
---|---|---|---|
|
(17) Mokey, У меня стоит представление справочника по наименованию, но наименование я не заполняю потому что длина текста маленькая. Я создал реквизит Описание и сделал длину не ограниченную, т.е на форме у меня стоит и заполняется только реквизит Описание, а наименование я отключил чтобы не ругалась. А как мне тогда быть в моей ситуации? |
Mokey |
|
||
---|---|---|---|
|
(18) Ermak, вот и ответ на ваш вопрос |
Ermak |
|
||
---|---|---|---|
|
(19) Mokey, да я понял почему, но как мне быть если мне нужно чтобы была большая длина. Как тогда сделать чтобы попадала значение Описание а не Наименование? |
Mokey |
|
||
---|---|---|---|
|
(20) Ermak, никак, если только скрыть реквизит, а на форму выводить Описание, ну и кнопочка подбора должна быть описана вручную
Изменено 16.05.13 17:27:54 |
Ermak |
|
||
---|---|---|---|
|
(21) Mokey, а как на примере прописать кнопку подбора? |
Mokey |
|
||
---|---|---|---|
|
(22) Ermak, Откоываете модально форму выбора требуемого справочника. Эта форма вернёт выбранный элемент или неопределено, если нажали ESC (отказались от выбора). Вот этот выбранный элемент и заносите в реквизит, а на форму выводите надпись, например, Реквизит.Описание. |
Ermak |
|
||
---|---|---|---|
|
покажите программно |
Bell |
|
||
---|---|---|---|
|
http://novichok1c.ru/otbor-po-znacheniyu-rekvizita-tablichnoy-chasti-v-spiske-dokumentov |
Bell |
|
||
---|---|---|---|
|
Вот у себя сдела вот так отбор по подчинению и валюте
Код 1C v 8.х
Изменено 17.05.13 14:29:35 |
Ermak |
|
||
---|---|---|---|
|
У меня сейчас на выборе стоит такой отбор Код 1C v 8.х
Как мне совместить вместе это дело? |
Mokey |
|
||
---|---|---|---|
|
(27) Ermak, вставляете на форму Надпись и Кнопку.
На кнопку вешаем процедуру Код 1C v 8.х
|
Ermak |
|
||
---|---|---|---|
|
я не понимаю зачем мне кнопка и надпись, мне нужно выбрать с табличного поля а не с кнопки |
Mokey |
|
||
---|---|---|---|
|
(29) Ermak, в ТЧ? проще простого, добавьте колонку без элемента управления и при выводе строки устанавливайте текст вроде такого:
ОформлениеСтроки.Ячейки.Описание.УстановитьТекст(ТекущиеДанные.УМЦ_ДопДопуски.Описание). Но колонка с <> останется, потому что Вам надо выбирать каким-то образом. Есть варианты, но они довольно хитрые (например, спраятать колонку УМЦ_ДопДопуски, а выбор производить по комбинации клавиш или как-то ещё). Успехов. Изменено 17.05.13 16:33:19 |
Mokey |
|
||
---|---|---|---|
|
а можно попробовать при выводе строки непосредственно в эту ячейку устанавливать текст, правда, перед выбором всё равно текст будет теряться, но не надолго))
Изменено 17.05.13 16:42:28 |
Ermak |
|
||
---|---|---|---|
|
(31) Mokey, Покажите пожалуйста на примере |
Mokey |
|
||
---|---|---|---|
|
я же написал уже всё |
Mokey |
|
||
---|---|---|---|
|
Код 1C v 8.х
Подразумеваем, что Колонка1 — это и есть поле, в которое Вы подбираете элемент из справочника |
Ermak |
|
||
---|---|---|---|
|
Сделал так Код 1C v 8.х
Описание это имя колонки или поле {Документ.УМЦ_Результат.Форма.ФормаДокумента.Форма(78)}: Значение не является значением объектного типа (Описание) |
Ermak |
|
||
---|---|---|---|
|
??? |
Mokey |
|
||
---|---|---|---|
|
Добрый день. А что есть ДанныеСтроки.Описание в Вашем случае? Сдаётся мне, что там точно не объект, а просто строка, текст.
А, ну правильно. У Вас же поле называется Допуски! Код 1C v 8.х
Изменено 24.05.13 10:19:41 |
Ermak |
|
||
---|---|---|---|
|
Выводит ошибку {Документ.УМЦ_Результат.Форма.ФормаДокумента.Форма(78)}: Поле объекта не обнаружено (Допуски)
ОформлениеСтроки.Ячейки.Описание.УстановитьТекст(ДанныеСтроки.Допуски.Описание); Хотя ТП называется Допуски |
Mokey |
|
||
---|---|---|---|
|
Неправильно списываете |
Ermak |
|
||
---|---|---|---|
|
все равно выдает ошибку
{Документ.УМЦ_Результат.Форма.ФормаДокумента.Форма(78)}: Поле объекта не обнаружено (Допуски) |
Mokey |
|
||
---|---|---|---|
|
хм… может, стоит тщательней присмотреться к своим данным и реквизитам на форме? что да как называется? |
Ermak |
|
||
---|---|---|---|
|
Вот
Реквизит «Описание» тип Строка |
Mokey |
|
||
---|---|---|---|
|
{Документ.УМЦ_Результат.Форма.ФормаДокумента.Форма(78)}: Поле объекта не обнаружено (Допуски)
ОформлениеСтроки.Ячейки.Допуски.УстановитьТекст(ДанныеСтроки.Допуски.Описани судя по скину, это утверждение правильное. «скомпонуйте» у себя оба сообщения об ошибке, которые последними сюда выкладывали, и найдёте решение во-первых: ДанныеСтроки.Допуски — такого у Вас действительно нет Изменено 03.06.13 16:53:54 |
Ermak |
|
||
---|---|---|---|
|
В свойствах Описание я использую кнопку Выбора и прописано такое События Код 1C v 8.х
|
Ermak |
|
||
---|---|---|---|
|
а до этого была так прописано Код 1C v 8.х
|
Mokey |
|
||
---|---|---|---|
|
так если Описание — это строка, то зачем огород такой городить?
Код 1C v 8.х
Изменено 03.06.13 17:37:38 |
E_Migachev |
|
||
---|---|---|---|
|
я правильно понимаю!? ты в списке документов УМЦ результат хочешь вывести Описание из ТЧ Допуски? |
Ermak |
|
||
---|---|---|---|
|
да |
Ermak |
|
||
---|---|---|---|
|
???? |
Ermak |
|
||
---|---|---|---|
|
(47) E_Migachev, подскажите как сделать? |
Mokey |
|
||
---|---|---|---|
|
(50) Ermak, (46) Mokey, |
Ermak |
|
||
---|---|---|---|
|
(46) Mokey, выдает ошибку
{Документ.УМЦ_Результат.Форма.ФормаДокумента.Форма(41)}: Поле объекта не обнаружено (ТекущаяСтрока) |
Ermak |
|
||
---|---|---|---|
|
? |
Mokey |
|
||
---|---|---|---|
|
(53) Ermak, а Вы попробуйте дпилить кусочек кода под свои нужды, я же не вижу, что у Вас там на форме и как расположено! Дело 5-и минут на самом деле. |
Mokey |
|
||
---|---|---|---|
|
ЭлементыФормы.ИМЯ_ВАШЕЙ_ТЧ.ТекущаяСтрока.Описание = ВыбранныйЭлемент.Описание; |
Ermak |
|
||
---|---|---|---|
|
Спасибо большое получилось! |
Mokey |
|
||
---|---|---|---|
|
Регулируйте высоту строки табличной части |
Ermak |
|
||
---|---|---|---|
|
только вижу высоту таб. части, а где строки? |
Mokey |
|
||
---|---|---|---|
|
Да, со строками я погорячился, выдал желаемое за действительное. Как вариант, можно добавить в ТЧ формы ещё два столбца, расположить их друг под другом (новая колонка), выставить минимальную ширину, запретить менять ширину… ну и т.д. В итоге колонка Описания будет занимать уже две строчки)) |
Ermak |
|
||
---|---|---|---|
|
понял спасибо |
Ermak |
|
||
---|---|---|---|
|
Вопрос закрыт! |
Подсказка: Для редактирования своего ответа щелкните по значку |
В данной статье рассмотрены несколько способов программного открытия формы с установленным отбором.
У начинающих разработчиков достаточно часто возникает вопрос – как при открытии формы установить в ней отбор? Чаще всего речь идет о форме списка или форме выбора. Но в общем случае – описанные в статье механизмы можно применять к любым формам, в которых используется динамический список. Ниже – видео версия этой статьи, для тех кому больше нравится видео формат.
Итак, что же это за способы, и чем они отличаются?
Забегая вперед, скажу – с точки зрения пользователей, разные технические решения могут выглядеть и вести себя одинаково. И разница будет только в коде и используемых механизмах платформы. В разных случаях могут понадобиться разные варианты, поэтому ниже я привожу 6 самых распространенных.
Содержание
Использование параметризованной команды для указания отбора
Один из распространенных приемов – создать глобальную параметризуемую команду, и параметр этой команды передать в качестве отбора. В свойствах команды нужно указать тип параметра команды. Можно указать группу “Панель навигации формы”, тогда команда автоматически будет добавляться в командный интерфейс при открытии формы соответствующего объекта.
Текст команды будет следующий:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОтборПоКонтрагенту = Новый Структура("Контрагент", ПараметрКоманды);
ПараметрыФормы = Новый Структура("Отбор", ОтборПоКонтрагенту);
ОткрытьФорму("Документ.ПоступленияТоваров.ФормаСписка",
ПараметрыФормы,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно,
ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры
Ключевой момент здесь – правильно упаковать параметры. Нужно поместить параметр команды в структуру, где ключ структуры будет соответствовать одному из полей отбора динамического списка. В нашем случае – Контрагент. А значение – сам параметр.
И уже эту структуру поместить в структуру ПараметрыФормы (это стандартное название, которое платформа генерирует при добавлении команды, но вы можете использовать любое другое).
Трюк в том, что у формы с основным реквизитом – динамическим списком платформа добавляет параметр Отбор, и на основании содержимого этого параметра, при открытии формы накладывает отбор динамического списка. Поэтому никакого кода дополнительно писать не надо – платформа все сделает за нас.
Параметризуемая команда и передача параметра
Второй вариант – передать параметр команды не в свойство “Отбор”, а в качестве параметра формы. В этом случае платформа не сможет сгенерировать отбор автоматически, и придется добавить немного кода.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПараметрыФормы= Новый Структура("Контрагент", ПараметрКоманды);
ОткрытьФорму("Документ.ПоступленияТоваров.ФормаСписка",
ПараметрыФормы,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно,
ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список.Отбор.Элементы.Очистить();
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = Параметры.Контрагент;
КонецПроцедуры
Здесь нюанс в том, что не обязательно создавать параметр в открываемой форме в конфигураторе. Даже если мы его не добавим на закладке Параметры в редакторе формы, он все равно будет доступен, т.к. мы явным образом его передали в методе ОткрытьФорму.
Получение ссылки через параметры выполнения команды
Бывают ситуации, когда глобальная команда не имеет параметра. Но в некоторых случаях все равно можно получить ссылку. Для этого можно воспользоваться параметрами выполнения команды. Если команда размещена в форме элемента, мы сможем получить ссылку этого элемента через свойство ПараметрыВыполненияКоманды.Источник.Объект.Ссылка
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОтборПоКонтрагенту = Новый Структура("Контрагент", ПараметрыВыполненияКоманды.Источник.Объект.Ссылка);
ПараметрыФормы = Новый Структура("Отбор", ОтборПоКонтрагенту);
ОткрытьФорму("Документ.ПоступленияТоваров.ФормаСписка",
ПараметрыФормы,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно,
ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры
Открытие формы с отбором при помощи команды формы
Суть все та же – получаем ссылку, которую хотим использовать в качестве отбора, и передаем в открываемую форму. Как рассмотрено выше, можно поместить либо в отдельный параметр формы, либо в параметр Отбор.
&НаКлиенте
Процедура ВыбратьДокумент(Команда)
ПараметрыФормы = Новый Структура("Контрагент", Объект.Ссылка);
ОткрытьФорму("Документ.ПоступленияТоваров.Форма.ФормаВыбораПоКнопке", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
Следует понимать, что мы можем передать в свойство “Отбор” структуру с несколькими ключами, на пример, мы хотим отфильтровать документы не только по контрагенту, но и по организации. И важно учитывать, что платформа стыкует передаваемые параметры и поля отбора по именам ключей. Если переданные ключи не будут соответствовать доступным полям отбора, то автоматически платформа фильтр наложить не сможет.
И еще один момент, о котором стоит упомянуть. Нам никто не запрещает передать больше одного параметра при открытии формы. Например, мы хотим отфильтровать документы по контрагенту и по организации, или реализовать какие-то более сложные фильтры.
Отбор при помощи связи параметров выбора
Кроме использования команд, есть и другие способы открыть форму с установленным отбором. Рассмотрим абстрактный пример. В форме контрагента у нас есть реквизит с типом Документ.ПоступлениеТоваров. И мы хотим при подборе документа в это поле, чтобы фильтровались только документы нужного контрагента.
В свойствах элемента управления (либо в свойствах реквизита объекта, если мы хотим это сделать для всех форм, где доступен этот реквизит) находим СвязиПараметровВыбора, и настраиваем для отбора по текущей ссылке:
Суть работы этого механизма – точно такая же как с использованием параметризованной команды: мы в свойство Отбор.Контрагент помещаем нужную ссылку. Только в одном случае мы это делали через передачу структуры параметров, а в другом – с помощью настроек в конфигураторе.
Отбор при помощи программной установки параметров выбора
Ну и последний способ, которым можно воспользоваться – он более редкий, и его применяют не так часто. Речь пойдет о свойстве ПараметрыВыбора. Это свойство по своему использованию близко к СвязиПараметровВыбора, но цель у него другая. Связи параметров позволяют использовать данные текущей формы – например, текущую ссылку, или какой-то другой реквизит, который в разных формах будет иметь разные значения.
А вот параметры выбора изначально задаются в конфигураторе некоторыми фиксированными значениями. Например, значением предопределенных элементов справочника, значениями перечислений, и т.д. То есть, подразумевается, что они всегда будут одни и те же. Но, разумеется, мы можем их переопределить программно.
Делать это можно в обработчике НачалоВыбора. Например, так:
&НаКлиенте
Процедура ОсновнойДокумент2НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
НовыйПараметр = Новый ПараметрВыбора("Отбор.Контрагент", Объект.Ссылка);
НовыйМассив = Новый Массив();
НовыйМассив.Добавить(НовыйПараметр);
НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
Элементы.ОсновнойДокумент2.ПараметрыВыбора = НовыеПараметры;
КонецПроцедуры
Обратите внимание, что нам необходимо упаковать ссылку в фиксированный массив, и уже этот фиксированный массив присвоить свойству ПараметрыВыбора. В результате этих манипуляций, при открытии формы выбора точно также будет наложен нужный отбор.
Итак, мы рассмотрели шесть вариантов открытия формы с отбором в 1С 8. Какие-то проще, какие-то сложнее, но все находят свое применение. Пользуйтесь теми, какие удобнее!
Для открытия формы выбора (справочника, документа и т.п.) необходимо воспользоваться параметрами открываемой формы.
Обязательным условием является наличие в открываемой форме динамического списка, который назначен основным реквизитом формы. В качестве полей отбора можно воспользоваться любым полем, настроенным в динамическом списке.
Давайте рассмотрим работу механизма на примере: в документе «Поступление товаров» при выборе контрагента необходимо выбирать только поставщиков (отбор будем производить по реквизиту Поставщик типа Булево справочника «Контрагенты»).
Для начала, проверим наличие поля отбора «Поставщик» в настройках отбора динамического списка. Для этого откроем форму выбора справочника «Контрагенты» и перейдем к настройкам динамического списка:
Мы видим, что поле Поставщик есть среди полей отбора. Значит, наш отбор работать будет (на самом деле, мы можем добавить дополнительные поля в динамический список и использовать их для отбора):
Теперь нам осталось написать только код процедуры, который будет вызывать форму выбора:
ПараметрыОтбора = Новый Структура("Поставщик", Истина); ПараметрыФормы = Новый Структура("Отбор", ПараметрыОтбора); ОткрытьФорму("Справочник.Контрагенты.ФормаВыбора", ПараметрыФормы);
Как видите, ничего сложного нет: мы создаем структуру, имитирующую отбор (ключ структуры — имя поля отбора, а значение — значение отбора), и включаем его в параметры открываемой формы.
Читайте также:
- Функция ОткрытьФорму()
- Как открыть форму отчета с отбором?
Поделиться страницей в соц.сетях
в форме выбора справочника отбор по реквизиту документа из которого он выбирается |
Я |
28.07.20 — 12:22
Здравствуйте. Как сделать в форме выбора справочника отбор по реквизиту документа из которого он выбирается?
1 — 28.07.20 — 12:24
2 — 28.07.20 — 15:32
&НаКлиенте
Процедура ТранспортноеСредствоНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
Отборы = Новый Структура;
Отборы.Вставить(«Контрагент», Объект.Контрагент);
//Отборы.Вставить(«Контрагент», Объект.Контрагент);
ПараметрыФормы.Вставить(«Отбор», Отборы);
ОткрытьФорму(«Справочник.ТранспортныеСредства.ФормаВыбора»,ПараметрыФормы,);
КонецПроцедуры
Отбор работает, но выбрать не могу ни одно из значений. Что не правильно?
3 — 28.07.20 — 16:06
(2) форме нужно сказать что она открыта для выбора + ловить событие в обработкаВыбора
4 — 28.07.20 — 16:16
5 — 28.07.20 — 17:18
(3) (4)
СтандартнаяОбработка = Ложь;
ПараметрыФормы = Новый Структура;
Отборы = Новый Структура;
Отборы.Вставить(«Контрагент», Объект.Контрагент);
ПараметрыФормы.Вставить(«Отбор», Отборы);
ПараметрыФормы.Вставить(«РежимВыбора», Истина);
ПараметрыФормы.Вставить(«ЗакрыватьПриВыборе», Истина);
ОткрытьФорму(«Справочник.ТранспортныеСредства.ФормаВыбора»,ПараметрыФормы,ЭтаФорма);
(3) ловить событие в обработкаВыбора — а что там конкретно ловить? РежимВыбора стоит истина
6 — 28.07.20 — 17:26
(5) И что не получается? Отбор не устанавливается?
7 — 28.07.20 — 17:36
(6) отбор устанавливается. С этим все хорошо. Но когда я пытаюсь «выбрать» (двойной щелчок мыши или кнопка выбрать) оно не выбирается. Это значение не подставляется в документ, остается старое.
8 — 28.07.20 — 17:40
(7) Пушо в открытие формы надо владельца передавать
9 — 28.07.20 — 17:50
(8) точно! спасибо! заработало!
10 — 28.07.20 — 21:56
отбор работает в форме выбора, а если начать вводить наименование справочника сразу в поле выбора, не открывая форму выбора, то понятно дает выбрать минуя отбор. Как это можно обойти?
11 — 29.07.20 — 06:52
используй параметры выбора, а не этот колхоз
12 — 29.07.20 — 06:52
НовыйМассив = Новый Массив();
НовыйМассив.Добавить(ПлынСчетов.Хозрасчетный.НайтиПоКоду(«10.08»));
НовыйМассив.Добавить(ПлынСчетов.Хозрасчетный.НайтиПоКоду(«10.09»));
НовыеЗначения = Новый ФиксированныйМассив(НовыйМассив);
НовыйПараметр = Новый ПараметрВыбора(«Отбор.Ссылка», НовыеЗначения);
НовыйМассив = Новый Массив();
НовыйМассив.Добавить(НовыйПараметр);
НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
Элементы.СчетУчета.ПараметрыВыбора = НовыеПараметры;
13 — 29.07.20 — 06:55
Вместо НовыйПараметр = Новый ПараметрВыбора(«Отбор.Ссылка», НовыеЗначения);
надо
НовыйПараметр = Новый ПараметрВыбора(«Отбор.НужныйРеквизит», Объект.НужныйРеквизит);
14 — 29.07.20 — 08:44
(11) так не работает
НовыйПараметр = Новый ПараметрВыбора(«Контрагент», Объект.Контрагент);
НовыйМассив = Новый Массив();
НовыйМассив.Добавить(НовыйПараметр);
НовыеПараметры = Новый ФиксированныйМассив(НовыйМассив);
Элементы.ТранспортноеСредство.ПараметрыВыбора = НовыеПараметры;
15 — 29.07.20 — 08:49
НовыйПараметр = Новый ПараметрВыбора(«Контрагент», Объект.Контрагент);
«Отбор.Контрагент» не?
16 — 29.07.20 — 08:50
или из (13) «отбор.Ссылка»
17 — 29.07.20 — 08:51
открой параметры выбора в свойствах элемента формы и посмотри доступные поля и как они заносятся в параметры
Uzyf
18 — 29.07.20 — 08:53
Форма выбора открывается при нажатии на кнопку выбора у элемента формы. Если требуется наложить отборы на выбираемые значения или открыть другую форму, то необходимо использовать событие элемента формы НачалоВыбора.
Процедура для обычного приложения
Процедура СобытиеНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка
= Ложь; ФормаВыбора
= Документы.Документ1.ПолучитьФормуВыбора(, Элемент);
ФормаВыбора.Отбор.Реквизит1.ВидСравнения = ВидСравнения.Равно;
ФормаВыбора.Отбор.Реквизит1.Значение = "Значение";
ФормаВыбора.Отбор.Реквизит1.Использование = Истина;//Чтобы этот отбор был доступен для изменения
ФормаВыбора.ЭлементыФормы.ДокументСписок.НастройкаОтбора.Реквизит1.Доступность = Истина; ФормаВыбора
.Открыть();КонецПроцедуры
Процедуры для управляемого приложения
Настройка отборов с использованием объекта НастройкиКомпоновкиДанных. Есть возможность задать вид сравнения, доступность элементов отбора для редактирования и т.д.
&НаКлиенте
Процедура СобытиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка
= Ложь; Настройки
= Новый НастройкиКомпоновкиДанных; Элемент
= Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.Использование = Истина;
Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Реквизит1");
Элемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Элемент.ПравоеЗначение = "Значение";
Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный; ПараметрыФормы
= Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", Настройки); ОткрытьФорму
("Документ.Документ1.ФормаВыбора", ПараметрыФормы, Элементы.Реквизит1);КонецПроцедуры
Настройка отборов с использованием структуры. Это более простой вариант открытия формы выбора с установленными отборами. В этом варианте некоторые настройки недоступны.
&НаКлиенте
Процедура СобытиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка
= Ложь; ПараметрыФормы
= Новый Структура; Отборы
= Новый Структура;
Отборы.Вставить("Реквизит1", "Значение");
Отборы.Вставить("Реквизит2", "Значение");
Отборы.Вставить("Реквизит3", "Значение"); ПараметрыФормы
.Вставить("Отбор", Отборы); ОткрытьФорму
("Документ.Документ1.ФормаВыбора", ПараметрыФормы, Элементы.Реквизит1);КонецПроцедуры
&НаКлиенте
Процедура КонтрагентНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)СтандартнаяОбработка = Ложь;НастройкКД = Новый НастройкиКомпоновкиДанных;Отбор = НастройкКД.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Ссылка»);
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
Отбор.ПравоеЗначение = ПолучитьСписокЗначенийНаСервере(Элементы.ИмяТаблЧасти.ТекущиеДанные.Реквизит1);
Отбор.Использование = Истина;
Отбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;ПарФормы = Новый Структура;
ПарФормы.Вставить(«ФиксированныеНастройки», НастройкКД);ОткрытьФорму(«Справочник.Контрагенты.ФормаВыбора», ПарФормы, Элемент);
КонецПроцедуры
&НаСервере
Функция ПолучитьСписокЗначенийНаСервере(РеквизитТЧ)// Пишем нужный запрос с отбором по реквизиту табличной части
СписокОтбора = Новый СписокЗначений;Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
| Страны.Ссылка
|ИЗ
| Справочник.Страны КАК Страны
|ГДЕ
| Страны.ЧастьСвета = &Европа»;
Запрос.УстановитьПараметр(«Европа», РеквизитТЧ);Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СписокОтбора.Добавить(Выборка.Ссылка);
КонецЦикла;
Возврат
СписокОтбора;
КонецФункции