Книга знаний

1С:Предприятие / v8 / Объекты конфигурации / Справочники

v8: 1C 8.0. Задача отбора групп в форме списка справочников

Задача отбора групп в форме списка справочников.Автор статьи: Абырвалг
Последняя редакция №1 от 17.11.06
URL: http://kb.mista.ru/article.php?id=418

Ключевые слова: справочник, группа, отбор


Задача отбора групп в форме списка справочников.

В 8-ой платформе 1С нет возможности осуществить отбор в справочниках таким образом, чтобы можно было ограничить видимость групп в форме списка. В некоторых особо извращенных случаях это ограничивает возможности конфигурации.
Приведем некоторые способы обхода этого ограничения.
1) Можно использовать возможность отбора по владельцу.
СправочникДерево.Отбор.Владелец.Использование=Истина;
СправочникДерево.Отбор.Владелец.Значение=Владелец;
СправочникСписок.Отбор.Владелец.Использование=Истина;
СправочникСписок.Отбор.Владелец.Значение=Владелец;

Это сделано для устранения глюка платформы релиза 8.06 (1С его уже признала, обещала исправить
Если хотите посмотреть - что за глюк - просто закомментируйте следующие 2 строки
ЭлементыФормы.СправочникСписок.ИерархическийПросмотр=Ложь;
ЭлементыФормы.СправочникСписок.ИерархическийПросмотр=Истина;

В этом случае отбор происходит, но возможности данного метода ограничены. Нельзя осуществить отбор по реквизиту.
2) В форме списка отображаются элементы отдельно, группы отдельно.
Делается это просто:
Стандартная форма списка иерархического справочника, два реквизита типа СправочникСписок.
в одном настраиваем «Просмотр групп и элементов = Группы», в табличном поле Дерево=Истина, ТолькоПросмотр=Ложь, в другом соответственно «Просмотр групп и элементов = Элементы», в табличном поле Дерево=Ложь, связь по родителю Дерево.Выбор.
Данный метод позволяет реализовать отбор по любому реквизиту и не сложен в использовании. Но немного пропадает наглядность отображения иерархии.
3) Использование иерархии «Иерархия элементов».
В данном случае также возможен отбор стандартными средствами по любому реквизиту, но есть одно маленькое препятствие – нет групп . Так создадим их… Нам необходимо – создать реквизит (ЭтоЭлемент типа Булево например), в табличных полях указать картинку для строки. И программно регулировать работу с элементами. А именно… Отображение картинок соответствующим строкам, отображение помеченных на удаление элементов. Разделение создания групп и элементов. Сортировку по типу ЭтоЭлемент. Запрет создания подчиненных элементов для элементов с ЭтоЭлемент = Ложь (При условии подчинения элементам).
Процедура ДействияФормыНоваяГруппа(Кнопка)
// Вставить содержимое обработчика.
НоваяГруппа = Справочники.Контрагенты.СоздатьЭлемент();
НоваяГруппа.ЭтоЭлемент = Ложь;
НоваяГруппа.Родитель = ЭлементыФормы.СправочникСписок.ТекущийРодитель;
НоваяГруппа.ПолучитьФорму().Открыть();
КонецПроцедуры

Процедура СправочникДеревоПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Вставить содержимое обработчика.
ОформлениеСтроки.Ячейки.Наименование.ОтображатьКартинку = Истина;
ИндексКартинки = 0;
Если ДанныеСтроки<>Неопределено Тогда
Если ДанныеСтроки.Ссылка.ПометкаУдаления Тогда
ИндексКартинки = 2;
КонецЕсли;
КонецЕсли;
ОформлениеСтроки.Ячейки.Наименование.ИндексКартинки=ИндексКартинки;
КонецПроцедуры

Процедура ПриОткрытии()
// Вставить содержимое обработчика.
СправочникДерево.Отбор.ЭтоЭлемент.Установить(Ложь);
СправочникСписок.Порядок.Установить("ЭтоЭлемент";
КонецПроцедуры

Процедура СправочникСписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
// Вставить содержимое обработчика.
ОформлениеСтроки.Ячейки.Картинка.ОтображатьКартинку = Истина;
ОформлениеСтроки.Ячейки.Картинка.ОтображатьТекст = Ложь;
Если ДанныеСтроки.Ссылка.ЭтоЭлемент Тогда
ИндексКартинки = ?(ДанныеСтроки.Ссылка.ПометкаУдаления,3,1);
Иначе
ИндексКартинки = ?(ДанныеСтроки.Ссылка.ПометкаУдаления,2,0);
КонецЕсли;
ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки=ИндексКартинки;
КонецПроцедуры

Процедура СправочникСписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа)
// Вставить содержимое обработчика.
Отказ = Истина;
НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйЭлемент.ЭтоЭлемент = Истина;
НовыйЭлемент.Родитель = Родитель;
НовыйЭлемент.ПолучитьФорму().Открыть();
КонецПроцедуры

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

Данный метод позволяет наглядно отобразить иерархию, делает отбор по любому доступному для элемента параметру, но имеет один большой минус – надо программно отслеживать работу с группами-элементами. Т.е. быть предельно внимательными. Ну и еще неизвестно как быстро он будет работать на больших объемах.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2024 | Mista.ru

Яндекс.Метрика