Ir para conteúdo
  • Cadastre-se

dev botao

Cte - Ajuste Na Substituição


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

Recommended Posts

Ao enviar um CTe de substituição é reportado o seguinte erro:

 

TAG: ID:#352/refCte(Chave do CTe) - Nenhum valor informado.
'' violates pattern constraint of '[0-9]{44}'.

 

Este mesmo erro é reportado aqui no forum no link:

 

Trecho XML:

<infCteSub>

  <chCte>23130900435179000100570010000173451153356992</chCte>

  <tomaICMS>

     <refCte>23130900435179000100570010000173451153356992</refCte>

  </tomaICMS>

</infCteSub>

 

Notem quem o chCte e tomaICMS estão no mesmo nível, e refCte dento de tormaICMS.

No código abaixo depois de extrair o tomaICMS, lê-se a tag refNFe e em seguida extrai a tag refNF, porém, como mostra o exemplo acima não há refNF. (Maiores informações no manual)

Quando lê a refCte nada é encontrado pois está no contexto da refNF.

 

Trecho do arquivo pcteCTeR_V104.inc iniciado na linha 909

    if Leitor.rExtrai(2, 'infCteSub') <> '' then
    begin
     CTe.infCTeSub.chCte := Leitor.rCampo(tcStr, 'chCte');
     if Leitor.rExtrai(3, 'tomaICMS') <> '' then
      begin
       CTe.infCTeSub.tomaICMS.refNFe := Leitor.rCampo(tcStr, 'refNFe');
       if Leitor.rExtrai(4, 'refNF') <> '' then
        begin
         CTe.infCTeSub.tomaICMS.refNF.CNPJ     := Leitor.rCampo(tcStr, 'CNPJ');
         CTe.infCTeSub.tomaICMS.refNF.modelo   := Leitor.rCampo(tcStr, 'mod');
         CTe.infCTeSub.tomaICMS.refNF.serie    := Leitor.rCampo(tcInt, 'serie');
         CTe.infCTeSub.tomaICMS.refNF.subserie := Leitor.rCampo(tcInt, 'subserie');
         CTe.infCTeSub.tomaICMS.refNF.nro      := Leitor.rCampo(tcInt, 'nro');
         CTe.infCTeSub.tomaICMS.refNF.valor    := Leitor.rCampo(tcDe2, 'valor');
         CTe.infCTeSub.tomaICMS.refNF.dEmi     := Leitor.rCampo(tcDat, 'dEmi');
        end;
       CTe.infCTeSub.tomaICMS.refCte := Leitor.rCampo(tcStr, 'refCte');
      end;
     if Leitor.rExtrai(3, 'tomaNaoICMS') <> '' then
      begin
       CTe.infCTeSub.tomaNaoICMS.refCteAnu := Leitor.rCampo(tcStr, 'refCteAnu');
      end;

 

    end;
 

Solução:

    if Leitor.rExtrai(2, 'infCteSub') <> '' then
    begin
     CTe.infCTeSub.chCte := Leitor.rCampo(tcStr, 'chCte');
     if Leitor.rExtrai(3, 'tomaICMS') <> '' then
      begin
       CTe.infCTeSub.tomaICMS.refCte := Leitor.rCampo(tcStr, 'refCte');
       CTe.infCTeSub.tomaICMS.refNFe := Leitor.rCampo(tcStr, 'refNFe');
       if Leitor.rExtrai(4, 'refNF') <> '' then
        begin
         CTe.infCTeSub.tomaICMS.refNF.CNPJ     := Leitor.rCampo(tcStr, 'CNPJ');
         CTe.infCTeSub.tomaICMS.refNF.modelo   := Leitor.rCampo(tcStr, 'mod');
         CTe.infCTeSub.tomaICMS.refNF.serie    := Leitor.rCampo(tcInt, 'serie');
         CTe.infCTeSub.tomaICMS.refNF.subserie := Leitor.rCampo(tcInt, 'subserie');
         CTe.infCTeSub.tomaICMS.refNF.nro      := Leitor.rCampo(tcInt, 'nro');
         CTe.infCTeSub.tomaICMS.refNF.valor    := Leitor.rCampo(tcDe2, 'valor');
         CTe.infCTeSub.tomaICMS.refNF.dEmi     := Leitor.rCampo(tcDat, 'dEmi');
        end;
      end;
     if Leitor.rExtrai(3, 'tomaNaoICMS') <> '' then
      begin
       CTe.infCTeSub.tomaNaoICMS.refCteAnu := Leitor.rCampo(tcStr, 'refCteAnu');
      end;
    end;

 

Fiz vários testes e agora funciona perfeitamente.

Gostaria de solicitar a inclusão no fonte oficial do projeto.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Marcio,

 

Muito obrigado, solução adotada e já disponibilizada.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

  • 3 meses depois ...

Ítalo, boa tarde.

1º Quais os dados devo informar nas tags de Cte de substituição. Os mesmo que informo nas tags quanto o CTE e normal ?

2º Quando existe varias NFS, como informa para CTe de substituição ?

 

// NORMAL

Rem.InfNF.Add do

                      begin

                          // ***  Nota Fiscal ***

                          nRoma := NotaFiscal.FieldByName( 'NFC_132_NR_ROMANEIO'       ).AsString;

                          nPed  := NotaFiscal.FieldByName( 'NFC_133_NR_PEDIDO'         ).AsString;

                          .............

end

 

// SUBSTITUIÇÃO //

   if Ide.tpCTe = tcSubstituto then

                      begin

                         with InfCTeSub do

                         begin

                         duvida quais os dados deve informa abaixo

                            // Dados da Nota Fiscal Comum (papel) emitida pelo Tomador do Serviço

                            infCTeSub.tomaICMS.refNF.CNPJ     := NFCNPJ;

                            infCTeSub.tomaICMS.refNF.modelo   := NFMod;

                            infCTeSub.tomaICMS.refNF.serie    := NFSerie;

                            infCTeSub.tomaICMS.refNF.subserie := NFSubSerie;

                            infCTeSub.tomaICMS.refNF.nro      := NFNumero;

                             infCTeSub.tomaICMS.refNF.valor   := NFValor;  g

                            infCTeSub.tomaICMS.refNF.dEmi     := NFEmissao;

                         end;

                      end;

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde ALA,

 

O melhor ponto de partida é o Manual do CT-e.

 

Existem situações quando o tomador é contribuinte e quando não é.

 

É preciso estudar com muita atenção a estrutura do XML e montar a rotina prevendo as diversas situações.

 

Outra coisa no Manual do CT-e você tem a informação se um determinado campo é obrigatório ou não.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Italo, obrigado. Mas não estou conseguindo incluir vairas notas quando o ct-e e substitutio

 

                         with InfCTeSub do
                         begin
                            // Dados da Nota Fiscal Comum (papel) emitida pelo Tomador do Serviço
                            infCTeSub.tomaICMS.refNF.CNPJ     := NFCNPJ;
                            infCTeSub.tomaICMS.refNF.modelo   := NFMod;
                            infCTeSub.tomaICMS.refNF.serie    := NFSerie;
                            infCTeSub.tomaICMS.refNF.subserie := NFSubSerie;
                            infCTeSub.tomaICMS.refNF.nro      := NFNumero;
                             infCTeSub.tomaICMS.refNF.valor   := NFValor;  g
                            infCTeSub.tomaICMS.refNF.dEmi     := NFEmissao;
                         end;
                      end;

Link para o comentário
Compartilhar em outros sites

  • Consultores

Boa tarde ALA,

 

Favor consultar o manual.

 

Note que tanto a versão 1.04 quanto a 2.00 só é permitido informar apenas uma nota quando se trata de CT-e substituido.

 

Estou me referindo ao documento emitido pelo tomador quando este é contribuinte do ICMS.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

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