Pular para o conteúdo principal

Parâmetro de Obrigatoriedade do Técnico nas Horas Trabalhadas

Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 1 → "Horas Trabalhadas Obrigatório [MPD005]" Tabela: PARMFATUR.ST_OBRIGATECNICO Valor padrão: N (Não — técnico não obrigatório)

Parâmetro dependente de ST_ORDEMSERVICO: este parâmetro só é visível e editável em MFA001 quando o Modelo de Ordem de Serviço (ST_ORDEMSERVICO) está definido como H (Horas Trabalhadas). Em qualquer outro modo (K ou O), o AfterPost do MFA001 força ST_OBRIGATECNICO = 'N' e o OnChange oculta o componente.

Telas impactadas​

MóduloCódigoPapelDescrição
Parâmetros de FaturamentoMFA001Produtor (grava)Tela onde o parâmetro é definido. Gravação está condicionada ao valor de ST_ORDEMSERVICO
Aplicação de Serviços / Ordem de ServiçoMPD005Consumidor (lê)Carrega ST_OBRIGATECNICO ao abrir a tela e usa o valor para validar a aba de Horas Trabalhadas (tabela ORDEMSERVHORA)
Replicação de Parâmetros (Recapadora)RCA006ReplicadorSELECT/INSERT/UPDATE completos de PARMFATUR para replicação entre empresas (sem lógica de negócio sobre o campo)
Replicação de Parâmetros (Pedido)CPD009ReplicadorSELECT/INSERT/UPDATE completos de PARMFATUR (sem lógica de negócio sobre o campo)

Campos envolvidos​

CampoTabelaDescrição
ST_OBRIGATECNICOPARMFATURParâmetro booleano (S/N) — exige técnico nas horas trabalhadas da OS
ST_ORDEMSERVICOPARMFATURParâmetro pai — define o modelo de medição da OS (H/K/O). Só permite habilitar ST_OBRIGATECNICO quando = 'H'
CD_PESSOAORDEMSERVHORACódigo do técnico/mecânico que executou as horas. Quando ST_OBRIGATECNICO = 'S', não pode ficar em branco
QT_HORASORDEMSERVHORAQuantidade de horas registradas. Quando ST_OBRIGATECNICO = 'S', também é validada ao salvar a aba

Opções disponíveis​

O componente é um TwwDBComboBox com Style = csDropDownList (somente seleção). As duas opções exatas estão em UMFA001.dfm (linhas 9224-9226):

  • Sim → S
  • Não → N

S - Sim (técnico obrigatório)​

O que fazDetalhe
Efeito em MFA001Grava ST_OBRIGATECNICO = 'S' quando ST_ORDEMSERVICO = 'H'. Caso ST_ORDEMSERVICO seja alterado para K ou O antes de salvar, o valor é revertido para N automaticamente (UMFA001.pas:1052-1056)
Efeito em MPD005 — ao salvar registro de horas (tabORDEMSERVHORAAfterPost / gravação)Se CD_PESSOA estiver em branco, lança W-2061 = "É Obrigatório Informar o Técnico!" e move o foco para a aba pagORDEMSERVITEM (UdmMPD005.pas:1870-1876)
Efeito em MPD005 — validação de horasSe QT_HORAS estiver em branco, lança W-2062 = "É Obrigatório Informar a quantidade de Horas do Técnico!" (UdmMPD005.pas:1880-1883)
Efeito em MPD005 — ao fechar OS (btnFecharClick)Percorre todos os itens da OS (tabORDEMSERVITEM) e verifica, para cada item, se existe pelo menos uma linha em tabORDEMSERVHORA com CD_PESSOA preenchido. Se algum item não tiver técnico vinculado, impede o fechamento da OS (UMPD005.pas:1838-1866)

Simulação passo a passo​

  1. Em MFA001 → aba Parâmetros de Pedidos/Ordem de Serviço → combo Modelo Ordem Serviço defina Horas Trabalhadas (ST_ORDEMSERVICO = 'H')
  2. O label "Horas Trabalhadas Obrigatório [MPD005]" e o combo cmbST_Obrigatecnico ficam visíveis
  3. Selecione Sim no combo cmbST_Obrigatecnico
  4. Salve (F6) — o AfterPost permite a gravação porque ST_ORDEMSERVICO = 'H'
  5. Abra MPD005 (Aplicação/OS) e vá até a aba Horas Trabalhadas
  6. Tente gravar um registro de ORDEMSERVHORA sem preencher o técnico (CD_PESSOA vazio) → sistema lança W-2061 = "É Obrigatório Informar o Técnico!" e direciona o foco para a aba de horas
  7. Preencha o técnico, mas deixe QT_HORAS em branco → sistema lança W-2062 = "É Obrigatório Informar a quantidade de Horas do Técnico!"
  8. Ao tentar fechar a OS, o sistema também valida se cada item tem pelo menos um registro de horas com técnico informado; caso contrário, exibe W-2061

Resultado esperado: toda apropriação de horas na OS fica obrigada a informar o técnico e a quantidade de horas. O fechamento da OS também é bloqueado enquanto algum item estiver sem técnico vinculado.


N - Não (técnico opcional) - Padrão​

O que fazDetalhe
Efeito em MFA001Valor default atribuído em AfterInsert (UdmMFA001.pas:572). Sempre aplicado automaticamente quando ST_ORDEMSERVICO <> 'H' (UMFA001.pas:1052-1056)
Efeito em MPD005O bloco if (dmMPD005.iST_OBRIGATECNICO = 'S') não dispara; os registros de ORDEMSERVHORA podem ser gravados sem técnico e sem horas, e a OS pode ser fechada mesmo sem horas/técnico vinculados aos itens

Simulação passo a passo​

  1. Em MFA001, com ST_ORDEMSERVICO = 'H', selecione Não em cmbST_Obrigatecnico e salve
  2. Ou altere ST_ORDEMSERVICO para K (Controle de KM) ou O (Controle de Horímetro) — nesse caso, o OnChange (UMFA001.pas:2519-2529) e o AfterPost (UMFA001.pas:1052-1056) forçam ST_OBRIGATECNICO = 'N'
  3. Abra MPD005, na aba Horas Trabalhadas
  4. Grave um registro de ORDEMSERVHORA deixando CD_PESSOA e QT_HORAS em branco — o sistema não reclama
  5. Feche a OS normalmente — o loop de validação em btnFecharClick simplesmente não é executado

Resultado esperado: a aba de Horas Trabalhadas não exige técnico nem quantidade de horas; o usuário pode registrar apontamentos parciais ou pular o registro de horas totalmente.


Interação com ST_ORDEMSERVICO​

ST_OBRIGATECNICO é um sub-parâmetro dependente de ST_ORDEMSERVICO. A dependência é imposta em dois pontos do TfrmMFA001:

1. OnChange do combo de Modelo de OS (em tempo real)​

UMFA001.pas:2517-2530:

procedure TfrmMFA001.cmbST_ORDEMSERVICOChange(Sender: TObject);
begin
if (cmbST_ORDEMSERVICO.Value = 'H') then
begin
lblObrigaTecnico.Visible := True;
cmbST_Obrigatecnico.Visible := True;
end
else
begin
cmbST_Obrigatecnico.Value := 'N';
lblObrigaTecnico.Visible := False;
cmbST_Obrigatecnico.Visible := False;
end;
end;

Sempre que o usuário troca o Modelo de Ordem de Serviço:

  • H (Horas Trabalhadas) → mostra o combo cmbST_Obrigatecnico e o label lblObrigaTecnico
  • K (Controle de KM) ou O (Controle de Horímetro) → zera cmbST_Obrigatecnico.Value := 'N' e oculta label/combo

Adicionalmente, PageParmChange (UMFA001.pas:2532-2536) chama este handler ao entrar na aba de Pedidos/OS para refletir o estado atual do combo pai.

2. AfterPost do tabPARMFATUR (na persistência)​

UMFA001.pas:1052-1056:

if (dmMFA001.tabPARMFATURST_ORDEMSERVICO.AsString <> 'H') then
begin
dmMFA001.tabPARMFATUR.Edit;
dmMFA001.tabPARMFATURST_OBRIGATECNICO.AsString := 'N';
end;

Esta é a última barreira de consistência: independentemente do que o usuário tenha deixado em ST_OBRIGATECNICO, se na hora de salvar o ST_ORDEMSERVICO não for H, o sistema força ST_OBRIGATECNICO = 'N'. Isso garante que a base nunca terá a combinação inválida (ST_ORDEMSERVICO <> 'H' e ST_OBRIGATECNICO = 'S').

Resumo da matriz de dependência​

ST_ORDEMSERVICOST_OBRIGATECNICO permitido em MFA001Valor efetivo após salvar
H (Horas Trabalhadas)S ou N (combo visível)Mantém o valor escolhido pelo usuário
K (Controle de KM)— (combo oculto)Forçado para N
O (Controle de Horímetro)— (combo oculto)Forçado para N

Tabela Comparativa Resumida​

OpçãoRótulo no comboTécnico obrigatório em MPD005?Mensagens disparadasBloqueio no fechamento da OS?
SSimSim — CD_PESSOA e QT_HORAS obrigatórios em cada registro de ORDEMSERVHORAW-2061, W-2062Sim — todos os itens precisam de técnico vinculado
NNão (padrão)Não — campos opcionaisNenhumaNão

Referências no Código Fonte​

Tela MFA001 (produtora)​

ArquivoLinha(s)Descrição
source/MFA001/UMFA001.dfm8248-8260Label lblObrigaTecnico com Caption = 'Horas Trabalhadas Obrigatório [MPD005]'
source/MFA001/UMFA001.dfm9205-9231Definição do cmbST_Obrigatecnico: TwwDBComboBox com DataField = 'ST_OBRIGATECNICO' e Items.Strings = ('Sim'#9'S', 'Não'#9'N')
source/MFA001/UMFA001.pas1052-1056Regra do AfterPost: força ST_OBRIGATECNICO = 'N' quando ST_ORDEMSERVICO <> 'H'
source/MFA001/UMFA001.pas2517-2530Handler cmbST_ORDEMSERVICOChange: controla visibilidade de lblObrigaTecnico e cmbST_Obrigatecnico, zera valor para N quando modelo != H
source/MFA001/UMFA001.pas2532-2536PageParmChange: reaplica o handler ao entrar na aba de OS
source/MFA001/UdmMFA001.pas283Declaração do TStringField tabPARMFATURST_OBRIGATECNICO
source/MFA001/UdmMFA001.pas572Valor padrão no AfterInsert: tabPARMFATURST_OBRIGATECNICO.AsString := 'N' (comentário: Gobo Chamado 238778)
source/MFA001/UdmMFA001.dfm295, 1973-1978, 2445, 2617, 2876, 3175SELECT, field metadata (FixedChar = True, Size = 1), INSERT e UPDATE do registro de PARMFATUR

Tela MPD005 (consumidora)​

ArquivoLinha(s)Descrição
source/MPD005/UdmMPD005.pas247Declaração da variável de sessão iST_OBRIGATECNICO: string
source/MPD005/UdmMPD005.pas372-379SELECT de PARMFATUR com ST_OBRIGATECNICO no final da lista de campos
source/MPD005/UdmMPD005.pas405Atribuição dmMPD005.iST_OBRIGATECNICO := Resultado[21] após execução da consulta
source/MPD005/UdmMPD005.pas1870-1885Validação ao salvar ORDEMSERVHORA: exige CD_PESSOA (W-2061) e QT_HORAS (W-2062), direcionando foco para pagORDEMSERVITEM
source/MPD005/UMPD005.pas1838-1866Validação ao fechar a OS (btnFecharClick): percorre itens e verifica existência de horas com técnico informado; bloqueia o fechamento caso algum item esteja sem técnico

Telas que replicam o campo (sem lógica)​

ArquivoLinha(s)Descrição
source/RCA006/UdmRCA006.dfm—SELECT/INSERT/UPDATE completo de PARMFATUR (replicação de parâmetros entre empresas)
source/CPD009/UdmCPD009.dfm—SELECT/INSERT/UPDATE completo de PARMFATUR (espelhamento de parâmetros)

Mensagens do sistema (arquivo dist/mensagens.pt-BR)​

CódigoTexto
W-2061É Obrigatório Informar o Técnico!
W-2062É Obrigatório Informar a quantidade de Horas do Técnico!

Procedures / Views / Triggers​

Nenhuma referência ao campo ST_OBRIGATECNICO foi encontrada no diretório Scripts/ — toda a lógica associada ao parâmetro é aplicada em código Delphi (camada cliente), não em stored procedures ou triggers no banco Firebird.