1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

[RESOLVIDO] Ajuda em excel :D

Discussão em 'EMS , HCM e Totvs 11' iniciado por muertebr, Junho 23, 2009.

Status do Tópico:
Não esta aberto para novas mensagens.
  1. muertebr

    muertebr Membro Participativo

    Ola pessoal eu to fazendo um relatório que gera planilha em excel muitas coisas ja resolvi, faltando alguns detalhes.

    O relatório é o seguinte:

    Um relatório que mostre a quantidade de atendimentos por produto e por estado.

    ***Pegando os 5 estados que tiveram mais atendimento, e ver quais os postos que mais fizeram atendimento e separar por posto de atendimento.***
    Ai é que esta o meu problema.
    Eu consigo pega tudo bonitinho esses estados, os postos, quantidades, o problema acho que ta na lógica do excel.
    Eu preciso listar da seguinte forma, o estado e dividido por nome do posto, nome da cidade e quantidade atendida.

    Exemplo:
    O primeiro estado sai certo, vai de A3 até C29, só que o segundo estado ele esta saindo pulando uma linha indo do D30 até F43, quando ele deveria ir do D3 até o F16.... não sei c deu pra entenderem:

    Eu tente usa temp-table para o segundo caso usando extent.
    Código:
    for each os-cab NO-LOCK USE-INDEX dt-atendimento
        where os-cab.dt-atendimento >= da-dt-atendimento-ini         and 
              os-cab.dt-atendimento <= da-dt-atendimento-fim         AND
              os-cab.it-codigo      >= tt-param.int-it-codigo-ini    AND
              os-cab.it-codigo      <= tt-param.int-it-codigo-fim    AND
              os-cab.cod-emitente   >= tt-param.int-cod-emitente-ini AND
              os-cab.cod-emitente   <= tt-param.int-cod-emitente-fim,
        EACH emitente NO-LOCK
        WHERE emitente.cod-emitente = os-cab.cod-emitente AND
              emitente.estado = estad-mai-1
        BREAK BY os-cab.cod-emitente.
        IF FIRST-OF(os-cab.cod-emitente) THEN 
            ASSIGN cont-psto = 0.
        ASSIGN cont-psto = cont-psto + 1.
        IF LAST-OF(os-cab.cod-emitente) THEN DO:
            CREATE tt-atende-posto.
            ASSIGN tt-atende-posto.estado[1]   = estad-mai-1
                   tt-atende-posto.qtd-psto[1] = cont-psto
                   tt-atende-posto.cidade[1]   = emitente.cidade
                   tt-atende-posto.posto[1]    = emitente.nome-abrev.
        END.
    END.
    
    for each os-cab NO-LOCK USE-INDEX dt-atendimento
        where os-cab.dt-atendimento >= da-dt-atendimento-ini         and 
              os-cab.dt-atendimento <= da-dt-atendimento-fim         AND
              os-cab.it-codigo      >= tt-param.int-it-codigo-ini    AND
              os-cab.it-codigo      <= tt-param.int-it-codigo-fim    AND
              os-cab.cod-emitente   >= tt-param.int-cod-emitente-ini AND
              os-cab.cod-emitente   <= tt-param.int-cod-emitente-fim,
        EACH emitente NO-LOCK
        WHERE emitente.cod-emitente = os-cab.cod-emitente AND
              emitente.estado = estad-mai-2
        BREAK BY os-cab.cod-emitente.
        IF FIRST-OF(os-cab.cod-emitente) THEN 
            ASSIGN cont-psto = 0.
        ASSIGN cont-psto = cont-psto + 1.
        IF LAST-OF(os-cab.cod-emitente) THEN DO:
            CREATE tt-atende-posto.
            ASSIGN tt-atende-posto.estado[2]   = estad-mai-1
                   tt-atende-posto.qtd-psto[2] = cont-psto
                   tt-atende-posto.cidade[2]   = emitente.cidade
                   tt-atende-posto.posto[2]    = emitente.nome-abrev.
        END.
    END.
    
    FOR EACH tt-atende-posto NO-LOCK.
        ASSIGN chworksheet:range("A" + STRING(m-linha)):VALUE = tt-atende-posto.posto[1]
               chworksheet:range("B" + STRING(m-linha)):VALUE = tt-atende-posto.cidade[1]
               chworksheet:range("C" + STRING(m-linha)):VALUE = tt-atende-posto.qtd-psto[1]
               chworksheet:range("D" + STRING(m-linha)):VALUE = tt-atende-posto.posto[2]
               chworksheet:range("E" + STRING(m-linha)):VALUE = tt-atende-posto.cidade[2]
               chworksheet:range("F" + STRING(m-linha)):VALUE = tt-atende-posto.qtd-psto[2]
               /*chworksheet:range("G" + STRING(m-linha)):VALUE = qt-maior-3
               chworksheet:range("H" + STRING(m-linha)):VALUE = estad-mai-3
               chworksheet:range("I" + STRING(m-linha)):VALUE = qt-maior-4
               chworksheet:range("J" + STRING(m-linha)):VALUE = estad-mai-4
               chworksheet:range("K" + STRING(m-linha)):VALUE = qt-maior-5
               chworksheet:range("L" + STRING(m-linha)):VALUE = estad-mai-5*/
               chworksheet:columns("a"):columnwidth = 45.5
               chworksheet:columns("d"):columnwidth = 45.5
               chworksheet:columns("b"):columnwidth = 12.3
               chworksheet:columns("e"):columnwidth = 12.3
               m-linha = m-linha + 1.
    END.
    
    Se alguem puder ajudar eu agradeço muito

    Ai vai uma fotinho de como ta:
    [​IMG]
  2. af.dums

    af.dums Membro Ativo

    Teu problema está no segundo create tt-atende-posto, voce nao pode dar create ali, deve apenas buscar o registro jah criado para carregar a primeira posicao do vetor (sugiro utilizar os campos chave da tabela lida para fazer este find first....).
  3. muertebr

    muertebr Membro Participativo

    É não consegui faze como vc falo...
    mais fiz de uma forma diferente e deu tudo certo...

    ;)


    To com uma otra duvida em relatório de excel...
    É o seguinte...

    Tem um relatório que gera 3 planilhas tudo ok (o mesmo relatório da otra duvida).
    Agora tem mais uma coisa no relatório, ele passa por varios items... e querem que para cada item seja criada uma nova planilha dentro do mesmo "projeto".

    Tentei da seguinte forma:
    Código:
    FOR EACH tt-geral-item NO-LOCK.
            ASSIGN chWorkSheet = chExcelApplication:Sheets:Add() /** Adiciona nova Planilha **/
                   chworksheet = chexcelapplicAtion:sheets:item(1) /** Numero da Planilha **/
                   chworksheet:NAME = tt-geral-item.desc-item. /** Nome da Planilha **/
                   m-linha = 1.
        
            assign chworksheet:range("A2:H2"):font:bold = true
                   chworksheet:range("A2:A2"):VALUE = tt-geral-item.desc-item
                   chworksheet:range("B2:B2"):VALUE = "Quantidade Total Defeitos"
                   chworksheet:range("C2:C2"):VALUE = "Valor Peça"
                   chworksheet:range("D2:D2"):VALUE = "KM"
                   chworksheet:range("E2:E2"):VALUE = "Serviço"
                   chworksheet:range("F2:F2"):VALUE = "Total"
                   chworksheet:range("G2:G2"):VALUE = "Defeito 1"
                   chworksheet:range("H2:H2"):VALUE = "Defeito 2"
                   chworksheet:range("A2:H2"):interior:colorindex = 06
                   m-linha = m-linha + 2.
    END.
    
    Mais é claro que não deu certo...
    Como podem ver, faz um for each na tabela onde ta os items, e cria a planilha com o nome da descrição do item.
    Maisss não da certo.

    Alguem saberia como fazer isso.
    Se dé para fazer isso :D
Status do Tópico:
Não esta aberto para novas mensagens.

Compartilhe esta Página