1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

EPC

Discussão em 'EMS , HCM e Totvs 11' iniciado por tbranco, Maio 10, 2021.

  1. tbranco

    tbranco Membro Participativo

    Pessoal, Boa tarde!

    É possível via EPC forçar um by pass de alguma situação padrão? No cc0300 eu preciso eliminar as ordens independente de qualquer validação. Existe o ponto "valEliminaRelacOrdemPedido" que preciso que o Datasul desconsidere em determinada situação.
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Bom dia amigo, pra esses casos acredito que uma trigger de find seja melhor, que dai vc trabalha direto na tabela e dai independente do programa, a regra sempre ira valer, tem 2 jeitos de criar essa trigger, direto no banco de dados, dai é uma forma mais definitiva, ou seja, ela valerá para todos os programas, não importa se é datasul ou especifico, até um for each pelo procedure editor vai obedecer a sua regra.
    Outra forma é a trigger dinamica que vc coloca por programa, se o seu caso é só para o cc0300, o que vc pode fazer é criar um cc0300 falso, onde vc inicia a trigger dinamica e dai chama o cc0300 original, dai com a trigger ativa, quando sair do programa a trigger deixa de existir, claro, se vc estiver nessa tela com o cc0300 falso, se vc fizer um CTRL-ALT-X pra rodar outro programa, a trigger será valida, mas ao voltar pro MENU, ela deixa de existir.

    Agora se vc só tem como alternativa a EPC, bem, se vc fizer um return 'NOK' ou return error pode resolver o seu caso, tudo depende do ponto que vc quer usar.
    No programa BOIN274v1.p, onde tem o seu ponto de epc, a rotina está assim ....
    Código:
        for each tt-epc where tt-epc.cod-event = "valEliminaRelacOrdemPedido":
            delete tt-epc.
        end.
        /* Include i-epc200.i2: Cria‡Æo de registro para temp-table tt-epc */
        {include/i-epc200.i2 &CodEvent='"valEliminaRelacOrdemPedido"'
                             &CodParameter='"OBJECT-HANDLE"'
                             &ValueParameter="string(this-procedure)"}
        {include/i-epc200.i2 &CodEvent='"valEliminaRelacOrdemPedido"'
                             &CodParameter='"rowid-ordem-compra"'
                             &ValueParameter="string(rowid(ordem-compra))"}
        /* Include i-epc201.i: Chamada do programa de EPC */
        {include/i-epc201.i "valEliminaRelacOrdemPedido"}
        if  return-value = "NOK":U then do:
            undo, return "NOK":U.
        end.
    
        return "OK".
    
    Esse trecho está em uma procedure chamada "validaEliminacaoOrdemCompra", segue a procedure pra vc avaliar ...
    Código:
    PROCEDURE validaEliminacaoOrdemCompra :
    /*------------------------------------------------------------------------------
      Purpose:
        Retorna informa‡Æo antes de eliminar as ordens de compra do pedido de compra
        se o Pedido de Compra informado possui Ordem de Compra recebida ou a Ordem de Compra
        que est  para ser eliminada possui parcela recebida e nÆo deixa eliminar.
      Parameters:  <none>
        ipar1 : rOrdem    : rowid da tabela ordem-compra
      Notes:
    ------------------------------------------------------------------------------*/
        def input  param rOrdem as rowid no-undo.
        /* gera rowErrors para ser retonado pela getRowErrors */
    
        DEF VAR l-proces-pregao AS LOG  NO-UNDO.
        DEF VAR l-usuar-pregao  AS LOG  NO-UNDO.
        DEF VAR c-lbl-liter1    AS CHAR NO-UNDO.
    
        for each RowErrors:
            delete RowErrors.
        end.
    
        for first ordem-compra fields(situacao ep-codigo cod-estabel num-ord-inv numero-ordem) where
            rowid(ordem-compra) = rOrdem no-lock: end.
    
        if  ordem-compra.situacao = 4 then do:
                     {method/svc/errors/inserr.i
                                        &ErrorNumber="3138"
                                        &ErrorType="EMS"
                                        &ErrorSubType="ERROR"}
        end.
    
        for first recebimento fields(numero-ordem) where
            recebimento.numero-ordem = ordem-compra.numero-ordem no-lock: end.
    
        if  avail recebimento then do:
                     {method/svc/errors/inserr.i
                                        &ErrorNumber="3106"
                                        &ErrorType="EMS"
                                        &ErrorSubType="ERROR"}
        end.
    
    
        /* Investimentos */
        if  avail ordem-compra            and
            param-global.modulo-in        and
            ordem-compra.num-ord-inv <> 0 then do:
    
            /* Valida‡äes elimina‡Æo ordem de compra X Investimento */
            run inp/inapi410.p(input rowid(ordem-compra),
                               output table tt-erro).
    
            if  return-value = "NOK":U then do:
                find first tt-erro no-error.
                if  avail tt-erro then do:
                   {method/svc/errors/inserr.i
                               &ErrorNumber="tt-erro.cd-erro"
                               &ErrorType="EMS"
                               &ErrorSubType="ERROR"
                               &ErrorParameters="tt-erro.c-param"}
                end.
            end.
        end.
    
        find pedido-compr where pedido-compr.num-pedido = ordem-compra.num-pedido no-lock no-error.
    
        FIND FIRST proc-compra NO-LOCK
             WHERE proc-compra.nr-processo = ordem-compra.nr-processo NO-ERROR.
        IF AVAIL proc-compra THEN
        &IF "{&bf_mat_versao_ems}" >= "2.07" &THEN
            ASSIGN l-proces-pregao = proc-compra.log-proces-pregao.
        &ELSEIF "{&bf_mat_versao_ems}" >= "2.062" &THEN
            ASSIGN l-proces-pregao = IF INT(SUBSTRING(proc-compra.char-1,4,1)) = 1 THEN YES
                                     ELSE NO.
        &ENDIF
    
        IF l-proces-pregao THEN DO:
            FIND FIRST usuar-mater NO-LOCK
                 WHERE usuar-mater.cod-usuario = c-seg-usuario NO-ERROR.
            IF AVAIL usuar-mater THEN
            &IF "{&bf_mat_versao_ems}" >= "2.07" &THEN
                ASSIGN l-usuar-pregao = usuar-mater.log-usuar-pregao.
            &ELSEIF "{&bf_mat_versao_ems}" >= "2.062" &THEN
                ASSIGN l-usuar-pregao = IF INT(SUBSTRING(usuar-mater.char-1,13,1)) = 1 THEN YES
                                        ELSE NO.
            &ENDIF
    
            IF NOT l-usuar-pregao AND
                   pedido-compr.situacao <> 2 THEN DO:
                /* Inicio -- Projeto Internacional */
                DEFINE VARIABLE c-lbl-liter-pregoeiro AS CHARACTER NO-UNDO.
                {utp/ut-liter.i "pregoeiro" *}
                ASSIGN c-lbl-liter-pregoeiro = TRIM(RETURN-VALUE).
                DEFINE VARIABLE c-lbl-liter-eliminar-este-registro AS CHARACTER NO-UNDO.
                {utp/ut-liter.i "eliminar_este_registro" *}
                ASSIGN c-lbl-liter-eliminar-este-registro = TRIM(RETURN-VALUE).
                {method/svc/errors/inserr.i &ErrorNumber="33085"
                                   &ErrorType="EMS":U
                                   &ErrorSubType="Error":U
                                   &ErrorParameters="c-seg-usuario + '~~~~' + c-lbl-liter-pregoeiro + '~~~~' + c-lbl-liter-eliminar-este-registro"}
            END.
        END.
    
        IF CAN-FIND (FIRST prazo-compra WHERE
                           prazo-compra.numero-ordem = ordem-compra.numero-ordem AND
                          (prazo-compra.quant-receb > 0 OR prazo-compra.dec-1 > 0)) THEN DO:
            {utp/ut-liter.i Ordem_de_Compra *}
            {method/svc/errors/inserr.i
                               &ErrorNumber="34324"
                               &ErrorType="EMS"
                               &ErrorSubType="ERROR"
                               &ErrorParameters="return-value + '~~~~~' + string(ordem-compra.numero-ordem, 'zzzzz9,99')"}
        END.
    
        /*Drawback*/
        IF NOT AVAIL param-global THEN
            FIND FIRST param-global NO-LOCK NO-ERROR.
        IF  param-global.log-modul-draw THEN DO:
            IF CAN-FIND(FIRST prazo-compra
                        WHERE prazo-compra.numero-ordem = ordem-compra.numero-ordem
                          AND &IF "{&bf_mat_versao_ems}" >= "2.09" &THEN
                             prazo-compra.cod-ato-concessor <> ""
                         &ELSE
                             TRIM(SUBSTRING(prazo-compra.char-2,11,30)) <> ""
                         &ENDIF) THEN DO:
               {utp/ut-liter.i Ordem_de_Compra *}
               ASSIGN c-lbl-liter1 = TRIM(RETURN-VALUE).
               {utp/ut-liter.i Ato_Concess¢rio(Drawback) * r}
               {method/svc/errors/inserr.i
                               &ErrorNumber="5"
                               &ErrorType="EMS"
                               &ErrorSubType="ERROR"
                               &ErrorParameters="c-lbl-liter1 + '~~~~~' + trim(return-value)"}         
            END.
        END.
    
    
        for each tt-epc where tt-epc.cod-event = "valEliminaRelacOrdemPedido":
            delete tt-epc.
        end.
        /* Include i-epc200.i2: Cria‡Æo de registro para temp-table tt-epc */
        {include/i-epc200.i2 &CodEvent='"valEliminaRelacOrdemPedido"'
                             &CodParameter='"OBJECT-HANDLE"'
                             &ValueParameter="string(this-procedure)"}
        {include/i-epc200.i2 &CodEvent='"valEliminaRelacOrdemPedido"'
                             &CodParameter='"rowid-ordem-compra"'
                             &ValueParameter="string(rowid(ordem-compra))"}
        /* Include i-epc201.i: Chamada do programa de EPC */
        {include/i-epc201.i "valEliminaRelacOrdemPedido"}
        if  return-value = "NOK":U then do:
            undo, return "NOK":U.
        end.
    
        return "OK".
    END PROCEDURE.
    
    Agora estuda ai pra ver se tem como vc proceder, vc pode criar uma bo falsa também, e sobre escrever a procedure.

Compartilhe esta Página