Árvore de páginas

01. DADOS GERAIS

Produto:

TOTVS Prestadores de Serviços Terceirização

Linha de Produto:

Linha Protheus

Segmento:

Serviços

Módulo:

TOTVS Prestadores de Serviços Terceirização

Função:gatHoraTot
País:Brasil
Ticket:Não há
Requisito/Story/Issue (informe o requisito relacionado) :DSERSGS-20554

02. SITUAÇÃO/REQUISITO

Identificamos que alguns de nossos clientes expressam a necessidade de implementar um cálculo automático para o total de horas relacionadas a um serviço de item extra ao elaborar um orçamento de serviço.

03. SOLUÇÃO

É viável implementar gatilhos que executem uma função customizada com essa finalidade.

04. DEMAIS INFORMAÇÕES

(informação) Abaixo temos um exemplo de gatilho e função que realiza o cálculo da hora total de um serviço, de acordo com o range de datas e horários diários definidos para o posto:

Parâmetros da Função:

dDataIni - Data inicial do range - TFF_DTINI

dDataFim - Data Final do range - TFF_DTFIM

cHoraIni - Hora inicial do range - TFF_HORAIN

cHoraFim - Hora final do range - TFF_HORAFI


(informação) Exemplo de gatilho ao preencher a hora final TFF_HORAFI:

X7_CAMPOX7_REGRAX7_CDOMIN    
TFF_HORAFIgatHoraTot(M->TFF_DTINI, M->TFF_DTFIM, M->TFF_HORAIN, M->TFF_HORAFI)TFF_QTDHRS
#INCLUDE "TOTVS.CH"
#INCLUDE "FWMVCDEF.CH"          
          
User Function gatHoraTot(dDataIni, dDataFim, cHoraIni, cHoraFim)
Local cQtdHoras := "00:00"
Local nHoraIni  := 0
Local nHoraFim  := 0

If !Empty(dDataIni) .And. !Empty(dDataFim) .And.;
    !Empty(cHoraIni) .And. !Empty(cHoraFim)

	//Transforma hora em formato "00:00" para segundos:
    nHoraIni := TimeToSecs(cHoraIni)
    nHoraFim := TimeToSecs(cHoraFim)

	//Calcula a quantidade de horas totais de acordo com o range de datas e horários:
    If nHoraIni > nHoraFim
        cQtdHoras := SecsToTime((dDataFim-dDataIni)*(nHoraIni-nHoraFim))
    Else
        cQtdHoras := SecsToTime((dDataFim-dDataIni)*(nHoraFim-nHoraIni))
    EndIf

	//Tratamento para desconsiderar os segundos e manter picture "00:00"
    cQtdHoras := SubStr(cQtdHoras,1,len(cQtdHoras)-3)
EndIf  //Tratativa caso o total de horas for maior do que o permitido para o campo:

If TamSX3("TFF_QTDHRS")[1] < Len(cQtdHoras)
    oModel := FwModelActive()
    oModel:SetErrorMessage(oModel:GetId(),;
                        "TFF_QTDHRS",;
                        oModel:GetId(), ;
                        "TFF_QTDHRS",;
                        'TFF_QTDHRS', ;
                        "Tentativa de informar total de horas "+cQtdHoras+" maior que o permitido "+;
                        "para o tamanho do campo. Contate o administrador do sistema.",'' )
    cQtdHoras := "00:00"
EndIf

Return cQtdHoras

(aviso) Importante: Por padrão, o campo TFF_QTDHRS possui tamanho 5, com a picture 99:99. Dessa forma, caso a função retorne um horário superior (por exemplo, "120:00"), ocorrerá um erro de gatilho. Portanto, é fundamental ajustar o tamanho e a picture do campo conforme a necessidade de uso. (aviso)

05. ASSUNTOS RELACIONADOS

  • Não há