Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Отображение только групп в Справочнике
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
ZhenyaYa
Здравствуйте! В Документе есть реквизит типа Справочник. Нужно при интерактивном выборе элемента этого справочника отображать и выбирать только группы ( то есть элементы скрыть вообще ).
В документе делаю:
Процедура ПриНачалеВыбораЗначения(Элемент,Флаг)
    Если Элемент="ПодразделениеЗП" Тогда
        Флаг=0;
        ОткрытьПодбор("Справочник.ПодразделенияЗП","ФормаСписка","изТабеля",0);
    КонецЕсли;
КонецПроцедуры


В справочнике в модуле списка :
Процедура ПриОткрытии()
    Параметр=Форма.Параметр;
    Если Параметр="изТабеля" Тогда
        сз=СоздатьОбъект("СписокЗначений");
        спр=СоздатьОбъект("Справочник.ПодразделенияЗП");
        спр.ВыбратьЭлементы();
        Пока спр.ПолучитьЭлемент()=1 Цикл
            Если спр.ЭтоГруппа()=1 Тогда
                сз.ДобавитьЗначение(спр.ТекущийЭлемент());
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    ИспользоватьСписокЭлементов(сз);
    ВыборГруппы(1);
КонецПроцедуры


В результате элементы скрываются, группы выбираются. Но, при этом, при открытии группы в ней не пусто, а вот такие папочки со знаком вопроса (кол-во этих папок соответствуют кол-ву групп в справочнике) :


Как избавиться от них?
ZhenyaYa
Можно закрывать, дошло наконец-то
Vofka
Расскажите решение, возможно ещё кому-то интересно будет.
ZhenyaYa
В справочнике в модуле списка :

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

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


В документе как было:

Процедура ПриНачалеВыбораЗначения(Элемент,Флаг)
    Если Элемент="ПодразделениеЗП" Тогда
        Флаг=0;
        ОткрытьПодбор("Справочник.ПодразделенияЗП","ФормаСписка","изТабеля",0);
    КонецЕсли;
КонецПроцедуры


Вродь все. Подозреваю что еще надо что то подобное написать в процедуру ПриСменеИерархии, но пока этого хватает

ну и создание объектов повыносить в конец модуля желательно

и ВыборГруппы(1) с второй процедуры можно тоже убрать)
Cthulhu
// можно и покороче. не ковыряясь нигде, кроме того места, куда нужно выбрать строго группу:
Процедура ПриНачалеВыбораЗначения(НаимРекв,ФСО,флАвто=1) //предопределенная
  Перем тКонт;
  Если НаимРекв="ПодразделениеЗП" Тогда
    ФСО=0; ОткрытьФорму("Справочник.ПодразделенияЗП",тКонт); тКонт.ВыборГруппы(1);
    тКонт.УстановитьОтбор("<ЛюбойРеквизитСФлажкомОтбора>","Тупо по значению этого самого реквизита, которого ну никак нету");
  КонецЕсли;
КонецПроцедуры //ПриНачалеВыбораЗначения
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.