Lógica de Qtde Clientes

Discussão em 'Progress 4GL' iniciado por alexandrezakarias, Maio 9, 2016.

  1. alexandrezakarias

    alexandrezakarias Membro Participativo

    Boa tarde, preciso descobrir a quantidade de clientes atendidos num determinado período informado entre "c-emi-ini" e "c-emi-fim" para armazenar nas nas variáveis abaixo "c-f01, c-f03, c-f06, c-f09 e c-f12" a quantidade de clientes atendidos, sendo que "c-f01" equivale à qtde no mês atual (conforme mês no c-emi-ini), c-f03 aos últimos 3 meses, c-f06 aos ultimos 6 meses, c-f09 aos últimos 9 meses e c-f12 aos ultimos 12 meses.

    Lá em baixo estou informando de forma manual se mês for 4... e etc.. então como fazer ele ler o periodo inicial e final, pegar o mês do periodo inicial e calcular ele, depois os 3, 6, 9 e 12 meses anteriores?

    Obs. trabalhamos com várias marcas e abaixo está somente uma de exemplo.

    Obrigado!!!!!


    Código:
    OUTPUT TO "c:\temp\atendidos.txt".
    
    DEF VAR c-marca AS CHAR FORMAT "X(10)".
    DEF VAR c-f01 AS i INIT 0.
    DEF VAR c-f03 AS i INIT 0.
    DEF VAR c-f06 AS i INIT 0.
    DEF VAR c-f09 AS i INIT 0.
    DEF VAR c-f12 AS i INIT 0.
    
    DEF WORKFILE tempcliate
        FIELD marca AS CHAR FORMAT "X(10)"
        FIELD nome-matriz LIKE emitente.nome-matriz
        FIELD atividade LIKE emitente.atividade
        FIELD mes AS LOGICAL EXTENT 12.
    FOR EACH nota-fiscal NO-LOCK USE-INDEX ch-distancia where
        nota-fiscal.dt-emis-nota >= c-emi-ini AND
        nota-fiscal.dt-emis-nota <= c-emi-fim AND
        nota-fiscal.emite-duplic = YES AND
        nota-fiscal.dt-cancela = ?:
        FIND emitente NO-LOCK WHERE
             emitente.cod-emitente = nota-fiscal.cod-emitente NO-ERROR.
        FOR EACH it-nota-fisc OF nota-fiscal NO-LOCK:
            ASSIGN c-marca = ''.
            FIND ITEM NO-LOCK WHERE
                 ITEM.it-codigo = it-nota-fisc.it-codigo NO-ERROR.
            IF ITEM.fm-cod-com BEGINS 'A' THEN ASSIGN c-marca = 'HI'.
            IF ITEM.fm-cod-com BEGINS 'C' THEN ASSIGN c-marca = 'FR'.
            IF c-marca <> '' THEN DO:
                    IF (emitente.cod-gr-cli = 10 OR
                        emitente.cod-gr-cli = 11 OR
                        emitente.cod-gr-cli = 12 OR
                        emitente.cod-gr-cli = 30 OR
                        emitente.cod-gr-cli = 31) AND
                        emitente.natureza <> 1 THEN DO:
                        FIND FIRST tempcliate WHERE
                             tempcliate.nome-matriz = emitente.nome-matriz AND
                             tempcliate.marca = c-marca NO-ERROR.
                        IF NOT AVAIL tempcliate THEN DO:
                           CREATE tempcliate.
                           ASSIGN tempcliate.nome-matriz = emitente.nome-matriz
                                  tempcliate.marca = c-marca
                                  tempcliate.atividade = emitente.atividade.
                        END.
                        ASSIGN tempcliate.mes[MONTH(nota-fiscal.dt-emis-nota)] = TRUE.
    
                        FIND FIRST tempcliate WHERE
                             tempcliate.nome-matriz = emitente.nome-matriz AND
                             tempcliate.marca = 'NH' NO-ERROR.
                        IF NOT AVAIL tempcliate THEN DO:
                           CREATE tempcliate.
                           ASSIGN tempcliate.nome-matriz = emitente.nome-matriz
                                  tempcliate.marca = 'NH'
                                  tempcliate.atividade = emitente.atividade.
                        END.
                        ASSIGN tempcliate.mes[MONTH(nota-fiscal.dt-emis-nota)] = TRUE.
                   END.
            END.
        END.
    END.
    
    FOR EACH tempcliate WHERE
        tempcliate.marca = 'FRAHM':
        IF tempcliate.mes[04] = TRUE THEN ASSIGN c-f01 = c-f01 + 1.
        IF tempcliate.mes[02] = TRUE OR
           tempcliate.mes[03] = TRUE OR
           tempcliate.mes[04] = TRUE THEN ASSIGN c-f03 = c-f03 + 1.
        IF tempcliate.mes[11] = TRUE OR
           tempcliate.mes[12] = TRUE OR
           tempcliate.mes[01] = TRUE OR
           tempcliate.mes[02] = TRUE OR
           tempcliate.mes[03] = TRUE OR
           tempcliate.mes[04] = TRUE THEN ASSIGN c-f06 = c-f06 + 1.
        IF tempcliate.mes[08] = TRUE OR
           tempcliate.mes[09] = TRUE OR
           tempcliate.mes[10] = TRUE OR
           tempcliate.mes[11] = TRUE OR
           tempcliate.mes[12] = TRUE OR
           tempcliate.mes[01] = TRUE OR
           tempcliate.mes[02] = TRUE OR
           tempcliate.mes[03] = TRUE OR
           tempcliate.mes[04] = TRUE THEN ASSIGN c-f09 = c-f09 + 1.
        IF tempcliate.mes[05] = TRUE OR
           tempcliate.mes[06] = TRUE OR
           tempcliate.mes[07] = TRUE OR
           tempcliate.mes[08] = TRUE OR
           tempcliate.mes[09] = TRUE OR
           tempcliate.mes[10] = TRUE OR
           tempcliate.mes[11] = TRUE OR
           tempcliate.mes[12] = TRUE OR
           tempcliate.mes[01] = TRUE OR
           tempcliate.mes[02] = TRUE OR
           tempcliate.mes[03] = TRUE OR           
           tempcliate.mes[04] = TRUE THEN ASSIGN c-f12 = c-f12 + 1.
    END.
    
            PUT MONTH(c-emi-ini) AT 04 FORMAT "99"
                YEAR(c-emi-ini)  AT 06 FORMAT "9999"
                c-f01 FORMAT "999999"
                c-f03 FORMAT "999999"
                c-f06 FORMAT "999999"
                c-f09 FORMAT "999999"
                c-f12 FORMAT "999999".
    
    OUTPUT CLOSE.

Compartilhe esta Página