gifts2017

Отбор списка справочника по «табличным реквизитам» элементов 1C v8x

Опубликовал anry mc (AnryMc) в раздел Программирование - Практика программирования

Организовать отбор в списке справочника по значениям из таблицы в элементе 1C v8x

Практический пример: Предприятие торгует автомобильными деталями. Одна и та же деталь может подходить для различных марок и моделей автомобилей. Продавец не всегда может квалифицированно ответить покупателю, подходит ли данная деталь к марке (модели) его автомобиля. Поэтому необходимо, чтобы у элемента справочника «Номенклатура» была информация, к каким моделям автомобилей подходит данная деталь. Причем деталь может подходить к нескольким моделям.
Задача: 
Сделать отбор в списке справочника «Номенклатура» по деталям, которые подходят к конкретной марке (модели) автомобиля.
Реализация:
1) Создается справочник «МаркиАвтомобилей» . Справочник с иерархический элементов с количеством уровней - 2. Это позволит создать список моделей и марок автомобилей примерно такой структуры:
Элемент 1-го уровня Элемент 2-го уровня
(марка автомобиля) (модель автомобиля)
Мазда 2000 года выпуска
  2002 года выпуска
Что в дальнейшем позволит делать выборку элементов «Номенклатуры», как по элементу первого уровня - «Мазда» (подходит для всех моделей), так и по элементам второго уровня - «2002 года выпуска» (подходит только для «Мазда» «2002 года выпуска»).
2) В справочнике «Номенклатура» добавляется табличный реквизит «МаркиАвтомобилей» с типом - СправочникСсылка.МаркиАвтомобилей. Данная таблица вставляется в форму элемента справочника.
3) В форме списка справочника «Номенклатура» вставляется «поле ввода» с именем «ОтборМаркаАвтомобиля» и типом значения - СправочникСсылка.МаркиАвтомобилей, по значению которого нужно организовать отбор в списке «Номенклатура».
4) Пишем процедуру отбора в событии «ПриИзменении» - реквизита «ОтборМаркаАвтомобиля»:

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

Всё.

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Альтаир (Altair777) 08.07.09 12:05
(0) Автор, укажите платформу, для которой предназначена процедура.
А еще лучше напишите аналогичную и для 7.7
2. Михаил Ражиков (tango) 08.07.09 13:37
Характеристики, свойства... За свою короткую жизнь уже дважды реально встречал следы "разработчиков", заводивших в УТ справочники "Размер", "Рост", "Цвет" и соответствующие реквизиты в номенклатуре.
Ваш случай - номер три.
3. Михаил Ражиков (tango) 08.07.09 13:38
минус не поставлю за энтузиазм
4. anry mc (AnryMc) 08.07.09 14:30
(2) А характеристики и свойства подерживают иерархию в отборе???
Как описано:
"Что в дальнейшем позволит делать выборку элементов «Номенклатуры», как по элементу первого уровня - «Мазда» (подходит для всех моделей), так и по элементам второго уровня - «2002 года выпуска» (подходит только для «Мазда» «2002 года выпуска»)."
5. anry mc (AnryMc) 08.07.09 14:36
(3) СПАСИБО!
Рубрика - Методические материалы
Я например только учусь и пока нешел решение убил кучу времени.
6. Дмитрий Павлик (DimaP) 06.10.09 05:48
Супер! А то как раз мучался с этим :)
Спасибо!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа