miragerr Posted February 18, 2015 Report Share Posted February 18, 2015 Ola amigos boa noite, Existe alguma função em que possa informar uma data, por exemplo: 2015-02-17T20:03:42-04:00 --> esta hora é de retorno da NFe O que quero na realidade é saber quantas horas tem entre a data e hora de emissão de uma NFe com a data e hora do sistema atual. Fico no aguardo. WelchDats 1 Quote Link to comment Share on other sites More sharing options...
HERGON Posted February 18, 2015 Report Share Posted February 18, 2015 Boa tarde Miragerr Se seu objetivo é cancelamento de NF-e, eu fiz assim, talvez te ajude: nDias:= Date()-Ctod(Subs(CabNf->DTRET,9,2)+"/"+Subs(CabNf->DTRET,6,2)+"/"+Subs(CabNf->DTRET,1,4)) cHora:= Subs(CabNf->DTRET,12,8) If nDias>1 .or. (nDias=1 .and. Secs(Elaptime(cHora,"23:59:59"))+Secs(Elaptime("00:00:00",Time()))>86400) If !MsgYesNo("Nota fiscal fora do prazo legal para cancelamento."+CRLF+; "Se deseja realmente cancelar esta NF, é necessário primeiro solicitar o cancelamento EXTEMPORÂNEO pelo"+CRLF+; "site da Secretaria da Fazenda (SEFAZ) do seu estado."+CRLF+; "Caso já tenha solicitado o cancelamento extemporâneo, deseja continuar o cancelamento?",; "Prazo Para Cancelamento Terminado") Return .t. Endif Endif Herberson Gontijo Quote Link to comment Share on other sites More sharing options...
sambomb Posted February 18, 2015 Report Share Posted February 18, 2015 /*************************************************************************** * Programa ....: DateTime.PRG * Autor .......: Samir * Date ........: 2/3/2010 às 10:30:13 * Revisado em .: 2/3/2010 às 10:30:13 * * Classe para tratar uma Date e Time em conjunto * ***************************************************************************/ #include 'FiveWin.ch' CLASS TDateTime //-- Propriedades -----------------------------------------------------// //-- Atributos a serem acessados DATA Date AS Date INIT Date() READONLY DATA Time AS Character INIT Time() READONLY DATA Secs AS Numeric Init 0 READONLY //-- Uso interno da classe DATA nSecsMinute AS Numeric Init 0 HIDDEN DATA nSecsHour AS Numeric Init 0 HIDDEN DATA nSecsDay AS Numeric Init 0 HIDDEN DATA nSecsMonth AS Numeric Init 0 HIDDEN DATA nSecsYear AS Numeric Init 0 HIDDEN //-- Métodos ----------------------------------------------------------// //-- Construção METHOD New(cDateIni,cTimeIni) CONSTRUCTOR METHOD End() METHOD Absolute(dDateReference) //-- Uso Interno METHOD Verify() HIDDEN METHOD UpdateVar() HIDDEN //-- Modificar atributos da classe METHOD SetDate(dDate) INLINE ( ::Date := dDate ) METHOD SetTime(cTime) INLINE ( ::Time := cTime, ::Secs := Secs(cTime) ) //-- Add Time METHOD AddHour(nTime) //PUBLIC METHOD AddMinute(nMinute) //PUBLIC METHOD AddSecond(nSecond) //PUBLIC //-- Add Date METHOD AddDay(nDay) //PUBLIC METHOD AddMonth(nMonth) //PUBLIC METHOD AddYear(nYear) //PUBLIC //-- Remove Tempo METHOD RemHour(nTime) //PUBLIC METHOD RemMinute(nMinute) //PUBLIC METHOD RemSecond(nSecond) //PUBLIC //-- Remove Date METHOD RemDay(nDay) //PUBLIC METHOD RemMonth(nMonth) //PUBLIC METHOD RemYear(nYear) //PUBLIC //-- Compatibilidade ( Aceitar comandos no plural ) -------------------// //-- Add Tempo METHOD AddHours(nHour) INLINE ::AddHour(nHour) METHOD AddMinutes(nMinute) INLINE ::AddMinute(nMinute) METHOD AddSeconds(nSecond) INLINE ::AddSecond(nSecond) //-- Add Date METHOD AddDays(nDay) INLINE ::AddDays(nDay) METHOD AddMonths(nMonth) INLINE ::AddMonth(nMonth) METHOD AddYears(nYear) INLINE ::AddYear(nYear) //-- Remove Tempo METHOD RemHour(nHour) INLINE ::RemHour(nHour) METHOD RemMinutes(nMinute) INLINE ::RemMinute(nMinute) METHOD RemSeconds(nSecond) INLINE ::RemSecond(nSecond) //-- Remove Date METHOD RemDays(nDay) INLINE ::RemDay(nDay) METHOD RemMonths(nMonth) INLINE ::RemMonth(nMonth) METHOD RemYears(nYear) INLINE ::RemYear(nYear) ENDCLASS /*------------------------------------------------------------------------*/ **************************************************************************** METHOD New(xDateIni,cTimeIni) CLASS TDateTime **************************************************************************** * * Initiate the object * Parametros: Nenhum * Retorno: Self (Object) * * Autor .......: Samir * Date ........: 2/3/2010 às 10:30:20 * **************************************************************************** Default xDateIni := Date(), cTimeIni := Time() If ValType(xDateIni) = "C" ::Date := cTod(xDateIni) elseif ValType(xDateIni) = "D" ::Date := xDateIni else ::Date := Date() end ::Time := cTimeIni ::Secs := Secs(cTimeIni) ::nSecsMinute := 60 //-- FIXO ::nSecsHour := ::nSecsMinute * 60 //-- FIXO ::nSecsDay := ::nSecsHour * 24 //-- FIXO //-- Atualizar Seconds do Month/Year ::UpdateVar() return Self /*------------------------------------------------------------------------*/ **************************************************************************** METHOD End() CLASS TDateTime **************************************************************************** * * Release the object from memory * Parametros: Nenhum * Retorno: Nil * * Autor .......: Samir * Date ........: 2/3/2010 às 10:30:20 * **************************************************************************** Self := Nil return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD UpdateVar() CLASS TDateTime **************************************************************************** * * Update the second counting vars * Parametros: * Retorno: Nil * * Autor: Samir * 2/3/2010 - 13:52:18 * **************************************************************************** ::nSecsMonth := ::nSecsDay * LastDay(::Date) ::nSecsYear := ::nSecsDay * If ( IsBissexto(::Date), 366, 365 ) return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD Verify() CLASS TDateTime **************************************************************************** * * Verify if happen and Date update based on the Seconds * Parametros: Nenhum * Retorno: Nil * * Autor .......: Samir * Date ........: 2/3/2010 às 10:30:20 * **************************************************************************** Local lRewind := .F. //-- Verify if is negative or positive If ::Secs < 0 lRewind := .T. ::Secs := Abs(::Secs) end //-- Increase If !lRewind //-- Verify if increase one Day While ::Secs > ::nSecsDay ::Secs -= ::nSecsDay ::AddDay() end //-- Update time with the rest ::Time := TString(::Secs) //-- Decrease else //-- Verify if decrease one Day While ::Secs > ::nSecsDay ::Secs -= ::nSecsDay ::RemDay() end //-- If time is negative, make reference to the last day ::RemDay() //-- Update time with the rest ::Time := TString(::nSecsDay - ::Secs) end ::UpdateVar() return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD AddHour(nHour) CLASS TDateTime **************************************************************************** * * Add Hour * Parametros: nHour * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:33:57 * **************************************************************************** Default nHour := 1 ::Secs += nHour * ::nSecsHour ::Verify() return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD AddMinute(nMinute) CLASS TDateTime **************************************************************************** * * Add Minute * Parametros: nMinute * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:34:30 * **************************************************************************** Default nMinute := 1 ::Secs += nMinute * ::nSecsMinute ::Verify() return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD AddSecond(nSecond) CLASS TDateTime **************************************************************************** * * Add Second * Parametros: nSecond * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:34:58 * **************************************************************************** local Result := nil Default nSecond := 1 ::Secs += nSecond ::Verify() return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD AddDay(nDay) CLASS TDateTime **************************************************************************** * * Add Day * Parametros: nDay * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:37:46 * **************************************************************************** local Result := nil, nMax := 0, nEndMonth := 0, nAux := 0, cAux := "" Default nDay := 1 ::Date := ::Date + nDay return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD AddMonth(nMonth) CLASS TDateTime **************************************************************************** * * Add Month * Parametros: nMonth * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:34:30 * **************************************************************************** local Result := nil Default nMonth := 1 ::Date := IncMonth(::Date,nMonth) return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD AddYear(nYear) CLASS TDateTime **************************************************************************** * * Add Year * Parametros: nYear * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:34:58 * **************************************************************************** local Result := nil, nDayAux := 0, nMonthAux := 0, nYearAux := 0, cDateAux := "" Default nYear := 1 nDayAux := Day( ::Date()) nMonthAux := Month(::Date()) nYearAux := Year( ::Date()) nYearAux += nYear cDateAux += StrZero(nDayAux,2) + "/" cDateAux += StrZero(nMonthAux,2) + "/" cDateAux += StrZero(nYearAux,4) ::Date := CtoD(cDateAux) return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD RemHour(nHour) CLASS TDateTime **************************************************************************** * * Add Hour * Parametros: nHour * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:33:57 * **************************************************************************** local Result := nil Default nHour := 1 ::Secs -= nHour * ::nSecsHour ::Verify() return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD RemMinute(nMinute) CLASS TDateTime **************************************************************************** * * Add Minute * Parametros: nMinute * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:34:30 * **************************************************************************** local Result := nil Default nMinute := 1 ::Secs -= nMinute * ::nSecsMinute ::Verify() return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD RemSecond(nSecond) CLASS TDateTime **************************************************************************** * * Add Second * Parametros: nSecond * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:34:58 * **************************************************************************** local Result := nil Default nSecond := 1 ::Secs -= nSecond ::Verify() return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD RemDay(nDay) CLASS TDateTime **************************************************************************** * * Add Day * Parametros: nDay * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:37:46 * **************************************************************************** local nMax := 0 Default nDay := 1 ::Date := ::Date - nDay return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD RemMonth(nMonth) CLASS TDateTime **************************************************************************** * * Add Month * Parametros: nMonth * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:34:30 * **************************************************************************** Default nMonth := 1 ::Date := DecMonth(::Date,nMonth) return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD RemYear(nYear) CLASS TDateTime **************************************************************************** * * Add Year * Parametros: nYear * Retorno: NIL * * Autor: Samir * 2/3/2010 - 10:34:58 * **************************************************************************** local nDayAux := 0, nMonthAux := 0, nYearAux := 0, cDateAux := "" Default nYear := 1 nDayAux := Day(::Date()) nMonthAux := Month(::Date()) nYearAux := Year(::Date()) nYearAux -= nYear cDateAux += StrZero(nDayAux,2) + "/" cDateAux += StrZero(nMonthAux,2) + "/" cDateAux += StrZero(nYearAux,4) ::Date := CtoD(cDateAux) return nil /*------------------------------------------------------------------------*/ **************************************************************************** METHOD Absolute(dDateReferencia) CLASS TDateTime **************************************************************************** * * Obter um valor absoluto em Seconds da Date mais Time * Parametros: dDateReferencia * Retorno: nValorAbsoluto * * Autor: Samir * 17/11/2010 - 10:51:08 * **************************************************************************** local nValorAbsoluto := 0, nDays := 0 Default dDateReferencia := cTod("01/01/1920") nDays := Abs( ::Date - dDateReferencia) nValorAbsoluto := nDays * ::nSecsDay nValorAbsoluto += ::Secs return nValorAbsoluto /*------------------------------------------------------------------------*/ **************************************************************************** static function IsBissexto(xDate) **************************************************************************** * * Verificar se um ano é bissexto ou não * Parametros: xDate * Retorno: lResult * * Autor: Samir * 2/3/2010 - 11:15:02 * **************************************************************************** local lResult := .T., nYear := 0 If ValType(xDate) = "D" nYear := Year(xDate) elseif ValType(xDate) = "N" nYear := xDate elseif ValType(xDate) = "C" If IsDigit(xDate) If Len(xDate) = 2 .or. Len(xDate) = 4 nYear := Val(xDate) else lResult := .F. end else lResult := .F. end else lResult := .F. end If lResult If nYear % 4 = 0 .and. nYear % 100 != 0 lResult := .T. Elseif nYear % 100 = 0 .and. nYear % 400 = 0 lResult := .T. Else lResult := .F. End else MsgInfo("Invalid Date parameter") end Return lResult /*------------------------------------------------------------------------*/ **************************************************************************** function LastDay( dDateVal ) **************************************************************************** Local nLastDay, nMonthNum, nNumDays If dDateVal = NIL dDateVal := Date() ElseIf Valtype( dDateVal ) == 'N' nMonthNum := dDateVal ElseIf Valtype( dDateVal ) == 'D' nMonthNum := Month( dDateVal ) Else Return 0 Endif nNumDays := 31 Do Case Case nMonthNum = 4 .or. nMonthNum = 6 .or. nMonthNum = 9 .or. ; nMonthNum = 11 nNumDays := 30 Case nMonthNum = 2 If Year( dDateVal ) % 4 = 0 .and. Year( dDateVal ) % 100 != 0 nNumDays := 29 Elseif Year( dDateVal ) % 100 = 0 .and. Year( dDateVal ) % 400 = 0 nNumDays := 29 Else nNumDays := 28 Endif Endcase Return( nNumDays ) /*------------------------------------------------------------------------*/ **************************************************************************** function IncMonth(dDate, nMonth) **************************************************************************** local Result := dDate, nDia := 0, nAno := 0, nMes := 0, cData := "" nDia := Day(dDate) nMes := Month(dDate) nAno := Year(dDate) nMes += nMonth nMonth := nMes if nMes > 12 if nMes % 12 == 0 nMes := 12 else nMes := nMes % 12 nAno += Trunc(nMonth / 12,0) end end if (AllTrim(Str(nMes,2,0)) $ "4,6,9,11") .and. nDia >= 30 nDia := 30 elseif (AllTrim(Str(nMes,2,0)) == "2") .and. nDia >= 28 nDia := 28 end cData := AllTrim(Str(nDia,2,0)) + '/' + AllTrim(Str(nMes,2,0)) + '/' + ; AllTrim(Str(nAno,4,0)) if Empty(CTOD(cData)) MsgAlert(cData) end Result := CtoD(cData) Return Result /*------------------------------------------------------------------------*/ **************************************************************************** function DecMonth(dDate, nMonth) **************************************************************************** local Result := dDate, nDia := 0, nAno := 0, nMes := 0, cData := "" nDia := Day(dDate) nMes := Month(dDate) nAno := Year(dDate) nAno -= Trunc(nMonth / 12,0) nMes -= ( nMonth % 12 ) if nMes <= 0 if nMonth % 12 == 0 //nMes := 12 nMes := Month(dDate) else nAno -= 1 nMes += 12 end end if (AllTrim(Str(nMes,2,0)) $ "4,6,9,11") .and. nDia = 31 nDia := 30 elseif (AllTrim(Str(nMes,2,0)) == "2") .and. nDia >= 29 nDia := 28 end cData := AllTrim(Str(nDia,2,0)) + '/' + AllTrim(Str(nMes,2,0)) + '/' + ; AllTrim(Str(nAno,4,0)) Result := CtoD(cData) Return Result /*------------------------------------------------------------------------*/ Com o método Absolute() você tem o tempo em segundos e pode comparar o tempo de duas instâncias da classe, exemplo: oDataHoraNFE := TDateTime():New(dDataNFE,cHoraNFE) oDataHoraAtual := TDateTime():New() nDiferenca := oDataHoraAtual:Absolute() - oDataHoraNFE:Absolute() If nDiferenca > ( 24*60*60 ) //24 horas, 60 minutos, 60 segundos ?"Diferença maior que um dia" End Quote Link to comment Share on other sites More sharing options...
miragerr Posted February 18, 2015 Author Report Share Posted February 18, 2015 Ola Herberson Tudo joia meu jovem, É quase isso, o que quero é comprar as horas entre uma NFCe e uma NFe que foi tirada a partir de uma NFCe. pois estou tendo alguns problemas quando o meu cliente emite uma NFCe depois de alguns dias a pessoa volta pedindo uam NFe, até ai tudo bem pode ser tirada, mais as veses o cara tira a NFe e volta depois para cancelar a NFe por algum motivo, e nisso tenho que cancelar em CASCATA, 1o a NFCe depois a NFe, e nem sempre é possivel. Fico no aguardo. Quote Link to comment Share on other sites More sharing options...
marcioe Posted May 23, 2018 Report Share Posted May 23, 2018 vou precisar disso Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted May 25, 2018 Report Share Posted May 25, 2018 Ola Herberson Tudo joia meu jovem, É quase isso, o que quero é comprar as horas entre uma NFCe e uma NFe que foi tirada a partir de uma NFCe. pois estou tendo alguns problemas quando o meu cliente emite uma NFCe depois de alguns dias a pessoa volta pedindo uam NFe, até ai tudo bem pode ser tirada, mais as veses o cara tira a NFe e volta depois para cancelar a NFe por algum motivo, e nisso tenho que cancelar em CASCATA, 1o a NFCe depois a NFe, e nem sempre é possivel. Fico no aguardo. Jackson, boa noite Porque vc não vai pelo caminho mais fácil, pois a partir do momento que perdeu o prazo de cancelamento, principalmente por se tratar de NFC-e, que é um documento exclusivamente de saída, gera uma devolução pelo modelo 55 e em seguida gera mais um documento 55 para atender ao cliente. []s, Quote Link to comment Share on other sites More sharing options...
miragerr Posted May 25, 2018 Author Report Share Posted May 25, 2018 Ola, Meu jovem Não é isso, o problema esta em emitir as duas, sendo da seguinte forma: 1-Emito a NFC-e 2-Emito uma NF-e apartir da NFC-e "passo 1" 2 dias depois "por exemplo" pois não ha problema até aqui 3-No dia seguinte o Individuo vem devolver o produto, só que a NF-e EU consigo cancelar, já a NFC-e não Mais já mudei a metodologia de emissão, para a seguinte forma: O vendedor solicita do CLIENTE se vai ser NF-e ou NFC-e, e se o CLIENTE depois quiser uma NF-e do produto, não mais será emitido, pois o mesmo OPITOU por NFC-e no ato da compra, ai neste caso cabe ao estabelecimento, EMITIR uma NF-e de ENTRADA referenciando a NFC-e, para posterior emitir uma NF-e. Acho que deu para mostrar como ficou agora. Fico no aguardo para quaisquer esclareimento. Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted May 25, 2018 Report Share Posted May 25, 2018 Ola, Meu jovem Não é isso, o problema esta em emitir as duas, sendo da seguinte forma: 1-Emito a NFC-e 2-Emito uma NF-e apartir da NFC-e "passo 1" 2 dias depois "por exemplo" pois não ha problema até aqui 3-No dia seguinte o Individuo vem devolver o produto, só que a NF-e EU consigo cancelar, já a NFC-e não Mais já mudei a metodologia de emissão, para a seguinte forma: O vendedor solicita do CLIENTE se vai ser NF-e ou NFC-e, e se o CLIENTE depois quiser uma NF-e do produto, não mais será emitido, pois o mesmo OPITOU por NFC-e no ato da compra, ai neste caso cabe ao estabelecimento, EMITIR uma NF-e de ENTRADA referenciando a NFC-e, para posterior emitir uma NF-e. Acho que deu para mostrar como ficou agora. Fico no aguardo para quaisquer esclareimento. Jackson Boa tarde Eu entendi, e não estou criticando o seu processo, só que, qdo vc faz o passo 2 sem finalizar o passo 1, vc fica com 2 documentos válidos para a mesma operação, então a preocupação em cancelar não é um problema, pois se passar do prazo legal, faz uma devolução, assim evita-se que o documento fique ativo e evita-se 2 documentos válidos para as mesmas mercadorias com possíveis diferença de estoque, ou seja duas saídas e nenhuma entrada. Então, em relação aos procedimentos posteriores, seria operações normais, só não vejo razão pra colocar no sistema verificação de tempo para cancelamento, visto que (Ao menos nos sefaz em que tenho sistema, eles controlam e bloqueiam), causa erro de fora de prazo para cancelamento e o processo não é concretizado, então por consequência, é orientado ao operador proceder coma devolução. []s, []s 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.