Обработка выбора управляемая форма

Как открыть форму списка с некоторым отбором?

Есть несколько способов для того, чтобы открыть форму списка с некоторым, заранее установленным отбором. Рассмотрим их по-порядку:

1. Первый способ заключается в том, что при открытии формы можно задать параметр формы Отбор, и открыть форму списка с этим параметром. Параметр Отбор представляет собой структуру. Имена элементов соответствуют именам полей, по которым производится отбор, а значения содержат значения отбора. Это параметр расширения управляемой формы динамического списка. То есть он существует у форм, основным реквизитом которых является реквизит типа Динамический Список, например у форм списка и форм выбора.

В процессе открытия формы будет установлен отбор по указанному полю. Например, в следующем примере открывается список приходных накладных с отбором по полю Номер, равному 333.

Копировать в буфер обмена

ЗначениеОтбора = Новый Структура("Номер", "333");
ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);

ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаСписка",ПараметрыВыбора);

2. Можно открыть форму списка без параметров:

Копировать в буфер обмена

ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаСписка");

И затем, в обработчике события формы списка приходных накладных ПриСозданииНаСервере написать код, который создает отбор в динамическом списке, являющемся основным реквизитом формы:

Копировать в буфер обмена

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

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

Преимущества данного метода в том, что ВидСравнения у отбора можно задавать не только Равно, как в первом случае, а и Больше, Меньше и т.п.

Но у такого способа есть и очень существенный недостаток: с этим отбором форма будет открываться всегда. Откуда бы ее ни вызвали. Поэтому такую форму не следует назначать основной. А если все же она основная —  то перед установкой отбора, необходимо предусмотреть какой-то анализ того, откуда открывается эта форма.

Открыть форму выбора с отбором

Например, анализируя параметры формы. 

3. И наконец, условие отбора можно поместить в произвольный запрос, выбирающий данные для динамического списка. Например, нам нужно открыть список приходных накладных, в которых присутствует номенклатура, выделенная в списке номенклатуры.

Для этого в форме списка номенклатуры создадим команду и соответствующую ей кнопку Приходные накладные.

 

Обработчик выполнения этой команды заполним следующим образом:

Копировать в буфер обмена

&НаКлиенте
Процедура ПриходныеНакладные(Команда)

   ФормаСписка = ПолучитьФорму("Документ.ПриходнаяНакладная.ФормаСписка");
   ФормаСписка.ФильтрПоТовару = Элементы.Список.ТекущаяСтрока;
   ФормаСписка.Открыть();

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

В этом обработчике мы получаем форму списка приходных накладных и передаем в параметр формы ФильтрПоТовару ссылку на текущий элемент в списке номенклатуры и открываем форму с этим параметром.

Затем создадим форму списка документов ПриходнаяНакладная и создадим реквизит формы ФильтрПоТовару, который мы будем использовать в качестве параметра формы при ее открытии. Теперь откроем палитру свойств основного реквизита формы Список. Установим флаг ПроизвольныйЗапрос и в строке Настройка списка нажмем Открыть.

 

В поле Запрос введем следующий текст запроса: 

Копировать в буфер обменаВЫБРАТЬ
    ДокументПриходнаяНакладная.Номер,
    ДокументПриходнаяНакладная.Дата
ИЗ
    Документ.ПриходнаяНакладная КАК ДокументПриходнаяНакладная
ГДЕ
    ДокументПриходнаяНакладная.Товары.Товар = &Товар

В запросе мы используем параметр Товар, в который и будет передаваться ссылка на текущую строку в списке номенклатуры, содержащуюся в параметре формы списка приходных накладных ФильтрПоТовару. Для этого в обработчике события формы списка ПриОткрытии напишем код для установки значения параметра запроса Товар:

Копировать в буфер обмена

&НаКлиенте
Процедура ПриОткрытии(Отказ)

   Список.Параметры.УстановитьЗначениеПараметра("Товар", ФильтрПоТовару);

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

Здесь Список.Параметры — это список параметров запроса динамического списка для реквизита Список. Значение параметра Товар устанавливается равным значению параметра формы ФильтрПоТовару.

В результате по нажатию кнопки Приходные накладные в форме списка номенклатуры мы будем получать список только тех приходных накладных, в которых присутствует номенклатура, выделенная в данный момент в списке номенклатуры.

Демонстрационный пример для 3-го варианта находится в каталоге 1CITS/EXE/FAQ/ОткрытьФормуСОтбором.dt. Пример выполнен на версии платформы 8.2.9.356.

Скачать демонстрационный пример

1С 8.3 : Как открыть форму списка документов с отбором?

Не происходит обработка выбора, Управляемые формы

Я
MixaBel Ситуация такая:

//Вызываю из формы обработку:
&НаКлиенте
Процедура НО_РД_НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка, РД)     ПараметрыФормы = Новый Структура;     ПараметрыФормы.Вставить("ОбъектПоискаПереданный", "РД");        &nbsp//…..еще параметры     ОткрытьФорму("Обработка.УниверсальныеПодборИОбработкаОбъектов1.Форма.ПодборИОбработка", ПараметрыФормы); КонецПроцедуры //Обработка отрабатывает и закрывается после "ОповеститьОВыборе": &НаКлиенте Процедура НайденныеОбъектыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)    &nbsp//……Код     ОповеститьОВыборе(НайденныеОбъекты.Объект);    &nbsp//……Код КонецПроцедуры //В основной форме не происходит события "ОбработкаВыбора":
&НаКлиенте Процедура НО_РД_ОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)    &nbsp//точка останова ниже этой строки     СтандартнаяОбработка = Ложь;    &nbsp//и ниже этой     НО_РД_ОбработкаВыбораСервер(Элемент, ВыбранноеЗначение, СтандартнаяОбработка);     КонецПроцедуры П.С.    -ОбработкаВыбора должна запускаться автоматически после ОповеститьОВыборе?     -Если до точек останова не доходит, значит ОбработкаВыбора не происходит?     -В форме в таблице значений функции привязаны к определенным событиям в свойствах поля     -В чем может быть проблема? 
     MixaBel При указании владельца открываемой формы результат не меняется
Code+ ОткрытьФорму("Обработка.УниверсальныеПодборИОбработкаОбъектов1.Форма.ПодборИОбработка", ПараметрыФормы, ЭтаФорма); Посоветуйте хоть куда смотреть.    MixaBel Решено, срабатывал обработчик ОбработкаВыбора формы.

надо было передавать как владельца Элемент а не ЭтаФорма.

//код ОткрытьФорму("Обработка.УниверсальныеПодборИОбработкаОбъектов1.Форма.ПодборИОбработка", ПараметрыФормы, Элемент);

 

Наведи порядок в своей работе используя конфигурацию 1C "Управление IT-отделом 8"

ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.

Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.

Как открыть форму выбора с определенным отбором в 1C 8.2 и в 1С 8.3 ?

Форма выбора открывается при нажатии на кнопку выбора у элемента формы. Если требуется наложить отборы на выбираемые значения или открыть другую форму, то необходимо использовать событие элемента формы НачалоВыбора.

УФ: Открыть форму с отбором

Процедура для обычного приложения

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

СтандартнаяОбработка =Ложь;

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

//Чтобы этот отбор был доступен для изменения
ФормаВыбора.ЭлементыФормы.ДокументСписок.НастройкаОтбора.Реквизит1.Доступность =Истина;

ФормаВыбора.Открыть();

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

Процедуры для управляемого приложения

Настройка отборов с использованием объекта НастройкиКомпоновкиДанных. Есть возможность задать вид сравнения, доступность элементов отбора для редактирования и т.д.

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

СтандартнаяОбработка =Ложь;

Настройки =Новый НастройкиКомпоновкиДанных;

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

ПараметрыФормы =Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", Настройки);

ОткрытьФорму("Документ.Документ1.ФормаВыбора", ПараметрыФормы, Элементы.Реквизит1);

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

Настройка отборов с использованием структуры. Это более простой вариант открытия формы выбора с установленными отборами. В этом варианте некоторые настройки недоступны.

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

СтандартнаяОбработка =Ложь;

ПараметрыФормы =Новый Структура;

Отборы =Новый Структура;
Отборы.Вставить("Реквизит1","Значение");
Отборы.Вставить("Реквизит2","Значение");
Отборы.Вставить("Реквизит3","Значение");

ПараметрыФормы.Вставить("Отбор", Отборы);

ОткрытьФорму("Документ.Документ1.ФормаВыбора", ПараметрыФормы, Элементы.Реквизит1);

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