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'eQT_GUARDADA > 0(viaVIEW_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 visivel | Componente de dados | Tabela/Campo | Observacoes |
|---|---|---|---|
| Empresa | edtCD_EMPRESA/edtNM_EMPRESA | EMPRESA.CD_EMPRESA/NM_EMPRESA | F9 abre lista de Empresas. Default = empresa da sessao. |
| N Pedido | edtNR_PEDIDO | PEDIDO.NR_PEDIDO (validado) | Valida existencia em PEDIDO para a Empresa. |
| Cond. Pagamento | edtCD_CONDPAGTO/edtDS_CONDPAGTO | CONDPAGTO.CD_CONDPAGTO/DS_CONDPAGTO | F9 abre lista de Condicoes. |
| Forma Pagamento | edtCD_FORMAPAGTO/edtDS_FORMAPAGTO | FORMAPAGTO.CD_FORMAPAGTO/DS_FORMAPAGTO | F9 abre lista de Formas. Upper case. |
| Periodo de Emissao - De/Ate | edtDT_INICIAL/edtDT_FINAL | filtro memoria (DT_PEDIDO) | Valida inicial <= final. |
| Periodo de Entrega - De/Ate | edtDT_INIENT/edtDT_FINENT | filtro memoria (DT_ENTREGA) | Valida inicial <= final. |
| Pessoas Fisica / Juridica | gridPESSOA | PESSOA.CD_PESSOA/NM_PESSOA (lista temporaria) | F9 abre consulta com CNPJ/CPF/Municipio. Multiplas linhas (IN). |
| Vendedor | gridVENDEDOR | VENDEDOR.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 visivel | Componente | Conteudo |
|---|---|---|
| Selecione os Pedidos para Liberar | gridPEDIDO | Colunas: marca " ", Empr, Data Emissao, NR_PEDIDO, Pessoa Fisica/Juridica, Vendedor. |
| (botao) | btnMarca | Marca/Desmarca todos (caractere Å). |
| Confirma Liberacao <F6> | btnConfirma | Dispara salvamento (btnSalvarClick). |
| Consultar Pedido | btnPedido | Abre CPD001 com o pedido selecionado. |
| Produtos do Pedido Selecionado | gridPRODUTO | Colunas: 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
| Tabela | Campo | Efeito |
|---|---|---|
| PARMESTOQUE | CD_LAYORDEM | Layout do relatorio de ordem impresso pela procedure Imprime_Ordem. Se vazio, oculta btnImprimir e Separador3. |
| PARMESTOQUE | CD_EMPRESA | Leitura 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
- O filtro sempre aplica
P.ST_PEDIDO IN ('N','P'),P.TP_PEDIDO = 'S'eP.ST_CONTROLEPRODUCAO = 'E'comVIEW_CONTROLEPRODUCAO(... 'N').QT_GUARDADA > 0— apenas pedidos com estoque guardado e ainda nao liberados aparecem. - Se a consulta nao retornar linhas, e lancada
JException 'E-0000' [A Consulta nao Retornou Registros. Verifique!]. - Data Inicial nao pode ser maior que Data Final (valida tanto em Emissao quanto em Entrega via
*_Validate). - Numero do Pedido exige Empresa preenchida — mensagem
E Obrigatorio Informar a Empresa para Validacao do Pedido!. - 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]). - Pessoa com
ST_ATIVA = 'N'bloqueia comA Pessoa Fisica / Juridica nao esta Ativa [TFA001]!. - 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'eDT_REGISTRO = CURRENT_TIMESTAMP. - UPDATE CONTROLEPRODUCAO fecha registro
TP_CONTROLE = 'G',ST_CONTROLE = 'N'transformando emST_CONTROLE = 'S',DT_FINAL = CURRENT_DATE,DT_REGISTRO = CURRENT_TIMESTAMP. - Se nenhum pedido marcado (contador
I <= 0), disparaNao foi Selecionado nenhum Pedido. Verifique!. - Commit em
transactionOrdem; mensagemI-1579confirma sucesso; botao "Consultar" e re-disparado para atualizar o grid.
- PS_LIQUIDO e PS_BRUTO recalculados pelo SUM de
- Usa duas transacoes:
transaction(principal — consultas, abertura) etransactionOrdem(grava somente os UPDATEs da liberacao). - Ordenacao do grid de pedidos re-executa a query atraves de
OrdenaSQLGridpreservando o WHERE montado. - Cancelamento no dialogo UMSGMEQ021 limpa QT_VOLUME, CD_AUTORIZADOR e SN_AUTORIZADOR no registro em edicao.
Datasets e SQL
| Dataset | Descricao | Tabelas/Fontes |
|---|---|---|
| tabEMPRESA | Registro 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) |
| tabPESSOA | Lista temporaria multi-selecao de pessoas no filtro. | PESSOA (validacao + F9) |
| tabVENDEDOR | Lista temporaria multi-selecao de vendedores. | VENDEDOR + PESSOA (validacao + F9) |
| tabPEDIDO | Resultado 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 |
| tabPRODUTO | Itens do pedido selecionado (read-only, grid inferior). | ITEMPEDIDO + ITEM (visao/joins por NR_PEDIDO) |
| transaction | Transacao principal (consultas/validacoes). | — |
| transactionOrdem | Transacao 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) > 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)
| Tabela | Operacoes |
|---|---|
| CONTROLEPRODUCAO | UPDATE |
| EMPRESA | DELETE, INSERT, SELECT, UPDATE |
| PEDIDO | INSERT, SELECT, UPDATE |
| PESSOA | DELETE, INSERT, SELECT, UPDATE |
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| CONDPAGTO | SELECT |
| ENDERECOPESSOA | SELECT |
| ESTADO | SELECT |
| FORMAPAGTO | SELECT |
| ITEM | SELECT |
| ITEMPEDIDO | SELECT |
| MUNICIPIO | SELECT |
| PARMESTOQUE | SELECT |
| USUARIO | SELECT |
| VENDEDOR | SELECT |
| VOLUMEPEDIDO | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| CALCULA_VALOR | ITEM (SELECT), TIPOCALCULO (SELECT) |
| RETORNA_DADOSCADASTRAIS | AREACOMERCIAL (SELECT), ENDERECOPESSOA (SELECT), ESTADO (SELECT), FORMAPAGTO (SELECT), GRUPOPCP (SELECT), MUNICIPIO (SELECT) +4 |
| RETORNA_ENDERECO | ENDERECOPESSOA (SELECT) — usado no F9 de pessoas para localizar endereco principal |
| VIEW_CONTROLEPRODUCAO | CONTROLEPRODUCAO (SELECT), ITEMPEDIDO (SELECT), ITEM (SELECT) — calcula QT_GUARDADA |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| AREACOMERCIAL | SELECT |
| CONTROLEPRODUCAO | SELECT |
| ENDERECOPESSOA | SELECT |
| ESTADO | SELECT |
| FORMAPAGTO | SELECT |
| GRUPOPCP | SELECT |
| ITEM | SELECT |
| ITEMPEDIDO | SELECT |
| MUNICIPIO | SELECT |
| PAISBACEN | SELECT |
| PESSOA | SELECT |
| PESSOAFISICA | SELECT |
| REGIAOCOMERCIAL | SELECT |
| TIPOCALCULO | SELECT |
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.