Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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;
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.
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;
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 ?
Tem sim, procure no seu manual por carga incremental, existem exemplos que você pode adaptar
Certo.
Obrigado Pela Ajuda.
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.
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
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;
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.