Имя: Пароль:
1C
1С v8
Программный запрет удаления элемента справочника
,
0 Sasha_1CK
 
26.06.13
11:11
Платформа 1С 8.2.16.368
Конфигурация Бухгалтерия 3.0.21.14

Задача в справочнике "Пользователи" добавлен реквизит - доступ к справочнику "Мой справочник".
В справочнике "МойСправочник" необходимо запретить установку пометки удаления на элемент списка справочника. Элементы справочника редактируются в форме списка.

Процедура модуля формы списка
&НаКлиенте
Процедура СписокПередУдалением(Элемент, Отказ)
   // Вставить содержимое обработчика.
КонецПроцедуры

тупо не отрабатывает.

Процедура в модуле объекта
&НаСервере
Процедура ПередЗаписью(Отказ)
    Если ПометкаУдаления тогда
         Отказ = не ЕстьПрава();
       Если Отказ тогда
           Возврат;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры

В принципе приводит к желаемому результату, но выглядит не кошерно.

Во-первых программа предлагает вопрос "пометить на удаление? да нет"
Во-вторых после него появляется предупреждение с ошибкой о невозможности записи элемента.

Есть ли более аккуратные способы программно предотвратить установку пометки удаления? в идеале до появления вопроса вывести пользователю предупреждение об отсутствии прав и отменить событие.

З.Ы. Настройку прав в конфигураторе просьба не предлагать. Это самый крайний случай.
1 Конфигуратор1с
 
26.06.13
11:12
(0) а почему просто права не отобрать?
2 Конфигуратор1с
 
26.06.13
11:13
рлс рулит)
3 Mitriy
 
26.06.13
11:14
Если ПометкаУдаления <> Ссылка.ПометкаУдаления тогда
4 Maxus43
 
26.06.13
11:15
>>Это самый крайний случай
Это самый нормальный вариант. программные затычки для этой цели - и есть быдлокод
5 Sasha_1CK
 
26.06.13
11:16
(3) ну это для того что бы и снять было нельзя.
Но кошерности это не добавляет.
Все равно вопрос выводиться и все равно процедура сообщает об ошибке записи. я именно это хочу обойти.
Собственно есть ли такая возможность или нет смысла биться головой об стену.
6 Mitriy
 
26.06.13
11:19
(5) тебе уже сказали про права... и вопрос не в тему, на фига в модуле объекта &НаСервере?
7 zladenuw
 
26.06.13
11:21
а не проще ли подписку на событие ?
8 Sasha_1CK
 
26.06.13
11:21
(4)а как выглядит нормальный вариант для ситуации
Пользователь 1 - имеет право редактировать номенклатуру. Но не имеет права редактировать контрагентов.
Пользователь 2 имеет право редактировать контрагентов, но не имеет права редактировать номенклатуру.
Пользователь 3 имеет право редактировать и контрагентов и номенклатуру.
9 Maxus43
 
26.06.13
11:21
(7) от проблем автора это не спасёт
10 zladenuw
 
26.06.13
11:22
(9) ну я так в нетленке делал. там рлс нету и не хочу. так как конфу переписываем. пока не до них :)
11 Maxus43
 
26.06.13
11:22
(8) у тебя затычка на запрет интерактивной пометки на удаления. Это легко решается галкой в правах... при чем тут данный пример?
12 NcSteel
 
26.06.13
11:23
(0) Удали типовую кнопку и размести свою.
13 NcSteel
 
26.06.13
11:24
(11) Достаточно частая задача, когда права настраиваются не ролями, а настройками в справочниках.
14 Соло
 
26.06.13
11:26
а тупо найти где выводится "пометить на удаление?" и переписать тоже не предлагать или глобальный поиск не рулит?
15 Sasha_1CK
 
26.06.13
11:28
(11) ну как бы запрет редактирования пользователю предполагает и запрет пометки элемента справочника на удаление.

Понятно, что это решается правами - но в пределе это ведет к тому что для каждого пользователя формируется индивидуальный набор прав. И когда их набирается штук 30-40 их администрирование и обновление конфигурации становится слегка не тривиальной задачей.
(12) Есть еще кнопка del.

(14) уже.  Есть такая сообщалка - но в из справочников не вызывается. Вызывается при сохранении настроек отчетов и из дополнительных отчетов и обработок
16 Maxus43
 
26.06.13
11:28
(14) это платформенное
(13) задача да, но пример неудачный, про пометку на удаление, это платформенный вопрос и его имхо не обойти, если есть права
17 Maxus43
 
26.06.13
11:32
(15) РЛС то чем не нравится?
18 Sasha_1CK
 
26.06.13
11:35
(17) А чем в данном случае РЛС то отличается?

Я так же из ПередЗаписью Вызываю контроль прав.
Или я чего то не догоняю?
19 Sasha_1CK
 
26.06.13
11:38
(6) если в модуле объекта к процедуре ПередЗаписью поставить директиву "наКлиенте" - она тупо не отрабатывает.
20 Maxus43
 
26.06.13
11:39
(18) да в принципе конечно ничем, если ещё и перед открытием будешь вызывать контроль прав и лочить форму от изменений.
Но от вопроса "Пометить на удаление" - не уйти
21 Лефмихалыч
 
26.06.13
11:41
(0) забери у всех ролей право интерактивной пометки удаления. Потом добавь роль, у которой только это право и есть. Реквизит свой выкинь к херам - он не нужен. Пользователям, которым хотел расставить реквизит, выдай новую роль с одним правом
22 Mitriy
 
26.06.13
11:44
(19) в том-то и дело, что там вообще директивы компиляции не нужны... модуль объекта всегда на сервере...
23 Sasha_1CK
 
26.06.13
11:44
(20)
так "СписокПередНачаломДобавления" и "СписокПередНачаломИзменения" отрабатывают штатно и никаких проблем не вызывают.

В принципе пользователь без галочки ничего сделать в справочнике не может. Формально задача решена - только в случае пометка на удаление - выглядит криво. И не было бы так обидно - если бы в форме списка не было события "ПередУдалением" которое тупо не работает.

(21) если бы все так просто - см (8) и (15)
24 Sasha_1CK
 
26.06.13
11:46
(22) Спс. буду знать. Как то до УФ раньше руки не доходили.
25 Лефмихалыч
 
26.06.13
11:46
(23) все именно и есть ТАК просто. Это называется проектирование профилей пользователей. А твой реквизит - быдлокод
26 Sasha_1CK
 
26.06.13
11:50
(25) Ну и как просто решить задачу из пункта 8? умножив ее хотя бы на 5
27 Cyberhawk
 
26.06.13
11:54
(25) а есть чтиво (инфа) по этому самому проектированию?
28 Лефмихалыч
 
26.06.13
11:56
(26) Добавить роли:
1. Редактирование номенклатуры
2. Редактирование контрагентов
3. Пометка удаления номенклатуры и контрагентов

Определить (хоть на бумажке, хоть из ДО выдрать) профили:
1. Человек первого сорта - все три роли
2. Человек второго сорта - только первая роль
3. Человек третьего сорта - только вторая роль
4. Вообще не человек, а робот - только третья роль
5. ..... свой вариант, если есть

И раздавать людям роли в соответствии с этими профилями. Если группы доступа из документооборота, например, выдрать или что-то подобное самому смастерить, то можно людям прямо непосредственно профили раздавать.
29 Sasha_1CK
 
26.06.13
12:09
(28) Ага. Главное потом заказчика убедить этим профилям следовать.
Потому что на практике все стремится к тому что фактически у каждого пользователя индивидуальный профиль.

Создать индивидуальные профили можно - управлять ими примерно через год становится невозможно.
Уже проходили.
30 Лефмихалыч
 
26.06.13
12:10
(29) а реквизитами твоими и костылями в коде, что легко будет через год управлять?
31 zladenuw
 
26.06.13
12:25
(30) зачем реквизит ? лучше уже РС с доп настройками и подписки на события. если влом РЛС использовать
32 Sasha_1CK
 
26.06.13
12:30
Как показывает практика - гораздо легче.
По факту у заказчика есть только три профиля Главный бухгалтер, пользователь и только просмотр.
Однако затем возникают потребности запретить конкретным пользователям доступ к конкретным объектам.
Если бы у 1С были права - запретить чтение, запретить изменение, запретить удаление с приоритетом над разрешением и возможность раздать роль всем пользователям (как в файерволлах) было бы проще - создал роль "запрет изменения контрагентов" назначил всем, у нужных снял.

Однако по факту получается - есть пользователи - у всех есть права к контрагентам. Потом через месяц выясняется, что некий пользователь накосячил, кто то попал на разборки и следует директива - запретить доступ всем пользователям к изменениям справочника контрагенты, кроме пупкина.

Как это происходит в 1С - нужно у роли "пользователь" отключить доступ к контрагентам. Создать отдельную роль "доступ к контрагентам" дать ее Пупкину.
И так раз 100.
И все бы ничего, но через год-два понять к каким объектам имеет доступ роль "пользователь" тупо невозможно - потому что надо зайти в каждый объект по дереву роли и проверить наличие галочек.
33 Sasha_1CK
 
26.06.13
12:38
(31) а чем лучше?
34 zladenuw
 
26.06.13
12:46
(33) посмотри реализацию типовых. у них доп права реализованы через РС и РЛС. ты можешь использовать РС и подписки на событие
35 Лефмихалыч
 
26.06.13
12:48
(32) делай через реквизит, мне пофиг
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс