Встраиваем консоль запросов для отбора в стандартные обработки 1С
1C-admin
01.03.2019
Данное руководство поможет встроить форму отбора в стандартные обработки 1С, например «Групповое изменение реквизитов» или «Поиск и удаление дублей».
Бывает случаи, что нужно сделать сложный отбор элементов, который невозможно реализовать через стандартный отбор или, в случае поиска и удаления дублей, справочник имеет тысячи элементов и поиск по нему дублей может знять даже не один день.
Тут на помощь приходит консоль запросов, которая встраивается в обработки и помогает отобрать нужные элементы для дальнейших с ними действий.
Для демонстрации использую типовую обработку "Групповое изменение реквизитов"
Обработка имеет следующий список форм:
Нас интересует форма ВыбранныеЭлементы, туда и будем встраивать консоль
(Формы консоли ВыборИзЗапроса и НастройкиКонсолиЗапросов прикладываю отдельно в обработке)
В модуле формы ВыбранныеЭлементы в область ОбработчикиКомандФормы неоходимо создать следующие процедуры:
&НаКлиенте
Процедура ДобавитьИзЗапроса(Команда)
ОткрытьФорму(ИмяФормыКонсолиЗапросов(),ПараметрыКонсолиЗапросов(),ЭтотОбъект,,,, Новый ОписаниеОповещения("ДобавитьИзЗапросаЗавершение", ЭтаФорма), РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьИзЗапросаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено Тогда
СписокОтбора = Новый СписокЗначений;
СписокОтбора.ЗагрузитьЗначения(Результат);
МассивДляОтбора = Новый Массив;
МассивДляОтбора.Добавить(Список);
МассивДляОтбора.Добавить(КомпоновщикНастроек.Настройки);
Для каждого Элемент из МассивДляОтбора Цикл
ЭлементОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = СписокОтбора;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НастройкиКонсолиЗапросов(Команда)
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ВариантИспользованияКонсолиЗапросов", ВариантИспользованияКонсолиЗапросов);
ПараметрыФормы.Вставить("ПутьКВнешнейКонсолиЗапросов", ПутьКВнешнейКонсолиЗапросов);
ОткрытьФорму(ИмяФормыНастроекКонсолиЗапросов(), ПараметрыФормы);
КонецПроцедуры
В область СлужебныеПроцедурыИФункции нужно вставить:
&НаСервере
Функция ИмяФормыКонсолиЗапросов()
Если ВариантИспользованияКонсолиЗапросов = 0 Тогда
Обработка = РеквизитФормыВЗначение("Объект");
ИдентификаторФормы = ".Форма.ВыборИзЗапроса";
ИначеЕсли ВариантИспользованияКонсолиЗапросов = 1 Тогда
Обработка = Обработки["КонсольЗапросов"].Создать();
ИдентификаторФормы = ".Форма";
Иначе //ВариантИспользованияКонсолиЗапросов = 2
Обработка = ВнешниеОбработки.Создать(ПутьКВнешнейКонсолиЗапросов);
ИдентификаторФормы = ".ФормаОбъекта";
КонецЕсли;
Возврат Обработка.Метаданные().ПолноеИмя() + ИдентификаторФормы;
КонецФункции
&НаСервере
Функция ИмяФормыНастроекКонсолиЗапросов()
Обработка = РеквизитФормыВЗначение("Объект");
ИмяФормыНастроек = Обработка.Метаданные().ПолноеИмя() + ".Форма.НастройкиКонсолиЗапросов";
Возврат ИмяФормыНастроек;
КонецФункции
&НаКлиенте
Функция ПараметрыКонсолиЗапросов()
ПараметрыФормы = Новый Структура;
Если ВариантИспользованияКонсолиЗапросов = 0 Тогда
ПараметрыФормы.Вставить("ВариантИспользованияКонсолиЗапросов", ВариантИспользованияКонсолиЗапросов);
ПараметрыФормы.Вставить("ПутьКВнешнейКонсолиЗапросов", ПутьКВнешнейКонсолиЗапросов);
Иначе
ПараметрыФормы.Вставить("Заголовок", НСтр("ru='Выбор данных для выгрузки'"));
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь);
КонецЕсли;
Возврат ПараметрыФормы;
КонецФункции
На форме создать реквизиты:
- ВариантИспользованияКонсолиЗапросов (тип Число)
- ПутьКВнешнейКонсолиЗапросов (тип Строка)
И 2 команды:
- ДобавитьИзЗапроса (действие ДобавитьИзЗапроса)
- НастройкиКонсолиЗапросов (действие НастройкиКонсолиЗапросов)
Остается только вынести на форму наши команды и все готово )
Аналогичным образом встраивается консоль и в обработку "Поиск и удаление дублей", только там форма отбора будет "ПравилаОтбора"
Уверен, что данная статья поможет упростить штатную работу с данными программистам 1С
Проверял на платформе 8.3.13.1644, но работает и на более ранних платформах версий 8.3
p.s. Штука реально очень полезная. Настоятельно рекомендую к использованию!
(0) молодец!
Клево придумал!
Отличная штука +1
Видел выгрузке/загрузке Json аналогичную реализацию. Отборы скд и подборы запросом это уже хороший тон программирования.
Нужно не лениться и почаще их применять.