Copyright © 2010 Promsite. All Rights Reserved.
P  R  O  M  S  I  T  E
Статьи по 1С
стр. 2
стр. 2
ИспользоватьСписокЭлементов()

Разработка кода формирования фильтра

    В примере конфигурации в справочнике Товары элементы исскуственно расположены на всех трех уровнях. Если такой подход будет реализован на практике, например при 10-ти уровневом справочнике, можно представить как с ним тяжело будет работать.  Совершенно правильно дает рекомендации фирма 1С о достаточности 2-3-х уровневого справочника и использовании групп для удобного визуального представления справочников. Но мы преследуем цель создать фильтр, и поэтому усложним задачу и отойдем от этой рекомендации. В результате всех рассуждений получим следующий код и прокомментируем его:

Перем Спр;
//******************************************************************************
Процедура ФормированиеФильтра()
    Сз.УдалитьВсе();
    ИерархическийСписок(1,0); //1
    Спр.ВключатьПодчиненные(0);//2
    Спр.ИспользоватьРодителя(ИспользоватьРодителя());//3
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
        Если Спр.Остаток.Получить(ТекущаяДата())>0 Тогда
            Сз.ДобавитьЗначение(Спр.ТекущийЭлемент());
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
//******************************************************************************
Спр=СоздатьОбъект("Справочник.Товары");
//1 сознательно лишаем пользователя отключать иерархический показ справочника;

//2 отключим выборку элементов справочника на всех без исключения нижеследующих уровнях, но следующим методов включим выборку для выбранной группы.

//3 конструкция Спр.ИспользоватьРодителя(ИспользоватьРодителя()) на мой взгляд, одна из самых КРАСИВЫХ среди всех выражений встроенного языка и поэтому заслуживает подробного изложения. Методы ИспользоватьРодителя()перед скобками и в скобках, хотя и написаны одинаковыми буквами, абсолютно разные методы.

        Метод ИспользоватьРодителя() который в скобках принадлежит модулю формы списка справочника и возвращает значение текущего родителя. Практически это означает, что при клике мышкой на группе мы получаем значение именно этой группы. Наглядно это можно посмотреть в Отладчике.

        Метод ИспользоватьРодителя() который перед скобками принадлежит контексту всего справочника и при наличии параметра просто устанавливает выборку среди группы значение которой определено в параметре.

        Т.е все ясно: интерактивно выбираем группу, значение этой группы заставляет при использовании метода ИспользоватьРодителя() осуществлять выборку в пределах означенной группы.

    Далее начинаем собственно выборку и проверяем по условию есть ли товар на остатке. Если таковой имеется, то добавляем его в список значений. Фильтр готов.

   Теперь остается это фильтр применить. Для этого после выражения КонецЦикла просто дописываем: ИспользоватьСписокЭлементов(Сз);.

   Но в таком виде код использовать, конечно, нельзя. Т.к. во-первых не был задействован флажок Наличие, во-вторых кнопка Фильтр использовалась лишь для объяснения механизма формирования фильтра и в работе она ни к чему, в-третьих при навигации по группам справочника опять возникают эти дурацкие вопросики (а возникают они потому, что при смене родителя не меняется фильтр). Идем дальше на доработку кода.


страницы: 1   2   3
страницы: 1   2   3

Для отображения Облака ссылок
необходим
Adobe Flash Player 9
или выше.