|   |   | 
| 
 | Создать 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(ОткрытиеРазрешено); Объясните нам и себе что вы тут делаете и зачем. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |