Имя: Пароль:
1C
1С v8
Как игнорировать "Пользователю недостаточно прав для выполнения операции"
0 Boudybuilder
 
19.10.15
20:08
Спотыкаемся все время тут
Карта = Справочники.ИнформационныеКарты.НайтиПоРеквизиту("КодКарты",Данные);

На пользователе без прав администратора.

Можно ли как то в этом куске кода отключить проверку прав на чтение. И после выполнения снова включить.

Какое решение есть чтобы получить значение ссылку на эту "Карту" ?
1 VitShvets
 
19.10.15
20:18
Вижу 3 варианта:
2 VitShvets
 
19.10.15
20:21
(1) :
1. Дать всем право на неинтерактивное чтение. Поможет, если карта используется где-то внутри алгоритма для расчета и не показывается клиенту.
2. Тоже самое, что и п.1, но без ролей. См. "УстановитьПривилегированныйРежим(<Включить>)"
3. Если данная карта где-то отображается, то придется дать доступ на просмотр.
3 Boudybuilder
 
19.10.15
20:24
(3) Спасибо!
УстановитьПривилегированныйРежим() - Это мне и надо было. Просто из головы выскочило :)
4 Boudybuilder
 
07.11.15
12:40
Доброго здоровья, друзья!
Продолжу свою тему.

Процедура такова:

Процедура ВнешнееСобытие(Источник, Событие, Данные)
        
    Если Не ВводДоступен() Тогда
        Возврат;
    КонецЕсли;
    
    // Фантич - сначала проверим находимся ли мы на поле ввода менеджера, и заполним его если да
    Если Этаформа.ТекущийЭлемент = ЭлементыФормы.Менеджер Тогда
        ЗаполнитьМенеджера(Данные);
        Сообщить(Данные);
        Возврат;
    КонецЕсли;
    
    // Фантич - проверим регистрационная карта ли это для возможности изменения документа
    Если ПустаяСтрока(Данные) Тогда
        Возврат;
    КонецЕсли;
    
    УстановитьПривилегированныйРежим(Истина);
    
    Карта = Справочники.ИнформационныеКарты.НайтиПоРеквизиту("КодКарты",Данные);
    
    Если НЕ Карта = Справочники.ИнформационныеКарты.ПустаяСсылка() И Карта.ТипКарты = Перечисления.ТипыИнформационныхКарт.Регистрационная Тогда
        Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Карта.ВладелецКарты.ИдентификаторПользователяИБ);
        Если Не Пользователь.Роли.Содержит(Метаданные.Роли.ПолныеПрава) Тогда
            Предупреждение("На изменение документа нет прав!");
        Иначе
            ЭтаФорма.ТолькоПросмотр = Ложь;
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    УстановитьПривилегированныйРежим(Ложь);
    
    // Если нет то выполним стандартные типовые действия
    ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма);
    
КонецПроцедуры // ВнешнееСобытие()



Спотыкается на серверной:

{Документ.ЧекККМ.Форма.ФормаДокумента.Форма(1036)}: Ошибка при вызове метода контекста (НайтиПоУникальномуИдентификатору)
  Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Карта.ВладелецКарты.ИдентификаторПользователяИБ);
по причине:
Пользователю недостаточно прав для выполнения операции.


А на файловой работает.
5 User_Agronom
 
07.11.15
13:18
(3) УстановитьПривилегированныйРежим() работает только на сервере.

Пиши в серверном модуле процедуру и вызывай её когда нужно.
6 Boudybuilder
 
07.11.15
13:34
(5) В модуле объекта Документ Чек ККМ ?

Вне этого: #Если Клиент Тогда?
7 Boudybuilder
 
10.11.15
22:02
Сделал в модуле документа


&НаСервере

Процедура ВключитьВыключитьПривилегированныйРежим(Значение) Экспорт

УстановитьПривилегированныйРежим(Значение);


КонецПроцедуры


И вызываю ее из модуля формы документа.
Пишет что процедура не найдена. :(
8 Boudybuilder
 
11.11.15
18:38
Это конец!
Пользователь = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Карта.ВладелецКарты.ИдентификаторПользователяИБ);
по причине:
Пользователю недостаточно прав для выполнения операции.


Я уже задолбался. Сделал в серверном  общем модуле процедуру. Перед этим поставил УстановитьПривилегированныйРежим(Истина);
И все равно права не дает.

Мне просто надо получить информационную карту, и проверить есть ли у ее владельца права администратора.
9 ice777
 
11.11.15
18:43
Блин, кто-то думал права раставлял, а тут пришел ТС и дуболомным методом фигачит.

я бы выгнал тс нахрен.
10 VikingKosmo
 
11.11.15
18:43
После
>> Карта = Справочники.ИнформационныеКарты.НайтиПоРеквизиту("КодКарты",Данные);

1С отказывается работать и я ее понимаю...
11 Boudybuilder
 
11.11.15
19:01
Мы сделали, что неновые документы ЧекККМ форма = только просмотр.
И по вводу регистрационной карты даем возможность редактировать документ. ТолькоПросмотр= Ложь.
Но карту мы ищем через внешнее событие, так как клиент снимает ее штрихкодом.
Нужно найти карту, и проверить есть ли у ее владельца права административные права, то дать доступ на редактирование формы.

Как иначе быть с информационными картами не знаю! Только такой вариант наверное.
12 Остап Сулейманович
 
11.11.15
20:08
(11) Вы бы для начала документацию почитали что ли.
Как вы хотите что б отработало ваше вот то, что в (7) написано?
"
Для явного выключения привилегированного режима необходимо внутри процедуры или функции, в которой он был включен, вызвать метод с параметром Ложь столько же раз, сколько раз в этой же процедуре или функции был вызван метод с параметром Истина.
Если этого сделано не было, то при возврате из процедуры/функции, в которой был включен привилегированный режим, он будет выключен автоматически (неявно).
" ЦЫ(СП).
Ваше "УстановитьПривилегированныйРежим(Значение)" работает ровно до слов "КонецПроцедуры". И все.
13 1sanekmaloi1
 
11.11.15
20:32
Даю наводку из СП

ПользовательИнформационнойБазы .*

Примечание:
Доступно  только пользователю с административными правами.

ИМХО что и требуется тебе,вызвал в попытке смогло значит админ, выпало в исключение значит не админ
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший