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
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
Exemplo de gatilho ao preencher a hora final TFF_HORAFI:
X7_CAMPO | X7_REGRA | X7_CDOMIN |
---|---|---|
TFF_HORAFI | gatHoraTot(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
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.
05. ASSUNTOS RELACIONADOS
- Não há