[RESOLVIDO] Too Many Indexes

Discussão em 'EMS , HCM e Totvs 11' iniciado por kikofr, Outubro 25, 2010.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. marcioricardo

    marcioricardo Membro Participativo

    kikofr, conseguiu resolver o seu problema de TEMP-TABLES?

    Estou com esse problema aqui e está f... de resolver, a consultoria não consegue encontrar e falam que o problema é no banco de dados, que não é verdade, certo?
    Já estou até aprendendo a desenvolver em progress pra ver se resolvo isso.
  2. kikofr

    kikofr Membro Participativo

    Bom dia Marcio,

    Excluindo a procedure funcionou no meu caso (DELETE PROCEDURE<NOME DO OBJETO HANDLE>.), o código estava entrando em looping e executando o diversas vezes o Handle.

    mas poste o código para que possamos ajudar.
  3. marcioricardo

    marcioricardo Membro Participativo

    Segue um dos códigos

    Código:
    {include/i-prgvrs.i MRT001RP.P 2.04.00.026}
    {utp/ut-glob.i}
    
    def var h-bodi154           as handle      no-undo.
    def var h-bodi154cal        as handle      no-undo.
    def var h-bodi157           as handle      no-undo.
    def var h-bodi159           as handle      no-undo.
    DEF VAR h-bodi018           AS HANDLE      NO-UNDO.
    def var h-bodi159sdf        as handle      no-undo.
    def var h-bodi159cal        as handle      no-undo.
    def var h-bodi159com        as handle      no-undo.
    def var retorno-pedido as char format "x(3)" no-undo.
    
    DEF VAR lg-erro AS LOG NO-UNDO.
    
    /* --- include email --- */ 
    {utp/utapi019.i}
    
    /* temp table tt-emitente e tt-loc-entr */
    {cdp/cdapi229.i}
    
    DEFINE VARIABLE prog-externo AS CHARACTER   NO-UNDO.
    
    def temp-table tt-dist-emitente-aux no-undo like dist-emitente
        INDEX ch-codigo IS PRIMARY cod-emitente.
    
    def temp-table tt-dist-emitente no-undo like dist-emitente
        field cod-maq-origem   as   integer format "9999"
        field num-processo     as   integer format ">>>>>>>>9" initial 0
        field num-sequencia    as   integer format ">>>>>9"    initial 0
        field ind-tipo-movto   as   integer format "99"        initial 1
        INDEX ch-codigo IS PRIMARY  cod-maq-origem
                                    num-processo
                                    num-sequencia.
    
    
    
    /**************************** definidas acima
    def temp-table tt-emitente like emitente
        field cod-maq-origem   as   integer format "9999"
        field num-processo     as   integer format ">>>>>>>>9" initial 0
        field num-sequencia    as   integer format ">>>>>9"    initial 0
        field ind-tipo-movto   as   integer format "99"        initial 1
        INDEX ch-codigo IS PRIMARY  cod-maq-origem
                                    num-processo
                                    num-sequencia.
                         
    
    def temp-table tt-dist-emitente-aux like dist-emitente
        INDEX ch-codigo IS PRIMARY cod-emitente. 
        
    def temp-table tt-dist-emitente like dist-emitente
        field cod-maq-origem   as   integer format "9999"
        field num-processo     as   integer format ">>>>>>>>9" initial 0
        field num-sequencia    as   integer format ">>>>>9"    initial 0
        field ind-tipo-movto   as   integer format "99"        initial 1
        INDEX ch-codigo IS PRIMARY  cod-maq-origem
                                    num-processo
                                    num-sequencia.
    
    def temp-table tt-loc-entr-aux like loc-entr
        INDEX ch-codigo IS PRIMARY nome-abrev
                                   cod-entrega. 
        
    def temp-table tt-loc-entr like loc-entr
        field cod-maq-origem   as   integer format "9999"
        field num-processo     as   integer format ">>>>>>>>9" initial 0
        field num-sequencia    as   integer format ">>>>>9"    initial 0
        field ind-tipo-movto   as   integer format "99"        initial 1
        INDEX ch-codigo IS PRIMARY  cod-maq-origem
                                    num-processo
                                    num-sequencia.                                
    ******************/
    
    /* temp table tt-erros geral */
    {cdp/cdapi300.i1}
    
    
    /* --- Temporary Table Definitions --- */
    define temp-table tt-param no-undo
        field destino          as integer
        field arquivo          as char format "x(35)"
        field usuario          as char format "x(12)"
        field data-exec        as date
        field hora-exec        as integer
        field classifica       as integer
        field desc-classifica  as char format "x(40)"
        FIELD lg-pedido        AS LOG
        FIELD lg-cliente       AS LOG
        FIELD lg-reprocessar   AS LOG
        FIELD nr-pedcli-ini    AS CHAR
        FIELD nr-pedcli-fim    AS CHAR
        FIELD cod-emitente-ini AS INT
        FIELD cod-emitente-fim   AS INT
        FIELD lg-reprocessar-cli AS LOG.
    
    def temp-table ttPed-venda      no-undo like ped-venda
             field r-rowid          as rowid.
    
    def temp-table ttPed-item       no-undo like ped-item
             field r-rowid          as rowid.
    
    def temp-table ttCond-Ped       no-undo like Cond-Ped
             field r-rowid          as rowid.
    
    def temp-table ttPed-Repre      no-undo like ped-repre
             field r-rowid          as rowid.
    
    def temp-table RowErrors        no-undo
             field ErrorSequence    as integer
             field ErrorNumber      as integer
             field ErrorDescription as character
             field ErrorParameters  as character
             field ErrorType        as character
             field ErrorHelp        as character
             field ErrorSubType     as character.
    
    def temp-table tt-raw-digita no-undo
        field raw-digita as raw.
    
    def input parameter raw-param as raw no-undo.
    def input parameter table for tt-raw-digita.
    
    create tt-param.
    raw-transfer raw-param to tt-param.
    
    find first tt-param.
    
    {include/i-rpvar.i}
    
    def var h-acomp as handle no-undo.
    
    find first param-global no-lock no-error.
    
    find empresa where
         empresa.ep-codigo = param-global.empresa-prin
         no-lock no-error.
    
    assign c-programa     = 'MRT001RP':U
           c-versao       = '2.04.00':U
           c-revisao      = '.000':U
           c-empresa      = empresa.nome
           c-sistema      = 'Mercanet':U
           c-titulo-relat = 'Importa»’o de Pedidos'.
    
    {mrinc/kbcab.i}
    
    /*FORM tt-dados.cod-forn           COLUMN-LABEL "Fornec" FORMAT '>>>>>9'
         tt-dados.cod-rep            COLUMN-LABEL "C½digo" FORMAT '>>>>>9'
         repres.nome                 COLUMN-LABEL "Representante"
         tt-dados.vl-ini             COLUMN-LABEL "Comiss’o"
         tt-dados.vl-trib            COLUMN-LABEL "Outros!Val. Trib."
         tt-dados.vl-base            COLUMN-LABEL "Total 1"
         tt-dados.ir-comis           COLUMN-LABEL "(-) IRF!Comissao"
         tt-dados.subt-1             COLUMN-LABEL "Total 2"
         tt-dados.vl-inde            COLUMN-LABEL "1/12 Ant!Indeniz."
         tt-dados.ir-inde            COLUMN-LABEL "(-) IRF!Recibo"
         tt-dados.subt-2             COLUMN-LABEL "Total 3"
         tt-dados.adiant             COLUMN-LABEL "Adiantamento"
         tt-dados.cel                COLUMN-LABEL "Celular"
         tt-dados.outros             COLUMN-LABEL "Outras!Despesas"
         tt-dados.vl-final           COLUMN-LABEL "Liquido"
         WITH WIDTH 200 NO-BOX DOWN OVERLAY STREAM-IO FRAME f-emit.
    */
    {include/i-rpout.i}
    
    RUN utp/ut-acomp.p persistent set h-acomp.
    RUN pi-inicializar in h-acomp (input "Inicializando...").
    
    VIEW FRAME f-cabec-172.
    VIEW FRAME f-rodape.
    
    
    
    
    IF tt-param.lg-cliente THEN DO:
        RUN pi-importa-cliente.
    END.
    
    IF tt-param.lg-pedido THEN DO:
        RUN pi-importa-pedido.
    END.
    
    
    
    run pi-finalizar in h-acomp.
    
    {include/i-rpclo.i}
    
    return "OK".
    
    PROCEDURE pi-grava-es-cliente:
    
        FIND FIRST es-ext-es-cliente WHERE
             es-ext-es-cliente.cod-emitente = es-ext-emitente.cod-emitente
             NO-LOCK NO-ERROR.
        
        IF AVAIL es-ext-es-cliente THEN DO:
        
           FIND FIRST es-cliente WHERE
                es-cliente.cod-emitente = es-ext-emitente.cod-emitente
                share-LOCK NO-ERROR.
        
           IF NOT AVAIL es-cliente THEN DO:
        
              CREATE es-cliente.
              ASSIGN es-cliente.cod-emitente = es-ext-emitente.cod-emitente.
          
           END.
        
           ASSIGN es-cliente.cad-financeiro       = es-ext-es-cliente.cad-financeiro
                  es-cliente.cad-fiscal           = es-ext-es-cliente.cad-fiscal
                  es-cliente.permite-corte-caixa  = es-ext-es-cliente.permite-corte-caixa
                  es-cliente.permite-corte-pedido = es-ext-es-cliente.permite-corte-pedido
                  es-cliente.char-1               = es-ext-es-cliente.char-1
                  es-cliente.char-2               = es-ext-es-cliente.char-2
                  es-cliente.dec-1                = es-ext-es-cliente.dec-1
                  es-cliente.dec-2                = es-ext-es-cliente.dec-2
                  es-cliente.int-1                = es-ext-es-cliente.int-1
                  es-cliente.int-2                = es-ext-es-cliente.int-2
                  es-cliente.data-1               = es-ext-es-cliente.data-1
                  es-cliente.data-2               = es-ext-es-cliente.data-2.
        
        end.
    END.
    
    
    PROCEDURE pi-grava-es-ped-venda:
    
        FIND FIRST es-ext-es-ped-venda WHERE
             es-ext-es-ped-venda.nr-pedcli = es-ext-ped-venda.nr-pedcli
             NO-LOCK NO-ERROR.
        
        IF AVAIL es-ext-es-ped-venda THEN DO:
        
           DO TRANSACTION:
                FIND FIRST es-ped-venda WHERE
                    es-ped-venda.nr-pedcli = es-ext-ped-venda.nr-pedcli
                    share-LOCK NO-ERROR.
        
    
    
                IF NOT AVAIL es-ped-venda THEN DO:
             
                   CREATE es-ped-venda.
                   ASSIGN es-ped-venda.nr-pedcli = es-ext-ped-venda.nr-pedcli.
             
                END.
             
                ASSIGN es-ped-venda.nome-abrev        = es-ext-es-ped-venda.nome-abrev
                       es-ped-venda.troca             = es-ext-es-ped-venda.troca
                       es-ped-venda.nome-abrev-ref    = es-ext-es-ped-venda.nome-abrev-ref
                       es-ped-venda.nr-pedcli-ref     = es-ext-es-ped-venda.nr-pedcli-ref
                       es-ped-venda.data-carregamento = es-ext-es-ped-venda.data-carregamento
                       es-ped-venda.permite-corte     = es-ext-es-ped-venda.permite-corte
                       es-ped-venda.char-1            = es-ext-es-ped-venda.char-1
                       es-ped-venda.char-2            = es-ext-es-ped-venda.char-2
                       es-ped-venda.dec-1             = es-ext-es-ped-venda.dec-1
                       es-ped-venda.dec-2             = es-ext-es-ped-venda.dec-2
                       es-ped-venda.int-1             = es-ext-es-ped-venda.int-1
                       es-ped-venda.int-2             = es-ext-es-ped-venda.int-2
                       es-ped-venda.log-1             = es-ext-es-ped-venda.log-1
                       es-ped-venda.log-2             = es-ext-es-ped-venda.log-2
                       es-ped-venda.data-1            = es-ext-es-ped-venda.data-1
                       es-ped-venda.data-2            = es-ext-es-ped-venda.data-2
                       es-ped-venda.cd-plano          = es-ext-es-ped-venda.cd-plano
                       es-ped-venda.num-per-pm        = es-ext-es-ped-venda.num-per-pm
                       es-ped-venda.cod-estab-solic   = es-ext-es-ped-venda.cod-estab-solic
                       es-ped-venda.nome-ab-reg       = es-ext-es-ped-venda.nome-ab-reg
                       es-ped-venda.nome-mic-rec      = es-ext-es-ped-venda.nome-mic-rec
                       es-ped-venda.ped-ord-compra    = es-ext-ped-venda.nr-pedrep.
           END. /*transaction */
             
        end.
    END.
    
    PROCEDURE pi-importa-cliente:
    
    
        IF tt-param.lg-reprocessar-cli THEN DO:
        
        
            FOR EACH es-ext-emitente WHERE
                     es-ext-emitente.num-id-transacao >= tt-param.cod-emitente-ini
                 AND es-ext-emitente.num-id-transacao <= tt-param.cod-emitente-fim
                     :
                     
                RUN pi-inclusao-cliente.
            END.
        END.
        ELSE DO:
    
            FOR EACH es-ext-emitente WHERE
                     es-ext-emitente.situacao = 1
                     :
                RUN pi-inclusao-cliente.
            
            END.                                              
        
        END.
    
    END.
    
    
    
    PROCEDURE pi-inclusao-cliente:
    
            EMPTY TEMP-TABLE tt-emitente.
            
            CREATE tt-emitente.
    
            FIND emitente WHERE 
                 emitente.cod-emitente = es-ext-emitente.cod-emitente
                 NO-LOCK NO-ERROR.
    
            IF  NOT AVAIL emitente THEN DO:
        /*        RUN cdp/cd9960.p (output tt-emitente.cod-emitente). pega o prox numero */
                ASSIGN tt-emitente.ind-tipo-movto = 1 /* Inclus’o */
                       /* Defaults da Inclus’o */
                       tt-emitente.identific      = 1
                       tt-emitente.data-implant   = TODAY.
            END.
            ELSE DO:
                BUFFER-COPY emitente TO tt-emitente.
    
                ASSIGN tt-emitente.ind-tipo-movto = 2. /* Altera»’o */
                IF  emitente.identific = 2 THEN
                    ASSIGN tt-emitente.identific = 3.
    
            END.
            
            
    
    
            ASSIGN tt-emitente.cod-gr-cli   = es-ext-emitente.cod-gr-cli
                   tt-emitente.cgc          = es-ext-emitente.cnpj
                   tt-emitente.dt-lim-cred  = es-ext-emitente.dt-lim-cred
                   tt-emitente.telefone[1]  = es-ext-emitente.telefone-1
                   tt-emitente.telefone[2]  = es-ext-emitente.telefone-2
                   tt-emitente.telefax      = es-ext-emitente.telefax
                   tt-emitente.natureza     = es-ext-emitente.natureza
                   tt-emitente.cod-emitente = es-ext-emitente.cod-emitente
                   tt-emitente.nome-abrev   = es-ext-emitente.nome-abrev
                   tt-emitente.nome-emit    = es-ext-emitente.nome-emit
                   tt-emitente.pais         = es-ext-emitente.pais
                   tt-emitente.estado       = es-ext-emitente.estado
                   tt-emitente.cidade                   = es-ext-emitente.cidade
                   tt-emitente.bairro                   = es-ext-emitente.bairro
                   tt-emitente.endereco                 = es-ext-emitente.endereco
                   tt-emitente.cep                      = es-ext-emitente.cep
                   tt-emitente.caixa-postal             = es-ext-emitente.caixa-postal
                   tt-emitente.ins-estadual             = es-ext-emitente.ins-estadual
                   tt-emitente.ins-municipal            = es-ext-emitente.ins-municipal
                   tt-emitente.contrib-icms             = es-ext-emitente.contrib-icms
                   /*tt-emitente.tributa-pis              = es-ext-emitente.tributa-pis
                   tt-emitente.tributa-cofins           = es-ext-emitente.tributa-cofins*/
                   tt-emitente.atividade                = es-ext-emitente.atividade
                   tt-emitente.data-implant             = es-ext-emitente.dt-implant
                   /*tt-emitente.cod-estab                = es-ext-emitente.cod-estabel*/
                   tt-emitente.cod-rep                  = es-ext-emitente.cod-rep
                   tt-emitente.categoria                = es-ext-emitente.categoria
                   tt-emitente.lim-credito              = es-ext-emitente.lim-credito
    
                   tt-emitente.portador                 = es-ext-emitente.portador 
    
                   tt-emitente.observacoes              = es-ext-emitente.observacao
                   tt-emitente.port-prefer              = es-ext-emitente.portador
                   tt-emitente.cod-suframa              = es-ext-emitente.cod-suframa               
                   tt-emitente.end-cobranca             = es-ext-emitente.cod-emitente  /* codigo do cliente de cobranca */
                   tt-emitente.cgc-cob                  = es-ext-emitente.cgc-cob
                   tt-emitente.cep-cob                  = es-ext-emitente.cep-cob
                   tt-emitente.estado-cob               = es-ext-emitente.estado-cob
                   tt-emitente.cidade-cob               = es-ext-emitente.cidade-cob
                   tt-emitente.bairro-cob               = es-ext-emitente.bairro-cob
                   tt-emitente.endereco-cob             = es-ext-emitente.endereco-cob
                   tt-emitente.cx-post-cob              = es-ext-emitente.cx-post-cob
                   tt-emitente.ins-est-cob              = es-ext-emitente.ins-est-cob
                   tt-emitente.e-mail                   = es-ext-emitente.e-mail
                   tt-emitente.pais-cob                 = es-ext-emitente.pais-cob 
                   tt-emitente.nome-matriz              = tt-emitente.nome-abrev
                   
                   tt-emitente.modalidade               = int(substr(es-ext-emitente.char-1, 6, 1))
                   tt-emitente.cod-transp               = int(es-ext-emitente.int-1)   /*99999   Fixo Sta Lucia */
                   tt-emitente.tp-rec-padrao            = 1      /* Receita Padrao */
                   tt-emitente.ind-cre-cli              = 2      /* credito automatico */
                   tt-emitente.contato[1]               = es-ext-emitente.char-2
                   .
    
    
    /****
    message 'tt-emitente.portador ' tt-emitente.portador view-as alert-box.
    message 'tt-emitente.port-prefer ' tt-emitente.port-prefer view-as alert-box.
    message 'tt-emitente.modalidade ' tt-emitente.modalidade view-as alert-box.
    *****/
    
                   
            IF  tt-emitente.endereco <> "" THEN DO:
                 CREATE tt-loc-entr.
    
                 ASSIGN tt-emitente.cod-entrega  = "PadrÆo"    /* TRIM (RETURN-VALUE)  */
                        tt-loc-entr.cod-entrega  = "PadrÆo"    /* TRIM (RETURN-VALUE)  */
                        tt-loc-entr.nome-abrev   = tt-emitente.nome-abrev
                        tt-loc-entr.cidade       = tt-emitente.cidade
                        tt-loc-entr.endereco     = tt-emitente.endereco
                        tt-loc-entr.e-mail       = tt-emitente.e-mail
                        tt-loc-entr.estado       = tt-emitente.estado
                        tt-loc-entr.ins-estadual = tt-emitente.ins-estadual
                        tt-loc-entr.pais         = tt-emitente.pais
                        tt-loc-entr.cep          = tt-emitente.cep
                        tt-loc-entr.cgc          = tt-emitente.cgc.
             END.
    
    
            /* API de efetiva»’o dos dados */
            CREATE tt-versao-integr.
            ASSIGN tt-versao-integr.cod-versao-integracao = 001
                   tt-versao-integr.ind-origem-msg        = 01.
    
            /* 2.04
            RUN cdp/cdapi329.p (INPUT  TABLE tt-versao-integr,
                                OUTPUT TABLE tt-erros-geral,
                                INPUT  TABLE tt-emitente,
                                INPUT  TABLE tt-loc-entr). */
    
            /* 2.06 */
            RUN cdp/cdapi329.p (INPUT  TABLE tt-versao-integr,
                                OUTPUT TABLE tt-erros-geral,
                                INPUT  TABLE tt-emitente,
                                INPUT  TABLE tt-loc-entr,
                                INPUT  TABLE tt-dist-emitente).
    
    
            FIND FIRST tt-erros-geral NO-ERROR.
    
            IF AVAIL tt-erros-geral THEN
                FOR EACH tt-erros-geral:
        
        
                   RUN pi-grava-erro (INPUT '',
                                      INPUT es-ext-emitente.num-id-transacao,
                                      INPUT tt-emitente.ind-tipo-movto,
                                      INPUT es-ext-emitente.nome-abrev,
                                      INPUT '',
                                      INPUT tt-erros-geral.cod-erro,
                                      INPUT tt-erros-geral.des-erro,
                                      INPUT '').
        
                   ASSIGN es-ext-emitente.situacao = 2.
        
                END.
            ELSE DO:
    
                RUN pi-grava-erro (INPUT '',
                                   INPUT es-ext-emitente.num-id-transacao,
                                   INPUT tt-emitente.ind-tipo-movto,
                                   INPUT es-ext-emitente.nome-abrev,
                                   INPUT '',
                                   INPUT 0,
                                   INPUT 'OK',
                                   INPUT 'Importa‡Æo OK.').
    
                ASSIGN es-ext-emitente.situacao = 3.
    
                RUN pi-grava-es-cliente.
    
            END.
    
    END.
    
    
    
    PROCEDURE pi-importa-pedido:
        /* *** */
    
    
    /*message 'reprocessar ' tt-param.lg-reprocessar view-as alert-box. 
    message 'tt-param.nr-pedcli-ini'  tt-param.nr-pedcli-ini view-as alert-box.
    message 'tt-param.nr-pedcli-fim'  tt-param.nr-pedcli-fim view-as alert-box.
    */
    
        
        run dibo/bodi159.p        persistent set h-bodi159.
        run dibo/bodi157.p        persistent set h-bodi157.
        run dibo/bodi159sdf.p     persistent set h-bodi159sdf.
        run dibo/bodi159cal.p     persistent set h-bodi159cal.
        run dibo/bodi159com.p     persistent set h-bodi159com.  
        RUN dibo/bodi018.p        PERSISTENT SET h-bodi018.
        run dibo/bodi154.p        persistent set h-bodi154.
        run dibo/bodi154cal.p     persistent set h-bodi154cal.
     
    
    
    
        IF tt-param.lg-reprocessar THEN DO:
        
        
            FOR EACH es-ext-ped-venda WHERE
                     es-ext-ped-venda.nr-pedcli >= tt-param.nr-pedcli-ini
                 AND es-ext-ped-venda.nr-pedcli <= tt-param.nr-pedcli-fim
                     :
                     
                     
                ASSIGN lg-erro = FALSE.
    
                IF es-ext-ped-venda.ind-tipo-movto = 1 THEN DO:
                    RUN pi-inclusao.
                END.
                ELSE IF es-ext-ped-venda.ind-tipo-movto = 2 THEN DO:
                    RUN pi-exclusao.
                    RUN pi-inclusao.
                END.
                ELSE IF es-ext-ped-venda.ind-tipo-movto = 3 THEN DO:
                    RUN pi-exclusao.
                END.
    
                IF lg-erro THEN 
                    ASSIGN es-ext-ped-venda.situacao = 2.
                ELSE do:
                   ASSIGN es-ext-ped-venda.situacao = 3.
    
                   /* se nao ocorreu nenhum erro grava a es-ped-venda */
                   RUN pi-grava-es-ped-venda.
                end.
    
            END.
        END.
        ELSE DO:
        
            FOR EACH es-ext-ped-venda WHERE
                     es-ext-ped-venda.situacao = 1
                     :
    
                ASSIGN lg-erro = FALSE.
    
                IF es-ext-ped-venda.ind-tipo-movto = 1 THEN DO:
                    RUN pi-inclusao.
                END.
                ELSE IF es-ext-ped-venda.ind-tipo-movto = 2 THEN DO:
                    RUN pi-exclusao.
                    RUN pi-inclusao.
                END.
                ELSE IF es-ext-ped-venda.ind-tipo-movto = 3 THEN DO:
                    RUN pi-exclusao.
                END.
    
                IF lg-erro THEN 
                    ASSIGN es-ext-ped-venda.situacao = 2.
                ELSE do:
                    ASSIGN es-ext-ped-venda.situacao = 3.
    
                   /* se nao ocorreu nenhum erro grava a es-ped-venda */
                   RUN pi-grava-es-ped-venda.
    
                end.
            END.
        END.
        
    
        if valid-handle(h-bodi154) then do:
           run destroyBO in h-bodi154.
           run destroy   in h-bodi154.      
         end.
    
        if valid-handle(h-bodi154cal) then delete procedure h-bodi154cal.
    
        if valid-handle(h-bodi159) then do:
             run destroyBO in h-bodi159.
             run destroy   in h-bodi159.
        end.
     
        if valid-handle(h-bodi157) then delete procedure h-bodi157.
    
        if valid-handle(h-bodi159com) then delete procedure h-bodi159com.
        if valid-handle(h-bodi159sdf) then delete procedure h-bodi159sdf.
        if valid-handle(h-bodi159cal) then delete procedure h-bodi159cal.
        if valid-handle(h-bodi018) then delete procedure h-bodi018.
        
    END.
    
    PROCEDURE pi-grava-erro:
        DEFINE INPUT PARAM p-cod-estabel     AS CHAR.
        DEFINE INPUT PARAM p-id              AS INT.
        DEFINE INPUT PARAM p-tipo-operacao   AS INT.
        DEFINE INPUT PARAM p-nome-abrev      AS CHAR.
        DEFINE INPUT PARAM p-nr-pedcli       AS CHAR.
        DEFINE INPUT PARAM p-cod-ocorrencia  AS INT.
        DEFINE INPUT PARAM p-msg-ocorrencia  AS CHAR.
        DEFINE INPUT PARAM p-desc-ocorrencia AS CHAR.
    
        DEF VAR nr-seq AS INT NO-UNDO.
    
        FIND LAST  es-ext-ocorrencia WHERE
                   es-ext-ocorrencia.cod-estabel      = p-cod-estabel
               AND es-ext-ocorrencia.num-id-transacao = p-id
               AND es-ext-ocorrencia.tipo-operacao    = p-tipo-operacao
                   NO-LOCK NO-ERROR.
    
        IF NOT AVAIL es-ext-ocorrencia THEN
            ASSIGN nr-seq = 1.
        ELSE ASSIGN nr-seq = es-ext-ocorrencia.sequencia + 1.
    
        CREATE es-ext-ocorrencia.
        ASSIGN es-ext-ocorrencia.cod-estabel      = p-cod-estabel   
               es-ext-ocorrencia.num-id-transacao = p-id            
               es-ext-ocorrencia.tipo-operacao    = p-tipo-operacao 
               es-ext-ocorrencia.sequencia        = nr-seq
               es-ext-ocorrencia.nome-abrev       = p-nome-abrev
               es-ext-ocorrencia.nr-pedcli        = p-nr-pedcli
               es-ext-ocorrencia.dt-transacao     = TODAY
               es-ext-ocorrencia.hr-transacao     = STRING(TIME, 'HH:MM:SS')
               es-ext-ocorrencia.cod-ocorren   = p-cod-ocorrencia
               es-ext-ocorrencia.desc-ocorren  = p-desc-ocorrencia
               es-ext-ocorrencia.msg-ocorren   = p-msg-ocorrencia
               .
               
    END.
    
    PROCEDURE pi-exclusao:
    
    /**** retirado e incluido antes do for each es-ext-ped-venda
        run dibo/bodi159.p        persistent set h-bodi159.
        *****/
    
        run openQueryStatic in h-bodi159 (input 'Default').
    
    
        run goToKey      in h-bodi159 (input es-ext-ped-venda.nome-abrev, 
                                       input es-ext-ped-venda.nr-pedcli). 
        run deleteRecord in h-bodi159. 
    
        assign retorno-pedido = return-value.
    
        run getRowErrors in h-bodi159 (OUTPUT TABLE RowErrors).
    
        FIND FIRST RowErrors NO-ERROR.
        IF NOT AVAIL RowErrors THEN DO:
            RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                               INPUT es-ext-ped-venda.num-id-transacao,
                               INPUT es-ext-ped-venda.ind-tipo-movto,
                               INPUT es-ext-ped-venda.nome-abrev,
                               INPUT es-ext-ped-venda.nr-pedcli,
                               INPUT 0,
                               INPUT 'OK',
                               INPUT 'ExclusÆo OK').
    
        END.
        ELSE  DO:
            FOR EACH RowErrors:
    
                RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                   INPUT es-ext-ped-venda.num-id-transacao,
                                   INPUT es-ext-ped-venda.ind-tipo-movto,
                                   INPUT es-ext-ped-venda.nome-abrev,
                                   INPUT es-ext-ped-venda.nr-pedcli,
                                   INPUT RowErrors.ErrorNumber,
                                   INPUT RowErrors.ErrorDescription,
                                   INPUT RowErrors.ErrorHelp).
    
                ASSIGN lg-erro = TRUE.
    
            END.
        END.
    
    /* retirado e incluido antes do for each es-ext-ped-venda
        run destroyBO in h-bodi159.
        ****/
    
    END.
    
    PROCEDURE pi-inclusao:
    
      do transaction:
        find first emitente where 
                   emitente.cod-emitente = es-ext-ped-venda.cod-emitente
                   no-lock no-error.
    
        if not avail emitente then do:
            RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                              INPUT es-ext-ped-venda.num-id-transacao,
                              INPUT es-ext-ped-venda.ind-tipo-movto,
                              INPUT es-ext-ped-venda.nome-abrev,
                              INPUT es-ext-ped-venda.nr-pedcli,
                              INPUT 17567,
                              INPUT 'Cliente n’o cadastrado',
                              INPUT 'Cliente n’o cadastrado').
            RETURN.
        end.
    
       /* IMPLANTANDO PEDIDO VIA BO's */          
       find first para-ped no-lock no-error.
    
    /*** retirado deste ponto e adicionado antes do laço for each es-ext-ped-venda
       run dibo/bodi159.p        persistent set h-bodi159.
       run dibo/bodi157.p        persistent set h-bodi157.
       run dibo/bodi159sdf.p     persistent set h-bodi159sdf.
       run dibo/bodi159cal.p     persistent set h-bodi159cal.
       run dibo/bodi159com.p     persistent set h-bodi159com.  
       RUN dibo/bodi018.p        PERSISTENT SET h-bodi018.
       run dibo/bodi154.p        persistent set h-bodi154.
       run dibo/bodi154cal.p     persistent set h-bodi154cal.
       ***/
       
       run openQueryStatic in h-bodi159 (input 'Default').
    
       EMPTY TEMP-TABLE ttPed-venda.
    
       create ttPed-venda.
    
    
       assign ttPed-Venda.nome-abrev   = es-ext-ped-venda.nome-abrev
              ttPed-Venda.nr-pedcli    = es-ext-ped-venda.nr-pedcli
              ttPed-Venda.nr-pedrep    = es-ext-ped-venda.nr-pedrep.
              
    
    /*** 
       run inputTable          in h-bodi159sdf(input  table ttPed-Venda).
       run setDefaultCustomer  in h-bodi159sdf.
       run outputTable         in h-bodi159sdf(output table ttPed-Venda).   
    ***/
    
       assign ttPed-Venda.cod-estabel  = es-ext-ped-venda.cod-estabel
              ttPed-Venda.dt-emissao   = es-ext-ped-venda.dt-emissao
              ttPed-Venda.dt-implant   = TODAY /* ou param da tela no programa que dispara */
              ttPed-Venda.mo-codigo    = es-ext-ped-venda.mo-codigo
              ttPed-Venda.mo-fatur     = es-ext-ped-venda.mo-fatur
              ttPed-Venda.desc-cancela = ''.
    
    
       find first ttPed-venda no-error.
    
       FIND FIRST es-ext-ped-item WHERE
                  es-ext-ped-item.nome-abrev = es-ext-ped-venda.nome-abrev
              AND es-ext-ped-item.nr-pedcli  = es-ext-ped-venda.nr-pedcli
                  NO-LOCK NO-ERROR.
    
    
       FIND FIRST natur-oper WHERE
                  natur-oper.nat-operacao  = es-ext-ped-item.nat-operacao
                  NO-LOCK NO-ERROR.
    
    
    /*message "condicao " es-ext-ped-venda.nat-operacao view-as alert-box.*/
    
    
       assign ttPed-Venda.dt-entrega    = IF es-ext-ped-venda.dt-entrega < today THEN today
                                          ELSE es-ext-ped-venda.dt-entrega
                                          
              ttPed-Venda.nr-tabpre     = es-ext-ped-venda.nr-tabpre
              ttPed-Venda.nat-operacao  = es-ext-ped-item.nat-operacao
              ttPed-Venda.cod-mensagem  = natur-oper.cod-mensagem when avail natur-oper
              ttPed-Venda.no-ab-reppri  = es-ext-ped-venda.no-ab-reppri
              ttPed-Venda.perc-desco1   = es-ext-ped-venda.perc-desco1
              ttPed-Venda.perc-desco2   = es-ext-ped-venda.perc-desco2
              ttPed-Venda.cod-entrega   = es-ext-ped-venda.cod-entrega
              ttPed-Venda.nome-transp   = es-ext-ped-venda.nome-transp
              ttPed-Venda.nome-tr-red   = es-ext-ped-venda.nome-tr-red
              ttPed-Venda.tp-preco      = es-ext-ped-venda.tp-preco
              ttPed-Venda.user-impl     = 'SUPER'   /*es-ext-ped-venda.user-impl*/
              ttPed-Venda.dt-userimp    = TODAY
              ttPed-Venda.log-usa-tabela-desconto = es-ext-ped-venda.log-usa-tabela-desconto
              ttPed-Venda.des-pct-desconto-inform = es-ext-ped-venda.des-pct-desconto-inform
              ttPed-Venda.desc-suspend  = ''
    
    /*          ttPed-Venda.cod-cond-pag  = es-ext-ped-venda.cod-cond-pag */
    
              ttPed-Venda.cod-cond-pag  = IF es-ext-ped-venda.nat-operacao = "3" or es-ext-ped-venda.nat-operacao = "2" THEN 0
                                          ELSE es-ext-ped-venda.cod-cond-pag  /* so manda cond-pag se nao for transferencia e bonificacao*/
    
              ttPed-venda.nr-tab-finan  = es-ext-ped-venda.nr-tab-finan 
              ttPed-venda.nr-ind-finan  = es-ext-ped-venda.nr-ind-finan
              ttPed-venda.dt-minfat     = es-ext-ped-venda.dt-minfat
              ttPed-venda.dt-lim-fat    = es-ext-ped-venda.dt-lim-fat
              ttPed-venda.tp-pedido     = es-ext-ped-venda.tp-pedido
              ttPed-venda.cod-priori    = es-ext-ped-venda.cod-priori
              ttPed-venda.cidade-cif    = es-ext-ped-venda.cidade-cif
              ttPed-venda.contato       = es-ext-ped-venda.contato
    
    /********************
              ttPed-venda.cod-portador  = IF  es-ext-ped-venda.cod-portador <> 0 THEN 
                                          int(substr(string(es-ext-ped-venda.cod-portador), 1, length(string(es-ext-ped-venda.cod-portador)) - 1))
                                          ELSE emitente.portador
              ttPed-venda.modalidade    = IF  es-ext-ped-venda.modalidade <> 0 THEN int(substr(string(es-ext-ped-venda.cod-portador), length(string(es-ext-ped-venda.cod-portador)), 1))
                                          ELSE emitente.modalidade
    *******************/
    /*          ttPed-venda.cod-portador  = es-ext-ped-venda.cod-portador
              ttPed-venda.modalidade    = es-ext-ped-venda.modalidade */
    
    
              ttPed-venda.cod-portador  = emitente.portador     /* envia especifico para a ASA o portador e modalidade do emitente */
              ttPed-venda.modalidade    = emitente.modalidade
    
    
              ttPed-venda.esp-ped                     = es-ext-ped-venda.esp-ped
              ttPed-venda.estab-atend                 = es-ext-ped-venda.estab-atend 
              ttPed-venda.estab-central               = es-ext-ped-venda.estab-central
              ttPed-venda.estab-destino               = es-ext-ped-venda.estab-destino 
              ttPed-venda.cod-canal-venda             = emitente.cod-canal-venda   /*es-ext-ped-venda.cod-canal-venda*/
              ttPed-venda.val-pct-desconto-tab-prec   = es-ext-ped-venda.val-pct-desconto-tab-prec
              ttPed-venda.val-pct-desconto-valor      = es-ext-ped-venda.val-pct-desconto-valor
              ttPed-venda.num-pedido-origem           = es-ext-ped-venda.num-pedido-origem
              ttPed-venda.nome-abrev-tri              = es-ext-ped-venda.nome-abrev-tri
              ttPed-venda.cond-redespa                = es-ext-ped-venda.cond-redespa
              ttPed-venda.observacoes                 = es-ext-ped-venda.observacoes
              ttPed-venda.cod-emitente                = es-ext-ped-venda.cod-emitente
              ttPed-venda.cod-des-merc                = es-ext-ped-venda.cod-des-merc
              ttPed-venda.ind-fat-par                 = es-ext-ped-venda.ind-fat-par
              ttPed-venda.ind-antecip                 = es-ext-ped-venda.ind-antecip
              ttPed-venda.log-ped-bonif-pendente      = es-ext-ped-venda.log-ped-bonif-pendente
              ttPed-venda.cod-sit-ped                 = es-ext-ped-venda.cod-sit-ped
              ttPed-venda.desc-cancela                = IF   es-ext-ped-venda.desc-cancela = ? THEN ''
                                                        ELSE es-ext-ped-venda.desc-cancela
              ttPed-venda.cond-espec                  = es-ext-ped-venda.cond-espec
              ttPed-venda.dt-usercan                  = es-ext-ped-venda.dt-usercan
              ttPed-venda.cd-cancela                  = es-ext-ped-venda.cd-cancela
              ttPed-venda.tip-cob-desp                = es-ext-ped-venda.tip-cob-desp
              .
       
       find first loc-entr where loc-entr.nome-abrev = emitente.nome-abrev
                             and loc-entr.cod-entrega = ttPed-Venda.cod-entrega no-lock no-error.
    
       if avail loc-entr
       then assign ttPed-Venda.local-entreg = loc-entr.endereco
                   ttPed-Venda.bairro       = loc-entr.bairro
                   ttPed-Venda.cidade       = loc-entr.cidade
                   ttPed-Venda.cep          = loc-entr.cep
                   ttPed-Venda.pais         = loc-entr.pais
                   ttPed-Venda.estado       = loc-entr.estado
                   ttPed-Venda.cgc          = loc-entr.cgc
                   ttPed-Venda.caixa-postal = loc-entr.caixa-postal
                   ttPed-Venda.ins-estadual = loc-entr.ins-estadual.
       else assign ttPed-Venda.local-entreg = emitente.endereco
                   ttPed-Venda.bairro       = emitente.bairro
                   ttPed-Venda.cidade       = emitente.cidade
                   ttPed-Venda.cep          = emitente.cep
                   ttPed-Venda.pais         = emitente.pais
                   ttPed-Venda.estado       = emitente.estado
                   ttPed-Venda.cgc          = emitente.cgc
                   ttPed-Venda.caixa-postal = emitente.caixa-postal
                   ttPed-Venda.ins-estadual = emitente.ins-estadual.
    
    
       FOR FIRST es-ext-param-mercanet
                 NO-LOCK:
    
           ASSIGN prog-externo = 'mrt/' + 'mrx' + TRIM(es-ext-param-mercanet.char-1) + '.p'.
    
           IF SEARCH(prog-externo) <> ? THEN DO:
               RUN VALUE(prog-externo) (INPUT-OUTPUT TABLE ttPed-Venda,
                                        INPUT-OUTPUT TABLE RowErrors).
    
               IF RETURN-VALUE <> 'OK' THEN DO:
                   FOR FIRST RowErrors:
                       RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                          INPUT es-ext-ped-venda.num-id-transacao,
                                          INPUT es-ext-ped-venda.ind-tipo-movto,
                                          INPUT es-ext-ped-venda.nome-abrev,
                                          INPUT es-ext-ped-venda.nr-pedcli,
                                          INPUT RowErrors.ErrorNumber,
                                          INPUT RowErrors.ErrorDescription,
                                          INPUT RowErrors.ErrorHelp).
    
                       ASSIGN lg-erro = TRUE.
    
                   END.
               END.
           END.
       END.
    
       run emptyRowObject  in h-bodi159.  
       run emptyRowErrors  IN h-bodi159.
       run setRecord       IN h-bodi159 (input table ttPed-venda). 
       run setUserLog      in h-bodi159 (input c-seg-usuario).
    
    /*
    output to 'D:\Mercanet\Apag\1.txt' .
    disp ttped-venda except ttped-venda.r-rowid  with 1 column width 300 .
    output close.
    */
    
       run createRecord    in h-bodi159.
    
       assign retorno-pedido = return-value.
    
       run getRowErrors in h-bodi159 (OUTPUT TABLE RowErrors).
    
       FIND FIRST RowErrors NO-ERROR.
    
       IF NOT AVAIL RowErrors THEN DO:
          RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                             INPUT es-ext-ped-venda.num-id-transacao,
                             INPUT es-ext-ped-venda.ind-tipo-movto,
                             INPUT es-ext-ped-venda.nome-abrev,
                             INPUT es-ext-ped-venda.nr-pedcli,
                             INPUT 0,
                             INPUT 'OK',
                             INPUT 'Importacao OK').
    
       END.
       ELSE DO:
           FOR EACH RowErrors
               WHERE RowErrors.errorType <> "internal":
    
               RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                  INPUT es-ext-ped-venda.num-id-transacao,
                                  INPUT es-ext-ped-venda.ind-tipo-movto,
                                  INPUT es-ext-ped-venda.nome-abrev,
                                  INPUT es-ext-ped-venda.nr-pedcli,
                                  INPUT RowErrors.ErrorNumber,
                                  INPUT RowErrors.ErrorDescription,
                                  INPUT RowErrors.ErrorHelp).
    
                lg-erro = YES.
           END.
       END.
    
       if retorno-pedido = 'OK' and lg-erro = yes then do:
          run goToKey      in h-bodi159 (input ttPed-Venda.nome-abrev, 
                                         input ttPed-Venda.nr-pedcli). 
          run deleteRecord in h-bodi159. 
    /*      message string(time,"hh:mm:ss") + " - Pedido nao implantado. Restricoes da EPC" view-as alert-box.*/
       end.
    
       if lg-erro = no then do: /* Pedido OK */
     
          run getRecord  in h-bodi159 (output table ttPed-venda).  
          for first ttPed-Venda: end.
    
    
    
          /* parte da condicao especifica */      
    
          FOR EACH es-ext-Cond-Ped where
                   es-ext-Cond-Ped.nome-abrev = ttPed-Venda.nome-abrev
               and es-ext-Cond-Ped.nr-pedcli  = ttPed-venda.nr-pedcli            
                   NO-LOCK:
    
            EMPTY TEMP-TABLE ttCond-Ped.
    
            CREATE ttCond-Ped.
            BUFFER-COPY es-ext-Cond-Ped TO ttCond-Ped.
    
            ASSIGN ttCond-ped.nr-pedido = ttPed-venda.nr-pedido.
    
            find first ttCond-Ped no-lock no-error.
            
            if avail ttCond-Ped then do:
            
                run emptyRowObject  in h-bodi018.
                run emptyRowErrors  in h-bodi018.
                run openQueryStatic in h-bodi018 (input 'Default').
                
                run setRecord       in  h-bodi018   (input table ttCond-Ped).
                run createRecord    in  h-bodi018.
      
                RUN getRowErrors    IN  h-bodi018   (OUTPUT TABLE RowErrors). 
      
                FIND FIRST RowErrors NO-ERROR.
          
                IF NOT AVAIL RowErrors THEN DO:
                   RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                      INPUT es-ext-ped-venda.num-id-transacao,
                                      INPUT es-ext-ped-venda.ind-tipo-movto,
                                      INPUT es-ext-ped-venda.nome-abrev,
                                      INPUT es-ext-ped-venda.nr-pedcli,
                                      INPUT 0,
                                      INPUT 'OK',
                                      INPUT 'Cond. Especifica importada.').
          
                END.
                ELSE DO:
                        FOR EACH RowErrors
                           WHERE RowErrors.errorType <> "internal":
          
                           RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                              INPUT es-ext-ped-venda.num-id-transacao,
                                              INPUT es-ext-ped-venda.ind-tipo-movto,
                                              INPUT es-ext-ped-venda.nome-abrev,
                                              INPUT es-ext-ped-venda.nr-pedcli,
                                              INPUT RowErrors.ErrorNumber,
                                              INPUT RowErrors.ErrorDescription,
                                              INPUT RowErrors.ErrorHelp).
          
                           lg-erro = yes.
                        end.
                END.
            end. /* avail ttCond-Ped */
    
          END.
    
          /********************************/
    
    
    
    
    
          
          run createOrdersRepresentatives in h-bodi157 (input ttPed-Venda.r-rowid).
    
         /* run emptyRowErrors  in h-bodi157.  
          run openQueryStatic in h-bodi157   (input 'Default').*/
          run emptyrowobject  in h-bodi157.
          run openquerystatic in h-bodi157   (input "main":u).
          
          FOR EACH es-ext-ped-repre WHERE
                   es-ext-ped-repre.nome-abrev = es-ext-ped-venda.nome-abrev
               AND es-ext-ped-repre.nr-pedcli  = es-ext-ped-venda.nr-pedcli
                   NO-LOCK,
             FIRST repres WHERE
                   repres.cod-rep = es-ext-ped-repre.cod-rep
                   NO-LOCK:
    
              FIND FIRST ped-repre WHERE 
                         ped-repre.nr-pedido   = ttPed-venda.nr-pedido
                     AND ped-repre.nome-ab-rep = repres.nome-abrev
                         NO-LOCK NO-ERROR.
    
              IF AVAIL ped-repre THEN DO:
                  BUFFER-COPY ped-repre TO ttPed-repre.
              END.
    
              ASSIGN ttPed-repre.perc-comis  = es-ext-ped-repre.perc-comis
                     ttPed-repre.comis-emis  = es-ext-ped-repre.comis-emis
                     ttPed-repre.ind-repbase = es-ext-ped-repre.ind-repbase.
    
              IF AVAIL ped-repre THEN DO:
                 run validateUpdate  in h-bodi157   (input table ttPed-repre ,
                                                     input rowid(ped-repre),
                                                     OUTPUT TABLE RowErrors ) .
              END.
              ELSE DO:
                run setRecord       in  h-bodi157   (input table ttPed-repre).
                run createRecord    in  h-bodi157.
              END.
              RUN getRowErrors IN h-bodi157      (OUTPUT TABLE RowErrors). 
    
              FIND FIRST RowErrors NO-ERROR.
    
              IF NOT AVAIL RowErrors THEN DO:
                  RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                     INPUT es-ext-ped-venda.num-id-transacao,
                                     INPUT es-ext-ped-venda.ind-tipo-movto,
                                     INPUT es-ext-ped-venda.nome-abrev,
                                     INPUT es-ext-ped-venda.nr-pedcli,
                                     INPUT 0,
                                     INPUT 'OK',
                                     INPUT 'Representante importado.' + STRING(es-ext-ped-repre.ind-repbase)).
    
              END.
              ELSE DO:
                  FOR EACH RowErrors
                     WHERE RowErrors.errorType <> "internal":
    
                     RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                        INPUT es-ext-ped-venda.num-id-transacao,
                                        INPUT es-ext-ped-venda.ind-tipo-movto,
                                        INPUT es-ext-ped-venda.nome-abrev,
                                        INPUT es-ext-ped-venda.nr-pedcli,
                                        INPUT RowErrors.ErrorNumber,
                                        INPUT RowErrors.ErrorDescription,
                                        INPUT RowErrors.ErrorHelp).
    
                     lg-erro = yes.
                  END.
              END.
          END.
    
    /*** retirado e incluido apos o for each es-ext-ped-venda
          if valid-handle(h-bodi157) then delete procedure h-bodi157.
          ****/
    
          FOR EACH es-ext-ped-item WHERE
                   es-ext-ped-item.nome-abrev = ttPed-venda.nome-abrev
               AND es-ext-ped-item.nr-pedcli  = ttPed-venda.nr-pedcli 
                   NO-LOCK:
             /* ITENS */
             
             find first item
                  where item.it-codigo = es-ext-ped-item.it-codigo no-lock no-error.
     
             IF NOT AVAIL ITEM THEN DO:
    
                 RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                    INPUT es-ext-ped-venda.num-id-transacao,
                                    INPUT es-ext-ped-venda.ind-tipo-movto,
                                    INPUT es-ext-ped-venda.nome-abrev,
                                    INPUT es-ext-ped-venda.nr-pedcli,
                                    INPUT 0,
                                    INPUT 'Item nao existe: ' + es-ext-ped-item.it-codigo,
                                    INPUT 'O item nao existe no EMS.').
    
                 lg-erro = yes.
                 LEAVE.
             END.
    
             run emptyRowObject  in h-bodi154.
             run emptyRowErrors  in h-bodi154.
             run openQueryStatic in h-bodi154 (input 'Default').                 
     
             EMPTY TEMP-TABLE ttPed-item.
    
             FIND FIRST item-cli WHERE
                        item-cli.it-codigo    = ITEM.it-codigo
                    AND item-cli.nome-abrev   = es-ext-ped-item.nome-abrev
                        NO-LOCK NO-ERROR.
    
             create ttPed-item.
             assign ttPed-item.r-rowid         = ?
                    ttPed-item.nome-abrev      = es-ext-ped-item.nome-abrev
                    ttPed-item.nr-pedcli       = es-ext-ped-item.nr-pedcli
                    ttPed-item.nr-sequencia    = es-ext-ped-item.nr-sequencia
                    ttPed-item.it-codigo       = es-ext-ped-item.it-codigo
                    ttPed-item.aliquota-ipi    = ITEM.aliquota-ipi
                    ttPed-item.ind-componen    = 1 /* ver Normal */ 
                    ttped-item.tp-preco        = 2 /* ver item-ped.tp-preco */
                    ttPed-item.esp-ped         = 2 /* ver Programacao de Entrega */ 
                    ttPed-item.qt-pedida       = es-ext-ped-item.qt-un-fat
                    ttPed-item.qt-un-fat       = es-ext-ped-item.qt-un-fat
                    
                    ttPed-item.dt-entrega      = IF es-ext-ped-item.dt-entrega < TODAY THEN TODAY
                                                 ELSE es-ext-ped-item.dt-entrega
                    
                    ttPed-item.cod-entrega     = "Padrao"
                    ttPed-item.obs             = es-ext-ped-item.observacao
                    ttPed-item.ind-fat-qtfam   = no
                    ttPed-item.nat-operacao    = es-ext-ped-item.nat-operacao
                    ttPed-item.nr-tabpre       = es-ext-ped-item.nr-tabpre
                    ttPed-item.tipo-atend      = 2
                    ttPed-item.log-usa-tabela-desconto    = no
                    ttPed-item.vl-preori                  = es-ext-ped-item.vl-preuni
                    ttPed-item.val-pct-desconto-tab-preco = es-ext-ped-item.val-pct-desconto-tab-preco
                    ttPed-item.val-desconto-inform        = es-ext-ped-item.val-desconto-inform
                    ttPed-item.des-pct-desconto-inform    = es-ext-ped-item.des-pct-desconto-inform
                    ttPed-item.log-concede-bonif-qtd      = es-ext-ped-item.log-concede-bonif-qtd
                    ttPed-item.val-pct-bonif              = es-ext-ped-item.val-pct-bonif
                    ttPed-item.val-pct-desconto-periodo   = es-ext-ped-item.val-pct-desconto-periodo
                    ttPed-item.val-pct-desconto-periodo   = es-ext-ped-item.val-pct-desconto-prazo
                    ttPed-item.val-desconto-bonif         = es-ext-ped-item.val-desconto-bonif
                    ttPed-item.num-sequencia-bonif        = es-ext-ped-item.num-sequencia-bonif
                    ttPed-item.nr-ordem                   = es-ext-ped-item.nr-ordem
                    ttPed-item.ind-icm-ret                = es-ext-ped-item.ind-icm-ret
                    ttPed-item.desc-cancela               = es-ext-ped-item.desc-cancela + ' '
                    ttped-item.char-2                     = ITEM.class-fiscal.
    
    
                    /* QUANDO for EMS 2.04 Comentar essas LINHAS: */
                    ASSIGN
                    ttped-item.des-un-medida              = IF AVAIL item-cli THEN item-cli.unid-med-cli
                                                            ELSE item.un                                                         
                    ttPed-item.cod-unid-neg               = ITEM.cod-unid-negoc  
                    ttped-item.cod-class-fis              = ITEM.class-fiscal 
                    .
                    /* ****************************************** */
     
    
    
    
         /*    run searchItemPrice  in h-bodi154cal (input table ttPed-Item,
                                                   input table ttPed-Venda,
                                                   input no,
                                                   output ttPed-item.vl-preori,
                                                   output ttPed-item.val-pct-desconto-tab-preco).
           */
    
                FOR FIRST es-ext-param-mercanet
                         NO-LOCK:
                
                   ASSIGN prog-externo = 'mrt/' + 'mrxi' + TRIM(es-ext-param-mercanet.char-1) + '.p'.
                
                   IF SEARCH(prog-externo) <> ? THEN DO:
                       RUN VALUE(prog-externo) (INPUT-OUTPUT TABLE ttPed-item,
                                                INPUT-OUTPUT TABLE RowErrors).
                
                       IF RETURN-VALUE <> 'OK' THEN DO:
                           FOR FIRST RowErrors:
                               RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                                  INPUT es-ext-ped-venda.num-id-transacao,
                                                  INPUT es-ext-ped-venda.ind-tipo-movto,
                                                  INPUT es-ext-ped-venda.nome-abrev,
                                                  INPUT es-ext-ped-venda.nr-pedcli,
                                                  INPUT RowErrors.ErrorNumber,
                                                  INPUT RowErrors.ErrorDescription,
                                                  INPUT RowErrors.ErrorHelp).
                
                               ASSIGN lg-erro = TRUE.
                
                           END.
                       END.
                   END.
                END.
    
    
    
             run emptyRowErrors in h-bodi154.
             run setRecord      in h-bodi154 (input table ttPed-item).  
             
    /****
    output to 'c:\Mercanet\exportando-ped-item.txt' .
    disp ttped-item except ttped-item.r-rowid with 1 column width 300.
    output close.
    ***/
    
             
             run createRecord   in h-bodi154.
    
             if return-value = "nok" then do:
                run getRowErrors in h-bodi154 (output table RowErrors).
                   for each RowErrors
                       /*where RowErrors.errorType <> "internal"*/:
                
                       RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                          INPUT es-ext-ped-venda.num-id-transacao,
                                          INPUT es-ext-ped-venda.ind-tipo-movto,
                                          INPUT es-ext-ped-venda.nome-abrev,
                                          INPUT es-ext-ped-venda.nr-pedcli,
                                          INPUT RowErrors.ErrorNumber,
                                          INPUT RowErrors.ErrorDescription,
                                          INPUT 'Produto:' + ttPed-item.it-codigo + '-' + RowErrors.ErrorHelp).
                
                
                        lg-erro = yes.
                   end.
             end.
             ELSE DO:
                 RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                    INPUT es-ext-ped-venda.num-id-transacao,
                                    INPUT es-ext-ped-venda.ind-tipo-movto,
                                    INPUT es-ext-ped-venda.nome-abrev,
                                    INPUT es-ext-ped-venda.nr-pedcli,
                                    INPUT 0,
                                    INPUT 'OK',
                                    INPUT 'Item importado: ' + es-ext-ped-item.it-codigo).
             END.
    
    
          end. /* tt-itens-flex */
    
    /**** retirado e adicionado após o laco for each es-ext-ped-venda
          if valid-handle(h-bodi154) then do:
             run destroyBO in h-bodi154.
             run destroy   in h-bodi154.      
           end.
    
          if valid-handle(h-bodi154cal) then delete procedure h-bodi154cal.
          ******/
     
    
           IF lg-erro = YES THEN DO:
              RUN goToKey      in h-bodi159 (input ttPed-Venda.nome-abrev, 
                                             input ttPed-Venda.nr-pedcli). 
              RUN deleteRecord in h-bodi159. 
           END.
           ELSE DO:
               /* CALCULAR PEDIDO */
               run calculateOrder in h-bodi159cal (input ttPed-Venda.r-rowid).
    
                
                if  valid-handle(h-bodi159com) then do:
                    run emptyRowErrors  in h-bodi159com.
                    run completeOrder   in h-bodi159com (input ttped-venda.r-rowid,
                                                         output table RowErrors).
                                                         
                    if  can-find(first RowErrors)   then do:
                           for each RowErrors
                               /*where RowErrors.errorType <> "internal"*/:
                        
                               RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                                  INPUT es-ext-ped-venda.num-id-transacao,
                                                  INPUT es-ext-ped-venda.ind-tipo-movto,
                                                  INPUT es-ext-ped-venda.nome-abrev,
                                                  INPUT es-ext-ped-venda.nr-pedcli,
                                                  INPUT RowErrors.ErrorNumber,
                                                  INPUT RowErrors.ErrorDescription,
                                                  INPUT RowErrors.ErrorHelp).
                        
                        
                                lg-erro = yes.
                           end.
                    end.            
                    ELSE DO:
    
                        FOR FIRST es-ext-param-mercanet
                                  NO-LOCK:
                        
                            ASSIGN prog-externo = 'mrt/' + 'mrxc' + TRIM(es-ext-param-mercanet.char-1) + '.p'.
                        
                            IF SEARCH(prog-externo) <> ? THEN DO:
                                RUN VALUE(prog-externo) (INPUT-OUTPUT TABLE ttPed-Venda,
                                                         INPUT-OUTPUT TABLE RowErrors).
                        
                                IF RETURN-VALUE <> 'OK' THEN DO:
                                    FOR FIRST RowErrors:
                                        RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                                           INPUT es-ext-ped-venda.num-id-transacao,
                                                           INPUT es-ext-ped-venda.ind-tipo-movto,
                                                           INPUT es-ext-ped-venda.nome-abrev,
                                                           INPUT es-ext-ped-venda.nr-pedcli,
                                                           INPUT RowErrors.ErrorNumber,
                                                           INPUT RowErrors.ErrorDescription,
                                                           INPUT RowErrors.ErrorHelp).
                        
                                        ASSIGN lg-erro = TRUE.
                        
                                    END.
                                END.
                            END.
                        END.
    
                        RUN pi-grava-erro (INPUT es-ext-ped-venda.cod-estabel,
                                           INPUT es-ext-ped-venda.num-id-transacao,
                                           INPUT es-ext-ped-venda.ind-tipo-movto,
                                           INPUT es-ext-ped-venda.nome-abrev,
                                           INPUT es-ext-ped-venda.nr-pedcli,
                                           INPUT 0,
                                           INPUT 'OK',
                                           INPUT 'Pedido completo.').
                    END.
                end.             
           END.
       END.
    
       IF lg-erro THEN DO:
    
            DEFINE VARIABLE h-kbut03 AS HANDLE      NO-UNDO.
    
            RUN mrt/kbut03.p PERSISTENT SET h-kbut03.
    
            FOR FIRST es-ext-param-mercanet WHERE
                      es-ext-param-mercanet.log-envia-email 
                      NO-LOCK:
    
                RUN pi-manda-email IN h-kbut03 (INPUT es-ext-param-mercanet.usuario-remetente,
                                                INPUT es-ext-param-mercanet.usuario-destino,
                                                INPUT 'Assunto',
                                                INPUT 'Texto',
                                                INPUT 'Anexo',
                                                INPUT "TXT").
                
                
            END.
            DELETE PROCEDURE h-kbut03.
        END.
    
    /*** retirado e adicionado após o laco for each es-ext-ped-venda
       if valid-handle(h-bodi159) then do:
            run destroyBO in h-bodi159.
            run destroy   in h-bodi159.
       end.
    
       if valid-handle(h-bodi159com) then delete procedure h-bodi159com.
       if valid-handle(h-bodi159sdf) then delete procedure h-bodi159sdf.
       if valid-handle(h-bodi159cal) then delete procedure h-bodi159cal.
       if valid-handle(h-bodi018) then delete procedure h-bodi018.  */
    
     end. /* transaction */
     
    END.
  4. marcioricardo

    marcioricardo Membro Participativo

    kikofr,

    as apis sem handle, como finalizo elas? As que tem handle, já está finalizada no código.
  5. marcioricardo

    marcioricardo Membro Participativo

    Bom dia! Alguém consegue dar um help nesse código para não dar mais erro de area 6?

    Grato.
  6. Christiano Piccinin

    Christiano Piccinin Sem Pontuação

    eu resolvi uma vez colocando no-undo nas temp-table....
    mas a casos e casos hoje eu estou com o mesmo problema porem colocar no-undo na tt não resolveu, se souberem de mais alguma coisa fico grato!
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página