IE2017

Скрытие пустых папок при фильтрации (расширение конфигурации для 1С:Документооборот)

Программирование - Работа с интерфейсом

Данное расширение конфигурации 1С:Документооборот автоматически скрывает пустые папки, либо те, в которых не найдено ни одного документа при фильтрации. Для внутренних документов. Основано на транзитивном замыкании запросом.

Проблема: в списке документов (в данном случае внутренних, но актуально и в других справочниках) есть фильтрация, после применения которой фильтруются только документы, а не папки. При большом количестве документов и папок у пользователей возникает сложность - после применения фильтрации, к примеру, по виду документа, приходится искать найденные документы ещё и по папкам, а просмотр списком не всегда уместен.

до  после 

Решение:

1. При открытии и при изменении фильтров получается выборка отфильтрованных документов (переменная СписокИспользуемыхЭлементов).

2. Транзитивным замыканием (за основу взята публикация //infostart.ru/public/158512/ от ildarovich) получаем все папки, в которых находядтся найденые документы, включая их родителей до самого верхнего уровня. Если не получить всех родителей, то соответственно ничего не отобразится.

&НаСервере
Функция ТранзитивноеЗамыкание(ИмяСправочника, МаксимальнаяДлинаПути, СписокИспользуемыхЭлементов) Экспорт

        Пролог = "ВЫБРАТЬ Родитель НачалоДуги, Ссылка КонецДуги ПОМЕСТИТЬ ЗамыканияДлины1 ИЗ Справочник.Номенклатура

        | ГДЕ Родитель <> Значение(Справочник.Номенклатура.ПустаяСсылка)

        | ОБЪЕДИНИТЬ ВЫБРАТЬ Ссылка, Ссылка ИЗ Справочник.Номенклатура;";

        

        Рефрен = "ВЫБРАТЬ РАЗЛИЧНЫЕ ПерваяДуга.НачалоДуги, ВтораяДуга.КонецДуги ПОМЕСТИТЬ ЗамыканияДлины#2 ИЗ ЗамыканияДлины#1 КАК ПерваяДуга

        | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗамыканияДлины#1 КАК ВтораяДуга ПО ПерваяДуга.КонецДуги = ВтораяДуга.НачалоДуги;

        | УНИЧТОЖИТЬ ЗамыканияДлины#1;";

        

        Эпилог = "ВЫБРАТЬ НачалоДуги Предок, КонецДуги Потомок ИЗ ЗамыканияДлины#2 ГДЕ НачалоДуги <> КонецДуги и КонецДуги В(&СписокИспользуемыхЭлементов)";

                

        Запрос = Новый Запрос(СтрЗаменить(Пролог, "Номенклатура", ИмяСправочника));

        

        МаксимальнаяДлинаЗамыканий = 1;

        

        Пока МаксимальнаяДлинаЗамыканий < МаксимальнаяДлинаПути Цикл

            Запрос.Текст = Запрос.Текст + СтрЗаменить(СтрЗаменить(Рефрен, "#1", Формат(МаксимальнаяДлинаЗамыканий, "ЧГ=0")), "#2", Формат(2 * МаксимальнаяДлинаЗамыканий, "ЧГ=0"));

            МаксимальнаяДлинаЗамыканий = 2 * МаксимальнаяДлинаЗамыканий;

        КонецЦикла;

       Запрос.Текст = Запрос.Текст + СтрЗаменить(Эпилог, "#2", Формат(МаксимальнаяДлинаЗамыканий, "ЧГ=0"));

        
        Запрос.УстановитьПараметр("СписокИспользуемыхЭлементов",СписокИспользуемыхЭлементов);

        

        МассивНесипользуемыхГрупп = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Предок");

        

        СписокНеиспользуемыхГрупп = Новый СписокЗначений;

        СписокНеиспользуемыхГрупп.ЗагрузитьЗначения(МассивНесипользуемыхГрупп);

        Для каждого СтрокаМассива из СписокИспользуемыхЭлементов Цикл 

            СписокНеиспользуемыхГрупп.Добавить(СтрокаМассива);

        КонецЦикла;    

        Возврат СписокНеиспользуемыхГрупп;

КонецФункции

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

ОтборПоГруппе = Папки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 

ОтборПоГруппе.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");

ОтборПоГруппе.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;

ОтборПоГруппе.ПравоеЗначение = ГруппаКонструктора;


ЭлементОформления = Папки.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
    
ЭлементОформления = Папки.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Истина );
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Отображать",Истина );

Скачать файлы

Наименование Файл Версия Размер
Расширение конфигурации "Фильтрация папок"
.cfe 146,78Kb
30.12.16
2
.cfe 146,78Kb 2 Скачать

См. также

В этой теме еще нет сообщений.
Оставьте свое сообщение