Bom dia para todos, estou precisando da ajuda de vocês, é o seguinte: Estou gerando um relatório e estou precisando fazer uma quebra por quantidade de espécie, mas não estou conseguindo,quero que que quebre por especie e cada especie e mostre cada valor ,segue abaixo o relatório de como está saindo e como eu quero e em seguida o código. desde já agradeço a atenção de todos ex:atual serie esp descrição usuário quant valor ====================================================================== APB ;RF ;IMP.DE RENDA RETIDO ;fernandor ; 2; 27,25 ex: eu quero fazer serie esp descrição usuário quant valor ====================================================================== APB ;RF ;IMP.DE RENDA RETIDO ;fernandor ; 1; 10,00 APB ;RF ;IMP.DE RENDA RETIDO ;fernandor ; 1; 17,25 ====================================================================== total 27,25 ====================================================================== ============================código do programa ========================= OUTPUT TO D:\Customizacao\GSI\Valter\geral\hoje.txt. DEF VAR c-origem AS CHAR FORMAT "x(3)". DEF VAR c-usuario LIKE movto_tit_ap.cod_usuario. DEF VAR c-desc-esp LIKE espec_docto.des_espec_docto. DEF VAR valor LIKE movto_tit_ap.val_movto_ap. DEF TEMP-TABLE TT-AP NO-UNDO FIELD origem AS CHAR FIELD espec LIKE tit_ap.cod_espec_docto FIELD desc-esp LIKE espec_docto.des_espec_docto FIELD usuar LIKE movto_tit_ap.cod_usuario FIELD qtde AS INTEGER FIELD vl LIKE tit_ap.val_pagto_tit_ap INDEX ch-ap origem espec. FOR EACH tit_ap NO-LOCK WHERE tit_ap.cod_empresa = "900" AND tit_ap.dat_transacao >= 10/01/2010 AND tit_ap.dat_transacao <= 10/01/2010 AND tit_ap.log_tit_ap_estordo = NO: ASSIGN c-origem = "" c-usuario = "" c-desc-esp = "" valor = 0. IF SUBSTR(tit_ap.cod_tit_ap,1,2) = "HR" THEN DO: ASSIGN c-origem = "FLP". END. ELSE IF tit_ap.cod_espec_docto = "IA" THEN DO: ASSIGN c-origem = "APB". END. ELSE DO: ASSIGN c-origem = tit_ap.ind_origin_tit_ap. END. FIND FIRST movto_tit_ap no-lock WHERE movto_tit_ap.cod_estab = tit_ap.cod_estab AND movto_tit_ap.num_id_tit_ap = tit_ap.num_id_tit_ap NO-ERROR. IF AVAIL movto_tit_ap THEN DO: ASSIGN c-usuario = movto_tit_ap.cod_usuario. END. ELSE DO: ASSIGN c-usuario = "XXXXXX". END. FIND FIRST espec_docto NO-LOCK WHERE espec_docto.cod_espec_docto = tit_ap.cod_espec_docto NO-ERROR. IF AVAIL espec_docto THEN DO: ASSIGN c-desc-esp = espec_docto.des_espec_docto. END. ELSE DO: ASSIGN c-desc-esp = "ESPECIE NAO ENCONTRADA". END. IF c-origem <> "APB" THEN NEXT. IF c-usuario <> "fernandor" THEN NEXT. FIND FIRST tt-ap WHERE tt-ap.origem = c-origem AND tt-ap.espec = tit_ap.cod_espec_docto AND tt-ap.usuar = c-usuario USE-INDEX ch-ap NO-ERROR. IF NOT AVAIL tt-ap THEN DO: CREATE tt-ap. ASSIGN tt-ap.origem = c-origem tt-ap.espec = tit_ap.cod_espec_docto tt-ap.desc-esp = c-desc-esp tt-ap.usuar = c-usuario tt-ap.qtde = 0 tt-ap.vl = 0. END. find first movto_tit_ap use-index mvtttp_id where movto_tit_ap.cod_estab = tit_ap.cod_estab and movto_tit_ap.num_id_tit_ap = tit_ap.num_id_tit_ap and (movto_tit_ap.ind_trans_ap = "Implanta‡Æo" /*l_implantacao*/ or movto_tit_ap.ind_trans_ap = "Implanta‡Æo a Credito" /*l_implantacao_a_credito*/ or movto_tit_ap.ind_trans_ap = "Renegocia‡Æo" /*l_renegociacao*/ or movto_tit_ap.ind_trans_ap = "Transf Estabelecimento" /*l_transf_estabelecimento*/ ) no-lock no-error. IF AVAIL movto_tit_ap THEN DO: ASSIGN valor = movto_tit_ap.val_movto_ap. END. ELSE DO: ASSIGN valor = 0. END. ASSIGN tt-ap.qtde = tt-ap.qtde + 1 tt-ap.vl = tt-ap.vl + valor. END. FOR EACH tt-ap NO-LOCK BREAK BY tt-ap.origem BY tt-ap.espec BY tt-ap.usuar: IF FIRST-OF(tt-ap.espec) THEN DO: PUT tt-ap.origem ";" tt-ap.espec ";" tt-ap.desc-esp ";" tt-ap.usuar ";" tt-ap.qtde ";" tt-ap.vl SKIP. END. END.
Do jeito que vc ta fazendo não vai da.... Vc ta usando como campos primarios para cria a tabela temporária os campo: origem / espec / usuar Verificando como você qué a sua listagem e dizendo que são dois campos diferentes você vai ter que usa como campo primário o valor ou.... não usar campos primários e criar direto a tabela temporária, ou ainda achar outro campo onde identifique que um campo é diferente do otro. Na tabela tit_ap existe o campo: num_id_tit_ap onde é um campo unico. ************************************************************ APB ;RF ;IMP.DE RENDA RETIDO ;fernandor ; 1; 10,00 APB ;RF ;IMP.DE RENDA RETIDO ;fernandor ; 1; 17,25 E ............. mais uma coisa. Você usando o first-of na espécie vai sempre somente mostrar o primeiro registro com a espécie informada. espero que tenha ajudado em algo se eu entendi certo o questionamento.