Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

01. DADOS GERAIS

Produto:

Solucoes_totvs
SolucaoTOTVS Prestadores de Serviços Terceirização

Solucoes_totvs_cross
SolucaoCross

Solucoes_totvs_parceiros
SolucaoParceiros

Solucoes_totvs_parceirosexptotvs
SolucaoParcsExpsTOTVS

Linha de Produto:

Linhas_totvs
SegmentoDistribuição
RegionConstrução Projetos
LinhaLinha Protheus

Segmento:

Segmentos_totvs
SegmentoServiços

Módulo:Prestadores de Serviço
Função:TECA740.prw - Orçamento de Serviço
Ticket:Não há.
Requisito/Story/Issue (informe o requisito relacionado) :DSERSGS-10243


02. SITUAÇÃO/REQUISITO

Necessidade da inclusão de gatilho no campo TFF_QTDHRS, durante a inclusão de item extra em contrato de prestação de serviços, para que o sistema utilize o valor de hora extra, cobrado no orçamento, para compor o preço do item extra adicionado.

03. SOLUÇÃO

Criação de função customizada e inclusão de gatilho, utilizando-se dessa função para a geração do preço de venda (campo TFF_PRCVEN) do item adicionado.

04. DEMAIS INFORMAÇÕES

Passo a passo de como implementar a solução:

1) Crie e compile a função customizada, que será utilizada no gatilho. Abaixo, exemplo de função que realiza tarefa taréfa similar.

Bloco de código
languagetext
themeEclipseMidnight
titleExemplo de função que recupera valor de Hora extra
linenumberstrue
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWMVCDEF.CH"
/*
    @description Exemplo de função para recuperação do valor de hora extra
    cadastrado na tabela TFU, de um determinado orçamento de serviço.
    @param cCodTfj, string, código do orçamento de serviço
    @param cQtdHrs, string, quantidade de horas no formato string 'HH:MM'
    @param cCodAbn, string, código do motivo de manutenção, cadastrada na tabela TFU, campo TFU_CODABN
*/
USER FUNCTION GTETFU(cCodTfj,cQtdHrs,cCodAbncCodAbn, cCodTfj)

Local nRet      := 0
Local cQry      := ''
Local cTmpAlias := 'TFUTMP'
Local lCobCtr   := .F. 
Local cQtdHrs   := ""
Local nQtdhrs   := 0 
Local oModel    := FWMODELACTIVE()
Local oModelRH  := oModel:GetModel('TFF_RH')
lCobCtr := oModelRH:GetValue('TFF_COBCTR') == '1'

cQtdHrs := oModelRH:GetValue('TFF_QTDHRS')

If !lCobCtr
    // Conversão do formato HH:MM para formato decimal
Local  nQtdhrs  nQtdHrs := VAL(substr(cQtdHrs,1,2)) + valVAL(substr(cQtdHrs,4,2))/60

    cQry += "SELECT DISTINCT TFU_CODIGO, TFU_CODTFF, TFU_CODABN, TFU_VALOR "
    cQry += "FROM "+retSqlName("TFJ")+" " 
    cQry += "INNER JOIN "+retSqlName("TFL")+" ON TFL_CODPAI = TFJ_CODIGO "
    cQry += "AND TFJ_FILIAL = '"+xFilial('TFJ')+"' " 
    cQry += "AND TFL_FILIAL = '"+xFilial('TFL')+"' " 
    cQry += "INNER JOIN "+retSqlName("TFF")+"   ON TFF_CODPAI = TFL_CODIGO "
    cQry += "INNER JOIN "+retSqlName("TFU")+" ON TFU_CODTFF = TFF_COD "
    cQry += "WHERE TFJ_CODIGO = '"+cCodTfj+"' AND TFU_CODABN = '"+cCodAbn+"' "

    cQry := ChangeQuery(cQry)

    dbUseArea(.T.,"TOPCONN",TcGenQry(,,cQry),cTmpAlias,.T.,.T.)

    // Recuperando um único valor, relacionado com o motivo de manutenção (cCodAbn)
    If (cTmpAlias)->(!EOF())
        nRet := (cTmpAlias)->TFU_VALOR * nQtdhrs
    EndIf

    (cTmpAlias)->(DBCLOSEAREA())
Else 
    nRet := oModelRH:GetValue("TFF_PRCVEN")
EndIf

return nRet

2) Relize Realize a inclusão do gatilho no campo TFF_QTDHRS, conforme a seguir:

...

2.2) Acesse a opção Gatilhos, em Base de dados → Dicionário → Gatilhos

2.3) Selecione a empresa, clique em Gatilhos e em seguida, na opção de incluir Image Added

Image Added

2.4) Preencha as informações, referentes ao gatilho, conforme a seguir, substituindo, na regra, a expreção /*abncod*/ pelo código do motivo de manutenção que deseja utilizar na busca do valor da hora extra, exemplo: "000003"

Campo: TFF_QTDHRS
Sequencia: 001
Cont. Dominio: TFF_PRCVEN
Tipo: 1 - Primário
Regra:  U_GTETFU(/*abncod*/, TFJ→TFJ_CODIGO)
Posiciona: 2-Não
Alias: TFF

Observação: A expressão utilizada na opção regra garante que o gatilho terá o efeito apenas quando o registro tratar-se de um item extra. Para utilizar o nosso exemplo, é necessário substituir, na expressão, o conteúdo /*abncod*/ por uma string válida de um código de manutenção, exemplo: "000003", que será utilizado no orçamento de serviços para fins de cálculo de horas extras. 

2.5) Após a inclusão do gatilho, realize o processo de inclusão de item extra e verifique que ao alterar o valor do campo TFF_QTDHRS de uma linha, o campo TFF_PRCVEN receberá o valor do cálculo realizado na user function utilizada. 

05. ASSUNTOS RELACIONADOS

...

  • Não há.


HTML
<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}

.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { 
	background: #FF9900; !important 
}

.menu-item.active-tab { 
	border-bottom: none !important; 
}

</style>