8 Replies Latest reply: Jan 15, 2015 2:53 PM by Luiz Wagner Neto Azevedo RSS

    Deletar/Alterar Dados QVD

      Bom dia.

       

      Pessoal,

       

      Estou gerando um QVD com os dados de um txt, e este QVD armazenas os novos dados sem alterar os antigos, quando vou gravar os novos dados no QVD eu verifico pela chave se existir não cria. Porem agora me surgiu um novo desafio, eu preciso manter somente os dados com a data do ultimo dia do mês anterior e os dias do mês atual.

       

      exemplo.

       

      Dados já existente no  QVD.

      data              descricao

      01/12/14        A

      02/12/14        B 

      .......             ....

      ......             ..... 

      31/12/14      D

       

      Na Gravação Atual eu iria pegar o txt com os dados de janeiro e gravar no qvd, então teria os dados com todos os dias do mês de dezembro e janeiro.

       

      Nesta nova maneira eu gostaria de DELETAR os dias do mês anterior que são diferente do ultimo dia do próprio mês e gravar os dados do mês vigente. Então os dados do QVD ficaria desta forma.

       

      data             descricao

      31/12/14      D

      01/01/15      A

      02/01/15      B

      .....................

      ....................

      15/01/15      C

       

      Estou fazendo desta forma atualmente;

       

      DIRECTORY $(pasta_luiz_QVD);

       

       

      IF NOT ISNULL (QvdCreateTime('$(pasta_luiz_QVD)\ST_PEDIDO_DIARIO.QVD')) THEN

       

       

        FILTRO_DATAEMI_PEDIDO:

        load Distinct KeyData as KeyDataNV Resident PEDIDOS;

       

        concatenate(PEDIDOS)

        LOAD  KeyData,

           KeyLoja,

         KeyVendedor,

             KeyProduto,

             KeyGrupo,

         [Data Emissao],

             [Vendedor Pedido],

             [Nota Fiscal],

             [QTD. Vendida],

             [Valor Total Item],

             [Codigo Produto Pedido],

             [Referencia Produto Pedido],

             [Grupo Pedido],

             [Sub Grupo Pedido],

             [#Dias]

          FROM

          ST_PEDIDO_DIARIO.QVD (QVD)

          WHERE NOT Exists(KeyDataNV, KeyData);

         

          DROP TABLE FILTRO_DATAEMI_PEDIDO;

      ENDIF;

       

       

      STORE PEDIDOS INTO ST_PEDIDO_DIARIO.QVD;

        • Re: Deletar/Alterar Dados QVD
          Clever Anjos

          A rigor você não deleta ou altera registros em um QVD, toda vez que um comando STORE é executado o arquivo é sobreposto (todos registros anteriores destruídos) com os dados da nova tabela sendo gravada.

           

          Para ter somente os registros de janeiro e dezembro seria algo semelhante a:

           

          T:

          LOAD * FROM ST_PEDIDO_DIARIO.QVD WHERE DATA >= '2014-12-01' AND DATA <= '2015-01-31';


          STORE T INTO ST_PEDIDO_DIARIO.QVD;

            • Re: Deletar/Alterar Dados QVD

              Entendi.

               

              Então o meu problema é maior. Por que o txt que eu carrego contém somente os dados do dia. Então toda vez que ele carregar vai matar os dados do dia anterior que contém no QVD e substituir pelos novos.

               

              Existe alguma maneira de manter estes dados. Preciso que este QVD armazene estes novos dados mantendo os anteriores.... e sempre que trocar o mês manter somente o ultimo dia do mês e incluir os dados próximo mês.

               

              Tem como fazer isso ?

                • Re: Deletar/Alterar Dados QVD
                  Clever Anjos

                  Tem sim, procure no seu manual por carga incremental, existem exemplos que você pode adaptar

                    • Re: Deletar/Alterar Dados QVD

                      Certo.

                      Obrigado Pela Ajuda.

                      • Re: Deletar/Alterar Dados QVD

                        Mais uma dúvida, pela sua resposta eu entendi que o arquivo QVD toda vez que é criado ele deleta os dados anteriores e salva os novos.

                         

                        Eu estou executando desta forma:

                         

                        IF NOT ISNULL (QvdCreateTime('$(pasta_luiz_QVD)\ST_PEDIDO_DIARIO.QVD')) THEN

                         

                         

                          FILTRO_DATAEMI_PEDIDO:

                          load Distinct KeyData as KeyDataNV Resident PEDIDOS;

                         

                          concatenate(PEDIDOS)

                          LOAD  KeyData,

                             KeyLoja,

                           KeyVendedor,

                               KeyProduto,

                               KeyGrupo,

                           [Data Emissao],

                               [Vendedor Pedido],

                               [Nota Fiscal],

                               [QTD. Vendida],

                               [Valor Total Item],

                               [Codigo Produto Pedido],

                               [Referencia Produto Pedido],

                               [Grupo Pedido],

                               [Sub Grupo Pedido],

                               [#Dias]

                            FROM

                            ST_PEDIDO_DIARIO.QVD (QVD)

                            WHERE NOT Exists(KeyDataNV, KeyData);

                           

                            DROP TABLE FILTRO_DATAEMI_PEDIDO;

                        ENDIF;

                         

                         

                        STORE PEDIDOS INTO ST_PEDIDO_DIARIO.QVD;

                         

                        E parece que ele esta incluindo os dados novos e mantendo os dados antigos. pois

                        quando carreguei o txt do dia 08/01 ele gravou os dados novos, quando rodei o txt do dia 09/01

                        ele manteve os dados do dia 08/01 e inclui os do dia 09/01.

                          • Re: Deletar/Alterar Dados QVD
                            Clever Anjos

                            Quanto um comand STORE é executado ele apaga o arquivo e grava novamente.

                            Antes desse trecho você está carregando uma tabela pedidos, correto? Digo isso porque você faz um RESIDENT nela

                              FILTRO_DATAEMI_PEDIDO:

                              load Distinct KeyData as KeyDataNV Resident PEDIDOS;

                             

                            Cole aqui o script todo que trata dessa tabela PEDIDOS

                              • Re: Deletar/Alterar Dados QVD

                                Desculpa a demora.

                                 

                                Esse é o processo que faço para gerar o QVD.

                                 

                                $(Include=..\config_pastas.txt);

                                 

                                DIRECTORY $(pasta_luiz);

                                PEDIDOS:

                                LOAD [dt movimen] as KeyData,

                                  loja as KeyLoja,

                                  loja& '-' &vend as KeyVendedor,

                                     cod.produ& '-' &referencia  as KeyProduto,

                                     gr& '-' &sgr as KeyGrupo,

                                  [dt emissao] as [Data Emissao],

                                     vend as [Vendedor Pedido],

                                     [nro nfe] as [Nota Fiscal],

                                     [qt. vendida] as [QTD. Vendida],

                                     [total item] as [Valor Total Item],

                                     cod.produ as [Codigo Produto Pedido],

                                     referencia as [Referencia Produto Pedido],

                                     gr as [Grupo Pedido],

                                     sgr as [Sub Grupo Pedido],

                                     [dt movimen] - [dt emissao] as [#Dias]

                                   

                                FROM

                                [pedidos.txt]

                                (txt, codepage is 1252, embedded labels, delimiter is ';') ;

                                 

                                DIRECTORY $(pasta_luiz_QVD);

                                 

                                 

                                IF NOT ISNULL (QvdCreateTime('$(pasta_luiz_QVD)\ST_PEDIDO_DIARIO.QVD')) THEN

                                 

                                 

                                  FILTRO_DATAEMI_PEDIDO:

                                  load Distinct KeyData as KeyDataNV Resident PEDIDOS;

                                 

                                  concatenate(PEDIDOS)

                                  LOAD  KeyData,

                                     KeyLoja,

                                   KeyVendedor,

                                       KeyProduto,

                                       KeyGrupo,

                                   [Data Emissao],

                                       [Vendedor Pedido],

                                       [Nota Fiscal],

                                       [QTD. Vendida],

                                       [Valor Total Item],

                                       [Codigo Produto Pedido],

                                       [Referencia Produto Pedido],

                                       [Grupo Pedido],

                                       [Sub Grupo Pedido],

                                       [#Dias]

                                    FROM

                                    ST_PEDIDO_DIARIO.QVD (QVD)

                                    WHERE NOT Exists(KeyDataNV, KeyData) ;

                                   

                                   

                                    //Inner Join SQL SELECT KeyData FROM PEDIDOS;

                                   

                                    DROP TABLE FILTRO_DATAEMI_PEDIDO;

                                ENDIF;

                                 

                                 

                                STORE PEDIDOS INTO ST_PEDIDO_DIARIO.QVD;

                                • Re: Deletar/Alterar Dados QVD

                                  Fiz desta forma e a principio funcionou bem.

                                   

                                  DIRECTORY $(pasta_luiz_QVD);

                                   

                                   

                                  IF NOT ISNULL (QvdCreateTime('$(pasta_luiz_QVD)\ST_PEDIDO_DIARIO.QVD')) THEN

                                   

                                   

                                    FILTRO_DATAEMI_PEDIDO:

                                    load Distinct KeyData as KeyDataNV,

                                       Date#(MonthEnd(KeyData)) as KeyFinal Resident PEDIDOS;

                                   

                                    concatenate(PEDIDOS)

                                    LOAD  KeyData,

                                       KeyLoja,

                                     KeyVendedor,

                                         KeyProduto,

                                         KeyGrupo,

                                     [Data Emissao],

                                         [Vendedor Pedido],

                                         [Nota Fiscal],

                                         [QTD. Vendida],

                                         [Valor Total Item],

                                         [Codigo Produto Pedido],

                                         [Referencia Produto Pedido],

                                         [Grupo Pedido],

                                         [Sub Grupo Pedido],

                                         [#Dias]

                                      FROM

                                      ST_PEDIDO_DIARIO.QVD (QVD)

                                      WHERE NOT Exists(KeyDataNV, KeyData) and  KeyData = Date#(MonthEnd(KeyData)) or (KeyData >= Date#(MonthStart(Today())) and KeyData <= Date#(MonthEnd(Today())));

                                         

                                      DROP TABLE FILTRO_DATAEMI_PEDIDO;

                                  ENDIF;

                                   

                                   

                                  STORE PEDIDOS INTO ST_PEDIDO_DIARIO.QVD;

                                   

                                  Agradeço sua ajuda, foi de grande valor.