Pular para o conteúdo principal
Esses dias estava precisando montar algo para apresentar o tempo que uma determinada rotina, uma parte eu pesquisei e consegui um função pronta, outra parte foi montada. Compartilhando abaixo a idéia.




/*/{Protheus.doc} TempRest

Exemplo de chamada da função.

** Fonte não compilado, pode haver erros de sintaxe. 

/*/
User Function APrefHR()
 Local nTimeIni  := Seconds()
        Local nI := 1
        Local nFim = 50000

        For Ni := 1 To nFIm
            conout(U_TempRest(nI, nFim,nTimeIni)[4])
        Next

Return Nil 
       
 





/*/{Protheus.doc} TempRest

Faz o calculo de tempo restante para um processo

@author TSC679 - CHARLES REITZ
@since 12/07/2016
@param nTotaisP, numeric, descricao
@param nIncrement, numeric, descricao
@param nTimeIni, numeric, descricao
@return return, return_description
/*/
User Function TempRest(nTotaisP,nIncrement,nTimeIni)
 Local cTempoRest := ""
 Local nHoraRest  := 0
 LOcal nSecAtual  := seconds()
 Local aRetFun  := {nil,nil,nil,nil}
 Local nSecAux  := 0

 If KillApp()
  MsgInfo("Sistema será finalizado.","Atenção - "+ProcName())
  KillApp(.T.)
 EndIf
 //retorna o tempo restante em horas
 //nHoraRest := noROund(((nTotaisP/nIncrement*(nSecAtual-nTimeIni))/60)/60,2)
 nSecAux  := Round(((nSecAtual-nTimeIni)/nIncrement)*(nTotaisP-nIncrement),2)
 nHoraRest :=  Round((nSecAux/60)/60,2)
 aRetFun[1] := U_zVal2Hor(nHoraRest,":")

 //retorna a previsão final da hora
 nHoraFinal := ROund(((nSecAux+nSecAtual)/60)/60,2)
 aRetFun[2] := U_zVal2Hor(nHoraFinal,":")
 aRetFun[3] := ROund((100*nIncrement)/nTotaisP,2)
 aRetFun[4] := cValToChar(nIncrement)+"/"+cValToChar(nTotaisP)+" - "+cValToChar(aRetFun[3])+"% | Prev.Rest.:"+aRetFun[1]+" - Prev.Final:"+aRetFun[2]

Return aRetFun
       
 




/*/{Protheus.doc} zVal2Hora
Converte valor numérico (ex.: 15.30) para hora (ex.: 15:30)

Fonte: https://terminaldeinformacao.com/2015/05/14/converter-valor-numerico-para-hora-em-advpl/

@author Atilio
@since 20/09/2014
@version 1.0
@param [nValor], Numérico, Valor numérico correspondente as horas
@param [cSepar], Caracter, Caracter de separação (ex.: 'h', ':', etc)
@return cHora, Variável que irá armazenar as horas
@example
u_zVal2Hora(1.50, 'h') //01h30
u_zVal2Hora(1.50, ':') //01:30
/*/
User Function zVal2Hor(nValor, cSepar)
    Local cHora := ""
    Local cMinutos := ""
    Default cSepar := ":"
    Default nValor := -1

    cHora := Alltrim(Transform(nValor, "@E 99.99"))

    //Se o tamanho da hora for menor que 5, adiciona zeros a esquerda
    If Len(cHora) < 5
        cHora := Replicate('0', 5-Len(cHora)) + cHora
    EndIf

    //Fazendo tratamento para minutos
    cMinutos := SubStr(cHora, At(',', cHora)+1, 2)
    cMinutos := StrZero((Val(cMinutos)*60)/100, 2)

    //Atualiza a hora com os novos minutos
    cHora := SubStr(cHora, 1, At(',', cHora))+cMinutos

    //Atualizando o separador
    cHora := StrTran(cHora, ',', cSepar)

Return cHora
       
 

Postagens mais visitadas deste blog

REST Protheus Converter charset CP1252 para UTF8 com Header Accept UTF-8

O Protheus possui um tag que pode ser utilizada para conversão para UTF8 de forma transparente, basta enviar no header da requisição a TAG ACCEPT com charset=UTF-8, também pode-se adicionar o appllication/json. Accept : application/json; charset=UTF-8 ou Accept : charset=UTF-8 Isso ajuda pois não precisa mais utilizar as funções DecodeUTF8 e EncodeUT8 pois o próprio rest já vai fazer isso.

Recursividade Minha Linda! Estrutura Produtos Protheus SG1

Fato! Depois que você conhece recursividade em sua vida tudo fica mais leve (rss... ) a recursividade pode ser infinita (pode não ta!) se for infinita vai dar problema, não pode. Mas a recursividade nos ajuda a deixar nosso sistema mais flexível e dinâmico para montar uma série de regras de negócio. Hoje vou falar exatamente da SG1, tabela TOTVS Microsiga Protheus que é utilizada para montar a estrutura de um produto dentro PCP (Planejamento e Controle de Produção). Isso séria algo que a recursividade iria ajudar. Na SG1 temos o campos G1_COD (Pai) e G1_COMP (Filho). G1_COD->G1_COMP->G1_COD->G1_COMP->G1_COD->G1_COMP Seria assim o fluxo da informação. Sem mais delongas, abaixo vou deixar o script para MSSQL para apresentar esses dados. Inté! WITH ESTRUT( CODIGO, COD_PAI, COD_COMP, QTD, PERDA, DT_INI, DT_FIM ,TRT ,RECNO, NIVEL ) AS ( SELECT G1_COD PAI, G1_COD, G1_COMP, G1_QUANT, G1_PERDA, G1_INI, G1_FIM,G1_TRT,SG1.R_E_C_N_O_, 1 AS NIVEL FR...

Appserver Protheus Rest - TLS 1.2

A partir da release 17.3.0.20 vai estar disponível no rest as tags: TLS1=3 que ativa o TLS 1.2 State=1 Bugs=1 O rest do Protheus somente funcionava até o TLS 1.0, ao qual muitos navegadores já estão descontinuando suporte. [HTTPREST] Port=56650 URIs=HTTPURI SECURITY=1 VERBOSE=0 SSL2=1 SSL3=1 TLS1=3 Bugs=1 State=1