Pular para o conteúdo principal

MEQ009 — Movimentação MEQ009

Fonte​

  • Source: source/MEQ009/
  • Form: source/MEQ009/UMEQ009.pas / UMEQ009.dfm
  • DataModule: source/MEQ009/UdmMEQ009.pas / UdmMEQ009.dfm
  • Package: source/MEQ009/MEQ009.dpk

Observacao: o módulo nao esta registrado em jMenu.pas (acessado como chamada interna). A janela aparece com o titulo literal MEQ009 e e invocada tipicamente a partir de MEQ007 (Requisicao de Produto) e MPD017 (Produtos da Ordem de Serviço).

Objetivo​

Tela auxiliar que lista itens de requisicao de estoque cuja situacao esta "Bloqueada" (ITEMREQUISICAO.ST_ITEMREQUISICAO = 'B') e permite ao usuario autorizado alterar a situacao para Liberado (A) ou Cancelado (C). Quando um item e cancelado, o módulo abate a quantidade/peso correspondente no SERVICOITEM da Ordem de Serviço de origem (ou remove o registro se a quantidade casar exatamente), recalculando o valor total via CALCULA_VALOR.

Funcionalidades​

  • Listagem (grid) das requisicoes bloqueadas da empresa corrente
  • Edicao in-grid da situacao do item (combo Bloqueado / Liberado / Cancelado)
  • Botao Salvar (F6) — persiste as alteracoes de situacao e, se cancelado, ajusta o SERVICOITEM da OS
  • Botao Consultar (F3) — abre Consulta Avancada sobre o SQL da requisicao
  • Botao Cancelar Registro (F4) — descarta alteracoes correntes
  • Botao Atualizar Registros (F2) — faz rollback da transacao, reabre a query e recarrega a lista
  • Botao Sair (F12)
  • Atalhos de teclado: F2, F3, F4, F6, F12 tratados em FormKeyDown
  • Navegacao entre colunas do grid por Enter (implementado em FormKeyPress)
  • Controle de acesso: programa.tpAcesso = 2 oculta o botao Salvar (somente leitura)
  • Botoes Novo, Excluir, Imprimir e separador de impressão sao ocultados por padrao no iniciar (tela nao cria/exclui requisicoes)

Estrutura da Tela​

Tela single-frame (sem abas), com toolbar lateral e um grupo principal:

Toolbar (esquerda, alLeft)​

Caption / HintTeclaAcao
Novo Registro<F>(oculto — herdado do template)
Salvar Alteracoes<F>btnSalvarClick — persiste mudancas de situacao
Excluir Registro<F>(oculto)
Cancelar Registro<F>btnLimparClick — tabREQUISICAO.Cancel
Consultar<F>btnProcurarClick — ConsultaAvancada
Atualizar Registros<F>btnAtualizarClick — rollback + reopen
Imprimir<F>(oculto)
Sair<F>btnSairClick — Close

Grupo "Requisicoes Bloqueadas" (grpREQUISICAO)​

  • Grid gridREQUISICAO (TwwDBGrid) — colunas visiveis:
ColunaTítuloOrigemObservacao
NR_ORDEMSERVICONº OSREQUISICAOsomente leitura
DT_REQUISICAODataREQUISICAOformato dd/mm/yyyy
CD_ITEMProdutoITEMREQUISICAOsomente leitura
DS_ITEMITEMdescricao do produto
CD_USUARIOTecnicoREQUISICAOsomente leitura
NM_USUARIOUSUARIOnome do tecnico solicitante
QT_REQUISICAOQuantidadeITEMREQUISICAOformato #,0.00
ST_ITEMREQUISICAOSituacaoITEMREQUISICAOeditavel via combo
  • Combo cmbST_ITEMREQUISICAO (custom-edit da coluna Situacao, Visible = False em design-time — aparece quando a celula entra em edicao):

    Label visivelValor gravado
    BloqueadoB
    LiberadoA
    CanceladoC

Parametros que Influenciam​

O módulo nao consulta tabelas de parametros (PARM*/CONFIG*). O unico filtro externo e sessao.empresa.cd_empresa, aplicado como ParamByName('CD_EMPRESA') no tabREQUISICAO. O comportamento tambem reage a:

OrigemCampo/ConfigEfeito
TProgramatpAcessoSe = 2, oculta btnSalvar (tela vira somente leitura)
ITEM (via HABILITA_PESOQTDE)V_TIPO (P ou Q)Define se o abatimento no SERVICOITEM e feito por PS_SERVICOITEM (peso) ou QT_SERVICOITEM (quantidade)

Regras de Negocio​

1. Filtro de carregamento​

Apenas itens com ITEMREQUISICAO.ST_ITEMREQUISICAO = 'B' e CD_EMPRESA = sessao.empresa.cd_empresa sao exibidos. O status e a empresa sao parte fixa do SQL base (isqlREQUISICAO).

2. Bloqueio de insercao local​

tabREQUISICAONewRecord executa tabRequisicao.Cancel — a tela nao permite inserir registros, apenas alterar a situacao dos existentes.

3. Processo de Salvar (btnSalvarClick)​

Para cada linha da grid:

  • Se ST_ITEMREQUISICAO = 'C' (Cancelado), executa sub-rotina de ajuste sobre SERVICOITEM:
    1. Le COALESCE(PS_SERVICOITEM, QT_SERVICOITEM) e o tipo (HABILITA_PESOQTDE(CD_ITEM).V_TIPO) do item na OS (CD_EMPRESA + NR_ORDEMSERVICO + CD_SERVICO + CD_ITEM).
    2. Se a quantidade da requisicao iguala a quantidade do item na OS -> DELETE FROM SERVICOITEM (remove a linha do item da OS).
    3. Caso contrario, faz UPDATE SERVICOITEM subtraindo a quantidade requisitada:
      • Se V_TIPO = 'Q' -> decrementa QT_SERVICOITEM
      • Senao -> decrementa PS_SERVICOITEM
      • Em ambos os casos, recalcula VL_TOTAL via CALCULA_VALOR(CD_ITEM, PS_SERVICOITEM, QT_SERVICOITEM, VL_UNITARIO, 'T').
  • Ao final do loop, Commit + StartTransaction + tabREQUISICAO.Open com CD_EMPRESA.
  • Exibe mensagem I-0047 ("Alteracoes Efetuadas com Sucesso").

Nota tecnica: os SQL dinamicos sao montados com Nulo(...,'F') e concatenacao (padrao legado jDB). Nao ha uso de ParamByName nesses UPDATE/DELETE.

4. Atualizar (btnAtualizarClick)​

Descarta alteracoes pendentes via transaction.Rollback, restaura SQL original a partir de isqlREQUISICAO, reabre transacao e recarrega a query.

5. Fechamento (FormClose)​

transaction.Rollback + dmMEQ009.Free + sessao.descarregarPrograma(programa). Alteracoes nao salvas sao sempre descartadas.

Datasets e SQL​

DatasetTipoDescricao
tabREQUISICAOTFDQueryLista itens de requisicao bloqueados da empresa, juntando REQUISICAO + ITEMREQUISICAO + ITEM + USUARIO; filtro fixo I.ST_ITEMREQUISICAO = 'B' e I.CD_EMPRESA = :CD_EMPRESA. PK para update: CD_EMPRESA + CD_ITEM + NR_REQUISICAO.
updREQUISICAOTFDUpdateSQLInsertSQL/ModifySQL/DeleteSQL de ITEMREQUISICAO; somente ModifySQL e usado (atualiza DT_REGISTRO = 'NOW' e ST_ITEMREQUISICAO).
dsREQUISICAOTDataSourceBinding para grid e combo.

Alem das queries tipadas, btnSalvarClick monta SQL dinamico em tempo de execucao (ExecutaConsulta + ExecUpdate) contra SERVICOITEM.

Tabelas de Escrita (INSERT/UPDATE/DELETE)​

TabelaOperacoesObservacao
ITEMREQUISICAODELETE, INSERT, SELECT, UPDATENa pratica, apenas UPDATE de ST_ITEMREQUISICAO e DT_REGISTRO (InsertSQL/DeleteSQL existem no updREQUISICAO mas nao sao disparados pela UI).
SERVICOITEMDELETE, SELECT, UPDATEAjuste de quantidade/peso/valor quando a requisicao e Cancelada.

Tabelas de Leitura (SELECT)​

TabelaOperacoesUso
ITEMSELECTJOIN para obter DS_ITEM na grid.
REQUISICAOSELECTCabecalho da requisicao (data, OS, usuario solicitante).
USUARIOSELECTJOIN para obter NM_USUARIO do tecnico.

Procedures Chamadas​

ProcedureTabelas AcessadasUso
CALCULA_VALORITEM (SELECT), TIPOCALCULO (SELECT)Recalcula VL_TOTAL do SERVICOITEM apos abatimento.
HABILITA_PESOQTDEITEM (SELECT), TIPOCALCULO (SELECT), UNIDMED (SELECT)Decide se o abatimento e por peso (P) ou quantidade (Q).

Tabelas via Procedures (acesso indireto)​

TabelaOperacoes
ITEMSELECT
TIPOCALCULOSELECT
UNIDMEDSELECT

Dependencias Aferentes​

Telas que escrevem nas tabelas lidas por MEQ009 (ITEM, REQUISICAO, USUARIO, ITEMREQUISICAO, SERVICOITEM):

TelaTabela(s) que alimentam MEQ009
MEQ007ITEMREQUISICAO, REQUISICAO
MPD017ITEMREQUISICAO, REQUISICAO, SERVICOITEM
MEQ013ITEMREQUISICAO
MEQ014ITEMREQUISICAO
MEQ015ITEMREQUISICAO
MEQ016ITEMREQUISICAO
MEQ036ITEMREQUISICAO
MEQ058ITEMREQUISICAO
MOF001SERVICOITEM
MOF002SERVICOITEM
MOF004SERVICOITEM
MOF005SERVICOITEM
MOF006SERVICOITEM
MOF008SERVICOITEM
MPD005SERVICOITEM
MPD084SERVICOITEM
MPD097SERVICOITEM
CPD013SERVICOITEM
LOF000SERVICOITEM

Dependencias Eferentes​

Telas que leem as tabelas escritas por MEQ009 (ITEMREQUISICAO, SERVICOITEM):

TelaTabela(s) consumida(s)
MEQ007ITEMREQUISICAO
MEQ013ITEMREQUISICAO
MEQ014ITEMREQUISICAO
MEQ015ITEMREQUISICAO
MEQ016ITEMREQUISICAO
MEQ036ITEMREQUISICAO
MEQ058ITEMREQUISICAO
MPD017ITEMREQUISICAO, SERVICOITEM
CPD003SERVICOITEM
CPD013SERVICOITEM
LNF107SERVICOITEM
LOB001SERVICOITEM
LOF000SERVICOITEM
LOP019SERVICOITEM
LOS003SERVICOITEM
LOS006SERVICOITEM
LOS007SERVICOITEM
LOS008SERVICOITEM
LOS009SERVICOITEM
LOS010SERVICOITEM
MFA022SERVICOITEM
MOF001SERVICOITEM
MOF002SERVICOITEM
MOF004SERVICOITEM
MOF006SERVICOITEM
MOF007SERVICOITEM
MOF008SERVICOITEM
MPD005SERVICOITEM
MPD026SERVICOITEM
MPD045SERVICOITEM

Fonte (fim)​

  • source/MEQ009/UMEQ009.pas (form, 255 linhas)
  • source/MEQ009/UMEQ009.dfm (layout)
  • source/MEQ009/UdmMEQ009.pas (DataModule)
  • source/MEQ009/UdmMEQ009.dfm (SQL design-time e UpdateSQL)
  • source/MEQ009/MEQ009.dpk — requires: rtl, vcl, dbrtl, vclwinx, vclactnband, vclx, vcldb, FireDAC*, ipstudiowin, jCommon, jPesquisa