Форма редактирования списка значений


Форма предлагается в качестве замены стандартному диалогу "Редактирование списка": максимально полно повторяет его интерфейс и функционал, а также обладает дополнительными возможностями и преимуществами.

Иногда возникают такие ситуации, когда необходимо обработать события при редактировании списка значений. Кроме того для некоторых подбираемых элеметов не задается владелец, например для характеристик, и они вываливаются всем списком, что не очень удобно. Но поскольку стандартный диалог реализован на уровне платформы, программист не может внести в него никаких изменений. Для таких случаев я и сделал аналог стандартного диалога - он полностью повторяет его функционал, но позволяет при необходимости обрабатывать различные проблемные ситуации.

ОТЛИЧИЯ ОТ СТАНДАРТНОГО ДИАЛОГА

 - есть возможность задать свойство ВыборПоВладельцу для ограничения списка элементов,  предлагаемых для выбора и подбора (например, может применяться при использовании характеристик в отборах: в стандартном диалоге открывается полный список без установки владельца);
- можно назначать свои обработчики ПриИзменении, НачалоВыбора, Очистка, ОбработкаВыбора,  АвтоПодборТекста, ОкончаниеВводаТекста для значений списка (позволяет обработать процесс наполнения списка нужным образом);

ПАРАМЕТРЫ ФОРМЫ

Список - тип "СписокЗначений", в параметр передается список значений, который необходимо  редактировать (например, правое значение отбора с сответствующим видом сравнения), наполнение списка зависит от его свойства ТипЗначения;

ВыборПоВладельцу - тип "ЛюбаяСсылка", необязательный параметр, в который может передаваться элемент-владелец, по которому будут выбираться значения (например, элемент плана видов характеристик, для ограничения списка свойств предлагаемых для выбора и подбора);

ОбработчикиСобытий - тип "Структура", необязательный параметр, в который может передаваться структура вида (<Событие>, <Обработчик>) с описанием обработчиков событий для значений списка;

ОБРАБОТКА РЕЗУЛЬТАТА

Для получения отредактированного списка, необходимо задать владельцем формы поле ввода, значением которого является искомый список.

ПРИМЕР ИСПОЛЬЗОВАНИЯ

Необходимо в отборе отчета, построенного на СКД, ограничить перечень предлагаемых для выбора элементов справочника "Контрагенты" (только юрлица) и их свойств при редактировании списка.

Код в форме настройки отчета:


 Процедура ОтборПравоеЗначениеНачалоВыбора(Элемент, СтандартнаяОбработка)

     
ТекущийВидСравнения = ЭлементыФормы.Отбор.ТекущиеДанные.ВидСравнения;

     Если (
ТекущийВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке)
         ИЛИ (
ТекущийВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке)
         ИЛИ (
ТекущийВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии)
         ИЛИ (
ТекущийВидСравнения = ВидСравненияКомпоновкиДанных.НеВСпискеПоИерархии) Тогда
         
СтандартнаяОбработка = Ложь;

         ПредставлениеОтбора = Строка(ЭлементыФормы.Отбор.ТекущиеДанные.ЛевоеЗначение);
     
   ЛевоеЗначениеОтбора = ЭлементыФормы.Отбор.ТекущиеДанные.ЛевоеЗначение;

         ПравоеЗначениеОтбора = ЭлементыФормы.Отбор.ТекущиеДанные.ПравоеЗначение;
         
ПолеКомпоновкиКонтрагент = Новый ПолеКомпоновкиДанных("Контрагент");        
         

         ФормаРедактированияСписка = ПолучитьОбщуюФорму("ФормаРедактированияСписка", Элемент);
         
ФормаРедактированияСписка.Список = ПравоеЗначениеОтбора.Скопировать();
         Если
ЛевоеЗначениеОтбора = ПолеКомпоновкиКонтрагент Тогда
             
ОбработчикиСобытий = Новый Структура;
             
ОбработчикиСобытий.Вставить("НачалоВыбора", "ЮрлицоВыбор(Элемент, СтандартнаяОбработка)");
             
ОбработчикиСобытий.Вставить("АвтоПодборТекста", "ЮрлицоАвтоПодборТекста(Элемент, Текст, ТекстАвтоПодбора, СтандартнаяОбработка)");
             
ОбработчикиСобытий.Вставить("ОкончаниеВводаТекста", "ЮрлицоОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)");
             
ФормаРедактированияСписка.ОбработчикиСобытий = ОбработчикиСобытий;
         ИначеЕсли
Найти(ПредставлениеОтбора, "(свойство)") > 0 Тогда
             
СоответствиеСвойств = УстановитьСоответствиеСвойств(ПланыВидовХарактеристик.НазначенияСвойствКатегорийОбъектов.Справочник_Контрагенты, "Контрагент.[", " (свойство)]");
             
ФормаРедактированияСписка.ВыборПоВладельцу = СоответствиеСвойств.Получить(ПредставлениеОтбора);
         КонецЕсли;
         
ФормаРедактированияСписка.ОткрытьМодально();
     КонецЕсли;
КонецПроцедуры

 

Форма редактирования списка значений добавлена в общие формы. Функция УстановитьСоответствиеСвойств возвращает соответствие вида (<Наименование поля компоновки данных>, <Элемент плана видов характеристик "СвойстваОбъектов">), процедуры ЮрлицоВыбор, ЮрлицоАвтоПодборТекста, ЮрлицоОкончаниеВводаТекста описывают поведение формы выбора таким образом, чтобы в предлагаемый список попадали только юрлица. Процедуры определены как экспортные и размещены в общем модуле.

 

Файлы обработки:

-