На PORTA.ru
ОГРОМНЫЙ выбор портативной техники:
MD-плееры CD-плееры MP3-плееры Кассетные плееры Диктофоны Радио Цифр. камеры Сотовые Дешевые ноутбуки |
||
Непонятные элементы с вопросительными знаками в многоуровневом справочнике при ИспользоватьСписокЭлементов Представим
себе, что у нас есть справочник с количеством уровней равным 3. Есть следующие
элементы справочников: 1 - уровень "Ур1" группа, в котором,
есть 2 - уровень "Ур2" тоже группа и в ней 3 - уровень это элемент
"Эл1" и "Эл2". Вы составили список значений, который
включает все эти группы и "Эл1", то в этом случае, если вы не
учли на каком уровне сейчас находится пользователь в списке справочника
и передали этот список, то у вас появятся эти волшебные знаки вопроса,
потому что вы указали 1С вывести элементы находящиеся на разных уровнях.
Поэтому следует определять - на каком уровне находится пользователь и
передавать список элементов и групп ТОЛЬКО текущего уровня.
<сообщил Deb> // Когда справочник открывается на верхнем уровне, то ИспользоватьРодителя() возвращает пустое значение. // Значит, когда ты ставишь его для справочника Справ, оно не срабатывает и перебираются все значения абсолютно, // включая все, что в группах. // Второй момент - если входишь в группу, то там нужно свой список организовать. // Поможет предопределенная процедура ПриВыбореРодителя(Элемент). // Но учти, что в ней еще не установлен родитель тоже, как мне кажется, т.е. фильтруй сразу по значению элемента. // Короче - у меня работает такой код: Процедура ПриОткрытии() Список=СоздатьОбъект("СписокЗначений"); Справ=СоздатьОбъект("Справочник.Контрагенты"); Справ.ВыбратьЭлементы(1); Пока Справ.ПолучитьЭлемент()=1 Цикл Если ПустоеЗначение(Справ.Родитель)=0 Тогда Продолжить; КонецЕсли; Список.ДобавитьЗначение(Справ.ТекущийЭлемент()); КонецЦикла; ИспользоватьСписокЭлементов(Список); КонецПроцедуры Процедура ПриВыбореРодителя(Элемент) Список=СоздатьОбъект("СписокЗначений"); Справ=СоздатьОбъект("Справочник.Контрагенты"); Если ПустоеЗначение(Элемент)=1 Тогда Справ.ВыбратьЭлементы(1); Пока Справ.ПолучитьЭлемент()=1 Цикл Если ПустоеЗначение(Справ.Родитель)=0 Тогда Продолжить; КонецЕсли; Список.ДобавитьЗначение(Справ.ТекущийЭлемент()); КонецЦикла; Иначе Справ.ИспользоватьРодителя(Элемент); Справ.ВыбратьЭлементы(1); Пока Справ.ПолучитьЭлемент()=1 Цикл Список.ДобавитьЗначение(Справ.ТекущийЭлемент()); КонецЦикла; КонецЕсли; ИспользоватьСписокЭлементов(Список); КонецПроцедуры <сообщил Div0> -
Наверх -
|
В качестве благодарности за решение проблемы, щелкните здесь. Поддержите развитие сайта. Спасибо! |
Автор и разработчик: Кайгородов Андрей aka mszsuz. mszsuz@online.sinor.ru ICQ#33993114. Дата последнего обновления страницы: Friday 09.04.2004 16:52 |