Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
ernestolmalves
Contributor III
Contributor III

Manter somente o último lido

Caros,

Preciso dar carga diariamente de uma planilha de chamados. Gostaria que no QVD ficasse apenas o ultimo registro do chamado.

Exemplo :

Arquivo Excel de 01072014 :

CHAMADO ABERTURA FECHAMENTO   STATUS

001              01072014        NULL             ABERTO

002              01072014     01072014          FECHADO

003              01072014        NULL             ABERTO

Arquivo Excel de 02072014 :

CHAMADO ABERTURA FECHAMENTO    STATUS

001              01072014        NULL              ABERTO

002              01072014     01072014           FECHADO

003              01072014     02072014           FECHADO

O que ocorre é que no QVD eu fico dessa forma :

CHAMADO ABERTURA FECHAMENTO    STATUS

001              01072014        NULL             ABERTO

002              01072014     01072014          FECHADO

003              01072014     02072014

003              01072014     02072014          FECHADO

E gostaria que ficasse assim :

CHAMADO ABERTURA FECHAMENTO    STATUS

001              01072014        NULL             ABERTO

002              01072014     01072014          FECHADO

003              01072014     02072014          FECHADO

Já pesquisei e tentei diversas formas, mas nada deu o resultado esperado.

Alguém sabe como posso fazer isso ?

Desde já agradeço a atenção.

Abraços,

Ernesto Alves

Labels (1)
  • Other

1 Solution

Accepted Solutions
felipe_dutra
Partner - Creator
Partner - Creator

Ficaria assim, Ernesto:

//*** Início da leitura das planilhas ***

    

    Chamados_tmp:

    Load

         CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo.

         ABERTURA,

         FECHAMENTO,

         STATUS

    From [Arquivo*.xls]

    (...)

    ;

   

//*** Fim da leitura das planilhas ***

          

    Chamados:

    Load

         CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS

    Resident Chamados_tmp where STATUS like 'FECHADO';

          

    Load

         CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS

    Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP);

    DROP Table Chamados_tmp;

    

    STORE Chamados INTO Chamados.qvd (qvd) ;

Abs,

Felipe

View solution in original post

10 Replies
felipe_dutra
Partner - Creator
Partner - Creator

Tente isto, Ernesto:

//*** Início da leitura das planilhas ***

Chamados_tmp:

Load

     CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo.

     ABERTURA,

     FECHAMENTO,

     STATUS

From ...

//*** Fim da leitura das planilhas ***

Chamados:

Load

     CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS

Resident Chamados_tmp where STATUS like 'FECHADO';

Load

     CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS

Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP);

DROP Table Chamados_tmp;

Abs,

Felipe

rphpacheco
Creator III
Creator III

Boa noite!

Existem muitas formas de fazer este trabalho, uma delas é:

Auxiliar:

LOAD Distinct

  AutoNumber(CHAMADO&'|'&

             ABERTURA&'|'&

             FECHAMENTO

             ,'CHAVE') as Chave,

  CHAMADO,

  ABERTURA,

  FECHAMENTO,

  STATUS

FROM <Sua Base de Dados>;

Em seguida, leia os registros novamente ordenando-os de forma decrescente e incluindo uma flag de tratamento:

[Tratando Registros]:

LOAD

  *

Where

  Flag <> 'V';

LOAD

  If(CHAMADO = Peek(CHAMADO, -1), 'V', 'F') as Flag,

  *

Resident Auxiliar

Order By

  Chave Desc;


DROP Fields

  Flag,

  Chave

From [Tratando Registros];

DROP Table Auxiliar;

Segue em anexo um exemplo.

Abraço!

ernestolmalves
Contributor III
Contributor III
Author

Bom dia Felipe,

Primeiramente, muito obrigado pela resposta.

Não sei se entendi bem, mas deixe-me explicar melhor.   

Imagino que ficaria assim, seguindo a sua dica.

//*** Início da leitura das planilhas *** 

     

     

    Chamados_tmp: 

    Load 

         CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo. 

         ABERTURA, 

         FECHAMENTO, 

         STATUS 

    From Arquivo010720014.xls

    Load 

         CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo. 

         ABERTURA, 

         FECHAMENTO, 

         STATUS 

    From Arquivo020720014.xls

      ...

    

    //*** Fim da leitura das planilhas *** 

           

    Chamados: 

    Load 

         CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS 

    Resident Chamados_tmp where STATUS like 'FECHADO'; 

           

    Load 

         CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS 

    Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP); 

     

    STORE Chamados INTO Chamados.qvd (qvd) ;

     

    DROP Table Chamados_tmp; 

É isso ?

Abraços,

Ernesto Alves

ernestolmalves
Contributor III
Contributor III
Author

Bom dia Raphael,

Muito obrigado pela resposta.

Não entendi bem a sua dica.

Estou trabalhando com um QVW de carga de dados que gera um QVD e outro que faz a leitura desse QVD.

Essa sua sugestão eu deveria implementar no segundo QVW, o que lê o QVD, correto ?

Abraços,

Ernesto Alves

rphpacheco
Creator III
Creator III

Bom dia Ernesto.

Pelo que eu entendi, você quer os dados dos últimos registros lidos gravado em um QVD. Esta lógica que montei faz isso, só não coloquei o comando store no final.

Depois é só criar uma aplicação que leia esta informação e mostre os dados.

ernestolmalves
Contributor III
Contributor III
Author

Raphael,

O código do QVW que lê o QVD que gerei ficaria assim ?

   Auxiliar: 

    LOAD Distinct 

      AutoNumber(CHAMADO&'|'& 

                 ABERTURA&'|'& 

                 FECHAMENTO 

                 ,'CHAVE') as Chave, 

      CHAMADO,  

      ABERTURA, 

      FECHAMENTO, 

      STATUS 

    ... //Existem outros campos.

    FROM Chamado.qvd (qvd); 

    [Tratando Registros]: 

    LOAD 

      * 

    Where 

      Flag <> 'V'; 

    LOAD 

      If(CHAMADO = Peek(CHAMADO, -1), 'V', 'F') as Flag, 

      * 

    Resident Auxiliar 

    Order By  

      Chave Desc; 

           

    DROP Fields  

      Flag, 

      Chave 

    From [Tratando Registros]; 

           

    DROP Table Auxiliar; 

Abraços,

Ernesto Alves

rphpacheco
Creator III
Creator III

Tem que ver quais as informações adicionais existem no seu modelo, mas a primeiro momento é isso mesmo!

Explicando passo a passo a lógica, Criei uma chave utilizando o AutoNumber() com os campos Chamado, Abertura e Fechamento. Após isto, li o conteúdo deste primeiro Load para utilizar a função Order By Desc (pois ela só funciona em tabela Resident). Assim, temos as chaves ordenadas do menor para o maior valor. O if() verifica se o chamado anterior é igual ao atual, se for ele inclui a flag 'V', senão 'F'. Depois fiz um load do load apenas excluindo os registros da flag com valor 'V' e dropei os campos flag e chave (não há necessidade em fazer isso).

Cheguei até a fazer 3 arquivos .xls para testar com um número maior de registros e funcionou aqui.

Verifique se com a sua estrutura irá funcionar e se houver algum problema retrate aqui!

Abraço!

felipe_dutra
Partner - Creator
Partner - Creator

Ficaria assim, Ernesto:

//*** Início da leitura das planilhas ***

    

    Chamados_tmp:

    Load

         CHAMADO as CHAMADOTMP,//Só pra não concatenar. Também pode ser usado o NoConcatenate abaixo.

         ABERTURA,

         FECHAMENTO,

         STATUS

    From [Arquivo*.xls]

    (...)

    ;

   

//*** Fim da leitura das planilhas ***

          

    Chamados:

    Load

         CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS

    Resident Chamados_tmp where STATUS like 'FECHADO';

          

    Load

         CHAMADOTMP as CHAMADO , ABERTURA, FECHAMENTO, STATUS

    Resident Chamados_tmp where Not Exists(CHAMADO, CHAMADOTMP);

    DROP Table Chamados_tmp;

    

    STORE Chamados INTO Chamados.qvd (qvd) ;

Abs,

Felipe

ernestolmalves
Contributor III
Contributor III
Author

Boa noite,

Apenas para dar um retorno e agradecer novamente.

Deu certo com a solução do Felipe e a do Rafael me pareceu sem resultado ou erro.

Acredito que as duas funcionem, mas como a do Felipe funcionou e me pareceu mais fácil, adotei esta.

Fica aqui o meu muito obrigado aos dois, me ajudaram muito !

Abraços,

Ernesto Alves