Erros, log do Broker

Discussão em 'Progress 4GL' iniciado por AndersonApdo, Setembro 10, 2013.

  1. AndersonApdo

    AndersonApdo Membro Participativo

    Bom dia, pessoal estou com um problema em minha aplicação que é o seguinte...
    O log do servidor está retornando o seguinte erro:

    [13/09/09@12:14:20.485-0300] P-006136 T-001048 1 AS -- (Procedure: 'pim_busca_projeto_codigo.p' Line:992) ** Value -232 cannot be displayed using >>>,>>>,>>9.99. (74)
    [13/09/09@12:16:18.517-0300] P-006680 T-005352 1 AS -- (Procedure: 'pim_busca_projeto_codigo.p' Line:992) ** Value -232 cannot be displayed using >>>,>>>,>>9.99. (74)

    Nesta procedure:

    Código:
    /******************************************************************************
       
       Programa: pim/busca_projeto_codigo.p
       Data....: 24/11/2011
       Autor...: --
       Objetivo: Busca projeto e suas informaþ§es pelo codigo do projeto e o codigo do estabelecimento.
       DLL     : .dll
       Parâmetros:
       
            Entrada:
               
               
            Saída: 
               
       
       Alterações:
            Data:
            Objetivo:
            Autor:
    
    *******************************************************************************/
    DEFINE INPUT  PARAMETER picCod_estab             AS CHAR FORMAT "X(3)".   
    DEFINE INPUT  PARAMETER picCcusto                AS CHAR FORMAT "X(11)".   
    DEFINE INPUT  PARAMETER picCod_projeto           AS INTEGER.               
    DEFINE OUTPUT PARAMETER pocDesc_resumida_projeto AS CHAR FORMAT "X(40)".   
    DEFINE OUTPUT PARAMETER pocVal_previsto          AS CHAR FORMAT "X(15)". 
    DEFINE OUTPUT PARAMETER pocVal_alocado           AS CHAR FORMAT "X(15)".  
    DEFINE OUTPUT PARAMETER pocVal_variacao          AS CHAR FORMAT "X(15)". 
    DEFINE OUTPUT PARAMETER pocVal_Saldo             AS CHAR FORMAT "X(15)". 
    DEFINE OUTPUT PARAMETER pocErro                  AS CHAR FORMAT "X(100)".
    
    DEFINE VARIABLE i-aux           AS INT  NO-UNDO.
    DEFINE VARIABLE c-aux           AS CHAR NO-UNDO. 
    DEFINE VARIABLE pr_val_prev     AS DEC FORMAT "->>,>>>,>>>,>>9.99" INITIAL 0 NO-UNDO.
    DEFINE VARIABLE pr_val_var_lmt  AS DEC FORMAT "->>,>>>,>>>,>>9.99" INITIAL 0 NO-UNDO.
    DEFINE VARIABLE de_val_req      AS DEC FORMAT "->>,>>>,>>>,>>9.99" INITIAL 0 NO-UNDO.
    DEFINE VARIABLE de_val_compra   AS DEC FORMAT "->>,>>>,>>>,>>9.99" INITIAL 0 NO-UNDO.
    DEFINE VARIABLE de_val_recebe   AS DEC FORMAT "->>,>>>,>>>,>>9.99" INITIAL 0 NO-UNDO.
    DEFINE VARIABLE dt-fim-periodo  AS DATE NO-UNDO.
    DEFINE VARIABLE ctipo_projeto   AS CHAR FORMAT "X(10)".
    
    ASSIGN pocErro = "OK".
    
    IF picCod_projeto > 0 THEN DO:
    
    FIND es-projeto WHERE es-projeto.cod-estabel = picCod_estab AND
                          es-projeto.cod-proj = picCod_projeto AND
                          es-projeto.sc-codigo = picCcusto NO-LOCK NO-ERROR.
      IF NOT AVAIL es-projeto THEN
      DO:
         ASSIGN pocErro = "Projeto nao encontrado para este estabelecimento e centro de custo, Verifique !!!".
         RETURN.
      END.
      ELSE      
         ASSIGN pr_val_prev = es-projeto.vl-previsto
                pr_val_var_lmt = es-projeto.vl-variacao-limite.
    
        FIND es-projeto-clas WHERE
             es-projeto-clas.cod_proj = es-projeto.cod-proj AND
             es-projeto-clas.cod_estabel = es-projeto.cod-estabel NO-LOCK NO-ERROR.
             
        IF AVAIL es-projeto-clas THEN
            ASSIGN ctipo_projeto = IF es-projeto-clas.tipo THEN " (Invest.)" ELSE " (Desp.)".
        ELSE 
            ASSIGN ctipo_projeto = "".        
        ASSIGN pocDesc_resumida_projeto = es-projeto.projeto + ctipo_projeto.         
                  
                  
                  
      FOR EACH es-ordem-compra NO-LOCK
           WHERE es-ordem-compra.cod-estabel = picCod_estab
             AND es-ordem-compra.cod-proj    = picCod_projeto:
    
            FIND FIRST ordem-compra NO-LOCK
                 WHERE ordem-compra.numero-ordem = es-ordem-compra.numero-ordem NO-ERROR.
            IF  NOT AVAIL ordem-compra OR 
                ordem-compra.situacao = 1 /*nao confirmada*/ OR
                ordem-compra.situacao = 5 /*em cotada*/  THEN NEXT.
    
            FOR EACH prazo-compra OF ordem-compra NO-LOCK:
                IF  prazo-compra.situacao = 2 /*confirmada*/    OR 
                    prazo-compra.situacao = 3 /*cotada*/        THEN
                    ASSIGN  de_val_compra = de_val_compra + (prazo-compra.quant-saldo * ordem-compra.preco-unit)
                            de_val_recebe = de_val_recebe + (prazo-compra.quant-receb - prazo-compra.quant-rejeit) * ordem-compra.preco-unit.
                
                IF  prazo-compra.situacao = 6 /*recebida*/      THEN
                    ASSIGN  de_val_recebe = de_val_recebe + (prazo-compra.quant-receb - prazo-compra.quant-rejeit) * ordem-compra.preco-unit.
    
                IF  prazo-compra.situacao = 4 /*eliminada*/     THEN
                    ASSIGN  de_val_recebe =  de_val_recebe + (prazo-compra.quant-receb - prazo-compra.quant-rejeit) * ordem-compra.preco-unit.
    
            END.
    
        END.
        FOR EACH  es-movto-estoq NO-LOCK USE-INDEX projeto
           WHERE  es-movto-estoq.cod-estabel-proj = picCod_estab AND
                  es-movto-estoq.cod-proj         = picCod_projeto:
    
            FIND FIRST ITEM NO-LOCK
                 WHERE ITEM.it-codigo =  es-movto-estoq.it-codigo NO-ERROR.
    
            ASSIGN  i-aux  = ({ininc/i03in218.i 06 es-movto-estoq.esp-docto})
                    c-aux = STRING( es-movto-estoq.nro-docto).
        
            FIND FIRST movto-estoq NO-LOCK USE-INDEX item-data
                 WHERE movto-estoq.it-codigo   =  es-movto-estoq.it-codigo
                   AND movto-estoq.cod-estabel =  es-movto-estoq.cod-estabel 
                   AND movto-estoq.dt-trans    =  es-movto-estoq.dt-trans
                   AND movto-estoq.cod-depos   =  es-movto-estoq.cod-depos
                   AND movto-estoq.nro-docto   = c-aux
                   AND movto-estoq.esp-docto   = i-aux
                   AND movto-estoq.serie-docto =  es-movto-estoq.serie-docto NO-ERROR.
            IF  NOT AVAIL movto-estoq THEN NEXT. 
    
            ASSIGN  dt-fim-periodo =  es-movto-estoq.dt-trans - DAY( es-movto-estoq.dt-trans) + 40
                    dt-fim-periodo = dt-fim-periodo + 1 - DAY(dt-fim-periodo).
        
            FIND LAST  pr-it-per NO-LOCK USE-INDEX codigo
                 WHERE pr-it-per.it-codigo    =  es-movto-estoq.it-codigo
                   AND pr-it-per.cod-estabel  =  es-movto-estoq.cod-estabel
                   AND pr-it-per.periodo     <= dt-fim-periodo NO-ERROR.
            IF  AVAIL pr-it-per THEN 
                ASSIGN  de_val_req = ROUND( movto-estoq.quantidade * pr-it-per.val-unit-mat-m[1],2).
            ELSE DO: 
                FIND FIRST ITEM NO-LOCK
                     WHERE ITEM.it-codigo =  es-movto-estoq.it-codigo NO-ERROR.
                IF  AVAIL ITEM 
                    THEN ASSIGN  de_val_req = ROUND( movto-estoq.quantidade * ITEM.preco-ul-ent,2).
                    ELSE ASSIGN  de_val_req = 0.
            END.
        END.    
        
      ASSIGN  pocVal_Previsto = STRING(pr_val_prev,">>>,>>>,>>9.99")
              pocVal_Variacao = STRING(pr_val_var_lmt, ">>>,>>>,>>9.99")
              pocVal_Alocado = STRING( de_val_req + de_val_compra + de_val_recebe, ">>>,>>>,>>9.99")
              pocVal_Saldo = STRING( pr_val_prev + pr_val_var_lmt - (de_val_req + de_val_compra + de_val_recebe), ">>>,>>>,>>9.99").
                                                   
    
    END. 
    
    E este erro,

    [13/09/09@09:37:09.958-0300] P-006680 T-005352 1 AS -- (Procedure: 'pim_exporta_dados.p' Line:171) ** No Cota��es do Item record is available. (91)
    [13/09/09@09:38:51.600-0300] P-008224 T-006576 1 AS -- (Procedure: 'pim_exporta_dados.p' Line:171) ** No Cota��es do Item record is available. (91)
    [13/09/09@09:39:00.850-0300] P-008644 T-008536 1 AS -- (Procedure: 'pim_exporta_dados.p' Line:171) ** No Cota��es do Item record is available. (91)
    [13/09/09@09:39:09.178-0300] P-010196 T-009428 1 AS -- (Procedure: 'pim_exporta_dados.p' Line:171) ** No Cota��es do Item record is available. (91)
    [13/09/09@09:39:29.272-0300] P-010008 T-008840 1 AS -- (Procedure: 'pim_exporta_dados.p' Line:171) ** No Cota��es do Item record is available. (91)

    Nesta procedure:


    Código:
    /* Definição das Temp Tables */
    DEFINE TEMP-TABLE tt-pedido
        FIELD num-pedido        AS INTEGER      FORMAT ">>>>>,>>9"
        FIELD data-pedido       AS DATE         FORMAT "99/99/9999"
        FIELD cod-emitente      AS INTEGER      FORMAT ">>>>>>>>9" 
        FIELD nome-emit         AS CHARACTER    FORMAT "x(80)"
        FIELD endereco          AS CHARACTER    FORMAT "x(40)"
        FIELD cnpj              AS CHARACTER    FORMAT "x(19)" 
        FIELD ins-estadual      AS CHARACTER    FORMAT "x(19)" 
        FIELD telefone          AS CHARACTER    FORMAT "x(15)" 
        FIELD cep               AS CHARACTER    FORMAT "x(12)" 
        FIELD cidade            AS CHARACTER    FORMAT "x(25)" 
        FIELD estado            AS CHARACTER    FORMAT "x(04)" 
        FIELD e-mail            AS CHARACTER    FORMAT "x(40)"
        FIELD desc-pgto         AS CHARACTER    FORMAT "x(30)"
        INDEX pk-tt-pedido num-pedido.
    
    DEFINE TEMP-TABLE tt-ordem
        FIELD numero-ordem      AS integer      FORMAT "zzzzz9,99"
        FIELD data-emissao      AS DATE         FORMAT "99/99/9999"
        FIELD pim               AS integer      FORMAT ">>>>>>9"
        FIELD sequencia         AS INTEGER      FORMAT ">>>>>>9"
        FIELD it-codigo         AS CHARACTER    FORMAT "x(16)"
        FIELD desc-item         AS CHARACTER    FORMAT "x(60)"
        FIELD c-pz-entrega      AS CHARACTER    FORMAT "x(10)" 
        FIELD quantidade        AS DECIMAL      FORMAT ">>>>,>>9.9999"
        FIELD um-item           AS CHARACTER    FORMAT "XX"
        FIELD precounitario     AS DECIMAL      FORMAT ">>>,>>>,>>9.99"
        FIELD item-aliq-icm     AS DECIMAL      FORMAT ">>9.99"
        FIELD item-aliq-ipi     AS DECIMAL      FORMAT ">>9.99"
        FIELD precototal        AS DECIMAL      FORMAT ">>>>,>>>,>>9.99"
        FIELD conta-contabil    AS CHARACTER    FORMAT "x(17)"
        FIELD cod-projeto       AS INTEGER      FORMAT ">>>,>>9"
        FIELD qtd-do-forn       AS DECIMAL      FORMAT ">>>>,>>9.9999"
        FIELD um-fornec         AS CHARACTER    FORMAT "XX"
        FIELD preco-fornec      AS DECIMAL      FORMAT ">>>>>,>>>,>>9.99999"
        FIELD cotacao-aliq-icm  AS DECIMAL      FORMAT ">>9.99"
        FIELD cotacao-aliq-ipi  AS DECIMAL      FORMAT ">>9.99"
        FIELD narrativa         AS CHARACTER    FORMAT "x(2000)"
        FIELD mensagem          AS CHARACTER    FORMAT "x(2000)"
        FIELD comentarios       AS CHARACTER    FORMAT "x(2000)"
        FIELD CondPagtoEsp      AS CHARACTER    FORMAT "x(2000)"
        INDEX pk-tt-ordem numero-ordem.
    
    /* Definição dos Dataset´s */
    DEFINE DATASET dsPedido FOR tt-pedido.
    DEFINE DATASET dsOrdem  FOR tt-ordem.
    
    /* Definição dos Handle´s */
    DEF VAR hdPedido AS HANDLE NO-UNDO.
    DEF VAR hdOrdem  AS HANDLE NO-UNDO.
    
    ASSIGN hdPedido = DATASET dsPedido:HANDLE
           hdOrdem  = DATASET dsOrdem:HANDLE.
    
    
    
    /* Definição dos parametros de Entrada/Saída */
    DEF INPUT   PARAMETER pii_pim_oc          LIKE pim_pedido_item.pim_oc.
    DEF OUTPUT  PARAMETER DATASET FOR dsPedido.
    DEF OUTPUT  PARAMETER DATASET FOR dsOrdem.
    DEF OUTPUT  PARAMETER poc_Erro           AS CHAR FORMAT "x(50)".
    
    
    /* Definição de Variáveis Locais */
    DEF VAR precounitario AS DECIMAL FORMAT "->>,>>>,>>9.99".
    DEF VAR precototal    AS DECIMAL FORMAT "->>,>>>,>>9.99".
    DEF VAR marca         LIKE scw_cotacao_item_aux.marca INITIAL "".
    DEF VAR projeto       LIKE es-ordem-compra.cod-proj   INITIAL 0.
    DEF VAR CondPagtoEsp  AS CHAR FORMAT "X(2000)".
    DEF VAR cont AS i.
    
    
    /* Busca o item do PIM, conforme parametros de entrada*/
    FIND pim_pedido_item 
    WHERE pim_pedido_item.pim_oc = pii_pim_oc
    NO-LOCK NO-ERROR.
    IF NOT AVAIL pim_pedido_item 
    THEN DO:
        ASSIGN poc_Erro = "PIM não encontrado!".
        RETURN.
    END.
         
    /* Busca Ordem de Compra */
    FIND es-ordem-compra WHERE
        es-ordem-compra.pim     = pim_pedido_item.pim_ped_codigo AND
        es-ordem-compra.pim_seq = pim_pedido_item.pim_pit_seq
    NO-LOCK NO-ERROR.
    IF AVAIL es-ordem-compra
    THEN FIND ordem-compra OF es-ordem-compra NO-LOCK NO-ERROR.
    
    IF NOT AVAIL ordem-compra
    THEN DO:
        ASSIGN poc_Erro = "Não existe Ordem de Compra para esse PIM!".
        RETURN.
    END.
    
    /* Busca o Pedido de Compra*/
    FIND pedido-compr OF ordem-compra NO-LOCK NO-ERROR.
    IF NOT AVAIL pedido-compr
    THEN DO:
        ASSIGN poc_erro = "Não Existe Pedido de Compra para o PIM!".
        RETURN.
    END.
    
    /* Carregando tabelas complementares */
    FIND mensagem WHERE mensagem.cod-mensagem = pedido-compr.cod-mensagem NO-LOCK NO-ERROR.
    FIND FIRST ordem-compra OF pedido-compr NO-LOCK NO-ERROR.
    FIND item-fornec OF ordem-compra NO-LOCK NO-ERROR.
    FIND prazo-compr OF ordem-compra NO-LOCK NO-ERROR.
    FIND ITEM OF ordem-compra NO-LOCK NO-ERROR.
    FIND cotacao-item OF ordem-compra NO-LOCK NO-ERROR.
    FIND cond-pagto  WHERE 
        cond-pagto.cod-cond-pag = ordem-compra.cod-cond-pag 
    NO-LOCK NO-ERROR.
    FIND emitente OF ordem-compra NO-LOCK NO-ERROR.
                                                                             
    
    /**************************** Valores calculados *********************/
    IF ordem-compra.codigo-ipi = NO AND 
       ordem-compra.aliquota-ipi > 0 
    THEN ASSIGN precounitario = ordem-compra.preco-unit / (1 + ordem-compra.aliquota-ipi / 100).
    ELSE ASSIGN precounitario = ordem-compra.preco-unit.
    
    
    ASSIGN precounitario = precounitario / (1 - ordem-compra.perc-descto / 100).
    
    ASSIGN precototal = precounitario * prazo-compra.quantidade.
    
    
    /* ******************************** Condição específica de pagamento ******************************** */
    IF pedido-compr.cod-cond-pag = 0 
    THEN DO:
        FIND FIRST cond-especif NO-LOCK
            WHERE  pedido-compr.num-pedido = cond-especif.num-pedido NO-ERROR.
                
        ASSIGN cont = 1
               CondPagtoEsp = "".
    
        IF AVAIL cond-especif 
        THEN DO:
            REPEAT cont = 1 TO 12:
                IF cond-especif.comentarios[cont] <> "" THEN 
                DO:
                    ASSIGN CondPagtoEsp = CondPagtoEsp + " | " + cond-especif.comentarios[cont] + chr(13).
                END.
                ASSIGN cont = cont + 1.
            END.
    
            ASSIGN CondPagtoEsp = CondPagtoEsp + " | " + STRING(cond-especif.data-pagto[1],"99/99/9999") + " | " + STRING(cond-especif.perc-pagto[1]) + CHR(13).
        END.
    END.
    
    
    CREATE tt-pedido.
    ASSIGN tt-pedido.num-pedido     = pedido-compr.num-pedido
           tt-pedido.data-pedido    = pedido-compr.data-pedido
           tt-pedido.cod-emitente   = emitente.cod-emitente
           tt-pedido.nome-emit      = emitente.nome-emit
           tt-pedido.endereco       = emitente.endereco
           tt-pedido.cnpj           = emitente.cgc
           tt-pedido.ins-estadual   = emitente.ins-estadual
           tt-pedido.telefone       = emitente.telefone[1]
           tt-pedido.cep            = emitente.cep
           tt-pedido.cidade         = emitente.cidade
           tt-pedido.estado         = emitente.estado
           tt-pedido.e-mail         = emitente.e-mail
           tt-pedido.desc-pgto      = cond-pagto.descricao.
           
    CREATE tt-ordem.
    ASSIGN tt-ordem.numero-ordem        = ordem-compra.numero-ordem
           tt-ordem.data-emissao        = ordem-compra.data-emissao
           tt-ordem.pim                 = es-ordem-compra.pim 
           tt-ordem.sequencia           = es-ordem-compra.pim_seq
           tt-ordem.it-codigo           = ordem-compra.it-codigo
           tt-ordem.desc-item           = ITEM.desc-item
           tt-ordem.c-pz-entrega        = IF cotacao-item.prazo-entreg = 0 THEN "Comentário" ELSE STRING(prazo-compra.data-entrega, "99/99/9999")
           tt-ordem.quantidade          = prazo-compra.quantidade
           tt-ordem.um-item             = prazo-compra.un 
           tt-ordem.precounitario       = precounitario  
           tt-ordem.item-aliq-icm       = ordem-compra.aliquota-icm 
           tt-ordem.item-aliq-ipi       = ordem-compra.aliquota-ipi 
           tt-ordem.precototal          = precototal  
           tt-ordem.conta-contabil      = ordem-compra.conta-contabil
           tt-ordem.cod-projeto         = es-ordem-compra.cod-proj 
           tt-ordem.qtd-do-forn         = prazo-compra.qtd-do-forn
           tt-ordem.um-fornec           = if avail item-fornec then item-fornec.unid-med-for else item.un 
           tt-ordem.preco-fornec        = ordem-compra.preco-fornec 
           tt-ordem.cotacao-aliq-icm    = cotacao-item.aliquota-icm 
           tt-ordem.cotacao-aliq-ipi    = cotacao-item.aliquota-ipi
           tt-ordem.narrativa           = ordem-compra.narrativa
           tt-ordem.mensagem            = IF AVAIL mensagem THEN mensagem.texto-mensag ELSE ' ' 
           tt-ordem.comentarios         = pedido-compr.comentarios
           tt-ordem.CondPagtoEsp        = CondPagtoEsp.
    
    Alguém aí já passou por isso e pode me dar uma dica?
  2. joelscampos

    joelscampos Membro Participativo

    Lá na definição das variáveis vc pôs o sinal de negativo:
    Código:
    "->>,>>>,>>>,>>9.99"
    Mas lá na conversão da variável decimal para string, vc não colocou o sinal na máscara:
    Código:
    STRING(pr_val_prev,">>>,>>>,>>9.99")
    .


    Quanto ao segundo erro, você não colocou if not avail para as seguintes tabelas:
    emitente
    cond-pagto
    es-ordem-compra
    ITEM
    cotacao-item
    item-fornec
    mensagem

    A tabela "prazo-compra" está sendo usada no assign, porém não vi nenhum find nela.

    Na linha 92 vc colocou o if not avail ordem-compra, porém, na linha 108 vc deu um novo find nessa tabela e não botou o if not avail.


    É muito provável que o find que falhou é o da tabela "ITEM".

    Se for vc que tá desenvolvendo, procura não esquecer dos finds :)
    Quanto aos if not avail nem sempre são usados , mas só quando vc já conhece bem o banco e confia na integridade...

    Se precisar de uma explicação mais específica é só falar.
  3. AndersonApdo

    AndersonApdo Membro Participativo

    Bom dia Joel, muito obrigado por sua resposta, eficiente e precisa.
    Acredito ter resolvido o problema.

    Sobre as procedures, são procedures desenvolvidas por outra pessoa, estou apenas dando manutenção.

    Meu conhecimento é muito pequeno em progress, mas estou estudando pra quem sabe um dia chegar ao um nível igual ao seu.

    Muito obrigado pela ajuda. :D

Compartilhe esta Página