Jump to content
Fivewin Brasil

Bug Ano 2022


toya

Recommended Posts

Para quem utiliza e/ou integra vossa aplicação com uma DLL Delphi na qual é utilizada a função FormatDateTime('yymmddhhmm', Now), deve estar se deparando com um erro do tipo: <numero> is not a valid integer value.
Adotei a seguinte solução, digo isto para quem tem acesso à recompilação da tal DLL,:
Todo <idLote> que adota este controle sequencial via DLL será tratado como um parâmetro que será gerado pela minha aplicação.
Isto é em razão do <idLote> ser "Número seqüencial autoincremental único para identificação do Lote." conforme reza nos MOC de alguns DFe.

Podendo também, para quem achar util, utilizar a função abaixo para adotar como sequencial sem a exigência do "anterior + 1"...

 

function BugAno2022Sequencial(dData, cTime)
// #toya: 05/01/2022 - 07:00:00 - JOB#NFe - Projeto Mrb

	local Result := ""
	local n0 := 0
	local n31122021 := 211231
	local nDifBug := 0
	local cDia := ""
	local cMes := ""
	local cAno := ""
	local cData := ""
	local cHora := ""
	local cMinutos := ""

	DEFAULT dData := date()
	DEFAULT cTime := time()

	cDia := strzero(day(dData), 2, 0)
	cMes := strzero(month(dData), 2, 0)
	cAno := strzero(year(dData), 4, 0)
	cData := substr(cAno, 3) + cMes + cDia 
	cHora := left(cTime, 2)
	cMinutos := substr(cTime, 4, 2)

	if dData >= ctod("01/01/2022")
		n0 := val(cData)
		nDifBug := n0 - n31122021
		Result := strzero(n31122021 + nDifBug - 8869, 6, 0) + cHora + cMinutos
	else
		Result := strzero(val(cData), 6, 0) + cHora + cMinutos
	endif 	
	
return Result 	

Com um pedido de desculpa aos colegas, estou alterando o PRG com os devidos ajustes.

Segue abaixo a função para efetuar o retorno de um array contendo a Data e a Hora/Minuto a que se refere o Sequencial informado...

 

function BugAno2022RestDataHora(pcSequencial)
// #toya: 05/01/2022 - 07:00:00 - JOB#NFe - Projeto Mrb

	local Result := {ctod(""),"00:00:00"}
	local cAux := ""

	DEFAULT pcSequencial := ""

	pcSequencial := alltrim(pcSequencial)
	if len(pcSequencial) <> 10
		msgstop("Sequencial invalido.", "AVISO")
		return Result
	endif	
	cAux := left(pcSequencial, 6)
	if cAux <= "211231"
		Result := {ctod(substr(cAux, 5, 2) + "/" + substr(cAux, 3, 2) + "/" + "20" + left(cAux, 2)), substr(pcSequencial, 7, 2) + ":" + substr(pcSequencial, 9, 2) + ":00" }
	else 	
		Result := {ctod("31/12/2021") + val(cAux) - 211231, substr(pcSequencial, 7, 2) + ":" + substr(pcSequencial, 9, 2) + ":00" }
	endif 	

return Result  	

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...