Pular para o conteúdo principal

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 — requires jCommon, 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):

BotaoAtalhoAcao
Novo RegistroF5btnNovoClick — inicia filtros (tabEMPRESA.Append), abre grids de Pessoas/Vendedores, oculta aba "Separacao"
Salvar AlteracoesF6btnSalvarClick — valida pedido/produto/quantidade, executa a separacao (credito + rateio de lotes + ATUALIZA_CONTROLEPRODUCAO)
Cancelar RegistroF4btnLimparClick — remove linha do grid Pessoa ou Vendedor conforme contexto
ConsultarF3btnProcurarClick — monta SQL dinamico de pedidos com saldo reservado e abre aba "Separacao"
SairF12btnSairClick — fecha a tela com rollback

Botoes de acao do formulario:

BotaoAbaAcao
Consultar <F3>Dados para ConsultabtnProgramarClick — delega para btnProcurar.Click
Confirma Separacao <F6>Separacao de ProdutosbtnConfirmaClick — delega para btnSalvar.Click
Consultar PedidoSeparacao de ProdutosbtnPedidoClick — abre CPD001 passando Empresa/NR_PEDIDO/TP_PEDIDO
Situacao ProdutoSeparacao de ProdutosbtnProdutoClick — 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 &lt;F3&gt; — 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 &lt;F6&gt;, Situacao Produto.
    • F9 em Produto abre lookup restrito a itens do pedido selecionado com QT_RESERVADA &gt; 0.

Navegacao: as procedures grpCONSULTAEnter, grpVENDEDOREnter, grpPESSOAEnter, grpProdutoEnter, GrpPedidoEnter atualizam a variavel global Navegacao que direciona o comportamento do botao Cancelar.

Parametros que Influenciam​

TabelaCampoEfeito
PARMESTOQUECD_LAYORDEMLayout de ordem impresso; quando vazio, a tela oculta btnImprimir e Separador3 (em Busca_Parametros).
PARMFATURST_LOTEPEDIDOQuando 'S' e o produto tem ITEM.ST_SEMENTE em ('S','P'), dispara RateioLoteProducao (jLoteProducao) e grava lotes em ITEMPEDIDOSEMENTE.

Regras de Negocio​

  1. Filtro de pedidos (btnProcurarClick): apenas pedidos de saida (TP_PEDIDO = 'S') com ST_PEDIDO IN ('N','P') e VIEW_CONTROLEPRODUCAO.QT_RESERVADA &gt; 0 sao listados; ordenacao default por AE.DT_AGENDA DESC, P.ST_PEDIDO, P.DT_PEDIDO. Se nao retorna registros, lanca E-0000 "A Consulta nao Retornou Registros. Verifique!".
  2. 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).
  3. Validacao de Empresa / Pedido / Pessoa / Vendedor / CondPagto / FormaPagto: cada campo valida existencia no cadastro; Pessoa verifica ST_ATIVA ('N' lanca excecao apontando para [TFA001]).
  4. Pre-condicoes de salvamento (btnSalvarClick): exige confirmacao C-1570, pedido selecionado, produto informado e QT_SEPARADA &gt; 0; caso contrario lanca E-0000 com a mensagem especifica.
  5. Rateio de Lote de Semente: se PARMFATUR.ST_LOTEPEDIDO = 'S' e ITEM.ST_SEMENTE IN ('S','P'), chama RateioLoteProducao (jLoteProducao) e faz UPDATE OR INSERT em ITEMPEDIDOSEMENTE para cada lote retornado. Se o rateio nao retornar lotes, cancela com E-0000 "Rateio de Lotes de Semente Cancelado".
  6. Bloqueio por limite de credito (pedido sem DT_BLOQUEIOPRODUCAO previo):
    • Calcula CREDITO.NR_DIASATRASO vs VIEW_CREDITOPESSOA.NR_MAIORVENC do cliente.
    • Se Dias_Atraso &lt; Maior_Vencto, abre TfrmMEQ019Mensagem com o aviso. Ao confirmar (OK), atualiza PEDIDO.ST_CONTROLEPRODUCAO='B', DT_BLOQUEIOPRODUCAO=CURRENT_DATE, ST_BLOQUEIOPROD='S' e grava a justificativa em DS_BLOQUEIO. Em seguida percorre os itens com producao/reserva em aberto e chama ATUALIZA_CONTROLEPRODUCAO(..., 'B') para cada um (bloqueia o controle).
    • Ao cancelar, atualiza PEDIDO.DS_OBSERVACAO com a nota "Pedido Nao Separado Por Pendencias Financeiras: <data>", commita e cancela a separacao (E-0000 "Separacao Cancelada!").
  7. 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 exibe I-1571. Ao fim, commita transactionOrdem e reinicia o ciclo via btnNovo.Click.
  8. Validacao de quantidade (tabEMPRESAQT_SEPARADAValidate): QT_SEPARADA nao pode ser negativa nem maior que QT_RESERVADA.
  9. Validacao de Produto (tabEMPRESACD_ITEMValidate): o produto deve existir em ITEMPEDIDO do pedido corrente com ST_ITEMPEDIDO IN ('N','P') e VIEW_CONTROLEPRODUCAO.QT_RESERVADA &gt; 0; caso contrario lanca E-0000 "Este Produto no Pedido No.: X nao possui Reserva Disponivel para Separacao!".
  10. AfterScroll do grid de pedidos (tabPEDIDOAfterScroll): ao mudar de pedido selecionado, limpa CD_ITEM para forcar nova digitacao/validacao.
  11. Controle de acesso: com programa.tpAcesso = 2, oculta btnNovo, btnSalvar, btnExcluir e Separador1.
  12. Transacoes: a tela mantem a transaction principal em read-only durante os lookups e usa transactionOrdem dedicada para efetivar o commit da separacao, permitindo rollback isolado dos updates de bloqueio/ATUALIZA_CONTROLEPRODUCAO.

Datasets e SQL​

DatasetOrigemDescricao
tabEMPRESAEMPRESA (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).
tabPESSOAPESSOA (placeholder)Grid multi-linha com pessoas selecionadas para o filtro IN.
tabVENDEDORPESSOA/VENDEDORGrid multi-linha com vendedores selecionados para o filtro IN.
tabPEDIDOPEDIDO + PESSOA + VIEW_CONTROLEPRODUCAO + AGENDAEXPEDICAOLista pedidos de saida com saldo reservado; SQL montado dinamicamente em btnProcurarClick a partir dos filtros.
tabRESERVAPEDIDO + ITEMPEDIDO + PESSOA + AGENDAEXPEDICAO + VIEW_CONTROLEPRODUCAODataset auxiliar (nao bindado a grid) que demonstra saldo em producao por pedido.
tabCOMPOPRETORNA_SALDOCOMPROMETIDO + LOTEPRODUCAO + ITEMAgrega 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) &gt; 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)​

TabelaOperacoes
EMPRESADELETE, INSERT, SELECT, UPDATE
ITEMPEDIDOSEMENTEINSERT
PEDIDOSELECT, UPDATE
PESSOADELETE, INSERT, SELECT, UPDATE

Tabelas de Leitura (SELECT)​

TabelaOperacoes
AGENDAEXPEDICAOSELECT
CONDPAGTOSELECT
CONTROLEPRODUCAOSELECT
CREDITOSELECT
ENDERECOPESSOASELECT
FORMAPAGTOSELECT
ITEMSELECT
ITEMPEDIDOSELECT
LOTEPRODUCAOSELECT
MUNICIPIOSELECT
PARMESTOQUESELECT
PARMFATURSELECT
VENDEDORSELECT

Procedures Chamadas​

ProcedureTabelas Acessadas
ATUALIZA_CONTROLEPRODUCAOCONTROLEPRODUCAO (UPDATE), ITEMPEDIDO (UPDATE)
RETORNA_ENDERECOENDERECOPESSOA (SELECT)
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)
VIEW_CONTROLEPRODUCAOCONTROLEPRODUCAO (SELECT), ITEMPEDIDO (SELECT)
VIEW_CREDITOPESSOACONTAS (SELECT), CREDITO (SELECT), CREDITOGRUPO (SELECT), ITEMPEDIDO (SELECT), PARMFATUR (SELECT), PARTICIPANTELIMITECREDITO (SELECT) +2

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
CONTASSELECT
CONTROLEPRODUCAOSELECT, UPDATE
CREDITOSELECT
CREDITOGRUPOSELECT
ESTOQUESELECT
ESTOQUEDIASELECT
ITEMSELECT
ITEMLOCALSELECT
ITEMPEDIDOSELECT, UPDATE
ITEMPRODUCAOSELECT
LOTEPRODUCAOSELECT
LOTEPRODUCAOMPSELECT
MOVESTOQUESELECT
OPERACAOSELECT
PARMESTOQUESELECT
PARMFATURSELECT
PARTICIPANTELIMITECREDITOSELECT
PEDIDOSELECT
TIPOCONTASELECT

Dependencias Aferentes (quem alimenta esta tela)​

Telas que escrevem em tabelas lidas por esta tela.

TelaTítuloTabelas em Comum
jCaixaCONTAS
MFC028CONTAS
CFC006Consulta Fatura (Agrupamento de Notas)CONTAS
MFC033Gerenciamento Boleto Rápido JunsoftCONTAS
TRC037CONTAS
JunsoftAPIBoletosCONTAS
MPD094CONTAS
MNF019Gerenciamento de Notas Geral/MestraCONTAS
MFC021CONTAS
MFC003Lançamento de Caixa Avulso / ChequeCONTAS
JunsoftServiceFatAppCONTAS
MNF032Importação de XML TransmitidoCONTAS
CFC008Controle de CobrançaCONTAS
MFC019Reparcelamento de ContasCONTAS
MNF027Cancelamento de Notas FiscaisCONTAS
MRC030CONTAS
MCA007Condenação de LeiteCONTAS
MFC016Fatura ( Agrupamento de Notas Fiscais )CONTAS
MRC021Cancelamento de Ordem de carregamento RecapadoraCONTAS
CFC009Consulta/Cancelamento de ReparcelamentoCONTAS
MNF029CONTAS
TFA067Contratos e Licenças de SoftwareCONTAS
MFC009Alteração de DuplicatasCONTAS
MFC036Liberação de Contas a PagarCONTAS
CPD008CONTAS
MNF005Cancelamento de Notas FiscaisCONTAS
MFC023Duplicata / Adiantamento por ObraCONTAS
CFC012CONTAS
MFC030CONTAS
MFC012Agrupamento de ContasCONTAS
...+75 telas

Dependencias Eferentes (quem consome dados desta tela)​

Telas que leem tabelas escritas por esta tela.

TelaTítuloTabelas em Comum
CPD001Consulta de PedidosEMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
JunsoftIntegracaoEMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LOC003EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LOC018EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LPD005EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LPD021EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LPD038EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LPD087EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LPD090EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LPD098EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LPD123EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LPD126EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
LPD129EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
MNF016Controle de EntregaEMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
MPD002Emissao de Pedidos de VendaEMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
MPD011Confirmacao Ordem CarregamentoEMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
MPD031Conferencia de PedidosEMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
MPD037Devolucao de PedidosEMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
MPD056Devolucao de Pedidos por PessoaEMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
MPD094EMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
RPD007Demonstrativo de PedidosEMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
jLoteProducaoEMPRESA, ITEMPEDIDOSEMENTE, PEDIDO, PESSOA
CCO001Consulta de CotacoesEMPRESA, PEDIDO, PESSOA
CEQ001Saldo em EstoqueEMPRESA, PEDIDO, PESSOA
CFC009Consulta/Cancelamento de ReparcelamentoEMPRESA, PEDIDO, PESSOA
CFC011Saldo Pendente do Cliente/FornecedorEMPRESA, PEDIDO, PESSOA
CNF001Consulta de Notas FiscaisEMPRESA, PEDIDO, PESSOA
CNF005Analise de Produtos para CompraEMPRESA, PEDIDO, PESSOA
CPD002Consulta de Orcamentos / Ordem de ServiçoEMPRESA, PEDIDO, PESSOA
CPD003Consulta de Ordens de ServiçoEMPRESA, PEDIDO, PESSOA
...+1303 telas