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 (
CONTROLEPRODUCAOcom 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 chamandoGERA_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 telaMEQ020Expedicao). - Autorizacao obrigatoria por chave do usuario de producao (tela
MEQ020SenhaconsultandoUSUARIOPRODUCAO.SN_USUARIO). - Impressao da Ordem de Producao usando layout parametrizado em
PARMESTOQUE.CD_LAYORDEM(fallback paraLET036). - Gravacao automatica de rastreio de lote em
LOTESEMENTEquandoITEM.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)
| Botao | Atalho | Acao |
|---|---|---|
| Novo Registro <F5> | F5 | Limpa filtros e inicia nova reserva |
| Salvar Alteracoes <F6> | F6 | Confirma reserva ou producao em estoque livre |
| Cancelar Registro <F4> | F4 | Cancela edicao do grid ativo |
| Consultar <F3> | F3 | Busca pedidos/OPs consumidoras do produto |
| Atualizar Registros <F2> | F2 | Lanca em estoque livre sem reservar pedido |
| Imprimir <F8> | F8 | Reimprime pedido marcado (layout PARMFATUR.CD_LAYPEDVENDA) |
| Sair <F12> | F12 | Fecha 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.
| Campo | Banco | Origem / calculo |
|---|---|---|
| Lote Producao | NR_LOTEPRODUCAO | Entrada. F9 abre busca LOTEPRODUCAO. Valida em LOTEPRODUCAO+VERIFICA_PRODUTOACABADO+PRODUCAO |
| Qtde Que Pode Ser Produzida | QT_PRONTA | VERIFICA_PRODUTOACABADO.O_QT_ITEM |
| Empresa | CD_EMPRESA | Oculto (preenchido da sessao) |
| Produto | CD_ITEM | Preenchido pelo lote; F9 abre busca ITEM |
| (descricao) | DS_ITEM | Lookup ITEM |
| Qtde Estoque Livre | QT_ESTOQUELIVRE | RETORNA_SALDOESTOQUE.O_QT_SALDO menos produzida/reservada/liberada/guardada/comprometida |
| Qtde Produzida | QT_PRODUZIDA | Entrada. Limitado por QT_PRONTA (validate) |
| Qtde Reservada | QT_RESERVADO | SUM CONTROLEPRODUCAO (TP_CONTROLE='R', ST_CONTROLE='N') |
| Qtde Produzida (saida) | (Resultado[1]) | SUM CONTROLEPRODUCAO (TP_CONTROLE='S') |
| Qtde Total Reservada em Tela | QT_TOTAL | Soma do campo QT_RESERVAR marcado no grid |
| Qtde Comprometida Para O.P. | QT_COMPRIMETIDAOP | RETORNA_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) | Campo | Observacao |
|---|---|---|
| (marca) | STATUS | Checkbox "A" marca/desmarca a linha |
| Emp. | CD_EMPRESA | |
| No Ped | NR_PEDIDO | |
| Data | DT_PEDIDO | |
| Dt Exp | DT_EXPEDIDO | De AGENDAEXPEDICAO.DT_AGENDA |
| Cliente | CD_PESSOA | |
| (nome cliente) | NM_PESSOA | |
| Qtd Prod | QT_PRODUCAO | Saldo pendente (VIEW_CONTROLEPRODUCAO) |
| Qtd Res | QT_RESERVAR | Entrada — 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 Lote | NR_LOTE |
| Data | DT_LOTE |
| P.A. | CD_ITEM |
| Produto Acabado | DS_ITEM |
| Qtd Prod | QT_PRODUCAO (VIEW_CONTROLELOTEPRODUCAO) |
| Qtd Res | QT_RESERVAR |
A aba so fica visivel (pagOP.TabVisible = True) quando tabOP retorna registros apos btnProcurar.
Botoes do grupo
| Botao | Atalho | Acao |
|---|---|---|
| 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) | F11 | Abre CEQ006 com contexto do pedido |
| Confirma Reserva <F6> (btnConfirma) | F6 | Dispara btnSalvarClick |
| Lancar em Estoque Livre <F2> (btnProducao) | F2 | Dispara btnAtualizarClick |
Parametros que Influenciam
| Tabela | Campo | Efeito |
|---|---|---|
| PARMFATUR | CD_TABPRECO | Tabela de preco usada para exibir VL_PRECO do produto (lookup em ITEMTABPRECO) |
| PARMFATUR | CD_LAYPEDVENDA | Layout de impressão do pedido (botao Imprimir). Se vazio, botao Imprimir fica oculto |
| PARMESTOQUE | CD_OPERPRODENT | Operacao de entrada de estoque obrigatoria para gerar a producao (passada a GERA_ESTOQUE). Se vazia, bloqueia lancamento com E-0000 indicando MEQ001 |
| PARMESTOQUE | CD_OPERPRODSAI | Conferencia minima dos parametros de estoque (verificado junto com CD_OPERPRODENT) |
| PARMESTOQUE | CD_LAYORDEM | Layout da Ordem de Producao na impressão. Se vazio, usa LET036 como fallback |
| PARMESTOQUE | ST_LIBERAPEDIDOAUTO | Quando '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 |
| ITEM | ST_SEMENTE | Quando 'P', grava/atualiza o lote na LOTESEMENTE apos producao |
| ITEM | NR_DIASVALIDADE | Soma dias ao DT_VALIDADE gravado em LOTESEMENTE |
Regras de Negocio
- Autorizacao obrigatoria: antes de gravar (reserva ou estoque livre), exibe
MEQ020Senhae validaUSUARIOPRODUCAO.SN_USUARIO. Chave invalida disparaE-0000 "Lancamento de Produtos Cancelado. Chave Invalida. Verifique![ADM019]". - Parametros de Estoque obrigatorios:
PARMESTOQUE.CD_OPERPRODENTeCD_OPERPRODSAIdevem estar cadastrados — caso contrario disparaE-0000 "Os Parametros do Estoque nao estao Cadastrados. Verifique [MEQ001]!". - Validacao do Lote (
tabEMPRESANR_LOTEPRODUCAOValidate): rejeita loteST_LOTEPRODUCAO='F'(finalizado), exige quePRODUCAOtenha versao cadastrada, e disparaE-0000 "Lote de Producao Nao Encontrado. Verifique![CEQ012]"quando nao achado. - 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). - Validacao da Qtde Produzida (
tabEMPRESAQT_PRODUZIDAValidate): nao pode exceder QT_PRONTA (retornada porVERIFICA_PRODUTOACABADO). - 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.
- Consulta (btnProcurar): exige CD_ITEM preenchido e QT_PRODUZIDA > 0; senao dispara
E-0000. - Salvar na aba Pedidos (btnSalvar/pagPEDIDOS): exige pelo menos 1 pedido marcado (
E-0000 "Nao foi Selecionado nenhum Pedido. Verifique!") eQT_PRODUZIDA >= SUM(QT_RESERVAR)(E-0000 "A Quantidade Total Reservada em Tela nao pode ser maior que a Quantidade Produzida. Verifique!"). Confirmacao pormsgCodigo('C-1573'). - Reserva de Pedido: para cada linha marcada, executa
ATUALIZA_CONTROLEPRODUCAO(..., 'P', 'R')e atualizaCONTROLEPRODUCAO.CD_USUARIOcom a chave do operador autorizado. - Fluxo automatico de expedicao: quando
ST_LIBERAPEDIDOAUTO = 'S', abreMEQ020Expedicao(setor/cor), executaATUALIZA_CONTROLEPRODUCAO(..., 'R', 'S'), atualiza PEDIDO (DT_LIBERADOFAT, DS_SETOR, DS_COR, CD_USUARIOEXPEDICAO) e fecha CONTROLEPRODUCAO (ST_CONTROLE='S'). Cancelamento disparaE-0000 "Operacao Cancelada!". - Salvar na aba OP (btnSalvar/pagOP): para cada OP marcada, executa
ATUALIZA_CONTROLELOTEPRODUCAO(..., 'P', 'R', usuario). Depois disparaGERA_PRODLOTEPRODUCAOpara gerar a Ordem de Producao consumidora. ConfirmacaomsgCodigo('C-1573'). - 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, chamaGERA_ESTOQUE(tipo 'PR'), atualizaMOVESTOQUE.CD_USUARIO/NR_LOTEcom o resultado, e abate QT_SALDO em LOTEPRODUCAO e LOTEPRODUCAOMP. ConfirmacaomsgCodigo('C-1576'). - Item com multiplos locais: quando ITEMLOCAL retorna mais de 1 local e
ST_LIBERAPEDIDOAUTO='S', abre buscaLOCALITEM(via Lista_TipoLocal) para o operador escolher; caso contrario usa o primeiro (FIRST 1). - Rastreio de Lote (LOTESEMENTE): quando
ITEM.ST_SEMENTE='P', faz UPSERT em LOTESEMENTE somando QT_LOTE e gravando DT_VALIDADE (Today + NR_DIASVALIDADE). - Impressao pos-gravacao: se
PARMESTOQUE.CD_LAYORDEMpreenchido, carrega esse layout; senao carregaLET036com parametros fixos (NR_LOTE/QT_PRODUZIDA/usuario). - Ausencia de permissao de faturamento (
PARMFATURsem registro): disparaE-0000 "Os Parametros do Faturamento para a Empresa N nao estao Cadastrados [MFA001]!". - btnExcluir e btnAtualizar (toolbar) sao ocultados no
iniciar(nao ha exclusao de reserva por esta tela). - Pedidos consultados: apenas
TP_PEDIDO='S',ST_PEDIDO IN ('N','P'),ST_ITEMPEDIDO IN ('N','P')e saldo VIEW_CONTROLEPRODUCAO > 0. - OPs consultadas: apenas
LOTEPRODUCAO.ST_LOTEPRODUCAO NOT IN ('C','T')com saldo em VIEW_CONTROLELOTEPRODUCAO.
Datasets e SQL
| Dataset | Transacao | Descricao | Tabelas/Procedures |
|---|---|---|---|
tabEMPRESA | transaction | Registro 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_PRODUTOACABADO | EMPRESA, ITEM, ITEMLOCAL, LOTEPRODUCAO, PRODUCAO, ITEMTABPRECO, PEDIDO, ITEMPEDIDO, CONTROLEPRODUCAO, VERIFICA_PRODUTOACABADO, RETORNA_SALDOESTOQUE, RETORNA_SALDOCOMPROMETIDO |
tabPRODUTO | transaction | Pedidos 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_PEDIDO | PEDIDO, ITEMPEDIDO, PESSOA, AGENDAEXPEDICAO, VIEW_CONTROLEPRODUCAO |
tabOP | transaction | Lotes de producao consumidores (LOTEPRODUCAOMP) que usam o produto como materia-prima. Detail de dsEMPRESA por CD_ITEM | LOTEPRODUCAO, 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)
| Tabela | Operacoes |
|---|---|
| CONTROLEPRODUCAO | SELECT, UPDATE |
| EMPRESA | DELETE, INSERT, SELECT, UPDATE |
| ITEMORDEMPROD | INSERT, SELECT |
| LOTEPRODUCAO | SELECT, UPDATE |
| LOTEPRODUCAOMP | SELECT, UPDATE |
| LOTESEMENTE | INSERT, SELECT, UPDATE |
| MOVESTOQUE | UPDATE |
| ORDEMPRODUCAO | INSERT |
| PEDIDO | INSERT, SELECT, UPDATE |
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| AGENDAEXPEDICAO | SELECT |
| ITEM | SELECT |
| ITEMLOCAL | SELECT |
| ITEMPEDIDO | SELECT |
| ITEMPRODUCAO | SELECT |
| ITEMTABPRECO | SELECT |
| PARMESTOQUE | SELECT |
| PARMFATUR | SELECT |
| PESSOA | SELECT |
| PRODUCAO | SELECT |
| USUARIOPRODUCAO | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| ATUALIZA_CONTROLELOTEPRODUCAO | CONTROLELOTEPRODUCAO (SELECT/UPDATE), ITEM (SELECT), TIPOCALCULO (SELECT) |
| ATUALIZA_CONTROLEPRODUCAO | CONTROLEPRODUCAO (INSERT/SELECT/UPDATE), ITEMPEDIDO (SELECT), PEDIDO (SELECT/UPDATE) |
| CALCULA_VALOR | ITEM (SELECT), TIPOCALCULO (SELECT) |
| GERA_ESTOQUE | COLUNAGRADE (SELECT), DEVOLUCAONOTA (SELECT), ESTOQUE (INSERT/SELECT/UPDATE), ESTOQUEDIA (INSERT/SELECT/UPDATE), ESTOQUEDIAPESSOA (INSERT/SELECT/UPDATE), ESTOQUEGRADE (INSERT/SELECT/UPDATE) +28 |
| GERA_PRODLOTEPRODUCAO | CONTROLELOTEPRODUCAO (SELECT/UPDATE), ITEMLOCAL (SELECT), ITEMORDEMPROD (INSERT/SELECT), ITEMPRODUCAO (SELECT), LOTEPRODUCAO (SELECT/UPDATE), LOTEPRODUCAOMP (SELECT) +7 |
| GERA_SEQUENCIA | SEQUENCIA (SELECT/UPDATE) |
| RETORNA_SALDOCOMPROMETIDO | CONTROLEPRODUCAO (SELECT), ITEM (SELECT), ITEMPEDIDO (SELECT), ITEMPRODUCAO (SELECT), LOTEPRODUCAO (SELECT), LOTEPRODUCAOMP (SELECT) +1 |
| RETORNA_SALDOESTOQUE | ESTOQUE (SELECT), ESTOQUEDIA (SELECT), ITEMLOCAL (SELECT), MOVESTOQUE (SELECT), OPERACAO (SELECT), PARMESTOQUE (SELECT) |
| VERIFICA_PRODUTOACABADO | ITEMORDEMPROD (SELECT), LOTEPRODUCAO (SELECT), LOTEPRODUCAOMP (SELECT), ORDEMPRODUCAO (SELECT) |
| VIEW_CONTROLELOTEPRODUCAO | CONTROLELOTEPRODUCAO (SELECT), LOTEPRODUCAO (SELECT), LOTEPRODUCAOMP (SELECT) |
| VIEW_CONTROLEPRODUCAO | CONTROLEPRODUCAO (SELECT), ITEMPEDIDO (SELECT), PEDIDO (SELECT) |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| COLUNAGRADE | SELECT |
| CONTROLELOTEPRODUCAO | SELECT, UPDATE |
| CONTROLEPRODUCAO | SELECT |
| DEVOLUCAONOTA | SELECT |
| ESTOQUE | INSERT, SELECT, UPDATE |
| ESTOQUEDIA | INSERT, SELECT, UPDATE |
| ESTOQUEDIAPESSOA | INSERT, SELECT, UPDATE |
| ESTOQUEGRADE | INSERT, SELECT, UPDATE |
| HISTORICO | SELECT |
| ITEM | SELECT |
| ITEMLOCAL | SELECT |
| ITEMORDEMPROD | INSERT, SELECT |
| ITEMPEDIDO | SELECT |
| ITEMPEDIDOPNEU | SELECT |
| ITEMPRODUCAO | SELECT |
| ITEMTABPRECO | INSERT, SELECT, UPDATE |
| LINHAGRADE | SELECT |
| LOTEPRODUCAO | SELECT, UPDATE |
| LOTEPRODUCAOMP | SELECT |
| LOTEPRODUCAOSEMENTE | SELECT, UPDATE |
| ... | +24 tabelas |
Dependencias Aferentes (quem alimenta esta tela)
Telas que escrevem em tabelas lidas por esta tela.
| Tela | Título | Tabelas em Comum |
|---|---|---|
| MEQ001 | Parametros de Estoque | PARMESTOQUE |
| MFA001 | Parametros de Faturamento | PARMFATUR |
| ADM002 | Cadastro de Empresa | EMPRESA |
| TPO001 | Cadastro de Produto | ITEM, ITEMLOCAL, ITEMTABPRECO |
| TFA001 | Cadastro de Pessoa | PESSOA |
| TEQ004 | Ficha de Producao | PRODUCAO, ITEMPRODUCAO |
| CEQ012 | Consulta de Lote de Producao | LOTEPRODUCAO, LOTEPRODUCAOMP |
| MPD002 | Pedido de Venda | PEDIDO, ITEMPEDIDO |
MPD036 | Expedicao de Pedido | PEDIDO, AGENDAEXPEDICAO |
| MEQ019 | Reserva de Estoque | CONTROLEPRODUCAO |
| ADM019 | Usuarios de Producao | USUARIOPRODUCAO |
Dependencias Eferentes (quem consome dados desta tela)
Telas que leem tabelas escritas por esta tela.
| Tela | Título | Tabelas em Comum |
|---|---|---|
MPD036 | Expedicao de Pedido | PEDIDO, CONTROLEPRODUCAO |
| CPD001 | Consulta de Pedido | PEDIDO |
| CEQ006 | Controle de Producao | CONTROLEPRODUCAO, LOTEPRODUCAO |
| CEQ012 | Consulta de Lote de Producao | LOTEPRODUCAO, LOTEPRODUCAOMP |
| CEQ015 | Consulta de Reserva / Producao | LOTEPRODUCAO, LOTEPRODUCAOMP |
| MEQ021 | Estorno de Reserva | CONTROLEPRODUCAO, PEDIDO |
| MEQ022 | Ordem de Producao | ORDEMPRODUCAO, ITEMORDEMPROD |
REQ* | Relatórios de Producao | ORDEMPRODUCAO, LOTEPRODUCAO, MOVESTOQUE |
| MCO010 | Compras / Materia-prima | LOTEPRODUCAO, LOTEPRODUCAOMP, PEDIDO |
| MEQ019 | Reserva de Estoque | LOTESEMENTE |
MFA* | Faturamento | PEDIDO, 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