Имя: Пароль:
1C
1С v8
Программно запретить запись элемента
0 Slowresponse
 
27.06.19
14:24
Всем привет.

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

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

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

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