Boa tarde a todos.
Fiz umas alterações no RecuperarXML e inclui a possibilidade de abrir um xml para consulta dos itens e se o usuário quiser imprimir o danfe para conferir ou outras finalidades internas. O problema é que só consigo mostrar o danfe na tela quando executo no meu notebook. Quando rodo o executável em outro pc tenho um erro do tipo "violation access..." bla, bla, bla.... Pesquisei muito no forum para saber se outros usuários do ACBR/FASTREPORT tinham algum problema e vi que os resultados de minha pesquisa apontavam para erros no patch referente ao "FastFile" o que não me ajudou, pois usando patch declarado em variável ou em string para o caminho ocorria o erro do mesmo modo. Vou colocar meu código inteiro para ver se algum amigo pode me auxiliar.... Usando o Delphi XE4 e o projeto foi alterado para rodar a partir de: "C:\XML\".
unit principal;
interface
uses GifImage ,UrlMon, MSHtml, ACBrUtil, pcnAuxiliar,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw, ExtCtrls, ComCtrls, WinInet, Menus,
ACBrNFe, Vcl.Grids, Vcl.Buttons, frxClass, ACBrNFeDANFEClass, ACBrNFeDANFEFR,
frxExportPDF,ShellAPI,Types;
type
TfrmPrincipal = class(TForm)
WebBrowser1: TWebBrowser;
ProgressBar1: TProgressBar;
lblStatus: TLabel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
Image1: TImage;
btnPegarHTML: TButton;
btnNovaConsulta: TButton;
btnGerarXML: TButton;
Label1: TLabel;
edtChaveNFe: TEdit;
Label2: TLabel;
edtCaptcha: TEdit;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Memo2: TMemo;
Panel1: TPanel;
WBXML: TWebBrowser;
Button1: TButton;
Label3: TLabel;
TabSheet3: TTabSheet;
Label4: TLabel;
Label5: TLabel;
TabSheet4: TTabSheet;
ACBrNFe1: TACBrNFe;
Edit1: TEdit;
StringGridProdutos: TStringGrid;
BtImprimir: TBitBtn;
Label6: TLabel;
DANFEFR: TACBrNFeDANFEFR;
BtAbrirXml: TBitBtn;
OpenDialog1: TOpenDialog;
frxPDFExport: TfrxPDFExport;
EdChave: TEdit;
Label7: TLabel;
Button2: TButton;
procedure btnPegarHTMLClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure WebBrowser1ProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
procedure btnNovaConsultaClick(Sender: TObject);
procedure btnGerarXMLClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Label3Click(Sender: TObject);
procedure BtImprimirClick(Sender: TObject);
procedure BtAbrirXmlClick(Sender: TObject);
procedure edtChaveNFeKeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
function DownloadFile(SourceFile, DestFile: string): Boolean;
function StripHTML(S: string): string;
procedure DeleteIECache;
procedure PegarHTML;
procedure GeraXml;
procedure NovaConsulta;
procedure carregaItens;
public
{ Public declarations }
FPath,caminho,DanfeRetrato,Dirxml,Dirpdf,Dirxmlfor: string;
end;
var
frmPrincipal: TfrmPrincipal;
TpcnCSTIcms: string;
implementation
uses ACBrNFeUtil, ACBrHTMLtoXML, pcnConversao;
{$R *.dfm}
procedure TfrmPrincipal.DeleteIECache;
var
lpEntryInfo: PInternetCacheEntryInfo;
hCacheDir: LongWord;
dwEntrySize: LongWord;
begin { DeleteIECache }
dwEntrySize := 0;
FindFirstUrlCacheEntry(nil, TInternetCacheEntryInfo(nil^), dwEntrySize);
GetMem(lpEntryInfo, dwEntrySize);
if dwEntrySize>0 then
lpEntryInfo^.dwStructSize := dwEntrySize;
hCacheDir := FindFirstUrlCacheEntry(nil, lpEntryInfo^, dwEntrySize);
if hCacheDir<>0 then
begin
repeat
DeleteUrlCacheEntry(lpEntryInfo^.lpszSourceUrlName);
FreeMem(lpEntryInfo, dwEntrySize);
dwEntrySize := 0;
FindNextUrlCacheEntry(hCacheDir, TInternetCacheEntryInfo(nil^), dwEntrySize);
GetMem(lpEntryInfo, dwEntrySize);
if dwEntrySize>0 then
lpEntryInfo^.dwStructSize := dwEntrySize;
until not FindNextUrlCacheEntry(hCacheDir, lpEntryInfo^, dwEntrySize)
end; { hCacheDir<>0 }
FreeMem(lpEntryInfo, dwEntrySize);
FindCloseUrlCache(hCacheDir)
end; { DeleteIECache }
function TfrmPrincipal.DownloadFile(SourceFile, DestFile: string): Boolean;
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: File;
sAppName: string;
begin
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName),INTERNET_OPEN_TYPE_PRECONFIG,nil, nil, 0);
try
hURL := InternetOpenURL(hSession,PChar(SourceFile),nil,0,0,0);
try
AssignFile(f, DestFile);
Rewrite(f,1);
repeat
InternetReadFile(hURL, @Buffer,SizeOf(Buffer), BufferLen);
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
CloseFile(f);
Result := True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end;
end;
procedure TfrmPrincipal.edtChaveNFeKeyPress(Sender: TObject; var Key: Char);
begin
//Acbrnfe1.NotasFiscais.LoadFromFile := (ACBrNFe1.NotasFiscais.Items[0].NFe.procNFe.chNFe);
BtImprimir.Enabled:= True;
end;
{begin
try
Result := UrlDownloadToFile(nil, PChar(SourceFile), PChar(DestFile), 0,
nil) = 0;
except
Result := False;
end;
end; }
function TfrmPrincipal.StripHTML(S: string): string;
var
TagBegin, TagEnd, TagLength: integer;
begin
TagBegin := Pos( '<', S); // search position of first <
while (TagBegin > 0) do begin // while there is a < in S
TagEnd := Pos('>', S); // find the matching >
TagLength := TagEnd - TagBegin + 1;
Delete(S, TagBegin, TagLength); // delete the tag
TagBegin := Pos( '<', S); // search for next <
end;
Result := S; // give the result
end;
procedure TfrmPrincipal.btnPegarHTMLClick(Sender: TObject);
begin
PegarHTML;
end;
procedure TfrmPrincipal.PegarHTML;
begin
//edtChaveNFe.Text := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
// EdChave.Text := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
if not ValidarChave('NFe'+edtChaveNFe.Text) then
begin
MessageDlg('Chave Inválida.',mtError,[mbok],0);
edtChaveNFe.SetFocus;
exit;
end;
if trim(edtCaptcha.Text) = '' then
begin
MessageDlg('Digite o valor da imagem.',mtError,[mbok],0);
edtCaptcha.SetFocus;
exit;
end;
Memo2.Lines.Clear;
Button1.Enabled := False;
btnPegarHTML.Enabled := False;
btnNovaConsulta.Enabled := False;
btnGerarXML.Enabled := False;
try
WebBrowser1.OleObject.Document.all.Item('ctl00$ContentPlaceHolder1$txtChaveAcessoCompleta', 0).value := edtChaveNFe.Text;
WebBrowser1.OleObject.Document.all.Item('ctl00$ContentPlaceHolder1$txtCaptcha', 0).value := edtCaptcha.Text;
WebBrowser1.OleObject.Document.all.Item('ctl00$ContentPlaceHolder1$btnConsultar', 0).click;
except
btnNovaConsulta.Enabled := True;
raise;
end;
PageControl1.ActivePageIndex := 0;
end;
procedure TfrmPrincipal.FormCreate(Sender: TObject);
begin
Dirxml := 'C:\XML\';
Dirpdf := 'C:\XML\\PDF\';
Dirxmlfor := 'C:\XML\XML_FORNECEDOR\';
DANFEFR.PathPDF := 'C:\XML\PDF\';
if not DirectoryExists(Dirpdf) then
ForceDirectories(Dirpdf);
if not DirectoryExists(Dirxmlfor) then
ForceDirectories(Dirxmlfor);
StringGridProdutos.ColWidths[0] := 20; // vazio
StringGridProdutos.ColWidths[1] := 80; // código
StringGridProdutos.ColWidths[2] := 100; // barras
StringGridProdutos.ColWidths[3] := 260; // produto
StringGridProdutos.ColWidths[4] := 30; // unidade
StringGridProdutos.ColWidths[5] := 30; // cst
StringGridProdutos.ColWidths[6] := 38; // Qtd
StringGridProdutos.ColWidths[7] := 80; // valor unitario
StringGridProdutos.ColWidths[8] := 80; // valor total
StringGridProdutos.ColWidths[9] := 70; // % icms
StringGridProdutos.ColWidths[10] := 100; // valor icms
StringGridProdutos.ColWidths[11] := 50; // %IPI
StringGridProdutos.ColWidths[12] := 70; // valor IPI
//inicio do titulo das colunas
StringGridProdutos.Cells[1,0] := 'Código';
StringGridProdutos.Cells[2,0] := 'Cód. Barras';
StringGridProdutos.Cells[3,0] := 'Descrição';
StringGridProdutos.Cells[4,0] := 'Und.';
StringGridProdutos.Cells[5,0] := 'CST';
StringGridProdutos.Cells[6,0] := 'Qtd.';
StringGridProdutos.Cells[7,0] := 'Valor Unit.';
StringGridProdutos.Cells[8,0] := 'Valor Total';
StringGridProdutos.Cells[9,0] := '% ICMS ST';
StringGridProdutos.Cells[10,0] := 'Valor ICMS ST';
StringGridProdutos.Cells[11,0] := '% IPI';
StringGridProdutos.Cells[12,0] := 'Valor IPI';
NovaConsulta;
//DANFEFR.PathPDF.Empty;
//DANFEFR.PathPDF := 'C:\XML\PDF\';
//DANFEFR.FastFile := 'C:\XML\DANFeRetrato_ti.fr3';
end;
procedure TfrmPrincipal.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
k, i: Integer;
Source, dest: string;
textoNFe : IHTMLDocument2;
begin
Application.ProcessMessages;
if WebBrowser1.LocationURL = 'http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=' then
begin
for k := 0 to WebBrowser1.OleObject.Document.Images.Length - 1 do
begin
Source := WebBrowser1.OleObject.Document.Images.Item(k).Src;
if (Source = 'http://www.nfe.fazenda.gov.br/scripts/srf/intercepta/captcha.aspx?opt=image') then
begin
dest := ExtractFilePath(ParamStr(0)) + 'captcha.gif';
DownloadFile(Source, dest);
end;
end;
Image1.Picture.LoadFromFile(dest);
btnPegarHTML.Enabled := True;
end
else if WebBrowser1.LocationURL = 'https://www.nfe.fazenda.gov.br/portal/visualizacaoNFe/completa/Default.aspx' then
begin
WebBrowser1.Navigate('https://www.nfe.fazenda.gov.br/PORTAL/visualizacaoNFe/completa/impressao.aspx');
end
else if WebBrowser1.LocationURL = 'http://www.nfe.fazenda.gov.br/portal/consultaCompleta.aspx?tipoConteudo=XbSeqxE8pl8=' then
begin
textoNFe := WebBrowser1.Document as IHTMLDocument2;
repeat
Application.ProcessMessages;
until Assigned(textoNFe.body);
Memo2.Lines.Text := StripHTML(textoNFe.body.innerHTML);
Memo2.Lines.Text := StringReplace(Memo2.Lines.Text,' ','',[rfReplaceAll, rfIgnoreCase]);
i := 0;
while i < memo2.Lines.Count-1 do
begin
if trim(Memo2.Lines[i]) = '' then
begin
Memo2.Lines.Delete(i);
i := i - 1;
end;
if pos('function',Memo2.lines[i])>0 then
begin
Memo2.Lines.Delete(i);
i := i - 1;
end;
if pos('document',Memo2.lines[i])>0 then
begin
Memo2.Lines.Delete(i);
i := i - 1;
end;
if pos('{',Memo2.lines[i])>0 then
begin
Memo2.Lines.Delete(i);
i := i - 1;
end;
if pos('}',Memo2.lines[i])>0 then
begin
Memo2.Lines.Delete(i);
i := i - 1;
end;
i := i + 1;
end;
Image1.Picture := nil;
btnGerarXML.Enabled := True;
GeraXml;
end
else if WebBrowser1.LocationURL = 'https://www.nfe.fazenda.gov.br/portal/inexistente_completa.aspx' then
begin
MessageDlg('NF-e INEXISTENTE na base nacional, favor consultar esta NF-e no site da SEFAZ de origem.',mtError,[mbok],0);
Image1.Picture := nil;
btnGerarXML.Enabled := True;
btnNovaConsulta.Enabled := True;
end
else
begin
MessageDlg('Erro carregando URL: '+WebBrowser1.LocationURL,mtError,[mbok],0);
Image1.Picture := nil;
btnGerarXML.Enabled := True;
btnNovaConsulta.Enabled := True;
end;
end;
procedure TfrmPrincipal.WebBrowser1ProgressChange(Sender: TObject; Progress,
ProgressMax: Integer);
begin
if ProgressMax = 0 then
begin
ProgressBar1.Visible := False;
lblStatus.Visible := False;
exit;
end
else
begin
ProgressBar1.Visible := True;
lblStatus.Visible := True;
try
ProgressBar1.Max := ProgressMax;
if (Progress <> -1) and (Progress <= ProgressMax) then
ProgressBar1.Position := Progress
else
begin
ProgressBar1.Visible := False;
lblStatus.Visible := False;
end;
except
on EDivByZero do
exit;
end;
end;
end;
procedure TfrmPrincipal.btnNovaConsultaClick(Sender: TObject);
begin
NovaConsulta;
end;
procedure TfrmPrincipal.NovaConsulta;
begin
btnNovaConsulta.Enabled := False;
btnGerarXML.Enabled := False;
edtcaptcha.Text:='';
Button1.Enabled := True;
// DeleteIECache;
Memo2.Lines.Clear;
WebBrowser1.Navigate('http://www.nfe.fazenda.gov.br/portal/consulta.aspx?tipoConsulta=completa&tipoConteudo=XbSeqxE8pl8=');
end;
procedure TfrmPrincipal.BtImprimirClick(Sender: TObject);
begin
//if FilesExists Acbrnfe1.NotasFiscais('C:\XML\XML_FORNECEDOR\'+(edtChaveNFe.Text)+'-nfe.xml') then
//DANFEFR.FastFile := '';
//DANFEFR.PathPDF := '';
DANFEFR.FastFile := ExtractFileDir(application.ExeName) + '\DANFeRetrato_ti.fr3';
DANFEFR.PathPDF := 'C:\XML\PDF\';
ACBrNFe1.NotasFiscais.ImprimirPDF;
//frxReport1.PrepareReport;
//frxReport1.ShowPreparedReport;
ACBrNFe1.NotasFiscais.Imprimir;
ACBrNFe1.DANFE.MostrarPreview:= True;
//carregaItens;
//Acbrnfe1.NotasFiscais.LoadFromFile('');
//DANFEFR.PathPDF := EmptyStr;
end;
procedure TfrmPrincipal.BtAbrirXmlClick(Sender: TObject);
var
I: Integer;
begin
if OpenDialog1.Execute then
begin
caminho := ExtractFilePath(ParamStr(0));
ACBrNFe1.NotasFiscais.Clear;
Acbrnfe1.NotasFiscais.LoadFromFile(OpenDialog1.FileName);
Acbrnfe1.NotasFiscais.SaveToFile('C:\XML\XML_FORNECEDOR\');
BtImprimir.Enabled := True;
Edit1.Text := ACBrNFe1.NotasFiscais.Items[0].NFe.Emit.xNome;
edtChaveNFe.Text := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
EdChave.Text := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
//edtChaveNFe.Text := caminho+'PDF\';
DANFEFR.PathPDF := 'C:\XML\PDF\';
//DANFEFR.dmDanfe.frxPDFExport.Start;
//frxPDFExport.Start;
DANFEFR.FastFile := ExtractFileDir(application.ExeName) + '\DANFeRetrato_ti.fr3';
//DANFEFR.FastFile := 'C:\XML\DANFeRetrato_ti.fr3';
//ACBrNFe1.NotasFiscais.Imprimir;
carregaItens;
end;
end;
procedure TfrmPrincipal.btnGerarXMLClick(Sender: TObject);
var
L: Integer;
begin
ACBrNFe1.NotasFiscais.Clear;
GeraXML;
ACBrNFe1.NotasFiscais.LoadFromFile(FPath);
Acbrnfe1.NotasFiscais.SaveToFile(Dirxmlfor);
Edit1.Text := ACBrNFe1.NotasFiscais.Items[0].NFe.Emit.xNome;
edtChaveNFe.Text := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
EdChave.Text := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
carregaItens;
end;
procedure TfrmPrincipal.GeraXml;
var
i: integer;
begin
FPath:=GerarXML(Memo2.Lines.Text);
WBXML.Navigate(FPath);
MessageBox(0,PChar('XML '+FPath+' gerado com sucesso!'),'Informação',
MB_ICONINFORMATION+MB_TASKMODAL);
btnNovaConsulta.Enabled := True;
btnPegarHTML.Enabled := True;
ACBrNFe1.NotasFiscais.LoadFromFile(FPath);
Edit1.Text := ACBrNFe1.NotasFiscais.Items[0].NFe.Emit.xNome;
edtChaveNFe.Text := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
EdChave.Text := Copy(ACBrNFe1.NotasFiscais.Items[0].NFe.infNFe.ID, 4, 44);
carregaItens;
PageControl1.ActivePageIndex := 3;
end;
procedure TfrmPrincipal.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=vk_escape then
Close;
end;
procedure TfrmPrincipal.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
Action := caFree;
end;
procedure TfrmPrincipal.Button1Click(Sender: TObject);
begin
PegarHTML;
BtImprimir.Enabled := True;
DANFEFR.PathPDF := 'C:\XML\PDF\';
DANFEFR.FastFile := ExtractFileDir(application.ExeName) + '\DANFeRetrato_ti.fr3';
ACBrNFe1.DANFE.MostrarPreview:= True;
{ frxPDFExport.Creator := 'Ti Management';
frxPDFExport.Producer := 'Ti Management';
frxPDFExport.Title := 'DANFE PDF';
frxPDFExport.Subject := 'DANFE PDF';
frxPDFExport.Keywords := 'DANFE PDF';
frxPDFExport.ShowDialog := False; }
end;
procedure TfrmPrincipal.Button2Click(Sender: TObject);
var
lerpdf: string;
ler: WideChar;
begin
//lerpdf:= ExtractFileDir(application.ExeName) + '\PDF\'+(EdChave.Text)+'.pdf';
//ReadState('\PDF\'+(EdChave.Text)+'.pdf');
{ler:= StringToWideChar('C:\XML\PDF\'+(EdChave.Text)+'.pdf');
lerpdf:= (ler);
ShellExecute(Handle, nil, (lerpdf), nil, nil, SW_SHOWNORMAL);}
end;
procedure TfrmPrincipal.carregaItens;
var
i: integer;
orig,cst,x: string;
peripi,valipi,valpro,vcem,a,b,c: Double;
begin
//s := IntToStr(n);
StringGridProdutos.RowCount := ACBrNFe1.NotasFiscais.Items[0].NFe.Det.Count+1;
for i := 0 to ACBrNFe1.NotasFiscais.Items[0].NFe.Det.Count - 1 do
begin
orig := OrigToStr(ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.ICMS.orig);
cst := CSTICMSToStr(ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.ICMS.CST);
peripi:= (ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.IPI.pIPI);
valipi:= (ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.IPI.vIPI);
valpro:= (ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Prod.vProd);
vcem:=100;
StringGridProdutos.Cells[1,i+1] := ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Prod.cProd;
StringGridProdutos.Cells[2,i+1] := ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Prod.cEANTrib;
StringGridProdutos.Cells[3,i+1] := ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Prod.xProd;
StringGridProdutos.Cells[4,i+1] := ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Prod.uCom;
StringGridProdutos.Cells[5,i+1] := (orig+cst);
StringGridProdutos.Cells[6,i+1] := FormatFloat('###,###,###0', ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Prod.qCom);
StringGridProdutos.Cells[7,i+1] := FormatFloat('R$ ###,###,###0.00', ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Prod.vUnCom);
StringGridProdutos.Cells[8,i+1] := FormatFloat('R$ ###,###,###0.00', ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Prod.vProd);
StringGridProdutos.Cells[9,i+1] := FormatFloat('###,###,###0.00 %', ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.ICMS.pICMSST);
StringGridProdutos.Cells[10,i+1] := FormatFloat('R$ ###,###,###0.00', ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.ICMS.vICMSST);
//StringGridProdutos.Cells[10,i+1] := FormatFloat('###,###,###0.00', ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.IPI.pIPI);
StringGridProdutos.Cells[12,i+1] := FormatFloat('R$ ###,###,###0.00', ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.IPI.vIPI);
if ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.IPI.vIPI > 0 then
a:= (valipi / valpro);
b:= (a * vcem);
x:= (FloatToString( );
if ( > Trunc(b ) then
x:= FloatToStr(Trunc(b ))
else
x:= FloatToStr(Trunc(b ));
//c:= (a / ;
//peripi:= b;
StringGridProdutos.Cells[11,i+1] := x+' %';
//if not ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.IPI.vIPI > 0 then
//StringGridProdutos.Cells[10,i+1] := FormatFloat('###,###,###0.00', ACBrNFe1.NotasFiscais.Items[0].NFe.Det[i].Imposto.IPI.pIPI);
BtImprimir.Enabled := True;
end;
end;
procedure TfrmPrincipal.Label3Click(Sender: TObject);
begin
NovaConsulta;
end;
end.
Desde já agradeço e peço desculpas, caso tenha infringido alguma das regras do forum.
RecuperarXML.rar