...
Produto: | Solucoes_totvs |
---|
Solucao | TOTVS Prestadores de Serviços Terceirização |
---|
|
Solucoes_totvs_parceirosexptotvs |
---|
|
|
---|
Linha de Produto: | |
---|
Segmento: | |
---|
Módulo: | Modulos_totvs_prestadores_de_servicos |
---|
ModulosTOTVSPrestadoresdeServicos | 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 |
---|
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.
...
tabs | Passo 01, Passo 02, Passo 03, Passo 04 |
---|
ids | passo1,passo2 |
---|
É viável implementar gatilhos que executem uma função customizada com essa finalidade.
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 |
Bloco de código |
---|
language | cpp |
---|
linenumbers | true |
---|
|
#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. 
...
default | yes |
---|
referencia | passo1 |
---|
...
default | no |
---|
referencia | passo2 |
---|
Card documentos |
---|
Informacao | Use esse box para destacar informações relevantes e/ou de destaque. |
---|
Titulo | IMPORTANTE! |
---|
|
...