MOF001 — Abertura / Fechamento de Ordem de Serviço (enriquecimento)
Menu: Ordem de Serviço > Movimentações > Abertura / Fechamento de Ordem de Serviço
Objetivo
A tela MOF001 é onde o usuário abre, mantém e fecha Ordens de Serviço (OS) da oficina: cadastra cliente/veículo, lança serviços prestados, peças utilizadas e produtos de consumo, com cálculo automático de preço, desconto, comissão e imposto. Ao fechar a OS, o sistema baixa/gera estoque das peças e permite convertê-la em Pedido de Venda (e opcionalmente Nota Fiscal). A tela também controla o ciclo de bloqueio/liberação/reabertura da OS conforme permissões do usuário e parâmetros da oficina (OFI001).
Fluxo principal
- Clicar em Novo (ou informar Nº da OS existente e sair do campo para carregar) para iniciar uma Ordem de Serviço (Dados da Ordem de Serviço) —
source/MOF001/UMOF001.pas:3174-3220 (TfrmMOF001.edtNR_ORDEMSERVICOExit) - Informar Placa/Veículo (quando OS de tipo Veículo) — sistema traz dados do veículo, KM atual e valida OS pendente na mesma placa/box (Dados da Ordem de Serviço) —
source/MOF001/UdmMOF001.pas:4791-4899 (TdmMOF001.tabORDEMSERVICONR_PLACAValidate) - Preencher Data de Emissão, Previsão de Entrega, Quilometragem e Ocorrência (Dados da Ordem de Serviço) —
source/MOF001/UdmMOF001.pas:1941-1994 (TdmMOF001.tabORDEMSERVICOBeforePost) - Lançar os serviços prestados (código, quantidade, valores, equipe/mecânico) (Serviços Prestados (pagORDEMSERVITEM)) —
source/MOF001/UdmMOF001.pas:2151-2214 (TdmMOF001.tabORDEMSERVITEMBeforePost) - Lançar as peças utilizadas (código, quantidade/peso, valores, vendedor/equipe) (Peças Utilizadas (pagSERVICOITEM)) —
source/MOF001/UdmMOF001.pas:3179-3218 (TdmMOF001.tabSERVICOITEMBeforePost) - Lançar produtos de consumo interno (materiais aplicados no serviço), se houver (Produtos Consumo (pagITEMCONSUMO)) —
source/MOF001/UdmMOF001.pas:6376-6431 (TdmMOF001.tabITEMCONSUMOBeforePost) - Na aba Finalizar Ordem de Serviço, conferir/ajustar Forma e Condição de Pagamento (Finalizar Ordem de Serviço (pagPedido)) —
source/MOF001/UMOF001.pas:4284-4288 (TfrmMOF001.btnPedidoClick)
Campos obrigatórios
| Campo | Condição | Mensagem | Fonte |
|---|---|---|---|
| Pessoa (Cliente) | sempre, ao salvar a OS | A Pessoa deve ser Informada! | source/MOF001/UdmMOF001.pas:1941-1960 (TdmMOF001.tabORDEMSERVICOBeforePost) |
| Endereço | sempre, ao salvar a OS (após informar Pessoa) | O Endereço da Pessoa deve ser Informado! | source/MOF001/UdmMOF001.pas:1941-1965 (TdmMOF001.tabORDEMSERVICOBeforePost) |
| Data de Emissão | sempre, ao salvar a OS; não pode ser maior que a Previsão de Entrega | A Data de Emissão deve ser Informada! / A data de emissão não pode ser maior que a data de entrega! | source/MOF001/UdmMOF001.pas:1941-1970 (TdmMOF001.tabORDEMSERVICOBeforePost) |
| Previsão de Entrega | sempre, ao salvar a OS; não pode ser menor que a Data de Emissão | A Previsão de Entrega deve ser Informada! / A data de entrega não pode ser menor que a data de emissão! | source/MOF001/UdmMOF001.pas:1941-1975 (TdmMOF001.tabORDEMSERVICOBeforePost) |
| Ocorrência (Observação) | sempre, ao salvar a OS | A Ocorrência deve ser Informada! | source/MOF001/UdmMOF001.pas:1941-1980 (TdmMOF001.tabORDEMSERVICOBeforePost) |
| Quilometragem | PARMOFICINA.ST_OBRIGAKM = 'S' e o tipo de OS não é Pneu (TP_ORDEMSERVICO <> 'P') | A Quilometragem deve ser Informada! / A Quilometragem Informada não pode ser Menor que a Anterior! | source/MOF001/UdmMOF001.pas:1941-1987 (TdmMOF001.tabORDEMSERVICOBeforePost) |
| Placa do Veículo | PARMOFICINA.ST_OBRIGAPLACA = 'S' e PARMOFICINA.TP_ORDEMSERVICO = 'V' | A Placa deve ser Informada. Verifique! | source/MOF001/UdmMOF001.pas:1941-2003 (TdmMOF001.tabORDEMSERVICOBeforePost) |
| Orçamento vinculado | PARMOFICINA.ST_OBRIGAORCAMENTOOS = 'S' e a OS está sendo aberta diretamente (não a partir de um orçamento) | W-1800 — Ordem de serviço deve ser iniciada a partir de um Orçamento [MOF005] | source/MOF001/UdmMOF001.pas:2006-2011 (TdmMOF001.tabORDEMSERVICOBeforePost) |
| Movimentação, Quantidade, Valor Unitário e Valor Total do Serviço | ao lançar/editar linha na aba Serviços Prestados | A Movimentação para o Serviço deve ser Informada! / A Quantidade do Serviço deve ser Informada! / O Valor Unitário do Serviço deve ser Informado! / O Valor Total do Serviço deve ser Informado! | source/MOF001/UdmMOF001.pas:2188-2214 (TdmMOF001.ValidaORDEMSERVITEMItem) |
| Equipe Mecânica e Mecânico (Serviços/Peças) | PARMOFICINA.ST_OBRIGAMECANICO = 'S' e PARMOFICINA.ST_MODULOVARIOSVENDEDORES = 'N', item não é de terceiro | A Equipe Mecânica deve ser informada. Verifique! / O Mecânico deve ser informado. Verifique! | source/MOF001/UdmMOF001.pas:2277-2296 (TdmMOF001.ValidaORDEMSERVITEMItem) |
| Vendedor (peça) | PARMFATUR.ST_VARIOSVENDEDORES = 'N' e PARMOFICINA.ST_OBRIGAVENDEDOR = 'P' | O Vendedor deve ser Informado! | source/MOF001/UdmMOF001.pas:3220-3239 (TdmMOF001.ValidaSERVICOITEMItem) |
| Quantidade/Peso e Valor Unitário/Total da Peça | ao lançar/editar linha na aba Peças Utilizadas | A Quantidade deve ser Informada! / O Peso do Produto deve ser Informado! / O Valor Unitário do Produto deve ser Informado! / O Valor Total do Produto deve ser Informado! | source/MOF001/UdmMOF001.pas:3220-3282 (TdmMOF001.ValidaSERVICOITEMItem) |
| Item, Movimentação, Local, Tipo Local, Quantidade/Peso e Valores do Produto de Consumo | ao lançar/editar linha na aba Produtos Consumo | O Produto deve ser Informado! / O Movimentação deve ser Informada! / O Local deve ser Informado! / O Tipo Local deve ser Informado! / A Quantidade do Produto deve ser Informada! / O Valor Unitário do Produto deve ser Informado! / O Valor Total do Produto deve ser Informado! | source/MOF001/UdmMOF001.pas:6376-6431 (TdmMOF001.tabITEMCONSUMOBeforePost) |
| Motivo de Liberação | PARMOFICINA.ST_EXIGEMOTIVOLIBERACAO = 'S' ao liberar uma OS bloqueada | É Obrigatório Informar o Motivo de Liberação da Ordem de Serviço! | source/MOF001/UMOF001.pas:6517-6562 (TfrmMOF001.btnLiberarClick) |
| 8 medidas de Sulco do Pneu (DE/DD/TE/TD Ext./Int.) | PARMOFICINA.ST_SULCOPNEU = 'S'; iniciais ao salvar a OS, finais ao fechar a OS | É Obrigatório Informar a Profundidade do Sulco ... Inicial/Final, Verifique! | source/MOF001/UMOF001.pas:2628-2687 (TfrmMOF001.btnSalvarClick) |
Mensagens: causa e ação
W-1700
Causa: O usuário abriu/consultou (F2) uma OS que está com status Bloqueada.
Ação: A OS não pode ser alterada até que um usuário Autorizador a libere na própria tela MOF001 (botão Liberar) ou em MOF007.
Fonte: source/MOF001/UMOF001.pas:3174-3210 (TfrmMOF001.edtNR_ORDEMSERVICOExit)
C-1702
Causa: O usuário clicou no botão Fechar para encerrar a OS.
Ação: Confirmar a pergunta para que o sistema feche todos os serviços em aberto, gere o estoque das peças e mude a OS para o status Fechada.
Fonte: source/MOF001/UMOF001.pas:5159-5169 (TfrmMOF001.btnFecharClick)
C-1703
Causa: O usuário clicou no botão Reabrir para editar novamente uma OS já fechada/finalizada.
Ação: Confirmar a reabertura; só é permitida a usuário Autorizador (ou com permissão de reabertura) e se não houver Nota Fiscal válida vinculada.
Fonte: source/MOF001/UMOF001.pas:5480-5485 (TfrmMOF001.btnReabrirClick)
C-1706
Causa: O usuário clicou no botão Liberar para desbloquear uma OS bloqueada.
Ação: Confirmar a liberação; o sistema checa permissão MOF007/MOF008, se o usuário é Autorizador e se o motivo de liberação foi preenchido quando exigido.
Fonte: source/MOF001/UMOF001.pas:6522-6562 (TfrmMOF001.btnLiberarClick)
C-1707
Causa: O usuário clicou no botão Bloquear para impedir novas alterações na OS.
Ação: Confirmar o bloqueio; só é aceito se a OS estiver Aberta, sem pedido gerado, e o usuário for Autorizador.
Fonte: source/MOF001/UMOF001.pas:6628-6644 (TfrmMOF001.btnBloquearClick)
C-1708
Causa: O item de peça/produto lançado não tem saldo em estoque suficiente para a saída, e PARMFATUR.ST_ALERTAESTOQUENEGATIVO está configurado para avisar ('S' ou 'F') em vez de bloquear.
Ação: Confirmar para incluir mesmo assim (o estoque ficará negativo) ou cancelar e verificar a disponibilidade/local de armazenagem do item antes de relançar.
Fonte: source/MOF001/UdmMOF001.pas:3395-3452 (TdmMOF001.ValidaSERVICOITEMItem)
C-1679
Causa: A Condição de Pagamento (ou dados relacionados) da OS foi alterada com itens já lançados, e PARMOFICINA.ST_REPROCESSATABPRECO permite perguntar ('S').
Ação: Confirmar se deseja recalcular preços dos itens conforme a nova tabela de preço vinculada à condição de pagamento; recusar mantém os valores atuais.
Fonte: source/MOF001/UdmMOF001.pas:1456-1467 (TdmMOF001.tabORDEMSERVICOCD_CONDPAGTOValidate)
C-1709
Causa: A Placa informada corresponde a um veículo cujo KM atual cadastrado é diferente do KM já preenchido na OS.
Ação: Confirmar para substituir o KM da OS pelo KM atual do cadastro do veículo, ou recusar para manter o KM digitado manualmente.
Fonte: source/MOF001/UdmMOF001.pas:4866-4879 (TdmMOF001.tabORDEMSERVICONR_PLACAValidate)
W-1710 / W-1711
Causa: O campo Valor Limite da OS foi deixado em branco (W-1710, apenas aviso informativo) ou foi preenchido com um valor menor que o total atual da OS (W-1711, erro que impede a ação).
Ação: Para W-1711, informar um Valor Limite igual ou maior que o valor total atual da Ordem de Serviço.
Fonte: source/MOF001/UdmMOF001.pas:6741-6749 (TdmMOF001.tabORDEMSERVICOVL_LIMITEValidate)
W-0153
Causa: A Forma de Pagamento selecionada não está associada/liberada para a Pessoa (não existe registro em PESSOAFORMAPAGTO ligando essa forma a esse cliente).
Ação: Selecionar outra forma de pagamento já liberada para o cliente, ou cadastrar a associação em TFA001.
Fonte: source/MOF001/UdmMOF001.pas:1341-1371 (TdmMOF001.tabORDEMSERVICOCD_FORMAPAGTOValidate)
W-1701
Causa: Ao cancelar a OS, a trigger de banco (ORDEMSERVICO_AIU0) identificou e cancelou automaticamente um cartão de benefício/fidelidade que estava vinculado a essa OS.
Ação: Apenas informativo — nenhuma ação é necessária; o cartão foi cancelado junto com a OS.
Fonte: source/MOF001/UMOF001.pas:3865-3879 (TfrmMOF001.btnExcluirClick)
W-0202
Causa: O usuário cancelou (fechou sem concluir) a tela de seleção/geração automática de cupons de desconto ou cartão de fidelidade, aberta ao lançar um item ou fechar a OS.
Ação: Reabrir o lançamento do item (ou repetir a ação de Fechar/Salvar) e concluir ou dispensar a tela de benefícios que abrir.
Fonte: source/MOF001/UdmMOF001.pas:2855-2864 (TdmMOF001.tabORDEMSERVITEMCD_SERVICOValidate)
Regras de negócio
MOF001.R001(verregras/MOF001/MOF001.R001.md)MOF001.R002(verregras/MOF001/MOF001.R002.md)MOF001.R003(verregras/MOF001/MOF001.R003.md)MOF001.R004(verregras/MOF001/MOF001.R004.md)MOF001.R005(verregras/MOF001/MOF001.R005.md)MOF001.R006(verregras/MOF001/MOF001.R006.md)MOF001.R007(verregras/MOF001/MOF001.R007.md)MOF001.R008(verregras/MOF001/MOF001.R008.md)MOF001.R009(verregras/MOF001/MOF001.R009.md)MOF001.R010(verregras/MOF001/MOF001.R010.md)MOF001.R011(verregras/MOF001/MOF001.R011.md)MOF001.R012(verregras/MOF001/MOF001.R012.md)MOF001.R013(verregras/MOF001/MOF001.R013.md)MOF001.R014(verregras/MOF001/MOF001.R014.md)MOF001.R015(verregras/MOF001/MOF001.R015.md)MOF001.R016(verregras/MOF001/MOF001.R016.md)MOF001.R017(verregras/MOF001/MOF001.R017.md)MOF001.R018(verregras/MOF001/MOF001.R018.md)MOF001.R019(verregras/MOF001/MOF001.R019.md)MOF001.R020(verregras/MOF001/MOF001.R020.md)MOF001.R021(verregras/MOF001/MOF001.R021.md)MOF001.R022(verregras/MOF001/MOF001.R022.md)MOF001.R023(verregras/MOF001/MOF001.R023.md)MOF001.R024(verregras/MOF001/MOF001.R024.md)
Perguntas frequentes
P: Por que não consigo alterar nada nessa Ordem de Serviço, mesmo estando com status Aberta?
R: Confira o status exato: se está 'B' (Bloqueada) com tipo de bloqueio 'F' ou 'A', o sistema trava toda alteração até a liberação por um Autorizador em MOF007/MOF008. Se está 'F' (Fechada) ou 'P' (Pedido gerado), é preciso reabrir a OS primeiro.
Fonte: source/MOF001/UMOF001.pas:2529-2537 (TfrmMOF001.btnSalvarClick)
P: Deu a mensagem 'A Ordem de Serviço foi alterada por outro usuário...'. O que aconteceu?
R: Outra pessoa salvou alterações nessa mesma OS (mudou a situação, condição/forma de pagamento ou gerou o pedido) entre o momento em que você a abriu e o momento em que tentou salvar. Para não sobrescrever o que a outra pessoa fez, a gravação é cancelada. Atualize a consulta (F2) e refaça a alteração.
Fonte: source/MOF001/UdmMOF001.pas:8105-8142 (TdmMOF001.ValidaConcorrenciaOrdem)
P: Por que o sistema pede saldo de estoque ao incluir uma peça, mesmo com o parâmetro configurado para 'avisar' e não bloquear?
R: Com PARMFATUR.ST_ALERTAESTOQUENEGATIVO='S' ou 'F', o sistema mostra a mensagem C-1708 pedindo confirmação; se você confirmar, a peça é incluída mesmo sem saldo suficiente. Já com o valor 'N', não há aviso: a inclusão simplesmente é bloqueada.
Fonte: source/MOF001/UdmMOF001.pas:3395-3452 (TdmMOF001.ValidaSERVICOITEMItem)
P: Por que não consigo digitar a Equipe Mecânica e o Mecânico do serviço?
R: Se o módulo de 'Vários Vendedores' estiver ligado (PARMOFICINA.ST_MODULOVARIOSVENDEDORES='S'), esses campos ficam ocultos/ignorados na tela, pois a atribuição de equipe passa a ser feita por outro fluxo (F11 — tela de Vários Vendedores). Fora isso, os campos ficam disponíveis normalmente.
Fonte: source/MOF001/UMOF001.pas:2277-2296 (TfrmMOF001.VariosVendedores)
P: Por que não consigo gerar o Pedido de Venda a partir da OS?
R: Confira se a Forma e a Condição de Pagamento estão preenchidas, se o valor total da OS é maior que zero e se já não existe um Pedido (não cancelado) vinculado a essa mesma OS — nesse caso a geração é bloqueada para não duplicar.
Fonte: source/MOF001/UMOF001.pas:4284-4314 (TfrmMOF001.btnPedidoClick)
P: Por que a OS não deixa reabrir?
R: A reabertura é bloqueada se existir Nota Fiscal válida emitida a partir do Pedido gerado pela OS, ou Nota Fiscal de Fechamento de Contrato válida vinculada (MOF010); além disso, só um usuário Autorizador (ou com permissão específica de reabertura) pode reabrir.
Fonte: source/MOF001/UMOF001.pas:5369-5424 (TfrmMOF001.btnReabrirClick)
P: Por que a Condição de Pagamento que eu quero usar não aparece/é recusada para esse cliente?
R: Se o cliente tiver alguma condição de pagamento cadastrada como sugestão em seu endereço (TFA001), a OS passa a aceitar apenas as condições associadas a esse cliente. Cadastre a condição desejada para o cliente em TFA001 ou use uma das já liberadas.
Fonte: source/MOF001/UdmMOF001.pas:1882-1917 (TdmMOF001.ValidaCondPagto)
P: Por que não consigo excluir um serviço ou peça da OS?
R: Itens marcados como 'de terceiro' não podem ser excluídos pela tela. Além disso, se a OS já estiver Fechada ou com Pedido gerado ('P'), é necessário reabrir a OS antes de excluir qualquer item.
Fonte: source/MOF001/UMOF001.pas:3964-3998 (TfrmMOF001.btnExcluirClick)
P: Por que o sistema me obriga a preencher a Origem do Cliente?
R: Quando o parâmetro PARMOFICINA.ST_OBRIGAORIGEMCLIENTE está ligado, a origem (de onde veio o lead/cliente) é obrigatória para toda OS; se estiver vazia, o sistema abre automaticamente a lista de seleção de origens cadastradas em TFA085.
Fonte: source/MOF001/UdmMOF001.pas:7966-8004 (TdmMOF001.validaOrigemCliente)
P: Por que as 8 medidas de sulco do pneu são obrigatórias?
R: Quando PARMOFICINA.ST_SULCOPNEU está ligado, a aba de Sulco de Pneus exige o preenchimento das 8 medidas iniciais para salvar a OS, e das 8 medidas finais para poder fechá-la — é um controle de laudo técnico da oficina de pneus.
Fonte: source/MOF001/UMOF001.pas:2628-2687 (TfrmMOF001.btnSalvarClick), source/MOF001/UMOF001.pas:5079-5138 (TfrmMOF001.btnFecharClick)
Dúvidas em aberto (o código não responde)
- O que exatamente diferencia os valores 'F' e 'A' de ORDEMSERVICO.TP_BLOQUEIO (motivo do bloqueio) nas mensagens MOF008/MOF007? — O código só testa
if TP_BLOQUEIO = 'F' then ... senão if = 'A' then ...para escolher a mensagem/tela referenciada (MOF008 ou MOF007), mas a origem/semântica de cada letra (quem grava 'F' vs 'A') está fora dos arquivos lidos (provavelmente em MOF007/MOF008/VERIFICA_BLOQUEIO). - Qual o efeito completo do parâmetro PARMOFICINA.ST_DATACONSUMO? — Foi encontrada apenas uma referência (dentro de uma expressão condicional complexa em UMOF001.pas por volta da linha 4180) sem contexto suficiente lido para descrever a regra com segurança.
- O que acontece exatamente em cada letra de PARMOFICINA.TP_ORDEMSERVICO além de 'V' (Veículo) e 'P' (Pneu/Plataforma)? — O código trata 'V' e 'P' explicitamente para mostrar/ocultar campos de placa vs. plataforma/frota, mas não há garantia de que sejam os únicos valores possíveis; um terceiro valor não foi identificado nas leituras feitas.
- Qual a regra completa de PARMOFICINA.ST_MODULOVARIOSVENDEDORES combinada com o rateio de comissão (ST_RATEIAVENDEDOR)? — Essas flags aparecem dezenas de vezes na tela de Vários Vendedores (função VariosVendedores, não lida integralmente) controlando rateio de comissão por vendedor/mecânico; o funcionamento fino do rateio não foi coberto nesta sessão.
- O botão 'Gerar Nota' (btnGeraNotaClick) tem regras de negócio próprias além das já cobertas por Pedido? — A rotina foi localizada (linha 5268) mas não foi lida em detalhe nesta sessão.
- Mensagens de catálogo C-1349, C-1698, C-1699, C-1712, E-1713, I-0047 e I-1705, listadas no briefing, disparam onde exatamente no MOF001? — Não foram localizadas com Grep dentro do texto lido de UdmMOF001.pas/UMOF001.pas nesta sessão; podem estar em rotinas de impressão/exportação não lidas (ex.: função imprime) ou em unidades compartilhadas fora do módulo.