Pular para o conteúdo principal

Parâmetro de Exibição de Produtos com Preço Zerado

Tela de configuração primária: TFA006 - Tabela de Preço de Venda (aba Itens da Tabela) Tela MFA001: O campo existe na tabela PARMFATUR e é persistido pelos INSERT/SELECT do MFA001, mas não possui controle visual no MFA001. A configuração é feita diretamente no TFA006 via checkbox. Tabela: PARMFATUR.ST_EXIBEZERADOS (DOM_CHAR1 DEFAULT 'N') Valor padrão: N (Não exibir oculto - ou seja, exibe produtos com preço zerado)

:::warning Comportamento inverso da nomenclatura O nome do campo é ST_EXIBEZERADOS mas o checkbox no TFA006 tem o caption "Não exibir produtos com preço zerado". A lógica é:

  • Checkbox marcado (Checked = True) → ST_EXIBEZERADOS = 'S' → filtra com VL_PRECO >= 0.01 → oculta produtos zerados
  • Checkbox desmarcado (Checked = False) → ST_EXIBEZERADOS = 'N' → filtra com VL_PRECO >= 0 → exibe todos os produtos :::

Telas impactadas​

MóduloCódigoDescrição
Tabela de Preço de VendaTFA006Única tela que lê e grava ST_EXIBEZERADOS. Controla a exibição do grid da aba Itens da Tabela
Parâmetros de FaturamentoMFA001Persiste o campo no INSERT/SELECT de PARMFATUR, porém não expõe controle visual

Campos envolvidos​

CampoDescrição
PARMFATUR.ST_EXIBEZERADOSFlag de exibição ('S' = oculta zerados / 'N' = exibe zerados)
ITEMTABPRECO.VL_PRECOPreço do produto na tabela de venda (comparado com PARAM_PRECOZERADO)
PARAM_PRECOZERADOParâmetro de query em tabITEMTABPRECO do TFA006 (assume ' 0.01' ou ' 0')

Referência ao SQL do TFA006 (dataset tabITEMTABPRECO)​

Localização: source/TFA006/UdmTFA006.dfm:231

WHERE ITEMTABPRECO.CD_TABPRECO = :CD_TABPRECO
AND ITEM.ST_ATIVO = 'S'
AND ITEMTABPRECO.VL_PRECO >= :PARAM_PRECOZERADO

O valor de :PARAM_PRECOZERADO é atribuído em tempo de execução a partir do estado do checkbox.


Opções disponíveis​

S - Sim (Ocultar produtos com preço zerado)​

O que fazDetalhe
Checkbox no TFA006Marcado
Valor atribuído a PARAM_PRECOZERADO' 0.01'
Efeito no grid de itensLista apenas produtos com VL_PRECO >= 0,01
Produtos sem preço cadastradoOcultos do grid
Aplica-se ao relatório de tabela?Sim, quando TP_RELATORIO = 'C' e chkQuebraSubGrupo marcado (filtra por VL_PRECO1/2/3/4 >= 0.01)

Código fonte (referências)​

  • Leitura ao abrir a aba "Itens da Tabela" (PaginasChange em source/TFA006/UTFA006.pas:1047-1063):

    Consulta :=
    'SELECT PF.ST_EXIBEZERADOS '+#10+
    'FROM PARMFATUR PF ' +
    'WHERE PF.CD_EMPRESA = ' + IntToStr(sessao.empresa.cd_empresa);
    Resultado := ExecutaConsulta(dmTFA006.transaction, Consulta);

    if (Resultado[0] = 'S') then
    chkEXIBIR_ZERADOS.Checked := true
    else
    chkEXIBIR_ZERADOS.Checked := false;
  • Gravação ao clicar o checkbox (chkEXIBIR_ZERADOSClick em source/TFA006/UTFA006.pas:4094-4118):

    if (frmTFA006.chkEXIBIR_ZERADOS.Checked = true) then
    begin
    dmTFA006.tabITEMTABPRECO.ParamByName('PARAM_PRECOZERADO').Value := ' 0.01';
    Status := 'S';
    end
    else
    begin
    dmTFA006.tabITEMTABPRECO.ParamByName('PARAM_PRECOZERADO').Value := ' 0';
    Status := 'N';
    end;
    dmTFA006.tabITEMTABPRECO.Open;

    Consulta := 'UPDATE PARMFATUR SET ST_EXIBEZERADOS = ' + #39 + Status + #39 +
    ' WHERE CD_EMPRESA = ' + IntToStr(sessao.empresa.cd_empresa);
    ExecUpdate(dmTFA006.transaction, Consulta);
    dmTFA006.transaction.CommitRetaining;
  • Filtro equivalente no relatório (source/TFA006/UTFA006.pas:3011-3014):

    if (chkEXIBIR_ZERADOS.Checked = true) then
    filtroZerados := ' WHERE ((VL_PRECO1 >= 0.01) OR (VL_PRECO2 >= 0.01) OR (VL_PRECO3 >= 0.01) or (VL_PRECO4 >= 0.01)) '
    else
    filtroZerados := '';

Simulação passo a passo​

  1. Abra TFA006 - Tabela de Preço de Venda
  2. Selecione uma Tabela de Preço qualquer na aba Tabelas
  3. Clique na aba Itens da Tabela
  4. Marque o checkbox "Não exibir produtos com preço zerado"
  5. Ao clicar no checkbox o sistema:
    • Fecha o grid de itens
    • Atribui PARAM_PRECOZERADO := ' 0.01'
    • Reabre o grid (mostra somente itens com VL_PRECO >= 0,01)
    • Executa UPDATE PARMFATUR SET ST_EXIBEZERADOS = 'S' com CommitRetaining
  6. Produtos cadastrados na tabela com preço 0,00 desaparecem do grid
  7. Feche e reabra o TFA006 → o checkbox permanece marcado (valor persistido em PARMFATUR)

Resultado esperado: O grid da aba "Itens da Tabela" omite produtos sem preço. O parâmetro ST_EXIBEZERADOS = 'S' é mantido por empresa e recuperado em futuras aberturas do TFA006.


N - Não (Exibir todos os produtos, inclusive os zerados)​

O que fazDetalhe
Checkbox no TFA006Desmarcado
Valor atribuído a PARAM_PRECOZERADO' 0'
Efeito no grid de itensLista TODOS os produtos com VL_PRECO >= 0, incluindo preço zero
Produtos sem preço cadastradoVisíveis no grid (com valor 0,00)
Filtro do relatório de tabelafiltroZerados := '' (sem filtro de preço)

Simulação passo a passo​

  1. Abra TFA006
  2. Selecione uma Tabela de Preço
  3. Clique na aba Itens da Tabela
  4. Desmarque o checkbox "Não exibir produtos com preço zerado" (se estiver marcado)
  5. Ao desmarcar o sistema:
    • Fecha o grid
    • Atribui PARAM_PRECOZERADO := ' 0'
    • Reabre o grid (todos os itens são exibidos)
    • Executa UPDATE PARMFATUR SET ST_EXIBEZERADOS = 'N' com CommitRetaining
  6. Produtos sem preço (VL_PRECO = 0,00) aparecem no grid

Resultado esperado: O grid mostra todos os itens vinculados à tabela de preço, mesmo os que ainda não tiveram preço cadastrado. Útil para cadastro inicial de tabela de preço.

Este é o valor padrão (DEFAULT 'N') na DDL de PARMFATUR.


Interação com o MFA001​

O campo ST_EXIBEZERADOS aparece nas cláusulas SQL do dataset tabPARMFATUR do MFA001, mas não há nenhum controle visual (ComboBox, CheckBox ou DBEdit) amarrado ao campo em UMFA001.dfm, nem atribuição de default em tabPARMFATURAfterInsert (source/MFA001/UdmMFA001.pas:432).

Referências no MFA001​

  • Lista de colunas do INSERT (source/MFA001/UdmMFA001.dfm:2361):
    ... ST_VALIDANSERIEITEMPEDIDO, ST_EXIBEZERADOS, ST_BLOQUEIADESCPROM, ...
  • Lista de parâmetros do INSERT (source/MFA001/UdmMFA001.dfm:2515):
    ... :TP_CODFORNEC, :ST_VALIDANSERIEITEMPEDIDO, :ST_EXIBEZERADOS, :ST_BLOQUEIADESCPROM, ...

Implicação prática: Ao criar um registro de PARMFATUR pela primeira vez via MFA001, o valor de :ST_EXIBEZERADOS será deixado como NULL pelo dataset (nenhuma atribuição em AfterInsert). O DEFAULT 'N' da DDL assume então o valor padrão 'N' no banco. A partir daí, apenas o TFA006 altera esse campo.


Tabela Comparativa Resumida​

OpçãoDescriçãoCheckbox no TFA006PARAM_PRECOZERADOItens com preço 0 no grid?Filtro no relatório
SOculta zeradosMarcado' 0.01'NãoVL_PRECO1/2/3/4 >= 0.01
NExibe todosDesmarcado' 0'Simsem filtro

Referências no Código Fonte​

Delphi​

ArquivoLinha(s)Descrição
source/MFA001/UdmMFA001.dfm2361ST_EXIBEZERADOS na lista de colunas do INSERT de tabPARMFATUR
source/MFA001/UdmMFA001.dfm2515:ST_EXIBEZERADOS na lista de parâmetros do INSERT
source/TFA006/UTFA006.dfm1264-1273Declaração visual do chkEXIBIR_ZERADOS: TCheckBox com caption "Não exibir produtos com preço zerado"
source/TFA006/UTFA006.pas131Declaração do componente chkEXIBIR_ZERADOS: TCheckBox
source/TFA006/UTFA006.pas300Declaração do evento chkEXIBIR_ZERADOSClick
source/TFA006/UTFA006.pas1054-1063PaginasChange: lê ST_EXIBEZERADOS de PARMFATUR e atualiza o checkbox
source/TFA006/UTFA006.pas3011-3014Relatório: filtroZerados conforme estado do checkbox
source/TFA006/UTFA006.pas4094-4118chkEXIBIR_ZERADOSClick: define PARAM_PRECOZERADO, reabre grid e faz UPDATE PARMFATUR SET ST_EXIBEZERADOS
source/TFA006/UdmTFA006.dfm231-244SQL de tabITEMTABPRECO com AND ITEMTABPRECO.VL_PRECO >= :PARAM_PRECOZERADO
source/TFA006/UdmTFA006.pas381-388Reatribuição de PARAM_PRECOZERADO conforme chkEXIBIR_ZERADOS.Checked ao recarregar itens

SQL / Scripts​

Nenhuma procedure, trigger ou view do diretório Scripts/ referencia ST_EXIBEZERADOS. O campo é usado exclusivamente no nível de cliente (Delphi) e na DDL de PARMFATUR.

DDL​

  • docs/schema/tables/PARMFATUR.sql: ST_EXIBEZERADOS DOM_CHAR1 DEFAULT 'N'