|   |   | 
| 
 | 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-х вариантов по сформированному списку. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |