helpf.pro
Регистрация

v8.3: Группировка условий отбора табличной части на форме

savalv
26.05.2015 09:21Прочитано: 2136

Доброго времени суток, подскажите как можно реализовать отбор как на рисунке? 

Описание: Необходимо для n-пользователей (а именно менеджеров) ограничить просмотр заказов в диапазоне собственного отдела.

Фильтр по одному условию:

Код 1C v 8.3
     
ЭлементыОтбора = Список.Отбор.Элементы;
ЭлементыОтбора.Очистить();
Группа = ЭлементыОтбора.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
Группа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

ЭлементОтбора = Группа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
НовыйПолеКомпоновкиДанных = Новый ПолеКомпоновкиДанных("Ответственный");
ЭлементОтбора.Использование  = Истина;
ЭлементОтбора.ЛевоеЗначение  = НовыйПолеКомпоновкиДанных; 
ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеПоУмолчаниюПользователя(Пользователи.ТекущийПользователь(), "ОсновнойОтветственный");

Можно и так:

Код 1C v 8.3
 УправлениеНебольшойФирмойКлиентСервер.УстановитьЭлементОтбораСписка(Список, "Ответственный", УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеПоУмолчаниюПользователя(Пользователи.ТекущийПользователь(), "ОсновнойОтветственный"), Истина);   

Или даже так:

Код 1C v 8.3
 ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Список,"Ответственный", УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеПоУмолчаниюПользователя(Пользователи.ТекущийПользователь(), "ОсновнойОтветственный"),Неопределено,,Истина);   

В самом документе (ЗаказПокупателя) у меня готовая выборка в соответствии с структурой компании, все условия и данные для отбора есть но реализовать динамическую вложенность группы в группу с условием и  самим отбором не удалось. ( 

Прошу помощи, заранее спасибо!

Yandex
Возможно, вас также заинтересует
Реклама на портале
savalv
26.05.2015 11:55Ответ № 1

Наколдовал следующее (не совсем понимаю как так вышло но заклинание работает):

Код 1C v 8.3
 
//РодительГрупа - это группа в которой состоит данный пользователь/сотрудник.
ПолучитьПользователя = Справочники.Пользователи.Выбрать();
УровеньТакта = 0;
Пока ПолучитьПользователя.Следующий() Цикл
ПолучитьСотрудника = Справочники.Сотрудники.НайтиПоНаименованию(УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеПоУмолчаниюПользователя(ПолучитьПользователя.Ссылка, "ОсновнойОтветственный"));
Если Строка(ПолучитьСотрудника.Родитель) = Строка(РодительГруппа) Тогда
ЭлементыОтбора = Список.Отбор.Элементы;
Попытка
Если УровеньТакта = 0 или УровеньТакта = 6  Тогда
ЭлементыОтбора = Список.Отбор.Элементы;
Иначе
ЭлементыОтбора = Список.Отбор.Элементы[0].Элементы;
КонецЕсли;
Исключение
Сообщить("УровеньТакта, Сброс - "+УровеньТакта+"!");
Сообщить(ОписаниеОшибки());
КонецПопытки;
Группа = ЭлементыОтбора.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
Группа.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ЭлементОтбора = Группа.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
НовыйПолеКомпоновкиДанных = Новый ПолеКомпоновкиДанных("Ответственный");
ЭлементОтбора.Использование  = Истина;
ЭлементОтбора.ЛевоеЗначение  = НовыйПолеКомпоновкиДанных; 
ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение =  УправлениеНебольшойФирмойПовтИсп.ПолучитьЗначениеПоУмолчаниюПользователя(ПолучитьПользователя.Ссылка, "ОсновнойОтветственный");
КонецЕсли;
УровеньТакта = УровеньТакта + 1;
КонецЦикла;

Почему то выбрасывает ошибку, лень разбираться поэтому вложил все в первый стак элементов.

Знатоки, А теперь вопрос : Как можно сократить/улучшить данный код?

И еще одно. Поправьте меня если я ошибаюсь: Смешанная группировка работает также как и последовательно вложенная. (?)

IBReiter
26.05.2015 12:25Ответ № 2

Вообще достаточно одной группы "ИЛИ", а элементы отбора все внутри нее.

Если справочник иерархический по отделам, тогда лучше вид сравнения "В группе". Если какой-нибудь у них реквизит - признак отдела, тогда лучше по нему отбор строить.

E_Migachev
26.05.2015 14:32Ответ № 3

да, а в группе по иерархии не подходит вам?

savalv
09.06.2015 17:04Ответ № 4
Вопрос закрыт!
Подсказка: Для выделения Кода используйте (в редакторе).
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.