Реализация подбора является часто встречающейся задачей, и в управляемых формах она реализуется несколько иначе, чем в формах обычных. И на самом деле есть несколько способов реализовать подбор. Сегодня я расскажу об одном из них.
Допустим у нас есть некий справочник, элементы которого мы будем подбирать, и некая форма с кнопкой «Подобрать» и таблицей значений, в которую попадает результат подбора.
Сначала реализуем обработчик нажатия кнопки «Подобрать», которая открывает окно подбора (это может быть обычная форма выбора):
1 2 3 4 5 | &НаКлиенте Процедура ДобавитьНабор(Команда) ПараметрыПодбора = Новый Структура("ЗакрыватьПриВыборе, МножественныйВыбор", Ложь, Истина); ОткрытьФорму("Справочник.НаборыЧертежей.ФормаВыбора", ПараметрыПодбора, Элементы.ИтоговаяТаблица); КонецПроцедуры |
Параметр «МножественныйВыбор» устанавливайте на свое усмотрение. Параметр «Владелец» в процедуре «ОткрытьФорму» (третий по счету) назначается исходя из цели подбора (у меня цель добавить подобранные элементы в таблицу значений «ИтоговаяТаблица»).
Затем нам остается лишь реализовать событие «ОбработкаВыбора», это событие того элемента, который был указан как владелец формы подбора (у меня это элемент «ИтоговаяТаблица»):
1 2 3 4 5 6 | &НаКлиенте Процедура ИтоговаяТаблицаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ИтоговаяТаблицаОбработкаВыбораНаСервере(ВыбранноеЗначение); КонецПроцедуры |
В принципе, на этом все, дальше можно делать с параметром «ВыбранноеЗначение» (в котором хранится результат подбора) все, что требуется. Например я передаю его в процедуру, которая проверяет не добавлен ли уже такой элемент в таблицу, и если нет, то добавляет его:
1 2 3 4 5 6 7 8 9 10 | &НаСервере Процедура ИтоговаяТаблицаОбработкаВыбораНаСервере(ВыбранноеЗначение) Для Каждого вЗнч Из ВыбранноеЗначение Цикл Если ИтоговаяТаблица.НайтиСтроки(Новый Структура("Чертеж", вЗнч)).Количество() = 0 Тогда нСтр = ИтоговаяТаблица.Добавить(); нСтр.Чертеж = вЗнч.Чертеж; нСтр.Предмет = вЗнч.ПроизводимыйПродукт; КонецЕсли; КонецЦикла; КонецПроцедуры |
На этом все, спасибо за внимание, надеюсь данная статья Вам помогла.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Отличная статья. Именно она мне и помогла
Супер! Коротко и по делу!
Спасибо,полезно
Да, работатет, спасибо!
Спасибо! Почти работает, только надо добавить еще один параметр РежимВыбора=истина
А Я сделал все НаКлиенте ! «Объект.ИтоговаяТаблица.НайтиСтроки(..)» — работает! Спасибо за статью!
спасибо
Автору большое человеческое спасибо!
Реализация последней процедуры на сервере абсолютно не нужна. Все данные уже есть на клиенте — и выбранные значения, и реквизиты формы, куда их надо поместить.