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