|
1С 8.2 СКД, внешние данные, роли пользователей, работа со списком значений | ☑ | ||
---|---|---|---|---|
0
kozhem1990
07.06.18
✎
10:24
|
Здравствуйте! Подскажите пожалуйста! Делаю отчет, набор данных - объект, то есть в модуле объекта отчета получаю таблицу значений ролей пользователей, где колонка ролей - это строка с наименованием ролей, затем передаю в СКД как внешний объект эту таблицу. Все отлично, все работает. Но теперь надо настроить отбор в настройках, а именно: сделать так, чтобы можно было выбирать несколько наименований ролей из списка наименований ролей в настройках отчета, а не тупо вводить строку с наименованием... Как передать в СКД список значений с наименованиями ролей, и как привязать его к колонке ролей, которую я передаю в качестве внешнего объекта? Заранее благодарен за любую подсказку.
|
|||
1
Franchiser
гуру
07.06.18
✎
10:31
|
Поставить галочку доступен список значений. Возможно можно его программно заполнить в схеме до инициализации.
|
|||
2
kozhem1990
07.06.18
✎
10:35
|
(1) Ок, а как этот параметр привязать к полю таблицы "Роль", ну в плане, как сделать, чтобы его изменение влияло на таблицу? я Понимаю, что в запросе через амперсант делается например "&ИмяПараметра", а как в объекте это сделать, я без понятия: на закладке "Набор данных" все перерыл уже.
|
|||
3
Franchiser
гуру
07.06.18
✎
10:37
|
Это делается не в запросе а наборах данных СКД, точно не помню на какой закладке
|
|||
4
kozhem1990
07.06.18
✎
10:37
|
(1) Точно, допер, в МО отчета запилить туда же в процедуру "ПриКомпоновкеРезультата"
|
|||
5
kozhem1990
07.06.18
✎
10:40
|
(1) что-то типа этого?
СписокЗначенийРоли = Настройки.ПараметрыДанных.Элементы.Найти("ИмяПараметра"); СписокЗначенийРоли = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(“СписокЗначенийРоли”)); Если СписокЗначенийРоли <> Неопределено Тогда СписокЗначенийРоли.Значение = СписокЗначений; СписокЗначенийРоли.Использование = Истина; КонецЕсли; |
|||
6
Franchiser
гуру
07.06.18
✎
10:41
|
Смотри или превую закладку или где параметры скд
|
|||
7
kozhem1990
07.06.18
✎
10:45
|
Посмотрел, как вы и говорили: создал параметр, строка, поставил галочку "Доступен список значений", попробую как-нибудь его заполнить программно и передать в МО "ПриКомпоновкеРезультата".
|
|||
8
Franchiser
гуру
07.06.18
✎
10:46
|
Думаю, не совсем. У тебя есть схема СКД (макет), который можно изменить программно, сериализовать и тд. В этой схеме нужно как то поставить эту галочку доступен список значений (или сразу ставишь в схеме на закладке параметры), затем там можно определить список, но он может быть задан только статично (это тебе не подходит), этот список нужно как-то программно в макете подменить, т.к. Он виден уже при открытии отчёта. Нужно заново инициализировать компоновщик из источника доступных настроек СКД.
|
|||
9
Franchiser
гуру
07.06.18
✎
10:51
|
Поэкспериментировать для начала на статичном списке, его можно задать в схеме, потом нужно думать как его подменить. Я обычно в таких случаях рисую свою форму, но если у тебя получиться, многим будет полезно.
|
|||
10
DrShad
07.06.18
✎
10:57
|
а почему наименования ролей, а не сами роли?
|
|||
11
kozhem1990
07.06.18
✎
11:02
|
(9) Делаю список, просто ввел два строковых значения, потом попробую в форме отчета (она у меня уже сделана своя) в процедуре "УстановитьПараметрыКомпоновщика()" заполнить список, а уже потом, в МО отчета в процедуре "ПриКомпоновкеРезультата()" запилить его в таблицу значений, которую потом передам в СКД как объект.
(10) я не нашел, где хранятся роли, не на что ссылаться, не нашел таблицы с ними, иначе бы делал запросом, а не объектом. |
|||
12
DrShad
07.06.18
✎
11:04
|
посмотри ПользовательИБ
|
|||
13
kozhem1990
07.06.18
✎
11:14
|
(12) я и получаю из ПользователиИнформационнойБазы.ПолучитьПользователей(), просто потом в СКД какой тип поля задать для колонки "Роли"? нету типа "ПользователиИБ" или "РолиПользователей", и запросом не смог достать, поэтому и нагородил все это)
|
|||
14
kozhem1990
07.06.18
✎
11:15
|
(12) пользователи есть, ошибся, это ссылка на справочник "Пользователи", а на роли нет, нет справочника "Роли".
|
|||
15
DrShad
07.06.18
✎
11:17
|
(14) да, сорри, поднял свой отчет по правам на СКД и там у меня берется в источник данных имя роли, а не сама роль
|
|||
16
DrShad
07.06.18
✎
11:18
|
а для чего отбор ролей нужен?
|
|||
17
kozhem1990
07.06.18
✎
11:40
|
(16) Нужно) Для администратора: запустил отчет и посмотрел, у каких пользователей, скажем, роль "Полные права", или еще какая, и по ссылке перешел к этому пользователи, убрал или назначил новую роль.
|
|||
18
kozhem1990
07.06.18
✎
11:42
|
(16) Пользователей то много, половина тысячи в базе добавлено, какие-то уже давно не актуальны, кто-то не работает, и у каждого пользователя по 6-7 ролей, скажем. Отчетом удобно будет работать.
|
|||
19
kozhem1990
07.06.18
✎
11:43
|
Но а так спасибо всем!) интересную тему затрону ли, как мне кажется...
|
|||
20
Franchiser
гуру
07.06.18
✎
12:02
|
Отпишись что в итоге получилось
|
|||
21
DrShad
07.06.18
✎
12:23
|
(17) в таком случае добавить на форму список, где вбивать интересующие роли
при компоновке результата собирать источник данных и обходом пользователей ИБ и их ролей сравнивать на вхождение в список получишь таблицу пользователей и назначенных ему ролей по списку |
|||
22
kozhem1990
07.06.18
✎
12:39
|
Окей, отпишусь через час где-то, как сделаю все.
|
|||
23
Franchiser
гуру
07.06.18
✎
13:13
|
(21) ну так не интересно, хотелось бы без изменения формы
|
|||
24
DrShad
07.06.18
✎
13:20
|
(23) что мешает создать параметр в схеме и юзать его?
|
|||
25
kozhem1990
07.06.18
✎
13:26
|
А вот как его заполнить в СКД всеми существующими ролями, причем динамично чтобы все было, а не руками добавлять?
Я создал параметр "Роль", тип строка, галочка "Доступен список значений". В форме, в пр-е "УстановитьПараметрыКомпоновщика()" прописал след. код: ПараметрРоли = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Роли"); Если ПараметрРоли <> Неопределено Тогда ИдентификаторРоли = ПараметрРоли.ИдентификаторПользовательскойНастройки; Если Строка(Элементы.КомпоновщикНастроекПользовательскиеНастройкиГруппаКолонок.Родитель.ТекущаяСтрока) = ИдентификаторРоли Тогда СтандартнаяОбработка = Ложь; ПараметрРоли = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ИдентификаторРоли); МассивРолей = Новый Массив; СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("СписокРолей", МассивРолей); СтруктураПараметров.Вставить("ЗаголовокФормы", "Выбор ролей"); РезультатРоль = ОткрытьФормуМодально("ОбщаяФорма.ПодборРолейУправляемая", СтруктураПараметров); Если РезультатРоль = Неопределено Тогда Возврат; КонецЕсли; //здесь кадо как-то заполнить этот параметр "Роль" ТекущийЭлемент = Элементы.ФормаКомандаСформировать; КонецЕсли; КонецЕсли; |
|||
26
kozhem1990
07.06.18
✎
13:27
|
можно было не через общую форму, а через метаданные попробовать заполнить, разницы нет, но у меня пока не получается заполнить списком мой параметр "Роль". туплю что-то.
|
|||
27
kozhem1990
07.06.18
✎
13:28
|
сама форма возвращает коллекцию элементов с сервера
|
|||
28
kozhem1990
07.06.18
✎
13:35
|
Вообщем заполнил свой параметр, криво, но пойдет, я думаю) т.к. в начале значение параметра неопределенно, то нельзя его заполнить в цикле, так я сначала заполнил пустой список значений, а потом этим списком заполнил сам параметр, выглядит это так:
/////////// РезультатРоль = ОткрытьФормуМодально("ОбщаяФорма.ПодборРолейУправляемая", СтруктураПараметров); Если РезультатРоль = Неопределено Тогда Возврат; КонецЕсли; Списокролей = Новый СписокЗначений; Для каждого ЭлементРоль Из РезультатРоль Цикл Если ЗначениеЗаполнено(ЭлементРоль.ПредставлениеРоли) Тогда Списокролей.Добавить(ЭлементРоль.ПредставлениеРоли); Иначе Списокролей.Добавить(ЭлементРоль.ИмяРоли); КонецЕсли; КонецЦикла; ПараметрРоли.Значение = СписокРолей; ///////////// |
|||
29
kozhem1990
07.06.18
✎
13:37
|
а дальше, в МО передать этот списк из параметра и использовать его как параметр в запросе, который формирует мою таблицу пользователей с ролями, которую в свою очередь я передаю как внешний объект в СКД. вот как-то так, товарищи)
|
|||
30
kozhem1990
07.06.18
✎
13:39
|
Если кому интересно, выложу часть кода, когда с МО отчета закончу, если нет, тогда можно закрывать тему.
|
|||
31
Franchiser
гуру
07.06.18
✎
14:14
|
(30) не ну со своей формой понятно, а как сделать чтобы общая форма использовалась
|
|||
32
Franchiser
гуру
07.06.18
✎
14:15
|
(28) у тебя что модальные вызовы разрешены?
|
|||
33
kozhem1990
07.06.18
✎
15:20
|
Видимо да, я не знаю, как там делается, чтобы общая форма модально открывалась, может "Режим открытия окна" ставить в "Независимый" в настройках формы, не знаю... да можно и самому было сделать форму, а получать роли из метаданных, что-то типа этого:
Для каждого Роль Из Метаданные.Роли Цикл СписокРолейКонфигурации.Добавить(МетаРоль.Имя); Конеццикла |
|||
34
Franchiser
гуру
08.06.18
✎
00:04
|
Вот как можно сделать, проверил на внешнем отчете.
Создаем параметр ВалютаОтчета, и в включаем в быстрый доступ. Пишем код в модуль отчета: Процедура ИнициализацияОтчета() // добавляем список доступных значений СписокВалют = Новый СписокЗначений; СписокВалют.Добавить(Справочники.Валюты.НайтиПоКоду("643")); СписокВалют.Добавить(Справочники.Валюты.НайтиПоКоду("840")); ПараметрСхемы = СхемаКомпоновкиДанных.Параметры.Найти("ВалютаОтчета"); ПараметрСхемы.УстановитьДоступныеЗначения(СписокВалют); КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); КонецПроцедуры // ИнициализацияОтчета ИнициализацияОтчета(); Наслаждаемся: можно выбрать валюту из 2-х вариантов по сформированному списку. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |