Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao validar um xml


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

Recommended Posts

bom dia estou com problemas para validar um XML no acbr, até ontem estava normal no clienrte, a aplicação gera o XML e importo ele para o componente, mas exibe falha ao validar os dados, pelo que percebi ele nao gera a tag icms corretamente, o CST do cliente é 090, no XML gerado pelo meu programa, gera normal a tag, mas quando leio o xml pelo componente, ao validar exibe o erro do xml, e pelo que percebi ele nao está gerando a tag corretamente. 

Debugando o comopnente, vi que ao ler o xml na funcao "StrToCSTICMS" tem duas vezes a cst '90'

Na Tag ICMS está incorreto, outra coisa que percebi foi que está alterando a chave das notas tb, 

no XML gerado pelo sistema a chave foi = "51170111404058000206550010000463031140463034"

mas quando gerou o XML pelo Componente alterou a chave para = "51170111404058000206550010000463031000000007"

Mesmo sertando para não gerar o XML quando importa o XML

Citar

          //CARREGA O XML NO COMPONENTE ACBR - RICARDO 09/12/2017 | 11:07
          FmMain.ACBrNFe.NotasFiscais.Clear;
          FmMain.ACBrNFe.NotasFiscais.LoadFromString(XMLNFe_NaoAssinado, False);
          FmMain.ACBrNFe.Enviar('1', False);
 

em anexo o xml gerado pelo sistema e o xml salvo pelo componente,

IMAGEM1.png

XML_GERADO_PELO_SISTEMA.xml

XML_SALDO_PELO_ACBR.xml

Editado por HRomano
faltou um anexo

Ricardo Hakme Romano

 

Link para o comentário
Compartilhar em outros sites

Boa tarde!

Eu tenho a mesma situação e visualizando a versão anterior de sexta está ok, e atual está com esta duplicidade e não valida o XML, segue os fontes de antes funcionando e os atuais para comparação.

Eu copiei as 2 functions anteriores e substitui na versão atual e validou.

 

----------- anterior valida o XML  ------------------------

// CST ICMS ********************************************************************
function CSTICMSToStr(const t: TpcnCSTIcms): string;
begin
  // ID -> N02  - Tributada integralmente
  // ID -> N03  - Tributada e com cobrança do ICMS por substituição tributária
  // ID -> N04  - Com redução de base de cálculo
  // ID -> N05  - Isenta ou não tributada e com cobrança do ICMS por substituição tributária
  // ID -> N06  - Isenta
  // ID -> N06  - Não tributada
  // ID -> N06  - Suspensão
  // ID -> N07  - Diferimento A exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF.
  // ID -> N08  - ICMS cobrado anteriormente por substituição
  // ID -> N09  - Com redução de base de cálculo e cobrança do ICMS por substituição tributária
  // ID -> N10  - ICMS pagto atribuído ao tomador ou ao terceiro previsto na legislação p/ ST
  // ID -> N10a - Operação interestadual para consumidor final com partilhado ICMS devido na operaçãoentre a UF de origem e a UF do destinatário ou a UF definida na legislação. (Ex. UF daconcessionária de entrega do veículos) (v2.0)
  // ID -> N10b - Grupo de informação do ICMS ST devido para a UF de destino,nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário. (v2.0)
  // ID -> N11  - ICMS devido para outras UF
  // ID -> N12  - Outros
  result := EnumeradoToStr(t, ['00' , '10' , '20' , '30' , '40' , '41' , '50' , '51' ,
                               '60' , '70' , '80' , '81', '90', '10', '90', '41', '90', 'SN', '60'],
                              [cst00, cst10, cst20, cst30, cst40, cst41, cst50, cst51,
                              cst60, cst70, cst80, cst81, cst90, cstPart10 , cstPart90 ,
                              cstRep41, cstICMSOutraUF, cstICMSSN, cstRep60]);
end;

function StrToCSTICMS(out ok: boolean; const s: string): TpcnCSTIcms;
begin
  result := StrToEnumerado(ok, s, ['00', '10', '20', '30', '40', '41', '50', '51', '60', '70', '80', '81', '90', '91', '92'],
    [cst00, cst10, cst20, cst30, cst40, cst41, cst50, cst51, cst60, cst70, cst80, cst81, cst90, cstICMSOutraUF, cstICMSSN]);
end;

------------------- nova que não valida o XML -----------------------

// CST ICMS ********************************************************************
function CSTICMSToStr(const t: TpcnCSTIcms): string;
begin
  // ID -> N02  - Tributada integralmente
  // ID -> N03  - Tributada e com cobrança do ICMS por substituição tributária
  // ID -> N04  - Com redução de base de cálculo
  // ID -> N05  - Isenta ou não tributada e com cobrança do ICMS por substituição tributária
  // ID -> N06  - Isenta
  // ID -> N06  - Não tributada
  // ID -> N06  - Suspensão
  // ID -> N07  - Diferimento A exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF.
  // ID -> N08  - ICMS cobrado anteriormente por substituição
  // ID -> N09  - Com redução de base de cálculo e cobrança do ICMS por substituição tributária
  // ID -> N10  - ICMS pagto atribuído ao tomador ou ao terceiro previsto na legislação p/ ST
  // ID -> N10a - Operação interestadual para consumidor final com partilhado ICMS devido na operaçãoentre a UF de origem e a UF do destinatário ou a UF definida na legislação. (Ex. UF daconcessionária de entrega do veículos) (v2.0)
  // ID -> N10b - Grupo de informação do ICMS ST devido para a UF de destino,nas operações interestaduais de produtos que tiveram retenção antecipada de ICMS por ST na UF do remetente. Repasse via Substituto Tributário. (v2.0)
  // ID -> N11  - ICMS devido para outras UF
  // ID -> N12  - Outros
  result := EnumeradoToStr(t, ['00' , '10' , '20' , '30' , '40' , '41' , '50' , '51' ,
                               '60' , '70' , '80' , '81', '90', '10', '90', '41', '90', 'SN', '60'],
                              [cst00, cst10, cst20, cst30, cst40, cst41, cst50, cst51,
                              cst60, cst70, cst80, cst81, cst90, cstPart10 , cstPart90 ,
                              cstRep41, cstICMSOutraUF, cstICMSSN, cstRep60]);
end;

function StrToCSTICMS(out ok: boolean; const s: string): TpcnCSTIcms;
begin
  result := StrToEnumerado(ok, s, ['00', '10', '20', '30', '40', '41', '50', '51', '60', '70', '80', '81', '90', '90', 'SN'],
    [cst00, cst10, cst20, cst30, cst40, cst41, cst50, cst51, cst60, cst70, cst80, cst81, cst90, cstICMSOutraUF, cstICMSSN]);
end;

 

Link para o comentário
Compartilhar em outros sites

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

The popup will be closed in 10 segundos...