Fórum Sint #2837
17/02/2009
0
begin
Close; unprepare;
sql.clear;
SQL.ADD('SELECT * from nota where DATAEMISSAO BETWEEN :datahora_ini AND :datahora_fim and(');
SQL.Add('(modelo = ''01'') OR');
SQL.Add('(modelo = ''1A'') OR');
SQL.Add('(modelo = ''03'') OR');
SQL.Add('(modelo = ''06'') OR');
SQL.Add('(modelo = ''55'') OR');
SQL.Add('(modelo = ''22''))');
SQL.Add('order BY dataemissao');
ParamByName('datahora_ini').asdatetime:= datahora_inicial;
parambyname('datahora_fim').asdatetime:= datahora_final;
prepare;
Open;
end; deasy.QrySintegra_D.DataSource := deasy.DtsQrySintegra; with deasy.QrySintegra_d do
begin
Close;
unprepare;
SQL.Clear; SQL.Add('SELECT aliquota, sum(icms_retido+valor_ipi+frete+seguro+pis+outrasdespesas+complemento+servicos) v, sum (icms_retido+valor_ipi) as o, sum(frete+seguro+pis+outrasdespesas+complemento+servicos) as b, sum(icms_especial) as i FROM nota WHERE ');
SQL.Add('notaid = :notaid ');
SQL.Add('GROUP BY aliquota');
prepare; Open; end; if deasy.qrysintegra_D.FieldByName('v').AsCurrency>0 then
begin
while not deasy.QrySintegra.EOF do
begin
while not deasy.QrySintegra_D.EOF do
begin
num_nf := deasy.QrySintegra.Fields.FieldByName('numeronota').AsString;
num_nf := trim(copy(num_nf, length(num_nf) - 6, length(num_nf))); //utilizando apenas 6 últimos digitos da NF
//Faz a chamada da dll passando as informações do banco de dados e armazena numa string temporária
TempStr := Registro50(deasy.QrySintegra.Fields.FieldByName('cnpj').AsString, //CNPJ
deasy.QrySintegra.Fields.FieldByName('inscricao').AsString, //Insc_Est
datetostr(deasy.QrySintegra.Fields.FieldByName('dataemissao').AsDateTime), //Data_Emissao_Recebimento
deasy.QrySintegra.Fields.FieldByName('uf').AsString, //UF
deasy.QrySintegra.Fields.FieldByName('modelo').AsString, //Modelo
deasy.QrySintegra.Fields.FieldByName('serie').AsString, //Serie
num_nf, //Nro
deasy.QrySintegra.Fields.FieldByName('cfop').AsString, //CFOP
deasy.QrySintegra.Fields.FieldByName('emissordocumento').asstring, //Emitente
formatcurr('0.00', deasy.QrySintegra_D.Fields.FieldByName('v').AsFloat), //Valor_Total
formatcurr('0.00', deasy.QrySintegra_D.fields.FieldByName('b').AsFloat), //Base_ICMS
formatcurr('0.00', deasy.QrySintegra_D.fields.FieldByName('i').AsFloat), //Valor_ICMS
'0', //Isenta
formatcurr('0.00', deasy.QrySintegra_D.fields.FieldByName('o').AsFloat), //Outras
'0', //Aliquota
deasy.QrySintegra.Fields.FieldByName('SITUACAO').asstring //Situacao
);
//Executa o tratamento da string temporária testando se houve erro
//Caso haja erro, executa o log das informações inconsistentes no RichEdit
if not Trata_SIntegra_Str(TempStr) then
begin
qnt_erro := qnt_erro + 1;
Result := False; Err_Msg := Err_Msg + #13 +
' Cod_NF_Entrada: ' + deasy.QrySintegra.Fields.FieldByName('NOTAID').AsString + #13 +
' CNPJ: ' + deasy.QrySintegra.Fields.FieldByName('cnpj').AsString + #13 +
' IE: ' + deasy.QrySintegra.Fields.FieldByName('inscricao').AsString + #13 +
' Recebimento: ' + datetostr(deasy.QrySintegra.Fields.FieldByName('dataemissao').AsDateTime) + #13 +
' UF: ' + deasy.QrySintegra.Fields.FieldByName('uf').AsString + #13 +
' Modelo: ' + deasy.QrySintegra.Fields.FieldByName('modelo').AsString + #13 +
' Serie: ' + deasy.QrySintegra.Fields.FieldByName('serie').AsString + #13 +
' Nro: ' + num_nf + #13 +
' CFOP: ' + deasy.QrySintegra.Fields.FieldByName('cfop').AsString + #13 +
' Emitente: ' + deasy.QrySintegra.Fields.FieldByName('emissordocumento').AsString + #13 +
' Valor_Total: ' + deasy.QrySintegra.Fields.FieldByName('icms_retido').AsString + #13 +
' Base ICMS: ' + deasy.QrySintegra_D.Fields.FieldByName('basedecalculo').AsString + #13 +
' Valor ICMS: ' + deasy.QrySintegra_D.Fields.FieldByName('valoricms').AsString + #13 +
' Isenta: ' + deasy.QrySintegra.FieldByName('isentas').AsString + #13 +
' Outras: ' + deasy.QrySintegra.FieldByName('icms_retido').AsString + #13 +
' Aliquota: ' + floattostr(deasy.QrySintegra_D.Fields.FieldByName('aliquota').AsFloat * 100) + #13 +
' Situacao: ' + deasy.QrySintegra.Fields.FieldByName('situacao').asstring
end
else
qnt_ok := qnt_ok + 1; if not deasy.QrySintegra_D.EOF then
deasy.QrySintegra_D.Next; if quit_sintegra then
exit;
end; if not deasy.QrySintegra.EOF then
deasy.QrySintegra.Next;
end;
if quit_sintegra then
exit;
end;
deasy.QrySintegra_D.Close; deasy.QrySintegra_D.DataSource := nil; deasy.QrySintegra.Close; end;
Paulo Silva
Curtir tópico
+ 0Posts
17/02/2009
Wesley Yamazack
Bom dia. Segue abaixo o exemplo alterado
with deasy.QrySintegra do //processa o registro compelementares do sintegra
begin
Close;
unprepare;
sql.clear;
SQL.ADD('SELECT * from nota where DATAEMISSAO BETWEEN :datahora_ini AND :datahora_fim and(');
SQL.Add('(modelo = ''01'') OR');
SQL.Add('(modelo = ''1A'') OR');
SQL.Add('(modelo = ''03'') OR');
SQL.Add('(modelo = ''06'') OR');
SQL.Add('(modelo = ''55'') OR');
SQL.Add('(modelo = ''22''))');
SQL.Add('order BY dataemissao');
ParamByName('datahora_ini').asdatetime:= datahora_inicial;
parambyname('datahora_fim').asdatetime:= datahora_final;
prepare;
Open;
end;
deasy.QrySintegra_D.DataSource := deasy.DtsQrySintegra;
with deasy.QrySintegra_d do
begin
Close;
unprepare;
SQL.Clear;
SQL.Add('SELECT aliquota, ');
SQL.Add(' sum(icms_retido+valor_ipi+frete+seguro+pis+outrasdespesas+complemento+servicos) v, ');
SQL.Add(' sum icms_retido+valor_ipi) as o, ');
SQL.Add(' sum(frete+seguro+pis+outrasdespesas+complemento+servicos) as b, ');
SQL.Add(' sum(icms_especial) as i ');
SQL.Add(' FROM nota ');
SQL.Add(' WHERE notaid = :notaid ');
SQL.Add(' GROUP BY aliquota ');
prepare;
Open;
end;
//Imagina a seguinte situação.
{ ==========================
aliquota v o b i
10 0 0 0 0
20 2 0 0 0
30 2 2 1 0
==========================
Observe que logo abaixo você testa apenas uma vez a coluna "v",
se ela na primeira linha do teu Select, for 0(zero) ele não vai fazer nada, porém
se a primeiraa linha do teu select, for maior do que o(zero) ai sim ele irá fazer o loop 'while not deasy.QrySintegra.EOF do'
- Solução : Você percorrer toda a primeira tabela, depois percorrer a segunda tabela, e logo ir testando se "v" > 0 .
}
while not deasy.QrySintegra.EOF do
begin
while not deasy.QrySintegra_D.EOF do
begin
if deasy.qrysintegra_D.FieldByName('v').AsCurrency>0 then
begin
num_nf := deasy.QrySintegra.Fields.FieldByName('numeronota').AsString;
num_nf := trim(copy(num_nf, length(num_nf) - 6, length(num_nf))); //utilizando apenas 6 últimos digitos da NF
//Faz a chamada da dll passando as informações do banco de dados e armazena numa string temporária
TempStr := Registro50(deasy.QrySintegra.Fields.FieldByName('cnpj').AsString, //CNPJ
deasy.QrySintegra.Fields.FieldByName('inscricao').AsString, //Insc_Est
datetostr(deasy.QrySintegra.Fields.FieldByName('dataemissao').AsDateTime), //Data_Emissao_Recebimento
deasy.QrySintegra.Fields.FieldByName('uf').AsString, //UF
deasy.QrySintegra.Fields.FieldByName('modelo').AsString, //Modelo
deasy.QrySintegra.Fields.FieldByName('serie').AsString, //Serie
num_nf, //Nro
deasy.QrySintegra.Fields.FieldByName('cfop').AsString, //CFOP
deasy.QrySintegra.Fields.FieldByName('emissordocumento').asstring, //Emitente
formatcurr('0.00', deasy.QrySintegra_D.Fields.FieldByName('v').AsFloat), //Valor_Total
formatcurr('0.00', deasy.QrySintegra_D.fields.FieldByName('b').AsFloat), //Base_ICMS
formatcurr('0.00', deasy.QrySintegra_D.fields.FieldByName('i').AsFloat), //Valor_ICMS
'0', //Isenta
formatcurr('0.00', deasy.QrySintegra_D.fields.FieldByName('o').AsFloat), //Outras
'0', //Aliquota
deasy.QrySintegra.Fields.FieldByName('SITUACAO').asstring //Situacao
);
//Executa o tratamento da string temporária testando se houve erro
//Caso haja erro, executa o log das informações inconsistentes no RichEdit
if not Trata_SIntegra_Str(TempStr) then
begin
qnt_erro := qnt_erro + 1;
Result := False;
Err_Msg := Err_Msg + #13 +
' Cod_NF_Entrada: ' + deasy.QrySintegra.Fields.FieldByName('NOTAID').AsString + #13 +
' CNPJ: ' + deasy.QrySintegra.Fields.FieldByName('cnpj').AsString + #13 +
' IE: ' + deasy.QrySintegra.Fields.FieldByName('inscricao').AsString + #13 +
' Recebimento: ' + datetostr(deasy.QrySintegra.Fields.FieldByName('dataemissao').AsDateTime) + #13 +
' UF: ' + deasy.QrySintegra.Fields.FieldByName('uf').AsString + #13 +
' Modelo: ' + deasy.QrySintegra.Fields.FieldByName('modelo').AsString + #13 +
' Serie: ' + deasy.QrySintegra.Fields.FieldByName('serie').AsString + #13 +
' Nro: ' + num_nf + #13 +
' CFOP: ' + deasy.QrySintegra.Fields.FieldByName('cfop').AsString + #13 +
' Emitente: ' + deasy.QrySintegra.Fields.FieldByName('emissordocumento').AsString + #13 +
' Valor_Total: ' + deasy.QrySintegra.Fields.FieldByName('icms_retido').AsString + #13 +
' Base ICMS: ' + deasy.QrySintegra_D.Fields.FieldByName('basedecalculo').AsString + #13 +
' Valor ICMS: ' + deasy.QrySintegra_D.Fields.FieldByName('valoricms').AsString + #13 +
' Isenta: ' + deasy.QrySintegra.FieldByName('isentas').AsString + #13 +
' Outras: ' + deasy.QrySintegra.FieldByName('icms_retido').AsString + #13 +
' Aliquota: ' + floattostr(deasy.QrySintegra_D.Fields.FieldByName('aliquota').AsFloat * 100) + #13 +
' Situacao: ' + deasy.QrySintegra.Fields.FieldByName('situacao').asstring
end
else
qnt_ok := qnt_ok + 1;
if not deasy.QrySintegra_D.EOF then
deasy.QrySintegra_D.Next;
if quit_sintegra then
exit;
end;
if not deasy.QrySintegra.EOF then
deasy.QrySintegra.Next;
end;
if quit_sintegra then
exit;
end;
deasy.QrySintegra_D.Close;
deasy.QrySintegra_D.DataSource := nil;
deasy.QrySintegra.Close;
Att,
Wesley Y
Gostei + 0
17/02/2009
Paulo Silva
Gostei + 0
17/02/2009
Paulo Silva
Gostei + 0
17/02/2009
Wesley Yamazack
Posso te dar um conselho? Uma dica para te ajudar?
Utilize DataSetProvider,e ClientDataset, para poder trabalhar com os dados. Pois eles são muito mais rapido, do que você usar a query. Já utlizou os mesmos?
Dai ao inves de você ficar usando a query para ficar varrendo em um While, você usaaria o Clientdataset(este componente carrega todos os dados de um select, em memoria, sendo muito mais rapido para acessar o mesmos).
Dois motivos que possa ter travado o teu programa.
1 - Você ter caido em loop Infinito.
2 - Você ter clicado enquanto ele estava processando os 400 registos.
Att,
Wesley Y
Gostei + 0
19/02/2009
Wesley Yamazack
O chamado foi concluído. Mas continuamos a sua disposição
Att,
Wesley Y
Gostei + 0
19/02/2009
Paulo Silva
Gostei + 0
20/02/2009
Wesley Yamazack
Att,
Wesley Y
Gostei + 0
21/02/2009
Wesley Yamazack
Segue abaixo o link da video que tinha te prometido.
http://www.4shared.com/file/88770765/3daa7e83/Video_Chamado_Paulo.html
att,
Wesley Y
Gostei + 0
21/02/2009
Paulo Silva
Gostei + 0
22/02/2009
Wesley Yamazack
Ate um proximo ....
Abracos
Att,
Wesley Y
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)