Продолжение статьи коллеги starik-2005.
Статья будет состоять из нескольких приведенных примеров кода с описанием того, как прибегнуть к Подбору.
Пример 1.
Простой вызов формы выбора с одним возвращаемым результатом:
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура("РежимВыбора",Истина);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) ///Событие формы
РезультатСсылка = ВыбранноеЗначение; ///Выбранное значение, вернет ссылку (документа в нашем примере)
КонецПроцедуры
Пример 2.
Выбор нескольких значений (документов или справочников) :
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",ложь);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
МассивСсылок = ВыбранноеЗначение; ///Вернётся массив с выбранными значениями (Даже если значение только одно )
КонецПроцедуры
В первых 2-х примерах мы использовали обработчик (Событие) формы "ОбработкаВыбора".
Теперь рассмотрим пример с использованием "Обработки оповещения", на мой взгляд более удобно )
Пример 3.
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина); ///Если хотим несколько значений
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"ПодборРеализации");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,
ЭтаФорма, , , , ОбработкаВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) Экспорт
//Дополнительные условия если необходимо
//Если ДопПараметры = "ПодборРеализации" тогда
Если Значение = Неопределено Тогда ///Если ничего не выбрать - вернется пустое значение (Неопределено)
Возврат;
КонецЕсли;
МассивДокументов = Значение ///Если Множественный Выбор - то вернется массив
//КонецЕсли;
КонецПроцедуры
Пример 4.
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина); ///Если хотим несколько значений
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"ПодборРеализации");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,
ЭтаФорма, , , , ОбработкаВыбора);
КонецПроцедуры
&НаСервере
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) Экспорт
Если Значение = Неопределено Тогда ///Если ничего не выбрать - вернется пустое значение (Неопределено)
Возврат;
КонецЕсли;
МассивДокументов = Значение ///Если Множественный Выбор - то вернется массив
КонецПроцедуры
Мы видим что открывается форма выбора (из списка документов "Реализация товаров и услуг"), но иногда необходимо добавить некий отбор, чтобы при открытии формы не выводить все документы в целом.
Допустим мы хотим выбрать из списка документы только с товаром, для этого установим отбор по "Виду операции". Вид операции - это поле(реквизит) динамического списка, и отбор можно установить по всем доступным полям.
Пример 5.
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
///Создаем структуру с отбором и добавляем значения
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ВидОперации", ПредопределенноеЗначение("Перечисление.ВидыОперацийРеализацияТоваров.Товары"));
//ПараметрыОтбора.Вставить("Дата", ТекущаяДата()); ///Дополнительный отбор
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора); ///Добавляем отбор в параметры формы
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина);
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,
ЭтаФорма, , , , ОбработкаВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) Экспорт
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
МассивДокументов = Значение;
КонецПроцедуры
Есть моменты когда не всегда можно обойтись простым отбором, например необходимо открыть форму выбора со списком за определенный период.
Для этого передаем вместо Отбора -Фиксированные настройки в форму выбора.
Пример 6.
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
НастройкиКомпоновки = Новый НастройкиКомпоновкиДанных;
///Если хотим несколько условий
ГруппаОтбора = НастройкиКомпоновки.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВидОперации");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ПредопределенноеЗначение("Перечисление.ВидыОперацийРеализацияТоваров.Товары");
ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.больше;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = НачалоГода(ТекущаяДата());
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ФиксированныеНастройки", НастройкиКомпоновки);
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Истина);
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтаФорма,"Подбор");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,
ЭтаФорма, , , , ОбработкаВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) Экспорт
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
МассивДокументов = Значение
КонецПроцедуры
Пример 7.
Как открыть форму выбора с Позиционированием ранее выбранного значения:
&НаКлиенте
Процедура КомандаОткрытьФормуВыбора(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ПараметрыФормы.Вставить("МножественныйВыбор",Ложь);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",ложь);
Если РанееВыбранныйДокумент <> Неопределено Тогда ///Реквизит формы, ранее выбранное значение из открываемой формы
//ПараметрыФормы.Вставить("УстановитьПараметрыФункциональныхОпцийФормы",Новый Структура("ТекущаяСтрока",РанееВыбранныйДокумент)); /// Можно и так
ПараметрыВыбора.Вставить("ТекущаяСтрока", РанееВыбранныйДокумент); /// Подсказка от подписчика: user1502278
КонецЕсли;
ОбработкаВыбора = Новый ОписаниеОповещения("ПриЗакрытииФормыВыбора", ЭтотОбъект,"Подбор");
ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаВыбора",ПараметрыФормы,
ЭтаФорма, , , , ОбработкаВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытииФормыВыбора(Значение, ДопПараметры) экспорт
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
МассивДокументов = Значение
КонецПроцедуры
Тестировалось на 1С:Предприятие 8.3 (8.3.16.1063) и 1С:Предприятие 8.3 (8.3.13.1644), Спасибо за внимание, возможно, кому-то поможет)