Ir para conteúdo
  • Cadastre-se

dev botao
  • Este tópico foi criado há 4455 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Bom dia,

Estou tentando implementar em meu sistema a nota fiscal complementar e fui juntando uma dica aqui outra li e construi uma rotina para o envio.

Quando Gero a nfe ele da a mensagem de Duplicidade da nfe, como se a chave de acesso ja existisse la no sefaz.

Segue a minha rotina:

with DM.AcbrNFE1.NotasFiscais.Add.NFe do begin

infNFe.ID := DMX.IBNotaFiscalNumNota.Value;

Ide.finNFe := fnComplementar;

Ide.natOp := 'NF complementar';

Ide.nNF := StrToInt(DMX.IBNotaFiscalNumNota.Value);

Ide.cNF := StrToInt(DMX.IBNotaFiscalNumNota.Value);

Ide.modelo := 55;

Ide.serie := DMX.IBNotaFiscalSERIE.AsInteger;

Ide.dEmi := DMX.IBNotaFiscalEMISSAO.Value;

Ide.dSaiEnt := DMX.IBNotaFiscalDATASAIDA.Value;

ide.hSaiEnt := DMX.IBNotaFiscalHORA.Value;

if DMX.IBNotaFiscalTIPO.Value = 'S' then

Ide.tpNF := tnSaida else

Ide.tpNF := tnEntrada;

Ide.verProc := '1.0.0.0';

DM.IBCidades.Close;

DM.IBCidades.SQL.Clear;

DM.IBCidades.SQL.Add('Select CODIGO,CIDADE,ESTADO,CEP,CODCIDADE,CIDADE||' + QUOTEDSTR(' - ') + '||ESTADO AS CID from Cidades where Cidade=:Cidade and Estado=:Estado');

DM.IBCidades.ParamByName('cidade').Value:= DMX.TabEmpresaCidade.Value;

DM.IBCidades.ParamByName('Estado').Value:= DMX.TabEmpresaESTADO.Value;

DM.IBCidades.Open;

Ide.cUF := StrToInt(copy(DM.IBCidadesCODCIDADE.AsString,1,2));

Ide.cMunFG := DM.IBCidadesCODCIDADE.Value;

Emit.CNPJCPF := FMain.removechar(DMX.TabEmpresaCNPJ.Value);

Emit.IM := FMain.RemoveChar(DMX.TabEmpresaIM.Value);

Emit.CNAE := FMain.RemoveChar(DMX.TabEmpresaCNAE.Value);

Emit.IE := FMain.RemoveChar(DMX.TabEmpresaIE.Value);

Emit.xNome := DMX.TabEmpresaEMPRESA.Value;

Emit.xFant := DMX.TabEmpresaNOMEFANTASIA.Value;

Emit.EnderEmit.fone := FMain.RemoveChar(DMX.TabEmpresaFONE.Value);

Emit.EnderEmit.CEP := StrToInt(FMain.RemoveChar(DMX.TabEmpresaCEP.Value));

Emit.EnderEmit.xLgr := DMX.TabEmpresaENDERECO.Value;

Emit.EnderEmit.nro := DMX.TabEmpresaNUMERO.AsString;

Emit.EnderEmit.xCpl := '';

Emit.EnderEmit.xBairro := DMX.TabEmpresaBAIRRO.Value;

Emit.EnderEmit.cMun := DM.IBCidadesCODCIDADE.Value;

Emit.EnderEmit.xMun := DM.IBCidadesCIDADE.Value;

Emit.EnderEmit.UF := DM.IBCidadesESTADO.Value;

Emit.enderEmit.cPais := 1058;

Emit.enderEmit.xPais := 'BRASIL';

Emit.IEST := DMX.TabEmpresaIESubs.Value;

if DMX.TabEmpresaTIPOEMPRESA.Value = 0 then

Emit.CRT:= crtSimplesNacional;

if DMX.TabEmpresaTIPOEMPRESA.Value = 1 then

Emit.CRT:= crtRegimeNormal;

if DMX.TabEmpresaTIPOEMPRESA.Value = 2 then

Emit.CRT:= crtSimplesExcessoReceita;

DM.AcbrNFE1.DANFE.Site := DMX.TabEmpresaHome.Value;

DM.AcbrNFE1.DANFE.Email := DMX.TabEmpresaEMAIL.Value;

if StrTOInt(IniNFE.ReadString( 'Geral','Ambiente' ,'')) = 0 then begin

Dest.CNPJCPF := FMain.RemoveChar(DMX.IBNotaFiscalCNPJ.Value);

if Length(FMain.RemoveChar(DMX.IBNotaFiscalCNPJ.Value)) > 11 then

Dest.IE := DMX.IBNotaFiscalIE.Value;

end else begin // se for homologação

Dest.CNPJCPF:= '99999999000191';

Dest.IE:= '';

end;

Dest.EnderDest.CEP := StrToInt(FMain.RemoveChar(DMX.IBNotaFiscalCEP.Value));

Dest.EnderDest.xLgr := DMX.IBNotaFiscalENDERECO.Value;

if DMX.IBNotaFiscalNUMEROEND.AsString = '' then

Dest.EnderDest.nro := 'S/N' else

Dest.EnderDest.nro := DMX.IBNotaFiscalNUMEROEND.Value;

Dest.EnderDest.xCpl := '';

Dest.EnderDest.xBairro := DMX.IBNotaFiscalBAIRRO.Value;

if ExisteLetra(';', dmx.IBNotaFiscalEMAIL.Value) then

Dest.Email:= Copy(dmx.IBNotaFiscalEMAIL.Value, 1, pos(';',dmx.IBNotaFiscalEMAIL.Value) -1) else

Dest.Email := dmx.IBNotaFiscalEMAIL.Value;

DM.IBCidades.Close;

DM.IBCidades.SQL.Clear;

DM.IBCidades.SQL.Add('Select CODIGO,CIDADE,ESTADO,CEP,CODCIDADE,CIDADE||' + QUOTEDSTR(' - ') + '||ESTADO AS CID from Cidades where Cidade=:Cidade and Estado=:Estado');

DM.IBCidades.ParamByName('cidade').AsString:= DMX.IBNotaFiscalMUNICIPIO.Value;

DM.IBCidades.ParamByName('Estado').AsString:= DMX.IBNotaFiscalUF.Value;

DM.IBCidades.Open;

Dest.EnderDest.cMun := DM.IBCidadesCODCIDADE.Value;

Dest.EnderDest.xMun := DM.IBCidadesCIDADE.Value;

Dest.EnderDest.UF := DM.IBCidadesESTADO.Value;

Dest.EnderDest.Fone := DMX.IBNotaFiscalTELEFONE.Value;

if StrTOInt(IniNFE.ReadString( 'Geral','Ambiente' ,'')) = 0 then

Dest.xNome := DMX.IBNotaFiscalNOME.Value else

Dest.xNome := 'NF-E EMITIDA EM AMBIENTE DE HOMOLOGACAO – SEM VALOR FISCAL';

Dest.EnderDest.cPais := 1058;

Dest.EnderDest.xPais := 'BRASIL';

// aqui referencia a nfe

Ide.NFref.Add.refNFe:= dmx.IBNotaFiscalCHAVEACESSO.Value;

// aqui inicia a inserção do produto

with Det.Add do begin

infAdProd := '';

Prod.nItem := 1;

Prod.CFOP := DMX.IBNotaFiscalCPOP.Value;

Prod.cProd := 'CFOP' + DMX.IBNotaFiscalCPOP.Value;

Prod.xProd := 'NF Complementar';

Prod.qCom := 0;

Prod.uCom := 'UN';

Prod.vProd := 0;

Prod.vUnCom := 0;

Prod.qTrib := 0;

Prod.uTrib := 'UN';

Prod.vUnTrib := 0;

Prod.NCM := DMX.IBDetailFiscalNCM.Value;

Prod.vDesc := 0;

Prod.vSeg := 0;

Prod.vFrete := 0;

Prod.vOutro := 0;

Prod.IndTot := itSomaTotalNFE;

Prod.cEAN := '';

with Imposto do begin

with ICMS do begin

if DMX.TabEmpresaTIPOEMPRESA.Value = 0 then begin // se for simples nacional

if DMX.IBDetailFiscalCSOSN.Value = '' then

ICMS.CSOSN := csosnVazio;

if DMX.IBDetailFiscalCSOSN.Value = '101' then

icms.CSOSN := csosn101;

if DMX.IBDetailFiscalCSOSN.Value = '102' then

icms.CSOSN := csosn102;

if DMX.IBDetailFiscalCSOSN.Value = '103' then

icms.CSOSN := csosn103;

if DMX.IBDetailFiscalCSOSN.Value = '201' then

icms.CSOSN := csosn201;

if DMX.IBDetailFiscalCSOSN.Value = '202' then

icms.CSOSN := csosn202;

if DMX.IBDetailFiscalCSOSN.Value = '203' then

icms.CSOSN := csosn203;

if DMX.IBDetailFiscalCSOSN.Value = '300' then

icms.CSOSN := csosn300;

if DMX.IBDetailFiscalCSOSN.Value = '400' then

icms.CSOSN := csosn400;

if DMX.IBDetailFiscalCSOSN.Value = '500' then

icms.CSOSN := csosn500;

if DMX.IBDetailFiscalCSOSN.Value = '900' then

icms.CSOSN := csosn900;

end else begin

if (copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '00') or (copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '') then

cst:= cst00;

if copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '10' then

CST:= cst10;

if copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '20' then

CST:= cst20;

if copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '30' then

CST:= cst30;

if copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '40' then

CST:= cst40;

if copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '41' then

CST:= cst41;

if copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '50' then

CST:= cst50;

if copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '51' then

CST:= cst51;

if copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '60' then

CST:= cst60;

if copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '70' then

CST:= cst70;

if copy(DMX.IBDetailFiscalSITUACAO.Value,2,2) = '90' then

CST:= cst90;

end;

if copy(DMX.IBDetailFiscalSITUACAO.Value,1,1) = '0' then

ICMS.orig:= oeNacional else

if copy(DMX.IBDetailFiscalSITUACAO.Value,1,1) = '1' then

ICMS.orig:= oeEstrangeiraImportacaoDireta else

if copy(DMX.IBDetailFiscalSITUACAO.Value,1,1) = '2' then

icms.orig:= oeEstrangeiraAdquiridaBrasil;

ICMS.modBC := dbiValorOperacao;

ICMS.modBCST := dbisMargemValorAgregado;

ICMS.pICMSST:= 100;

if ValorSubs.Value > 0 then

ICMS.vICMSST:= ValorSubs.Value else

ICMS.vICMSST:= 0;

if ValorSubs.Value > 0 then

ICMS.vBCST := Base.Value else

ICMS.vBCST:= 0;

if VALORICMS.Value > 0 then

ICMS.vBC := Base.Value else

ICMS.vBC := 0;

if VALORICMS.Value > 0 then

ICMS.vICMS := VALORICMS.Value ELSE

ICMS.vICMS := 0;

ICMS.pICMS := 100;

end;

with IPI do begin

IPI.CST := ipi99;

if valoripi.Value > 0 then

IPI.vBC:= Base.Value else

IPI.vBC:= 0;

if valoripi.Value > 0 then

IPI.vIPI:= valoripi.Value else

IPI.vIPI:= 0;

IPI.pIPI:= 0;

IPI.clEnq:= '';

IPI.CNPJProd:= '';

IPI.cEnq:= '';

IPI.cEnq:= '999';

end; // fim do IPI

END; // end do imposto

END; // end do det.

InfAdic.infCpl:= 'Nota Fiscal Complementar emitida para correção de erro ocorrido na emissão da Nota Fiscal nº ' + dmx.IBNotaFiscalNUMNOTA.Value + ' datada em ' + dmx.IBNotaFiscalEMISSAO.AsString + ', onde o valor do ICMS /IPI foi/foram destacado(s) a menor do que o correto ' +

'Conforme dispõe art. 182 Inciso III e IV do RICMS Decreto nº 45.490/2000. ' +

'Conforme dispõe art. 333 Inciso XII do RIPI Decreto nº 4.544/2002.';

if VALORICMS.Value > 0 then begin

Total.ICMSTot.vBC := Base.Value;

Total.ICMSTot.vICMS := ValorICMS.Value;

end else begin

Total.ICMSTot.vBC := 0;

Total.ICMSTot.vICMS := 0;

end;

Total.ICMSTot.vNF := 0;

Total.ICMSTot.vProd := 0;

if VALORSUBS.Value > 0 then begin

Total.ICMSTot.vBCST:= Base.Value;

Total.ICMSTot.vST:= ValorSubs.Value;

end else begin

Total.ICMSTot.vBCST:= 0;

Total.ICMSTot.vST:= 0;

end;

Total.ICMSTot.vFrete:= 0;

Total.ICMSTot.vSeg:= 0;

Total.ICMSTot.vDesc:= 0;

if VALORIPI.Value > 0 Then

Total.ICMSTot.vIPI:= ValorIpi.Value else

Total.ICMSTot.vIPI:= 0;

Total.ICMSTot.vOutro:= 0;

Total.ISSQNtot.vServ := 0;

Total.ISSQNtot.vBC:= 0;

Total.ISSQNtot.vISS:= 0;

Total.ICMSTot.vPIS:= 0;

Total.ICMSTot.vCOFINS:= 0;

end;

DM.AcbrNFE1.Enviar(dmx.IBNotaFiscalLOTENF.Value);

Provavelmente estou fazendo uma ou varias coisas erradas...

Grato,

Postado

Outra coisa, dá uma estudada na unit pcnConversao, tem uns metodos que vão te ajudar a tirar esse monte de if do teu código qdo tem q tratar CST/CSOSN, como por exemplo a procedure StrToCSTICMS.

Postado

Chegou a consultar se a nota não existe mesmo? Não custa perguntar tbem se vc não tá usando o mesmo número da nota que vc quer complementar né?

Sim, a nfe existe.

Entao vou fazer a complementar, e uso os dados da nfe atual, ou tenho que fazer uma nova nfe com um novo numero de nota fiscal como se fosse uma nova nota fiscal?

Grato,

  • Moderadores
Postado

... ou tenho que fazer uma nova nfe com um novo numero de nota fiscal como se fosse uma nova nota fiscal?

O nome já diz "nota" complementar, então ela é uma nota (novo numero) que complementará a nota número xxxxxx que deverá estar referenciada nesta nota. E a informação que ela receberá será apenas o que complementa a outra ou seja o que a outra não teve e que deveria ter.


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

Postado

... ou tenho que fazer uma nova nfe com um novo numero de nota fiscal como se fosse uma nova nota fiscal?

O nome já diz "nota" complementar, então ela é uma nota (novo numero) que complementará a nota número xxxxxx que deverá estar referenciada nesta nota. E a informação que ela receberá será apenas o que complementa a outra ou seja o que a outra não teve e que deveria ter.

Ok, agora entendi,

Muito obrigado pela ajuda

Postado

... ou tenho que fazer uma nova nfe com um novo numero de nota fiscal como se fosse uma nova nota fiscal?

O nome já diz "nota" complementar, então ela é uma nota (novo numero) que complementará a nota número xxxxxx que deverá estar referenciada nesta nota. E a informação que ela receberá será apenas o que complementa a outra ou seja o que a outra não teve e que deveria ter.

Implementei para gerar uma nova NF, e fomos aos testes,

Quando gero uma diferença de ST ele retorna a seguinte mensagem:

Total de NF difere do Somatorio dos Valores compoe o Valor Total da NF.

Lembrando que o valor total da NF é 0,00.

Será que estou errando aonde...

Grato,

Postado

Engraçado,

Se eu faço essa correção com o valor até 1,00 passa, agora se a correção for maior do 1,00 da a mensagem anterior...

Não sei se tem alguma coisa haver nessas linhas...

ICMS.modBC := dbiValorOperacao;

ICMS.modBCST := dbisMargemValorAgregado;

Grato

  • Moderadores
Postado

Se for possível, anexe o XML.

A finalidade está correta?


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

  • Moderadores
Postado

Se estiver errado agradeço qualquer ajuda para entender melhor

Está correto.

Veja que a regra deve ser aplicada (GW16) Pág. 39 do Manual de Integração - v 5.00

Se NF-e de Saída (tpNF=1):

O total da nota deve ser:

(+) vProd (id:W07)

(-) vDesc (id:W10)

(+) vST (id:W06)

(+) vFrete (id:W08)

(+) vSeg (id:W09)

(+) vOutro (id:W15)

(+) vII (id:W11)

(+) vIPI (id:W12)

(+) vServ (id:W18)

Seu XML

0.00

0.00

1525.00

86.25 //(id:W06)

0.00

0.00

0.00

0.00

0.00

0.00

0.00

0.00

0.00

0.00 //Dos valores que são exigidos, vc tem apenas o vST (id:W06). Ele deve constar aqui.

E o total final para o fisco é considerado o Total da nota referenciada (211,97) + total da nota complementar (86,25) totalizando (298,22).


logoacbr.pngConheça o Portal do Projeto ACBr

Ajude o Projeto ACBr crescer - Assine o SAC ACBr
Assine um dos planos de longa duração do SAC ACBr, obtenha Descontos Especiais, Parcele no Cartão e ainda ganhe Brindes Exclusivos. Saiba mais aqui

Conheça o ACBrLib, o ACBr de forma nativa para qualquer linguagem de programação. Saiba mais aqui

 

 

 

 

  • Este tópico foi criado há 4455 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.