Имя: Пароль:
1C
1С v8
Разрешение на изменение. Подскажите как лучше сделать.
0 mzelensky
 
19.06.12
15:25
Доброго всем!
Суть такая - есть заказ покупателя, в нем есть реквизит (галочка) "Особо важен". Смысл в том, что менеджер должен иметь возможность поставить эту галочку и провести документ. Как только документ с этой галочкой провелся - дальнейшее его изменение возможно только под полными правами (т.е. нельзя перепровести документ, снять с проведения, перезаполнить и т.д.).

Проблема в том, что если делать эти операции через форму (открыть форму и попытаться что-то там сделать), то решается все довольно просто. Пишется в обработчике формы "При открытии"

мОсобоВажный=ОсобоВажный;

А в обработчике "ПередЗаписью" (обработка в модуле объекта):

Если мОсобоВажный тогда
       Если  НЕ РольДоступна("Перепроведение") тогда   //НЕ РольДоступна("ПолныеПрава") и
           Отказ=истина;
           Сообщить("Заказ является 'Особо важным'. Изменить его можно только под полными правами");
       КонецЕсли;            
   КонецЕсли;

Вроде все работает. Но если сделать перепроведение прям из журнала документов, то разумеется код не отрабатывает. Если поместить "мОсобоВажный=ОсобоВажный" в самый низ модуля объекта, то почему-то реквизит "ОсобоВажный" там всегда равен "ложь", хотя галочка стоит (такое ощущение, что данные еще не считаны).

Как решить вопрос?
1 Нуф-Нуф
 
19.06.12
15:26
обработка события при записи
2 pumbaEO
 
19.06.12
15:28
можно даже подпиской
3 mzelensky
 
19.06.12
15:28
(1) не хотелось создавать новую подписку из-за 5 строчек кода.

Почему в модуле объекта (при первом вхождении) реквизит получается не считанным?
4 golden-pack
 
19.06.12
15:29
(0) подпиской + если конфа типовая - то сделать через доп. права
5 golden-pack
 
19.06.12
15:29
(3) лол
6 Нуф-Нуф
 
19.06.12
15:30
(3) связь подписки и количество строк кода? подписки для того и предназначены, чтобы не корячить код типовых
7 mzelensky
 
19.06.12
15:30
(4) без подписки не вариант?
8 Галахад
 
гуру
19.06.12
15:30
А нафиг нужен мОсобоВажный, если есть просто ОсобоВажный ?
9 pumbaEO
 
19.06.12
15:31
(6) часто ты видел, что бы Заказ менялся в типовой (гусары УТ11 молчать)
10 mzelensky
 
19.06.12
15:32
(6) у меня не типовая и корячить могу все что угодно - тут ограничений нет.
11 mzelensky
 
19.06.12
15:33
(8) смысл в том чтобы отловить изменение флага "ОсобоВажный".

Иначе манагер может просто зайти и снять его - а это должно быть запрещено.
12 Галахад
 
гуру
19.06.12
15:35
(11) Не проще сравнивать текущий объект и объект из базы?
13 mzelensky
 
19.06.12
15:36
(6) так ,стоп...а о какой вообще подписке идет речь? ты говоришь про "обработка события при записи" ? - я это могу и в модуле сделать, но так не получится - читай (0)
14 mzelensky
 
19.06.12
15:36
(12) как?
15 mzelensky
 
19.06.12
15:37
(12) + если встать на документ в списке документов и нажать "отмена проведения" - что ты будешь сравнивать? А нужно чтобы если галочка стоит, то косяк - нельзя изменять.
16 pumbaEO
 
19.06.12
15:39
(15)
Если ЭтотОбъект.Ссылка.ОсобоВажный Тогда
Отказ Истина
КонецЕсли;

Если ЭтотОбъект.ОсобоВажный <> ЭтотОбъект.Ссылка.ОсобоВажный Тогда
//ПОМЕНЯЛИ
КонецЕсли
17 mzelensky
 
19.06.12
15:40
(16) вариант...ща попробую.
18 Галахад
 
гуру
19.06.12
15:41
(15) Ну, событие есть при отмене проведения. Там можно сравнить.
19 mzelensky
 
19.06.12
15:44
(16) шикарно отработало:

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

   Если  ЭтотОбъект.Ссылка.ОсобоВажный=истина тогда
       Если  НЕ РольДоступна("Перепроведение") тогда   //НЕ РольДоступна("ПолныеПрава") и
           Отказ=истина;
           Сообщить("Заказ является 'Особо важным'. Изменить его можно только под полными правами");
       КонецЕсли;            
   КонецЕсли;
КонецПроцедуры


Что-то я про ссылку и не подумал! Спасибо
20 pumbaEO
 
19.06.12
15:49
(19) ай, ай ну нельзя же так "Сообщить()" использовать в модуле объекта, а на клиенте кто будет проверять, а внешнее соединение...