Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Программно запретить запись элемента

Программно запретить запись элемента
Я
   Slowresponse
 
27.06.19 - 14:24
Всем привет.

Вопрос в следующем - нужно с помощью расширения сделать так, чтобы при выполнении определенного условия пользователь НЕ мог записать элемент справочника.
Добавил справочник в расширение, в модуле объекта написал так:

&Перед("ПриЗаписи")
Процедура Расш1_ПередПриЗаписи(Отказ)
Если РольДоступна("Расш1_РСД") Тогда
        
    Сообщить("Недостаточно прав доступа!");
    отказ = Истина;
    
КонецЕсли;
КонецПроцедуры;

Но оно не работает. Уже голову сломал, гугл не помогает(
Задачка вроде не сложная, но перед отпуском мозги отключились :)
 
 
   dka80
 
1 - 27.06.19 - 14:28
&Перед("ПриЗаписи")

Во-первых? лучше ПередЗаписью, во-вторых, лучше &После
В-третьих, у тебя точно событие в расширении отрабатывается, а не метод?
   unbred
 
2 - 27.06.19 - 14:30
(1) &после того,как элемент записан?)) или &после ПередеЗаписью?))
   dka80
 
3 - 27.06.19 - 14:32
(2) &после ПередЗаписью
   unbred
 
4 - 27.06.19 - 14:35
(0) у меня почему то "возврат" просится после отказа. посмотри отладчиком,что в отказе на выходе из процедуры.
и да,передЗаписью,там тоже вроде "отказ " есть
   aleks_default
 
5 - 27.06.19 - 14:39
РольДоступна("Расш1_РСД")  что в отладке возвращает смотрел?
   Slowresponse
 
6 - 27.06.19 - 15:11
(1) Не очень понял в-третьих)
   repin_mike
 
7 - 27.06.19 - 16:32
(5) РольДоступна() в 8.3 как-то странно работает, я тоже сталкивался
   Nuobu
 
8 - 27.06.19 - 16:33
(7) для этого есть "Пользователи.РолиДоступны("Расш1_РСД")".
   Вафель
 
9 - 27.06.19 - 16:34
лучше конечно делать
Если НЕ РольДоступна()
все таки в 1с приняты разрешающие роли
   Вафель
 
10 - 27.06.19 - 16:34
(8) это тоже самое, только еще проверяются а вдруг полны права
 
 Рекламное место пустует
   AlvlSpb
 
11 - 27.06.19 - 19:45
(0) Отказ - это НЕ прекращение выполнения Процедуры. Т.е. ставишь &Перед процедурой. Твое добавление определяет Отказ = Истина. А дальше выполняется основная процедура, которая переопределяет Отказ в Ложь. В итоге твой код бесполезен. Поэтому либо в своей процедуре &Перед прекращай работу процедуры (Возврат), либо делай &После
   aleks_default
 
12 - 28.06.19 - 11:45
"А дальше выполняется основная процедура, которая переопределяет Отказ в Ложь" - это проверенное утверждение?
   aleks_default
 
13 - 28.06.19 - 11:46
"Поэтому либо в своей процедуре &Перед прекращай работу процедуры (Возврат), либо делай &После" - можно просто дописать "ПродолжитьВызов()" и передать туда свое значение переменной Отказ
   Cyberhawk
 
14 - 28.06.19 - 12:00
(11) "дальше выполняется основная процедура, которая переопределяет Отказ в Ложь" // Это *овнокод, переменную Отказ по-хорошему надо только "взводить", но не гасить
   aleks_default
 
15 - 28.06.19 - 12:04
(14) во и я о том же, хотя товаришь утверждает что это делает сама система
   Cyberhawk
 
16 - 28.06.19 - 12:05
(15) Не, он пример приводит когда это может не срабатывать
   Cyberhawk
 
17 - 28.06.19 - 12:06
Отказ = Истина в расширении работает. Автор что-то не осилил.
   Жан Пердежон
 
18 - 28.06.19 - 14:38
роль добавь пользователю
   Slowresponse
 
19 - 28.06.19 - 14:59
Всем спасибо, разобрался.
Оказывается расширения с безопасным режимом не перехватывают модуль объекта. Сделал через нужные формы.
   Фрэнки
 
20 - 28.06.19 - 15:50
(19) да никому просто в голову не могло прийти, что кто-то будет использовать перехват функций-обработчиков из Объекта при включенном безопасном режиме в Расширении.
   Slowresponse
 
21 - 28.06.19 - 16:46
(20) К сожалению, 1C-Fresh обязывает включенный безопасный режим использовать в расширениях)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует