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 literalMEQ009e 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 = 2oculta 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 / Hint | Tecla | Acao |
|---|---|---|
| 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:
| Coluna | Título | Origem | Observacao |
|---|---|---|---|
| NR_ORDEMSERVICO | Nº OS | REQUISICAO | somente leitura |
| DT_REQUISICAO | Data | REQUISICAO | formato dd/mm/yyyy |
| CD_ITEM | Produto | ITEMREQUISICAO | somente leitura |
| DS_ITEM | ITEM | descricao do produto | |
| CD_USUARIO | Tecnico | REQUISICAO | somente leitura |
| NM_USUARIO | USUARIO | nome do tecnico solicitante | |
| QT_REQUISICAO | Quantidade | ITEMREQUISICAO | formato #,0.00 |
| ST_ITEMREQUISICAO | Situacao | ITEMREQUISICAO | editavel via combo |
-
Combo
cmbST_ITEMREQUISICAO(custom-edit da coluna Situacao,Visible = Falseem design-time — aparece quando a celula entra em edicao):Label visivel Valor gravado Bloqueado BLiberado ACancelado C
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:
| Origem | Campo/Config | Efeito |
|---|---|---|
TPrograma | tpAcesso | Se = 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 sobreSERVICOITEM:- 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). - Se a quantidade da requisicao iguala a quantidade do item na OS ->
DELETE FROM SERVICOITEM(remove a linha do item da OS). - Caso contrario, faz
UPDATE SERVICOITEMsubtraindo a quantidade requisitada:- Se
V_TIPO = 'Q'-> decrementaQT_SERVICOITEM - Senao -> decrementa
PS_SERVICOITEM - Em ambos os casos, recalcula
VL_TOTALviaCALCULA_VALOR(CD_ITEM, PS_SERVICOITEM, QT_SERVICOITEM, VL_UNITARIO, 'T').
- Se
- Le
- Ao final do loop,
Commit+StartTransaction+tabREQUISICAO.OpencomCD_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 deParamByNamenesses 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
| Dataset | Tipo | Descricao |
|---|---|---|
tabREQUISICAO | TFDQuery | Lista 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. |
updREQUISICAO | TFDUpdateSQL | InsertSQL/ModifySQL/DeleteSQL de ITEMREQUISICAO; somente ModifySQL e usado (atualiza DT_REGISTRO = 'NOW' e ST_ITEMREQUISICAO). |
dsREQUISICAO | TDataSource | Binding 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)
| Tabela | Operacoes | Observacao |
|---|---|---|
| ITEMREQUISICAO | DELETE, INSERT, SELECT, UPDATE | Na pratica, apenas UPDATE de ST_ITEMREQUISICAO e DT_REGISTRO (InsertSQL/DeleteSQL existem no updREQUISICAO mas nao sao disparados pela UI). |
| SERVICOITEM | DELETE, SELECT, UPDATE | Ajuste de quantidade/peso/valor quando a requisicao e Cancelada. |
Tabelas de Leitura (SELECT)
| Tabela | Operacoes | Uso |
|---|---|---|
| ITEM | SELECT | JOIN para obter DS_ITEM na grid. |
| REQUISICAO | SELECT | Cabecalho da requisicao (data, OS, usuario solicitante). |
| USUARIO | SELECT | JOIN para obter NM_USUARIO do tecnico. |
Procedures Chamadas
| Procedure | Tabelas Acessadas | Uso |
|---|---|---|
| CALCULA_VALOR | ITEM (SELECT), TIPOCALCULO (SELECT) | Recalcula VL_TOTAL do SERVICOITEM apos abatimento. |
| HABILITA_PESOQTDE | ITEM (SELECT), TIPOCALCULO (SELECT), UNIDMED (SELECT) | Decide se o abatimento e por peso (P) ou quantidade (Q). |
Tabelas via Procedures (acesso indireto)
| Tabela | Operacoes |
|---|---|
| ITEM | SELECT |
| TIPOCALCULO | SELECT |
| UNIDMED | SELECT |
Dependencias Aferentes
Telas que escrevem nas tabelas lidas por MEQ009 (ITEM, REQUISICAO, USUARIO, ITEMREQUISICAO, SERVICOITEM):
| Tela | Tabela(s) que alimentam MEQ009 |
|---|---|
| MEQ007 | ITEMREQUISICAO, REQUISICAO |
| MPD017 | ITEMREQUISICAO, REQUISICAO, SERVICOITEM |
| MEQ013 | ITEMREQUISICAO |
| MEQ014 | ITEMREQUISICAO |
| MEQ015 | ITEMREQUISICAO |
| MEQ016 | ITEMREQUISICAO |
| MEQ036 | ITEMREQUISICAO |
| MEQ058 | ITEMREQUISICAO |
| MOF001 | SERVICOITEM |
| MOF002 | SERVICOITEM |
| MOF004 | SERVICOITEM |
| MOF005 | SERVICOITEM |
| MOF006 | SERVICOITEM |
| MOF008 | SERVICOITEM |
| MPD005 | SERVICOITEM |
| MPD084 | SERVICOITEM |
| MPD097 | SERVICOITEM |
| CPD013 | SERVICOITEM |
LOF000 | SERVICOITEM |
Dependencias Eferentes
Telas que leem as tabelas escritas por MEQ009 (ITEMREQUISICAO, SERVICOITEM):
| Tela | Tabela(s) consumida(s) |
|---|---|
| MEQ007 | ITEMREQUISICAO |
| MEQ013 | ITEMREQUISICAO |
| MEQ014 | ITEMREQUISICAO |
| MEQ015 | ITEMREQUISICAO |
| MEQ016 | ITEMREQUISICAO |
| MEQ036 | ITEMREQUISICAO |
| MEQ058 | ITEMREQUISICAO |
| MPD017 | ITEMREQUISICAO, SERVICOITEM |
| CPD003 | SERVICOITEM |
| CPD013 | SERVICOITEM |
LNF107 | SERVICOITEM |
LOB001 | SERVICOITEM |
LOF000 | SERVICOITEM |
LOP019 | SERVICOITEM |
LOS003 | SERVICOITEM |
LOS006 | SERVICOITEM |
LOS007 | SERVICOITEM |
LOS008 | SERVICOITEM |
LOS009 | SERVICOITEM |
LOS010 | SERVICOITEM |
| MFA022 | SERVICOITEM |
| MOF001 | SERVICOITEM |
| MOF002 | SERVICOITEM |
| MOF004 | SERVICOITEM |
| MOF006 | SERVICOITEM |
| MOF007 | SERVICOITEM |
| MOF008 | SERVICOITEM |
| MPD005 | SERVICOITEM |
| MPD026 | SERVICOITEM |
| MPD045 | SERVICOITEM |
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