Ir para conteúdo
  • Cadastre-se

dev botao

Dificuldades Para Corrigir O Layouttxt Para Nfe 3.10


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

Recommended Posts

Colegas,

 

Percebi que a exportação do layout TXT do PCN para NFe 3.10 não está funcionando corretamente, então decidi tentar corrigir o problema. Esbarrei na seguinte dificuldade:

 

As chaves O10 e O11 são excludentes. Uma ou a outra. No entanto, como ambas são classificadas como O07, ambas são geradas quando da geração das tags do IPI.

    LoadLayout('<O07>   O07|CST¨|VIPI¨');
    LoadLayout('<O07>   O10|VBC¨|PIPI¨|VIPI¨');
    LoadLayout('<O07>   O11|QUnid¨|VUnid¨|VIPI¨');

Como a tag O07 também tem que ser gerada, a solução que encontrei foi duplicar a chave O07, uma na categoria )10 e outra na O11 (com as devidas alterações no pcnGerador). Ficou assim:

    LoadLayout('<O10>   O07|CST¨|VIPI¨');
    LoadLayout('<O10>   O10|VBC¨|PIPI¨|VIPI¨');
    LoadLayout('<O11>   O07|CST¨|VIPI¨');
    LoadLayout('<O11>   O11|QUnid¨|VUnid¨|VIPI¨');

Minha dúvida é: Tem alguma maneira melhor de fazer?

 

Ainda estou trabalhando nessa correção e assim que tiver algo pronto e testado eu anexo aqui no fórum para avaliação.

 

PS: Sou só eu ou a rotina de exportação do TXT é muito mais complicada do que o necessário? rs. Lendo o código, fico com a impressão de que a ideia era ter a geração do TXT e do XML na mesma base de código. Mas talvez isso traga mais complicações do que vantagens.

 

Abraços,

Gabriel.

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

Eu estava com o mesmo problema que você Gabriel, efetuei essa correção e funcionou. Obrigado.  :mrgreen:

 

Arquivo: pcnNfeW

procedure TNFeW.GerarDetImpostoIPI(const i: Integer);
var
  CST00495099: Boolean;
begin

  // variavel CST00495099 usada para Ignorar Tag <IPI>
  // se GerarTagIPIparaNaoTributado = False e CST00495099 = False

  CST00495099 := (nfe.Det[i].Imposto.IPI.CST in [ipi00, ipi49, ipi50, ipi99]);

  if (not FOpcoes.FGerarTagIPIparaNaoTributado) and (not CST00495099) then
    exit;

  //se valores padrão de quando não foi preenchido a TAG IPI
  if ((nfe.Det[i].Imposto.IPI.cEnq  = '') and
      (nfe.Det[i].Imposto.IPI.CST   = ipi00) and
      (nfe.Det[i].Imposto.IPI.vBC   = 0) and
      (nfe.Det[i].Imposto.IPI.qUnid = 0) and
      (nfe.Det[i].Imposto.IPI.vUnid = 0) and
      (nfe.Det[i].Imposto.IPI.pIPI  = 0) and
      (nfe.Det[i].Imposto.IPI.vIPI  = 0)) then
    EXIT; //não deve preencher a TAG

  Gerador.wGrupo('IPI', 'O01');
  Gerador.wCampo(tcStr, 'O02', 'clEnq   ', 01, 05, 0, nfe.Det[i].Imposto.IPI.clEnq, DSC_CLENQ);
  Gerador.wCampo(tcStr, 'O03', 'CNPJProd', 14, 14, 0, nfe.Det[i].Imposto.IPI.CNPJProd, DSC_CNPJPROD);
  Gerador.wCampo(tcStr, 'O04', 'cSelo   ', 01, 60, 0, nfe.Det[i].Imposto.IPI.cSelo, DSC_CSELO);
  Gerador.wCampo(tcInt, 'O05', 'qSelo   ', 01, 12, 0, nfe.Det[i].Imposto.IPI.qSelo, DSC_QSELO);
  if nfe.Det[i].Imposto.IPI.cEnq = '' then
    nfe.Det[i].Imposto.IPI.cEnq := '999';
  Gerador.wCampo(tcStr, 'O06', 'cEnq    ', 03, 03, 1, nfe.Det[i].Imposto.IPI.cEnq, DSC_CENQ);
  if CST00495099 then
  begin

    if (nfe.Det[i].Imposto.IPI.vBC + nfe.Det[i].Imposto.IPI.pIPI > 0) and (nfe.Det[i].Imposto.IPI.qUnid + nfe.Det[i].Imposto.IPI.vUnid > 0) then
      Gerador.wAlerta('O07', 'IPITrib', DSC_IPITrib, 'As TAG <vBC> e <pIPI> não podem ser informadas em conjunto com as TAG <qUnid> e <vUnid>');

    (*
      Leandro de Paula Caires - 10/03/2015
      As linhas "Gerador.wGrupo('IPITrib', 'O07');" do if foram alteradas, pois
      os itens O10 e O11 são excludentes.
    *)
    if (nfe.Det[i].Imposto.IPI.qUnid + nfe.Det[i].Imposto.IPI.vUnid > 0) then
    begin
      Gerador.wGrupo('IPITrib', 'O11'); //Leandro - alterado de O07 para O11
      Gerador.wCampo(tcStr, 'O09', 'CST     ', 02, 02, 1, CSTIPITOStr(nfe.Det[i].Imposto.IPI.CST), DSC_CST);
      Gerador.wCampo(tcDe4, 'O11', 'qUnid   ', 01, 16, 1, nfe.Det[i].Imposto.IPI.qUnid, DSC_QUNID);
      Gerador.wCampo(tcDe4, 'O12', 'vUnid   ', 01, 15, 1, nfe.Det[i].Imposto.IPI.vUnid, DSC_VUNID);
      Gerador.wCampo(tcDe2, 'O14', 'vIPI    ', 01, 15, 1, nfe.Det[i].Imposto.IPI.vIPI, DSC_VIPI);
      Gerador.wGrupo('/IPITrib');
    end
    else
    begin
      Gerador.wGrupo('IPITrib', 'O10'); //Leandro - alterado de O07 para O10
      Gerador.wCampo(tcStr, 'O09', 'CST     ', 02, 02, 1, CSTIPITOStr(nfe.Det[i].Imposto.IPI.CST), DSC_CST);
      Gerador.wCampo(tcDe2, 'O10', 'vBC     ', 01, 15, 1, nfe.Det[i].Imposto.IPI.vBC, DSC_VBC);
      Gerador.wCampo(IIf(Usar_tcDe4,tcDe4,tcDe2), 'O13', 'pIPI    ', 01, IIf(Usar_tcDe4,06,05), 1, nfe.Det[i].Imposto.IPI.pIPI, DSC_PIPI);
      Gerador.wCampo(tcDe2, 'O14', 'vIPI    ', 01, 15, 1, nfe.Det[i].Imposto.IPI.vIPI, DSC_VIPI);
      Gerador.wGrupo('/IPITrib');
    end;
  end
  else (* Quando CST/IPI for 01,02,03,04,51,52,53,54 ou 55 *)
  begin
    Gerador.wGrupo('IPINT', 'O08');
    Gerador.wCampo(tcStr, 'O09', 'CST     ', 02, 02, 1, CSTIPITOStr(nfe.Det[i].Imposto.IPI.CST), DSC_CST);
    Gerador.wGrupo('/IPINT');
  end;
  Gerador.wGrupo('/IPI');
end;

Arquivo: pcnLayoutTXT

 

Troquei

LoadLayout('<O07>   O07|CST¨|VIPI¨');
LoadLayout('<O07>   O10|VBC¨|PIPI¨|VIPI¨');
LoadLayout('<O07>   O11|QUnid¨|VUnid¨|VIPI¨');

por

LoadLayout('<O10>   O07|CST¨|VIPI¨');
LoadLayout('<O10>   O10|VBC¨|PIPI¨|VIPI¨');
LoadLayout('<O11>   O07|CST¨|VIPI¨');
LoadLayout('<O11>   O11|QUnid¨|VUnid¨|VIPI¨');

Há um outro problema também, porém este erro esta presente no manual de layout txt 3.10.

No manual e no ACBr, especificamente no campo x03 (Dados do Transportador) está assim:

X03|xNome|IE|xEnder|xMun|UF|

Porém o emissor do governo recusa e aceita somente se invertermos os campos xMun e UF assim:

X03|xNome|IE|xEnder|UF|xMun|

Vou fazer mais alguns testes aqui e posto se achar mais alguma coisa

 

At+

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 3338 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.