Имя: Пароль:
1C
 
Добавить пользователей в группу
0 ivl19
 
01.06.23
10:40
Добрый день! Подскажите пожалуйста, в настоящее время требуется найти пользователей которые входят в определенную группу (справочник ГруппыПользователей - Администратор тестовой базы).
После требуется данных пользователей добавить в другие группы "Открытие внешних обработок" и "Администратор", не совсем ясно как реализовать (
Бух 8.3

ГруппаДоступа = Справочники.ГруппыПользователей.НайтиПоНаименованию("Администратор тестовой базы");  

ГруппаДоступаАдм = Справочники.ГруппыПользователей.НайтиПоНаименованию("Администраторы").ПолучитьОбъект();
ГруппаДоступаОткрОбработок = Справочники.ГруппыПользователей.НайтиПоНаименованию("Открытие внешних обработок").ПолучитьОбъект();
Запрос = Новый Запрос;
Запрос.Текст =
  "ВЫБРАТЬ
  |   СоставыГруппПользователей.Пользователь КАК Пользователь
  |ИЗ
  |   РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
  |ГДЕ
  |   СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей";
Запрос.УстановитьПараметр("ГруппаПользователей",ГруппаДоступа);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
   Сообщение = Новый СообщениеПользователю;
   Сообщение.Текст = "Результат пустой";
   Сообщение.Сообщить();      
Иначе
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл

КонецЦикла;  
КонецЕсли;
1 mikecool
 
01.06.23
11:03
вместо НайтиПоНаименованию используй ссылки на форме обработки
2 ivl19
 
01.06.23
12:32
Это хорошо, а как реализовать добавление в группуПользователей?
3 АОЮБ
 
01.06.23
13:00
Классно
4 timurhv
 
01.06.23
13:02
5 Волшебник
 
01.06.23
13:18
(2) В цикле надо добавить запись в регистр
6 ivl19
 
01.06.23
15:42
"https://its.1c.ru/db/bsp317doc#content:1961:hdoc" ругается на найдены подключенные расширения конфигурации изменяющие роли конфигурации 1с и так на все процедуры которые нашел
7 Мультук
 
01.06.23
15:45
(6)

Код. Показывай свой код. Кроме строчки из (4). Она  и так очевидна

УправлениеДоступом.ВключитьПрофильПользователю(Пользователь, Профиль);
8 ivl19
 
01.06.23
15:49
Сейчас просто проверял :
ПользовательТест = Справочники.Пользователи.НайтиПоНаименованию("1CTester");  
ПрофильТест = Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("Открытие внешних отчетов и обработок");
УправлениеДоступом.ВключитьПрофильПользователю(ПользовательТест, ПрофильТест);
УправлениеДоступомСлужебный.ВключитьПользователяВГруппуДоступа(ПользовательТест, ПрофильТест);
выходит данное сообщение.
Видимо вариант только добавить запись в рс СоставыГруппПользователей
9 ivl19
 
01.06.23
15:50
если это верно, подскажите как правильно добавить запись пожалуйста
10 ivl19
 
01.06.23
16:49
ГруппаДоступа = Справочники.ГруппыПользователей.НайтиПоНаименованию("Администратор тестовой базы");  
ГруппаДоступаАдм = Справочники.ГруппыПользователей.НайтиПоНаименованию("Открытие внешних обработок");
Запрос = Новый Запрос;
Запрос.Текст =
  "ВЫБРАТЬ
  |    СоставыГруппПользователей.Пользователь КАК Пользователь
  |ИЗ
  |    РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
  |ГДЕ
  |    СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей";
Запрос.УстановитьПараметр("ГруппаПользователей",ГруппаДоступа);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда  
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Результат пустой";
    Сообщение.Сообщить();      
Иначе
Выборка = РезультатЗапроса.Выбрать();  
ПользовательТест = Справочники.Пользователи.НайтиПоНаименованию("1CTester");
Пока Выборка.Следующий() Цикл  
ПользователиГрупп = Выборка.Пользователь.ПолучитьОбъект();
НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ГруппаПользователей.Установить(ГруппаДоступаАдм);
НаборЗаписей.Отбор.Пользователь.Установить(ПользовательТест);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись. ГруппаПользователей = ГруппаДоступаАдм;
НоваяЗапись.Пользователь = ПользовательТест;
НаборЗаписей.Записать();
Сообщить(ПользователиГрупп);
КонецЦикла;    
КонецЕсли;
11 Волшебник
 
01.06.23
16:50
(9) Используйте НаборЗаписей или МенеджерЗаписи
12 ivl19
 
01.06.23
16:50
при такой записи запись в РС создается, но доп права не назначаются
13 Волшебник
 
01.06.23
16:50
(10) Не теряйте "лесенку" программы
14 Волшебник
 
01.06.23
16:51
(12) Назначьте доп. права и перезапустите сеанс
15 ivl19
 
01.06.23
16:57
ГруппаДоступа = Справочники.ГруппыПользователей.НайтиПоНаименованию("Администратор тестовой базы");  
ГруппаДоступаАдм = Справочники.ГруппыПользователей.НайтиПоНаименованию("Открытие внешних обработок");
Запрос = Новый Запрос;
Запрос.Текст =
  "ВЫБРАТЬ
  |    СоставыГруппПользователей.Пользователь КАК Пользователь
  |ИЗ
  |    РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
  |ГДЕ
  |    СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей";
Запрос.УстановитьПараметр("ГруппаПользователей",ГруппаДоступа);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда  
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Результат пустой";
    Сообщение.Сообщить();      
Иначе
Выборка = РезультатЗапроса.Выбрать();  
ПользовательТест = Справочники.Пользователи.НайтиПоНаименованию("1CTester");
Пока Выборка.Следующий() Цикл  
ПользователиГрупп = Выборка.Пользователь.ПолучитьОбъект();
НаборЗаписей = РегистрыСведений.СоставыГруппПользователей.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ГруппаПользователей.Установить(ГруппаДоступаАдм);
НаборЗаписей.Отбор.Пользователь.Установить(ПользовательТест);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись. ГруппаПользователей = ГруппаДоступаАдм;
НоваяЗапись.Пользователь = ПользовательТест;
НоваяЗапись.Используется = Истина;
НаборЗаписей.Записать();
Сообщить(ПользователиГрупп);
КонецЦикла;    
КонецЕсли;
Запустил, запись в РС создалась корректно, но пользователь не добавлен в группу доступа "Открытие внешних обработок"
16 Волшебник
 
01.06.23
17:39
(15) Верните программе "лесенку".

И это плохое название переменной:
ГруппаДоступаАдм = Справочники.ГруппыПользователей.НайтиПоНаименованию("Открытие внешних обработок");
17 Волшебник
 
01.06.23
17:40
В Вашем случае лучше пользоваться МенеджерЗаписи, чтобы не уничтожить регистр сведений.
18 ivl19
 
01.06.23
17:50
ГруппаДоступа = Справочники.ГруппыПользователей.НайтиПоНаименованию("Администратор тестовой базы");  
ГруппаДоступаОткрытиеОбработок = Справочники.ГруппыПользователей.НайтиПоНаименованию("Открытие внешних обработок");  
Запрос = Новый Запрос;
Запрос.Текст =
  "ВЫБРАТЬ
  |    СоставыГруппПользователей.Пользователь КАК Пользователь
  |ИЗ
  |    РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
  |ГДЕ
  |    СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей";
Запрос.УстановитьПараметр("ГруппаПользователей",ГруппаДоступа);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда  
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Результат пустой";
    Сообщение.Сообщить();      
Иначе
    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
         ПользователиГрупп = Выборка.Пользователь;
         МенеджерЗаписейПользователи = РегистрыСведений.СоставыГруппПользователей;
         МенеджерЗаписи = МенеджерЗаписейПользователи.СоздатьМенеджерЗаписи();
         МенеджерЗаписи.ГруппаПользователей = ГруппаДоступаОткрытиеОбработок;
         МенеджерЗаписи.Пользователь = ПользователиГрупп;                    
         МенеджерЗаписи.Используется = Истина;
         МенеджерЗаписи.Записать();
    КонецЦикла;    
КонецЕсли;
19 ivl19
 
01.06.23
17:50
так верно?
20 ivl19
 
01.06.23
17:51
записи в РС создаются корректно, но проблема осталась, права у пользователей не расширились(
пользователи не добавились  в группу доступа "Открытие внешних обработок"
21 Волшебник
 
01.06.23
17:56
Право открытия внешних отчётов и обработок регулируется ролью на уровне Конфигуратора, а не на уровне регистра сведений.

Освойте работу с объектом ПользовательИнформационнойБазы
22 ivl19
 
01.06.23
18:00
Задача вообще состоит в том, что необходимо отобрать сотрудников в группе пользователей "Администратор тестовой базы" и добавить им группы доступа "Администратор", "Открытие внешних отчетов и обработок"
23 ivl19
 
01.06.23
18:02
Данный вариант не подходит https://its.1c.ru/db/bsp317doc#content:1961:hdoc, данная процедура УстановитьПравоОткрытияВнешнихОтчетовИОбработок тоже и не ясно как это ещё можно реализовать
24 ivl19
 
02.06.23
09:11
Подскажите есть ещё варианты?(
25 Волшебник
 
02.06.23
10:04
(24) Вы плохо стараетесь. Вам же сказали: "добавить группы доступа". Ну так добавьте! Найдите, где они хранятся и добавьте. Может всё-таки в регистре СоставыГруппПользователей? Да ну, не может быть...
26 Мультук
 
02.06.23
10:09
(25)


Ошибка: "найдены подключенные расширения конфигурации изменяющие роли конфигурации 1с"

По РС "Права ролей" подскажите

Короче, какая-то вселенская печаль.
27 ivl19
 
02.06.23
10:43
ГруппаДоступа = Справочники.ГруппыПользователей.НайтиПоНаименованию("Администратор тестовой базы");  
ГруппаДоступаОткрытиеОбработок = Справочники.ГруппыПользователей.НайтиПоНаименованию("Открытие внешних обработок");  
ГруппаДоступаАдминистратор =  Справочники.ГруппыПользователей.НайтиПоНаименованию("Администраторы");
Запрос = Новый Запрос;
Запрос.Текст =
  "ВЫБРАТЬ
  |    СоставыГруппПользователей.Пользователь КАК Пользователь
  |ИЗ
  |    РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
  |ГДЕ
  |    СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей";
Запрос.УстановитьПараметр("ГруппаПользователей",ГруппаДоступа);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда  
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Результат пустой";
    Сообщение.Сообщить();      
Иначе
    Выборка = РезультатЗапроса.Выбрать();
    ЭлементОбъект = ГруппаДоступаОткрытиеОбработок.ПолучитьОбъект();
    Пока Выборка.Следующий() Цикл
        ПользователиГрупп = Выборка.Пользователь;            
        НоваяСтрока = ЭлементОбъект.Состав.Добавить();
        НоваяСтрока.Пользователь = ПользователиГрупп;
        ЭлементОбъект.Записать();
     КонецЦикла;           
КонецЕсли;
28 ivl19
 
02.06.23
10:45
Просьба пожалуйста подсказать, в настоящее время пользователи добавляются в нужную группу:
1) Как сделать проверку на наличие подобной записи, чтобы записи не дублировались?
2) как таким же образом добавить данных пользователей ещё в одну группу, чтобы сразу пользователи добавлялись в 2 группы?
29 Волшебник
 
02.06.23
10:45
(27) лишняя переменная ПользователиГрупп

        НоваяСтрока = ЭлементОбъект.Состав.Добавить();
        НоваяСтрока.Пользователь = Выборка.Пользователь;
        ЭлементОбъект.Записать();
30 Волшебник
 
02.06.23
10:46
(28)
1) Используйте метод НайтиСтроки
2) по аналогии
31 ivl19
 
02.06.23
13:03
ГруппаДоступа = Справочники.ГруппыПользователей.НайтиПоНаименованию("Администратор тестовой базы");  
ГруппаДоступаОткрытиеОбработок = Справочники.ГруппыПользователей.НайтиПоНаименованию("Открытие внешних обработок");  
ГруппаДоступаАдминистратор =  Справочники.ГруппыПользователей.НайтиПоНаименованию("Администраторы");
Запрос = Новый Запрос;
Запрос.Текст =
  "ВЫБРАТЬ
  |    СоставыГруппПользователей.Пользователь КАК Пользователь
  |ИЗ
  |    РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
  |ГДЕ
  |    СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей";
Запрос.УстановитьПараметр("ГруппаПользователей",ГруппаДоступа);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда  
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Результат пустой";
    Сообщение.Сообщить();      
Иначе
    Выборка = РезультатЗапроса.Выбрать();
    ЭлементОбъект = ГруппаДоступаОткрытиеОбработок.ПолучитьОбъект();
    ЭлементОбъектАдминистратор = ГруппаДоступаАдминистратор.ПолучитьОбъект();  
    
    тз = Новый ТаблицаЗначений;
    тз.Колонки.Добавить("Группы");  
    НоваяСтрока = тз.Добавить();
    НоваяСтрока.Группы = ГруппаДоступаОткрытиеОбработок;
    НоваяСтрока = тз.Добавить();
    НоваяСтрока.Группы = ГруппаДоступаАдминистратор;
    
    ПараметрыПоиска = Новый Структура;
    ПараметрыПоиска.Вставить("Группы",ГруппаДоступаОткрытиеОбработок);
    ПараметрыПоиска.Вставить("Группы",ГруппаДоступаАдминистратор);

    МассивСтрок = ТЗ.НайтиСтроки(ПараметрыПоиска);
    Для Каждого ЭлементаСтрок Из  МассивСтрок Цикл
        Пока Выборка.Следующий() Цикл      
            НоваяСтрока = ЭлементОбъект.Состав.Добавить();
            НоваяСтрока.Пользователь = Выборка.Пользователь;
            ЭлементОбъект.Записать();      
        КонецЦикла;
    КонецЦикла;           
КонецЕсли;
1) GПодскажите пожалуйста в МассивСтрок  записывается только одна строка, хотя 2 отбора указано. По отдельности записывает и тот и тот, как сделать чтобы две строки записалось?
2) Как правильно указать ЭлементаСтрок  в Пока Выборка.Следующий() Цикл  чтобы добавляли в обе группы?
32 Мультук
 
02.06.23
13:28
(31)


Если в "состав"  нет данного пользователя -- добавляем.
Можно искать с помощью НайтиСтроки.


Если ГруппаДоступаОткрытиеОбработок.Состав.Найти(Выборка.Пользователь, "Пользователь") = Неопределено Тогда
   НоваяСтрока = ЭлементОбъект.Состав.Добавить();
   НоваяСтрока.Пользователь = Выборка.Пользователь;
   ЭлементОбъект.Записать();      
КонецЕсли;


P.S.
То что вы написали про "НайтиСтроки", это даже не бред, высасывание из пальца.


https://helpf.pro/faq/view/954.html

Там много "устаревшего" кода, но есть и вполне себе.
33 ivl19
 
02.06.23
15:15
Вообщем вот что получилось, подскажите насколько корректно пожалуйста? при проверке, пользователи которые находятся в группе Администратор тестовой базы, при запуске кода добавляются в группы "Открытие внешних обработок" и "Администраторы". Если такой пользователь в группе есть повторно не добавляется.

ГруппаДоступа = Справочники.ГруппыПользователей.НайтиПоНаименованию("Администратор тестовой базы");  
ГруппаДоступаОткрытиеОбработок = Справочники.ГруппыПользователей.НайтиПоНаименованию("Открытие внешних обработок").ПолучитьОбъект();  
ГруппаДоступаАдминистратор =  Справочники.ГруппыПользователей.НайтиПоНаименованию("Администраторы").ПолучитьОбъект();
Запрос = Новый Запрос;
Запрос.Текст =
  "ВЫБРАТЬ
  |    СоставыГруппПользователей.Пользователь КАК Пользователь
  |ИЗ
  |    РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
  |ГДЕ
  |    СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей";
Запрос.УстановитьПараметр("ГруппаПользователей",ГруппаДоступа);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда  
          Выборка = РезультатЗапроса.Выбрать();
         ТЗ = Новый ТаблицаЗначений;
         ТЗ.колонки.Добавить("Группы");
         НоваяСтрока =  ТЗ.Добавить();
         НоваяСтрока.Группы = ГруппаДоступаОткрытиеОбработок;
         НоваяСтрока =  ТЗ.Добавить();
         НоваяСтрока.Группы = ГруппаДоступаАдминистратор;
    Пока Выборка.Следующий() Цикл
        Если ГруппаДоступаОткрытиеОбработок.Состав.Найти(Выборка.Пользователь, "Пользователь") = Неопределено Тогда          
            Для каждого СтрокаТЗ Из ТЗ Цикл    
                ГруппыДоступа =  СтрокаТЗ.Группы;
                  НоваяСтрока = ГруппыДоступа.Состав.Добавить();
                НоваяСтрока.Пользователь = Выборка.Пользователь;
                ГруппыДоступа.Записать();  
            КонецЦикла;  
        КонецЕсли;          
     КонецЦикла;        
Иначе
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Результат пустой";
    Сообщение.Сообщить();      
КонецЕсли;
34 ivl19
 
02.06.23
16:31
ГруппаДоступа = Справочники.ГруппыПользователей.НайтиПоНаименованию("Администратор тестовой базы");  
ГруппаДоступаОткрытиеОбработок = Справочники.ГруппыПользователей.НайтиПоНаименованию("Открытие внешних обработок").ПолучитьОбъект();  
ГруппаДоступаАдминистратор =  Справочники.ГруппыПользователей.НайтиПоНаименованию("Администраторы").ПолучитьОбъект();            
Запрос = Новый Запрос;
Запрос.Текст =
  "ВЫБРАТЬ
  |    СоставыГруппПользователей.Пользователь КАК Пользователь
  |ИЗ
  |    РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
  |ГДЕ
  |    СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей";
Запрос.УстановитьПараметр("ГруппаПользователей",ГруппаДоступа);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда  
          Выборка = РезультатЗапроса.Выбрать();
         ТЗ = Новый ТаблицаЗначений;
         ТЗ.колонки.Добавить("Группы");
         НоваяСтрока =  ТЗ.Добавить();
         НоваяСтрока.Группы = ГруппаДоступаОткрытиеОбработок;
         НоваяСтрока =  ТЗ.Добавить();
         НоваяСтрока.Группы = ГруппаДоступаАдминистратор;
         Пока Выборка.Следующий() Цикл  
             Для каждого СтрокаТЗ Из ТЗ Цикл
                 ГруппыДоступа =  СтрокаТЗ.Группы;
                Если ГруппыДоступа.Состав.Найти(Выборка.Пользователь, "Пользователь") = Неопределено Тогда              
                      НоваяСтрока = ГруппыДоступа.Состав.Добавить();
                    НоваяСтрока.Пользователь = Выборка.Пользователь;
                    ГруппыДоступа.Записать();  
                   КонецЕсли;  
            КонецЦикла;
         КонецЦикла;              
КонецЕсли;
35 ivl19
 
06.06.23
11:04
Подскажите пожалуйста в итоге перебрал не много код, и теперь вопрос как в процедуре ДобавитьПользователяВГруппуДоступа добавить пользователей в данные группы?

Процедура ДобавитьПользователяВГруппуДоступа(груп,польз)    
    
КонецПроцедуры
Процедура ДобавитьПользователяВГруппуПользователей(группаДоступа, пользователи)
    
    группаДоступаОбъект = группаДоступа.ПолучитьОбъект();
    группаДоступаОбъект.Пользователи.Загрузить(пользователи);
    группаДоступаОбъект.Записать();
    
КонецПроцедуры

ГруппаДоступаАдминистраторТБ = Справочники.ГруппыПользователей.НайтиПоНаименованию("Администратор тестовой базы");  
ГруппаДоступаОткрытиеОбработок = Справочники.ГруппыПользователей.НайтиПоНаименованию("Открытие внешних обработок");  
ГруппаДоступаАдминистратор =  Справочники.ГруппыПользователей.НайтиПоНаименованию("Администраторы");    
Администратрор = Справочники.ГруппыДоступа.НайтиПоНаименованию("Администраторы");

списокГруппПользователей = Новый СписокЗначений;
списокГруппПользователей.Добавить(ГруппаДоступаАдминистраторТБ);
списокГруппПользователей.Добавить(ГруппаДоступаОткрытиеОбработок);
списокГруппПользователей.Добавить(ГруппаДоступаАдминистратор);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    СоставыГруппПользователей.Пользователь КАК Пользователь
|ИЗ
|    РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей
|ГДЕ
|    СоставыГруппПользователей.ГруппаПользователей = &ГруппаПользователей";
Запрос.УстановитьПараметр("ГруппаПользователей",ГруппаДоступаАдминистраторТБ);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();


ДобавитьПользователяВГруппуПользователей(Администратрор, РезультатЗапроса);  

Для каждого группа Из списокГруппПользователей Цикл    
    ДобавитьПользователяВГруппуДоступа(группа, РезультатЗапроса);
КонецЦикла;
36 Волшебник
 
06.06.23
11:09
(35) У Вас программный код снаружи процедуры
37 Волшебник
 
06.06.23
11:09
а процедура ДобавитьПользователяВГруппуДоступа вообще пустая
38 ivl19
 
06.06.23
11:11
Вот тут ДобавитьПользователяВГруппуДоступа  и вопрос как в данной процедуре добавить пользователей в группы
39 Волшебник
 
06.06.23
11:56
(38) Что Вы под этим подразумеваете?