Ir para conteúdo
  • Cadastre-se

Roberto Henrique Borges Machado

Membros
  • Total de ítens

    35
  • Registro em

  • Última visita

Últimos Visitantes

525 visualizações

Roberto Henrique Borges Machado's Achievements

  1. Segue Schema da SEFAZ. <xs:element name="ICMS51"> <xs:annotation> <xs:documentation>Tributção pelo ICMS 51 - Diferimento. A exigência do preenchimento das informações do ICMS diferido fica à critério de cada UF.</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="orig" type="Torig"> <xs:annotation> <xs:documentation>origem da mercadoria: 0 - Nacional 1 - Estrangeira - Importação direta 2 - Estrangeira - Adquirida no mercado interno</xs:documentation> </xs:annotation> </xs:element> <xs:element name="CST"> <xs:annotation> <xs:documentation>Tributação pelo ICMS 51 - Tributação com Diferimento</xs:documentation> </xs:annotation> <xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="preserve"/> <xs:enumeration value="51"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="modBC" minOccurs="0"> <xs:annotation> <xs:documentation>Modalidade de determinação da BC do ICMS: 0 - Margem Valor Agregado (%); 1 - Pauta (valor); 2 - Preço Tabelado Máximo (valor); 3 - Valor da Operação.</xs:documentation> </xs:annotation> <xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="preserve"/> <xs:enumeration value="0"/> <xs:enumeration value="1"/> <xs:enumeration value="2"/> <xs:enumeration value="3"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="pRedBC" type="TDec_0302a04" minOccurs="0"> <xs:annotation> <xs:documentation>Percentual de redução da BC</xs:documentation> </xs:annotation> </xs:element> <xs:element name="cBenefRBC" minOccurs="0"> <xs:annotation> <xs:documentation>Código de Benefício Fiscal na UF aplicado ao item quando houver RBC.</xs:documentation> </xs:annotation> <xs:simpleType> <xs:restriction base="xs:string"> <xs:whiteSpace value="preserve"/> <xs:pattern value="[!-ÿ]{8}|[!-ÿ]{10}"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="vBC" type="TDec_1302" minOccurs="0"> <xs:annotation> <xs:documentation>Valor da BC do ICMS</xs:documentation> </xs:annotation> </xs:element> <xs:element name="pICMS" type="TDec_0302a04" minOccurs="0"> <xs:annotation> <xs:documentation>Alíquota do imposto</xs:documentation> </xs:annotation> </xs:element> <xs:element name="vICMSOp" type="TDec_1302" minOccurs="0"> <xs:annotation> <xs:documentation>Valor do ICMS da Operação</xs:documentation> </xs:annotation> </xs:element> <xs:element name="pDif" type="TDec_0302a04Max100" minOccurs="0"> <xs:annotation> <xs:documentation>Percentual do diferemento</xs:documentation> </xs:annotation> </xs:element> <xs:element name="vICMSDif" type="TDec_1302" minOccurs="0"> <xs:annotation> <xs:documentation>Valor do ICMS da diferido</xs:documentation> </xs:annotation> </xs:element> <xs:element name="vICMS" type="TDec_1302" minOccurs="0"> <xs:annotation> <xs:documentation>Valor do ICMS</xs:documentation> </xs:annotation> </xs:element> <xs:sequence minOccurs="0"> <xs:element name="vBCFCP" type="TDec_1302"> <xs:annotation> <xs:documentation>Valor da Base de cálculo do FCP.</xs:documentation> </xs:annotation> </xs:element> <xs:element name="pFCP" type="TDec_0302a04Opc"> <xs:annotation> <xs:documentation>Percentual de ICMS relativo ao Fundo de Combate à Pobreza (FCP).</xs:documentation> </xs:annotation> </xs:element> <xs:element name="vFCP" type="TDec_1302"> <xs:annotation> <xs:documentation>Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP).</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> <xs:sequence minOccurs="0"> <xs:element name="pFCPDif" type="TDec_0302a04Opc"> <xs:annotation> <xs:documentation>Percentual do diferimento do ICMS relativo ao Fundo de Combate à Pobreza (FCP).</xs:documentation> </xs:annotation> </xs:element> <xs:element name="vFCPDif" type="TDec_1302"> <xs:annotation> <xs:documentation>Valor do ICMS relativo ao Fundo de Combate à Pobreza (FCP) diferido.</xs:documentation> </xs:annotation> </xs:element> <xs:element name="vFCPEfet" type="TDec_1302" minOccurs="0"> <xs:annotation> <xs:documentation>Valor efetivo do ICMS relativo ao Fundo de Combate à Pobreza (FCP).</xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:sequence> </xs:complexType> </xs:element> ACBr: 986 cst20: 987 begin 988: xmlNode.AppendChild(AddNode(tcDe2, '#133', 'pRedBC', 1, 5, 1, 989: BPe.Imp.ICMS.pRedBC, DSC_PREDBC)); 990 991 xmlNode.AppendChild(AddNode(tcDe2, '#134', 'vBC', 1, 15, 1, ... 1024 cst90: 1025 begin 1026: xmlNode.AppendChild(AddNode(tcDe2, '#143', 'pRedBC', 1, 5, 0, 1027: BPe.Imp.ICMS.pRedBC, DSC_PREDBC)); 1028 1029 xmlNode.AppendChild(AddNode(tcDe2, '#144', 'vBC', 1, 15, 1, .... 1301 cst20: 1302 begin 1303: xmlNode.AppendChild(AddNode(tcDe2, '#133', 'pRedBC', 1, 5, 1, 1304: Imposto.ICMS.pRedBC, DSC_PREDBC)); 1305 1306 xmlNode.AppendChild(AddNode(tcDe2, '#134', 'vBC', 1, 15, 1, .... 1339 cst90: 1340 begin 1341: xmlNode.AppendChild(AddNode(tcDe2, '#143', 'pRedBC', 1, 5, 0, 1342: Imposto.ICMS.pRedBC, DSC_PREDBC)); Aparentemente não está implementado no ACBr para inserir no CST 51 o pRedBC. Por isso você informa e não está indo para o XML.
  2. Falta o percentual da redução de base de cálculo pRedBC.
  3. Parece simples, mas tenho o problema de ser funcionário, e não dono kkkk' A solução que encontrei sana o problema. Devo subir para análise de junção ao SVN?
  4. function TACBrTEFDClass.CNC(Rede, NSU: String; DataHoraTransacao: TDateTime; Valor: Double; CodigoAutorizacaoTransacao: String): Boolean; begin IniciarRequisicao('CNC'); Req.ValorTotal := Valor; Req.Rede := Rede; Req.NSU := NSU; Req.DataHoraTransacaoComprovante := DataHoraTransacao; if (CodigoAutorizacaoTransacao <> '') then Req.CodigoAutorizacaoTransacao := CodigoAutorizacaoTransacao; AdicionarIdentificacao; FinalizarRequisicao; LerRespostaRequisicao; Result := Resp.TransacaoAprovada and (Resp.QtdLinhasComprovante > 0); // solução try ProcessarResposta ; { Faz a Impressão e / ou exibe Mensagem ao Operador } finally FinalizarResposta( True ) ; { True = Apaga Arquivo de Resposta } end; end;
  5. Pude identificar o problema. ProcessarResposta limpa Frm_Main.ACBrTEFD.RespostasPendentes após impressão do cancelamento, não permitindo mais capturar a Objects[0].Sucesso. FinalizarResposta limpa Frm_Main.ACBrTEFD.Resp, voltando valores padrões onde ao acessar Resp.Sucesso já está como False. Poderia solucionar o processo retirando de FinalizarResposta o Resp.Clear, mas como há a chamada em outras partes do código, não sei qual a consequência dessa ação. function TACBrTEFDClass.CNC(Rede, NSU: String; DataHoraTransacao: TDateTime; Valor: Double; CodigoAutorizacaoTransacao: String): Boolean; begin IniciarRequisicao('CNC'); Req.ValorTotal := Valor; Req.Rede := Rede; Req.NSU := NSU; Req.DataHoraTransacaoComprovante := DataHoraTransacao; if (CodigoAutorizacaoTransacao <> '') then Req.CodigoAutorizacaoTransacao := CodigoAutorizacaoTransacao; AdicionarIdentificacao; FinalizarRequisicao; LerRespostaRequisicao; Result := Resp.TransacaoAprovada; try ProcessarResposta ; { Faz a Impressão e / ou exibe Mensagem ao Operador } finally FinalizarResposta( True ) ; { True = Apaga Arquivo de Resposta } end; end; procedure TACBrTEFDClass.ProcessarResposta ; var RespostaPendente: TACBrTEFDResp; begin VerificarIniciouRequisicao; GravaLog( Name +' ProcessarResposta: '+Req.Header ); TACBrTEFD(Owner).EstadoResp := respProcessando; if Resp.QtdLinhasComprovante > 0 then begin { Cria cópia do Objeto Resp, e salva no ObjectList "RespostasPendentes" } RespostaPendente := CriarResposta(fpTipo); try RespostaPendente.Assign( Resp ); TACBrTEFD(Owner).RespostasPendentes.Add( RespostaPendente ); ImprimirRelatorio ; with TACBrTEFD(Owner) do begin if Assigned( OnDepoisConfirmarTransacoes ) then OnDepoisConfirmarTransacoes( RespostasPendentes ); end ; finally TACBrTEFD(Owner).RespostasPendentes.Clear; // limpa as respostas pendente e não se pode mais acessar a variável Sucesso após sair da Function CNC end; end else if Resp.TextoEspecialOperador <> '' then TACBrTEFD(Owner).DoExibeMsg( opmOK, Resp.TextoEspecialOperador ) end; procedure TACBrTEFDClass.FinalizarResposta( ApagarArqResp : Boolean ); begin TACBrTEFD(Owner).EstadoResp := respConcluida; GravaLog( Name +' FinalizarResposta: '+Req.Header ); if ApagarArqResp then ApagaEVerifica( ArqResp ); Req.Clear; Resp.Clear; // limpa o Resp, retornando a variável Sucesso para False, é possível acessar o Resp.Sucesso após sair da function CNC, mas Resp não tem mais os valores da resposta end;
  6. Perdão, Juliomar. Eu não entendi, poderia explicar, por favor? Edit 1: Estou chamando a function errada?
  7. Utilizo o ACBrTEF. Bem complicado realizar uma troca nesse momento. Vou fazer uma alteração no componente para utilizar internamente apenas. Obrigado.
  8. Tudo bem? Estou utilizando o CNC para cancelar uma transação. function TACBrTEFD.CNC(const Rede, NSU: String; const DataHoraTransacao: TDateTime; const Valor: Double; CodigoAutorizacaoTransacao: String): Boolean; begin Result := fTefClass.CNC( Rede, NSU, DataHoraTransacao, Valor, CodigoAutorizacaoTransacao); end; O problema é que a função retorna True mesmo quando a transação é negada. Não está sendo possível identificar se o cancelamento foi realmente concluído.
  9. feat: adiciona novos campos ao retorno do Banco do Brasil na integração com o ACBrBoleto Alterações em ACBrBoletoRetorno.pas: - Adicionados novos campos privados e propriedades públicas: - PercentualMultaTitulo: Double - ValorJuroMoraTitulo: Currency - Atualizados métodos de cópia de propriedades (`Assign`) para incluir os novos campos Alterações em ACBrBoletoRet_BancoBrasil_API.pas: - Mapeamento dos novos campos do JSON de resposta do Banco do Brasil: - DataLimitePagto ← dataLimiteRecebimentoTitulo - DiasDeProtesto ← quantidadeDiaProtesto - ValorJuroMoraTitulo ← valorJuroMoraTitulo - PercentualMultaTitulo ← percentualMultaTitulo - Inclusão do mapeamento do sacador/avalista: - NomeAvalista ← nomeSacadorAvalistaTitulo - Pessoa ← códigoTipoInscricaoSacador (mapeado para pFisica/pJuridica) - CNPJCPF ← numeroInscricaoSacadorAvalista Essas mudanças permitem capturar e armazenar mais informações relevantes dos títulos retornados pela API do Banco do Brasil. ACBrBoletoRetorno.pas ACBrBoletoRet_BancoBrasil_API.pas
  10. Bem, nada que uma boa noite de sono não ajude. Eu fiz uma nova tentativa, consegui identificar onde o JSON é lido. Encontrei o problema. Não está implementado os campos que quero acessar: valorJuroMoraTitulo percentualMultaTitulo function TRetornoEnvio_BancoBrasil_API.LerRetorno(const ARetornoWS: TACBrBoletoRetornoWS): Boolean; ... ARetornoWS.DadosRet.TituloRet.ValorMoraJuros := LJsonObject.AsFloat['valorJuroMoraRecebido']; ARetornoWS.DadosRet.TituloRet.PercentualMulta := LJsonObject.AsFloat['valorMultaRecebido']; ... O retorno pega os valores: valorJuroMoraRecebido valorMultaRecebido Acredito que para solucionar teriam que ser criados dois novos campos em TACBrBoletoTituloRet = class, para receber também os valores de valorJuroMoraTitulo e percentualMultaTitulo de criação do título.
  11. Claro, eu tentei debuggar para localizar onde é feito tal procedimento. Mas não obtive êxito. Em TRetornoEnvioREST.RetornoEnvio, o RetornoWeb não contem nenhuma informação. Os valores são atribuídos na chamada de LerRetorno. Ao tentar debugar LerRetorno, entra em TListadeBoletos.GetObject, e não vamos para nenhum outro local. Na saída da GetObject o RetornoWeb já teve seus valores atribuídos, sendo que alguns deles, como no meu exemplo, estão com valores diferentes do JSON.
  12. Sim, apenas um boleto. Está sendo feita a consulta pelo Nosso Número, a Operação deve ser do tipo tpConsultaDetalhe. Só teria a possibilidade de retornar 2 ou mais boletos na Operação tpConsulta. Para tpConsulta deve se usar ListaConsultaRetornoWeb e para tpConsultaDetalhe deve se usar ListaRetornoWeb. O JSON de retorno, que consta ACBrBoleto1.ListaRetornoWeb[0].JSON está correto. O problema são os valores do retorno no ACBrBoleto1.ListaRetornoWeb[0].DadosRet.TituloRet, que não batem com os valores do JSON. Edit1: Eu consegui contornar o problema fazendo a leitura do JSON de retorno. Mas, acredito que possa ter alguma falha pois o componente não está sendo carregado com os valores do JSON. ACBrBoleto1.Configuracoes.WebService.Operacao := tpConsultaDetalhe; ACBrBoleto1.Enviar; JSONRetorno := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(ACBrBoleto1.ListaRetornoWeb[0].JSON), 0) as TJSONObject; vBoleto.ValorMoraJuros := StrToFloat(JSONRetorno.Get('valorJuroMoraTitulo').JsonValue.Value); ACBrBoleto1.ListaRetornoWeb[0].DadosRet.TituloRet.ValorMoraJuros; vBoleto.PercentualMulta := StrToFloat(JSONRetorno.Get('percentualMultaTitulo').JsonValue.Value); //ACBrBoleto1.ListaRetornoWeb[0].DadosRet.TituloRet.PercentualMulta; vBoleto.DiasDeProtesto := StrToInt(JSONRetorno.Get('quantidadeDiaProtesto').JsonValue.Value); // ACBrBoleto1.ListaRetornoWeb[0].DadosRet.TituloRet.DiasDeProtesto; if vBoleto.DiasDeProtesto > 0 then begin vBoleto.CodigoNegativacao := cnProtestarCorrido; vBoleto.TipoDiasProtesto := diCorridos; vBoleto.DataProtesto := StrToDate(StringReplace(JSONRetorno.Get('dataProtestoTituloCobranca').JsonValue.Value, '.', '/', [rfReplaceAll])); // ACBrBoleto1.ListaRetornoWeb[0].DadosRet.TituloRet.DataProtesto; end; vBoleto.DataLimitePagto := StrToDate(StringReplace(JSONRetorno.Get('dataLimiteRecebimentoTitulo').JsonValue.Value, '.', '/', [rfReplaceAll])); // ACBrBoleto1.ListaRetornoWeb[0].DadosRet.TituloRet.DataLimitePagto; vBoleto.Sacado.SacadoAvalista.NomeAvalista := JSONRetorno.Get('nomeSacadorAvalistaTitulo').JsonValue.Value; // ACBrBoleto1.ListaRetornoWeb[0].DadosRet.TituloRet.SacadoAvalista.NomeAvalista; vBoleto.Sacado.SacadoAvalista.Pessoa := pJuridica; vBoleto.Sacado.SacadoAvalista.CNPJCPF := FormataCNPJ(AdicionaCharEsquerda(JSONRetorno.Get('numeroInscricaoSacadorAvalista').JsonValue.Value, 14, '0')); // FormataCNPJ(AdicionaCharEsquerda(ACBrBoleto1.ListaRetornoWeb[0].DadosRet.TituloRet.SacadoAvalista.CNPJCPF, 14, '0'));
  13. Estou consultando uma cobrança via API do BB. No retorno consta JSON com valores corretos. Mas ao acessa os campos do componente os valores estão zerados.
  14. Olá. Fizemos uma integração com o TEF Elgin. Segue arquivos em anexo. Se não for a área correta, por favor, mover. Obrigado. ACBrTEFDElgin.pas ACBrTEFD.pas ACBrTEFDClass.pas
×
×
  • 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...
The popup will be closed in 10 segundos...