Форма выбора (подбор) в управляемых формах
Статья будет состоять из нескольких приведенных примеров кода с описанием того, как прибегнуть к Подбору.
Пример 1.
Простой вызов формы выбора с одним возвращаемым результатом:
Пример 2.
Выбор нескольких значений (документов или справочников) :
В первых 2-х примерах мы использовали обработчик (Событие) формы «ОбработкаВыбора».
Теперь рассмотрим пример с использованием «Обработки оповещения», на мой взгляд более удобно )
Пример 3.
Думаю многие не знают про фишку Оповещением «на Сервере». То есть результат можно вернуть сразу на сервер без дополнительных условий. Работает до 8.3.13.1644, с 8.3.16.1063 этот метод недоступен.
Пример 4.
Мы видим что открывается форма выбора (из списка документов «Реализация товаров и услуг»), но иногда необходимо добавить некий отбор, чтобы при открытии формы не выводить все документы в целом.
Пример 5.
Есть моменты когда не всегда можно обойтись простым отбором, например необходимо открыть форму выбора со списком за определенный период.
Пример 6.
Пример 7.
Как открыть форму выбора с Позиционированием ранее выбранного значения:
Тестировалось на 1С:Предприятие 8.3 (8.3.16.1063) и 1С:Предприятие 8.3 (8.3.13.1644), Спасибо за внимание, возможно, кому-то поможет)
Для того чтобы открыть форму выбора с отбором в 1с 8.2 (обычные формы), нам нужно выполнить некоторые действия. Сначала мы ее получим. После этого выставим отбор и программно откроем, вот пример кода:
Отбор на форме в поле ввода 1С 8.2 с несколькими значениями
В примере выше мы рассмотрели как устанавливать отбор на форме выбора по конкретному значению. Теперь давайте рассмотрим ситуацию когда нужно подставить несколько значений, это может быть например как массив, так и выгрузка из результата запроса. Это отбор в поле ввода 1с с несколькими значениями.
Для начала получаем форму выбора, в параметрах передаем «Элемент» (владельца), устанавливаем флаг режима выбора. Потом создаем список значений и массив, отмечаем что в качестве отбора когда устанавливается вид сравнения в списке, может присутствовать объект только с типом СписокЗначений. Добавляем элементы в массив, затем этот массив загружаем в СписокЗначений который в следствии мы устанавливаем в отборе. Также не забываем включить флаг использования данного отбора, и установить ВидСравнения.
Установка отбора в поле ввода на форме в 1С 8.3, событие НачалоВыбора
Как альтернатива можно воспользоваться вариантом как описано открытие формы выбора с отбором для 1С 8.2, конечно код возможно чуть-чуть придется модифицировать, но суть остается та же.
У нас вы можете заказать услуги сопровождения 1с баз данных, а также любые доработки для 1с.
Как открыть форму списка с некоторым отбором?
Есть несколько способов для того, чтобы открыть форму списка с некоторым, заранее установленным отбором. Рассмотрим их по-порядку:
ЗначениеОтбора = Новый Структура(«Номер», «333»);
ПараметрыВыбора = Новый Структура(«Отбор», ЗначениеОтбора);
2. Можно открыть форму списка без параметров:
И затем, в обработчике события формы списка приходных накладных ПриСозданииНаСервере написать код, который создает отбор в динамическом списке, являющемся основным реквизитом формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Номер»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = «000000001»;
3. И наконец, условие отбора можно поместить в произвольный запрос, выбирающий данные для динамического списка. Например, нам нужно открыть список приходных накладных, в которых присутствует номенклатура, выделенная в списке номенклатуры.
Обработчик выполнения этой команды заполним следующим образом:
ФормаСписка = ПолучитьФорму(«Документ.ПриходнаяНакладная.ФормаСписка»);
ФормаСписка.ФильтрПоТовару = Элементы.Список.ТекущаяСтрока;
ФормаСписка.Открыть();
В этом обработчике мы получаем форму списка приходных накладных и передаем в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры и открываем форму с этим параметром.
В поле Запрос введем следующий текст запроса:
В результате по нажатию кнопки Приходные накладные в форме списка номенклатуры мы будем получать список только тех приходных накладных, в которых присутствует номенклатура, выделенная в данный момент в списке номенклатуры.
Демонстрационный пример для 3-го варианта находится в каталоге 1CITS/EXE/FAQ/ОткрытьФормуСОтбором.dt. Пример выполнен на версии платформы 8.2.9.356.
Как программно открыть форму выбора с отбором?
Для открытия формы выбора (справочника, документа и т.п.) необходимо воспользоваться параметрами открываемой формы.
Обязательным условием является наличие в открываемой форме динамического списка, который назначен основным реквизитом формы. В качестве полей отбора можно воспользоваться любым полем, настроенным в динамическом списке.
Давайте рассмотрим работу механизма на примере: в документе «Поступление товаров» при выборе контрагента необходимо выбирать только поставщиков (отбор будем производить по реквизиту Поставщик типа Булево справочника «Контрагенты»).
Для начала, проверим наличие поля отбора «Поставщик» в настройках отбора динамического списка. Для этого откроем форму выбора справочника «Контрагенты» и перейдем к настройкам динамического списка:
Мы видим, что поле Поставщик есть среди полей отбора. Значит, наш отбор работать будет (на самом деле, мы можем добавить дополнительные поля в динамический список и использовать их для отбора):
Теперь нам осталось написать только код процедуры, который будет вызывать форму выбора:
Как видите, ничего сложного нет: мы создаем структуру, имитирующую отбор (ключ структуры — имя поля отбора, а значение — значение отбора), и включаем его в параметры открываемой формы.
Отбор в форме выбора справочника
без телепатических вопросов задача не решабельна
зачем запрос, если отбор можно передать в форму выбора параметрами?
зачем запрос, если отбор можно установить методами общих модулей?
зачем вообще запрос и каково его назначение?
о чем вообще речь, где мы?
(3)Забыла код как я пытаюсь решить эту задачу
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| ЕдиницыИзмерения.Владелец.Ссылка КАК ВладелецСсылка,
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
| ПО ЕдиницыИзмерения.Владелец.Ссылка = Номенклатура.Ссылка»;
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Владелец»);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ПравоеЗначение = Выборка.Ссылка;
КонецЕсли;
КонецПроцедуры
это модуль формы выбора справочника
уже полсуток идет решение задачи, а ни одного ответа так и не получено.
И начинающий и опытный спец свою тему начинает с неявного ответа на вопрос «где мы?»
Вот как должен был звучать ваш вопрос
// в принципе приветствие не обязательно, только для приверед которые сидят с кислой миной
Добрый день.
Платформа: 8.3.хх.хххх, Конфигурация: УТ 11.х.ххх
Помогите пожалуйста составить корректный запрос настроить отбор по владельцу в форме выбора.
Владелец: элемент справочника номенклатура. Подчененный справочник: ЕдиницыИзмерения
Форма выбора типовая: «ИмяТиповойФормы» или форма выбора моя.
На скрине пример результата отбора
Код установки отбора прилагаю. Этот код выполняется при
. (указать когда срабатывает: при выборе владельца, при активизации строки в списке номеклатуры и т.п.)
тоько по скрину из (12) стало ясно где мы и понятно, что вы почему-то пытаетесь настроить отбор даже не в форме выбора и даже не в подчиненном справочнике, а во владельце.
Я тоже так делал когда-то) Нужно просто подумать, и никого не слушать.