Criei um projeto em Delphi que le perfeitamente o DBF do Clipper. E se as tabelas possuirem todas as informações é possivel gerar a NFE 2.0,
e ainda validando e assinando o XML. Depois exportar para o Programa Emissor gratuito para fazer a sua validação, Assinatura, Transmissao e
Impressão da NFE.
O projeto ainda envia email DO XML E PDF.
Ele utiliza o Componente ACBRNFE2 para gerar e validar o XML.
Se alguem precisar. Mande um arquivo zipado com as tabelas: Que gero um demo com suas tabelas.
Mario Moreira
softcia@hotmail.com
softciasma@hotmail.com
softcia@gmail.com
EXEMPLO:
procedure tGerarNFEACBR20.GerarNFe(NumNFe: string);var
orig: string;
CST: string;
modBC: string;
pRedBC: double;
vBC: double;
pICMS: double;
vICMS: double;
modBCST: string;
pMVAST: double;
pRedBCST: double;
vBCST: double;
pICMSST: double;
vICMSST: double;
UFST: string;
pBCop: double;
vBCSTRet: double;
vICMSSTRet: double;
motDesICMS: string;
vBCSTDest: double;
vICMSSTDest: double;
pCredSN: double;
vCredICMSSN: double;
QPROD: INTEGER;
NF_OBS: string;
nf_fis: string;
resultB: string;
// orig Origem da mercadoria
// CST Tributação do ICMS
// modBC Modalidade de determinação da BC do ICMS
// pRedBC Percentual da Redução de BC
// vBC Valor da BC do ICMS
// pICMS AlÃquota do imposto
// vICMS Valor do ICMS
// modBCST Modalidade de determinação da BC do ICMS ST
// pMVAST Percentual da margem de valor Adicionado do ICMS ST
// pRedBCST Percentual da Redução de BC do ICMS ST
// vBCST Valor da BC do ICMS ST
// pICMSST AlÃquota do imposto do ICMS ST
// vICMSST Valor do ICMS ST
// UFST UF para qual é devido o ICMS ST
// pBCop Percentual da BC operação própria
// vBCSTRet Valor da BC do ICMS Retido Anteriormente
// vICMSSTRet Valor do ICMS Retido Anteriormente
// motDesICMS Motivo da desoneração do ICMS
// vBCSTDest Valor da BC do ICMS ST da UF destino
// vICMSSTDest Valor do ICMS ST da UF destino
// pCredSN AlÃquota aplicável de cálculo do crédito (Simples Nacional)
// vCredICMSSN Valor crédito do ICMS que pode ser aproveitado nos termos do art. 23 da LC 123 (SIMPLES NACIONAL)
begin
with ACBrNFe1.NotasFiscais.Add.NFe do
begin
Ide.cNF := StrToInt(NumNFe); //Caso não seja preenchido será gerado um número aleatório pelo componente
// dados das tabelas DBFs.
NOSDAD01.Close;
NOSDAD01.SQL.Clear;
nosdad01.SQL.ADD('SELECT * FROM ' + QUOTEDSTR(RESULSQL + '\NOSDAD01.DBF'));
NOSDAD01.SQL.ADD(' WHERE CP01 = ' + QUOTEDSTR(STRZERO(StrToInt(NumNFe), 6)));
NOSDAD01.Open;
{ NOSDAD01.Locate('CP01', STRZERO(StrToInt(NumNFe), 6), [loCaseInsensitive, loPartialKey]);
NOSDAD01.Filter := 'CP01 = ' + QUOTEDSTR(STRZERO(StrToInt(NumNFe), 6));
nosdad01.Filtered := TRUE;}
NATNF01.SQL.CLEAR;
NATNF01.SQL.ADD('SELECT * FROM ' + QUOTEDSTR(RESULSQL + '\NATNFI01.DBF'));
NATNF01.SQL.Add(' WHERE CP01 = ' + QUOTEDSTR(nosdad01CP07.AsString));
NATNF01.Open;
//NATNF01.Locate('CP01', nosdad01CP07.AsString, [loCaseInsensitive, loPartialKey]);
Ide.natOp := NATNF01CP02.AsString;
{ NOSDAD01.Locate('CP01', STRZERO(StrToInt(NumNFe), 6), [loCaseInsensitive, loPartialKey]);
NOSDAD01.Filter := 'CP01 = ' + QUOTEDSTR(STRZERO(StrToInt(NumNFe), 6));
nosdad01.Filtered := TRUE;}
CONDPG01.Locate('CP01', nosdad01CP08.AsString, [loCaseInsensitive, loPartialKey]);
// Preenchimento do componente com os campos DBF das tabelas.
Ide.indPag := ipOutras;
if CONDPG01CP02.AsString = 'AV' then
Ide.indPag := ipVista;
if CONDPG01CP02.AsString = 'AP' then
Ide.indPag := ipPrazo;
Ide.modelo := 55;
Ide.serie := EMPRESASERIENFE.AsInteger;
Ide.nNF := StrToInt(NumNFe);
Ide.dEmi := nosdad01CP05.AsDateTime;
Ide.dSaiEnt := nosdad01CP06.AsDateTime;
Ide.hSaiEnt := nosdad01CP06.AsDateTime;
Ide.tpNF := tnSaida;
if ((COPY(NATNF01CP04.AsString, 1, 1) = '1') or (COPY(NATNF01CP04.AsString, 1, 1) = '2') or (COPY(NATNF01CP04.AsString, 1, 1) = '3')) then
Ide.tpNF := tnEntrada
else
Ide.tpNF := tnSaida;
Ide.tpEmis := teNormal;
if EMPRESAAMBIENTE.AsString = '1' then
Ide.tpAmb := taProducao
else
Ide.tpAmb := taHomologacao; //Lembre-se de trocar esta variável quando for para ambiente de produção
Ide.verProc := EMPRESAVERSAO.AsString; // '2.0.7'; //Versão do seu sistema
Ide.cUF := NotaUtil.UFtoCUF('RS');
Ide.cMunFG := StrToInt('4316907');
Ide.finNFe := fnNormal;
ide.procEmi := peContribuinteAplicativoFisco;