Ir para conteúdo
  • Cadastre-se

Renan Garcia de Oliveira

Membros
  • Total de ítens

    58
  • Registro em

  • Última visita

Posts postados por Renan Garcia de Oliveira

  1. Boa tarde,

     

    Gostaria de confirmar uma informação sobre o parâmetro abaixo, que está no arquivo ACBrNFeServicos.ini:

    URL-ConsultaNFCe_2.00=http://www.sefaz.go.gov.br/nfce/consulta

     

    Quando eu utilizo este valor que vem por padrão nos fontes do ACBr e tento enviar uma NFC-e com QRCode na versão 2.0 recebo o seguinte retorno:

    Endereço do site da UF da Consulta por chave de acesso diverge do previsto

     

    Eu consigo autorizar a NFC-e se colocar o mesmo endereço que está no parâmetro da versão 1.0 do QRCode:

    URL-ConsultaNFCe_1.00=http://www.nfce.go.gov.br/post/ver/214413/consulta-nfc-e-homologacao

     

    Essa URL da  versão 2.0 vai passar a ser oficial a partir do dia 1 de Outubro, ou está errada mesmo? Porque jogando a URL da 2.0 no navegador sempre sou redirecionado para a URL da 1.0.

  2. Estou desenvolvendo um projeto e esbarrei em um problema em que preciso ficar copiando e colando o mesmo código em todos os métodos de algumas classes, mas não consegui resolver esse problema com o que conheço em POO. O que ocorre é o seguinte: 

    Eu tenho neste projeto as minhas regras de negócio; para cada model, eu tenho uma regra de negócio (PessoaModel -> PessoaRN, EndereçoModel -> EndereçoRN, etc); dentro dessas classes "RN" eu recebo um Model da View, valido ele, e então executo a função em questão (PessoaRN.Inserir, PessoaRN.Editar, etc); cada vez que uma View executa um dos métodos das Regras de Negócio eu inicio uma transação no banco de dados, faço todo a validação e processamento do método, e no final se tudo deu certo, dou um commit, senão um rollback no banco de dados; fica no final com essa estrutura:

    function TRegraDeNegocio.Inserir(pModel: TModel):Boolean;
    begin
    	DoIniciaTransacaoComBancoDeDados;
    	
    	try
    		//
    		// Aqui processa o código da função de fato
    		//
    
    		DoCommitTransacao;
    	except
    		on E: Exception do
    		begin
    			DoRollbackTransacao;
    			raise Exception.Create(E.Message);
    		end;
    	end;
    end;

    Então resumindo: em todos os métodos de todas as regras de negócio eu teria que ficar copiando e colando todo o código acima com a exceção da parte comentada, porque é ali que entra o código de fato do método em si.

    Não consegui resolver com herança, pois tem código comum no início e no final. 

    Existe algum outro detalhe na POO que resolveria essa questão?

  3. 16 horas atrás, Italo Jurisato Junior disse:

    Boa tarde Renan,

    Muito obrigado pela colaboração, fiz alguns ajustes e enviei para o repositório.

    Favor atualizar todos os fontes de todas as pastas.

    Bom dia Italo.

    Após sua atualização precisei alterar novamente a unit em anexo.

    Xml esta validando novamente.

    Mas o erro http:500 persiste. Poderia me dar uma ajuda nesse caso?

    pnfsNFSeW_ABRASFv2.pas

  4. Bom dia.

    o municipio de Itumbiara-GO utilizava o provedor prodata, mas agora usa o padrao de uma empresa de Goiania chamada SIGEP,

    fiz as alterações no código para atender e o XML esta validando com sucesso no site deles(em anexo), mas ao enviar  insiste em dar erro http:500

    Estou anexando o xml, os arquivos .ini cidades alterado e o arquivo do provedor criado para transmissão

    Endereços: http://itumbiara.bsit-br.com.br/integracao/services

    7-ger-nfse.xml

    Cidades.ini

    Sigep.ini

  5. Em 28/04/2017 at 17:48, EMBarbosa disse:

    EDIT: Ops... O Daniel deu uma solução enquanto eu escrevia.

    Então a inicialização da variável deveria ser logo no início do método, caso contrário, poderia estar lendo algo residual de um envio anterior quando falhar por ter zero ou mais de 50 notas.

     

    Eu não tinha atentando para isso mesmo, fiz a modificação...

     

    Em 28/04/2017 at 17:47, Daniel Simoes disse:

    Use o evento "QuandoFecharDocumento", e faça as suas validações...

    Mas neste caso, dentro do QuandoFecharDocumento eu poderia então executar os comandos abaixo?  

    ACBrNFe.NotasFiscais.Validar;
    ACBrNFe.NotasFiscais.Assinar;

     

    Neste caso realmente ficaria mais fácil fazer a validação e eu não precisaria ficar modificando as classes do ACBr sempre que atualizá-lo.

  6. Obrigado pela resposta, mas este caso ainda não resolve porque eu trabalho com o componente ACBrECFVirtualNFCe, então não executo a Validação e Assinatura. Mas consegui resolver por aqui e vou deixar uma sugestão de código caso o ACBr se interesse. 

    Na unit ACBrNFe, na declaração da classe TACBrNFe adicionei a seguinte variável ao escopo private

    FTentouEnviar: Boolean;

    Em seguida adicionei a propertie abaixo ao escopo public

    property TentouEnviar: Boolean read FTentouEnviar;

    Inicializei a propriedade dentro do Create desta classe

    FTentouEnviar := False;

    E então no método "Enviar(ALote: String; Imprimir: Boolean; Sincrono: Boolean): Boolean;" inicializei a propriedade como False logo após as duas primeiras validações e antes do "NotasFiscais.Assinar;", após o "NotasFiscais.Validar;" alterei o valor da proipriedade para True, ficando o código da seguinte forma:

      if NotasFiscais.Count <= 0 then
        GerarException(ACBrStr('ERRO: Nenhuma NF-e adicionada ao Lote'));
    
      if NotasFiscais.Count > 50 then
        GerarException(ACBrStr('ERRO: Conjunto de NF-e transmitidas (máximo de 50 NF-e)' +
          ' excedido. Quantidade atual: ' + IntToStr(NotasFiscais.Count)));
    
      FTentouEnviar := False;
    
      NotasFiscais.Assinar;
      NotasFiscais.Validar;
    
      {
        Uma vez que foi Assinado e Validado com sucesso, seta-se o TentouEnviar como True,
        pois daqui em diante qualquer exception disparada será dentro ou após a tentativa de
        envio da NF-e
      }
      FTentouEnviar := True;
    
      Result := WebServices.Envia(ALote, Sincrono);

    Dessa forma, quando ocorre alguma exception dentro desse método, e o TentouEnviar estiver True, eu tenho certeza que as validações e assinaturas das notas ocorreram com sucesso. Se o "ACBrNFe.WebServices.Enviar.cStat" da nota fiscal foi igual a zero e o "ACBrNFe.WebServices.Enviar.Msg" foi igual a vazio, e o método tentou enviar, então ocorreu algum erro na comunicação com o WebService e eu posso presumir com mais segurança que o erro é de conexão e então começar a fazer todo o tratamento necessário pra realizar uma venda em contingência.

    Isso se fez necessário porque quando ocorre um erro dentro do "NotasFiscais.Validar" ainda não houve nenhuma tentativa de envio e o "ACBrNFe.WebServices.Enviar.cStat" anda está igual a zero e o "ACBrNFe.WebServices.Enviar.Msg" também ainda está vazio.

     

    A classe com as modificações segue em anexo.

    ACBrNFe.pas

  7. Boa tarde,

     

    Quando envio uma NFC-e e ocorre um erro eu faço o seguinte tratamento no retorno para saber se houve erro de conexão:

    if (((Pos('12007 - ', E.Message) > 0) or
              (Pos('12002 - ', E.Message) > 0) or
              (Pos('12029 - ', E.Message) > 0) or
              (Pos('ERRO NAO CATALOGADO', E.Message.ToUpper) > 0) or
              (Pos('SERVICO PARALISADO', E.Message.ToUpper) > 0)) or
              ((ECF.ACBrNFe.WebServices.Enviar.Msg = '') and (ECF.ACBrNFe.WebServices.Enviar.cStat = 0))) then

    Mas estou com a seguinte situação: realizo uma venda de um produto de balança com uma quantidade com 4 casas decimais e ao finalizar ocorre o erro de total dos itens diferente do total pago, o problema é que quando executo o FecharCupom do NFC-e e ocorre este erro o "WebServices.Enviar.Msg" vem igual a vazio e o cStat igual a zero e nesta minha rotina este erro acaba sendo reconhecido como erro de conexão, porém ainda não houve tentativa de envio.

    Existe algum flag no ACBr para eu conseguir identificar que houve erro na validação de schema, pois nesse caso a nota nem chegou a ser enviada então eu não posso validar o retorno do webservice.

  8. Boa tarde, 

     

    Segue o passo a passo de como configurei o demo:

    Configurações -> Certificado
        - SSLLib = libOpenSSL
        - Caminho do Certificado (Certificado instalado na máquina)
        - Senha do Certificado

    Configurações -> Geral
        - Modelo Documento Fiscal = moNFCe
        - Versão Documento Fiscal = ve310
        - Diretório Schemas = apontei para a pasta onde copio os schemas do ACBr

    Configurações -> WebService
        - UF = GO
        - Ambiente = Homologação

    Configurações -> Emitente
        - CNPJ = Cnpj do certificado

    Logo em seguida da mensagem de erro, efetuei o mesmo teste com libCapicom, dessa vez houve retorno do webservice, mesmo que com erro já que mesmo configurando a versão ve310 ainda está indo 2.0 no cabeçalho do XML.

    <?xml version="1.0" encoding="UTF-8" ?> 
      <?xml version="1.0" encoding="UTF-8" ?> 
     <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
      <env:Header /> 
     <env:Body>
     <nfeStatusServicoNF2Result xmlns="http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico2">
     <retConsStatServ versao="2.00" xmlns="http://www.portalfiscal.inf.br/nfe">
      <tpAmb>2</tpAmb> 
      <verAplic>GO3.0</verAplic> 
      <cStat>239</cStat> 
      <xMotivo>Rejeição: Cabeçalho - Versão do arquivo XML não suportada</xMotivo> 
      <cUF>52</cUF> 
      <dhRecbto>2017-04-04T13:47:20</dhRecbto> 
      </retConsStatServ>
      </nfeStatusServicoNF2Result>
      </env:Body>
      </env:Envelope>

     

    HttpSendDocument.xml

    HttpSendHeader.xml

    01.png

    02.png

  9. Boa tarde,

     

    Estamos a alguns dias com dificuldade para emitir NFC-e, estou com um certificado A1 e se eu utilizar o libCapicom tudo funciona corretamente, envio de notas, inutilização, etc. Mas se simplesmente mudo para libOpenSSL recebo este retorno:

    Erro Interno: 10091
    Erro HTTP: 500
    Network subsystem is unusable

    Até o momento o que consegui identificar é que pode ser algo com alguma DLL que as classes do OpenSSL utilizam, porquê se eu trocar a configuração pra Capicom vai que é uma beleza. Também quando estou testando com o OpenSSL e deixo a aplicação aberta, volta e meia do nada dispara uma exceção, depurando no delphi eu vi uma mensagem com o método "CertFreeCertificateContext" de alguma DLL.

    Fiz os testes no demo do ACBr, e dá a mesma mensagem, apenas fiz a configuração básica (caminho do certificado, senha do certificado, CNPJ da empresa) e executei o Status de Serviço.

    Preciso saber se tem alguma coisa a mais que posso fazer, ou se é algo com o webservice da SEFAZ, pois no final da semana passada usando o libCapicom estava dando erro de Cadeia de Certificados, hoje eu só liguei o PC e tentei enviar novamente e funcionou com libCapicom

  10. Trabalho com o Gutierres aqui na empresa e estamos a alguns dias quebrando cabeça com isso, até o momento o que a gente conseguiu identificar é que é algo com alguma DLL que as classes do OpenSSL utilizam, porquê se eu trocar a configuração pra Capicom vai que é uma beleza. Também quando estou testando com o OpenSSL e deixo a aplicação aberta, volta e meia do nada dispara uma exceção, depurando no delphi eu vi uma mensagem com o método "CertFreeCertificateContext" de alguma DLL.

  11. Boa tarde,

     

    Gostaria de saber se é possível enviar um código criando um parâmetro para imprimir ou não a segunda via do NFC-e quando emitida em modo de contingência, pois de acordo com o Manual de Padrões Técnicos da Contingência Off-line Versão 2.0 de 16 de dezembro de 2016:

    "Alternativamente à impressão da segunda via do DANFE NFCe, quando de emissão em contingência, o contribuinte poderá optar pela guarda eletrônica, em local seguro, do respectivo arquivo XML da NFC-e. Neste caso, o contribuinte deverá possibilitar a impressão do respectivo DANFE NFC-e para apresentação ao fisco quando solicitado." (pag. 8)

    Então é possível não imprimir a segunda via desde que o estabelecimento guarde uma via eletrônica do XML e que seja capaz de imprimir a segunda caso algum fiscal solicite (ambas as funções eu já implementei). O manual também diz que para fazer uso desta opção o usuário deve lavrar termo no livro Registro de Utilização de Documentos Fiscais e Termos de Ocorrência - modelo 6, ou formalizar declaração de opção segundo disciplina que vier a ser estabelecida por sua Unidade Federada, assumindo total responsabilidade pela guarda do arquivo e declarando ter ciência que não poderá, posteriormente, alegar problemas técnicos para justificar a eventual perda desta informação eletrônica sob sua posse, assumindo as consequências legais por ventura cabíveis.

    Então sendo possível, gostaria de saber quais os passos para enviar esta modificação no código para vocês.

    Manual_de_especificacoes_tecnicas_da_Contingencia_Off-line_versao_2.0 (1).pdf

  12. O que consegui depurar aqui é que quando tento efetuar uma inutilização com OpenSSL o erro ocorre dentro da unit ACBrDFeXsXmlSec no método TDFeSSLXmlSignXmlSec.XmlSecSign, na linha 578 do arquivo:

    doc := xmlParseDoc(PAnsiChar(ConteudoXML));

    O valor do ConteudoXML é o seguinte:

    <!DOCTYPE test [<!ATTLIST infInut Id ID #IMPLIED>]>
    <inutNFe xmlns="http://www.portalfiscal.inf.br/nfe" versao="3.10">
    	<infInut Id="ID52172647484800014665005000000082000000082">
    		<tpAmb>2</tpAmb>
    		<xServ>INUTILIZAR</xServ>
    		<cUF>52</cUF>
    		<ano>17</ano>
    		<CNPJ>26474848000146</CNPJ>
    		<mod>65</mod>
    		<serie>5</serie>
    		<nNFIni>82</nNFIni>
    		<nNFFin>82</nNFFin>
    		<xJust>Erro ao gerar número sequencial no software</xJust>
    	</infInut>
    	<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    		<SignedInfo>
    			<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
    			<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
    			<Reference URI="#ID52172647484800014665005000000082000000082">
    				<Transforms>
    					<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
    					<Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
    				</Transforms>
    				<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
    				<DigestValue></DigestValue>
    			</Reference>
    		</SignedInfo>
    		<SignatureValue></SignatureValue>
    		<KeyInfo>
    			<X509Data>
    				<X509Certificate></X509Certificate>
    			</X509Data>
    		</KeyInfo>
    	</Signature>
    </inutNFe>

    E quando tenta executar o xmlParseDoc é quando dá o erro Falha ao interpretar o XML "xmlParseDoc"

  13. Eu tentei executar pelo demo mas não deu certo, foi um custo só pra instalar e compilar ele. Mas quando tento executar a inutilização com versão da Nf-e 4.0 dá um erro dizendo que o OpenSSL não suporta TL_TLSv1_2, se eu seleciono uma versão menor aí da erro no XML.

    Mas no meu sistema eu executo mesmo método que o inutilizar do demo faz, usando um certificado A1 configurado no OpenSSL, realizo uma inutilização para NFC-e, modelo 65.

  14. Bom dia, 

     

    Gostaria de sugerir a alteração abaixo no método "CancelaCupomVirtual" da classe "TACBrECFVirtualNFCeClass":

    procedure TACBrECFVirtualNFCeClass.CancelaCupomVirtual;
    var
      NomeNFCe, cStat, xMotivo: string;
    begin
      if Estado = estNaoFiscal then
        exit;
    
      with fsACBrNFCe do
      begin
        if (Estado in estCupomAberto) or
          (Estado in estPagamento) then // Não precisa cancelar se ainda não enviou...d
        begin
          NotasFiscais.Clear;
          exit;
        end;
    
    ...

    Adicionando o "(Estado in estPagamento)", pois ocorre a seguinte situação: eu estou realizando uma venda em modo OnLine e ao executar o "FechaCupom" ocorre um erro de conexão, então eu preciso deixar esta venda pendente e abrir uma nova em modo OffLine, o problema é que como há erro de conexão o "FechaCupom" não irá funcionar (a não ser que haja algum parâmetro que eu não identifiquei na classe) então preciso cancelar o documento aberto na ECFVirtual, mas a essa altura o Estado não é mais estCupomAberto e sim estPagamento pois já foram realizados os pagamentos.

    Na verdade o código está certo, foi falta de atenção minha. Mas mesmo entrando no bloco

    NotasFiscais.Clear;
    exit;

    Aparentemente o componente ainda tenta enviar o cancelamento da nota, pois recebo a mensagem de erro dizendo que não há notas para serem canceladas.

  15. Boa tarde,

     

    Estou tentando realizar uma inutilização com o libOpenSSL mas sempre recebo o seguinte erro:

    Falha ao assinar Inutilização Nota Fiscal Eletrônica 
    Erro: Falha ao interpretar o XML "xmlParseDoc"

    Eu efetuo a inutilização da seguinte forma:

    ACBrNFe.WebServices.Inutiliza(
          DAO.QueryConsultaEmpresa.Query('CG_EMP').FieldByName('CNPJ').AsString,
          'Erro ao gerar número sequencial no software',
          StrToInt(FormatDateTime('yyyy', Now)),
          65,
          DAO.QueryConsultaPDV.Query('TB_PDV').FieldByName('NRO').AsInteger,
          pNroInicial,
          pNroFinal);

    Esse é um erro antigo, com o Capicom funciona corretamente então venho mantendo meus clientes com Capicom, mas agora com a mudança no ACBr a inutilização teria que funcionar com OpenSSL.

    Alguém mais já teve esse erro ao efetuar inutilização com OpenSSL?

  16. Bom dia,

     

    Estou enfrentando a seguinte situação que não consigo tratar com o NFC-e:

    Dentro do sistema eu preparo todo o objeto do cupom eletrônico da ACBr e executo o envio, a nota então é enviada, o servidor da SEFAZ consegue receber ela e processa toda a nota pra então enviar o retorno, só que nesse meio tempo cai a internet na loja e o retorno nunca chega, pro sistema a única coisa que consigo detectar é a queda da conexão. Então eu mudo para o modo OffLine e finalizo a venda para liberar o cliente. Mais tarde o usuário envia essa venda que ficou pendente e antes disso no sistema eu consulto a chave, se ela existir na SEFAZ então só finalizo as rotinas internas do sistema para processar a venda.

    O problema é que como eu não recebi o retorno no momento do envio, o XML que eu tenho salvo está errado, pois ele não possui a tag "nfeProc" que é gerada somente após a autorização da nota pela SEFAZ, neste caso é pior ainda, porque como troquei para modo offline anteriormente, o XML que tenho na base de dados está como contingência.

    Existe alguma forma de recuperar o XML que foi autorizado na SEFAZ? Ou o processo que estou fazendo está incorreto e qual seria o tratamento certo?

     

    Atenciosamente,

     

    Renan Garcia de Oliveira.

  17. Boa Tarde,

    Implementei a NFC-e no próprio PAF e configuro o ACBrECF para virtual, mas ao registrar item com alíquotas diferentes retorna o erro de alíquota não registrada, como faço nesse caso?.

    Tentei usar o ACBrECFVirtualNFCe, mas tive duvidas, tenho que conectar o ACBrNFe nele e preencher normalmente? ou tenho que utilizar o método vendeitem?

    Já olhei bastante os exemplos e li os manuais, mas se vocês tiverem mais material para me ajudar eu agradeceria muito.

    Desde já agradeço!

×
×
  • 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.