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