107 lines
4.6 KiB
Plaintext
107 lines
4.6 KiB
Plaintext
---
|
||
title: ОбработкаПолученияДанныхВыбора
|
||
---
|
||
|
||
## 📌 Назначение
|
||
Обработчик `ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)` позволяет:
|
||
- Влиять на формирование списка выбора.
|
||
- Модифицировать параметры отбора.
|
||
- Полностью формировать список выбора вручную.
|
||
|
||
---
|
||
|
||
## 🔧 Параметры обработчика
|
||
|
||
- `ДанныеВыбора`: переменная для возврата кастомного списка.
|
||
- `Параметры`: структура параметров, включая отборы и строку поиска.
|
||
- `СтандартнаяОбработка`:
|
||
- `Истина`: платформа формирует список выбора.
|
||
- `Ложь`: список задаётся вручную через `ДанныеВыбора`.
|
||
|
||
---
|
||
|
||
## 🔹 Пример 1: Модификация параметров отбора
|
||
|
||
**Задача:** Выводить товары только от указанного поставщика и не услуги.
|
||
|
||
### Решение:
|
||
1. В `Параметры.Отбор` добавить:
|
||
```1C
|
||
Параметры.Отбор.Вставить("ВидТовара", Перечисления.ВидыТоваров.Товар);
|
||
```
|
||
2. Оставить `СтандартнаяОбработка = Истина`.
|
||
|
||
---
|
||
|
||
## 🔹 Пример 2: Полное переопределение — простой список
|
||
|
||
**Задача:** Предлагать склады, не являющиеся розничными.
|
||
|
||
### Пример кода:
|
||
```1C
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст = "ВЫБРАТЬ Склады.Ссылка ИЗ Справочник.Склады КАК Склады
|
||
ГДЕ Склады.Розничный = ЛОЖЬ
|
||
И Склады.Наименование ПОДОБНО &СтрокаПоиска";
|
||
|
||
Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%");
|
||
|
||
Результат = Запрос.Выполнить();
|
||
Список = Новый СписокЗначений;
|
||
|
||
Пока Результат.Выбрать().Следующий() Цикл
|
||
Список.Добавить(Выборка.Ссылка);
|
||
КонецЦикла;
|
||
|
||
ДанныеВыбора = Список;
|
||
```
|
||
|
||
---
|
||
|
||
## 🔹 Пример 3: Полное переопределение — сложный список
|
||
|
||
**Задача:** Выводить поставщиков с пометкой удаления и предупреждением о ненадёжности.
|
||
|
||
### Пример кода:
|
||
```1C
|
||
СтандартнаяОбработка = Ложь;
|
||
|
||
Запрос = Новый Запрос;
|
||
Запрос.Текст = "ВЫБРАТЬ Поставщики.Ссылка, Поставщики.ПометкаУдаления, Поставщики.Ненадежный
|
||
ИЗ Справочник.Поставщики КАК Поставщики
|
||
ГДЕ Поставщики.Наименование ПОДОБНО &СтрокаПоиска";
|
||
|
||
Запрос.УстановитьПараметр("СтрокаПоиска", "%" + Параметры.СтрокаПоиска + "%");
|
||
|
||
Результат = Запрос.Выполнить();
|
||
Список = Новый СписокЗначений;
|
||
|
||
Пока Результат.Выбрать().Следующий() Цикл
|
||
Структура = Новый Структура;
|
||
Структура.Вставить("Значение", Выборка.Ссылка);
|
||
Структура.Вставить("ПометкаУдаления", Выборка.ПометкаУдаления);
|
||
|
||
Если Выборка.Ненадежный Тогда
|
||
Структура.Вставить("Предупреждение", "Это ненадежный поставщик...");
|
||
КонецЕсли;
|
||
|
||
Список.Добавить(Структура);
|
||
КонецЦикла;
|
||
|
||
ДанныеВыбора = Список;
|
||
```
|
||
|
||
---
|
||
|
||
## ⚠️ Особенности производительности
|
||
|
||
Обработчик вызывается:
|
||
- При автоподборе.
|
||
- При потере фокуса поля ввода.
|
||
- При быстром выборе.
|
||
|
||
**Рекомендация:** тщательно оптимизировать запросы и код обработчика.
|
||
|