PORTA.ru - on-line магазин ПОРТАтивной техники.PORTA.ru - on-line магазин ПОРТАтивной техники.

Новости
Мои разработки
FAQ
Ссылки
Форум

Непонятные элементы с вопросительными знаками в многоуровневом справочнике при ИспользоватьСписокЭлементов

Представим себе, что у нас есть справочник с количеством уровней равным 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
1C:TOP-100 Рейтинг ресурсов 1С
Hosted by uCoz