MEQ019 — Movimentação MEQ019
Fonte
- Form:
source/MEQ019/UMEQ019.pas/UMEQ019.dfm - DataModule:
source/MEQ019/UdmMEQ019.pas/UdmMEQ019.dfm - Dialog credito:
source/MEQ019/UMEQ019Mensagem.pas - Dialog situacao produto:
source/MEQ019/UMSGMEQ019.pas - Package:
source/MEQ019/MEQ019.dpk— requiresjCommon,jPesquisa,jLoteProducao
Objetivo
Tela de movimentação que executa a separacao fisica de produtos reservados em pedidos de venda (TP_PEDIDO = 'S'). O usuario filtra pedidos com saldo reservado pendente (aba "Dados para Consulta"), seleciona um pedido no grid, informa o produto e a quantidade efetivamente separada, e dispara a baixa do controle de producao via procedure ATUALIZA_CONTROLEPRODUCAO. Quando o parametro PARMFATUR.ST_LOTEPEDIDO = 'S' e o produto e semente, tambem gera o rateio de lotes na tabela ITEMPEDIDOSEMENTE. Antes de concluir a separacao, a tela valida o limite de credito do cliente (VIEW_CREDITOPESSOA vs CREDITO.NR_DIASATRASO) e, em caso de atraso excessivo, oferece bloquear o pedido (PEDIDO.ST_CONTROLEPRODUCAO = 'B') ou cancelar a separacao registrando a pendencia em PEDIDO.DS_OBSERVACAO.
Funcionalidades
Botoes da toolbar (coluna esquerda):
| Botao | Atalho | Acao |
|---|---|---|
| Novo Registro | F5 | btnNovoClick — inicia filtros (tabEMPRESA.Append), abre grids de Pessoas/Vendedores, oculta aba "Separacao" |
| Salvar Alteracoes | F6 | btnSalvarClick — valida pedido/produto/quantidade, executa a separacao (credito + rateio de lotes + ATUALIZA_CONTROLEPRODUCAO) |
| Cancelar Registro | F4 | btnLimparClick — remove linha do grid Pessoa ou Vendedor conforme contexto |
| Consultar | F3 | btnProcurarClick — monta SQL dinamico de pedidos com saldo reservado e abre aba "Separacao" |
| Sair | F12 | btnSairClick — fecha a tela com rollback |
Botoes de acao do formulario:
| Botao | Aba | Acao |
|---|---|---|
| Consultar <F3> | Dados para Consulta | btnProgramarClick — delega para btnProcurar.Click |
| Confirma Separacao <F6> | Separacao de Produtos | btnConfirmaClick — delega para btnSalvar.Click |
| Consultar Pedido | Separacao de Produtos | btnPedidoClick — abre CPD001 passando Empresa/NR_PEDIDO/TP_PEDIDO |
| Situacao Produto | Separacao de Produtos | btnProdutoClick — abre dialog frmMSGMEQ019 com saldos do produto |
Botoes ocultos em runtime: btnExcluir, btnAtualizar, btnImprimir (este ultimo reaparece apenas se PARMESTOQUE.CD_LAYORDEM estiver preenchido).
Estrutura da Tela
Caption do form: MEQ019 (nao registrada no jMenu.pas). A tela eh composta por um TPageControl com duas abas:
Aba "Dados para Consulta"
- Filtros para Consulta (GroupBox): Empresa (
CD_EMPRESA+ Nome da Empresa), N Pedido, Cond. Pagamento (CD_CONDPAGTO+ descricao), Forma Pagamento (CD_FORMAPAGTO+ descricao). - Periodo de Emissao (GroupBox): campos De / Ate (data inicial e final de
DT_PEDIDO). - Periodo de Entrega (GroupBox): campos De / Ate (data inicial e final de
DT_ENTREGA). - Pessoas Fisica / Juridica (GroupBox com grid): lista multi-linha de clientes para filtrar. F9 abre lookup com Razao Social, CNPJ/CPF, Municipio.
- Vendedor (GroupBox com grid): lista multi-linha de vendedores. F9 abre lookup de
VENDEDOR x PESSOA. - Botao:
Consultar <F3>— aciona a consulta e troca para a aba "Separacao".
Aba "Separacao de Produtos do Pedido"
- Selecione os Pedidos para Separar os Produtos (GroupBox com grid): colunas Empresa, Data Emissao, Dt Agendamento, Numero Pedido, Pessoa Fisica/Juridica, Vendedor. Ordenacao por clique no titulo via
OrdenaSQLGrid. - Informe o Produto do Pedido Selecionado para Separacao (GroupBox):
- Campos: Produto (
CD_ITEM+ descricao), Qtde Reservada (read-only), Qtde a Separar. - Botoes:
Consultar Pedido(abre CPD001),Confirma Separacao <F6>,Situacao Produto. - F9 em Produto abre lookup restrito a itens do pedido selecionado com
QT_RESERVADA > 0.
- Campos: Produto (
Navegacao: as procedures grpCONSULTAEnter, grpVENDEDOREnter, grpPESSOAEnter, grpProdutoEnter, GrpPedidoEnter atualizam a variavel global Navegacao que direciona o comportamento do botao Cancelar.
Parametros que Influenciam
| Tabela | Campo | Efeito |
|---|---|---|
| PARMESTOQUE | CD_LAYORDEM | Layout de ordem impresso; quando vazio, a tela oculta btnImprimir e Separador3 (em Busca_Parametros). |
| PARMFATUR | ST_LOTEPEDIDO | Quando 'S' e o produto tem ITEM.ST_SEMENTE em ('S','P'), dispara RateioLoteProducao (jLoteProducao) e grava lotes em ITEMPEDIDOSEMENTE. |
Regras de Negocio
- Filtro de pedidos (
btnProcurarClick): apenas pedidos de saida (TP_PEDIDO = 'S') comST_PEDIDO IN ('N','P')eVIEW_CONTROLEPRODUCAO.QT_RESERVADA > 0sao listados; ordenacao default porAE.DT_AGENDA DESC, P.ST_PEDIDO, P.DT_PEDIDO. Se nao retorna registros, lancaE-0000 "A Consulta nao Retornou Registros. Verifique!". - Validacao de data (
tabEMPRESADT_INICIALValidate/DT_FINALValidate/DT_INIENTValidate/DT_FINENTValidate): data inicial nao pode ser maior que final (e vice-versa) em ambos os periodos (Emissao e Entrega). - Validacao de Empresa / Pedido / Pessoa / Vendedor / CondPagto / FormaPagto: cada campo valida existencia no cadastro; Pessoa verifica
ST_ATIVA('N' lanca excecao apontando para [TFA001]). - Pre-condicoes de salvamento (
btnSalvarClick): exige confirmacaoC-1570, pedido selecionado, produto informado eQT_SEPARADA > 0; caso contrario lancaE-0000com a mensagem especifica. - Rateio de Lote de Semente: se
PARMFATUR.ST_LOTEPEDIDO = 'S'eITEM.ST_SEMENTE IN ('S','P'), chamaRateioLoteProducao(jLoteProducao) e fazUPDATE OR INSERTemITEMPEDIDOSEMENTEpara cada lote retornado. Se o rateio nao retornar lotes, cancela comE-0000 "Rateio de Lotes de Semente Cancelado". - Bloqueio por limite de credito (pedido sem
DT_BLOQUEIOPRODUCAOprevio):- Calcula
CREDITO.NR_DIASATRASOvsVIEW_CREDITOPESSOA.NR_MAIORVENCdo cliente. - Se
Dias_Atraso < Maior_Vencto, abreTfrmMEQ019Mensagemcom o aviso. Ao confirmar (OK), atualizaPEDIDO.ST_CONTROLEPRODUCAO='B',DT_BLOQUEIOPRODUCAO=CURRENT_DATE,ST_BLOQUEIOPROD='S'e grava a justificativa emDS_BLOQUEIO. Em seguida percorre os itens com producao/reserva em aberto e chamaATUALIZA_CONTROLEPRODUCAO(..., 'B')para cada um (bloqueia o controle). - Ao cancelar, atualiza
PEDIDO.DS_OBSERVACAOcom a nota "Pedido Nao Separado Por Pendencias Financeiras: <data>", commita e cancela a separacao (E-0000 "Separacao Cancelada!").
- Calcula
- Efetivacao da separacao: se o pedido nao foi bloqueado, executa
ATUALIZA_CONTROLEPRODUCAO(CD_EMPRESA, NR_PEDIDO, TP_PEDIDO, CD_ITEM, QT_SEPARADA, CURRENT_DATE, 'R', 'S')e exibeI-1571. Ao fim, commitatransactionOrdeme reinicia o ciclo viabtnNovo.Click. - Validacao de quantidade (
tabEMPRESAQT_SEPARADAValidate):QT_SEPARADAnao pode ser negativa nem maior queQT_RESERVADA. - Validacao de Produto (
tabEMPRESACD_ITEMValidate): o produto deve existir emITEMPEDIDOdo pedido corrente comST_ITEMPEDIDO IN ('N','P')eVIEW_CONTROLEPRODUCAO.QT_RESERVADA > 0; caso contrario lancaE-0000 "Este Produto no Pedido No.: X nao possui Reserva Disponivel para Separacao!". - AfterScroll do grid de pedidos (
tabPEDIDOAfterScroll): ao mudar de pedido selecionado, limpaCD_ITEMpara forcar nova digitacao/validacao. - Controle de acesso: com
programa.tpAcesso = 2, ocultabtnNovo,btnSalvar,btnExcluireSeparador1. - Transacoes: a tela mantem a
transactionprincipal em read-only durante os lookups e usatransactionOrdemdedicada para efetivar o commit da separacao, permitindo rollback isolado dos updates de bloqueio/ATUALIZA_CONTROLEPRODUCAO.
Datasets e SQL
| Dataset | Origem | Descricao |
|---|---|---|
tabEMPRESA | EMPRESA (placeholder) | Dataset em memoria (WHERE CD_EMPRESA = -1) usado como "linha virtual" para hospedar todos os campos de filtro (CD_EMPRESA, DT_INICIAL/FINAL, DT_INIENT/FINENT, NR_PEDIDO, CD_CONDPAGTO, CD_FORMAPAGTO) e os campos do produto em separacao (CD_ITEM, DS_ITEM, QT_RESERVADA, QT_SEPARADA, ST_SEMENTE). |
tabPESSOA | PESSOA (placeholder) | Grid multi-linha com pessoas selecionadas para o filtro IN. |
tabVENDEDOR | PESSOA/VENDEDOR | Grid multi-linha com vendedores selecionados para o filtro IN. |
tabPEDIDO | PEDIDO + PESSOA + VIEW_CONTROLEPRODUCAO + AGENDAEXPEDICAO | Lista pedidos de saida com saldo reservado; SQL montado dinamicamente em btnProcurarClick a partir dos filtros. |
tabRESERVA | PEDIDO + ITEMPEDIDO + PESSOA + AGENDAEXPEDICAO + VIEW_CONTROLEPRODUCAO | Dataset auxiliar (nao bindado a grid) que demonstra saldo em producao por pedido. |
tabCOMPOP | RETORNA_SALDOCOMPROMETIDO + LOTEPRODUCAO + ITEM | Agrega saldos comprometidos em OP por lote, via parametro :CD_ITEM. |
SQL central (tabPEDIDO, simplificado):
SELECT P.CD_EMPRESA, P.NR_PEDIDO, P.TP_PEDIDO, P.DT_PEDIDO, AE.DT_AGENDA,
P.CD_PESSOA, A.NM_PESSOA, P.CD_VENDEDOR,
V.NM_PESSOA NM_VENDEDOR, P.ST_CONTROLEPRODUCAO
FROM PEDIDO P
INNER JOIN PESSOA A ON (A.CD_PESSOA = P.CD_PESSOA)
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)
LEFT JOIN AGENDAEXPEDICAO AE ON (P.CD_EMPRESA = AE.CD_EMPRESA
AND P.NR_PEDIDO = AE.NR_PEDIDO
AND P.TP_PEDIDO = AE.TP_PEDIDO
AND AE.ST_CONFIRMADO = 1)
WHERE P.TP_PEDIDO = 'S'
AND COALESCE(S.QT_RESERVADA,0) > 0
AND P.ST_PEDIDO IN ('N', 'P')
-- + filtros dinamicos por empresa/pedido/condpagto/formapagto/datas/pessoas/vendedores
ORDER BY AE.DT_AGENDA DESC, P.ST_PEDIDO, P.DT_PEDIDO
Tabelas de Escrita (INSERT/UPDATE/DELETE)
| Tabela | Operacoes |
|---|---|
| EMPRESA | DELETE, INSERT, SELECT, UPDATE |
| ITEMPEDIDOSEMENTE | INSERT |
| PEDIDO | SELECT, UPDATE |
| PESSOA | DELETE, INSERT, SELECT, UPDATE |
Tabelas de Leitura (SELECT)
| Tabela | Operacoes |
|---|---|
| AGENDAEXPEDICAO | SELECT |
| CONDPAGTO | SELECT |
| CONTROLEPRODUCAO | SELECT |
| CREDITO | SELECT |
| ENDERECOPESSOA | SELECT |
| FORMAPAGTO | SELECT |
| ITEM | SELECT |
| ITEMPEDIDO | SELECT |
| LOTEPRODUCAO | SELECT |
| MUNICIPIO | SELECT |
| PARMESTOQUE | SELECT |
| PARMFATUR | SELECT |
| VENDEDOR | SELECT |
Procedures Chamadas
| Procedure | Tabelas Acessadas |
|---|---|
| ATUALIZA_CONTROLEPRODUCAO | CONTROLEPRODUCAO (UPDATE), ITEMPEDIDO (UPDATE) |
| RETORNA_ENDERECO | ENDERECOPESSOA (SELECT) |
| 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) |
| VIEW_CONTROLEPRODUCAO | CONTROLEPRODUCAO (SELECT), ITEMPEDIDO (SELECT) |
| VIEW_CREDITOPESSOA | CONTAS (SELECT), CREDITO (SELECT), CREDITOGRUPO (SELECT), ITEMPEDIDO (SELECT), PARMFATUR (SELECT), PARTICIPANTELIMITECREDITO (SELECT) +2 |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| CONTAS | SELECT |
| CONTROLEPRODUCAO | SELECT, UPDATE |
| CREDITO | SELECT |
| CREDITOGRUPO | SELECT |
| ESTOQUE | SELECT |
| ESTOQUEDIA | SELECT |
| ITEM | SELECT |
| ITEMLOCAL | SELECT |
| ITEMPEDIDO | SELECT, UPDATE |
| ITEMPRODUCAO | SELECT |
| LOTEPRODUCAO | SELECT |
| LOTEPRODUCAOMP | SELECT |
| MOVESTOQUE | SELECT |
| OPERACAO | SELECT |
| PARMESTOQUE | SELECT |
| PARMFATUR | SELECT |
| PARTICIPANTELIMITECREDITO | SELECT |
| PEDIDO | SELECT |
| TIPOCONTA | SELECT |
Dependencias Aferentes (quem alimenta esta tela)
Telas que escrevem em tabelas lidas por esta tela.
| Tela | Título | Tabelas em Comum |
|---|---|---|
jCaixa | CONTAS | |
| MFC028 | CONTAS | |
| CFC006 | Consulta Fatura (Agrupamento de Notas) | CONTAS |
| MFC033 | Gerenciamento Boleto Rápido Junsoft | CONTAS |
| TRC037 | CONTAS | |
JunsoftAPIBoletos | CONTAS | |
| MPD094 | CONTAS | |
| MNF019 | Gerenciamento de Notas Geral/Mestra | CONTAS |
| MFC021 | CONTAS | |
| MFC003 | Lançamento de Caixa Avulso / Cheque | CONTAS |
JunsoftServiceFatApp | CONTAS | |
| MNF032 | Importação de XML Transmitido | CONTAS |
| CFC008 | Controle de Cobrança | CONTAS |
| MFC019 | Reparcelamento de Contas | CONTAS |
| MNF027 | Cancelamento de Notas Fiscais | CONTAS |
| MRC030 | CONTAS | |
| MCA007 | Condenação de Leite | CONTAS |
| MFC016 | Fatura ( Agrupamento de Notas Fiscais ) | CONTAS |
| MRC021 | Cancelamento de Ordem de carregamento Recapadora | CONTAS |
| CFC009 | Consulta/Cancelamento de Reparcelamento | CONTAS |
| MNF029 | CONTAS | |
| TFA067 | Contratos e Licenças de Software | CONTAS |
| MFC009 | Alteração de Duplicatas | CONTAS |
| MFC036 | Liberação de Contas a Pagar | CONTAS |
| CPD008 | CONTAS | |
| MNF005 | Cancelamento de Notas Fiscais | CONTAS |
| MFC023 | Duplicata / Adiantamento por Obra | CONTAS |
| CFC012 | CONTAS | |
| MFC030 | CONTAS | |
| MFC012 | Agrupamento de Contas | CONTAS |
| ... | +75 telas |
Dependencias Eferentes (quem consome dados desta tela)
Telas que leem tabelas escritas por esta tela.
| Tela | Título | Tabelas em Comum |
|---|---|---|
| CPD001 | Consulta de Pedidos | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA |
JunsoftIntegracao | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LOC003 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LOC018 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LPD005 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LPD021 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LPD038 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LPD087 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LPD090 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LPD098 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LPD123 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LPD126 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
LPD129 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
| MNF016 | Controle de Entrega | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA |
| MPD002 | Emissao de Pedidos de Venda | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA |
| MPD011 | Confirmacao Ordem Carregamento | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA |
| MPD031 | Conferencia de Pedidos | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA |
| MPD037 | Devolucao de Pedidos | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA |
| MPD056 | Devolucao de Pedidos por Pessoa | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA |
| MPD094 | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
| RPD007 | Demonstrativo de Pedidos | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA |
jLoteProducao | EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA | |
| CCO001 | Consulta de Cotacoes | EMPRESA, PEDIDO, PESSOA |
| CEQ001 | Saldo em Estoque | EMPRESA, PEDIDO, PESSOA |
| CFC009 | Consulta/Cancelamento de Reparcelamento | EMPRESA, PEDIDO, PESSOA |
| CFC011 | Saldo Pendente do Cliente/Fornecedor | EMPRESA, PEDIDO, PESSOA |
| CNF001 | Consulta de Notas Fiscais | EMPRESA, PEDIDO, PESSOA |
| CNF005 | Analise de Produtos para Compra | EMPRESA, PEDIDO, PESSOA |
| CPD002 | Consulta de Orcamentos / Ordem de Serviço | EMPRESA, PEDIDO, PESSOA |
| CPD003 | Consulta de Ordens de Serviço | EMPRESA, PEDIDO, PESSOA |
| ... | +1303 telas |