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