Pular para o conteúdo principal

MEQ021 — Movimentação MEQ021

Fonte​

  • Form: source/MEQ021/UMEQ021.pas + UMEQ021.dfm
  • DataModule: source/MEQ021/UdmMEQ021.pas + UdmMEQ021.dfm
  • Dialog auxiliar: source/MEQ021/UMSGMEQ021.pas + UMSGMEQ021.dfm
  • Package: source/MEQ021/MEQ021.dpk

Objetivo​

Tela de movimentação que permite liberar pedidos de saida (TP_PEDIDO = 'S') para faturamento apos o controle de producao/separacao ter sido concluido (ST_CONTROLEPRODUCAO = 'E' com quantidade guardada maior que zero). O operador filtra os pedidos por empresa, periodo de emissao/entrega, pessoa, vendedor, condicao/forma de pagamento, estado ou numero, marca os pedidos a liberar, confirma com senha de autorizador e informa Setor, Cor e observacoes — o sistema recalcula peso liquido/bruto e quantidade de volumes, grava DT_LIBERADOFAT no PEDIDO e fecha o registro correspondente em CONTROLEPRODUCAO (TP_CONTROLE = 'G', ST_CONTROLE = 'S'), liberando os pedidos para serem faturados.

Funcionalidades​

  • Filtrar pedidos pendentes de liberacao (aba "Dados para Consulta"): Empresa, N Pedido, Cond. Pagamento, Forma Pagamento, Periodo de Emissao (De/Ate), Periodo de Entrega (De/Ate), multiplas Pessoas Fisica/Juridica (grid), multiplos Vendedores (grid).
  • Lookup F9 em Empresa, Cond. Pagamento, Forma Pagamento, grid Pessoas Fisica/Juridica e grid Vendedores.
  • Consultar pedidos elegiveis com botao "Consultar <F3>" — executa SQL com filtro fixo ST_PEDIDO IN ('N','P'), TP_PEDIDO = 'S', ST_CONTROLEPRODUCAO = 'E' e QT_GUARDADA &gt; 0 (via VIEW_CONTROLEPRODUCAO).
  • Marcar/desmarcar todos os pedidos do resultado pelo botao "Marcar Todos" (alterna caractere "Å" na coluna de marca).
  • Marcar pedido individual pela coluna de marca (barra de espaco ou clique).
  • Visualizar produtos do pedido selecionado no grid "Produtos do Pedido Selecionado" (Qtde Total, Qtde Reserva, Qtde Separada, Qtde Guardada, Qtde Livre, Qtde Producao).
  • Abrir consulta detalhada do pedido em CPD001 pelo botao "Consultar Pedido" (passa CD_EMPRESA, NR_PEDIDO, TP_PEDIDO via parametros).
  • Confirmar liberacao pelo botao "Confirma Liberacao <F6>" — abre dialogo modal UMSGMEQ021 para capturar Autorizador, Senha do Autorizador, QT_VOLUME, PS_LIQUIDO, PS_BRUTO, Setor, Cor e observacao adicional; valida senha contra USUARIO.SN_USUARIO.
  • Ordenacao dinamica do grid de pedidos por clique no titulo da coluna (OrdenaSQLGrid).
  • Atalhos: F3 Consultar, F4 Cancelar, F5 Novo, F6 Salvar, F12 Sair; Shift+Enter navegacao reversa em grids.

Estrutura da Tela​

Aba "Dados para Consulta"​

Label visivelComponente de dadosTabela/CampoObservacoes
EmpresaedtCD_EMPRESA/edtNM_EMPRESAEMPRESA.CD_EMPRESA/NM_EMPRESAF9 abre lista de Empresas. Default = empresa da sessao.
N PedidoedtNR_PEDIDOPEDIDO.NR_PEDIDO (validado)Valida existencia em PEDIDO para a Empresa.
Cond. PagamentoedtCD_CONDPAGTO/edtDS_CONDPAGTOCONDPAGTO.CD_CONDPAGTO/DS_CONDPAGTOF9 abre lista de Condicoes.
Forma PagamentoedtCD_FORMAPAGTO/edtDS_FORMAPAGTOFORMAPAGTO.CD_FORMAPAGTO/DS_FORMAPAGTOF9 abre lista de Formas. Upper case.
Periodo de Emissao - De/AteedtDT_INICIAL/edtDT_FINALfiltro memoria (DT_PEDIDO)Valida inicial <= final.
Periodo de Entrega - De/AteedtDT_INIENT/edtDT_FINENTfiltro memoria (DT_ENTREGA)Valida inicial <= final.
Pessoas Fisica / JuridicagridPESSOAPESSOA.CD_PESSOA/NM_PESSOA (lista temporaria)F9 abre consulta com CNPJ/CPF/Municipio. Multiplas linhas (IN).
VendedorgridVENDEDORVENDEDOR.CD_VENDEDOR/PESSOA.NM_PESSOA (lista temporaria)F9 abre consulta. Multiplas linhas (IN).
Consultar <F3> (botao)btnProgramar—Dispara btnProcurarClick; mostra aba de ordem.

Aba "Liberacao de Pedidos para Faturamento" (pagORDEM)​

Label visivelComponenteConteudo
Selecione os Pedidos para LiberargridPEDIDOColunas: marca " ", Empr, Data Emissao, NR_PEDIDO, Pessoa Fisica/Juridica, Vendedor.
(botao)btnMarcaMarca/Desmarca todos (caractere Å).
Confirma Liberacao <F6>btnConfirmaDispara salvamento (btnSalvarClick).
Consultar PedidobtnPedidoAbre CPD001 com o pedido selecionado.
Produtos do Pedido SelecionadogridPRODUTOColunas: Produto (CD_ITEM), DS_ITEM, Qtde Total, Qtde Reserva, Qtde Separada, Qtde Guardada, Qtde Livre, Qtde Producao. Read-only.

Dialogo UMSGMEQ021 (modal ao confirmar liberacao)​

Captura complementar antes de gravar:

  • CD_PESSOA/NM_PESSOA (leitura), NR_PEDIDO (leitura), DT_PEDIDO (leitura).
  • Autorizador (CD_AUTORIZADOR/DS_AUTORIZADOR via USUARIO), Senha (SN_AUTORIZADOR comparada com USUARIO.SN_USUARIO).
  • QT_VOLUME (calculado inicialmente por COUNT em VOLUMEPEDIDO), PS_LIQUIDO e PS_BRUTO (recalculados via SUM em ITEMPEDIDO+ITEM).
  • Setor (DS_SETOR) e Cor (DS_COR) — ambos obrigatorios.
  • Observacao adicional (DS_OBS) concatenada em DS_OBSERVACAO do pedido.
  • Botao Ok valida obrigatorios, botao Cancelar limpa autorizador/volume e retorna.

Parametros que Influenciam​

TabelaCampoEfeito
PARMESTOQUECD_LAYORDEMLayout do relatorio de ordem impresso pela procedure Imprime_Ordem. Se vazio, oculta btnImprimir e Separador3.
PARMESTOQUECD_EMPRESALeitura obrigatoria — se a empresa da sessao nao tem PARMESTOQUE cadastrado, a procedure Busca_Parametros devolve a mensagem "Os Parametros do Estoque para a Empresa N nao estao Cadastrados [MEQ001]!".
Programa (programa.tpAcesso)—Quando igual a 2 (somente leitura), oculta botoes Novo, Salvar, Excluir e Separador1 no iniciar.

Regras de Negocio​

  1. O filtro sempre aplica P.ST_PEDIDO IN ('N','P'), P.TP_PEDIDO = 'S' e P.ST_CONTROLEPRODUCAO = 'E' com VIEW_CONTROLEPRODUCAO(... 'N').QT_GUARDADA &gt; 0 — apenas pedidos com estoque guardado e ainda nao liberados aparecem.
  2. Se a consulta nao retornar linhas, e lancada JException 'E-0000' [A Consulta nao Retornou Registros. Verifique!].
  3. Data Inicial nao pode ser maior que Data Final (valida tanto em Emissao quanto em Entrega via *_Validate).
  4. Numero do Pedido exige Empresa preenchida — mensagem E Obrigatorio Informar a Empresa para Validacao do Pedido!.
  5. Código de pessoa/empresa/vendedor/condpagto/formapagto/estado/item/usuario sao validados contra suas respectivas tabelas — mensagens apontam o cadastro de origem entre colchetes (ex: [ADM002], [TFA001], [TFA007], [TFC002], [TFC001], [TFA004], [TPO001], [ADM001]).
  6. Pessoa com ST_ATIVA = 'N' bloqueia com A Pessoa Fisica / Juridica nao esta Ativa [TFA001]!.
  7. Ao confirmar liberacao (C-1578):
    • PS_LIQUIDO e PS_BRUTO recalculados pelo SUM de (COALESCE(IP.PS_PEDIDO, IP.QT_PEDIDA) * I.PS_LIQUIDOEMB) e * (I.PS_LIQUIDOEMB + COALESCE(I.PS_EMBALAGEM,0)) a partir de ITEMPEDIDO + ITEM.
    • QT_VOLUME recalculada por COUNT em VOLUMEPEDIDO pelo NR_PEDIDO.
    • Dialogo UMSGMEQ021 exige Autorizador (CD + Senha validada contra USUARIO.SN_USUARIO), Setor e Cor preenchidos; se qualquer validacao falhar, o fluxo aborta com E-0000.
    • Sem autorizador aprovado, dispara Liberacao de Pedido Cancelada!.
    • DS_OBS e concatenada em DS_OBSERVACAO (limite 240 caracteres).
    • UPDATE PEDIDO grava QT_VOLUME, PS_LIQUIDO, PS_BRUTO, CD_USUARIOLIBERACAO, DS_OBSERVACAO, DS_SETOR, DS_COR, DT_LIBERADOFAT = 'NOW' e DT_REGISTRO = CURRENT_TIMESTAMP.
    • UPDATE CONTROLEPRODUCAO fecha registro TP_CONTROLE = 'G', ST_CONTROLE = 'N' transformando em ST_CONTROLE = 'S', DT_FINAL = CURRENT_DATE, DT_REGISTRO = CURRENT_TIMESTAMP.
    • Se nenhum pedido marcado (contador I &lt;= 0), dispara Nao foi Selecionado nenhum Pedido. Verifique!.
    • Commit em transactionOrdem; mensagem I-1579 confirma sucesso; botao "Consultar" e re-disparado para atualizar o grid.
  8. Usa duas transacoes: transaction (principal — consultas, abertura) e transactionOrdem (grava somente os UPDATEs da liberacao).
  9. Ordenacao do grid de pedidos re-executa a query atraves de OrdenaSQLGrid preservando o WHERE montado.
  10. Cancelamento no dialogo UMSGMEQ021 limpa QT_VOLUME, CD_AUTORIZADOR e SN_AUTORIZADOR no registro em edicao.

Datasets e SQL​

DatasetDescricaoTabelas/Fontes
tabEMPRESARegistro em memoria com filtros da tela (CD_EMPRESA, NM_EMPRESA, NR_PEDIDO, datas, CD_CONDPAGTO/DS_CONDPAGTO, CD_FORMAPAGTO/DS_FORMAPAGTO, SG/DS_ESTADO, CD_AUTORIZADOR/DS_AUTORIZADOR/SN_AUTORIZADOR/SN_USUARIO, CD_ITEMORIG/DEST e pesos totais). Sempre editavel (Append apos Novo).EMPRESA (apenas para validar codigo/nome)
tabPESSOALista temporaria multi-selecao de pessoas no filtro.PESSOA (validacao + F9)
tabVENDEDORLista temporaria multi-selecao de vendedores.VENDEDOR + PESSOA (validacao + F9)
tabPEDIDOResultado montado dinamicamente em btnProcurarClick com SELECT de pedidos elegiveis.PEDIDO P, PESSOA A, ENDERECOPESSOA EP, RETORNA_DADOSCADASTRAIS(A.CD_PESSOA, EP.TP_ENDERECO) RE, PESSOA V (vendedor), VIEW_CONTROLEPRODUCAO
tabPRODUTOItens do pedido selecionado (read-only, grid inferior).ITEMPEDIDO + ITEM (visao/joins por NR_PEDIDO)
transactionTransacao principal (consultas/validacoes).—
transactionOrdemTransacao isolada para os UPDATEs de confirmacao.PEDIDO, CONTROLEPRODUCAO

SQL principal (tabPEDIDO, montado em btnProcurarClick)​

SELECT P.CD_EMPRESA, P.NR_PEDIDO, P.TP_PEDIDO, P.DT_PEDIDO,
P.CD_PESSOA, A.NM_PESSOA, P.CD_VENDEDOR,
V.NM_PESSOA NM_VENDEDOR, P.ST_CONTROLEPRODUCAO, CAST(NULL AS VARCHAR(1)) STATUS,
P.QT_VOLUME, P.PS_LIQUIDO, P.PS_BRUTO, P.DS_OBSERVACAO,
P.DS_SETOR, P.DS_COR, CAST(NULL AS VARCHAR(240)) DS_OBS,
P.CD_ENDERECO,
RE.DS_ENDERECO||' - '||COALESCE('Nº'||RE.NR_ENDERECO,'')||' - '||
RE.DS_MUNICIPIO||'/'||RE.SG_ESTADO||' '||COALESCE('Cep:'||RE.NR_CEP,'') DS_ENDERECO
FROM PEDIDO P
INNER JOIN PESSOA A ON (A.CD_PESSOA = P.CD_PESSOA)
INNER JOIN ENDERECOPESSOA EP ON (EP.CD_PESSOA = A.CD_PESSOA
AND EP.CD_ENDERECO = P.CD_ENDERECO)
LEFT JOIN RETORNA_DADOSCADASTRAIS(A.CD_PESSOA, EP.TP_ENDERECO) RE ON (1=1)
LEFT JOIN PESSOA V ON (V.CD_PESSOA = P.CD_VENDEDOR)
LEFT JOIN VIEW_CONTROLEPRODUCAO(P.CD_EMPRESA, P.NR_PEDIDO, P.TP_PEDIDO,
NULL, NULL, NULL, NULL, NULL, 'N') S ON (1=1)
WHERE P.TP_PEDIDO = 'S' AND P.ST_CONTROLEPRODUCAO = 'E'
AND COALESCE(S.QT_GUARDADA,0) &gt; 0
AND P.ST_PEDIDO IN ('N','P')
/* + filtros dinamicos: CD_EMPRESA, NR_PEDIDO, CD_CONDPAGTO, CD_FORMAPAGTO,
SG_ESTADO, DT_PEDIDO, DT_ENTREGA, CD_PESSOA IN (...), CD_VENDEDOR IN (...) */
ORDER BY P.DT_PEDIDO, P.NR_PEDIDO

UPDATE PEDIDO (apos confirmacao)​

UPDATE PEDIDO
SET QT_VOLUME = :QT_VOLUME,
PS_LIQUIDO = :PS_LIQUIDO,
PS_BRUTO = :PS_BRUTO,
CD_USUARIOLIBERACAO = :CD_AUTORIZADOR,
DS_OBSERVACAO = :DS_OBSERVACAO,
DS_SETOR = :DS_SETOR,
DS_COR = :DS_COR,
DT_LIBERADOFAT = 'NOW',
DT_REGISTRO = CURRENT_TIMESTAMP
WHERE CD_EMPRESA = :CD_EMPRESA AND NR_PEDIDO = :NR_PEDIDO AND TP_PEDIDO = :TP_PEDIDO

UPDATE CONTROLEPRODUCAO (fecha guarda)​

UPDATE CONTROLEPRODUCAO
SET ST_CONTROLE = 'S',
DT_FINAL = CURRENT_DATE,
DT_REGISTRO = CURRENT_TIMESTAMP
WHERE TP_CONTROLE = 'G'
AND ST_CONTROLE = 'N'
AND CD_EMPRPEDIDO = :CD_EMPRESA
AND NR_PEDIDO = :NR_PEDIDO
AND TP_PEDIDO = :TP_PEDIDO

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

TabelaOperacoes
CONTROLEPRODUCAOUPDATE
EMPRESADELETE, INSERT, SELECT, UPDATE
PEDIDOINSERT, SELECT, UPDATE
PESSOADELETE, INSERT, SELECT, UPDATE

Tabelas de Leitura (SELECT)​

TabelaOperacoes
CONDPAGTOSELECT
ENDERECOPESSOASELECT
ESTADOSELECT
FORMAPAGTOSELECT
ITEMSELECT
ITEMPEDIDOSELECT
MUNICIPIOSELECT
PARMESTOQUESELECT
USUARIOSELECT
VENDEDORSELECT
VOLUMEPEDIDOSELECT

Procedures Chamadas​

ProcedureTabelas Acessadas
CALCULA_VALORITEM (SELECT), TIPOCALCULO (SELECT)
RETORNA_DADOSCADASTRAISAREACOMERCIAL (SELECT), ENDERECOPESSOA (SELECT), ESTADO (SELECT), FORMAPAGTO (SELECT), GRUPOPCP (SELECT), MUNICIPIO (SELECT) +4
RETORNA_ENDERECOENDERECOPESSOA (SELECT) — usado no F9 de pessoas para localizar endereco principal
VIEW_CONTROLEPRODUCAOCONTROLEPRODUCAO (SELECT), ITEMPEDIDO (SELECT), ITEM (SELECT) — calcula QT_GUARDADA

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
AREACOMERCIALSELECT
CONTROLEPRODUCAOSELECT
ENDERECOPESSOASELECT
ESTADOSELECT
FORMAPAGTOSELECT
GRUPOPCPSELECT
ITEMSELECT
ITEMPEDIDOSELECT
MUNICIPIOSELECT
PAISBACENSELECT
PESSOASELECT
PESSOAFISICASELECT
REGIAOCOMERCIALSELECT
TIPOCALCULOSELECT

Dependencias Aferentes (quem alimenta esta tela)​

Telas que escrevem em tabelas lidas por esta tela. Lista derivada de tools/output/table_screen_map.json — ver IMPACT-MAP por tabela.

> [!TODO] Lista aferente completa (producers) ainda nao consolidada neste arquivo; consulte docs/screens/IMPACT-MAP.md nas secoes CONDPAGTO, ENDERECOPESSOA, ESTADO, FORMAPAGTO, ITEM, ITEMPEDIDO, MUNICIPIO, PARMESTOQUE, PEDIDO, PESSOA, USUARIO, VENDEDOR, VOLUMEPEDIDO.

Dependencias Eferentes (quem consome dados desta tela)​

Telas que leem tabelas escritas por esta tela (CONTROLEPRODUCAO, PEDIDO).

> [!TODO] Lista eferente completa (consumers) ainda nao consolidada neste arquivo; consulte docs/screens/IMPACT-MAP.md nas secoes CONTROLEPRODUCAO e PEDIDO — destaques tipicos: CPD001 (consulta de pedidos), telas de faturamento da familia TFA/MNF, telas de expedicao e telas de carregamento.