toya Posted January 4, 2022 Report Share Posted January 4, 2022 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 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.