Перебор элементов справочника принадлежащих элементу другого справочника, т.е когда один справочник подчинен другому справочнику.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// Получить выборку по указанному контрагенту. Выборка = Справочники.КонтактныеЛица.Выбрать( , Контрагент); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КонтактныеЛица.Ссылка |ИЗ | Справочник.КонтактныеЛица КАК КонтактныеЛица |ГДЕ | КонтактныеЛица.Владелец = &Владелец"; Запрос.УстановитьПараметр("Владелец", Контрагент); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл ОчереднойПодчиненый = Выборка.Ссылка; КонецЦикла; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
//При работе с подчиненным справочником (например, при переборе или поиске элементов) //требуется указать, для какого конкретно элемента-владельца получать подчиненные элементы. //Для этого предназначена процедура ИспользоватьВладельца(ОбъектВладелец) //агрегатного типа данных Справочник. // Пример 1 спр=СоздатьОбъект("Справочник.Модели"); спрМарка=СоздатьОбъект("Справочник.Марки"); спрМарка.НайтиПоНаименованию("BMW"); спр.ИспользоватьВладельца(спрМарка.ТекущийЭлемент()); спр.ВыбратьЭлементы(); Пока спр.ПолучитьЭлемент()=1 Цикл Сообщение(спр.ТекущийЭлемент().Наименование); КонецЦикла; // Пример 2 Спр=СоздатьОбъект("Справочник.Контрагенты"); Попытка дог=СоздатьОбъект("Справочник.Договоры"); исключение Предупреждение("В конфигурации нет справочника ДОГОВОРЫ"); возврат; конецПопытки; Спр.ВыбратьЭлементы();//перебираем справочник-владелец Пока спр.ПолучитьЭлемент()=1 Цикл Если спр.ЭтоГруппа()=1 Тогда продолжить;//группы не имеют подчиненных элементов КонецЕсли; Сообщить("Контрагент "+спр.Наименование+ " его договоры:"); дог.ИспользоватьВладельца(Спр.ТекущийЭлемент());//будем перебирать только //подчиненные владельцу дог.ВыбратьЭлементы(); //перебираем только подчиненные конкретному владельцу Пока дог.получитьЭлемент()=1 Цикл сообщить("----------"+дог.наименование); КонецЦикла; КонецЦикла; |