|
Создать 1С обработку по назначению прав | ☑ | ||
---|---|---|---|---|
0
yuran9393
24.05.23
✎
16:38
|
Добрый день! Не давно в 1С разработке, подскажите пожалуйста, есть задача по которой требуется создать внешнюю обработку по назначению прав пользователям, в конфигурации Бухгалтерия предприятия 8.3
Создал внешнюю обработку и в модуле объекта решил использовать процедуру "Процедура УстановитьПравоОткрытияВнешнихОтчетовИОбработок(ОткрытиеРазрешено) Экспорт". Есть несколько вопросов: 1)Как правильно вызвать экспортную процедуру во внешней обработке, чтобы можно было запускать ее скриптом и она отрабатывала? 2)Верную ли процедуру использую? 3)Что нужно изменить в коде ниже? Данный код прописал во внешнюю обработку, но не отрабатывает. Заранее большое спасибо. ПроцедураПроцедура УстановитьПравоОткрытияВнешнихОтчетовИОбработок(ОткрытиеРазрешено) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат; КонецЕсли; ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); ПараметрыАдминистрирования.Вставить("ПринятоРешениеПоОткрытиюВнешнихОтчетовИОбработок", Истина); СтандартныеПодсистемыСервер.УстановитьПараметрыАдминистрирования(ПараметрыАдминистрирования); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.УстановитьПравоОткрытияВнешнихОтчетовИОбработок(ОткрытиеРазрешено); Возврат; КонецЕсли; РольАдминистраторСистемы = Метаданные.Роли.АдминистраторСистемы; РольИнтерактивноеОткрытие = Метаданные.Роли.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок; //ПользователиИБ = ПользователиИнформационнойБазы.ПолучитьПользователей(); ПользовательИБ = Справочники.Пользователи.НайтиПоНаименованию("Тестовый пользователь"); ПользовательИзменен = Ложь; ЕстьРольИнтерактивногоОткрытия = ПользовательИБ.Роли.Содержит(РольИнтерактивноеОткрытие); Если ОткрытиеРазрешено Тогда Если Не ЕстьРольИнтерактивногоОткрытия Тогда ПользовательИБ.Роли.Добавить(РольИнтерактивноеОткрытие); ПользовательИзменен = Истина; КонецЕсли; Иначе Если ЕстьРольИнтерактивногоОткрытия Тогда ПользовательИБ.Роли.Удалить(РольИнтерактивноеОткрытие); ПользовательИзменен = Истина; КонецЕсли; КонецЕсли; ЕстьРольАдминистраторСистемы = ПользовательИБ.Роли.Содержит(РольАдминистраторСистемы); Если ОткрытиеРазрешено Тогда Если Не ЕстьРольАдминистраторСистемы Тогда ПользовательИБ.Роли.Добавить(РольАдминистраторСистемы); ПользовательИзменен = Истина; КонецЕсли; Иначе Если ЕстьРольАдминистраторСистемы Тогда ПользовательИБ.Роли.Удалить(РольАдминистраторСистемы); ПользовательИзменен = Истина; КонецЕсли; КонецЕсли; Если ПользовательИзменен Тогда ПользовательИБ.Записать(); КонецЕсли; ОписаниеНастроек = Новый ОписаниеНастроек; ОписаниеНастроек.Представление = НСтр("ru = 'Предупреждение безопасности'"); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "ПредупреждениеБезопасности", "ПользовательОзнакомлен", Истина, ОписаниеНастроек, ПользовательИБ.Имя); КонецПроцедуры |
|||
1
Волшебник
24.05.23
✎
16:38
|
а где вызов процедуры?
|
|||
2
yuran9393
24.05.23
✎
16:40
|
в конце добавить Пользователи.УстановитьПравоОткрытияВнешнихОтчетовИОбработок(ОткрытиеРазрешено); ?
|
|||
3
Волшебник
24.05.23
✎
16:42
|
(2) Что такое "Пользователи"?
|
|||
4
yuran9393
24.05.23
✎
16:48
|
в конфе есть "Общие модули", там есть модуль под названием "Пользователи". В котором прописана экспортная процедура "Процедура УстановитьПравоОткрытияВнешнихОтчетовИОбработок(ОткрытиеРазрешено) Экспорт
" которую я вызываю в обработке. |
|||
5
Волшебник
24.05.23
✎
16:58
|
(4) Тогда всё правильно. Проверьте только ещё флаги "Сервер" и "Вызов сервера".
|
|||
6
yuran9393
24.05.23
✎
17:23
|
"флаги "Сервер" и "Вызов сервера" а где их проверить?
и подскажи пожалуйста как можно прописать пользователя как параметр? чтобы всегда не менять в ПользовательИБ = Справочники.Пользователи.НайтиПоНаименованию("Тестовый пользователь"); |
|||
7
Волшебник
24.05.23
✎
17:32
|
(6) в свойствах общего модуля
|
|||
8
yuran9393
24.05.23
✎
17:35
|
В свойствах общего модуля проставлен флаг "Сервер" , "Внешнее соединение", "Клиент".
В "Вызов сервера" флаг не установлен и не доступен для редактирования. |
|||
9
Волшебник
24.05.23
✎
19:13
|
(8) Ваша процедура делает слишком много лишнего по сравнению с тем, как она называется. Сократите её до пары строчек.
|
|||
10
yuran9393
24.05.23
✎
22:46
|
Понял, спасибо большое за помощь
|
|||
11
yuran9393
25.05.23
✎
12:47
|
Подскажите пожалуйста в настоящее время в модуле объекта внешней обработки прописал след код, но он не отрабатывает при открытии обработки.
Процедура УстановитьПравоОткрытияВнешнихОтчетовИОбработок2(ОткрытиеРазрешено) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат; КонецЕсли; ПараметрыАдминистрирования = СтандартныеПодсистемыСервер.ПараметрыАдминистрирования(); ПараметрыАдминистрирования.Вставить("ПринятоРешениеПоОткрытиюВнешнихОтчетовИОбработок", Истина); СтандартныеПодсистемыСервер.УстановитьПараметрыАдминистрирования(ПараметрыАдминистрирования); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.УстановитьПравоОткрытияВнешнихОтчетовИОбработок2(ОткрытиеРазрешено); Возврат; КонецЕсли; РольАдминистраторСистемы = Метаданные.Роли.АдминистраторСистемы; РольИнтерактивноеОткрытие = Метаданные.Роли.ИнтерактивноеОткрытиеВнешнихОтчетовИОбработок; ПользовательИБ = Справочники.Пользователи.НайтиПоНаименованию("ТестовыйПользователь"); ПользовательИзменен = Ложь; ЕстьРольИнтерактивногоОткрытия = ПользовательИБ.Роли.Содержит(РольИнтерактивноеОткрытие); Если ОткрытиеРазрешено Тогда Если Не ЕстьРольИнтерактивногоОткрытия Тогда ПользовательИБ.Роли.Добавить(РольИнтерактивноеОткрытие); ПользовательИзменен = Истина; КонецЕсли; Иначе Если ЕстьРольИнтерактивногоОткрытия Тогда ПользовательИБ.Роли.Удалить(РольИнтерактивноеОткрытие); ПользовательИзменен = Истина; КонецЕсли; КонецЕсли; Если ПользовательИзменен Тогда ПользовательИБ.Записать(); КонецЕсли; ЕстьРольАдминистраторСистемы = ПользовательИБ.Роли.Содержит(РольАдминистраторСистемы); Если ОткрытиеРазрешено Тогда Если Не ЕстьРольАдминистраторСистемы Тогда ПользовательИБ.Роли.Добавить(РольАдминистраторСистемы); ПользовательИзменен = Истина; КонецЕсли; Иначе Если ЕстьРольАдминистраторСистемы Тогда ПользовательИБ.Роли.Удалить(РольАдминистраторСистемы); ПользовательИзменен = Истина; КонецЕсли; КонецЕсли; Если ПользовательИзменен Тогда ПользовательИБ.Записать(); КонецЕсли; ОписаниеНастроек = Новый ОписаниеНастроек; ОписаниеНастроек.Представление = НСтр("ru = 'Предупреждение безопасности'"); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( "ПредупреждениеБезопасности", "ПользовательОзнакомлен", Истина, ОписаниеНастроек, ПользовательИБ.Имя); КонецПроцедуры УстановитьПравоОткрытияВнешнихОтчетовИОбработок2(Истина); |
|||
12
Волшебник
25.05.23
✎
12:49
|
(11) Какой текст ошибки?
|
|||
13
yuran9393
25.05.23
✎
12:55
|
Ошибки нет, но права не назначаются указанному пользователю.
ПользовательИБ = Справочники.Пользователи.НайтиПоНаименованию("ТестовыйПользователь") пользователя с таким наименованием находит корректно во внешнюю обработку форму не добавлял, все прописал в модуль объекта, так как требуется чтобы при запуске скриптом обработки, она сразу отрабатывала и выдавал права |
|||
14
Волшебник
25.05.23
✎
12:56
|
(13) Уберите лишние строчки из процедуры и оставьте только те, которые назначают право открытия внешних отчётов и обработок.
|
|||
15
Мультук
25.05.23
✎
13:11
|
Создал новую обработку
Добавил в модуль строки: //============================ Процедура Тест() Экспорт Сообщить("Это тест"); КонецПроцедуры Тест(); //============================ Создал пустую форму в этой обработке. Назначил её формой в "Форма обработки". Это важно! Файл->Открыть открываю эту обработку Закрываю, Вижу строку в сообщениях "Это тест" P.S. УТ 11.5 Управляемые формы. |
|||
16
yuran9393
25.05.23
✎
13:33
|
как описано выше проверил обработку сообщение "Это тест" вывело корректно,
при аналогичном запуске моей обработки "Файл->Открыть открываю эту обработку" выходит сообщение: К сожалению произошла не предвиденная ошибка. Попробуйте повторить операцию. Если ошибка повторится попробуйте перезапустить приложение или обратиться к администратору приложения. Ошибка стала выходить после "Создал пустую форму в этой обработке. Назначил её формой в "Форма обработки". Это важно!" |
|||
17
Мультук
25.05.23
✎
13:40
|
(16)
>>Ошибка стала выходить после "Создал пустую форму в этой обработке. Назначил её формой в "Форма обработки". Это важно!" Потому что ваша процедура начала всё же запускаться. В 1С есть отладчик -- вы зря им не пользуетесь. P.S. Может всё же лучше сначала курсы и книги по программированию ? Простите, но сейчас на ум приходят анекдот про Шекспира, печатную машинку и теорию вероятности P.P.S. МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.УстановитьПравоОткрытияВнешнихОтчетовИОбработок2(ОткрытиеРазрешено); Объясните нам и себе что вы тут делаете и зачем. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |