Ir para conteúdo
  • Cadastre-se

dev botao

PIXCD_ConsultarPixRecebidos/Harbour gerando data maluca


Ver Solução Respondido por Júlio Cavalcanti,

Recommended Posts

  • Membros Pro
Postado

Boa Tarde pessoal,

Ao tentar executar o PIXCD_ConsultarPixRecebidos Assim:

cData1 := "2024-12-04T00:00:00.000"
cData2 := "2024-12-04T23:59:00.000"
PIXCD_ConsultarPixRecebidos(cData1,cData2,"","",nPag,nIt,@cBuf,@nLen))

ou assim:

cData1 := "2024-12-04"
cData2 := "2024-12-04"
PIXCD_ConsultarPixRecebidos(cData1,cData2,"","",nPag,nIt,@cBuf,@nLen))

Está aparecendo o seguinte no log:

04/12/24 16:07:45:127 - PIXCD_ConsultarPixRecebidos(30/12/1899,30/12/1899,,,1,30 )
04/12/24 16:07:45:137 - Travar
04/12/24 16:07:46:623 -    MoverStringParaPChar. StrLen:376, BufLen:255
04/12/24 16:07:46:623 -    SetRetorno(0, [Problema]
Detail=os parâmetros de consulta a  lista de pix recebidos não respeitam o schema ou não fazem sentido semanticamente.
Status=400
Title=Operação inválida.
correlationId=
type_uri=https://pix.bcb.gov.br/api/v2/error/PixConsultaInvalida

ou seja, uma data 30/12/1899 ?!?

  • Membros Pro
Postado

Bom dia Juliomar,
Mas eu não estou deixando de passar esses parâmetros. Estou passando eles vazios.

 

  • Membros Pro
Postado

Alguma ideia para resolver essa situação com as datas ?  Seria possível passar uma string para essa data ?

  • Membros Pro
Postado (editado)

mas qual informação passo ai, se o que quero é consultar as transações de um período?

E no que isso interfere nas datas que estou enviando umas e a função recebendo outras?!?

 

Editado por VFADev
  • Consultores
Postado
Em 04/12/2024 at 17:17, VFADev disse:

Boa Tarde pessoal,

Ao tentar executar o PIXCD_ConsultarPixRecebidos Assim:

cData1 := "2024-12-04T00:00:00.000"
cData2 := "2024-12-04T23:59:00.000"
PIXCD_ConsultarPixRecebidos(cData1,cData2,"","",nPag,nIt,@cBuf,@nLen))

ou assim:

cData1 := "2024-12-04"
cData2 := "2024-12-04"
PIXCD_ConsultarPixRecebidos(cData1,cData2,"","",nPag,nIt,@cBuf,@nLen))

Está aparecendo o seguinte no log:

04/12/24 16:07:45:127 - PIXCD_ConsultarPixRecebidos(30/12/1899,30/12/1899,,,1,30 )
04/12/24 16:07:45:137 - Travar
04/12/24 16:07:46:623 -    MoverStringParaPChar. StrLen:376, BufLen:255
04/12/24 16:07:46:623 -    SetRetorno(0, [Problema]
Detail=os parâmetros de consulta a  lista de pix recebidos não respeitam o schema ou não fazem sentido semanticamente.
Status=400
Title=Operação inválida.
correlationId=
type_uri=https://pix.bcb.gov.br/api/v2/error/PixConsultaInvalida

ou seja, uma data 30/12/1899 ?!?

Parece que a data não está sendo interpretada corretamente.

  • Membros Pro
Postado

Boa Tarde Julio,
Sim, parece ser esse realmente o problema que estou tendo.  Como eu poderia usar essa função ?  ela está disponível em alguma biblioteca ACBr?

  • Consultores
Postado
30 minutos atrás, VFADev disse:

Boa Tarde Julio,
Sim, parece ser esse realmente o problema que estou tendo.  Como eu poderia usar essa função ?  ela está disponível em alguma biblioteca ACBr?

Então, essa eu implementei em Java. Eu não domino Harbour, mas tu pode olhar como está em Java e passar para o Harbour.

Essa implementação é bem simples.

Tu vai receber o objeto do tipo Date (do Harbour) usar um método semelhante ao getTime (do Java), realizar a operação matemática para converter e devolver esse double.

  • Membros Pro
Postado
Em 06/12/2024 at 21:17, rossine disse:

Olá,

Pelo que está documentado, os parâmetros devem ser no formato Data, então talvez deva ter que usar a função abaixo nas datas.

No harbour, temos a função hb_DateTime() que faz isto.

Neste link tem explicando como usar ela e outra funções que manipulam data e time

http://www.pctoledo.com.br/forum/viewtopic.php?f=42&t=25634

Veja se isto te ajuda.

 

Usando a função Hb_DateTime() pra passar a data como parâmetro para a função, temos isso no log.

dData1 := HB_DateTime(Year(Date()),Month(Date()),Day(Date()))
? dData1 // exibe 09/12/2024 10:06:51
nRet := PIXCD_ConsultarPixRecebidos(dData1,dData1,"","",1,30,@cbuf,nLen)

09/12/24 10:02:51:120 - PIXCD_ConsultarPixRecebidos(30/12/1899,30/12/1899,,,1,30 )

 

  • Membros Pro
Postado

Olá,

Pelo que está documentado, os parâmetros devem ser no formato Data, então talvez deva ter que usar a função abaixo nas datas.

No harbour, temos a função hb_DateTime() que faz isto.

Neste link tem explicando como usar ela e outra funções que manipulam data e time

http://www.pctoledo.com.br/forum/viewtopic.php?f=42&t=25634

Veja se isto te ajuda.

 

Olá, 

Talvez então passar somente data,por exemplo:

Date() ou ctod("09/12/2024")

Temte isto.

  • Curtir 1
  • Membros Pro
Postado
5 minutos atrás, rossine disse:

Olá,

Pelo que está documentado, os parâmetros devem ser no formato Data, então talvez deva ter que usar a função abaixo nas datas.

No harbour, temos a função hb_DateTime() que faz isto.

Neste link tem explicando como usar ela e outra funções que manipulam data e time

http://www.pctoledo.com.br/forum/viewtopic.php?f=42&t=25634

Veja se isto te ajuda.

 

Olá, 

Talvez então passar somente data,por exemplo:

Date() ou ctod("09/12/2024")

Temte isto.

Se vc der uma olhada um pouco acima, já fiz vários testes com os valores assim. Acredito que o problema seja mesmo de conversão de data, mas ainda não encontrei uma função que gere o valor como a biblioteca ACBr está esperando...

  • Consultores
Postado
29 minutos atrás, VFADev disse:

Se vc der uma olhada um pouco acima, já fiz vários testes com os valores assim. Acredito que o problema seja mesmo de conversão de data, mas ainda não encontrei uma função que gere o valor como a biblioteca ACBr está esperando...

Tu deu uma olhada na implementação do Java?

Seria algo como:

public double convertDateToTDateTime(Date date) {
    // Obtém o timestamp Unix em milissegundos
    long unixMillis = date.getTime();
    // Converte o timestamp para TDateTime
    double pascalDateTime = unixMillis / 86400000.0 + 25569.0;
	return pascalDateTime;
}
  • Membros Pro
Postado
15 minutos atrás, Júlio Cavalcanti disse:

Tu deu uma olhada na implementação do Java?

Seria algo como:

public double convertDateToTDateTime(Date date) {
    // Obtém o timestamp Unix em milissegundos
    long unixMillis = date.getTime();
    // Converte o timestamp para TDateTime
    double pascalDateTime = unixMillis / 86400000.0 + 25569.0;
	return pascalDateTime;
}

Sim, adaptei esse código para o Harbour:
 

FUNCTION convertDateToTDateTime() 
LOCAL unixMillis,pascalDateTime
    // Obtém o timestamp Unix em milissegundos 
    unixMillis := hb_TToMSec( hb_DateTime() )

   // Converte o timestamp para TDateTime 
   pascalDateTime := (unixMillis / 86400000.0) + 25569.0 
return pascalDateTime

Mas no log está aparecendo assim:
09/12/24 11:20:24:059 - PIXCD_ConsultarPixRecebidos(17/01/8707,17/01/8707,,,1,30 )

 
  • Membros Pro
Postado

Vcs saberiam me dizer qual a data inicial considerada pelas bibliotecas ACbr?

Microsoft' Ole sources count date/time from epoch Jan 1, 1900 00 hours
Unix / java/ etc start with Jan 1 1970 00 hours

  • Consultores
Postado

O Fluxo abstraído é:

  1. Use algum método que converte a data de um objeto Date para um timestamp Unix. 
  2. Multiplica o timestamp por 1000, para converter de segundos para milissegundos.
  3. realiza a operação timestamp em milissegundos/ 86400000.0 + 25569.0 para tornar compatível com o pascal.
  4. E o resultado da operação acima tu vai informar como parâmetro no método da lib.

Tente usar esse 45267.0 como parâmetro do método e veja o que sai no log.

  • Membros Pro
Postado
2 horas atrás, Júlio Cavalcanti disse:

O Fluxo abstraído é:

  1. Use algum método que converte a data de um objeto Date para um timestamp Unix. 
  2. Multiplica o timestamp por 1000, para converter de segundos para milissegundos.
  3. realiza a operação timestamp em milissegundos/ 86400000.0 + 25569.0 para tornar compatível com o pascal.
  4. E o resultado da operação acima tu vai informar como parâmetro no método da lib.

Tente usar esse 45267.0 como parâmetro do método e veja o que sai no log.

Valeu Julio,
Consegui achar uma função que converte o timestamp pra Unix e agora as data já estão sendo lidas ok pelo método. Ficou assim o código:

dData1 := hb_DateTime(Year(dData1), Month(dData1), Day(dData1), 00, 00,00,00)
   unixMillis := FW_DateToUnix( dData1 )
   dData1 := (unixMillis / 86400000.0) + 25569.0
   
   dData2 := hb_DateTime(Year(dData2), Month(dData2), Day(dData2), 23, 59,59,999)
   unixMillis := FW_DateToUnix( dData2 )
   dData2 := (unixMillis / 86400000.0) + 25569.0

   IF (nRet := PIXCD_ConsultarPixRecebidos(dData1,dData2,"","",1,30,@cbuf,nLen)) == 0
      IF nLen > 255
         cBuf := Space(nLen)
         PIXCD_UltimoRetorno(@cBuf, @nLen)        
      ENDIF  
   ENDIF  

No log não apareceu mais nenhum erro:

09/12/24 14:43:06:096 - PIXCD_ConsultarPixRecebidos(04/12/2024,09/12/2024,,,1,30 )
09/12/24 14:43:06:097 - Travar
09/12/24 14:43:08:094 -    MoverStringParaPChar. StrLen:209, BufLen:255
09/12/24 14:43:08:094 -    SetRetorno(0, [ConsultarPIXRecebidos]
TxId=
TxIdPresente=0
cnpj=
cpf=
devolucaoPresente=0
fim=09/12/2024 23:59:59
inicio=04/12/2024
itensPorPagina=30
paginaAtual=1
quantidadeDePaginas=1
quantidadeTotalDeItens=5

Mas, não vieram as transações !  e no log diz ter 5 transações, que é mais ou menos a quantidade de testes que fiz. nesse periodo.

  • Consultores
Postado
7 minutos atrás, VFADev disse:

Valeu Julio,
Consegui achar uma função que converte o timestamp pra Unix e agora as data já estão sendo lidas ok pelo método. Ficou assim o código:

dData1 := hb_DateTime(Year(dData1), Month(dData1), Day(dData1), 00, 00,00,00)
   unixMillis := FW_DateToUnix( dData1 )
   dData1 := (unixMillis / 86400000.0) + 25569.0
   
   dData2 := hb_DateTime(Year(dData2), Month(dData2), Day(dData2), 23, 59,59,999)
   unixMillis := FW_DateToUnix( dData2 )
   dData2 := (unixMillis / 86400000.0) + 25569.0

   IF (nRet := PIXCD_ConsultarPixRecebidos(dData1,dData2,"","",1,30,@cbuf,nLen)) == 0
      IF nLen > 255
         cBuf := Space(nLen)
         PIXCD_UltimoRetorno(@cBuf, @nLen)        
      ENDIF  
   ENDIF  

No log não apareceu mais nenhum erro:

09/12/24 14:43:06:096 - PIXCD_ConsultarPixRecebidos(04/12/2024,09/12/2024,,,1,30 )
09/12/24 14:43:06:097 - Travar
09/12/24 14:43:08:094 -    MoverStringParaPChar. StrLen:209, BufLen:255
09/12/24 14:43:08:094 -    SetRetorno(0, [ConsultarPIXRecebidos]
TxId=
TxIdPresente=0
cnpj=
cpf=
devolucaoPresente=0
fim=09/12/2024 23:59:59
inicio=04/12/2024
itensPorPagina=30
paginaAtual=1
quantidadeDePaginas=1
quantidadeTotalDeItens=5

Mas, não vieram as transações !  e no log diz ter 5 transações, que é mais ou menos a quantidade de testes que fiz. nesse periodo.

Tente informar 0 na paginaAtual

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