Ir para conteúdo
  • Cadastre-se

dev botao

Problema ao consultar cobranças COB


Ver Solução Respondido por Diego Foliene,

Recommended Posts

  • Membros Pro
Postado

Olá, pessoal! Tudo bem?

Estou com um problema na integração com a LIB ACBrPIXCD (estou utilizando a versão 2.0.1.41). Será que conseguem me ajudar, por favor?

O problema acontece quando invoco a função `PIXCD_ConsultarCobrancasCob`. Ao invocar essa função a DLL me retorna o valor de -10 (o que parece indicar que o arquivo INI está com alguma inconsistência, porém não sei dizer onde essa inconsistência está). A mensagem que acompanha o erro -10 é a seguinte: `Access Violation`. Os parâmetros que eu passo para tal função são:

ADataInicio = '02/10/2024'
ADataFim = '02/10/2024'
ACpfCnpj = '42792981067'
ALocationPresente = 0
AStatus = 1
PagAtual = 1
ItensPorPagina = 50


Caso seja necessário, posso enviar os logs que recebo ao executar a função.

  • Curtir 1
  • Consultores
Postado

Boa tarde!

1 minute ago, SisTerra Software said:

Caso seja necessário, posso enviar os logs que recebo ao executar a função.

Por favor!

Em seu arquivo ACBrLib.ini, defina na seção [Principal] um caminho em LogPath e o valor 4 em LogNivel. Este é o log da Lib.

Ainda no mesmo arquivo, na seção [PIXCD], defina um caminho e nome de arquivo em ArqLog e o valor 4 para NivelLog. Este é o log específico do PIXCD.

Por favor, disponibilize ambos os arquivos para análise.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Consultores
Postado
1 hour ago, SisTerra Software said:

Esses arquivos estão refletindo a operação que de fato apresentou o problema?

Veja que o arquivo acbr_lib_pix.log possui apenas algumas linhas e nenhuma delas é relacionada a requisição. O log foi configurado para o nível mais alto possível?

No arquivo ACBrLibPIXCD-20241003.log, o erro de Acess Violation parece ter sido devolvido quando tentou gravar as configurações.

Por favor, tente fazer um teste:

1. Renomeie seu arquivo ACBrLib.ini.

2. Inicie a aplicação, será criado um novo arquivo ACBrLib.ini em branco.

3. Utilizando o arquivo ACBrLib.ini renomeado, vá preenchendo aos poucos as configurações seguindo fluxo:

  3.1 Preencha uma seção de configuração.
  3.2 Inicie a aplicação.
  3.3 Não deu erro? Finalize a aplicação.

Va repetindo o processo até dar o erro novamente ou preencher toda a config.

Assim, pode identificar se há alguma configuração sendo preenchida com um valor inválido/incorreto.

 

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Sim, os arquivos de logs foram gerados apenas na operação que estou executando. Há uma subrotina que faz a configuração da LIB do ACBr, conforme os logs indicam.

Os logs estavam no nível 4, configurei agora para nível 5 e separei os arquivos em dois (um antes de executar a rota de consultar as cobranças do tipo COB e outro depois de executar a rotina de consultar as cobranças COB e receber o erro)

Segue os logs segregados em anexo.

Meu arquivo de configuração está assim (referente aos logs):

[Principal]
TipoResposta=0
CodificacaoResposta=0
LogNivel=5
LogPath=


[PIXCD]
Ambiente=1
NivelLog=5

Estou fazendo alguma coisa de errado?

antes_acbr_lib_pix.log antes_acbr_lib_pix_cd_20231003.log depois_acbr_lib_pix.log depois_acbr_lib_pix_cd_20231003.log

  • Consultores
Postado
15 hours ago, SisTerra Software said:

Sim, os arquivos de logs foram gerados apenas na operação que estou executando. Há uma subrotina que faz a configuração da LIB do ACBr, conforme os logs indicam.

Os logs estavam no nível 4, configurei agora para nível 5 e separei os arquivos em dois (um antes de executar a rota de consultar as cobranças do tipo COB e outro depois de executar a rotina de consultar as cobranças COB e receber o erro)

Segue os logs segregados em anexo.

Meu arquivo de configuração está assim (referente aos logs):

[Principal]
TipoResposta=0
CodificacaoResposta=0
LogNivel=5
LogPath=


[PIXCD]
Ambiente=1
NivelLog=5

Estou fazendo alguma coisa de errado?

antes_acbr_lib_pix.log 197 B · 0 downloads antes_acbr_lib_pix_cd_20231003.log 14.29 kB · 0 downloads depois_acbr_lib_pix.log 75 B · 0 downloads depois_acbr_lib_pix_cd_20231003.log 321 B · 0 downloads

Bom dia!

Parece estar em ordem.

Por favor, envie para [email protected]  o seu arquivo ACBrLib.ini para que eu possa fazer um teste com o exemplo do C# e do Java em meu ambiente carregando ele e vendo se também recebo o mesmo erro.

Não se esqueça de colocar no corpo do e-mail o link do tópico do fórum para posterior identificação.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Consultores
Postado
1 hour ago, SisTerra Software said:

Beleza, Diego!

Acabei de enviar o email com os dados solicitados.

Arquivo recebido, faremos alguns testes e reportamos assim que descobrirmos algo.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Consultores
Postado
5 hours ago, SisTerra Software said:

Beleza, Diego!

Acabei de enviar o email com os dados solicitados.

Boa tarde.

Fiz um teste em meu ambiente onde carreguei as configurações do arquivo INI que disponibilizou tanto no exemplo em C# quanto no exemplo em Java.

Em ambos apresentou erro.

21 hours ago, SisTerra Software said:
[Principal]
TipoResposta=0
CodificacaoResposta=0
LogNivel=5
LogPath=


[PIXCD]
Ambiente=1
NivelLog=5

Estou fazendo alguma coisa de errado?

O valor 5 para ambos LogNivel e NivelLog estão incorretos. 4 é o valor mais alto em ambos os casos.

Após corrigir o valor em ambos, os exemplos carregaram e salvaram as configurações sem apresentar erro.

Por favor, corrija o valor e veja se ele ainda apresenta erro para você e caso afirmativo, veja se o log trás informações mais detalhadas.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado (editado)

Boa tarde, Diego!

Fiz os testes alterando o nível de log para 4 e continuou apresentando o mesmo problema. O problema de Access Violation acontece aqui para mim independente dessa configuração (seja ela 4 ou 5).

Fiz mais testes e passei o parâmetro 'AStatus' (PIXCD_ConsultarCobrancasCob (sourceforge.io)) como String, ao invés de Integer (como instrui a documentação) e o erro de Access Violation parou de ser apresentado.

Porém, agora recebo o retorno '-10' com a mensagem de erro dizendo "CPF deve ter 11 dígitos. (Apenas números)". Quando fui conferir o que passei no parâmetro 'ACpfCnpj' notei que o valor corresponde a essa validação (estou passando o valor '42792981067') está correto.

Nesse caso, o que fazer?

Editado por SisTerra Software
  • Consultores
Postado
1 hour ago, SisTerra Software said:

CPF deve ter 11 dígitos. (Apenas números)"

Conferindo no log, é gerada uma entrada  PIX_CDConsultarCobrancasCobV? Se sim, qual é o valor que consta no mesmo?

O valor do parâmetro foi passado sem espaçamentos?

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Diego, há a seguinte entrada no log:
 

04/10/24 18:02:29:635 - PIXCD_ConsultarCobrancasCob(30/12/1899,30/12/1899,1,-1,,0,1699904 )
04/10/24 18:02:29:642 - Travar
04/10/24 18:02:29:953 - Destravar
04/10/24 18:02:29:953 -    ConverterStringSaida: CPF deve ter 11 d[195][131][194][173]gitos. (Apenas n[195][131][194][186]meros) -> CPF deve ter 11 d[195][173]gitos. (Apenas n[195][186]meros)
04/10/24 18:02:30:001 -    SetRetorno(-10, CPF deve ter 11 dígitos. (Apenas números))
04/10/24 18:02:30:007 - LIB_UltimoRetorno
04/10/24 18:02:30:009 -    ConverterStringSaida: CPF deve ter 11 d[195][173]gitos. (Apenas n[195][186]meros) -> CPF deve ter 11 d[237]gitos. (Apenas n[250]meros)
04/10/24 18:02:30:098 -    MoverStringParaPChar. StrLen:41, BufLen:1024
04/10/24 18:02:30:181 -    Codigo:-10, Mensagem:CPF deve ter 11 d[237]gitos. (Apenas n[250]meros)
04/10/24 18:02:33:170 - TACBrLib.Destroy
04/10/24 18:02:33:171 - Finalizar

 

  • Curtir 1
  • Consultores
Postado
On 10/4/2024 at 6:04 PM, SisTerra Software said:

Diego, há a seguinte entrada no log:
 

04/10/24 18:02:29:635 - PIXCD_ConsultarCobrancasCob(30/12/1899,30/12/1899,1,-1,,0,1699904 )
04/10/24 18:02:29:642 - Travar
04/10/24 18:02:29:953 - Destravar
04/10/24 18:02:29:953 -    ConverterStringSaida: CPF deve ter 11 d[195][131][194][173]gitos. (Apenas n[195][131][194][186]meros) -> CPF deve ter 11 d[195][173]gitos. (Apenas n[195][186]meros)
04/10/24 18:02:30:001 -    SetRetorno(-10, CPF deve ter 11 dígitos. (Apenas números))
04/10/24 18:02:30:007 - LIB_UltimoRetorno
04/10/24 18:02:30:009 -    ConverterStringSaida: CPF deve ter 11 d[195][173]gitos. (Apenas n[195][186]meros) -> CPF deve ter 11 d[237]gitos. (Apenas n[250]meros)
04/10/24 18:02:30:098 -    MoverStringParaPChar. StrLen:41, BufLen:1024
04/10/24 18:02:30:181 -    Codigo:-10, Mensagem:CPF deve ter 11 d[237]gitos. (Apenas n[250]meros)
04/10/24 18:02:33:170 - TACBrLib.Destroy
04/10/24 18:02:33:171 - Finalizar

 

Bom dia!

Conferindo no fonte da Lib, esta é a ordem de parâmetros para este método na Lib:

PIXCD_ConsultarCobrancasCob(ADataInicio,ADataFim,CpfCnpj,ALocationPresente,status,PagAtual,ItensPorPagina)

Transcrevendo a chamada do seu Log, fica:

PIXCD_ConsultarCobrancasCob(
<ADataInicio>: 30/12/1899,
<ADataFim>: 30/12/1899,
<CpfCNPJ>: 1,
ALocationPresente>: -1,
<status>: ,
<PagAtual>: 0,
<ItensPorPagina>: 1699904 )

Por favor, reveja a sua rotina e confirme se os valores passados estão sendo transmitidos para a Lib.

Tente fazer um teste com o exemplo também.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado (editado)

Bom dia, Diego, vou colocar aqui o trecho de código onde eu chamo essa função

local cFunction := 'PIXCD_ConsultarCobrancasCob'
local ADataInicio := '02/10/2024'
local ADataFim := '03/10/2024'
local ACpfCnpj := '42792981067'
local ALocationPresente := 0
local AStatus := '1'
local PagAtual := '1'
local ItensPorPagina := '50'
local sResposta := ''
local esTamanho := 0

nResult := dllCall(self:nHandle, self:nCallingConvention, cFunction, ADataInicio, ADataFim, ACpfCnpj, ALocationPresente, AStatus, PagAtual, ItensPorPagina, @sResposta, @esTamanho)

Note que a função `dllCall` que faz a comunicação com a DLL. A partir do quarto parâmetro que podemos verificar o que é passado como parâmetro para a função `PIXCD_ConsultarCobrancasCob`.

O que eu não consegui entender são os valores que são apresentados no log. Note que os valores que eu passei não tem relação nenhuma com o que aparece nos logs. Eu uso essa mesma função `dllCall` para fazer chamada de todas as outras funções disponíveis na DLL, mas parece que essa em especial está com um comportamento bem fora do esperado.

Aproveitei e isolei os arquivos de log somente para a execução da rotina com os valores definidos acima. Os logs estão em anexo

 

acbr_lib_pix.log ACBrLibPIXCD-20241007.log

Editado por SisTerra Software
  • Curtir 1
  • Consultores
Postado
11 minutes ago, SisTerra Software said:

O que eu não consegui entender são os valores que são apresentados no log. Note que os valores que eu passei não tem relação nenhuma com o que aparece nos logs

Realmente, não tem mesmo.

Um ponto que vale destacar é que as datas 30/12/1899 correspondem a data "zero", o que quer dizer que a Lib não está recebendo os valores.

Não domino a sua linguagem, mas pelo que pude averiguar, ela faz uso de tipagem dinâmica.

Por favor, faça um teste forçando os valores para os tipos esperados pelo método.

De acordo com o GPT, ficaria assim:

local cFunction := 'PIXCD_ConsultarCobrancasCobV'
local ADataInicio := CTOD('02/10/2024') // Converte uma string para data
local ADataFim := CTOD('03/10/2024')    // Converte uma string para data
local ACpfCnpj := '42792981067'
local ALocationPresente := .F.          // Valor booleano (False)
local AStatus := '1'
local PagAtual := '1'
local ItensPorPagina := 50              // Valor numérico
local sResposta := ''
local esTamanho := 0

nResult := dllCall(self:nHandle, self:nCallingConvention, cFunction, ADataInicio, ADataFim, ACpfCnpj, ALocationPresente, AStatus, PagAtual, ItensPorPagina, @sResposta, @esTamanho)

 Conferindo nos exemplos disponibilizados por membros da comunidade em nosso SVN, também é possível observar que nos parâmetros de string, é utilizado este método hb_StrToUTF8 no parâmetro.

Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • Membros Pro
Postado

Diego, tentei tratar as tipagens conforme sua sugestão e não obtive sucesso.

Olhei o código de exemplo de uso da lib de PIX via JAVA, e lá notei que as datas são tipadas como double. Será que o comportamento esperado da lib não é esse (receber esses valores como numérico). Digo isso porque na documentação da lib ela diz que espera um valor do tipo 'Date', mas eu entendo que não existe um tipo primitivo para 'Date' que possa ser usado na comunicação com a DLL. Se o código de exemplo de Java está como double, acredito que esse seja o comportamento. Pode confirmar isso para mim, por favor? Se for esse o comportamento esperado, em qual formato eu devo passar esse valor numérico?

Código Java de exemplo: svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/Java/PIXCD/Demo/ACBrLibPIXCD.Demo/src/com/acbr/pixcd/demo/FrmMain.java

Consultar métodos: btnConsultarCobrancasCobActionPerformed e btnConsultarCobrancasCobVActionPerformed

  • Consultores
Postado
Em 07/10/2024 at 16:59, SisTerra Software disse:

Diego, tentei tratar as tipagens conforme sua sugestão e não obtive sucesso.

Olhei o código de exemplo de uso da lib de PIX via JAVA, e lá notei que as datas são tipadas como double. Será que o comportamento esperado da lib não é esse (receber esses valores como numérico). Digo isso porque na documentação da lib ela diz que espera um valor do tipo 'Date', mas eu entendo que não existe um tipo primitivo para 'Date' que possa ser usado na comunicação com a DLL. Se o código de exemplo de Java está como double, acredito que esse seja o comportamento. Pode confirmar isso para mim, por favor? Se for esse o comportamento esperado, em qual formato eu devo passar esse valor numérico?

Código Java de exemplo: svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/Java/PIXCD/Demo/ACBrLibPIXCD.Demo/src/com/acbr/pixcd/demo/FrmMain.java

Consultar métodos: btnConsultarCobrancasCobActionPerformed e btnConsultarCobrancasCobVActionPerformed

@SisTerra Software
Bom dia ! 
Qual PSP esta utilizando ? Ambiente homologação ou produção ?
Esta utilizando a ultima versão do ACBrLibPIXCD ? Qual convenção de chamada (cdecl/stdcall) ? ACBrLib em qual versão ? x86 ou x64 ?
Esta utilizando ACBrLib SingleThread ou MultiThread ?
Veja que o programa exemplo esta utilizando a classe convertDateToTDateTime, implementado no ACBrLibBase.java, onde o mesmo converte um objeto do tipo Date em um double compatível com o TDateTime do Pascal.
Esta com o programa exemplo 100% atualizado?

 

  • Curtir 1
  • Consultores
  • Solution
Postado

Bom dia!

Acredito que isso seja uma particularidade da linguagem que está consumindo a dll.

Veja como é feito no exemplo em C#:

public string ConsultarCobrancasCob(DateTime ADataInicio, DateTime ADataFim, string ACpfCnpj, Boolean ALocationPresente, int AStatus, int PagAtual, int ItensPorPagina)
{
  var bufferLen = BUFFER_LEN;
  var buffer = new StringBuilder(bufferLen);

  var method = GetMethod<PIXCD_ConsultarCobrancasCob>();
  var ret = ExecuteMethod(() => method(ADataInicio, ADataFim, ToUTF8(ACpfCnpj), ALocationPresente, AStatus, PagAtual, ItensPorPagina, buffer, ref bufferLen));

  CheckResult(ret);

  return ProcessResult(buffer, bufferLen);
}

Por isso, se possível, faça um teste definindo a tipagem no método em que consome a Lib em sua linguagem.

  • Curtir 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

  • 5 semanas depois ...
  • Membros Pro
Postado

Olá, pessoal!

Me desculpem pela demora para dar um feedback sobre esse assunto.

Eu refiz a comunicação com a LIB, mas dessa vez em PHP, e consegui definir as tipagens corretamente conforme orientação do @antonio.carlos (no que diz respeito à forma de representar uma variável de tipo DATE para o formato que o PASCAL/DELPHI sabe lidar).

No xHarbour/Harbour, linguagem que estava integrando antes, não há forma de definir os tipos das variáveis que são passadas para a LIB, então não tínhamos um bom controle sobre isso. Portanto, avaliamos que fazer a implementação em outra tecnologia seria melhor para o caso.

 

Muito obrigado pela ajuda prestada @Diego Foliene e @antonio.carlos!

  • Curtir 2
  • Consultores
Postado

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

  • Curtir 1
Consultor SAC ACBr

Diego Folieni
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil


Participe de nosso canal no Discord e fique ainda mais próximo da Comunidade !!

Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.