Quebra por Espécie

Discussão em 'Progress 4GL' iniciado por valter, Abril 14, 2011.

  1. valter

    valter Membro Participativo

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

    muertebr Membro Participativo

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

    valter Membro Participativo

    Ainda não consegui resolver este problema

Compartilhe esta Página