Очень часто, в универсальных обработках приходится делать отборы довольно c внушительным списком (будь то групповая обработка справочников и документов или универсальная выгрузка загрузка данных XML), что довольно утомительно.
Благодаря небольшой доработке можно упростить эту процедуру (если вы конечно мало-мальски владеете запросами) и не писать кучу маленьких обработок для каждого конкретного случая. Идею почерпнул из обработки регистрации изменений для обмена.
Как это работает?
Например: в групповой обработке справочников и документов нам необходимо обработать только тех контрагентов, по которым были продажи за последний месяц.
В отборе устанавливается отбор по интересующему вас полю, делаете его активным (пометив эту строку) и нажимается кнопка «Получить запросом». Открывается окно куда можно конструктором или вручную написать текст запроса к регистру продаж, использововав, если необходимо, параметры. Выполнив запрос, по нажатию кнопки «Ок» отобранные элементы попадают в отбор. В запросе можеть быть сколько угодно полей, главное чтоб присутсвовало поле с наименованием по которому собственно и делается отбор.
Как это сделать? (на примере всё той же групповой обработки справочников и документов)
В форме, в командной панели для отбора создаем кнопку, в тексте обработчика которой пишется лишь одна строка:
ПолучитьЗапросом(ЭлементыФормы.ТабличноеПолеОтбор);
Так же в модуле формы размещаем и саму процедуру, которую вызываем:
Процедура ПолучитьЗапросом(ЭлементФормыОтбор)
Если ЭлементФормыОтбор.ТекущаяСтрока = Неопределено Или Не ЗначениеЗаполнено(ЭлементФормыОтбор.ТекущаяСтрока.Представление) Тогда
Сообщить("Выделите строку нужного отбора!");
Возврат;
КонецЕсли;
// открываем форму выбора данных из запроса
ФормаЗапроса = ПолучитьФорму("ит_ФормаРезультатаЗапроса");
ФормаЗапроса.Представление = ЭлементФормыОтбор.ТекущаяСтрока.Представление;
РезультатОткрытияМодально = ФормаЗапроса.ОткрытьМодально();
Если НЕ (РезультатОткрытияМодально = Истина) Тогда
Возврат;
КонецЕсли;
СписокЗначений = Новый СписокЗначений; СписокЗначений.ЗагрузитьЗначения(ФормаЗапроса.РезультатТаблица.ВыгрузитьКолонку(ЭлементФормыОтбор.ТекущаяСтрока.Представление)); ЭлементФормыОтбор.ТекущаяСтрока.ВидСравнения = ВидСравнения.ВСписке; ЭлементФормыОтбор.ТекущаяСтрока.Значение = СписокЗначений;
КонецПроцедуры
и добавляем в обработку две формы: ит_ФормаРезультатаЗапроса и ит_ФормаПараметров
Процедура и эти две формы находятся в прикрепленной обработке-шаблоне к данной публикации.
Аналогичным образом дорабатывается обработка ВыгрузкаЗагрузкаДанныхXML, и другие обработки где используется отбор построителя.
Как раз понадобилось в отчёте сделать отбор интерактивно для пользователя, чтобы он мог выбрать необходимые элементы справочника для фильтрации результата запроса. Сейчас буду пробовать данный механизм, может что получится, потом отпишусь.
суровые у тебя пользователи — запросы пишут 🙂
(3) реальная путная вещь, как всегда, не оцененная на ис, в отличие от поделок типаПеренос идентичных .
Автору:
Здравствуйте. Оплатил, скачал, обработка работает но мою задачу не выполняет.
Задача: Перенести справочник Номенклатура со свойствами и штрих-кодами в идентичную базу с отбором по списку номенклатуры. Допустим, по двум позициям, для начала.
Проблема: Номенклатура выгружается в ХМL безо всяких свойств. Если поставить галку на Рег.Сведений ЗначенияСвойствОбъектов, отключается отбор и валится всё, в том числе всякое ненужное старьё из номенклатуры. Подозреваю, что и свойств там более, чем нужно.
Вопрос: Как выгрузить только связанные свойства? штрих-коды? единицы измерения? что там ещё в номенклатуре по ссылкам.
(4) olezhe, Извините, ошибся окошком.
Мега-полезный совет. Отборы встраиваются теперь за 1 минуту в любую обработку!