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.
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.