Pular para o conteúdo principal

MEQ020 — Movimentação MEQ020

Fonte​

  • Source: source/MEQ020/

Objetivo​

Lanca a producao de um Lote de Producao (LOTEPRODUCAO), gerando a Ordem de Producao, movimentação de estoque (entrada do produto acabado) e a baixa de materia-prima via LOTEPRODUCAOMP. Permite reservar a quantidade produzida para pedidos de venda em andamento (pagPEDIDOS) ou para outras Ordens de Producao que consomem o produto como materia-prima (pagOP), ou ainda lancar em estoque livre sem reserva. Exige autorizacao de um usuario de producao (USUARIOPRODUCAO).

Funcionalidades​

  • Consulta de saldos do produto (estoque livre, reservado, produzido, guardado, liberado, comprometido em OP) a partir do lote de producao informado.
  • Reserva de quantidade produzida contra Pedidos de venda (CONTROLEPRODUCAO com TP_CONTROLE='R') ou contra Lotes de Producao consumidores (CONTROLELOTEPRODUCAO).
  • Lancamento em estoque livre (botao "Lancar em Estoque Livre <F2>") gerando ORDEMPRODUCAO, consumindo materia-prima e chamando GERA_ESTOQUE.
  • Integracao opcional com expedicao: quando PARMESTOQUE.ST_LIBERAPEDIDOAUTO = 'S', pula o processo de producao e libera o pedido diretamente para faturamento (atualiza PEDIDO com DT_LIBERADOFAT/CD_USUARIOEXPEDICAO/DS_SETOR/DS_COR via tela MEQ020Expedicao).
  • Autorizacao obrigatoria por chave do usuario de producao (tela MEQ020Senha consultando USUARIOPRODUCAO.SN_USUARIO).
  • Impressao da Ordem de Producao usando layout parametrizado em PARMESTOQUE.CD_LAYORDEM (fallback para LET036).
  • Gravacao automatica de rastreio de lote em LOTESEMENTE quando ITEM.ST_SEMENTE = 'P'.
  • Atalhos: F2=Atualizar, F3=Consultar, F4=Cancelar, F5=Novo, F6=Salvar, F11=Controle de Prod (CEQ006), F12=Sair.

Estrutura da Tela​

Toolbar (lateral esquerda)​

BotaoAtalhoAcao
Novo Registro <F5>F5Limpa filtros e inicia nova reserva
Salvar Alteracoes <F6>F6Confirma reserva ou producao em estoque livre
Cancelar Registro <F4>F4Cancela edicao do grid ativo
Consultar <F3>F3Busca pedidos/OPs consumidoras do produto
Atualizar Registros <F2>F2Lanca em estoque livre sem reservar pedido
Imprimir <F8>F8Reimprime pedido marcado (layout PARMFATUR.CD_LAYPEDVENDA)
Sair <F12>F12Fecha a tela

Grupo "Informe o Produto para Entrada no Estoque" (grpCONSULTA)​

Cabecalho com dados do Lote selecionado e saldos do produto. Todos os campos (exceto Lote de Producao e Qtde Produzida) sao somente leitura.

CampoBancoOrigem / calculo
Lote ProducaoNR_LOTEPRODUCAOEntrada. F9 abre busca LOTEPRODUCAO. Valida em LOTEPRODUCAO+VERIFICA_PRODUTOACABADO+PRODUCAO
Qtde Que Pode Ser ProduzidaQT_PRONTAVERIFICA_PRODUTOACABADO.O_QT_ITEM
EmpresaCD_EMPRESAOculto (preenchido da sessao)
ProdutoCD_ITEMPreenchido pelo lote; F9 abre busca ITEM
(descricao)DS_ITEMLookup ITEM
Qtde Estoque LivreQT_ESTOQUELIVRERETORNA_SALDOESTOQUE.O_QT_SALDO menos produzida/reservada/liberada/guardada/comprometida
Qtde ProduzidaQT_PRODUZIDAEntrada. Limitado por QT_PRONTA (validate)
Qtde ReservadaQT_RESERVADOSUM CONTROLEPRODUCAO (TP_CONTROLE='R', ST_CONTROLE='N')
Qtde Produzida (saida)(Resultado[1])SUM CONTROLEPRODUCAO (TP_CONTROLE='S')
Qtde Total Reservada em TelaQT_TOTALSoma do campo QT_RESERVAR marcado no grid
Qtde Comprometida Para O.P.QT_COMPRIMETIDAOPRETORNA_SALDOCOMPROMETIDO (O_QT_RESERVADOOP + O_QT_EMPROCESSO + O_QT_UTILIZADO)
Consultar <F3> (btnProgramar)—Dispara btnProcurarClick

Grupo "Informe a Quantidade de Reserva da OP/Pedido" (grpProduto)​

Contem PageControl com duas abas e botoes de acao.

Aba "Pedidos" (pagPEDIDOS)​

Grid gridPRODUTO ligado a dsPRODUTO (dataset tabPRODUTO). Colunas visiveis (ordem):

Coluna (titulo)CampoObservacao
(marca)STATUSCheckbox "A" marca/desmarca a linha
Emp.CD_EMPRESA
No PedNR_PEDIDO
DataDT_PEDIDO
Dt ExpDT_EXPEDIDODe AGENDAEXPEDICAO.DT_AGENDA
ClienteCD_PESSOA
(nome cliente)NM_PESSOA
Qtd ProdQT_PRODUCAOSaldo pendente (VIEW_CONTROLEPRODUCAO)
Qtd ResQT_RESERVAREntrada — quanto reservar para este pedido

Pedidos com AGENDAEXPEDICAO.ST_CONFIRMADO = 1 sao pintados em lilas ($C1B6FF).

Aba "Ordem de Producao" (pagOP)​

Grid gridOP ligado a dsoOP (dataset tabOP). Mostra OPs que consomem o produto como materia-prima. Colunas:

Coluna (titulo)Campo
(marca)STATUS
Emp.CD_EMPRESA
No LoteNR_LOTE
DataDT_LOTE
P.A.CD_ITEM
Produto AcabadoDS_ITEM
Qtd ProdQT_PRODUCAO (VIEW_CONTROLELOTEPRODUCAO)
Qtd ResQT_RESERVAR

A aba so fica visivel (pagOP.TabVisible = True) quando tabOP retorna registros apos btnProcurar.

Botoes do grupo​

BotaoAtalhoAcao
Marcar Todos (btnMarca)—Marca/desmarca "A" no STATUS de todas as linhas do grid ativo
Consultar Pedido (btnPedido)—Abre CPD001 com contexto do pedido selecionado
Controle de Prod <F11> (btnCONSULTAPROD)F11Abre CEQ006 com contexto do pedido
Confirma Reserva <F6> (btnConfirma)F6Dispara btnSalvarClick
Lancar em Estoque Livre <F2> (btnProducao)F2Dispara btnAtualizarClick

Parametros que Influenciam​

TabelaCampoEfeito
PARMFATURCD_TABPRECOTabela de preco usada para exibir VL_PRECO do produto (lookup em ITEMTABPRECO)
PARMFATURCD_LAYPEDVENDALayout de impressão do pedido (botao Imprimir). Se vazio, botao Imprimir fica oculto
PARMESTOQUECD_OPERPRODENTOperacao de entrada de estoque obrigatoria para gerar a producao (passada a GERA_ESTOQUE). Se vazia, bloqueia lancamento com E-0000 indicando MEQ001
PARMESTOQUECD_OPERPRODSAIConferencia minima dos parametros de estoque (verificado junto com CD_OPERPRODENT)
PARMESTOQUECD_LAYORDEMLayout da Ordem de Producao na impressão. Se vazio, usa LET036 como fallback
PARMESTOQUEST_LIBERAPEDIDOAUTOQuando 'S', ao confirmar reserva a tela abre MEQ020Expedicao para coletar setor/cor, marca PEDIDO como liberado para faturamento e fecha CONTROLEPRODUCAO (ST_CONTROLE='S') — pulando o fluxo normal para MPD036. Tambem altera a escolha de local de estoque quando o item tem mais de um ITEMLOCAL
ITEMST_SEMENTEQuando 'P', grava/atualiza o lote na LOTESEMENTE apos producao
ITEMNR_DIASVALIDADESoma dias ao DT_VALIDADE gravado em LOTESEMENTE

Regras de Negocio​

  1. Autorizacao obrigatoria: antes de gravar (reserva ou estoque livre), exibe MEQ020Senha e valida USUARIOPRODUCAO.SN_USUARIO. Chave invalida dispara E-0000 "Lancamento de Produtos Cancelado. Chave Invalida. Verifique![ADM019]".
  2. Parametros de Estoque obrigatorios: PARMESTOQUE.CD_OPERPRODENT e CD_OPERPRODSAI devem estar cadastrados — caso contrario dispara E-0000 "Os Parametros do Estoque nao estao Cadastrados. Verifique [MEQ001]!".
  3. Validacao do Lote (tabEMPRESANR_LOTEPRODUCAOValidate): rejeita lote ST_LOTEPRODUCAO='F' (finalizado), exige que PRODUCAO tenha versao cadastrada, e dispara E-0000 "Lote de Producao Nao Encontrado. Verifique![CEQ012]" quando nao achado.
  4. Validacao do Produto (tabEMPRESACD_ITEMValidate): carrega DS_ITEM, ST_SEMENTE, NR_DIASVALIDADE, local default (primeiro ITEMLOCAL), e recalcula todos os saldos (livre, reservado, liberado, guardado, comprometido em OP).
  5. Validacao da Qtde Produzida (tabEMPRESAQT_PRODUZIDAValidate): nao pode exceder QT_PRONTA (retornada por VERIFICA_PRODUTOACABADO).
  6. Validacao de QT_RESERVAR no grid: nao aceita negativo nem maior que QT_PRODUCAO (saldo do pedido/OP). Atualiza vetor interno e campo QT_TOTAL.
  7. Consulta (btnProcurar): exige CD_ITEM preenchido e QT_PRODUZIDA > 0; senao dispara E-0000.
  8. Salvar na aba Pedidos (btnSalvar/pagPEDIDOS): exige pelo menos 1 pedido marcado (E-0000 "Nao foi Selecionado nenhum Pedido. Verifique!") e QT_PRODUZIDA >= SUM(QT_RESERVAR) (E-0000 "A Quantidade Total Reservada em Tela nao pode ser maior que a Quantidade Produzida. Verifique!"). Confirmacao por msgCodigo('C-1573').
  9. Reserva de Pedido: para cada linha marcada, executa ATUALIZA_CONTROLEPRODUCAO(..., 'P', 'R') e atualiza CONTROLEPRODUCAO.CD_USUARIO com a chave do operador autorizado.
  10. Fluxo automatico de expedicao: quando ST_LIBERAPEDIDOAUTO = 'S', abre MEQ020Expedicao (setor/cor), executa ATUALIZA_CONTROLEPRODUCAO(..., 'R', 'S'), atualiza PEDIDO (DT_LIBERADOFAT, DS_SETOR, DS_COR, CD_USUARIOEXPEDICAO) e fecha CONTROLEPRODUCAO (ST_CONTROLE='S'). Cancelamento dispara E-0000 "Operacao Cancelada!".
  11. Salvar na aba OP (btnSalvar/pagOP): para cada OP marcada, executa ATUALIZA_CONTROLELOTEPRODUCAO(..., 'P', 'R', usuario). Depois dispara GERA_PRODLOTEPRODUCAO para gerar a Ordem de Producao consumidora. Confirmacao msgCodigo('C-1573').
  12. Lancar em Estoque Livre (btnAtualizar/Ordemproducao): gera numero via GERA_SEQUENCIA('SEQ_ORDEMPRODUCAO'), insere ORDEMPRODUCAO com ST_ORDEMPRODUCAO='V'/TP_ORDEMPRODUCAO='F', insere ITEMORDEMPROD (materia-prima) lendo LOTEPRODUCAOMP x VIEW_CONTROLELOTEPRODUCAO, chama GERA_ESTOQUE (tipo 'PR'), atualiza MOVESTOQUE.CD_USUARIO/NR_LOTE com o resultado, e abate QT_SALDO em LOTEPRODUCAO e LOTEPRODUCAOMP. Confirmacao msgCodigo('C-1576').
  13. Item com multiplos locais: quando ITEMLOCAL retorna mais de 1 local e ST_LIBERAPEDIDOAUTO='S', abre busca LOCALITEM (via Lista_TipoLocal) para o operador escolher; caso contrario usa o primeiro (FIRST 1).
  14. Rastreio de Lote (LOTESEMENTE): quando ITEM.ST_SEMENTE='P', faz UPSERT em LOTESEMENTE somando QT_LOTE e gravando DT_VALIDADE (Today + NR_DIASVALIDADE).
  15. Impressao pos-gravacao: se PARMESTOQUE.CD_LAYORDEM preenchido, carrega esse layout; senao carrega LET036 com parametros fixos (NR_LOTE/QT_PRODUZIDA/usuario).
  16. Ausencia de permissao de faturamento (PARMFATUR sem registro): dispara E-0000 "Os Parametros do Faturamento para a Empresa N nao estao Cadastrados [MFA001]!".
  17. btnExcluir e btnAtualizar (toolbar) sao ocultados no iniciar (nao ha exclusao de reserva por esta tela).
  18. Pedidos consultados: apenas TP_PEDIDO='S', ST_PEDIDO IN ('N','P'), ST_ITEMPEDIDO IN ('N','P') e saldo VIEW_CONTROLEPRODUCAO > 0.
  19. OPs consultadas: apenas LOTEPRODUCAO.ST_LOTEPRODUCAO NOT IN ('C','T') com saldo em VIEW_CONTROLELOTEPRODUCAO.

Datasets e SQL​

DatasetTransacaoDescricaoTabelas/Procedures
tabEMPRESAtransactionRegistro unico em memoria (SELECT FROM EMPRESA WHERE CD_EMPRESA=-1) com campos calculados (CD_ITEM, QT_ESTOQUELIVRE, QT_RESERVADO, QT_PRODUZIDA, QT_LIBERADA, QT_GUARDADA, QT_COMPRIMETIDAOP, NR_LOTEPRODUCAO, QT_PRONTA, NR_VERSAO, TP_PRODUCAO, ST_LOTE, QT_DIASVALIDADE). Validates carregam dados de EMPRESA/ITEM/LOTEPRODUCAO/PRODUCAO e chamam RETORNA_SALDOESTOQUE, RETORNA_SALDOCOMPROMETIDO, VERIFICA_PRODUTOACABADOEMPRESA, ITEM, ITEMLOCAL, LOTEPRODUCAO, PRODUCAO, ITEMTABPRECO, PEDIDO, ITEMPEDIDO, CONTROLEPRODUCAO, VERIFICA_PRODUTOACABADO, RETORNA_SALDOESTOQUE, RETORNA_SALDOCOMPROMETIDO
tabPRODUTOtransactionPedidos de venda com saldo de producao para o produto selecionado. Detail de dsEMPRESA por CD_ITEM. Ordena por AGENDAEXPEDICAO.DT_AGENDA, ST_CONFIRMADO desc, DT_PEDIDOPEDIDO, ITEMPEDIDO, PESSOA, AGENDAEXPEDICAO, VIEW_CONTROLEPRODUCAO
tabOPtransactionLotes de producao consumidores (LOTEPRODUCAOMP) que usam o produto como materia-prima. Detail de dsEMPRESA por CD_ITEMLOTEPRODUCAO, LOTEPRODUCAOMP, ITEM, VIEW_CONTROLELOTEPRODUCAO
transactionOrdem—Segunda transacao (Isolation=xiReadCommitted) usada para commitar a geracao de Ordem de Producao / reservas sem afetar transaction de consulta

SQL-chave (DataModule)​

  • tabEMPRESA.SQL: projeta 19 colunas calculadas (mock) sobre EMPRESA WHERE CD_EMPRESA=-1.
  • tabPRODUTO.SQL: FROM ITEMPEDIDO I INNER JOIN PEDIDO P INNER JOIN PESSOA E LEFT JOIN AGENDAEXPEDICAO AE LEFT JOIN VIEW_CONTROLEPRODUCAO(...).
  • tabOP.SQL: FROM LOTEPRODUCAO C INNER JOIN LOTEPRODUCAOMP L LEFT JOIN VIEW_CONTROLELOTEPRODUCAO(...) LS INNER JOIN ITEM I WHERE L.CD_MATERIAPRIMA = :CD_ITEM.

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

TabelaOperacoes
CONTROLEPRODUCAOSELECT, UPDATE
EMPRESADELETE, INSERT, SELECT, UPDATE
ITEMORDEMPRODINSERT, SELECT
LOTEPRODUCAOSELECT, UPDATE
LOTEPRODUCAOMPSELECT, UPDATE
LOTESEMENTEINSERT, SELECT, UPDATE
MOVESTOQUEUPDATE
ORDEMPRODUCAOINSERT
PEDIDOINSERT, SELECT, UPDATE

Tabelas de Leitura (SELECT)​

TabelaOperacoes
AGENDAEXPEDICAOSELECT
ITEMSELECT
ITEMLOCALSELECT
ITEMPEDIDOSELECT
ITEMPRODUCAOSELECT
ITEMTABPRECOSELECT
PARMESTOQUESELECT
PARMFATURSELECT
PESSOASELECT
PRODUCAOSELECT
USUARIOPRODUCAOSELECT

Procedures Chamadas​

ProcedureTabelas Acessadas
ATUALIZA_CONTROLELOTEPRODUCAOCONTROLELOTEPRODUCAO (SELECT/UPDATE), ITEM (SELECT), TIPOCALCULO (SELECT)
ATUALIZA_CONTROLEPRODUCAOCONTROLEPRODUCAO (INSERT/SELECT/UPDATE), ITEMPEDIDO (SELECT), PEDIDO (SELECT/UPDATE)
CALCULA_VALORITEM (SELECT), TIPOCALCULO (SELECT)
GERA_ESTOQUECOLUNAGRADE (SELECT), DEVOLUCAONOTA (SELECT), ESTOQUE (INSERT/SELECT/UPDATE), ESTOQUEDIA (INSERT/SELECT/UPDATE), ESTOQUEDIAPESSOA (INSERT/SELECT/UPDATE), ESTOQUEGRADE (INSERT/SELECT/UPDATE) +28
GERA_PRODLOTEPRODUCAOCONTROLELOTEPRODUCAO (SELECT/UPDATE), ITEMLOCAL (SELECT), ITEMORDEMPROD (INSERT/SELECT), ITEMPRODUCAO (SELECT), LOTEPRODUCAO (SELECT/UPDATE), LOTEPRODUCAOMP (SELECT) +7
GERA_SEQUENCIASEQUENCIA (SELECT/UPDATE)
RETORNA_SALDOCOMPROMETIDOCONTROLEPRODUCAO (SELECT), ITEM (SELECT), ITEMPEDIDO (SELECT), ITEMPRODUCAO (SELECT), LOTEPRODUCAO (SELECT), LOTEPRODUCAOMP (SELECT) +1
RETORNA_SALDOESTOQUEESTOQUE (SELECT), ESTOQUEDIA (SELECT), ITEMLOCAL (SELECT), MOVESTOQUE (SELECT), OPERACAO (SELECT), PARMESTOQUE (SELECT)
VERIFICA_PRODUTOACABADOITEMORDEMPROD (SELECT), LOTEPRODUCAO (SELECT), LOTEPRODUCAOMP (SELECT), ORDEMPRODUCAO (SELECT)
VIEW_CONTROLELOTEPRODUCAOCONTROLELOTEPRODUCAO (SELECT), LOTEPRODUCAO (SELECT), LOTEPRODUCAOMP (SELECT)
VIEW_CONTROLEPRODUCAOCONTROLEPRODUCAO (SELECT), ITEMPEDIDO (SELECT), PEDIDO (SELECT)

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
COLUNAGRADESELECT
CONTROLELOTEPRODUCAOSELECT, UPDATE
CONTROLEPRODUCAOSELECT
DEVOLUCAONOTASELECT
ESTOQUEINSERT, SELECT, UPDATE
ESTOQUEDIAINSERT, SELECT, UPDATE
ESTOQUEDIAPESSOAINSERT, SELECT, UPDATE
ESTOQUEGRADEINSERT, SELECT, UPDATE
HISTORICOSELECT
ITEMSELECT
ITEMLOCALSELECT
ITEMORDEMPRODINSERT, SELECT
ITEMPEDIDOSELECT
ITEMPEDIDOPNEUSELECT
ITEMPRODUCAOSELECT
ITEMTABPRECOINSERT, SELECT, UPDATE
LINHAGRADESELECT
LOTEPRODUCAOSELECT, UPDATE
LOTEPRODUCAOMPSELECT
LOTEPRODUCAOSEMENTESELECT, UPDATE
...+24 tabelas

Dependencias Aferentes (quem alimenta esta tela)​

Telas que escrevem em tabelas lidas por esta tela.

TelaTítuloTabelas em Comum
MEQ001Parametros de EstoquePARMESTOQUE
MFA001Parametros de FaturamentoPARMFATUR
ADM002Cadastro de EmpresaEMPRESA
TPO001Cadastro de ProdutoITEM, ITEMLOCAL, ITEMTABPRECO
TFA001Cadastro de PessoaPESSOA
TEQ004Ficha de ProducaoPRODUCAO, ITEMPRODUCAO
CEQ012Consulta de Lote de ProducaoLOTEPRODUCAO, LOTEPRODUCAOMP
MPD002Pedido de VendaPEDIDO, ITEMPEDIDO
MPD036Expedicao de PedidoPEDIDO, AGENDAEXPEDICAO
MEQ019Reserva de EstoqueCONTROLEPRODUCAO
ADM019Usuarios de ProducaoUSUARIOPRODUCAO

Dependencias Eferentes (quem consome dados desta tela)​

Telas que leem tabelas escritas por esta tela.

TelaTítuloTabelas em Comum
MPD036Expedicao de PedidoPEDIDO, CONTROLEPRODUCAO
CPD001Consulta de PedidoPEDIDO
CEQ006Controle de ProducaoCONTROLEPRODUCAO, LOTEPRODUCAO
CEQ012Consulta de Lote de ProducaoLOTEPRODUCAO, LOTEPRODUCAOMP
CEQ015Consulta de Reserva / ProducaoLOTEPRODUCAO, LOTEPRODUCAOMP
MEQ021Estorno de ReservaCONTROLEPRODUCAO, PEDIDO
MEQ022Ordem de ProducaoORDEMPRODUCAO, ITEMORDEMPROD
REQ*Relatórios de ProducaoORDEMPRODUCAO, LOTEPRODUCAO, MOVESTOQUE
MCO010Compras / Materia-primaLOTEPRODUCAO, LOTEPRODUCAOMP, PEDIDO
MEQ019Reserva de EstoqueLOTESEMENTE
MFA*FaturamentoPEDIDO, MOVESTOQUE

Fonte (arquivos completos)​

  • Form: source/MEQ020/UMEQ020.pas
  • DataModule: source/MEQ020/UdmMEQ020.pas
  • Form Expedicao: source/MEQ020/UMEQ020Expedicao.pas
  • Form Senha: source/MEQ020/UMEQ020Senha.pas
  • Package: source/MEQ020/MEQ020.dpk