Есть самописный рег отчет. В этом отчете при создании на сервере срабатывает ф-ция получения Организации по умолчанию.
Так вот, при попытке пользователем создать новый отчет выдает: "Нарушение прав доступа" на метод Загрузить в строке:
ОсновнаяОрганизация = ХранилищеОбщихНастроек.Загрузить("ОсновнаяОрганизация",,,Пользователь).
Причем эта ошибка не возникает при запуске предприятия, когда этот пользователь заходит в 1с и норм возвращает организацию. А когда след раз при попытке создать новый отчет - на этой же строке уже ошибка. Где прокол? Журнал регистации показывает ошибку доступа на Право.АдминистрированиеДанных.
Разобрался, но какой-то бред нестыковочный. Если не передавать в параметр явно пользователя, то никакой проверки на его право администрирования не будет И........ метод вернет значение для ТОГО ЖЕ ТЕКУЩЕГО ПОЛЬЗОВАТЕЛЯ. А если указать
Пользователь = Пользователи.ТекущийПользователь()
и это значение передать в
ОснОрганизация = БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию("ОсновнаяОрганизация",Пользователь),
то сразу будет проверка на Право.АдминистрированиеДанных, а не указать -
ОснОрганизация = БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию("ОсновнаяОрганизация") -
то все покажет также для текущего пользователя без проверки его права на администрирование.
Где логика?
(8)Обратите внимание, что Пользователь в метод Загрузить передается строкой. Если не указать пользователя, то 1с сама поставит ИМЯ текущего пользователя и вернет настройки без административных прав. А "Пользователи.ТекущийПользователь()" после преобразования в строку может оказаться совершенно не именем текущего пользователя, например если возвращается элемент справочника "Пользователи" с наименованием отличным от имени пользователя информационной базы.
То-есть простой рядовой пользователь без этого права не может использовать отчеты, в которых используется метод БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию("ОсновнаяОрганизация",,,Пользователи.ТекущийПользователь()), потому как дальше по стандартному коду есть конструкция
ОсновнаяОрганизация = ХранилищеОбщихНастроек.Загрузить("ОсновнаяОрганизация",,,Пользователь). ???
Разобрался, но какой-то бред нестыковочный. Если не передавать в параметр явно пользователя, то никакой проверки на его право администрирования не будет И........ метод вернет значение для ТОГО ЖЕ ТЕКУЩЕГО ПОЛЬЗОВАТЕЛЯ. А если указать
Пользователь = Пользователи.ТекущийПользователь()
и это значение передать в
ОснОрганизация = БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию("ОсновнаяОрганизация",Пользователь),
то сразу будет проверка на Право.АдминистрированиеДанных, а не указать -
ОснОрганизация = БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию("ОсновнаяОрганизация") -
то все покажет также для текущего пользователя без проверки его права на администрирование.
Где логика?
Тип: Строка.
Ключ объекта настройки.
Подробнее см. в Настройки, автоматически сохраняемые в системном хранилище.
<КлючНастроек> (необязательный)
Тип: Строка.
Ключ загружаемых настроек.
Значение по умолчанию: Пустая строка.
<ОписаниеНастроек> (необязательный)
Тип: ОписаниеНастроек.
Описание настроек.
Если не указан, то описание настройки не загружается.
<ИмяПользователя> (необязательный)
Тип: Строка.
Имя пользователя, настройки которого загружаются.
Если не указан, то загружаются настройки текущего пользователя.
В случае переименования пользователя прежние настройки не загружаются.
Если будет создан пользователь, имя которого совпадает с именем прежнего пользователя, для него будут использованы существующие настройки.
Если указан пользователь, не являющийся текущим пользователем, т.е. делается попытка обратиться к настройкам, не принадлежащим текущему пользователю, то требуется наличие у текущего пользователя права АдминистрированиеДанных.
(8)Обратите внимание, что Пользователь в метод Загрузить передается строкой. Если не указать пользователя, то 1с сама поставит ИМЯ текущего пользователя и вернет настройки без административных прав. А "Пользователи.ТекущийПользователь()" после преобразования в строку может оказаться совершенно не именем текущего пользователя, например если возвращается элемент справочника "Пользователи" с наименованием отличным от имени пользователя информационной базы.
подскажите как решили проблему.
1с сыпется при запуске:
Нарушение прав доступа!
{ОбщийМодуль.БухгалтерскийУчетПереопределяемый.Модуль(1718)}: ЗначениеНастройки = ХранилищеОбщихНастроек.Загрузить(НастройкаВРег,,, ИмяПользователяИБ);
{Обработка.Форма(31)}: ТекущееПодразделение = БухгалтерскийУчетПереопределяемый.ПолучитьЗначениеПоУмолчанию("ОсновноеПодразделениеОрганизации", ТекущийПользователь.Наименование);
Передавать имя пользователя нужно методом:
"ПользователиИнформационнойБазы.ТекущийПользователь().Имя"
И никаких костылей с привилегированным режимом или выдачей админиских прав...
Не знаю актуально ли это кому то в 2024, ноу меня всплыла подобная ошибка в Конфе Альфа 6.
Интегрировали печатную форму УПД от приказа 1096.
Дак вот, выдавала ошибку: {ОбщийМодуль.УправлениеПечатьюПлатформа.Модуль(197)}:ПараметрыПечати = ХранилищеСистемныхНастроек.Загрузить(ИмяПараметровПечати + "_Стандартный", , , "Стандартный");
Косяк с проверкой привилегированного режима. А ползет он из-за того, что внешняя печатная форма залетала в базу в Безопасном режиме. Если в сведениях о ВО прописать безопасный режим = Ложь, то у нас спокойно все заработает.