среда, 27 июля 2011 г.

Работа с элементами формы полей отбора СКД

... на самом деле для работы с элементом формы отбора СКД нам нужно всего 3 поля - Использование, ЛевоеЗначение И ПравоеЗначениеДляКраткогоОтображенияЭлемента. 
Когда необходимо назначить назначить свои обработчики проще всего это делать динамически

Процедура ПриОткрытии()

    // Определение типов данных
    // Так как метод Получить() работает только спо индексу элемента необходимо использовать перебор
    Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
        Если Строка(ЭлементОтбора.ЛевоеЗначение) = "Дирекция" Тогда
            Элемент.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов");
            Элемент.Значение = Элемент.ОграничениеТипа.ПривестиЗначение(Неопределено);
        КонецЕсли;
    КонецЦикла;

    // Установление обработчика колонке
    КолонкаПравоеЗначение = ЭлементыФормы.Отбор.Колонки.Найти("ПравоеЗначениеДляКраткогоОтображенияЭлемента");

    ДействиеНачалоВыбора = Новый Действие("ОтборПравоеЗначениеДляКраткогоОтображенияЭлементаНачалоВыбора");
    Колонка.ЭлементУправления.УстановитьДействие("НачалоВыбора", ДействиеНачалоВыбора);

    ДействиеОкончаниеВвода = Новый Действие("ОтборПравоеЗначениеДляКраткогоОтображенияЭлементаОкончаниеВводаТекста")
    Колонка.ЭлементУправления.УстановитьДействие("ОкончаниеВводаТекста", ДействиеОкончаниеВвода);

КонецПроцедуры

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

    ПолеКомпоновкиДанных = ЭлементыФормы.Отбор.ТекущаяСтрока.ЛевоеЗначение;

    Если Строка(ПолеКомпоновкиДанных) = "Дирекция" Тогда
        Элемент.ВыборПоВладельцу = ПВХДирекция;
    КонецЕсли;

КонецПроцедуры

Процедура ОтборПравоеЗначениеДляКраткогоОтображенияЭлементаОкончаниеВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка)

    ПолеКомпоновкиДанных = ЭлементыФормы.Отбор.ТекущаяСтрока.ЛевоеЗначение;
    Если Строка(ПолеКомпоновкиДанных) = "Дирекция" Тогда
        СтандартнаяОбработка = Ложь;
        ОбработкаОкончанияВводаТекста(Элемент, Текст, Значение, СтандартнаяОбработка);
    КонецЕсли;

КонецПроцедуры

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

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ЗначенияСвойствОбъектов.Ссылка
    |ИЗ
    |   Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    |ГДЕ
    |   ЗначенияСвойствОбъектов.Владелец = &Владелец
    |   И ЗначенияСвойствОбъектов.Наименование ПОДОБНО &Наименование + ""%""";

    Запрос.УстановитьПараметр("Владелец", ПВХДирекция);
    Запрос.УстановитьПараметр("Наименование", Текст);

    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
        Список = Новый СписокЗначений;
        Список.ЗагрузитьЗначения(Результат.Выгрузить().ВыгрузитьКолонку("Ссылка"));
        ЭлСписка = ЭтаФорма.ВыбратьИзСписка(Список, Элемент);
        Если ЭлСписка <> Неопределено Тогда
            Значение = ЭлСписка.Значение;
        КонецЕсли;
    Иначе
        Элемент.ОграничениеТипа = Новый ОписаниеТипов("СправочникСсылка.ЗначенияСвойствОбъектов");
        Элемент.Значение = Элемент.ОграничениеТипа.ПривестиЗначение(Неопределено);
    КонецЕсли;

КонецПроцедуры

Комментариев нет:

Отправить комментарий