![]() |
![]() |
|
Динамический список ссылок | ☑ | ||
---|---|---|---|---|
0
Taras2011
20.12.11
✎
13:36
|
Добрый день.
Существует необходимость создания динамического списка из справочника Пользователи. Критериями отбора являются ГруппаПользователей и роль ПолныеПрава: Функция ОтборПользователей() экспорт Массив = Новый Массив; //Получить коллекцию значений пользователей информационной базы ПользователиСписок = ПользователиИнформационнойБазы.ПолучитьПользователей(); Для Каждого Пользователь из ПользователиСписок Цикл // Проверить, назначена ли пользователю роль Полные права Если Не Пользователь.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда ФИО = Пользователь.ПолноеИмя; Сотрудник = Справочники.Пользователи.НайтиПоНаименованию(ФИО); Запись = РегистрыСведений.навНеполныеПрава.СоздатьМенеджерЗаписи(); Запись.Пользователь = Сотрудник; Запись.Записать(); Массив.Добавить(Сотрудник.Ссылка); Массив.Добавить(Пользователь.ПолноеИмя); КонецЕсли; КонецЦикла; Возврат Массив; КонецФункции И в модуле формы: &НаКлиенте Процедура ГруппыПользователейПриАктивизацииСтроки(Элемент) ТекущаяГруппа = Элементы.ГруппыПользователей.ТекущаяСтрока; СписокПользователей.Отбор.Элементы.Очистить(); ЭлементОтбора = СписокПользователей.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.Использование = Истина; ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке; ЭлементОтбора.ПравоеЗначение = УстановитьОтборВСпискеПользователей(ТекущаяГруппа); КонецПроцедуры Проблема: плохо работает в веб-клиенте, т.е. список загружается "через раз" (по нечетным щелчкам-записям)))). Возможный способ решения - вытащить результат экспортной функции в какую-то постоянную величину. С использованием регистра сведений все работает, но меня просят решить без его использования. Как мне сделать? |
|||
1
Vladal
20.12.11
✎
13:55
|
Может, отвязаться от клиента и выполнять на сервере?
|
|||
2
Stepa86
20.12.11
✎
14:03
|
(0) а ты зачем при получении массива пользователей еще и регистр пишешь? чтоб работало шустрее??? Отбор на группу через параметр, а не через отбор. Отбор по правам при создании формы через параметр 1 раз
|
|||
3
Taras2011
20.12.11
✎
14:04
|
проблема в многократном обращении к
ПользователиСписок = ПользователиИнформационнойБазы.ПолучитьПользователей(); и Сотрудник = Справочники.Пользователи.НайтиПоНаименованию(ФИО); В идеале было бы получить этот список один раз при открытии и обращаться к какому-то реквизиту формы в дальнейшем. не получается. по моим понятиям, тип реквизита должен быть динамический список, но это решение у меня не заработало... Было бы желательно решить без использования регистра, потому что хранить промежуточные данные в регистре - абсурд... |
|||
4
Stepa86
20.12.11
✎
14:05
|
(3) смотри как сделано в БСП или УТ11
|
|||
5
Taras2011
20.12.11
✎
14:06
|
(2) Не один раз, а при каждой активацией строки.
|
|||
6
Stepa86
20.12.11
✎
14:07
|
(5) нафига каждый раз то? или у тебя пользователям права переназначаются активно?
|
|||
7
Taras2011
20.12.11
✎
14:12
|
(6) динамический список каждый раз новый. при активации строки. понимаешь? нужно вот эти данные, которые сейчас идут в регистр списать в какую-то статическую переменную формы. какую?
|
|||
8
Stepa86
20.12.11
✎
14:14
|
(7) список пользователей с полными правами от этого становиться непостоянным, штоле? Статическая переменная формы называется реквизит формы. И зачем нужен динамический динамический список?
|
|||
9
Taras2011
20.12.11
✎
14:15
|
&НаСервере
Функция УстановитьОтборВСпискеПользователей(ТекущаяГруппа) Массив = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ГруппыПользователейСостав.Ссылка, | ГруппыПользователейСостав.НомерСтроки, | ГруппыПользователейСостав.Пользователь |ИЗ | Справочник.ГруппыПользователей.Состав КАК ГруппыПользователейСостав |ГДЕ | ГруппыПользователейСостав.Ссылка.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", ТекущаяГруппа); СписокСсылок = навПолныеПрава.ОтборПользователей(); Результат = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); Для каждого Сотрудник Из Результат Цикл Для каждого Ссылка Из СписокСсылок Цикл Если Ссылка = Сотрудник Тогда Если НЕ Сотрудник.ПометкаУдаления Тогда Массив.Добавить(Сотрудник); КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; Возврат Массив; КонецФункции Для пояснений... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |