ST_MANTEMORCAMENTO — Manter Orçamento/Pedido em Tela ao Salvar
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 2 (label
lblST_MANTEMORCAMENTO/ Caption "Manter Orçamento em Tela ao Salvar [MPD002]") Tabela:PARMFATUR.ST_MANTEMORCAMENTOTipo:CHAR(1)—'S'(Sim) ou'N'(Não) Componente (UMFA001.dfm):TwwDBComboBox cmbST_MANTEMORCAMENTO(Style =csDropDownList,Items.Strings = ('Sim'#9'S', 'Não'#9'N')) Valor padrão:'S'— atribuído emUdmMFA001.pasnotabPARMFATURAfterInsert(linha 547):tabPARMFATURST_MANTEMORCAMENTO.AsString := 'S';
Telas impactadas
| Módulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Produtora: cadastra/edita o parâmetro |
| Pedido de Venda / Orçamento | MPD002 | Único consumidor efetivo: consulta o valor ao final da gravação (btnSalvarClick) para decidir se limpa o formulário |
Procedures impactadas
Nenhuma stored procedure em Scripts/ referencia PARMFATUR.ST_MANTEMORCAMENTO. O parâmetro é consumido exclusivamente no cliente Delphi (MPD002).
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_MANTEMORCAMENTO | Este parâmetro. Decide se MPD002 mantém o pedido/orçamento recém-salvo exibido em tela ou se limpa para um novo |
PEDIDO.TP_PEDIDO | Discriminador 'P' (Pedido), 'O' (Orçamento), 'X' (rascunho que vira 'O' ao gravar). O parâmetro atua independente do tipo, apesar do rótulo mencionar apenas "Orçamento" |
PEDIDO.NR_PEDIDO | Usado na lógica que recarrega o registro salvo (antes de eventual btnNovo.Click) |
Opções disponíveis
S - Sim (padrão)
| O que faz | Detalhe |
|---|---|
| Comportamento | Após salvar, mantém o orçamento/pedido gravado aberto na tela do MPD002 |
| Quando aplicado | No finally do btnSalvarClick de MPD002/UMPD002.pas (linha 1411) — após o Commit, o refresh do tabPEDIDO e a mensagem "Nº. Salvo com Sucesso" |
| Código fonte | if (ParmFatur.Values['ST_MANTEMORCAMENTO'] = 'N') THEN btnNovo.Click; — como o valor é 'S', o btnNovo.Click não é executado |
| Fluxo seguinte | Paginas.ActivePage := pagPEDIDO; edtNR_PEDIDO.SetFocus; — o usuário continua posicionado no registro recém-salvo |
Simulação passo a passo
- MFA001 → aba Faturamento Opção 1 → "Manter Orçamento em Tela ao Salvar [MPD002]" = Sim → F6 para salvar
- Abra MPD002 (Pedido de Venda) e inclua um orçamento (
TP_PEDIDO = 'O') com cliente, itens e condição de pagamento - Clique em Salvar (
btnSalvar) - O sistema executa toda a rotina de gravação (parcelamento, benefícios, juros, commit) e exibe a mensagem
"Orçamento de Venda Nº.: <NR> Salvo com Sucesso." - Após fechar a mensagem, o MPD002 permanece com o orçamento recém-salvo carregado:
NR_PEDIDO, itens, totais e parcelas continuam visíveis - O mesmo comportamento ocorre para pedido (
TP_PEDIDO = 'P') — o rótulo cita "Orçamento", mas o código não filtra por tipo
Resultado esperado: o usuário vê o pedido/orçamento que acabou de gravar, podendo imprimir (btnImprimir) ou revisar os dados sem precisar procurar pelo número.
N - Não
| O que faz | Detalhe |
|---|---|
| Comportamento | Após salvar, limpa a tela e coloca o MPD002 em modo de inclusão para um novo registro |
| Quando aplicado | No finally do btnSalvarClick, após toda a rotina de gravação bem-sucedida |
| Código fonte | if (ParmFatur.Values['ST_MANTEMORCAMENTO'] = 'N') THEN btnNovo.Click; — dispara um clique programático no btnNovo, que aciona o Insert do tabPEDIDO |
| Efeito colateral | Se dmMPD002.iCD_MODORIGEM estiver preenchido (módulo chamou MPD002 passando origem), executa Close em seguida — o formulário fecha em vez de abrir novo |
Simulação passo a passo
- MFA001 → "Manter Orçamento em Tela ao Salvar [MPD002]" = Não → F6 para salvar
- Abra MPD002 e inclua um orçamento com itens
- Clique em Salvar (
btnSalvar) - Após a mensagem
"Orçamento de Venda Nº.: <NR> Salvo com Sucesso.", o sistema disparabtnNovo.Click - A tela é limpa:
NR_PEDIDOem branco, grade de itens vazia, totais zerados — pronto para digitar um novo pedido/orçamento sem precisar clicar manualmente no botão "Novo"
Resultado esperado: fluxo otimizado para cadastro em sequência. Ideal para operadores que lançam vários pedidos/orçamentos seguidos.
Atenção: nesse modo, para consultar o pedido que acabou de ser salvo é necessário usar o botão Procurar (
btnProcurar) ou o histórico — o registro não fica mais em tela.
Fluxo técnico (MPD002.btnSalvarClick)
// UMPD002.pas — linhas 1407-1417 (bloco finally do btnSalvarClick)
finally
dmMPD002.nrPedidoTemporario := dmMPD002.tabPEDIDONR_PEDIDO.AsString;
dmMPD002.tpPedidoTemporario := dmMPD002.tabPEDIDOTP_PEDIDO.AsString;
if (ParmFatur.Values['ST_MANTEMORCAMENTO'] = 'N') THEN
btnNovo.Click;
if (Trim(dmMPD002.iCD_MODORIGEM) <> '') then
Close;
flagCalculaFrete := False;
end;
Ordem das ações pós-gravação:
Commitda transação (linha 1387)- Recarrega
tabPEDIDOcom oNR_PEDIDOgravado (linha 1390-1392) - Foca
edtNR_PEDIDOna aba principal (linha 1394-1395) - Exibe
MessageBox "Salvo com Sucesso"(linha 1398) - Executa
Imprime_Pedido(linha 1400) - Bloco
finally: guardanrPedidoTemporarioe — seST_MANTEMORCAMENTO = 'N'— disparabtnNovo.Click
O parâmetro é lido do cache em memória ParmFatur (TStringList), carregado uma única vez quando o MPD002 inicia via BuscaParametros_MPD002 (ver UdmMPD002.pas linha 5753: P.ST_MANTEMORCAMENTO faz parte do SELECT da função que popula ParmFatur).
Interação com ST_ORCAMENTO / DS_MSGORCAMENTO
| Parâmetro | Relação com ST_MANTEMORCAMENTO |
|---|---|
| ST_ORCAMENTO | Parâmetro "irmão" na mesma aba do MFA001. Sem interação funcional: ST_ORCAMENTO é carregado mas não é usado em nenhuma rotina (parâmetro legado/sem efeito). ST_MANTEMORCAMENTO é o parâmetro ativo que efetivamente controla o comportamento pós-gravação |
| DS_MSGORCAMENTO | Sem interação direta: DS_MSGORCAMENTO atua na impressão (layouts LPD042/LPD044/LOR026/LPD048/LPD128/LPD133), enquanto ST_MANTEMORCAMENTO atua no fluxo de UI pós-salvar. Ambos participam do ciclo de orçamento do MPD002, mas em etapas distintas (impressão vs. limpeza de tela) |
Ciclo completo do orçamento no MPD002
- Usuário inclui orçamento (
TP_PEDIDO = 'O') — nenhum parâmetro envolvido - Usuário clica Salvar → rotina de gravação consome
ST_PARCELAPEDIDO,VL_MINPARCELAPEDIDO, etc. Imprime_Pedidoé chamado — o layout consomeDS_MSGORCAMENTOpara o rodapé- Bloco
finallyconsulta ST_MANTEMORCAMENTO para decidir manter/limpar a tela
Tabela Comparativa Resumida
| Opção | Nome | Ação após btnSalvar | Tela exibe o registro salvo? | Uso recomendado |
|---|---|---|---|---|
| S | Sim (padrão) | Mantém o pedido/orçamento carregado | Sim | Operadores que conferem/imprimem/alteram o registro após gravar |
| N | Não | Executa btnNovo.Click (modo Insert) | Não (formulário limpo) | Operadores que lançam muitos pedidos/orçamentos em sequência |
Detalhe importante: embora o rótulo na tela MFA001 mencione apenas "Orçamento", o código no MPD002 aplica a lógica para qualquer
TP_PEDIDO(Pedido, Orçamento ou rascunho promovido a Orçamento).
Referências no Código Fonte
Delphi — Definição e cadastro (MFA001)
D:/Desenvolvimento/JunsoftERP_V2/source/MFA001/UMFA001.dfm(linhas 9338-9351): labellblST_MANTEMORCAMENTOcom caption'Manter Orçamento em Tela ao Salvar [MPD002]'D:/Desenvolvimento/JunsoftERP_V2/source/MFA001/UMFA001.dfm(linhas 10002-10027): combocmbST_MANTEMORCAMENTOcomDataField = 'ST_MANTEMORCAMENTO'eItems.Strings = ('Sim'#9'S', 'Não'#9'N')D:/Desenvolvimento/JunsoftERP_V2/source/MFA001/UdmMFA001.pas(linha 251): declaração do fieldtabPARMFATURST_MANTEMORCAMENTO: TStringFieldD:/Desenvolvimento/JunsoftERP_V2/source/MFA001/UdmMFA001.pas(linha 547): valor padrãotabPARMFATURST_MANTEMORCAMENTO.AsString := 'S';emtabPARMFATURAfterInsertD:/Desenvolvimento/JunsoftERP_V2/source/MFA001/UdmMFA001.dfm(linhas 1792-1795): TStringField do datasetD:/Desenvolvimento/JunsoftERP_V2/source/MFA001/UdmMFA001.dfm(linhas 264, 2427, 2599, 2845, 3144): SQL doSELECT,INSERTeUPDATEdotabPARMFATUR
Delphi — Consumidor efetivo (MPD002)
D:/Desenvolvimento/JunsoftERP_V2/source/MPD002/UdmMPD002.pas(linha 5753): SQL deBuscaParametros_MPD002trazP.ST_MANTEMORCAMENTOpara popular o cacheParmFaturD:/Desenvolvimento/JunsoftERP_V2/source/MPD002/UMPD002.pas(linhas 1411-1412): consumo nofinallydobtnSalvarClick:if (ParmFatur.Values['ST_MANTEMORCAMENTO'] = 'N') THENbtnNovo.Click;
SQL
- Nenhuma ocorrência em
D:/Desenvolvimento/JunsoftERP_V2/Scripts/— o parâmetro não é referenciado por stored procedures, views ou triggers.