Отбор списка справочника по «табличным реквизитам» элементов 1C v8x
Организовать отбор в списке справочника по значениям из таблицы в элементе 1C v8x
- Описание
- Подробнее
Описание
Практический пример: Предприятие торгует автомобильными деталями. Одна и та же деталь может подходить для различных марок и моделей автомобилей. Продавец не всегда может квалифицированно ответить покупателю, подходит ли данная деталь к марке (модели) его автомобиля. Поэтому необходимо, чтобы у элемента справочника «Номенклатура» была информация, к каким моделям автомобилей подходит данная деталь. Причем деталь может подходить к нескольким моделям.
Задача:
Сделать отбор в списке справочника «Номенклатура» по деталям, которые подходят к конкретной марке (модели) автомобиля.
Реализация:
1) Создается справочник «МаркиАвтомобилей» . Справочник с иерархический элементов с количеством уровней — 2. Это позволит создать список моделей и марок автомобилей примерно такой структуры:
Элемент 1-го уровня Элемент 2-го уровня
(марка автомобиля) (модель автомобиля)
Мазда 2000 года выпуска
2002 года выпуска
Что в дальнейшем позволит делать выборку элементов «Номенклатуры», как по элементу первого уровня — «Мазда» (подходит для всех моделей), так и по элементам второго уровня — «2002 года выпуска» (подходит только для «Мазда» «2002 года выпуска»).
2) В справочнике «Номенклатура» добавляется табличный реквизит «МаркиАвтомобилей» с типом — СправочникСсылка.МаркиАвтомобилей. Данная таблица вставляется в форму элемента справочника.
3) В форме списка справочника «Номенклатура» вставляется «поле ввода» с именем «ОтборМаркаАвтомобиля» и типом значения — СправочникСсылка.МаркиАвтомобилей, по значению которого нужно организовать отбор в списке «Номенклатура».
4) Пишем процедуру отбора в событии «ПриИзменении» — реквизита «ОтборМаркаАвтомобиля»:
Процедура ОтборМаркаАвтомобиляПриИзменении(Элемент) Если ОтборМаркаАвтомобиля.Пустая() Тогда //Отключим отбор если не задано условие Список.Отбор.Ссылка.Использование=Ложь; Иначе //Сформируем запрос к табличному реквизиту справочник МаркиАвтомобилей //по реквизитам которого будем отбирать подходящие элементы Запрос = Новый Запрос; //Зададим параметр по которому будем делать отбор в запросе Запрос.УстановитьПараметр("МаркаАвтомобиля", ОтборМаркаАвтомобиля); Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка, | Номенклатура.МаркиАвтомобилей.( | МаркаАвтомобиля | ) |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.МаркиАвтомобилей.МаркаАвтомобиля В ИЕРАРХИИ (&МаркаАвтомобиля)"; РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Список.Отбор.Ссылка.ВидСравнения=ВидСравнения.ВСписке; Список.Отбор.Ссылка.Значение.ЗагрузитьЗначения(РезультатЗапроса.ВыгрузитьКолонку("Ссылка")); Список.Отбор.Ссылка.Использование=Истина; КонецЕсли; Список.Обновить(); КонецПроцедуры
Всё.