Permite Troca de Produtos no Carregamento (MPD011)
Tela de configuração: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / O.S. → Opção 2 → "Permite troca de produtos no Carregamento[MPD011]" Tabela:
PARMFATUR.ST_TROCAPRODCARREGValor padrão:N(Não)
Este parâmetro habilita/oculta o botão "Trocar Produtos" (btnTrocarProdutos) dentro da janela de Embarque do módulo MPD011 - Faturamento por Ordem de Carregamento. Quando ligado, o usuário pode abrir um formulário auxiliar e trocar produtos já vinculados ao embarque antes de confirmar a alteração da ordem.
O parâmetro não é consultado por stored procedures — toda a lógica mora no código Delphi do módulo MPD011. O rótulo na tela do MFA001 reforça o destino da configuração: "Permite troca de produtos no Carregamento**[MPD011]**".
Telas impactadas
| Módulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Produtor — grava o valor em PARMFATUR.ST_TROCAPRODCARREG |
| Faturamento por Ordem de Carregamento | MPD011 | Consumidor — ao editar um embarque, consulta o parâmetro em ParmFatur.Values['ST_TROCAPRODCARREG'] para decidir se mostra o botão "Trocar Produtos" no formulário TfrmEmbarque (UEmbarque) |
Campos envolvidos
| Campo | Descrição |
|---|---|
PARMFATUR.ST_TROCAPRODCARREG | O parâmetro em si (CHAR(1)), domínio Sim/Não. Default N gravado no AfterInsert do dataset tabPARMFATUR |
btnTrocarProdutos (UEmbarque.dfm) | Botão "Trocar Produtos" (Caption fixo, Hint "Trocar produtos na Ordem"). Visible é forçado a false em runtime quando o parâmetro é N |
btnRetirar, btnIncluir (UEmbarque.dfm) | Quando o botão "Trocar Produtos" é ocultado, esses dois botões são reposicionados (Left := btnConfirmar.Left / btnCancelar.Left) para ocupar o espaço vago — garantindo layout consistente |
TfrmMPD011Troca | Formulário auxiliar de troca de produtos da ordem, instanciado apenas quando o usuário clica no botão "Trocar Produtos" (portanto só é acessível quando ST_TROCAPRODCARREG = 'S') |
tabTROCAPED (UdmMPD011) | Dataset que alimenta o grid de troca — aberto via ParamByName('CD_EMPRESA') e ParamByName('NR_EMBARQUE') dentro do btnTrocarProdutosClick |
Opções disponíveis
S - Sim
| O que faz | Detalhe |
|---|---|
| Visibilidade do botão | Na janela de edição do Embarque (aberta pelo duplo-clique em uma ordem no MPD011), o botão "Trocar Produtos" fica visível junto aos botões Confirmar / Cancelar / Retirar / Incluir |
Ação do botão (UEmbarque.pas:322) | Ao clicar, o sistema: (1) faz rollback em transactionOrdem se estiver ativa; (2) inicia nova transactionOrdem.StartTransaction; (3) reabre dmMPD011.tabTROCAPED filtrando por CD_EMPRESA e NR_EMBARQUE do embarque corrente; (4) instancia e exibe TfrmMPD011Troca modalmente; (5) se ShowModal = mrOK, dispara btnConfirmar.Click automaticamente para persistir a alteração da ordem |
| Layout dos demais botões | btnRetirar e btnIncluir permanecem em sua posição original, ao lado do botão "Trocar Produtos" |
Simulação passo a passo
- MFA001 → aba Parâmetros → Pedidos / O.S. → Opção 2 → "Permite troca de produtos no Carregamento[MPD011]" = Sim
- Grave (F6) os parâmetros
- Abra o MPD011 - Faturamento por Ordem de Carregamento
- Dê duplo-clique em uma ordem/embarque existente para abrir o formulário de edição (
TfrmEmbarque) - Observe a linha de botões: Confirmar, Cancelar, Retirar, Incluir, Trocar Produtos
- Clique em "Trocar Produtos"
- Uma nova janela (
TfrmMPD011Troca) é exibida mostrando os produtos do embarque em grid — com recursos para substituir um item por outro - Efetue as trocas desejadas e confirme (OK) → o
btnConfirmar.Clické disparado na janela pai e a ordem é persistida com os produtos trocados
Resultado esperado: o operador consegue, diretamente do fluxo de faturamento por embarque, substituir produtos já vinculados à ordem sem precisar voltar ao pedido original.
N - Não (default)
| O que faz | Detalhe |
|---|---|
Visibilidade do botão (UMPD011.pas:1241-1246) | O código testa if (ParmFatur.Values['ST_TROCAPRODCARREG'] = 'N') antes de exibir o TfrmEmbarque. Quando verdadeiro, força frmEmbarque.btnTrocarProdutos.Visible := false |
| Reposicionamento dos botões vizinhos | Junto com a ocultação do botão, o código reposiciona: btnRetirar.Left := btnConfirmar.Left e btnIncluir.Left := btnCancelar.Left. Isso encosta os botões remanescentes sobre o espaço vago — evitando "buraco" no layout |
| Fluxo de troca de produtos | Fica inacessível na janela de embarque. O usuário precisa alterar o pedido original no fluxo de Pedidos (ex.: MPD002) antes de processá-lo pelo embarque |
Simulação passo a passo
- MFA001 → "Permite troca de produtos no Carregamento[MPD011]" = Não (valor padrão)
- Grave (F6) os parâmetros
- Abra o MPD011 e dê duplo-clique em uma ordem existente
- Observe: o botão "Trocar Produtos" não aparece;
btnRetirarebtnIncluirficam deslocados à esquerda, encostando nobtnConfirmarebtnCancelar - Para trocar um produto, é necessário sair do MPD011, abrir o pedido de venda de origem em MPD002 e editá-lo ali
Resultado esperado: fluxo de embarque simplificado, sem o atalho de troca — compatível com operações em que a ordem de carregamento é imutável após emitida e toda alteração deve ocorrer no pedido.
Interação com outros parâmetros do MPD011
ST_ORDEMCARREG(parâmetro de MFA001) — define o modelo de consolidação da NF (por Pedido, Pessoa, Similar, Recapadora). Não afeta a visibilidade do botão "Trocar Produtos"; ambos atuam em momentos distintos do ciclo (troca é pré-confirmação do embarque,ST_ORDEMCARREGé usado na emissão da NF). A queryBuscaParametros_MPD011(UdmMPD011.pas:1577) carrega ambos em uma única leitura daPARMFATUR.ST_ATENDECARREG(parâmetro de MFA001) — controla se o pedido é atendido ao faturar a nota pela ordem. Independente deST_TROCAPRODCARREG; são botões/fluxos separados no formulário de embarque.ST_BLOQUEIAORDEMCARREG(parâmetro de MFA001) — bloqueia faturamento pela ordem. Também é ortogonal: mesmo com o bloqueio ativo, a troca de produtos (se permitida) continua disponível enquanto a ordem não for confirmada.ST_BLOQPESSOACARREG— valida atrasos do cliente no carregamento. Atua na inclusão do pedido no embarque, não na troca de itens.
Em resumo: ST_TROCAPRODCARREG é um toggle de UX isolado, que mostra ou esconde um único botão dentro do TfrmEmbarque do MPD011.
Tabela Comparativa Resumida
| Valor | Nome | Botão "Trocar Produtos" no TfrmEmbarque | Reposicionamento de botões vizinhos | Acesso ao TfrmMPD011Troca |
|---|---|---|---|---|
| S | Sim | Visível | Não — layout original | Permitido |
| N | Não (default) | Oculto (Visible := false) | btnRetirar.Left := btnConfirmar.Left e btnIncluir.Left := btnCancelar.Left | Indisponível |
Referências no Código Fonte
Tela MFA001 (definição do parâmetro)
source/MFA001/UdmMFA001.dfm:1740-1745— declaração do TFieldtabPARMFATURST_TROCAPRODCARREG: TStringField, FieldNameST_TROCAPRODCARREG, FixedChar/Size 1source/MFA001/UdmMFA001.dfm:257e3137— SELECT databPARMFATURlendoPARMFATUR.ST_TROCAPRODCARREGsource/MFA001/UdmMFA001.dfm:2423— INSERT da PARMFATUR incluindo a colunasource/MFA001/UdmMFA001.dfm:2596— bind do parâmetro:ST_TROCAPRODCARREGno INSERTsource/MFA001/UdmMFA001.dfm:2837— UPDATEST_TROCAPRODCARREG = :ST_TROCAPRODCARREG(persistência)source/MFA001/UdmMFA001.pas:242— TField publicado no TDataModulesource/MFA001/UdmMFA001.pas:542—tabPARMFATURST_TROCAPRODCARREG.ASString := 'N';(valor default noAfterInsert)source/MFA001/UMFA001.pas:460— declaraçãocmbST_TROCAPRODCARREG: TwwDBComboBox;source/MFA001/UMFA001.pas:476— declaraçãocmbST_TROCAPRODCARREG1: TwwDBComboBox;(clone usado em outropageControlda tela)source/MFA001/UMFA001.pas:478—cmbST_TROCAPRODCARREG2: TwwDBComboBox;(atenção: apesar do nome, oDataFielddesse componente éST_HABILITACUSTOMINIMO— verUMFA001.dfm:9983)source/MFA001/UMFA001.dfm:9282-9295—Label83: TLabelcom Caption "Permite troca de produtos no Carregamento[MPD011]"source/MFA001/UMFA001.dfm:9310-9323—lbl66: TLabelcom mesma Caption (label duplicado para o segundo ComboBox)source/MFA001/UMFA001.dfm:9873-9901—cmbST_TROCAPRODCARREG: TwwDBComboBox(DataField = 'ST_TROCAPRODCARREG') com os 2 itens:Sim→SNão→N
source/MFA001/UMFA001.dfm:9944-9972—cmbST_TROCAPRODCARREG1: TwwDBComboBox(mesmo DataField e mesmos itens; duplicata em outra aba do formulário)
Consumo do parâmetro (leitura via ParmFatur.Values['ST_TROCAPRODCARREG'])
source/MPD011/UdmMPD011.pas:1580— queryBuscaParametros_MPD011que incluiPF.ST_TROCAPRODCARREGno SELECT da PARMFATUR e popula oParmFatur: TStringListdo módulosource/MPD011/UMPD011.pas:1241-1246— único ponto de consumo: seParmFatur.Values['ST_TROCAPRODCARREG'] = 'N'(antes dofrmEmbarque.ShowModal), ocultabtnTrocarProdutos.Visiblee reposicionabtnRetirar.LeftebtnIncluir.Leftsource/MPD011/UEmbarque.pas:47/UEmbarque.dfm:621-641— declaração visual dobtnTrocarProdutos: TBitBtn(Caption "Trocar Produtos", Hint "Trocar produtos na Ordem")source/MPD011/UEmbarque.pas:322-339—btnTrocarProdutosClickque abre a transaction, carregatabTROCAPEDe exibeTfrmMPD011Troca
DDL
docs/schema/tables/PARMFATUR.sql— colunaST_TROCAPRODCARREG(CHAR(1), defaultN, NOT NULL) — parte do domínio Sim/Não da tabela