Данная форма позволяет загружать большие списки в отборы отчетов с помощью табличного документа, дабы избежать ручного ввода.
Модификация формы из публикации e.kogan и адаптация под управляемый интерфейс без использования модальных окон.
Тестировалась на примере отбора компоновщика настроек СКД-отчета в конфигурации Бухгалтерия предприятия 3.0.64.28
Для встраивания формы в отчет необходимо в обработчике события НачалоВыбора правого значения отбора компоновщика настроек вставить ссылку на процедуру ОбработатьОткрытиеФормыЗагрузкиСпика и далее код
&НаКлиенте
Процедура КомпоновщикНастроекНастройкиОтборПравоеЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ОбработатьОткрытиеФормыЗагрузкиСписка(Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьОткрытиеФормыЗагрузкиСписка(Элемент, СтандартнаяОбработка)
ЭлементОтбора = Отчет.КомпоновщикНастроек.Настройки.Отбор.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройкиОтбор.ТекущаяСтрока);
ЗначенияОтбора = ЭлементОтбора.ПравоеЗначение;
Если ТипЗнч(ЗначенияОтбора) <> Тип("СписокЗначений") Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ОписаниеТипа = ЗначенияОтбора.ТипЗначения;
Если ОписаниеТипа = Новый ОписаниеТипов() Тогда
Попытка
ОписаниеТипа = ЗначенияОтбора.ТипЗначения;
Исключение
КонецПопытки;
КонецЕсли;
Если ОписаниеТипа.Типы().Количество() > 1 Тогда
СписокВыбора = Новый СписокЗначений;
СписокВыбора.ЗагрузитьЗначения(ОписаниеТипа.Типы());
СписокВыбора.СортироватьПоЗначению();
Оповещение = Новый ОписаниеОповещения("КомпоновщикНастроекНастройкиОтборПравоеЗначениеНачалоВыбораЗавершение", ЭтаФорма, Новый Структура("ЗначенияОтбора", ЗначенияОтбора));
ЭтаФорма.ПоказатьВыборИзСписка(Оповещение, СписокВыбора, Элемент);
Иначе
НовоеЗначение = ЗначенияОтбора.Добавить();
ТипЗначенияЭлементов = ТипЗнч(НовоеЗначение.Значение);
ЗначенияОтбора.Удалить(НовоеЗначение);
Если ТипЗначенияЭлементов = Тип("Неопределено") Тогда
Попытка
ТипЗначенияЭлементов = ЗначенияОтбора.ТипЗначения.Типы().Получить(0);
Исключение
КонецПопытки;
Если ТипЗначенияЭлементов = Тип("Неопределено") Тогда
Возврат
КонецЕсли;
КонецЕсли;
Оповещение = Новый ОписаниеОповещения("ОбработкаОповещенияЗакрытияПодбора", ЭтотОбъект);
ПараметрыФормы = Новый Структура("ТипЗначенияЭлементов, ЗначенияОтбора",ТипЗначенияЭлементов, ЗначенияОтбора);
ФормаПодбора = ПолучитьФорму("ВнешнийОтчет.ХозрасчетныйОборотыСчетаУФ.Форма.ФормаРедактированияЗагрузкиСпискаУпр", ПараметрыФормы);
ФормаПодбора.ОписаниеОповещенияОЗакрытии = Оповещение;
ФормаПодбора.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
ФормаПодбора.Заголовок = "Редактирование списка значений";
ОткрытьФорму(ФормаПодбора,,,,,,Оповещение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещенияЗакрытияПодбора(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
Если ТипЗнч(ВыбранныйЭлемент) = Тип("Массив") Тогда
ЭлементОтбора = Отчет.КомпоновщикНастроек.Настройки.Отбор.ПолучитьОбъектПоИдентификатору(Элементы.КомпоновщикНастроекНастройкиОтбор.ТекущаяСтрока);
ЭлементОтбора.ПравоеЗначение.ЗагрузитьЗначения(ВыбранныйЭлемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КомпоновщикНастроекНастройкиОтборПравоеЗначениеНачалоВыбораЗавершение(ВыбранныйЭлемент, ДополнительныеПараметры) Экспорт
ТипЗначенияСпискаОтбора = ВыбранныйЭлемент;
Если ТипЗначенияСпискаОтбора = Неопределено Тогда
Возврат
КонецЕсли;
ТипЗначенияЭлементов = ТипЗначенияСпискаОтбора.Значение;
Оповещение = Новый ОписаниеОповещения("ОбработкаОповещенияЗакрытияПодбора", ЭтотОбъект);
ПараметрыФормы = Новый Структура("ТипЗначенияЭлементов, ЗначенияОтбора",ТипЗначенияЭлементов, ДополнительныеПараметры.ЗначенияОтбора);
ФормаПодбора = ПолучитьФорму("ВнешнийОтчет.ХозрасчетныйОборотыСчетаУФ.Форма.ФормаРедактированияЗагрузкиСпискаУпр", ПараметрыФормы);
ФормаПодбора.ОписаниеОповещенияОЗакрытии = Оповещение;
ФормаПодбора.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
ФормаПодбора.Заголовок = "Редактирование списка значений";
ОткрытьФорму(ФормаПодбора,,,,,,Оповещение);
КонецПроцедуры
Помимо этого размещаем нашу форму в метаданных самого отчета
Как работает:
При выборе вида сравнения "В списке" в отборе отчета у вас открывается форма подбора. Если поле компоновки имеет составной тип, то предварительно вам будет предложено выбрать тип данных.
Далее в форме вы можете отобрать данные через форму выбора (кнопка "Подбор"), либо через загрузку из табличного документа (кнопка "загрузить").
Перед загрузкой в табличный документ вам будет предложено выбрать реквизит сопоставления данных, это может быть код, наименование, GUID или же любой другой реквизит (примитивного типа) объекта метаданных выбранного типа
В табличный документ копипастой вставляем имеющийся у нас список. Если базе находится соответствие значению, то найденный элемент добавляется в список отбора
В прикрепленные файлы прикладываю файл отчета на котором тестировалась форма.
При обнаружении ошибок пишите, постараюсь оперативно внести исправления.