Git Product home page Git Product logo

Comments (8)

Gabriel-Di-Domenico avatar Gabriel-Di-Domenico commented on July 16, 2024 1

Eu consegui emitir CTE usando ServicoCTeRecepcao().CTeRecepcaoSincronoV4, segui exemplo do app.teste
Mas estou tendo problemas ao utilizar outras funções, como cancelamento, consulta protocolo e consulto status. Mas não deve ter relação com esta issue, vou estudar mais esse erro e talvez eu abra outra issue.

from dfe.net.

marcosgerene avatar marcosgerene commented on July 16, 2024

@Gabriel-Di-Domenico

Estou tendo o seguinte erro ao chamar o método EnviarAsync utilizando Zeus.Net.CTe na versão 2024.1.26.1413:
The 'versao' attribute is invalid - The value '4.00' is invalid according to its datatype 'http://www.portalfiscal.inf.br/cte:TVerCTe' - The Pattern constraint failed.

Que método é "EnviarAsync()" referencia no código, por favor.

Ao analisar o código eu estranhei o fato do método validaSchema de enviCte, estar utilizando o schema enviCTe_v3.00.xsd mesmo na versão 4.0.

Também achei estranho estar sendo feita uma consulta onde chama o validaSchema de consReciCTe já que o schema consReciCTe também não existe na versão 4.0

Uso o CTe 4.0 a tempos aqui em produção, por favor refencia no código aqui onde você notou as inconsistências

from dfe.net.

Gabriel-Di-Domenico avatar Gabriel-Di-Domenico commented on July 16, 2024

namespace CTe.Servicos.EnviarCte
{
public class ServicoEnviarCte
{
public RetornoEnviarCte Enviar(int lote, Classes.CTe cte, ConfiguracaoServico configuracaoServico = null)
{
var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia;

        ServicoCTeRecepcao servicoRecepcao = new ServicoCTeRecepcao();

        retEnviCte retEnviCte = servicoRecepcao.CTeRecepcao(lote, new List<Classes.CTe> {cte}, configServico);

        if (retEnviCte.cStat != 103)
        {
            return new RetornoEnviarCte(retEnviCte, null, null);
        }

        ConsultaReciboServico servicoConsultaRecibo = new ConsultaReciboServico(retEnviCte.infRec.nRec);

        retConsReciCTe retConsReciCTe = servicoConsultaRecibo.Consultar(configServico);


        cteProc cteProc = null;
        if (retConsReciCTe.cStat == 104)
        {

            if (retConsReciCTe.protCTe[0].infProt.cStat != 100)
            {
                return new RetornoEnviarCte(retEnviCte, retConsReciCTe, null);
            }

            cteProc = new cteProc
            {
                CTe = cte,
                versao = configServico.VersaoLayout,
                protCTe = retConsReciCTe.protCTe[0]
            };
        }

        cteProc.SalvarXmlEmDisco(configServico);

        return new RetornoEnviarCte(retEnviCte, retConsReciCTe, cteProc);
    }

    public async Task<RetornoEnviarCte> EnviarAsync(int lote, Classes.CTe cte, ConfiguracaoServico configuracaoServico = null)
    {
        var configServico = configuracaoServico ?? ConfiguracaoServico.Instancia;
        ServicoCTeRecepcao servicoRecepcao = new ServicoCTeRecepcao();

        retEnviCte retEnviCte = await servicoRecepcao.CTeRecepcaoAsync(lote, new List<Classes.CTe> { cte }, configServico);

        if (retEnviCte.cStat != 103)
        {
            return new RetornoEnviarCte(retEnviCte, null, null);
        }

        ConsultaReciboServico servicoConsultaRecibo = new ConsultaReciboServico(retEnviCte.infRec.nRec);

        retConsReciCTe retConsReciCTe = await servicoConsultaRecibo.ConsultarAsync(configServico);


        cteProc cteProc = null;
        if (retConsReciCTe.cStat == 104)
        {

            if (retConsReciCTe.protCTe[0].infProt.cStat != 100)
            {
                return new RetornoEnviarCte(retEnviCte, retConsReciCTe, null);
            }

            cteProc = new cteProc
            {
                CTe = cte,
                versao = configServico.VersaoLayout,
                protCTe = retConsReciCTe.protCTe[0]
            };
        }

        cteProc.SalvarXmlEmDisco(configServico);

        return new RetornoEnviarCte(retEnviCte, retConsReciCTe, cteProc);
    }
}

}

from dfe.net.

Gabriel-Di-Domenico avatar Gabriel-Di-Domenico commented on July 16, 2024

Eu estou tentando chamar diretamente ServicoCTeRecepcao().CTeRecepcaoSincronoV4, ao invés de usar este enviarAsync

from dfe.net.

danilobreda avatar danilobreda commented on July 16, 2024

Esta parecendo erro de schema antigo... que valida se versão ta 3.0! tenta desabilitar a validação de esquema para ver se funciona, lembrando que os schemas não estão adicionados no nuget ou codigo fonte do zeus.

from dfe.net.

Gabriel-Di-Domenico avatar Gabriel-Di-Domenico commented on July 16, 2024

Então Danilo, dentro da chamada do servicoRecepcao.CTeRecepcaoAsync ele chamada enviCte.ValidaSchema, e ali dentro ele usa um schema da 3.0 que não existe na 4.0, acredito que esse seja o motivo do meu erro, de fato se eu colocar isValidaSchema pra false, deve passar dai, mas eu reparei que é feita uma chamada pra servicoConsultaRecibo.ConsultarAsync, onde dentro dela é feito consReciCTe.ValidarSchema, e dentro dessa validação o switch case me jogaria pra uma exception, e essse cara não está em um if de isValidaSchema

public async Task CTeRecepcaoAsync(int lote, List cteEletronicosList, ConfiguracaoServico configuracaoServico = null)
{
var enviCte = PreparaEnvioCTe(lote, cteEletronicosList, configuracaoServico);

        var webService = WsdlFactory.CriaWsdlCteRecepcao(configuracaoServico);

        OnAntesDeEnviar(enviCte);

        var retornoXml = await webService.cteRecepcaoLoteAsync(enviCte.CriaRequestWs(configuracaoServico));

        var retorno = retEnviCte.LoadXml(retornoXml.OuterXml, enviCte);
        retorno.SalvarXmlEmDisco(configuracaoServico);

        return retorno;
    }
     private static enviCTe PreparaEnvioCTe(int lote, List<CTeEletronico> cteEletronicosList, ConfiguracaoServico configuracaoServico = null)
    {
        var instanciaConfiguracao = configuracaoServico ?? ConfiguracaoServico.Instancia;

        var enviCte = ClassesFactory.CriaEnviCTe(lote, cteEletronicosList, instanciaConfiguracao);

        if (instanciaConfiguracao.tpAmb == TipoAmbiente.Homologacao)
        {
            foreach (var cte in enviCte.CTe)
            {
                const string razaoSocial = "CT-E EMITIDO EM AMBIENTE DE HOMOLOGACAO - SEM VALOR FISCAL";

                cte.infCte.rem.xNome = razaoSocial;
                cte.infCte.dest.xNome = razaoSocial;
            }
        }


        foreach (var cte in enviCte.CTe)
        {
            cte.infCte.ide.tpEmis = instanciaConfiguracao.TipoEmissao;
            cte.Assina(instanciaConfiguracao);
            cte.infCTeSupl = cte.QrCode(instanciaConfiguracao.X509Certificate2, Encoding.UTF8, instanciaConfiguracao.IsAdicionaQrCode, UrlHelper.ObterUrlQrCode(instanciaConfiguracao));

            if (configuracaoServico.IsValidaSchemas)
                cte.ValidaSchema(instanciaConfiguracao);

            cte.SalvarXmlEmDisco(instanciaConfiguracao);
        }

        if (configuracaoServico.IsValidaSchemas)
            enviCte.ValidaSchema(instanciaConfiguracao);

        enviCte.SalvarXmlEmDisco(instanciaConfiguracao);
        return enviCte;
    }

from dfe.net.

Gabriel-Di-Domenico avatar Gabriel-Di-Domenico commented on July 16, 2024

Eu utilizei "ServicoCTeRecepcao().CTeRecepcaoSincronoV4" diretamente e parece estar funcionando. Pelo que entendi agora não é mais assíncrona a chamada para o sefaz, então talvez o método "ServicoEnviarCte().EnviarAsync" perdeu sua utilidade.

from dfe.net.

marcosgerene avatar marcosgerene commented on July 16, 2024

@Gabriel-Di-Domenico

Sim, o CTe não permite mais envio assincrono.

Eu não tive tempo de parar e ver seu caso ainda, talvez consiga no final de semana, mas então vou para alguns fatos:

  1. CT-e só síncrono**.
  2. Uso em produção aqui.

from dfe.net.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.