Ir para conteúdo
  • Cadastre-se

HelioNeto

Membros
  • Total de ítens

    63
  • Registro em

  • Última visita

Tudo que HelioNeto postou

  1. Boa Tarde! Estamos com esta situação aqui Também. Mesmo informando a TAG referente a Retenção: <retTrib> <vBCIRRF>1185859.35</vBCIRRF> <vIRRF>14230.31</vIRRF> </retTrib> Descontando o Valor da Fatura, não está sendo aceito pelo Órgão Publico. Alguém tem mais alguma explicação?
  2. @rafabarzotto Que bom que deu Certo! Meu intuito era colaborar mesmo. Bacana seu projeto, eu desenvolvo em PHP também.
  3. @rafabarzotto Dessa forma que coloquei aí funcionou. o X-Brad-Signature não vai mesmo não, ele só vai no Body coloquei para gerar o arquivo Request.txt para mostrar como está sendo montado, no meu caso saiu conforme o anexo (Request.txt) No código que eu postei estava errado, tem a variável strLinha2 estava repetida e o strObj estava vazio por que eu movi ele para baixo antes de copiar para cá. Atualizei o Arquivo que segue em anexo(Exemplo-RegistroBoleto.txt) o X-Brad-Timestamp usa a variável strTimeStamp que gera a data no formato solicitado pelo Bradesco, conforme a função ConverteDateISO No meu caso, é -04:00 por que Estou em Campo Grande/MS, aí monta assim: 2023-08-30T14:20:06-04:00 Exemplo-RegistroBoleto.txt Request.txt
  4. @Daniel InfoCotidiano Obrigado! Pois é, eu tentei fazer, mas da forma como foi implementado o ACBrBoleto, não consegui fazer a requisição. Observei que a geração do Token faz a requisição com opção de adicionar parâmetros no "Header", mas o Bradesco tem uma particularidade que precisa enviar no "Body". O Bradesco usa uma abordagem diferente das demais, no Primeiro post aqui desse tópico, eu explico essa dificuldade que tive. Então acabei implementando de forma separada usando TIdHTTP do Indy juntamente com o DFeSSL para realizar as Assinaturas. Acredito que dá para adaptar o componente do ACBr que usa o synapse para enviar parâmetros no Body da requisição POST, mas eu não consegui.
  5. @rafabarzotto eu quebrei a cabeça também, mas consegui fazer a requisição. No meu caso, está retornando um ERRO que os caras do Bradesco estão tentando resolver internamente, abriram um Ticket para tentar resolver. mas vou colocar o código que eu fiz aqui para você dar uma olhada: const URL_CRIABOLETO = 'https://proxy.api.prebanco.com.br/v1/boleto/registrarBoleto'; URI_REG_BOLETO = '/v1/boleto/registrarBoleto'; procedure TfrmBradescoApi.CriarBoleto; var strResult: String; objJson: TJSONObject; strTimeStamp, strObj, strLinha1, strLinha2, strLinha3, strLinha4, strLinha5, strLinha6, strLinha7, strLinha8 : String; intMiliSegundos: int64; dataAtual: TDateTime; stremRequest : TStringStream; strRequestAssinado : WideString; xRequestBody : TStringStream; objCriaBoleto : TLibBradescoApiCriaBoleto; begin {*** BLOCO FORMATACAO DA DATA***} dataAtual := Now; intMiliSegundos := DateTimeToUnix(dataAtual, False) * 1000 + MilliSecondsBetween(dataAtual, Trunc(dataAtual)); //Data Atual UTC em Milisegundos. strTimeStamp := ConverteDateISO(dataAtual, False); {*** FIM BLOCO FORMATACAO DA***} {*** BLOCO DE ASSINATURA ***} DFeSSL.SSLCryptLib := cryOpenSSL; DFeSSL.ArquivoPFX := 'certificado.pfx'; DFeSSL.Senha := '123456'; DFeSSL.CarregarCertificado; strLinha1 := 'POST'+#10; //Methodo HTTP strLinha2 := URI_REG_BOLETO+#10; //URI de Requisição strLinha2 := ''+#10; //Parâmetros. quando houver, se não tem deixa linha em branco. strLinha4 := strObj+#10; //Json de criação do Boleto que vai no Body. strLinha5 := editToken.Text+#10; //Access-token retornado da API. strLinha6 := IntToStr(intMiliSegundos)+#10; //Hora Atual em Milisegundos. strLinha7 := strTimeStamp+#10; //TimeStamp; strLinha8 := 'SHA256'; //Algoritimo Usado. stremRequest := TStringStream.Create(strLinha1+strLinha2+strLinha3+strLinha4+strLinha5+strLinha6+strLinha7+strLinha8); //Aqui vai o arquivo para Assinar. stremRequest.SaveToFile('request.txt'); strRequestAssinado := CalcularHash(stremRequest);//aqui realiza a assinatura. {*** FIM BLOCO DE ASSINATURA ***} {*** CRIAÇAO DO PAYLOAD DO BOLETO ***} objCriaBoleto := TLibBradescoApiCriaBoleto.Create; //Classe contento todos os campos do boleto. objCriaBoleto.isacdoTitloCobr := 'HELIO NETO'; //NOME DO CLIENTE objCriaBoleto.elogdrSacdoTitlo := 'RUA AFONSO PENA'; //RUA. objCriaBoleto.enroLogdrSacdo := 999; //NUMERO objCriaBoleto.ccepSacdoTitlo := 79000000; //CEP objCriaBoleto.ebairoLogdrSacdo := 'CENTRO'; //BAIRRO objCriaBoleto.imunSacdoTitlo := 'CAMPO GRANDE'; //CIDADE CLIENTE objCriaBoleto.csglUfSacdo := 'MS'; //UF CLIENTE objCriaBoleto.indCpfCnpjSacdo := 1; //TIPO 1 CPF objCriaBoleto.nroCpfCnpjSacdo := '00000000000'; //CEP DO CLIENTE. objCriaBoleto.demisTitloCobr := FormatDateTime('dd.mm.yyyy', Now); //'30.08.2023'; //Data Emissão. objCriaBoleto.dvctoTitloCobr := FormatDateTime('dd.mm.yyyy', IncDay(Now,1)); //'31.08.2023'; //Data Vencimento. strObj := TJson.ObjectToJsonString(objCriaBoleto); //Converte de Objeto para Json. {*** FIM CRIAÇAO DO PAYLOAD DO BOLETO ***} {*** MONTAGEM DO HEADER ***} FHTTP.Request.Clear; FHTTP.Request.CustomHeaders.Clear; FHTTP.Request.UserAgent := 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; Maxthon; InfoPath.1; .NET CLR 3.5.30729; .NET CLR 3.0.30618)'; FHTTP.Request.AcceptCharSet := 'UTF-8, *;q=0.8'; FHTTP.Request.AcceptEncoding := 'gzip, deflate, br'; FHTTP.Request.BasicAuthentication := False; FHTTP.Request.CustomHeaders.FoldLines := False; FHTTP.Request.ContentType := 'application/x-www-form-urlencoded'; FHTTP.Request.CustomHeaders.Add('Authorization: Bearer ' + editToken.Text); //TOKEN OBTIDO. FHTTP.Request.CustomHeaders.Add('cpf-cnpj: 00000000000000'); //CNPJ DA EMPRESA FHTTP.Request.CustomHeaders.Add('X-Brad-Nonce: ' + IntToStr(intMiliSegundos)); FHTTP.Request.CustomHeaders.Add('X-Brad-Timestamp: ' + strTimeStamp); FHTTP.Request.CustomHeaders.Add('X-Brad-Algorithm: SHA256'); {*** FIM MONTAGEM DO HEADER ***} xRequestBody := TStringStream.Create(strObj); //Preenche o Body para enviar no Post. try strResult := FHTTP.Post(URL_CRIABOLETO, xRequestBody); //Envia. MemoResp.lines.add(strResult); objJson := TJSONObject.ParseJSONValue(TEncoding.UTF8.GetBytes(strResult), 0) as TJSONObject; except on E: EIdHTTPProtocolException do begin MemoResp.Lines.add(E.ErrorMessage); end; end; FreeAndNil(xRequestBody); end; function TfrmBradescoApi.ConverteDateISO(AData: TDateTime; AInputIsUTC : Boolean = True): String; const SDateFormat: string = 'yyyy''-''mm''-''dd''T''hh'':''nn'':''ss''Z'''; { Do not localize } SOffsetFormat: string = '%s%s%.02d:%.02d'; { Do not localize } Neg: array[Boolean] of string = ('+', '-'); { Do not localize } var Bias: Integer; TimeZone: TTimeZone; begin Result := FormatDateTime(SDateFormat, AData); if not AInputIsUTC then begin TimeZone := TTimeZone.Local; Bias := Trunc(TimeZone.GetUTCOffset(AData).Negate.TotalMinutes); if Bias <> 0 then begin // Remove the Z, in order to add the UTC_Offset to the string. SetLength(Result, Result.Length - 1); Result := Format(SOffsetFormat, [Result, Neg[Bias > 0], Abs(Bias) div MinsPerHour, Abs(Bias) mod MinsPerHour]); end end; end; Entendo que eles tem essas regras de segurança, mas eles poderiam simplificar algumas coisas. Espero ter ajudado.
  6. Boa Tarde! Vi que ainda não tem o Boleto Híbrido do Bradesco implementado no ACBrBoleto. Consegui contato com o Gerente e geraram as chaves e me mandaram o manual de configuração. Fiquei meio perdido com o manual, e acho que é por isso que ainda não tem esse Boleto Hibrido aqui..kkkkk No fim de uns 2 dias fazendo testes consegui entender e fazer funcionar a Requisição do Token no Postman e no TidHttp. Inclusive para atender os clientes aqui da Empresa vou fazer usando o TidHttp do Indy. Para tentar colocar na ACBr fiz a copia dos arquivos do Bancoob e comecei a mexer. Criei o arquivo: ..\svn\trunk2\Fontes\ACBrBoleto\WS\ACBrBoletoW_Bradesco.pas ..\svn\trunk2\Fontes\ACBrBoleto\WS\ACBrBoletoRet_Bradesco.pas Abaixo, segue todo o código que fiz na função GerarTokenAutenticacao no arquvo ..\svn\trunk2\Fontes\ACBrBoleto\WS\ACBrBoletoW_Bradesco.pas: function TBoletoW_Bradesco.GerarTokenAutenticacao: string; var strheaderJSON, strPayloadJSON : String; JsonHeader, JsonPayload: TJsonObject; intMiliSegundos, intSegundos, intSegundos1h: int64; dataAtual: TDateTime; stremHeadPayload : TStringStream; strHeaderBase64, strPayloadBase64, strHeadPayloadAssinado, strAssertion: WideString; xRequestBody : TStringList; begin {*** BLOCO FORMATACAO DA DATA DO PAYLOAD***} dataAtual := Now; intSegundos := DateTimeToUnix(dataAtual, False); //Data Atual UTC em Segundos. intSegundos1h := DateTimeToUnix(IncHour(dataAtual, 1), False); //Data Atual UTC em Segundos + Horario 1h intMiliSegundos := DateTimeToUnix(dataAtual, False) * 1000 + MilliSecondsBetween(dataAtual, Trunc(dataAtual)); //Data Atual UTC em Milisegundos. {*** FIM BLOCO FORMATACAO DA DATA DO PAYLOAD***} {*** BLOCO MONTAGEM DO HEADER JSON ***} JsonHeader := TJsonObject.Create; try JsonHeader.Add('alg').Value.asString := 'RS256'; JsonHeader.Add('typ').Value.asString := 'JWT'; strheaderJSON := JsonHeader.Stringify; strHeaderBase64 := EncodeBase64(strheaderJSON); except end; {*** FIM BLOCO MONTAGEM DO HEADER JSON ***} {*** BLOCO MONTAGEM DO PAYLOAD JSON ***} JsonPayload := TJsonObject.Create; try JsonPayload.Add('aud').Value.asString := 'https://proxy.api.prebanco.com.br/auth/server/v1.1/token'; //URL; JsonPayload.Add('sub').Value.asString := 'cliente_id'; //Client ID; JsonPayload.Add('iat').Value.asString := IntToStr(intSegundos); //data atual em segundos; JsonPayload.Add('exp').Value.asString := IntToStr(intSegundos1h); //data atual adicionando uma hora à frente, em segundos; JsonPayload.Add('jti').Value.asString := IntToStr(intMiliSegundos); //data atual em milissegundos; JsonPayload.Add('ver').Value.asString := '1.1'; strPayloadJSON := JsonPayload.Stringify; strPayloadBase64 := EncodeBase64(strPayloadJSON); except end; {*** FIM BLOCO MONTAGEM DO PAYLOAD JSON ***} {*** BLOCO DE ASSINATURA ***} FSSLDigest := dgstSHA256; FSSLHashOutput := outBase64; DFeSSL.SSLCryptLib := cryOpenSSL; DFeSSL.SSLHttpLib := httpOpenSSL; DFeSSL.SSLXmlSignLib := xsLibXml2; DFeSSL.ArquivoPFX := 'certificado.pfx'; DFeSSL.Senha := 'senha'; DFeSSL.CarregarCertificado; stremHeadPayload := TStringStream.Create(strHeaderBase64+'.'+strPayloadBase64); //concatena conforme o manual. strHeadPayloadAssinado := CalcularHash(stremHeadPayload);//aqui realiza a assinatura. strAssertion := strHeaderBase64+'.'+strPayloadBase64+'.'+strHeadPayloadAssinado; //HeaderBase64 + PayloadBase64 + JWT assinado = JWS. {*** FIM BLOCO DE ASSINATURA ***} {*** MONTAGEM DO BODY COM O JWS (JSON Web Signature) ***} xRequestBody := TStringList.Create; xRequestBody.Add('grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer'); xRequestBody.Add('assertion='+strAssertion); HTTPSend.Document.Clear; //Esse xRequestBody precisa ser enviado no Body do Post, não consegui fazer funcionar. {*** FIM MONTAGEM BODY ***} OAuth.ContentType := 'application/x-www-form-urlencoded'; OAuth.Payload := true; OAuth.AuthorizationType := atNoAuth; //precisa alterar para NoAuth para não mandar o Basic. Result := inherited GerarTokenAutenticacao; end; Todo esse código é somente para Gerar o JWS (JSON Web Signature). Não segui muito as boas praticas, só queria fazer funcionar, e até consegui montar todos os dados, inclusive o JWS gerado aqui foi o que eu Utilizei no Postman. mas no momento de enviar, o FHTTPSend.HTTPMethod(MetodoHTTPToStr(htPOST), URL) manda esses dados pelo Header e o Bradesco só aceita se mandar pelo Body. Esse pequeno, grande detalhe foi o que fez eu não conseguir gerar o Token, a resposta que está vindo é esta: Erro: 400 - Bad Request { "code": "100", "message": "invalid token", "details": null } Pelo que li no manual, todos os endpoints precisam de Assinatura no Payload. Não encontrei outro Banco já configurado que tenha este tipo de abordagem e acho que o Bradesco só está dificultando as coisas. Se mais alguém quiser colaborar, para colocar no ACBrBoleto, está aí, pelo menos a parte de geração do Token. Segue em anexo o Manual e os arquivos alterados para conseguir utilizar no ACBrBoleto. ACBrBoleto-Bradesco.zip
  7. Na função de gerar código de barras, você pode informar diretamente uma String ao invés de enviar um TACBrTipoCodBarra. Abaixo segue a String correspondente ao TACBrTipoCodBarra para cada Linguagem da Etiquetadora: Etiquetadora na Linguagem PPLA: ...\trunk2\Fontes\ACBrSerial\ACBrETQPpla.pas 'A' = barCODE39; 'E' = barCODE128; 'F' = barEAN13; 'G' = barEAN8; 'O' = barCODE93; Etiquetadora na PPLB: ...\trunk2\Fontes\ACBrSerial\ACBrETQEpl2.pas '3' = barCODE39; '1' = barCODE128; 'E30' = barEAN13; 'E80' = barEAN8; 'B9' = barCODE93; Etiquetadora na PPLZ: ...\trunk2\Fontes\ACBrSerial\ACBrETQZplII.pas 'B3' = barCODE39 'C' = barCODE128; 'E' = barEAN13; 'B8' = barEAN8; 'A' = barCODE93; Para realizar os testes utilizei o Exemplo: ...trunk2\Exemplos\ACBrSerial\ACBrETQ\Delphi\ETQTeste.dpr E criei um campo para informar manualmente os dígitos do código de barras, e no evento bEtqCarreirasClick fiz os ajustes: ImprimirTexto(orNormal, 2, 1, 2, 2, 1, 'TESTE barEAN13'); ImprimirTexto(orNormal, 2, 1, 1, 6, 1, 'COD:'+strCod); ImprimirBarras(orNormal, barEAN13, 2, 2, 8, 1, strCod, 10); ImprimirTexto(orNormal, 2, 1, 2, 2, 36, 'TESTE barCODE93'); ImprimirTexto(orNormal, 2, 1, 1, 6, 36, 'COD:'+strCod); ImprimirBarras(orNormal, barCODE93, 2, 2, 8, 36, strCod, 10); ImprimirTexto(orNormal, 2, 1, 2, 2, 72, 'TESTE barCODE128'); ImprimirTexto(orNormal, 2, 1, 1, 6, 72, 'COD:'+strCod); ImprimirBarras(orNormal, barCODE128, 2, 2, 8, 72, strCod, 10); Fui realizando a troca do bloco de 3 linhas com todos os tipos e desta forma consegui chegar nesta conclusão. Nos testes que realizei em etiquetas de 3 colunas, observei que: - Para códigos de barras entre 3 e 9 dígitos é melhor utilizar o barCODE93 - Para códigos de barras com 13 dígitos é melhor utilizar o barEAN13 (Com a ressalva de que é feita uma validação se o o digito verificar está de acordo, podendo mudar os dígitos do código). - Não deve-se usar código de barras com menos de 3 dígitos, nem entre 10 e 12 e nem maior que 13. Espero ter ajudado!
  8. Encontrei o Problema. Há um tempo atrás eu havia comentado a unit: ..\svn\trunk2\Fontes\PCNComum\pcnAuxiliar.pas Linha 280: aTexto := ParseText(AnsiString(aTexto), False ); E desta forma, não estrava trocando o E Comercial.
  9. Boa Tarde! Atualizei os Fontes, Reinstalei o ACBr e o erro ainda persiste. Ainda Estou usando a Versão 3.0 do CT-e. Verifiquei no arquivo: ..\svn\trunk2\Fontes\ACBrDFe\ACBrCTe\ACBrCTe.pas Na Linha 335 dentro da Funcion GetURLQRCode que está dessa forma: sEntrada := 'chCTe=' + idCTe + '&tpAmb=' + TpAmbToStr(TipoAmbiente); Só deu certo quando eu troquei para: sEntrada := 'chCTe=' + idCTe + '&amp;tpAmb=' + TpAmbToStr(TipoAmbiente); A Versão 4.0 usa outra unit para montar por isso não ta funcionando na Versão 3.0? Desde já agradeço! Sem mais para o momento, atenciosamente.
  10. Bom dia! Para ficar Registrado aqui, a Solução que encontrei foi a de: - Ao invés de usar o LoadFromFile, alimentar o Objeto completo através do ACBrNFe1.NotasFiscais.Add e em seguida usar o Método "GerarNFe". Tópico pode ser fechado.
  11. Boa Tarde! No meu XML, gero o Nome Fantasia do Destinatário nos Dados Adicionais: tag <infCpl> Quando este nome tem & está trocando para "&amp;" que é correto, então salva corretamente. Quando carrego um XML por: ACBrNFe.NotasFiscais.LoadFromFile(PathArquivoXML); E Logo em seguida realizo a Assinatura: ACBrNFe.NotasFiscais.Assinar; Ocorre o Erro: Falha ao interpretar o XML "xmlParseDoc" --> 23 - EntityRef: expecting ';' Analisando o Código fonte da ACBr observei que no TNotasFiscais.LoadFromFile é executado: 1- TNotasFiscais.LoadFromString; 2- NotaFiscal.LerXML; 3-ACBrUtil.XMLHTML.ParseText; na Function ParseText é executado: Astr := InternalStringReplace(AStr, '&amp;' , '&'); Voltando para somente "&" Depois ainda executa o: 4- TNFeR.LerXml 5- Leitor.rCampo na Function rCampo quando o campo é tcStr É executado o pcnAuxiliar.ReverterFiltroTextoXML Que contém o código: aTexto := StringReplace(aTexto, '&amp;', '&', [rfReplaceAll]); Ou seja, quando eu for realizar a Assinatura vai ocorrer o Erro: Falha ao interpretar o XML "xmlParseDoc" --> 23 - EntityRef: expecting ';' Se eu comentar as duas linhas desse código que fazem o replace, só para testar, Funciona Perfeitamente. Mas Também entendo que esta não é a Solução pois o LoadFromfile é usado em Inúmeras situações e se comentar essa parte pode ocorrer outro tipo de erro. Como devo proceder nesse caso? utilizo a montagem do XML pelo TXMLDocument, Salvo no Disco, Utilizo os fontes da ACBr para Assinar, Validar e Enviar os Documentos. Tem uma outra opção que não seja ACBrNFe1.NotasFiscais.Add, tendo em vista que eu precisaria refatorar todo o código somente por conta do "&" Alguém poderia me sugerir algo? Segue em anexo o XML Antes de Assinar que é como eu carrego no LoadFromFile. Desde já agradeço! NF-e50230402250994000120550010001606581118044150-nfe.xml
  12. Boa Tarde @valterpatrick! Pois é, eu tive uma conversa com o Time de Desenvolvedores aqui e resolvemos fazer dessa forma mesmo. Relacionar os NFCe's na NFe, diminuir as quantidades e a SEFAZ autorizou numa boa. Obrigado!
  13. Boa Tarde! Um Cliente da Empresa que eu trabalho realiza Vários NFCe's durante o Mês e em uma determinada data, gera uma NF-e Referente a estes NFC-es. Se durante o mês ocorrer alguma devolução parcial de algum destes NFCe's, como eu devo proceder? Atualmente estamos realizado a Referencia dos NFCe's de forma integral, inserindo todos os Itens na NF-e Final. Mas o Cliente quer o Valor total da NF-e descontando o Valor dos NFCe's devolvidos parciais. Como eu devo proceder para não ter algum tipo de problema fiscal? Será que eu referencio junto dos NFC-es as NFe's Devolvidas e no Total da NF-e Final eu desconsidero as quantidades devolvidas? Desde já agradeço!
  14. Após a alteração sugerida pelo @Italo Giurizzato Junior. Funcionou Corretamente. Obrigado!
  15. Obrigado @Italo Giurizzato Junior Vou realizar a Alteração e fazer o teste. E posto aqui o resultado.
  16. Bom dia @Juliomar Marchetti, obrigado por nos responder. Não somos da mesma empresa, provavelmente atendemos Campo Grande/MS. Eu entendi que não há mais suporte ao ACBrNFSe, no entanto, esta ultima alteração que foi colocada no dia 25/02/2022 Está enviando essa Tag, só percebi no Sábado que foi quando gerei uma Nova Versão para um cliente que usa a NFSe de Campo Grande/MS.
  17. Bom dia! A Empresa que da manutenção nesse Webservice (DSF) Não atende mais a prefeitura de Campo Grande/MS e quem realiza a manutenção é a SGI. Como é do Governo, acredito que vão fazer pouco caso ao solicitarmos para criar essa tag. Como solução paliativa e por Nós não atendermos Campinas/SP aqui na Empresa removi a linha: Gerador.wCampo(tcStr, '', 'InscricaoMunicipalObra', 01, 11, 01, NFSe.ConstrucaoCivil.CodigoMunicipioObra, ''); No Arquivo: ...\trunk2\Fontes\ACBrDFe\ACBrNFSe\PCNNFSe\pnfsNFSeW_ISSDSF.pas Vou realizar a migração para o ACBRNFSeX futuramente, e analisando o fonte: ..\trunk2\Fontes\ACBrDFe\ACBrNFSeX\Provedores\ISSDSF.GravarXml.pas Não encontrei um tratamento para saber se vai gerar ou não essa Tag <InscricaoMunicipalObra>. Poderiam colocar algum tipo de Validação/Tratamento para essa Tag no ACBRNFSeX? Desde já agradeço!
  18. Boa Tarde! Após testes realizados com o ACBrDFeHttpWinApi.pas em anexo, funcionou perfeitamente. Desde já agradeço!
  19. Bom dia! Segue anexo do ..\trunk2\Fontes\ACBrTCP\ACBrWinReqRespClass.pas modificado. Sem mais, atenciosamente. ACBrWinReqRespClass.pas
  20. Boa Tarde! Estava realizando Teste no TimeOut, seguindo este Post: NFeAutorizacao_4.00=https://hom.nfe.sefaz.ms.gov.br:81/ws/NFeAutorizacao4 Quando ocorre uma exceção, Na lib = ..trunk2\Fontes\ACBrTCP\ACBrWinReqRespClass.pas entra no RaiseException, Não Executando o FHeaderReq.Clear : procedure TACBrWinReqResp.Send; var Ok: Boolean; DataToSend: AnsiString; begin DoLog('Send'); Ok := SetHeaderReq; if not Ok then raise EACBrWinReqResp.CreateFmt(ACBrStr(sErrSetHeader), [GetWinInetError(FInternalErrorCode)] ); if EncodeDataToUTF8 then DataToSend := UTF8Encode(Data) else DataToSend := Data; Ok := SendData(DataToSend); if not Ok then raise EACBrWinReqResp.CreateFmt(ACBrStr(sErrSentData), [GetWinInetError(FInternalErrorCode)] ); FHeaderReq.Clear; //<== Não Executa o Clear. end; Desta forma, descobri que ao, ativar o Servidor de Backup. Trocando o que é necessário no ACBrNFe e a propriedade FobjNFe.Configuracoes.Geral.FormaEmissao = teSVCRS; //Para o Mato Grosso do Sul. Ao Enviar retorna a Mensagem do "Falha Enviando a Requisição. Erro: 183 -" Observei que o Header estava Concatenando a URL antiga com a Nova 'Host: nfe-homologacao.svrs.rs.gov.br'#$D#$A' Host: hom.nfe.sefaz.ms.gov.br:81'#$D#$A' Content-Type: application/soap+xml; charset=utf-8; charset=utf-8'#$D#$A' Accept-Charset: utf-8'#$D#$A'SOAPAction: "http://www.portalfiscal.inf.br/nfe/wsdl/NFeAutorizacao4/nfeAutorizacaoLote"'#$D#$A Quando fiz esse ajuste abaixo funcionou perfeitamente e parou de ocorrer o erro: "Falha Enviando a Requisição. Erro: 183 -" procedure TACBrWinReqResp.InitExecute; begin CloseConnection; FHeaderReq.Clear; //Inclusão desta Linha. FHeaderResp.Clear; FRedirections := 0; end; Fiz os Testes aqui e Funcionou Certinho. para testar precisa trocar a propriedade: ACBrNFe.Configuracoes.Geral.SSLHttpLib = httpWinHttp; O OpenSSL está funcionando Perfeitamente. Quem puder analisar, para corrigir, temos clientes configurados com o httpWinHttp e não queriamos ter de trocar todos para httpOpenSSL Desde já agradeço!
  21. Bom dia! O Provedor ISSNet mudou a URL de Cuiabá-MT, não tenho certeza se mudou de todos os Municípios que são atendidos por eles. De: http://www.issnetonline.com.br/webserviceabrasf/cuiaba/servicos.asmx Para: https://wscuiaba.issnetonline.com.br/webserviceabrasf/cuiaba/servicos.asmx Ajustei o arquivo ../ArqINI/ISSNet.ini conforme abaixo: Aqui nós utilizamos apenas para Cuiabá-MT realizei o Teste para este Município e Ficou Resolvido, realizei o ajuste para Atender os outros Municípios, caso também tenham mudado. Estou reportando caso alguém tenha dúvida de como fazer este ajuste. Sem mais, atenciosamente.
  22. Obrigado!
  23. Bom dia @Felipe E. Resende Mesquita Segue em anexo o arquivo. Grato! pnfsConversao.pas
  24. Boa Tarde! Ao Enviar o XML para o provedor ISSDSF foi acusado que o código 9806 não é válido. Fiz uma Pesquisa na tabela SIAFI e constatei que o código correto é 9745 para Santa Rita do Pardo/MS. Peço por gentileza que ajustem no arquivo ...\trunk2\Fontes\ACBrDFe\ACBrNFSe\PCNNFSe\pnfsConversao.pas Já realizei o Teste e Funcionou. Desde já Agradeço!
  25. @Bruno Mendes Valentim Essa demora no Processamento ainda acontece, sem termos o que fazer, sendo que pela Nota Técnica temos de enviar a UF de Origem da Nota mesmo. Para Amenizar esta Demora no Processamento, criamos a Rotina de: 1- Consultar o Resumo das Notas pelo Ultimo NSU; 2- Enviar o Evento de Ciência; 3- Realizar o Download. Desta forma, os Nossos clientes conseguem se organizar enviando a Ciência da Operação bem antes da Nota Fiscal e os Produtos chegarem "Em Mãos". Tem um Exemplo de como implementar esta forma na pasta: ...\trunk2\Exemplos\ACBrDFe\ACBrNFe\DistribuicaoDFe.txt
×
×
  • 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...