7 марта, воскресенье 18:11
Bankir.Ru

Объявление

Свернуть
Пока нет объявлений.

По разграничению прав при вооде документов, подскажите!!!

Свернуть
X
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения

  • По разграничению прав при вооде документов, подскажите!!!

    необходимо, чтобы у двух пользователей были права на ввод документов, но при этом в следующие состояния они могли переводить только документы, введенные другим пользователем. Возможно ли реализовать такое в рамках штатного функционала Diasoft?

  • #2
    На ум приходит только следующее.
    Повесить самым первым на обработку перехода в это состояние юзерский диспатч, который проверит какой юзверь делал послений переход по данному объекту, и вызов штатного отката перехода в это состояние в случае, если этот юзерь совпадает с текущим.

    Комментарий


    • #3
      Диспетчер - штатный функционал?

      Комментарий


      • #4
        Сообщение от Citrus Посмотреть сообщение
        Диспетчер - штатный функционал?
        На ум приходит штатная верификация (если она все еще штатная). Там были разные варианты, повторный ввод и прочее, но общий смысл похожий .
        Капать надо где-то в РКО->Администрирование->Первичные документы.

        Комментарий


        • #5
          Базовый модуль - руководство администратора - 7. Верификация объектов, по поиску Верификация тоже много относящегося к теме можно посмотреть

          Комментарий


          • #6
            Именно про это и говорил, только похоже это не подходит в данном случае.
            Наверное не получится массово переводить документы по состояниям ??

            Остается только "повесить" простенький пользовательский диспатч на состояние куда требуется переводить эти документы и незаморачиваться.

            Комментарий


            • #7
              Сообщение от bits Посмотреть сообщение
              Именно про это и говорил, только похоже это не подходит в данном случае.
              Наверное не получится массово переводить документы по состояниям ??

              Остается только "повесить" простенький пользовательский диспатч на состояние куда требуется переводить эти документы и незаморачиваться.
              верификация документов пп.2.1.3. также указывают. Спасибо, посмотрю!

              Комментарий


              • #8
                Добрый день! Вероятно- запоздало, но у нас вот такой диспатч прикручен:
                ------------------------
                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'

                Комментарий


                • #9
                  И еще, может быть пригодится, в диспатче 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_:

                  Комментарий


                  • #10
                    Спасибо!

                    Комментарий

                    Обработка...
                    X