Skip to content

Latest commit

 

History

History
113 lines (85 loc) · 14.7 KB

ОбработкаПолученияДанныхВыбора.MD

File metadata and controls

113 lines (85 loc) · 14.7 KB

Обработка получения данных выбора

В некоторых случаях необходимо реализовать собственную логику получения данных выбора для полей ввода на форме. Например: необходимо установить отбор по полю, которое отсутствует в исходном объекте метаданных. Или учесть настройку программы. Для таких случаях, в модуле менеджера объекта можно расположить обработчик события ОбработкаПолученияДанныхВыбора.

Чтобы не реализовывать всю логику формирования запроса данных, существует 2 метода для быстрого получения данных выбора:

  • ОбщегоНазначенияПТБ.НастройкиПолученияДанныхВыбора. Используется для получения коллекции настроек. Данные настройки могут быть изменены согласно требуемой логики и переданы далее для обработки в метод получения списка.
  • ОбщегоНазначенияПТБ.ПолучитьСписокДанныхВыбора. Используется для получения списка значений (параметр ДанныеВыбора обработчика). Метод формирует текст запроса, выполняет его и из результатов формирует список значений.

Пример реализации обработчика ОбработкаПолученияДанныхВыбора

Условия примера:

  • обработчик расположен в справочнике "Контрагенты"
  • в конфигурации есть регистр "ДоступныеКонтрагенты", где хранится связка Контрагент - Пользователь
  • в отбор могут прийти условия:
    • ДействующийДоговор - Булево - договоры у которых дата окончания <= текущей
    • ОсновнойДоговор - ссылка - ссылка на основной договор контрагента
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
    ПараметрыОтбор = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Отбор", Новый Структура);

    ЕстьОтборДействующийДоговор     = ПараметрыОтбор.Свойство("ДействующийДоговор");
    ЕстьОтборОсновнойДоговор        = ПараметрыОтбор.Свойство("ОсновнойДоговор");

    // поскольку безусловно надо отбирать по пользователю, отменяем стандартную обработку
    СтандартнаяОбработка = Ложь;

    // получим коллекцию настроек
    Настройки = ОбщегоНазначенияПТБ.НастройкиПолученияДанныхВыбора(Параметры, "Справочник.Контрагенты");
 
    // добавим соединение с регистром доступных контаргентов
    // запрос получения данных имеет условие РАЗЛИЧНЫЕ
    // однако стоит учитывать влияние настроек на производительность
    Настройки.ЗапросСоединения.Добавить("ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДоступныеКонтрагенты КАК ДоступныеКонтрагенты
    |   ПО Т.Ссылка = ДоступныеКонтрагенты.Контрагент
    |       И ДоступныеКонтрагенты.Пользователь = &Пользователь");
 
    // установим параметр Пользователь
    Настройки.ЗапросПараметры.Вставить("Пользователь", Пользователи.ТекущийПользователь());

    // если есть отбор по основному договору, сделаем соединение со справочником Договоры
    // с условием Основной = ИСТИНА
    ЕстьСоединениеДоговоры = (ЕстьОтборДействующийДоговор ИЛИ ЕстьОтборОсновнойДоговор);
    Если ЕстьСоединениеДоговоры Тогда
        Настройки.ЗапросСоединения.Добавить("ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры
        |   ПО Т.Ссылка = Договоры.Владелец");
    КонецЕсли;

    // отбор по действующему договору
    Если ЕстьОтборДействующийДоговор Тогда
        Настройки.ЗапросОтборы.Добавить("Договоры.ДатаОкончания <= &ТекущаяДата");
        Настройки.ЗапросПараметры.Вставить("ТекущаяДата", ТекущаяДатаСеанса());
    КонецЕсли;
    
    // отбор по основному договору
    Если ЕстьОтборОсновнойДоговор Тогда
        Настройки.ЗаменаПолей.Вставить("ОсновнойДоговор", "Договоры.Ссылка");
        Настройки.ЗапросОтборы.Добавить("Договоры.Основной = ИСТИНА");
    КонецЕсли;

    // получение данных выбора
    ДанныеВыбора = ОбщегоНазначенияПТБ.ПолучитьСписокДанныхВыбора(Настройки);
КонецПроцедуры

НастройкиПолученияДанныхВыбора

Для получения коллекции настроек необходимо вызвать метод ОбщегоНазначенияПТБ.НастройкиПолученияДанныхВыбора:

Параметры

Имя Тип Описание
Параметры Структура значение параметра Параметры из обработчика ОбработкаПолученияДанныхВыбора
ОсновнаяТаблица Строка полное имя основной таблицы данных для получения результата. Основная таблица должна содержать колонки "Ссылка, ЭтоГруппа, ПометкаУдаления", а также поле "Наименование" если ПоискПоНаименованию = ИСТИНА.

Элементы коллекции

Имя Тип Описание
ОсновнаяТаблица Строка значение параметра ОсновнаяТаблица метода ОбщегоНазначенияПТБ.НастройкиПолученияДанныхВыбора. Изменять запрещено.
Параметры Структура значение параметра ОсновнаяТаблица метода ОбщегоНазначенияПТБ.НастройкиПолученияДанныхВыбора. Изменять запрещено.
Количество Число количество записей в запросе для возвращения в списке значений. По умолчанию = 20.
ПоискПоНаименованию Булево выполнять поиск по полю "Наименование". По умолчанию = ИСТИНА. Данное поле должно быть в основной таблице.
ПоляПоиска Массив дополнительные поля для поиска по строке. По умолчанию не задано. Строка условия по полям поиска формируется с условием "ИЛИ", но к основному запросу добавляется с условием "И". При этом если ПоискПоНаименованию = ИСТИНА, то получится условие вида (Т.Наименование ПОДОБНО &СтрокаПоиска И (Т.ПолеПоиска1 ПОДОБНО &СтрокаПоиска ИЛИ Т.ПолеПоиска2 ПОДОБНО &СтрокаПоиска))
Представление Массив набор полей для формирования представления ссылки. По умолчанию не заполнено. Если поля не заданы, представление формируется запросом ПРЕДСТАВЛЕНИЕССЫЛКИ(Ссылка). Шаблон формирования %1 (%2), где: %1 - значение первого поля представления; %2 - значения следующих полей представления, разделенные ","
ПолеКартинок Строка имя поля для получения индекса картинок из настройки МассивКартинок. По умолчанию не заполнено.
МассивКартинок Массив массив картинок для подстановки. Используется совместно с параметром ПолеКартинок. По умолчанию не заполнено.
КартинкаГруппы Картинка значение картинки, если это группа. По умолчанию = НЕОПРЕДЕЛЕНО. Используется если ПолеКартинок не указано, а также объект является иерархическим. Поскольку при подготовке запроса метаданные не анализируются, признак наличия иерархии определяется по наличию в параметрах свойства "ВыборГруппИЭлементов".
КартинкаЭлемента Картинка значение картинки, если это НЕ группа. По умолчанию = НЕОПРЕДЕЛЕНО. Используется если ПолеКартинок не указано, а также объект является иерархическим. Поскольку при подготовке запроса метаданные не анализируются, признак наличия иерархии определяется по наличию в параметрах свойства "ВыборГруппИЭлементов".
ЗаменаПолей Структура коллекция для указания правила замены полей при подготовке условия отбора. По умолчанию не задано. Ключ - имя поля как оно будет задано в условии отбора. Значение - полный путь к полю, с указанием синонима таблицы данных. Для добавления иных таблиц см. ЗапросСоединения. Основная таблица имеет синоним Т.
ЗапросПоляВыбора Массив дополнительные поля для выбора. По умолчанию не заполнено. Могут быть использованы для формирования представления или указания в ПолеКартинок. Значением является полный текст запроса данных поля с указанием синонима поля. Например: Т.ОсновнойДоговор.Код КАК КодОсновногоДоговора. Основная таблица имеет синоним Т.
ЗапросОтборы Массив дополнительные условия отбора. По умолчанию не заполнено. Значением является полный текст условия отбора. Например: Т.ОсновнойДоговор = &ОсновнойДоговор. Каждый элемент массива добавляется в отбор с условием И. Основная таблица имеет синоним Т.
ЗапросСоединения Массив дополнительные соединения к основной таблице. По умолчанию не заполнено. Например: ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Договоры КАК Договоры ПО Т.ОсновнойДоговор = Договоры.Ссылка. Основная таблица имеет синоним Т.
ЗапросПараметры Структура значения параметров для подстановки при формировании запроса. По умолчанию не заполнено.
РежимОтладки Булево признак необходимости вывода служебных сообщений в процессе подготовки и выполнения запроса. По умолчанию = ЛОЖЬ. В служебных сообщениях выводится текст запроса и параметры с указанием значений параметров.

ПолучитьСписокДанныхВыбора

Для списка значений для подстановки в параметр ДанныеВыбора обработчика события ОбработкаПолученияДанныхВыбора:

Параметры

Имя Тип Описание
Настройки Структура см. НастройкиПолученияДанныхВыбора

Зависимости

  • ОбщегоНазначения
  • ОбщегоНазначенияКлиентСервер