необходимо, чтобы у двух пользователей были права на ввод документов, но при этом в следующие состояния они могли переводить только документы, введенные другим пользователем. Возможно ли реализовать такое в рамках штатного функционала Diasoft?
Объявление
Свернуть
Пока нет объявлений.
По разграничению прав при вооде документов, подскажите!!!
Свернуть
X
-
Сообщение от Citrus Посмотреть сообщениеДиспетчер - штатный функционал?
Капать надо где-то в РКО->Администрирование->Первичные документы.
Комментарий
-
Сообщение от bits Посмотреть сообщениеИменно про это и говорил, только похоже это не подходит в данном случае.
Наверное не получится массово переводить документы по состояниям ??
Остается только "повесить" простенький пользовательский диспатч на состояние куда требуется переводить эти документы и незаморачиваться.
Комментарий
-
Добрый день! Вероятно- запоздало, но у нас вот такой диспатч прикручен:
------------------------
if @Brief = 'UserVizir'
begin
--20100811
--ФО *ВнутрДок в 2-е руки заставляем принимать, если клиент
declare @kUserPrevID_ DSIDENTIFIER
,@kParentID_ DSIDENTIFIER
,@kGroupID_ DSIDENTIFIER
select @UserID = UserID from tUser (index XAK0tUser) where Brief = suser_name()
select @kGroupID_ = isnull(UserId,0) from tuser (index XAK0tUser) where brief = 'ТЕХ' at isolation read uncommitted if exists(select 1 from tUserPost up (index XPKtUserPost) where up.userid=@UserID and up.PostID=@kGroupID_) goto _exitVizir
-- select @kParentID = ParentID from tCashTransact (index XPKtCashTransact) where CashTransactID = @ObjectID at isolation read uncommitted
select @InstrumentID = isnull(InstrumentID,0) from tDealTransact (index XPKtDealTransact) where DealtransactID = @ObjectID at isolation read uncommitted
if @InstrumentID = 0
begin
select @RetVal = 27927 --"В области А не удалось найти первичный документ по SOURCEID", его уже могли удалить
goto _exit
end
if @InstrumentID not in(1558) goto _exitVizir_NVT -- мы проверяем только в ФО *ВнутрДок
--------- Проверка- если по документу уже были 2-е руки то просто уходим- регламент соблюден (в принципе эта штука просто для будущего- использования в других ФО )
if exists (select 1
from tObject ob (INDEX XAK2tObject),
tProtocol dp (INDEX XAK1tProtocol),
tTransition tr (INDEX XPKtTransition),
tAudit a (INDEX XPKtAudit),
tNode n (INDEX XPKtNode),
tUser u (INDEX XPKtUser),
tProperty p (INDEX XPKtProperty),
tProtocolLinkObject plo (INDEX XPKtProtocolLinkObject),
tDealTransact dt (INDEX XPKtDealTransact)
where ob.ID = @ObjectID
and ob.InstrumentID = @InstrumentID
and dp.ObjectID = ob.ObjectID
and tr.TransitionID = dp.TransitionID
and a.AuditID = dp.AuditID
and plo.ProtocolID =* dp.ProtocolID
and u.UserID = a.UserID
and tr.TargetStateID= n.NodeID
and a.Action = p.PropVal
and p.PropType = 76
------- Предидущие переходы в состояние исполнил текущий пользователь, или пользователь, входящий в группу "ТЕХ"
and u.UserID>@UserID -- и см. ниже ID не бсс- все бсс считаются людьми, т.е. одни руки уже есть
and not exists(select 1 from tUserPost up (index XPKtUserPost) where up.userid=u.UserID and up.PostID=@kGroupID_ and up.userid not in (110000000369,110000000438,110000000550,2100020017821,2100020023608,110000000448) )
and dt.DealTransactID=ob.ID
and NumberExt not like ' 1 ' --т.е. не документ комиссии
--having sum(1)>2 ---ограничение на 2-а "пальчика" т.е. если пользователь пытается 3-й раз толкнуть, то система ругнется
)
begin
goto _exitVizir
end
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
if exists (select 1
from tObject ob (INDEX XAK2tObject),
tProtocol dp (INDEX XAK1tProtocol),
tTransition tr (INDEX XPKtTransition),
tAudit a (INDEX XPKtAudit),
tNode n (INDEX XPKtNode),
tUser u (INDEX XPKtUser),
tProperty p (INDEX XPKtProperty),
tProtocolLinkObject plo (INDEX XPKtProtocolLinkObject),
tDealTransact dt (INDEX XPKtDealTransact)
where ob.ID = @ObjectID
and ob.InstrumentID = @InstrumentID
and dp.ObjectID = ob.ObjectID
and tr.TransitionID = dp.TransitionID
and a.AuditID = dp.AuditID
and plo.ProtocolID =* dp.ProtocolID
and u.UserID = a.UserID
and tr.TargetStateID= n.NodeID
and a.Action = p.PropVal
and p.PropType = 76
------- Предидущие переходы в состояние исполнил текущий пользователь, или пользователь, входящий в группу "ТЕХ"
and (u.UserID=@UserID -- и см. ниже ID не бсс- все бсс считаются людьми, т.е. одни руки уже есть
or exists(select 1 from tUserPost up (index XPKtUserPost) where up.userid=u.UserID and up.PostID=@kGroupID_ and up.userid not in (1100000003,110000043,1100000000,21000200178,21000200208,11000000) )
)
and dt.DealTransactID=ob.ID
and NumberExt not like ' 1 ' --т.е. не документ комиссии
having sum(1)>2 ---ограничение на 2-а "пальчика" т.е. если пользователь пытается 3-й раз толкнуть, то система ругнется
)
begin
select @Retval = 500029 --'Перевести в след.состояние может только другой пользователь, вы исчерпали количество непрерывных переходов по документу'
goto _exit
end
_exitVizir:
end
--конец 'UserVizir'
Комментарий
-
И еще, может быть пригодится, в диспатче DispatchProcUser_RollBack на рублевой кассе отменена возможность вытолкнуть документ из исполнен:
--скрипт дает откатить из состояния исполнен документ , только пользователям в группе 'Движение чужих ПП' and 'Администраторы'
--или инициатору исполнения (тому кто завизировал этот документ)
if @Brief = 'rollback_vizir'
Begin
-------Группа пользователей, которым можно снимать визирование всегда--------------
declare @kGroupID_ DSIDENTIFIER
,@UserID DSIDENTIFIER
select @UserID = UserID from tUser (index XAK0tUser) where Brief = suser_name() -- пользователь , производящий операцию
select @kGroupID_ = isnull(UserId,0) from tuser (index XAK0tUser) where brief = '!Движение чужих КассДок'
if exists(select 1 from tUserPost up (index XPKtUserPost) where up.userid=@UserID and up.PostID=@kGroupID_) goto rollback_vizir_
select @kGroupID_ = isnull(UserId,0) from tuser (index XAK0tUser) where brief = 'Администраторы'
if exists(select 1 from tUserPost up (index XPKtUserPost) where up.userid=@UserID and up.PostID=@kGroupID_) goto rollback_vizir_
-----------------------------------------------------------------------------------
if not exists (select 1--u.UserID, n.Name
from tObject ob (INDEX XAK2tObject),
tProtocol dp (INDEX XAK1tProtocol),
tTransition tr (INDEX XPKtTransition),
tAudit a (INDEX XPKtAudit),
tNode n (INDEX XPKtNode),
tUser u (INDEX XPKtUser),
tProperty p (INDEX XPKtProperty),
tProtocolLinkObject plo (INDEX XPKtProtocolLinkObject),
tDealTransact dt (INDEX XPKtDealTransact)
where ob.ID = @ObjectID
and ob.InstrumentID = 1270--@InstrumentID -- только кассу сделал пока
and dp.ObjectID = ob.ObjectID
and tr.TransitionID = dp.TransitionID
and a.AuditID = dp.AuditID
and plo.ProtocolID =* dp.ProtocolID
and u.UserID = a.UserID
and tr.TargetStateID= n.NodeID
and a.Action = p.PropVal
and p.PropType = 76
and dt.DealTransactID=ob.ID
and n.Name like 'Исполнен документ Рублевой кассы.'
and u.Brief=suser_name()
)
begin
select @Retval = 500031 --У Вас нет права перевести документ в след.состояние (обратитесь к руководителю)
goto _exit
end
End
rollback_vizir_:
Комментарий
Комментарий