РЛС. Редактирование документа только если Ответственный = &ТекущийПользователь #590353


#0 by drdroid
Есть документ, изменение которого надо ограничить для определенной роли, чтобы пользователи с этой ролью могли изменять только те документы где они являются ответственными. Проблема в том что они этот документ должны передавать дальше, т.е. изменять реквизит "Ответственный" ставить там нового пользователя, в этом случае документ не дает сохранить. Вот такое ограничение: Изменение - прочие поля:
#1 by drdroid
запрос: Документ.Ссылка.Ответственный = &ТекущийПользователь тоже не помогает
#2 by ОчкарикСлава
А может делать несколько документов, один на основании другого?
#3 by drdroid
не, надо именно передать.
#4 by ОчкарикСлава
Дело ваше. Тогда обкуривайте этот момент через привилегированный модуль, там права попраны...
#5 by drdroid
Не, я это сейчас делаю в модуле документа в процедуре ПередЗаписью, могу сравнить: но хотелось бы через рлс
#6 by 1с-кин
вы знаете, что такое РЛС? и как работает?
#7 by drdroid
а почему вы спрашиваете?
#8 by 1с-кин
потому что вы плаваете. RLS устанавливается на запись (будь то запись о документе в целом, либо - запись в регситрах). И на события "Чтение", Добавление, Изменение, Удаление. Если вы не попаддатете в эти события - RLS на документ вам заказан.
#9 by 1с-кин
*попадаете
#10 by 1с-кин
У вас же - и должны видеть (чтобы изменить Ответственного), и должны не видеть - когда изменили. Проработайте постановку задачи более четко.
#11 by Джинн
Я бы в консерватории поправил что-то... Ибо бред. Ибо если человек заболеет, то никто его документ не поправит? Или главбух не может поправить ошибочно введенный Пупкиным документ? И т.п. Но если никак - можно посмотреть реализацию РЛС в БПС. В частности великую таблицу со значением прав доступа. И почесал репу в этом направлении.
#12 by Турист
обычно на это "Ибо если человек заболеет, то никто его документ не поправит?" отвечают "ну зайдут под ним, у нас все равно все пользователи без паролей" ))
#13 by drdroid
, перечитайте внимательно я про "должны/не должны видеть" нигде не писал, а писал "изменение которого надо ограничить", т.е. изменять может только ответственный, мне надо чтоб текущий ответственный внес свои изменения, в том числе и изменил реквизит по которому идет проверка ("Ответственный"), перед нажатием "Записать" у нас по логике вещей в базе будет докмент без изменений (т.е. Ответственный = ТекущийПользователь) и будет объект в котором уже Ответственный = НовыйПользователь. По аналогии в модуле можно записать Ссылка.Ответственный и ЭтотОбъект.Ответственный. Но РЛС по всей видимости условия проверяются не по тем данным которые уже хранятся в бд, а по тем обновленным которые необходимо записать. Вопрос в чем: есть ли в РЛС аналог оракловского :new. и :old.?
#14 by Zaphod
А если при открытии документа запоминать в переменную что редактировать этот документ можно при смене Ответственного и потом уже ПередЗаписью (как в написано) на эту переменную дополнительно смотреть?
#15 by drdroid
Это ограничение для определенной роли, ролей много разных, есть роли у которых этого ограничения нет и под этими ролями работают пользователи которые могут назначить другого ответственного ;-)
#16 by 1с-кин
правьте постановку задачи в первую очередь. И смотрите, что есть РЛС. А у вас получается - документ набрал, а - ба!, - я не тот пользователь! - не пущать меня! А документ тогда зачем набирал? чтобы стереть?
#17 by drdroid
можно, но тогда проще уже сделать через модуль как в
#18 by 1с-кин
а если хотитет, чтобы другой пользователь не смог назначить никого в Ответственные, кроме себя - так сделайте это вообще программно: установка при записи Ответственного и закрытие поля Ответственный.Доступность = Ложь.
#19 by 1с-кин
(140 и - ну вы и самоделкины :)
#20 by drdroid
что вам не нравится в постановке то? Я конкретно написал, как в запросе в РЛС в правах на Изменение обратится к данным до изменения (аналог :old. в оракле).
#21 by drdroid
Мусье писатель, мусье не читатель?
#22 by Starhan
Проверку на возможность работы с документом (формой) при открытии. Тогда он может поставить ответственным кого угодно. Но вследущий раз если откроет работать не с ним не сможет.
#23 by Starhan
Еще вариант перед записью. Смотреть какой пользователь в ссылке.
#24 by Starhan
если это не новый документ.
#25 by drdroid
Да, так и делаю, мне бы это теперь реализовать средствами РЛС:
#26 by Starhan
У РЛС другой принцип.
#27 by Starhan
всмысле он тут не подходит.
#28 by 1с-кин
>:old. в оракле что есть old в Оракле? > Я конкретно написал, как в запросе в РЛС в правах на Изменение обратится к данным до изменения - что вы написали?! или 1с дала вам проверку ЗАПИСИ о документе перед ИЗМЕНЕНИЕМ? Что вы к RLS привязались - не зная, зачем оно и как работает? И пытаетесь меня убедить, что код в 1С и шаблон RLS, - это однофигственно, и только в разных окошках пишется?
#29 by 1с-кин
а я не о том же толкую? :)
#30 by drdroid
Я Вас ни в чем не убеждаю и даже больше я вас в этой теме насильно не держу ;-). Что такое РЛС и зачем оно я знаю, а с тем как оно работает сейчас вот и пытаюсь разобраться, а Вы извините но гоните порожняк. Изменение данных записанного документа в 1С это по сути запрос UPDATE, так вот операция UPDATE берет старые данные (old) и заменяет их новыми (new), РЛС на сколько я понимаю выполняется до или во время транзакции чтобы проверить права на выполнение или завершение транзакции соответственно. Ну так вот пока транзакция не завершена у нас есть старые данные (в оракл к ним можно обратится через :old., а в модуле документа 1С это Ссылка.Реквизит) и новые данные (по аналогии :new., а в модуле документа 1С это ЭтотОбъект.Ревизит) это очень удобно так как их можно сравнить.
#31 by organizm
А может попробовать создать что то типа полномочий доступа, вроде как в документообороте реализовано.
#32 by drdroid
Надо посмотреть, но меня интересует вариант реализации средствами РЛС.
#33 by 1с-кин
т.е. вы хотите нагнуть RLS, чтобы он сравнивал записи в базе и на форме и ограничивал на основе сравнения? ну успехов :)) Интересно взглянуть, как вы воткнете RLS между данными формы (как вы выразились - "новые данные (по аналогии :new., а в модуле документа 1С это ЭтотОбъект.Ревизит)), и данными базы (опять же - "в оракл к ним можно обратится через :old., а в модуле документа 1С это Ссылка.Реквизит)", притом, что RLS работает только с данными базы. И в 1С методологически вообще нет разделения на "новые" и старые" данные, а что у вас делится - всего лишь следствие работы платформы, когда введенные данные не записываются в базу, потому как команды не было, но содержатся в памяти в объекте "форма", и поэтому события и состояния данных "до транзакции" и "после транзакции" не отслеживаются в принципе.
#34 by 1с-кин
+ т.е. методологически в 1С "новых" данных не существует. Но у вас существует, и поэтому вы пытаетесь применить к ним остальные механизмы работы с данными. Вам бы в разработку платформы 9.0 сразу... :))
#35 by drdroid
От не понимаю я таких людей,
#36 by drdroid
От не понимаю я таких людей, вам дай только поболтать, поехидничать ("Вам бы в разработку платформы 9.0 сразу")... Тоже мне гуру блин! Столько было вами слов написано, но по существу информации 0. Посидел почитал желтую книгу, в тестовой базе поэксперементировал и все получилось, запрос на чтение ограничений выглядит так: все работает так как я и описал, так как и требовалось...
#37 by Starhan
а зачем внутренне соединение? ИЗ Документ.МойДокумент КАК МойДокумент Разве этот запрос не те же данные возвращает?.
#38 by drdroid
в РЛС нет "ВЫБРАТЬ", ну и в я написал что подобного рода конструкция не работает: Могу расписать почему работает с вложенным запросом и почему не работает без него, но думаю оно вам не надо =)
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С