-
Total de ítens
308 -
Registro em
-
Última visita
-
Days Won
1
Tipo de Conteúdo
Blocks
Notes ACBrLibNFe
Fóruns
Downloads
Calendário
Tudo que Dfox postou
-
Obrigado achei removi esse linha ACBrCTe1.dacte.PathPDF := edtPathLogs.text; e resolveu!
-
Boa tarde estou configurando o componente assim e o pdf só salva em pasta camada tmp o que será que pode ser? ACBrCTeDACTeRL1.UsaSeparadorPathPDF := True; ACBrCTeDACTeRL1.PathPDF := ExtractFilePath(ParamStr(0)) + 'PDF\';
-
Bom dia fiz uma pequena mudança na configuração e enviou normal para o Hotmail veja procedure TfrmACBrNFe.ConfigurarEmail; begin ACBrMail1.Host := edtSmtpHost.Text; ACBrMail1.Port := edtSmtpPort.Text; ACBrMail1.Username := edtSmtpUser.Text; ACBrMail1.Password := edtSmtpPass.Text; ACBrMail1.From := edtSmtpUser.Text; ACBrMail1.SetSSL := False;//cbEmailSSL.Checked; // SSL - Conexao Segura ACBrMail1.SetTLS := cbEmailSSL.Checked; // Auto TLS ACBrMail1.ReadingConfirmation := False; // Pede confirmacao de leitura do email ACBrMail1.UseThread := False; // Aguarda Envio do Email(nao usa thread) ACBrMail1.FromName := 'Projeto ACBr - ACBrNFe'; end; ACBrMail1.SetSSL := False;//cbEmailSSL.Checked; // SSL - Conexao Segura so mudei o SSL para false
-
Bom dia pode fechar o tópico, não há bug nenhum, eu estava selecionando um certificado errado rsrs esta tudo 100% Resolvido.
-
Hum isso parece ser um bug do componente, isso será corrigido?
-
Obrigado por reportar, as configuração estão corretas. eu ia migrar para o AcbrEmail, mais por enquanto vou continuar com minha Unit que esta enviando sem problemas veja como estou fazendo! procedure Tfrmnotafiscal_menu.bt_nfe_emailClick(Sender: TObject); var Para: string; sXML, sPDF, sXMLPDF: string; bservSsl: Boolean; email: TEmail; dests : TStringList; begin try sXML := qrnota.fieldbyname('nfe_xml').AsString; if FileExists(IfExtraiXmlnf(sXML,qrnota)) then begin {frmmodulo.qrconfig.Open;} if edtSmtpHost.Text = '' then begin Application.MessageBox('Favor configurar a conta de email!', 'Erro', mb_ok + mb_iconerror); exit; end; query.Close; query.SQL.Clear; query.SQL.Add('select EMAIL from c000004'); query.SQL.Add('where codigo = ''' + qrnota.fieldbyname('codfilial').AsString + ''''); query.Open; ACBrNFe1.NotasFiscais.Clear; ACBrNFe1.NotasFiscais.LoadFromFile(sXML); ACBrNFeDANFEFR1.Site := query.fieldbyname('EMAIL').AsString; // Verifica se é NFE ou NFC-e if ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.modelo = 65 then begin ACBrNFe1.DANFE := ACBrNFeDANFCEFR1; ACBrNFeDANFCEFR1.ACBrNFe := ACBrNFe1; // Linha inserida para corrigir problema de impressao do numero do protocolo na nfe. ACBrNFeDANFCEFR1.Protocolo := ''; ACBrNFe1.DANFE.TipoDANFE := tiNFCe; ACBrNFeDANFCEFR1.FonteTributos := 'IBPT'; //Fonte do cauculo dos impostos ACBrNFeDANFCEFR1.FastFile := ExtractFilePath(ParamStr(0)) + 'Nfe\Report\' + cbDanfeNFCe.Text + '.fr3'; end else if ACBrNFe1.NotasFiscais.Items[0].NFe.Ide.modelo = 55 then begin ACBrNFe1.DANFE := ACBrNFeDANFEFR1; ACBrNFeDANFEFR1.ACBrNFe := ACBrNFe1; // Linha inserida para corrigir problema de impressao do numero do protocolo na nfe. ACBrNFeDANFEFR1.Protocolo := ''; ACBrNFe1.DANFE.TipoDANFE := tiRetrato; ACBrNFeDANFEFR1.FonteTributos := 'IBPT'; //Fonte do cauculo dos impostos ACBrNFeDANFEFR1.FastFile := ExtractFilePath(ParamStr(0)) + 'Nfe\Report\DANFeRetrato.fr3'; end; ACBrNFe1.NotasFiscais.ImprimirPDF; sPDF:= StringReplace(StringReplace(sXML,'Nfe', 'PDF',[]), '.xml', '.pdf',[]); sXMLPDF := sXML + '|'+ sPDF; qrNFE_Cliente.Close; qrNFE_Cliente.sql.clear; qrNFE_Cliente.sql.add('select email from c000007'); qrNFE_Cliente.sql.add('where codigo = ''' + qrnota.fieldbyname('codcliente').AsString + ''''); qrNFE_Cliente.Open; Para := qrNFE_Cliente.fieldbyname('email').AsString; if Para = '' then begin Para := InputBox('Email', 'Email do Cliente', ''); end; if Para = '' then exit; //Screen.Cursor := crAppStart; //Troca o cursor if (frmStatus = nil) then frmStatus := TfrmStatus.Create(Application); frmStatus.lblStatus.Caption := 'Enviando Email, Aguarde...'; frmStatus.Show; frmStatus.BringToFront; Application.ProcessMessages; {if frmmodulo.qrconfig.fieldbyname('email_exige_conexao').asinteger = 1 then bserv := True else bserv := False;} if cbEmailSSL.Checked then bservSsl := True else bservSsl := False; dests := TStringList.Create; dests.Clear; dests.Add(Para); email := TEmail.Create; {Envia o xml e o pdf} if email.EnviarEmail(edtnfe.text, edtSmtpUser.text, edtSmtpPass.text, edtSmtpHost.text, edtSmtpPort.text, edtEmailAssunto.text, '', //'c:\teste.html', bservSsl, true, dests, nil, nil, mmEmailMsg.Lines, sXMLPDF) then begin //Screen.Cursor := crDefault; //Volta o cursor frmStatus.Hide; Application.MessageBox('Email enviado com sucesso!', 'Aviso', mb_ok + MB_ICONINFORMATION); end else begin //Screen.Cursor := crDefault; //Volta o cursor frmStatus.Hide; Application.MessageBox ('Houve falha no envio deste email... Favor Verificar o endereço do Cliente!', 'Atenção', mb_ok + mb_iconerror); end; dests.Free; email.Free; end else begin Application.MessageBox('Arquivo XML não encontrado!', 'Erro', mb_ok + mb_iconerror); exit; end; except on E: exception do begin Application.MessageBox(PChar('Erro ao criar/imprimir NFe!' + #13 + 'Mensagem: ' + E.message), 'Erro', mb_ok + mb_iconerror); end; end; end; segue a Unit em anexo abraços. email.pas
-
Sim, Tenta Loadfromstring
-
Sim isso ocorre na minha aplicação também, estou usando o delphi xe2, Aquele primeiro botão retorna o número de série normal, mas o segundo retorna 01.
-
Boa note O ACBrNFe_Exemplo não esta pegando o numero de serie correto do certificado esta retornando apenas o numero 01 mais alguém com esse problema? segue a imagem
-
Boa noite estou testando o ACBrNFe_Exemplo para envio de e-mail do xml, e esta me dando o seguinte erro SMTP Error: Unable to Login , o mais estranho é que uso uma Unit que eu fiz para envio de e-mail e envia 100%. o que será que pode ser?
-
Sistema com apenas uma instancia e restaura form
Dfox replied to Dfox's tópico in Object Pascal - Delphi & Lazarus
na verdade o código final ficou assim var Handle, HandleId: THandle; // Evita carga dupla da aplicacao begin Handle := CreateMutex(nil, True, 'Dfox'); if GetLastError = ERROR_ALREADY_EXISTS then begin MessageDlg('O Sistema Dfox já está em execução', mtInformation, [mbOK], 0); HandleId := FindWindow('TfrmPrincipal',nil); if not IsWindowVisible(Handle) then begin ShowWindow(HandleId, SW_RESTORE); SetForegroundWindow(HandleId); end; if Handle <> 0 then CloseHandle(Handle); Application.Terminate; exit; end; end; -
Sistema com apenas uma instancia e restaura form
Dfox replied to Dfox's tópico in Object Pascal - Delphi & Lazarus
de momento consegui resolver assim var MutexHandle: THandle; hwind:HWND; MutexHandle := CreateMutex(nil, True, 'Dfox'); if MutexHandle <> 0 then begin if GetLastError = ERROR_ALREADY_EXISTS then begin MessageDlg('O Sistema Dfox já está em execução', mtInformation, [mbOK], 0); CloseHandle(MutexHandle); hwind := 0; repeat hwind := FindWindowEx(0,hwind,'TApplication','TfrmPrincipal'); until (hwind<>Application.Handle); if (hwind<>0) then begin ShowWindow(hwind,SW_SHOWNORMAL); SetForegroundWindow(hwind); end; Halt; end end; -
Sistema com apenas uma instancia e restaura form
Dfox replied to Dfox's tópico in Object Pascal - Delphi & Lazarus
Daniel valeu pela força, a função não deu certo! -
Sistema com apenas uma instancia e restaura form
um tópico no fórum postou Dfox Object Pascal - Delphi & Lazarus
boa tarde tenho o seguinte código no meu sistema para evitar abrir varias instancias var Handle: THandle; begin Application.Initialize; // Evita carga dupla da aplicacao begin Handle := CreateMutex(nil, True, 'Dfox'); if GetLastError = ERROR_ALREADY_EXISTS then begin MessageDlg('O Sistema Dfox já está em execução', mtInformation, [mbOK], 0); if not IsWindowVisible(Handle) then begin ShowWindow(Handle, SW_RESTORE); SetForegroundWindow(Handle); end; if Handle <> 0 then CloseHandle(Handle); Application.Terminate; exit; end; end; ele funciona bem, mas não restara o sistema com o comando ShowWinow alguém poderia me dar uma luz? -
Digo as configurações não deveria ser 5 6 e 8 de acordo com a nova mudança?
-
segue em anexos. Screenshot_1.png com configuração antiga, Screenshot_2.png com configuração atual
-
Daniel tranquilo! mas o fato é que o componente ACBrNFeDANFCEFR1 não segue o padrão da mudança de margens continua como antigamente, mas está tudo certo.
-
Sim, mas o bom seria se o componente já tivesse com a configuração de medidas correta para o relatório, assim não causaria dúvidas.
-
Boa tarde, iniciando um novo projeto de impressão de nfce, percebi que as novas margens do ACBrNFeDANFCEFR1 dês configura a impressão agora com as margens antiga.
-
tente instalar o certificado com o Instalador VALID isso com migo resolve.
-
Obrigado pelo esclarecimento BigWings eu alterei essa linha com abs para a diferença sempre ficar positiva, Resolvido. vdesc_itemdif := Abs(vdesc_itemtotal - vdesconto_atual);
-
eu alterei essas linha e funciono perfeitamente if vdesc_itemtotal > vdesconto_atual then query.sql.add('desconto = desconto - :vdesc_itemdif, total = total + :vdesc_itemdif'); if vdesc_itemtotal < vdesconto_atual then query.sql.add('desconto = desconto + :vdesc_itemdif, total = total - :vdesc_itemdif');
-
acho que consegui procedure Tfrmnotafiscal.brateioClick(Sender: TObject); var vdesc_item, vdesc_itemtotal, vdesc_itemdif :Real; begin vtotal_produtos := 0; vtotal_nota := 0; if check_desconto.Checked = True then begin qrnotafiscal_item.first; while not qrnotafiscal_item.eof do begin if (frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat + frmnotafiscal_menu.qrnota.fieldbyname('desconto_item').AsFloat) > 0 then begin query.close; query.sql.clear; query.sql.add('update c000062 set'); query.sql.add('desconto = :descontox, total = :totalx'); if qrnotafiscal_item.fieldbyname('codigo').AsString = '' then begin query.sql.add(',codigo = ''' + frmprincipal.Codifica ('000062',10) + ''''); query.sql.add (' where codproduto = :codproduto and codnota = :codnota and total = :total and codlancamento = :codlancamento'); query.params.parambyname('total').AsFloat := qrnotafiscal_item.fieldbyname('total').AsFloat; query.params.parambyname('codproduto').AsString := qrnotafiscal_item.fieldbyname('codproduto').AsString; query.params.parambyname('codnota').AsString := qrnotafiscal_item.fieldbyname('codnota').AsString; query.params.parambyname('codlancamento').AsString := qrnotafiscal_item.fieldbyname('codlancamento').AsString; end else begin query.sql.add(' where codigo = ''' + qrnotafiscal_item.fieldbyname ('codigo').AsString + ''''); end; if frmnotafiscal_menu.qrnotaDESCONTO.AsFloat > 0 then vdesc_item := frmnotafiscal_menu.qrnotaDESCONTO.AsFloat else vdesc_item := frmnotafiscal_menu.qrnotaDESCONTO_ITEM.AsFloat; if frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat > 0 then query.params.parambyname('descontox').AsFloat := RoundTo(qrnotafiscal_item.fieldbyname('subtotal').AsFloat * vdesc_item / frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat,-2) else query.params.parambyname('descontox').AsFloat := 0; query.params.parambyname('totalx').AsFloat := (qrnotafiscal_item.fieldbyname('unitario').AsFloat * qrnotafiscal_item.fieldbyname('qtde').AsFloat) - query.params.parambyname('descontox').AsFloat; query.ExecSQL; vdesconto_atual := vdesconto_atual + (qrnotafiscal_item.fieldbyname('subtotal').AsFloat * vdesc_item / frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat); vdesc_itemtotal := vdesc_itemtotal + RoundTo((qrnotafiscal_item.fieldbyname('subtotal').AsFloat * vdesc_item / frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat), -2); end else begin vdesconto_atual := vdesconto_atual + qrnotafiscal_item.fieldbyname ('desconto').AsFloat; end; vtotal_produtos := vtotal_produtos + qrnotafiscal_item.fieldbyname ('subtotal').AsFloat; vtotal_nota := vtotal_nota + qrnotafiscal_item.fieldbyname ('total').AsFloat; qrnotafiscal_item.Next; Application.ProcessMessages; end; if check_desconto.Checked = True then begin frmnotafiscal_menu.qrnota.fieldbyname('desconto_item').AsFloat := vdesconto_atual; frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat := 0; end else begin frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat := vdesconto_atual; frmnotafiscal_menu.qrnota.fieldbyname('desconto_item').AsFloat := 0; end; frmnotafiscal_menu.qrnota.fieldbyname('valor_produtos').AsFloat := vtotal_produtos; frmnotafiscal_menu.qrnota.fieldbyname('total_nota').AsFloat := vtotal_nota; {verifico a diferença de desconto} vdesc_itemdif := vdesc_itemtotal - vdesconto_atual; if vdesc_itemdif <> 0 then begin query.close; query.sql.clear; query.sql.add('update c000062 set'); if vdesc_itemtotal > vdesconto_atual then query.sql.add('desconto = desconto - :vdesc_itemdif, total = total - :vdesc_itemdif'); if vdesc_itemtotal < vdesconto_atual then query.sql.add('desconto = desconto + :vdesc_itemdif, total = total + :vdesc_itemdif'); query.sql.add('where total = (select Max(total) from c000062 where codnota = :codnota) and codnota = :codnota rows 1'); query.params.parambyname('vdesc_itemdif').AsFloat := vdesc_itemdif; query.params.parambyname('codnota').AsString := frmnotafiscal_menu.qrnota.fieldbyname('codigo').AsString; query.ExecSQL; end; frmmodulo.Conexao.Commit; qrnotafiscal_item.Close; qrnotafiscal_item.sql.Clear; qrnotafiscal_item.sql.add('select item.*, pro.produto, pro.unidade'); qrnotafiscal_item.sql.add('from c000062 item, c000025 pro'); qrnotafiscal_item.sql.add('where item.codproduto = pro.codigo and'); qrnotafiscal_item.sql.add('item.codnota = ''' + frmnotafiscal_menu.qrnota.fieldbyname('codigo').AsString + ''' order by item'); qrnotafiscal_item.Open; end else begin { vdesconto_atual := 0; qrnotafiscal_item.First; while not qrnotafiscal_item.eof do begin vdesconto_atual := vdesconto_atual + qrnotafiscal_item.fieldbyname ('desconto').AsFloat; qrnotafiscal_item.Next; end; Application.ProcessMessages; if vdesconto_atual > 0 then frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat := vdesconto_atual else } begin qrnotafiscal_item.First; while not qrnotafiscal_item.eof do begin query.close; query.sql.clear; query.sql.add('update c000062 set'); query.sql.add('desconto = :descontox, total = :totalx'); if qrnotafiscal_item.fieldbyname('codigo').AsString = '' then begin query.sql.add(',codigo = ''' + frmprincipal.Codifica ('000062',10) + ''''); query.sql.add (' where codproduto = :codproduto and codnota = :codnota and total = :total and codlancamento = :codlancamento'); query.params.parambyname('total').AsFloat := qrnotafiscal_item.fieldbyname('total').AsFloat; query.params.parambyname('codproduto').AsString := qrnotafiscal_item.fieldbyname('codproduto').AsString; query.params.parambyname('codnota').AsString := qrnotafiscal_item.fieldbyname('codnota').AsString; query.params.parambyname('codlancamento').AsString := qrnotafiscal_item.fieldbyname('codlancamento').AsString; end else begin query.sql.add(' where codigo = ''' + qrnotafiscal_item.fieldbyname ('codigo').AsString + ''''); end; if frmnotafiscal_menu.qrnotaDESCONTO.AsFloat > 0 then vdesc_item := frmnotafiscal_menu.qrnotaDESCONTO.AsFloat else vdesc_item := frmnotafiscal_menu.qrnotaDESCONTO_ITEM.AsFloat; if frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat > 0 then query.params.parambyname('descontox').AsFloat := RoundTo(qrnotafiscal_item.fieldbyname('subtotal').AsFloat * vdesc_item / frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat, -2) else query.params.parambyname('descontox').AsFloat := 0; query.params.parambyname('totalx').AsFloat := (qrnotafiscal_item.fieldbyname('unitario').AsFloat * qrnotafiscal_item.fieldbyname('qtde').AsFloat) - query.params.parambyname('descontox').AsFloat; query.ExecSQL; vdesconto_atual := vdesconto_atual + (qrnotafiscal_item.fieldbyname('subtotal').AsFloat * vdesc_item / frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat); vdesc_itemtotal := vdesc_itemtotal + RoundTo((qrnotafiscal_item.fieldbyname('subtotal').AsFloat * vdesc_item / frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat), -2); vtotal_produtos := vtotal_produtos + qrnotafiscal_item.fieldbyname ('subtotal').AsFloat; vtotal_nota := vtotal_nota + qrnotafiscal_item.fieldbyname ('total').AsFloat; qrnotafiscal_item.Next; Application.ProcessMessages; end; end; if check_desconto.Checked = True then begin frmnotafiscal_menu.qrnota.fieldbyname('desconto_item').AsFloat := vdesconto_atual; frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat := 0; end else begin frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat := vdesconto_atual; frmnotafiscal_menu.qrnota.fieldbyname('desconto_item').AsFloat := 0; end; frmnotafiscal_menu.qrnota.fieldbyname('valor_produtos').AsFloat := vtotal_produtos; frmnotafiscal_menu.qrnota.fieldbyname('total_nota').AsFloat := vtotal_nota; {verifico a diferença de desconto} vdesc_itemdif := vdesc_itemtotal - vdesconto_atual; if vdesc_itemdif <> 0 then begin query.close; query.sql.clear; query.sql.add('update c000062 set'); if vdesc_itemtotal > vdesconto_atual then query.sql.add('desconto = desconto - :vdesc_itemdif, total = total - :vdesc_itemdif'); if vdesc_itemtotal < vdesconto_atual then query.sql.add('desconto = desconto + :vdesc_itemdif, total = total + :vdesc_itemdif'); query.sql.add('where total = (select Max(total) from c000062 where codnota = :codnota) and codnota = :codnota rows 1'); query.params.parambyname('vdesc_itemdif').AsFloat := vdesc_itemdif; query.params.parambyname('codnota').AsString := frmnotafiscal_menu.qrnota.fieldbyname('codigo').AsString; query.ExecSQL; end; frmmodulo.Conexao.Commit; qrnotafiscal_item.close; qrnotafiscal_item.sql.clear; qrnotafiscal_item.sql.add('select item.*, pro.produto, pro.unidade'); qrnotafiscal_item.sql.add('from c000062 item, c000025 pro'); qrnotafiscal_item.sql.add('where item.codproduto = pro.codigo and'); qrnotafiscal_item.sql.add('item.codnota = ''' + frmnotafiscal_menu.qrnota.fieldbyname('codigo').AsString + ''' order by item'); qrnotafiscal_item.Open; end; end; estou testando aqui
-
Boa tarde BigWings esta informação não ajudou muito, estou tentando adaptar esse código de rateio mas ta dificil. procedure Tfrmnotafiscal.brateioClick(Sender: TObject); var vdesc_item: Real; begin vtotal_produtos := 0; vtotal_nota := 0; if check_desconto.Checked = True then begin qrnotafiscal_item.first; while not qrnotafiscal_item.eof do begin if (frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat + frmnotafiscal_menu.qrnota.fieldbyname('desconto_item').AsFloat) > 0 then begin query.close; query.sql.clear; query.sql.add('update c000062 set'); query.sql.add('desconto = :descontox, total = :totalx'); if qrnotafiscal_item.fieldbyname('codigo').AsString = '' then begin query.sql.add(',codigo = ''' + frmprincipal.Codifica ('000062',10) + ''''); query.sql.add (' where codproduto = :codproduto and codnota = :codnota and total = :total and codlancamento = :codlancamento'); query.params.parambyname('total').AsFloat := qrnotafiscal_item.fieldbyname('total').AsFloat; query.params.parambyname('codproduto').AsString := qrnotafiscal_item.fieldbyname('codproduto').AsString; query.params.parambyname('codnota').AsString := qrnotafiscal_item.fieldbyname('codnota').AsString; query.params.parambyname('codlancamento').AsString := qrnotafiscal_item.fieldbyname('codlancamento').AsString; end else begin query.sql.add(' where codigo = ''' + qrnotafiscal_item.fieldbyname ('codigo').AsString + ''''); end; if frmnotafiscal_menu.qrnotaDESCONTO.AsFloat > 0 then vdesc_item := frmnotafiscal_menu.qrnotaDESCONTO.AsFloat else vdesc_item := frmnotafiscal_menu.qrnotaDESCONTO_ITEM.AsFloat; if frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat > 0 then query.params.parambyname('descontox').AsFloat := RoundTo(qrnotafiscal_item.fieldbyname('subtotal').AsFloat * vdesc_item / frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat,-2) else query.params.parambyname('descontox').AsFloat := 0; query.params.parambyname('totalx').AsFloat := (qrnotafiscal_item.fieldbyname('unitario').AsFloat * qrnotafiscal_item.fieldbyname('qtde').AsFloat) - query.params.parambyname('descontox').AsFloat; query.ExecSQL; vdesconto_atual := vdesconto_atual + RoundTo((qrnotafiscal_item.fieldbyname('subtotal').AsFloat * vdesc_item / frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat), -2); end else begin vdesconto_atual := vdesconto_atual + qrnotafiscal_item.fieldbyname ('desconto').AsFloat; end; vtotal_produtos := vtotal_produtos + qrnotafiscal_item.fieldbyname ('subtotal').AsFloat; vtotal_nota := vtotal_nota + qrnotafiscal_item.fieldbyname ('total').AsFloat; qrnotafiscal_item.Next; Application.ProcessMessages; end; frmnotafiscal_menu.qrnota.fieldbyname('valor_produtos').AsFloat := vtotal_produtos; frmnotafiscal_menu.qrnota.fieldbyname('total_nota').AsFloat := vtotal_nota; if check_desconto.Checked = True then begin frmnotafiscal_menu.qrnota.fieldbyname('desconto_item').AsFloat := vdesconto_atual; frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat := 0; end else begin frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat := vdesconto_atual; frmnotafiscal_menu.qrnota.fieldbyname('desconto_item').AsFloat := 0; end; frmmodulo.Conexao.Commit; qrnotafiscal_item.Close; qrnotafiscal_item.sql.Clear; qrnotafiscal_item.sql.add('select item.*, pro.produto, pro.unidade'); qrnotafiscal_item.sql.add('from c000062 item, c000025 pro'); qrnotafiscal_item.sql.add('where item.codproduto = pro.codigo and'); qrnotafiscal_item.sql.add('item.codnota = ''' + frmnotafiscal_menu.qrnota.fieldbyname('codigo').AsString + ''' order by item'); qrnotafiscal_item.Open; end else begin { vdesconto_atual := 0; qrnotafiscal_item.First; while not qrnotafiscal_item.eof do begin vdesconto_atual := vdesconto_atual + qrnotafiscal_item.fieldbyname ('desconto').AsFloat; qrnotafiscal_item.Next; end; Application.ProcessMessages; if vdesconto_atual > 0 then frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat := vdesconto_atual else } begin qrnotafiscal_item.First; while not qrnotafiscal_item.eof do begin query.close; query.sql.clear; query.sql.add('update c000062 set'); query.sql.add('desconto = :descontox, total = :totalx'); if qrnotafiscal_item.fieldbyname('codigo').AsString = '' then begin query.sql.add(',codigo = ''' + frmprincipal.Codifica ('000062',10) + ''''); query.sql.add (' where codproduto = :codproduto and codnota = :codnota and total = :total and codlancamento = :codlancamento'); query.params.parambyname('total').AsFloat := qrnotafiscal_item.fieldbyname('total').AsFloat; query.params.parambyname('codproduto').AsString := qrnotafiscal_item.fieldbyname('codproduto').AsString; query.params.parambyname('codnota').AsString := qrnotafiscal_item.fieldbyname('codnota').AsString; query.params.parambyname('codlancamento').AsString := qrnotafiscal_item.fieldbyname('codlancamento').AsString; end else begin query.sql.add(' where codigo = ''' + qrnotafiscal_item.fieldbyname ('codigo').AsString + ''''); end; if frmnotafiscal_menu.qrnotaDESCONTO.AsFloat > 0 then vdesc_item := frmnotafiscal_menu.qrnotaDESCONTO.AsFloat else vdesc_item := frmnotafiscal_menu.qrnotaDESCONTO_ITEM.AsFloat; if frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat > 0 then query.params.parambyname('descontox').AsFloat := RoundTo(qrnotafiscal_item.fieldbyname('subtotal').AsFloat * vdesc_item / frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat, -2) else query.params.parambyname('descontox').AsFloat := 0; query.params.parambyname('totalx').AsFloat := (qrnotafiscal_item.fieldbyname('unitario').AsFloat * qrnotafiscal_item.fieldbyname('qtde').AsFloat) - query.params.parambyname('descontox').AsFloat; query.ExecSQL; vdesconto_atual := vdesconto_atual + RoundTo((qrnotafiscal_item.fieldbyname('subtotal').AsFloat * vdesc_item / frmnotafiscal_menu.qrnotaVALOR_PRODUTOS.AsFloat), -2); vtotal_produtos := vtotal_produtos + qrnotafiscal_item.fieldbyname ('subtotal').AsFloat; vtotal_nota := vtotal_nota + qrnotafiscal_item.fieldbyname ('total').AsFloat; qrnotafiscal_item.Next; Application.ProcessMessages; end; end; frmnotafiscal_menu.qrnota.fieldbyname('valor_produtos').AsFloat := vtotal_produtos; frmnotafiscal_menu.qrnota.fieldbyname('total_nota').AsFloat := vtotal_nota; if check_desconto.Checked = True then begin frmnotafiscal_menu.qrnota.fieldbyname('desconto_item').AsFloat := vdesconto_atual; frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat := 0; end else begin frmnotafiscal_menu.qrnota.fieldbyname('desconto').AsFloat := vdesconto_atual; frmnotafiscal_menu.qrnota.fieldbyname('desconto_item').AsFloat := 0; end; frmmodulo.Conexao.Commit; qrnotafiscal_item.close; qrnotafiscal_item.sql.clear; qrnotafiscal_item.sql.add('select item.*, pro.produto, pro.unidade'); qrnotafiscal_item.sql.add('from c000062 item, c000025 pro'); qrnotafiscal_item.sql.add('where item.codproduto = pro.codigo and'); qrnotafiscal_item.sql.add('item.codnota = ''' + frmnotafiscal_menu.qrnota.fieldbyname('codigo').AsString + ''' order by item'); qrnotafiscal_item.Open; end; end;
-
Entendi você tem um exemplo de como pegar esse resíduo?