Каталог решений - Форма выбора (подбор) в управляемых формах

Форма выбора (подбор) в управляемых формах

Форма выбора (подбор) в управляемых формах

В наличии

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

Категория:

Описание

Продолжение статьи нашего друга starik-2005

Статья будет состоять из нескольких приведенных примеров кода с описанием того, как прибегнуть к Подбору.

Пример 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), Спасибо за внимание, возможно, кому-то поможет)

has been added to your cart:
Оформление заказа