1. Introdução
Esta página cobre a Ordem de Produção antes do primeiro apontamento: como criá-la, como programar a agenda dos processos, como firmá-la e como reservar o estoque dos insumos. Cobre também tudo o que ainda é reversível nessa janela — trocar insumo previsto, mudar a quantidade a fabricar, vincular pedidos, e até remover a Ordem de Produção por completo.
A Ordem de Produção nasce sempre de uma Fórmula de Fabricação ativa. Se você ainda não tem uma, comece pela página de Fórmula de Fabricação. E se ainda não leu a página central do módulo, leia antes: a regra de fronteira, a configuração da instância e o encadeamento valem para o módulo inteiro.
As tabelas da Ordem de Produção são de leitura. Diferente da Fórmula, aqui não se grava direto: toda alteração passa pelas rotinas FAB_PRC_* desta página, que aplicam as validações e os efeitos em cadeia no servidor. Criar uma Ordem de Produção não é inserir uma linha em FABORDPRO1 — é gerar nove conjuntos de registros coerentes entre si.
2. Onde encontrar o dicionário oficial da sua API
Esta documentação é complementar. A fonte da verdade sobre parâmetros, tipos, domínios e exemplos é o dicionário da sua instância, gerado a partir do que o seu token alcança. A explicação de como chegar a ele está na página central do módulo.
Confirme no dicionário da sua instância se o objeto que você precisa está disponível para o seu token. O escopo varia por instalação e por token: um objeto citado aqui pode não estar liberado na sua. Se faltar, peça ao gestor do ERP a revisão do cadastro de API.
3. Como a API funciona
Os métodos usados nesta página:
| Método | Para que serve aqui | Exemplo de objeto |
|---|---|---|
PATCH |
Executar todas as rotinas de ação: criar, programar, firmar, reservar, alterar e remover. | FAB_PRC_GERAROPFORMULA, FAB_PRC_RESERVARESTOQUE |
GET |
Consultar a Ordem de Produção criada, a agenda dos processos e das máquinas, e o saldo dos insumos. | FAB_VIEW_ORDEMPRODUCAO, FAB_VIEW_INSUMODISPONIVEL |
Não há POST, PUT nem DELETE nesta página. Todas as vinte rotinas do fluxo respondem a PATCH, e as consultas a GET. Montar a chamada com POST é recusado mesmo com o objeto liberado.
4. Visão geral do fluxo
A preparação de uma Ordem de Produção tem quatro etapas, nesta ordem:
- Gerar — por um dos três caminhos de criação. A Ordem de Produção nasce em
OPD_STATUS = 0, "Simulação". - Programar — atribuir data e hora previstas a cada processo, respeitando os turnos de trabalho.
- Firmar — passar
OPD_STATUSpara1. Exige todos os processos programados. - Reservar — separar o estoque dos insumos previstos. Exige a Ordem de Produção firmada.
As quatro cabem numa chamada só. FAB_PRC_GERAROPFORMULA recebe P_PROGRAMACAO, P_OPD_STATUS e P_OPD_ESTOQUE, e executa as três etapas seguintes nessa mesma ordem. Decompor em quatro chamadas é uma escolha, não uma exigência — ver o Passo 3.
A janela de reversibilidade fecha no primeiro apontamento. Enquanto não houver apontamento de insumo, mão de obra ou setup, quase tudo pode ser desfeito: liberar a reserva, trocar insumo previsto, mudar a quantidade a fabricar, cancelar ou remover a Ordem de Produção. Depois do primeiro apontamento, essas rotinas passam a recusar — e o caminho é remover os apontamentos primeiro, pelas rotinas da página de Apontamento.
5. Diagrama de execução
Convenção visual: azul (Retaguarda do ERP) · verde (Via API).
6. Aviso sobre liberação na retaguarda
Atenção — três coisas fora do seu alcance decidem se este fluxo funciona.
- O verbo
PATCHliberado para cada rotina que você pretende chamar, no cadastro de API. A lista efetiva aparece no dicionário da sua instância. - Os turnos de trabalho da empresa, em
FABTURNOEMPRESA. Sem turno cadastrado para a filial, o término previsto de cada processo é o início somado às horas previstas, sem respeitar jornada. Com turno, o cálculo é feito faixa a faixa. - A configuração do módulo, em
FABCONFIG— ver o aviso seguinte, que é o que mais surpreende quem integra pela primeira vez.
Com CFG_RESERVAPARCIAL = 0, a reserva de estoque não existe na instância. As quatro rotinas de reserva e liberação — FAB_PRC_RESERVARESTOQUE, FAB_PRC_RESERVARESTOQUE2, FAB_PRC_LIBERARESTOQUE e FAB_PRC_LIBERARESTOQUE2 — retornam sem fazer nada e sem erro. A chamada tem sucesso, e nada acontece.
A consequência atravessa esta página e a de apontamento: sem reserva, FABORDPRO6 fica vazia, e a abertura do processo não consome insumo automático nenhum, porque é dessa tabela que ela lê. Consulte CFG_RESERVAPARCIAL antes de concluir que a reserva falhou.
| Pré-requisito | Por que importa |
|---|---|
| Fórmula de Fabricação Ativa | É a origem de toda Ordem de Produção. Fórmula em Edição ou Inativa recusa a criação com "A Fórmula N não está Ativa." Ver Fórmula de Fabricação. |
Empresa ou filial (FILIAL) | Parâmetro de todas as rotinas de criação. No caminho do planejamento, é dela que sai o setor padrão. |
Setor / centro de custo (SETOR) | Onde o custo da produção é apropriado. |
Local de estoque (LOCEST) | De onde os insumos saem e para onde o produto fabricado entra. |
Turnos de trabalho (FABTURNOEMPRESA) | Definem a jornada usada no cálculo das janelas previstas dos processos. |
Custo de máquina (FABMAQUINACUSTO) | Sem custo cadastrado para a máquina na faixa de horário da programação, o recálculo do custo previsto é interrompido com mensagem. |
| Saldo em estoque dos insumos | A reserva automática confere o saldo e recusa o processo inteiro quando falta. |
| Registro em Órgão Regulatório dos produtos | Produto com registro vencido faz a criação recusar, listando os produtos. |
FABCONFIG | CFG_RESERVAPARCIAL liga e desliga a reserva inteira; CFG_PERMANUTENCAO1 é a data de corte que bloqueia alteração retroativa nos processos. |
Escolha um. Os três terminam numa Ordem de Produção completa, mas partem de pontos diferentes e dão graus diferentes de controle:
| Rotina | Você informa | Quando usar |
|---|---|---|
FAB_PRC_GERAROPFORMULA |
A Fórmula, ou o produto, ou a matéria prima principal | O caminho principal. É o único com controle explícito sobre qual Fórmula será usada, e o único que aceita programar, firmar e reservar na mesma chamada. As outras duas o chamam por baixo. |
FAB_PRC_GERAROPPEDIDO |
Listas de pedidos e de itens de Pedido de Venda | Quando a produção é puxada por venda. Agrupa os itens elegíveis e cria uma Ordem de Produção por grupo, já vinculada aos itens que a originaram. |
FAB_PRC_GERAROPMRP |
Produto, quantidade e data | Quando a produção vem do planejamento de necessidades. A Fórmula é descoberta pelo produto, sob critérios rígidos, e os processos já saem programados. |
Nenhuma das três devolve o código da Ordem de Produção no retorno. Como descobrir o que foi criado é o assunto do Passo 6 — e é o ponto que mais atrapalha uma integração nova.
Cria a Ordem de Produção completa: cabeçalho, produtos a fabricar, processos, insumos previstos, mão de obra prevista, máquinas, setups e especificações, com todos os custos previstos calculados.
São doze parâmetros; os sete últimos são opcionais:
| Parâmetro | Descrição |
|---|---|
P_CODIGO | Código cujo significado depende de P_QTDREF — ver o bloco seguinte. |
P_FL_COD | Empresa ou filial da Ordem de Produção. |
P_ST_COD | Setor ou centro de custo. |
P_LE_COD | Local de estoque. |
P_QTD | Quantidade a produzir, interpretada conforme P_QTDREF. |
P_INTERNO | Indica chamada vinda de outra rotina [0-Não; 1-Sim]. Opcional, padrão 0. Tem efeito sobre como o código da Ordem de Produção é publicado — ver o Passo 6. |
P_DATA | Data e hora de geração. Opcional, padrão nulo. |
P_QTDREF | Define o que P_CODIGO representa. Opcional, padrão 0. |
P_ORD_COD | Código da Ordem de Serviço a vincular. Opcional, padrão 0. |
P_PROGRAMACAO | Data e hora de início da programação dos processos. Opcional, padrão nulo. Informada, programa. |
P_OPD_STATUS | Já criar Firmada [0-Não; 1-Sim]. Opcional, padrão 0. |
P_OPD_ESTOQUE | Reservar os insumos na criação. Opcional, padrão 0. Três valores — ver abaixo. |
Os quatro valores de P_QTDREF
Este parâmetro muda o significado do primeiro. Errar aqui não produz mensagem: produz uma Ordem de Produção de outra coisa.
| Valor | O que P_CODIGO passa a ser | Efeito |
|---|---|---|
0 | Código da Fórmula de Fabricação | Padrão. A quantidade é a da unidade de fabricação da Fórmula. |
1 | Código da Matéria Prima Principal | A Fórmula é a que declara aquele produto como matéria prima principal. Fórmula sem matéria prima definida recusa. |
2 | Código do Produto Fabricado | A Fórmula é descoberta pelo produto. Produto sem Fórmula recusa com "Não foi encontrado Fórmula para o Produto N." |
9 | Código de uma Ordem de Produção existente | Regenera aquela Ordem de Produção em vez de criar uma nova. É o que FAB_PRC_ALTERARQTDFABRICAR usa por baixo. |
Os três valores de P_OPD_ESTOQUE
| Valor | Efeito |
|---|---|
0 | Não reserva. É o padrão. |
1 | Reserva todos os insumos previstos. |
2 | Reserva sem a matéria prima principal, deixando-a para reserva manual com escolha de lote e local. |
Chamada única ou decomposta
Com P_PROGRAMACAO, P_OPD_STATUS e P_OPD_ESTOQUE informados, a rotina executa as três etapas seguintes nesta ordem: programa os processos, firma a Ordem de Produção, reserva o estoque. É exatamente a sequência dos Passos 7, 9 e 10, feita de uma vez.
| Forma | Quando escolher |
|---|---|
| Chamada única os três parâmetros preenchidos | Quando a agenda e a reserva podem ser automáticas. Menos requisições, e a ordem correta é garantida pelo servidor. |
| Decomposta criar, depois programar, firmar e reservar | Quando você precisa conferir entre as etapas — ajustar a agenda antes de firmar, ou escolher lote e local na reserva. Também isola em qual etapa uma recusa aconteceu. |
Exemplo — criar, programar, firmar e reservar numa chamada
{
"method": "PATCH",
"objectType": "PROCEDURE",
"objectName": "FAB_PRC_GERAROPFORMULA",
"params": [
{ "name": "P_CODIGO", "value": "42" },
{ "name": "P_FL_COD", "value": "1" },
{ "name": "P_ST_COD", "value": "1" },
{ "name": "P_LE_COD", "value": "1" },
{ "name": "P_QTD", "value": "100.000000" },
{ "name": "P_PROGRAMACAO", "value": "2026-08-20 08:00:00" },
{ "name": "P_OPD_STATUS", "value": "1" },
{ "name": "P_OPD_ESTOQUE", "value": "1" }
]
}
Valores ilustrativos. Os códigos acima são exemplos. Use os cadastros da sua instância. A assinatura completa e autoritativa está no dicionário oficial.
Simule o custo antes de criar. FAB_RES_CUSTOFORMULA monta a mesma estrutura e devolve todos os custos sem criar nada. Mesmos parâmetros iniciais. Ver a página de Fórmula.
Recebe listas de pedidos e de itens, agrupa os itens elegíveis e cria uma Ordem de Produção por grupo, com a quantidade somada. Cada Ordem criada já nasce vinculada aos itens que a originaram.
| Parâmetro | Descrição |
|---|---|
P_LST_PEDIDO | Lista de pedidos no formato {FL_COD.PE_COD}, concatenados. As chaves fazem parte do formato. |
P_LST_ITEM | Lista de itens no formato {FL_COD.PE_COD.PE_ITM}, concatenados. |
P_ST_COD | Setor ou centro de custo de destino das Ordens de Produção. |
Lista vazia significa TODOS, não nenhum. A recusa só acontece quando as duas listas vierem vazias ao mesmo tempo. Enviando pedidos e deixando os itens em branco, todos os itens daqueles pedidos entram; deixando os pedidos em branco e informando itens, os itens informados entram. Informe sempre as duas listas — é o único uso previsível.
Como o agrupamento funciona
Os itens elegíveis são agrupados por filial, setor de origem do pedido, local de estoque e produto. Cada grupo vira uma Ordem de Produção, com a soma das quantidades em unidade de estoque. Dois pedidos do mesmo produto na mesma filial produzem uma Ordem de Produção, não duas.
Quais itens entram
Um item precisa cumprir todos estes critérios:
- pedido do tipo venda, com status ativo;
- saldo a faturar maior que zero;
- quantidade cancelada igual a zero;
- quantidade atendida igual a zero;
- ainda não vinculado a nenhuma Ordem de Produção.
Item que não cumpra os critérios é ignorado, sem erro e sem aviso. A chamada tem sucesso mesmo quando nada foi gerado. Confira sempre o que foi efetivamente criado, consultando FABORDPROPED pelos itens que você informou.
A Fórmula de cada Ordem de Produção é descoberta a partir do produto do pedido. Produto sem Fórmula que atenda aos critérios de geração faz aquele grupo falhar com a mensagem do caminho por Fórmula.
Ver também Pedido de Venda, para como os itens chegam a esse estado.
Cria uma Ordem de Produção para um produto sob demanda e já programa os processos dela. Aqui não se informa a Fórmula: o servidor a descobre pelo produto.
| Parâmetro | Descrição |
|---|---|
P_FL_COD | Empresa ou filial. O setor de destino vem do padrão cadastrado nela, em FILIAL.FL_ST_CODPADRAO, e não é parâmetro. |
P_PD_COD | Produto a fabricar. A Fórmula é descoberta a partir dele. |
P_QTDE | Quantidade a produzir, na unidade de fabricação da Fórmula. |
P_DATA | Data e hora de produção e de início da programação dos processos. |
Os quatro critérios da Fórmula, todos ao mesmo tempo
FRM_PD_PERSOBDEMANDAigual a100para aquele produto;- a Fórmula ter exatamente um produto a fabricar;
FRM_STATUS = 1, Ativa;FRM_TIPO = 1, Própria Interna.
A mensagem de recusa cita só um dos quatro critérios. "O produto N não tem Fórmula de Fabricação Ativa" aparece também quando a Fórmula está ativa mas tem mais de um produto a fabricar, ou percentual sob demanda diferente de 100, ou é de Produção em Terceiros. Confira os quatro antes de concluir que o problema é o status.
Se mais de uma Fórmula atender aos critérios, o servidor usa uma delas sem dizer qual. Para controle explícito da Fórmula, use FAB_PRC_GERAROPFORMULA.
Hora zerada vira 08:00. Quando P_DATA vier sem hora, o servidor assume oito da manhã do mesmo dia. Informe a hora desejada para evitar a normalização.
Nenhuma das três rotinas de criação devolve o código da Ordem de Produção como resultado da chamada. Esta seção é o caminho para descobri-lo, e vale a pena ler inteira antes de montar a integração.
O caminho recomendado: P_INTERNO = 1
Só para FAB_PRC_GERAROPFORMULA. Ela publica o número da Ordem de Produção no controle de processamento do usuário da sessão, em CTRLPROCESSAMENTO.CTP_INFOEXE — e o formato depende de P_INTERNO:
P_INTERNO | O que vai para CTP_INFOEXE |
|---|---|
0 (padrão) | Uma frase: Foi gerado a Ordem de Produção de código "N". O número vem dentro do texto, e você precisa extraí-lo. |
1 | Só o número. É o formato utilizável por programa. |
A chave de CTRLPROCESSAMENTO é o par usuário e código de processamento, então selecionar a linha certa também exige saber o usuário do seu token.
A alternativa: consultar a maior Ordem de Produção
Consulte FAB_VIEW_ORDEMPRODUCAO logo após a chamada, filtrando pela Fórmula e pela filial que você acabou de usar, e tome o maior OPD_COD.
Esta alternativa está sujeita a concorrência. Se outro integrador criar uma Ordem de Produção da mesma Fórmula e filial entre a sua chamada e a sua consulta, o maior código passa a ser o dele. Serialize as duas operações quando isso for possível, ou prefira P_INTERNO = 1.
Nos outros dois caminhos
| Rotina | Onde encontrar o que foi criado |
|---|---|
FAB_PRC_GERAROPPEDIDO | Consulte FABORDPROPED pelos itens de pedido que você informou — o vínculo é criado junto com a Ordem de Produção e é o retorno mais confiável dos três caminhos. |
FAB_PRC_GERAROPMRP | Consulte FAB_VIEW_ORDEMPRODUCAO pelo produto, filial e data, com a mesma ressalva de concorrência. |
FAB_VIEW_ORDEMPRODUCAO é o ponto de entrada do módulo
É por ela que se lê a Ordem de Produção com os códigos já traduzidos — filial, tipo, finalidade, status, Fórmula, local de estoque e centro de custo. Toda consulta desta página e das seguintes começa aqui. Guarde o OPD_COD: ele é o primeiro parâmetro de praticamente todas as rotinas do módulo.
| Campo | Domínio |
|---|---|
OPD_STATUS | [0-Simulação; 1-Firmada; 2-Fechada; 9-Cancelada] |
OPD_TIPO | [1-Própria Interna; 2-Própria em Terceiros; 3-Para Terceiros] |
OPD_FINALIDADE | [0-OP de Produção; 1-OP de Fracionamento/Embalagem] |
OPD_MODELOAPTRH | [0-Por Funcionário; 1-Por Função] — herdado da Fórmula, decide qual rotina de mão de obra a Ordem aceita. |
Programar é atribuir data e hora previstas de início e término a cada processo, respeitando os turnos de trabalho. Sem isso a Ordem de Produção não pode ser firmada.
| Parâmetro | Descrição |
|---|---|
P_OPD_COD | Código da Ordem de Produção. |
P_PRO_COD | Processo inicial a partir do qual a programação é recalculada. |
P_INICIO | Data e hora de início para esse processo inicial. |
A rotina percorre os processos da Ordem de Produção em ordem hierárquica e grava a janela prevista de cada um. Ao mudar de ordem hierárquica, o início é reiniciado a partir do término do grupo anterior — processos de mesma ordem correm em paralelo, a partir do mesmo início. É assim que a concomitância declarada na Fórmula se realiza na agenda.
Com turno cadastrado para a filial, o término é calculado consumindo as horas previstas dentro das faixas de trabalho de cada dia. Sem turno, o término é simplesmente o início somado às horas previstas.
Ela não reprograma processo que já esteja programado. A reprogramação é interrompida quando o processo anterior já termina antes do início do processo corrente — não há sobreposição a resolver. Para mover um processo já programado, use FAB_PRC_REAGENDARPROCESSO, do Passo 8.
Ordem de Produção ou processo inexistente não produz mensagem. A atualização afeta zero linhas e a chamada termina normalmente. Confira o resultado consultando FAB_VIEW_AGENDAPROCESSO.
Cada gravação recalcula em cadeia o custo previsto de máquina do processo. Se a máquina não tiver custo cadastrado para a faixa de horário da programação, o recálculo é interrompido com mensagem — e a causa está no cadastro de custo de máquina, não na chamada.
Consultar a agenda
| View | O que entrega |
|---|---|
FAB_VIEW_AGENDAPROCESSO | A agenda dos processos das Ordens de Produção. |
FAB_VIEW_AGENDAMAQUINA | A agenda das máquinas, para enxergar conflito de ocupação. |
FAB_VIEW_MAQUINA | O cadastro das máquinas da fábrica. |
FAB_VIEW_MANUTENCAOMAQUINA | As manutenções previstas, para não agendar processo sobre máquina parada. |
Mover um processo na agenda — FAB_PRC_REAGENDARPROCESSO
É a rotina indicada para mover um processo já programado. Recebe a nova janela completa e propaga o efeito aos processos seguintes.
{
"method": "PATCH",
"objectType": "PROCEDURE",
"objectName": "FAB_PRC_REAGENDARPROCESSO",
"params": [
{ "name": "P_OPD_COD", "value": "1001" },
{ "name": "P_PRO_COD", "value": "10" },
{ "name": "P_INICIO", "value": "2026-08-21 08:00:00" },
{ "name": "P_FIM", "value": "2026-08-21 16:00:00" }
]
}
Ela é a única rotina desta página que devolve um result set: o processo reagendado e todos os processos cuja janela mudou por efeito da cascata, com OPD_COD, PRO_COD, OPD_DATINIPREV e OPD_DATFIMPREV já gravados. Assim você vê o efeito completo, não só o processo que pediu.
A janela informada é gravada exatamente como veio. O servidor não recalcula o término a partir das horas previstas do processo. Informar um término coerente com a duração é responsabilidade de quem chama.
Result set com uma linha só é normal — significa que o processo seguinte já começava depois do novo término, e não havia sobreposição a resolver. Result set vazio é diferente: significa que o par de Ordem de Produção e processo não foi encontrado, não que nada precisava mudar.
Reagende antes de abrir o processo. Depois de aberto, a gravação é recusada informando que o processo já foi iniciado — o caminho é cancelar a abertura primeiro, pelas rotinas da página de Apontamento. A data também precisa ser posterior ao corte de CFG_PERMANUTENCAO1, e a ordem de agendamento precisa seguir a ordem de execução dos processos.
Registrar uma parada prevista — FAB_PRC_INCLUIROCIOPROCESSO
Grava o tempo entre o início e o fim informados como tempo ocioso do processo, e recalcula o término previsto somando as horas de trabalho às horas de ócio.
As datas informadas não são gravadas — só a duração entre elas. Um intervalo das 12h às 13h e outro das 20h às 21h produzem exatamente o mesmo resultado. E o ócio é substituído, não acumulado: chamar duas vezes descarta o ócio da primeira chamada. Para representar duas paradas, informe um único intervalo com a soma dos tempos.
O alcance é só o processo informado: os seguintes não são reprogramados. Para propagar a mudança pela cadeia, chame FAB_PRC_REAGENDARPROCESSO depois.
Trocar a máquina de um processo — FAB_PRC_ALTERAEVENTOMAQUINA
Refaz os setups previstos e as horas previstas com a máquina nova, recalcula os custos previstos e sempre reprograma o processo ao final, mesmo quando a máquina informada é a mesma.
| Parâmetro | Descrição |
|---|---|
P_OPD_DATINIPREV | É o primeiro parâmetro, não o código da Ordem de Produção. Data e hora usadas na reprogramação final. |
P_OPD_COD | Código da Ordem de Produção. |
P_PRO_COD | Código do processo. |
P_MAQ_COD_ANT | Máquina atualmente alocada. |
P_MAQ_COD_NEW | Máquina nova. Precisa constar na Fórmula para aquele processo, senão a chamada é recusada. |
A máquina nova tem de estar prevista na Fórmula. Não há caminho pela API para alocar máquina fora dela: acrescente a máquina em FABFORMULA5 na Fórmula antes, dentro do ciclo de status, e depois troque na Ordem de Produção.
A mesma rotina governa as quatro transições de status. Aqui interessa a passagem para 1, Firmada — o fechamento em 2 está na página de Documentos e Encerramento.
{
"method": "PATCH",
"objectType": "PROCEDURE",
"objectName": "FAB_PRC_ALTERARSTATUSOP",
"params": [
{ "name": "P_OPD_COD", "value": "1001" },
{ "name": "P_OPD_STATUS", "value": "1" }
]
}
| Alvo | Status | O que exige |
|---|---|---|
0 | Simulação | Nenhum apontamento de insumo, mão de obra ou setup. |
1 | Firmada | Todos os processos com início e término previstos preenchidos. |
2 | Fechada | Ver a página de Documentos e Encerramento. |
9 | Cancelada | Nenhum apontamento de insumo, mão de obra ou setup. |
Transição para o status atual não faz nada, e não é erro: a rotina encerra imediatamente, sem efeito. Qualquer valor fora de 0, 1, 2 e 9 é recusado com "Status não permitido".
Firmar não é só mudar um campo. Ao firmar, o servidor abate o saldo previsto do estoque dos insumos da Ordem de Produção — desde que ela ainda não tenha apontamento de insumo — e marca a quantidade prevista reservada dos produtos a fabricar. Cancelar ou voltar para Simulação desfaz isso, libera as reservas de todos os processos e limpa as datas previstas.
Voltar de Firmada para Simulação apaga a programação. As datas previstas de início e término de todos os processos são zeradas, e será preciso programar de novo antes de firmar outra vez.
Reservar é separar o estoque dos insumos previstos para esta Ordem de Produção. Exige a Ordem de Produção Firmada. Há duas rotinas, com propósitos diferentes.
A automática — FAB_PRC_RESERVARESTOQUE — é o caminho principal
Reserva todos os insumos previstos de um processo, ou de todos os processos, deixando o servidor escolher de onde. É a que confere saldo.
| Parâmetro | Descrição |
|---|---|
P_OPD_COD | Código da Ordem de Produção. Precisa estar Firmada. |
P_PRO_COD | Processo a reservar. Opcional: nulo ou zero reserva todos os processos, da primeira ordem de execução para a última. |
P_IGNORAR_MP | [0-Reservar todos os insumos; 1-Pular a matéria prima principal]. Opcional, padrão 0. |
Para cada insumo previsto, o servidor compara a quantidade prevista com o maior saldo disponível. Faltando saldo em qualquer insumo, o processo inteiro é recusado, com a lista dos insumos sem saldo.
Consulte FAB_VIEW_INSUMODISPONIVEL antes de reservar e você antecipa a recusa. Ela entrega, por Ordem de Produção, processo e subprocesso, o insumo previsto, a quantidade prevista em unidade de estoque e o saldo disponível — incluindo os insumos alternativos, distinguidos pela coluna GRUPO [1-Padrão; 2-Alternativo], com a ordem de preferência de cada um.
A recusa de um processo interrompe a rotina, e os já reservados permanecem reservados. O estado fica parcial. Reservar processo a processo, informando P_PRO_COD, dá controle mais previsível do que reservar tudo de uma vez.
Uma exceção à conferência de saldo: quando a Ordem de Produção está vinculada a uma Produção do Dia, o saldo não é conferido e a reserva acontece mesmo sem estoque. É a única situação em que esta rotina reserva sem conferir. Ver Produção do Dia.
A manual — FAB_PRC_RESERVARESTOQUE2 — quando o lote importa
Reserva um insumo, na quantidade, no lote e no local que você escolher. São oito parâmetros, todos obrigatórios: Ordem de Produção, processo, subprocesso, filial, local de estoque, produto, lote e quantidade.
Consulte FAB_VIEW_INSUMODISPONIVELLOTE antes. É a versão por lote de FAB_VIEW_INSUMODISPONIVEL, e é ela que diz quais lotes existem e com que saldo. Consulte-a antes de escolher o lote a informar. FAB_VIEW_SALDOINSUMO serve para a análise de saldo consolidada.
A reserva manual não confere nada. Não confere saldo disponível, não confere a quantidade prevista do insumo, não confere se o insumo pertence à Fórmula e não confere se já existe reserva. Reservar acima do saldo tem sucesso em silêncio e deixa o saldo previsto negativo. Conferir antes é responsabilidade de quem chama.
Cada chamada cria uma reserva nova — não atualiza a anterior. Chamar duas vezes com os mesmos dados cria duas reservas e abate o saldo duas vezes. Para corrigir uma reserva, libere e reserve de novo; nunca repita a chamada esperando que ela substitua.
O modo de apontamento do insumo reservado é herdado da Fórmula, do campo FRM_APONTAMENTO daquele insumo; sem correspondência, assume 0, Manual. É esse valor que decide o que a abertura do processo consome — ver Apontamento.
Liberar devolve a quantidade reservada ao saldo previsto do estoque e descarta os insumos reservados. Duas rotinas, espelhando as duas de reserva.
| Rotina | Alcance |
|---|---|
FAB_PRC_LIBERARESTOQUE | O processo inteiro, ou todos os processos quando P_PRO_COD vier nulo ou zero — percorridos da última ordem de execução para a primeira. |
FAB_PRC_LIBERARESTOQUE2 | Um insumo, identificado por processo, subprocesso, produto e lote. |
As duas exigem, no nível do processo: nenhum apontamento de insumo, e o processo ainda não iniciado. Basta um apontamento em qualquer insumo do processo para bloquear a liberação de todos eles.
P_LE_COD de FAB_PRC_LIBERARESTOQUE2 não restringe a liberação. Se o mesmo produto e lote estiver reservado em mais de um local de estoque para o mesmo processo e subprocesso, a chamada libera todos eles, não apenas o do local informado. A rotina irmã de reserva usa o local normalmente — a assimetria é só na liberação.
O lote trata nulo e vazio como a mesma coisa: informar lote vazio alcança o insumo reservado sem lote. E insumo inexistente não produz mensagem — a chamada termina normalmente sem ter liberado nada.
Como a liberação também percorre vários processos numa chamada, vale a mesma ressalva da reserva: a recusa de um processo interrompe a rotina e deixa o estado parcial.
Serve para três coisas: trocar o insumo por outro, mudar a quantidade prevista ou mudar o local de estoque de onde ele sairá. São sete parâmetros, todos obrigatórios.
| Parâmetro | Descrição |
|---|---|
P_OPD_COD, P_PRO_COD, P_SPR_COD | Ordem de Produção, processo e subprocesso. |
P_PD_COD_OLD | Insumo atual, que será substituído. |
P_PD_COD_NEW | Insumo novo. Para mudar só a quantidade ou o local, informe o mesmo valor de P_PD_COD_OLD. |
P_QTDPREV | Nova quantidade prevista, na unidade de estoque do produto. |
P_LE_COD | Local de estoque de onde o insumo sairá. |
O processo não pode ter reserva de estoque. A chamada é recusada com "O processo N da O.P. M já tem reservas de estoque." A ordem correta é: liberar a reserva pelo Passo 11, alterar a previsão, e reservar de novo pelo Passo 10.
Insumo anterior inexistente não produz mensagem — e o efeito é acrescentar, não substituir. A remoção afeta zero linhas e a inserção acontece do mesmo jeito. Confira o código do insumo atual em FABORDPRO3 antes de chamar, ou acabará com um insumo a mais no processo.
A unidade do insumo novo não é parâmetro: assume a unidade de estoque cadastrada no produto, e a quantidade é convertida pelo fator de equivalência de PRODEQUIV. Sem equivalência cadastrada, o fator usado é 1 — o que produz quantidade errada em silêncio. Cadastre a equivalência antes.
O insumo novo é gravado como alterado manualmente, e não como vindo da Fórmula. Os custos previstos do processo e do produto a fabricar são recalculados na sequência.
O saldo do insumo anterior só volta ao estoque se a Ordem de Produção estiver Firmada. Em Simulação nada é devolvido, porque também nada havia sido abatido.
Esta rotina não ajusta um campo: ela descarta os detalhes da Ordem de Produção e os gera de novo a partir da Fórmula. Processos, insumos previstos, mão de obra prevista, máquinas, setups e custos são todos refeitos com a quantidade nova. O que você tiver ajustado à mão se perde: a programação dos processos, as previsões de insumo alteradas pelo Passo 12, as reservas — que são liberadas antes — e os números de série já sugeridos. O vínculo com pedidos também não sobrevive à regeração.
Antes de chamar, considere se não é mais previsível remover a Ordem de Produção e criar outra com a quantidade certa. O resultado é equivalente e o estado final é mais fácil de conferir.
| Parâmetro | Descrição |
|---|---|
P_OPD_COD | Código da Ordem de Produção. |
P_QTD | Nova quantidade total a produzir. Não é acréscimo: substitui a quantidade prevista. |
Só é aceita com a Ordem de Produção em Simulação ou Firmada, e sem nenhum apontamento — nem de insumo, nem de mão de obra, nem de setup — e sem processo iniciado. Para mudar a quantidade de uma Ordem que já tem apontamento, remova os apontamentos primeiro, pelas rotinas da página de Apontamento.
O status anterior é preservado na regeração: uma Ordem Firmada continua Firmada depois da alteração.
O vínculo entre Ordem de Produção e item de Pedido de Venda alimenta o acompanhamento de status de venda. Quando a Ordem nasce pelo Passo 4 ele já vem pronto; estas rotinas servem para ajustá-lo depois.
Vincular — FAB_PRC_VINCULAROPPEDIDO
Recebe as mesmas duas listas do Passo 4, mais o código da Ordem de Produção, e vincula em lote os itens que atendem aos critérios. Valem aqui os mesmos cinco critérios de elegibilidade, a mesma regra de lista vazia significa todos, e o mesmo silêncio: item que não cumpra os critérios é ignorado sem aviso. Confira o resultado em FABORDPROPED.
O código da Ordem de Produção aqui é numeric(5), e não numeric(8) como no resto do módulo. Ordem de Produção com código acima de 99999 não é alcançável por esta rotina. Para desfazer um vínculo dessas, use a rotina de desvincular, que aceita o tipo completo.
Duas mensagens desta rotina não descrevem o que a verificação faz. Leia o comportamento, não o texto:
- "A soma da quantidade dos pedidos é superior a produção da O.P." — na verdade a recusa acontece quando a quantidade prevista da Ordem de Produção é maior que a soma dos pedidos. Ou seja, os pedidos precisam cobrir toda a produção prevista. Reduzir a quantidade do pedido é a ação errada; a certa é acrescentar pedidos, ou reduzir a produção.
- "somente é aceito pedidos do produto X" — o produto citado na mensagem é o que você enviou, não o que a Ordem de Produção fabrica. Para saber qual é o aceito, consulte
FABORDPRO11pela Ordem de Produção.
Desvincular — FAB_PRC_DESVINCULAROPPEDIDO
Remove um vínculo por vez. Os cinco parâmetros — Ordem de Produção, filial, pedido, item e produto — formam a chave da exclusão. Exige Ordem de Produção não Fechada e item ainda não atendido.
Chave inexistente não produz mensagem: a exclusão afeta zero linhas e a chamada termina normalmente. Confira consultando FABORDPROPED depois. E note que a mensagem de item já atendido mostra o código do produto onde diz "pedido" — o número que aparece ali não é o do pedido.
FAB_PRC_RECALCULARCPREVOP
Recalcula o custo previsto inteiro da Ordem de Produção, em cinco etapas encadeadas: insumo, máquina, mão de obra, processo e produto a fabricar. Recebe só o P_OPD_COD.
Use-a depois de mudar preço de custo, custo de máquina ou custo por tipo de RH nos cadastros — a Ordem de Produção guarda os custos calculados no momento em que foi criada, e não os atualiza sozinha.
Ela não confere pré-requisito nenhum — nem o status da Ordem de Produção. E é interrompida com mensagem quando alguma máquina não tem custo cadastrado para a faixa de horário da programação. Nesse caso a causa está no cadastro de custo de máquina, e o recálculo para no meio.
FAB_FNC_OPANTERIOR
Função de consulta, chamada por GET. Devolve o código da Ordem de Produção considerada anterior à informada — a de etapa mais avançada cujo término realizado seja anterior ao corte da Ordem de referência. Serve para encadear produções da mesma Fórmula.
| Parâmetro | Descrição |
|---|---|
P_OP_COD | Ordem de Produção de referência. Obrigatório. |
P_FRM_COD | Restringe a busca a Ordens da mesma Fórmula. Opcional, padrão 0, que significa qualquer Fórmula. |
P_OPD_STATUS | Restringe a busca por status. Opcional, padrão -1, que significa qualquer status. |
Enviar nulo em P_OPD_STATUS não é o mesmo que omiti-lo. Nulo é convertido para 0, e a busca passa a filtrar apenas Ordens em Simulação. O valor que significa "qualquer status" é -1. Omita o parâmetro, ou envie -1 explicitamente — nunca nulo.
Retorno vazio significa que nenhuma Ordem de Produção atendeu aos filtros.
Operação irreversível. Não confunda com o cancelamento pelo status: cancelar preserva o registro, remover faz a Ordem de Produção deixar de existir, com todos os detalhes dela. Não há passo intermediário de confirmação.
Recebe apenas o P_OPD_COD. Exige que a Ordem de Produção não esteja Fechada, não tenha Ordens filhas e não tenha nenhum apontamento nem processo iniciado ou fechado.
Aprovadas as validações, a rotina libera a reserva de estoque de cada processo, cancela a previsão de reserva se a Ordem estiver Firmada, remove os lotes que ela criou e que nunca foram usados, e então exclui os registros.
Lote já movimentado em estoque ou já presente em pedido é preservado. Só some o lote criado pela Ordem de Produção e nunca usado — junto com as análises de qualidade associadas a ele.
Duas tabelas ficam de fora, e podem impedir a remoção
A rotina apaga dezenove conjuntos de registros da Ordem de Produção, mas não apaga estas duas:
| Tabela | O que guarda | Quando aparece |
|---|---|---|
FABORDPRO9 | Notas de produtos e insumos da Produção em Terceiros | Ordem de Produção de OPD_TIPO = 2 com nota de terceiros vinculada. |
FABORDPRODOCS | Rateios de despesas por Ordem de Produção | Documento de despesa captado e rateado para a Ordem. |
Ordem de Produção com nota de terceiros vinculada ou despesa rateada não é removível sem limpeza prévia. As duas tabelas apontam para a Ordem de Produção e a exclusão do cabeçalho não passa enquanto houver linha nelas. Desfaça primeiro o vínculo da nota e o rateio da despesa, pelas rotinas da página de Documentos e Encerramento, e só então remova.
Ordem de Produção inexistente não produz mensagem: as exclusões afetam zero linhas e a chamada termina normalmente. Confira consultando FAB_VIEW_ORDEMPRODUCAO depois.
Validações e erros
As mensagens abaixo são as que o servidor devolve. N, M e P são substituídos pelos códigos envolvidos. Quase todas vêm precedidas do prefixo interno DBMATENCAO,OPERACAO| — descarte-o ao exibir para o usuário final.
Criação
| Mensagem | Causa | O que fazer |
|---|---|---|
| A Fórmula N não está Ativa. | A Fórmula está em Edição ou Inativa. | Ative a Fórmula — ver Fórmula, Passo 10. |
| Não foi encontrado Fórmula para o Produto N. | Com P_QTDREF = 2, o produto não está em nenhuma Fórmula. | Inclua o produto em FABFORMULA11, ou informe a Fórmula direto com P_QTDREF = 0. |
| Não foi definido a Matéria Prima Principal para a Fórmula N. | Com P_QTDREF = 1, a Fórmula não declara matéria prima principal. | Preencha FRM_PD_COD na Fórmula, ou use outro valor de P_QTDREF. |
| A Fórmula N não tem processos informados. | Fórmula sem nenhuma linha de processo. | Grave os processos na Fórmula. |
| A soma dos "Percentuais sob demanda" da Fórmula N é diferente de 100%. | Os percentuais dos produtos a fabricar não fecham em 100. | Corrija na Fórmula. Vale também para os percentuais de distribuição do custo, com mensagem análoga. |
| Os seguintes produtos estão com o Registro em Orgão Regulatório vencido: ... | Produto da Fórmula com registro regulatório vencido. | Atualize o registro no cadastro do produto. A mensagem lista os produtos. |
| O produto N não tem Fórmula de Fabricação Ativa | No caminho do planejamento, qualquer dos quatro critérios de escolha da Fórmula falhou. | Confira os quatro — ver o Passo 5. A mensagem cita só o status. |
| Não roam informados pedidos para a geração da O.P. | As duas listas de pedidos e itens vieram vazias ao mesmo tempo. | Informe ao menos uma das duas. O texto tem um erro de digitação no produto; a causa é essa. |
Status, programação e agenda
| Mensagem | Causa | O que fazer |
|---|---|---|
| Os processos (N) da O.P. M não tem "Data/Hora Inicio" e/ou "Data/Hora Fim" de Previsão preenchidas. | Tentativa de firmar com processos ainda não programados. | Programe pelo Passo 7 e firme depois. |
| Foram realizados apontamentos de Insumo para os processos (N) para a O.P. M. | Tentativa de voltar para Simulação ou Cancelar com apontamento existente. | Remova os apontamentos primeiro — ver Apontamento. Há mensagens equivalentes para Mão de Obra e Setup de Máquina. |
| Status não permitido | Valor fora de 0, 1, 2 e 9. | Use um dos quatro valores do domínio. |
| A máquina "N" não é prevista na fórmula "F" | Troca de máquina para uma que não consta na Fórmula daquele processo. | Acrescente a máquina em FABFORMULA5 na Fórmula antes. |
Reserva e previsão de insumo
| Mensagem | Causa | O que fazer |
|---|---|---|
| Não há saldo para atender o(s) insumo(s) N da O.P. M processo P. | A reserva automática não encontrou saldo para algum insumo previsto. | Consulte FAB_VIEW_INSUMODISPONIVEL para ver quais faltam. Os processos já reservados antes deste permanecem reservados. |
| O processo N da O.P. M tem apontamentos. | Tentativa de liberar reserva de processo com apontamento de insumo. | Remova os apontamentos antes de liberar. |
| O processo N da O.P. M data de inicio. | Tentativa de liberar reserva de processo já iniciado. A mensagem chega incompleta; a causa é essa. | Cancele a abertura do processo antes de liberar — ver Apontamento. |
| O processo N da O.P. M já tem reservas de estoque. | Tentativa de alterar a previsão de insumo com o processo reservado. | Libere a reserva, altere a previsão e reserve de novo. |
Alteração de quantidade, vínculo e remoção
| Mensagem | Causa | O que fazer |
|---|---|---|
| Só é permitido alterar uma O.P. cujo status seja "Simulação" ou "Firmada". | Alteração de quantidade em Ordem Fechada ou Cancelada. | A quantidade não muda mais nesses status. |
| O(s) processo(s) N já foram iniciados. | Alteração de quantidade, ou remoção, com processo aberto. | Cancele a abertura do processo antes. |
| Foram realizados apontamentos de Insumo para o(s) processo(s) N. | Alteração de quantidade, ou remoção, com apontamento de insumo. Há mensagens equivalentes para Mão de Obra e Setup de Máquina. | Remova os apontamentos primeiro. |
| Não é permitido excluir uma O.P. cujo status seja Fechada. | Remoção de Ordem Fechada. | Ordem Fechada não é removível. |
| A(s) O.P.(s) N são filhas da O.P. M. | A Ordem de Produção tem Ordens filhas vinculadas. | Remova as filhas antes. |
| A O.P. N está "Fechada". Não é permitido inserir o vínculo. | Vínculo com pedido em Ordem Fechada. Há mensagem equivalente para a remoção do vínculo. | O vínculo não muda mais depois do fechamento. |
| Existem itens de pedido vinculados a outra O.P.: ... | Algum item das listas já está vinculado. | Desvincule da outra Ordem primeiro. A mensagem lista os vínculos existentes. |
| A soma da quantidade dos pedidos é superior a produção da O.P. | O texto diz o contrário do que a verificação faz. A recusa acontece quando a produção prevista é maior que a soma dos pedidos. | Acrescente pedidos, ou reduza a quantidade a fabricar. |
| O item N do pedido P já foi atendido. Não é permitido remover o vínculo. | O item do pedido já tem quantidade atendida. O número exibido como "pedido" é o código do produto. | Item atendido não se desvincula. |
Termos desta página
- Firmar
- Passar a Ordem de Produção de Simulação para Firmada (
OPD_STATUS = 1). Firmar é o compromisso de produzir: abate o saldo previsto do estoque dos insumos e habilita a reserva. Exige todos os processos programados. Voltar para Simulação desfaz o abatimento e apaga a programação. - Programar × agendar
- Nesta documentação os dois termos se referem à mesma coisa — atribuir data e hora previstas aos processos —, mas por rotinas diferentes. Programar é o cálculo inicial em cascata, de
FAB_PRC_PROGRAMARPROCESSO, que só alcança processo ainda não programado. Reagendar é mover um processo já programado, deFAB_PRC_REAGENDARPROCESSO, informando a janela nova por inteiro. - Reserva de estoque
- Separar fisicamente o saldo de um insumo para esta Ordem de Produção, registrando de qual lote e local ele sairá. Sem reserva, a abertura do processo não consome insumo automático nenhum. A reserva pode estar desligada na instância inteira por
CFG_RESERVAPARCIAL. - Previsão × reserva
- Dois estágios distintos do insumo na Ordem de Produção. A previsão é o que a Fórmula diz que será consumido, gravada na criação e alterável pelo Passo 12. A reserva é o saldo efetivamente separado, com lote e local definidos, criada pelo Passo 10. Alterar a previsão exige que não haja reserva; é por isso que a ordem entre os dois importa.
- Ociosidade
- Tempo em que o processo está programado mas parado — uma parada prevista. Registrado por
FAB_PRC_INCLUIROCIOPROCESSO, empurra o término previsto do processo sem alterar as horas de trabalho previstas. É substituído a cada chamada, nunca acumulado. - Centro de custo
- O setor ao qual o custo da produção é apropriado, informado no cabeçalho da Ordem de Produção. É parâmetro nos caminhos de criação por Fórmula e por pedido; no caminho do planejamento vem do padrão cadastrado na filial.
- MRP
- Planejamento de necessidades de material — o cálculo que decide o que precisa ser produzido, em que quantidade e para quando.
FAB_PRC_GERAROPMRPé a porta de entrada desse cálculo no módulo: recebe produto, quantidade e data, descobre a Fórmula e já cria a Ordem de Produção programada.
Dica — identificar a tabela e o campo a partir da interface do ERP
Quando você souber o que quer gravar mas não souber onde, use a própria interface do ERP para descobrir. Posicione o cursor no campo da tela e pressione F1: a Ajuda embutida mostra a tabela e o campo correspondentes.
Com o nome da tabela e do campo em mãos, procure-os no dicionário da sua instância para confirmar o tipo, o domínio e se estão liberados para o seu token.
Relação com páginas vizinhas
| Página | Como se liga a esta |
|---|---|
| Módulo de Produção central |
A regra de fronteira, a configuração da instância e o encadeamento dos cinco fluxos. Leia antes desta. |
| Fórmula de Fabricação | É a origem de toda Ordem de Produção. A estrutura da Fórmula — processos, insumos, mão de obra, máquinas — é copiada para a Ordem na criação, e a máquina que você quiser trocar precisa constar lá antes. |
| Ordem de Produção: Apontamento | É o passo seguinte, e o que fecha a janela de reversibilidade desta página. O que a reserva feita aqui separa é o que a abertura do processo consome lá. |
| Ordem de Produção: Documentos e Encerramento | O fechamento em OPD_STATUS = 2, com as validações próprias dele. É também onde se desfaz o vínculo de nota de terceiros e o rateio de despesa que impedem a remoção. |
| Produção do Dia | Gera Ordens de Produção pelo caminho simplificado, com o ciclo completo numa chamada. É lá que vive a exceção da conferência de saldo na reserva. |
| Pedido de Venda | De onde vêm os itens que os Passos 4 e 14 consomem, e para onde o vínculo devolve o acompanhamento de status de venda. |
Onde aprofundar
O dicionário da sua instância é a referência autoritativa: assinatura de cada rotina, domínio de cada campo e exemplo de uso pronto, sempre limitado ao que o seu token alcança.
Para consultar o que existe, comece sempre por FAB_VIEW_ORDEMPRODUCAO — é o ponto de entrada do módulo. A agenda está em FAB_VIEW_AGENDAPROCESSO e FAB_VIEW_AGENDAMAQUINA; o saldo dos insumos em FAB_VIEW_INSUMODISPONIVEL, FAB_VIEW_INSUMODISPONIVELLOTE e FAB_VIEW_SALDOINSUMO.
Com a Ordem de Produção firmada e o estoque reservado, o próximo passo é Ordem de Produção: Apontamento.