TFA006 — Tabelas de Preço (enriquecimento)
Menu: Cadastros > Tabelas de Faturamento > Tabelas de Preço
Objetivo
A tela TFA006 (Tabelas de Preço) cadastra Tabelas de Preço e os produtos/preços vinculados a cada uma, incluindo preços promocionais por período e condição de pagamento. Também permite atualizar em massa o preço de vários produtos por percentual ou valor (inclusive promoções e duplicação de tabela), reprocessar preços via procedure de estoque/compra, consultar o histórico de alterações de preço e emitir relatórios/demonstrativos de preço.
Fluxo principal
- Na aba 'Tabelas de Preço', clicar Novo, informar Código e Descrição da tabela (e opcionalmente Data de Validade, Sincronização, Tabela Master de Caixa) e Salvar. (pagTABPRECO) —
source/TFA006/UdmTFA006.pas:435-454 (TdmTFA006.tabTABPRECOAfterInsert) - Na aba 'Itens', vincular produtos à tabela informando Código do Produto e Preço; opcionalmente informar preço mínimo/máximo (gera percentuais de desconto/acréscimo máximo). (pagITEMTABPRECO) —
source/TFA006/UdmTFA006.pas:401-466 (TdmTFA006.tabITEMTABPRECOCD_ITEMValidate) - Opcionalmente, para um item já vinculado, cadastrar períodos de preço/promoção (datas, condição de pagamento, percentual de desconto ou promoção). (grid ITEMTABPRECODATA (aba Itens)) —
source/TFA006/UdmTFA006.pas:614-647 (TdmTFA006.tabITEMTABPRECODATABeforePost) - Na aba 'Atualização de Preço', escolher o tipo de operação (Atualização de Preço, Promocional, Duplicação de Tabela ou Alteração de Validade), informar tabela(s) de origem, filtros (grupo/subgrupo/marca/perfil/desenho/medida) e percentual ou valor, e clicar em Atualizar. (pagTABELA) —
source/TFA006/UTFA006.pas:1544-1650 (TfrmTFA006.btnPROCESSARClick) - Confirmar o processamento em massa (aplica UPDATE/INSERT direto nas tabelas de preço/promoção) e depois pressionar F6/Salvar para confirmar definitivamente. (pagTABELA) —
source/TFA006/UTFA006.pas:2243-2246 (TfrmTFA006.btnPROCESSARClick) - Salvar a tela: o sistema grava tabela, itens e períodos pendentes e atualiza a data de registro (DT_REGISTRO) dos itens alterados. (toolbar (btnSalvar)) —
source/TFA006/UTFA006.pas:807-858 (TfrmTFA006.btnSalvarClick)
Campos obrigatórios
| Campo | Condição | Mensagem | Fonte |
|---|---|---|---|
| Código da Tabela de Preço (CD_TABPRECO) | ao incluir uma Tabela de Preço na aba Tabelas de Preço | É Obrigatório Informar o Código da Tabela de Preços! | source/TFA006/UdmTFA006.pas:443-454 (TdmTFA006.tabTABPRECOBeforePost) |
| Descrição da Tabela de Preço (DS_TABPRECO) | ao incluir/alterar a Tabela de Preço | É Obrigatório Informar a Descrição da Tabela de Preços! | source/TFA006/UdmTFA006.pas:443-454 (TdmTFA006.tabTABPRECOBeforePost) |
| Código e Preço do Produto (CD_ITEM / VL_PRECO) | ao vincular um produto a uma Tabela de Preço (aba Itens) | É Obrigatório informar o Código do Produto! / É Obrigatório Informar o Preço do Produto! | source/TFA006/UdmTFA006.pas:456-466 (TdmTFA006.tabITEMTABPRECOBeforePost) |
| Data Inicial, Data Final e Preço do Período (promoção do item) | ao cadastrar um período de preço/promoção do item | É Obrigatório Informar a Data Inicial! / Data Final! / Preço do Período! | source/TFA006/UdmTFA006.pas:614-629 (TdmTFA006.tabITEMTABPRECODATABeforePost) |
| Tabela (Tabela de Origem), Percentual/Valor, Datas de Promoção (aba Atualização de Preço) | conforme o tipo de operação selecionado em cmbST_TABELA (A, P, D, V) | É Obrigatório Informar o Campo Tabela.../ Percentual ou o Valor!/ Data de Inicio da Promoção!/ etc. | source/TFA006/UTFA006.pas:1576-1650 (TfrmTFA006.btnPROCESSARClick) |
Mensagens: causa e ação
A Data Final não pode ser Menor que a Data Inicial!
Causa: Usuário informou, no período de preço/promoção do item, uma Data Final anterior à Data Inicial.
Ação: Corrigir as datas do período na grade de preços do item.
Fonte: source/TFA006/UdmTFA006.pas:628-629 (TdmTFA006.tabITEMTABPRECODATABeforePost)
A Data Inicial não pode ser Maior que a Data Final!
Causa: Na aba Atualização de Preço, a Data de Início da Promoção informada é posterior à Data de Fim.
Ação: Ajustar as datas de início/fim da promoção.
Fonte: source/TFA006/UdmTFA006.pas:1296-1314 (TdmTFA006.tabTABELADT_INICIOPROMOCAOValidate)
A Tabela de Preço já está Cadastrada!
Causa: O código de Tabela de Preço digitado já existe no cadastro.
Ação: Usar outro código ou localizar/editar a tabela existente.
Fonte: source/TFA006/UdmTFA006.pas:576-588 (TdmTFA006.tabTABPRECOCD_TABPRECOValidate)
A Tabela de Preço %s é uma Tabela de Caixa Master. Verifique!
Causa: A tabela informada como Master já é master de outra tabela de caixa (encadeamento não permitido).
Ação: Escolher outra tabela para ser a Master de Caixa.
Fonte: source/TFA006/UdmTFA006.pas:1212-1220 (TdmTFA006.tabTABPRECOCD_TABMASTERValidate)
A tabela de preço deve ser informada!
Causa: Na aba Atualização de Preço, tipo 'A', o usuário tentou informar um produto/pressionar F9 sem antes cadastrar ao menos uma tabela na grade de tabelas de origem.
Ação: Preencher a grade de Tabelas antes de informar produto ou filtros.
Fonte: source/TFA006/UdmTFA006.pas:489-499 (TdmTFA006.tabTABELACD_ITEMValidate)
A tabela de preço do item "%s" está sendo alterada em outra instância no momento. Atualização de preço Cancelada!
Causa: Conflito de concorrência: outro processo alterou o mesmo ITEMTABPRECO no mesmo instante (SAVEPOINT falhou).
Ação: Aguardar e repetir a operação de salvar/reprocessar.
Fonte: source/TFA006/UTFA006.pas:832-852 (TfrmTFA006.btnSalvarClick)
A Tabela de Preço já está Cadastrada!
Causa: Ver acima.
Ação: Ver acima.
Fonte: source/TFA006/UdmTFA006.pas:576-588 (TdmTFA006.tabTABPRECOCD_TABPRECOValidate)
Deseja duplicar este item para as outras tabelas?
Causa: Item foi incluído pela primeira vez em uma tabela de preço e o parâmetro PARMFATUR.STATUALIZAITEMTABPRECO está ligado.
Ação: Responder Sim para replicar o mesmo preço nas demais tabelas que ainda não têm o item, ou Não para manter só na tabela atual.
Fonte: source/TFA006/UdmTFA006.pas:1068-1089 (TdmTFA006.tabITEMTABPRECOAfterPost)
O Produto já está Cadastrado para esta Tabela de Preço!
Causa: O produto informado já possui registro em ITEMTABPRECO para a mesma tabela de preço.
Ação: Localizar e editar o registro existente em vez de incluir um novo.
Fonte: source/TFA006/UdmTFA006.pas:415-420 (TdmTFA006.tabITEMTABPRECOCD_ITEMValidate)
O Produto não está Ativo [TPO001]!
Causa: O produto informado está inativo no cadastro de Produtos (TPO001).
Ação: Reativar o produto em TPO001 ou usar outro produto ativo.
Fonte: source/TFA006/UdmTFA006.pas:501-514 (TdmTFA006.tabTABELACD_ITEMValidate)
Não é permitido informar valor de preço negativo. Verifique !
Causa: Usuário digitou um preço (VL_PRECO) negativo para o item na tabela.
Ação: Informar um valor de preço maior ou igual a zero.
Fonte: source/TFA006/UdmTFA006.pas:1241-1242 (TdmTFA006.tabITEMTABPRECOVL_PRECOValidate)
O preço Minimo não pode ser Maior que o preço atual do Item. Verifique!
Causa: O Preço Mínimo informado é maior que o Preço de venda atual do item.
Ação: Reduzir o preço mínimo ou revisar o preço do item.
Fonte: source/TFA006/UdmTFA006.pas:894-903 (TdmTFA006.tabITEMTABPRECOVL_PRECOMINIMOValidate)
O preço Maximo não pode ser Menor que o preço atual do Item. Verifique!
Causa: O Preço Máximo informado é menor que o Preço de venda atual do item.
Ação: Aumentar o preço máximo ou revisar o preço do item.
Fonte: source/TFA006/UdmTFA006.pas:911-920 (TdmTFA006.tabITEMTABPRECOVL_PRECOMAXIMOValidate)
O Desconto não pode ser maior que o preço do item!
Causa: O valor de desconto/preço promocional do período informado supera o preço base do item, sem que o recálculo automático (ST_ALTERAVLTFA006) esteja em curso.
Ação: Informar um valor de desconto/percentual dentro do limite do preço do item.
Fonte: source/TFA006/UdmTFA006.pas:1106-1113 (TdmTFA006.tabITEMTABPRECODATAVL_PRECOValidate)
A Promoção não pode ser mais que 100%!
Causa: O percentual de promoção do item (PC_PROMOCAO) informado é maior que 100%.
Ação: Informar um percentual de promoção entre 0 e 100.
Fonte: source/TFA006/UdmTFA006.pas:1711-1715 (TdmTFA006.tabITEMTABPRECODATAPC_PROMOCAOValidate)
Já Existem Promoções cadastradas neste Período. Verifique!
Causa: Já existe outro período de preço/promoção para o mesmo item, tabela e condição de pagamento cujas datas se sobrepõem às informadas.
Ação: Ajustar as datas do novo período ou editar/excluir o período conflitante.
Fonte: source/TFA006/UdmTFA006.pas:1316-1402 (TdmTFA006.Valida_DiponibilidadePromo)
Já Existem Promoções cadastradas neste Período para o Item %sCD_ITEM%s. Verifique!
Causa: Mesmo cenário do item acima, mas disparado durante a Atualização de Preço Promocional em massa (aba Atualização de Preço).
Ação: Ajustar o período de promoção informado no processamento em massa.
Fonte: source/TFA006/UTFA006.pas:1924-1962 (TfrmTFA006.btnPROCESSARClick)
Somente Usuário do Tipo Autorizador pode excluir esse Registro.
Causa: Usuário logado não está cadastrado como Autorizador ativo e tentou excluir um registro do Histórico de Preços.
Ação: Solicitar a um usuário Autorizador que realize a exclusão, ou cadastrar o usuário como autorizador.
Fonte: source/TFA006/UTFA006.pas:742-750 (TfrmTFA006.btnExcluirClick)
É Permitido Informar no Máximo Três Condições de Pagamento!
Causa: Usuário tentou incluir uma quarta Condição de Pagamento vinculada à tabela de preço.
Ação: Remover uma condição de pagamento existente antes de incluir outra (limite de 3).
Fonte: source/TFA006/UdmTFA006.pas:1287-1294 (TdmTFA006.tabCONDPAGTONewRecord)
Atualização deixará o valor do Item %sCD_ITEM%s negativo. Valor Informado.: ... Valor Tabela Preço.: ... Verifique!
Causa: Na Atualização de Preço por valor fixo negativo (desconto em R$), o valor a subtrair é maior que o preço atual de algum item filtrado, o que geraria preço negativo.
Ação: Reduzir o valor de desconto informado ou restringir o filtro para não atingir itens com preço menor que o desconto.
Fonte: source/TFA006/UdmTFA006.pas:1500-1509 (TdmTFA006.ValidaPrecoNovo)
Não Existem dados para Impressão. Verifique!
Causa: O relatório de Demonstrativo de Preço não encontrou nenhum registro com os filtros informados.
Ação: Revisar os filtros de tabela/grupo/marca/período usados no relatório.
Fonte: source/TFA006/UTFA006.pas:3356-3358 (TfrmTFA006.btnImpressaoClick)
Informe ao menos uma tabela de Preço!
Causa: No relatório tipo Impressão de Preços (Lista, opção 'I'), nenhuma Tabela de Preço foi selecionada na grade de tabelas.
Ação: Selecionar ao menos uma Tabela de Preço antes de imprimir.
Fonte: source/TFA006/UTFA006.pas:3485-3488 (TfrmTFA006.btnImpressaoClick)
Informe a Condição de Pagamento!
Causa: No relatório tipo 'I', a Condição de Pagamento não foi informada.
Ação: Selecionar uma Condição de Pagamento antes de imprimir.
Fonte: source/TFA006/UTFA006.pas:3491-3494 (TfrmTFA006.btnImpressaoClick)
É Obrigatório Informar o Cliente!
Causa: No relatório tipo Lista de Preço para Cliente (opção 'L'), o Cliente não foi informado.
Ação: Informar o cliente (Pessoa) antes de imprimir a lista.
Fonte: source/TFA006/UTFA006.pas:3521-3524 (TfrmTFA006.btnImpressaoClick)
Regras de negócio
TFA006.R001(verregras/TFA006/TFA006.R001.md)TFA006.R002(verregras/TFA006/TFA006.R002.md)TFA006.R003(verregras/TFA006/TFA006.R003.md)TFA006.R004(verregras/TFA006/TFA006.R004.md)TFA006.R005(verregras/TFA006/TFA006.R005.md)TFA006.R006(verregras/TFA006/TFA006.R006.md)TFA006.R007(verregras/TFA006/TFA006.R007.md)TFA006.R008(verregras/TFA006/TFA006.R008.md)TFA006.R009(verregras/TFA006/TFA006.R009.md)TFA006.R010(verregras/TFA006/TFA006.R010.md)TFA006.R011(verregras/TFA006/TFA006.R011.md)TFA006.R012(verregras/TFA006/TFA006.R012.md)TFA006.R013(verregras/TFA006/TFA006.R013.md)TFA006.R014(verregras/TFA006/TFA006.R014.md)TFA006.R015(verregras/TFA006/TFA006.R015.md)TFA006.R016(verregras/TFA006/TFA006.R016.md)TFA006.R017(verregras/TFA006/TFA006.R017.md)TFA006.R018(verregras/TFA006/TFA006.R018.md)TFA006.R019(verregras/TFA006/TFA006.R019.md)TFA006.R020(verregras/TFA006/TFA006.R020.md)TFA006.R021(verregras/TFA006/TFA006.R021.md)
Perguntas frequentes
P: Por que aparece 'A Tabela de Preço já está Cadastrada!' ao tentar incluir uma tabela?
R: O código informado em CD_TABPRECO já existe. Informe um código diferente para a nova Tabela de Preço.
Fonte: source/TFA006/UdmTFA006.pas:576-588 (TdmTFA006.tabTABPRECOCD_TABPRECOValidate)
P: Por que não consigo excluir um registro de Histórico de Preços?
R: Só usuários cadastrados como Autorizador ativo (tabela AUTORIZADOR) podem excluir registros do Histórico. Peça a um autorizador para excluir ou cadastre o usuário como autorizador.
Fonte: source/TFA006/UTFA006.pas:742-757 (TfrmTFA006.btnExcluirClick)
P: Deu a mensagem 'O Produto já está Cadastrado para esta Tabela de Preço!'
R: O produto informado já tem um registro em ITEMTABPRECO para essa mesma tabela; use a busca (F9) ou altere o registro existente em vez de incluir novamente.
Fonte: source/TFA006/UdmTFA006.pas:401-433 (TdmTFA006.tabITEMTABPRECOCD_ITEMValidate)
P: Por que o sistema pergunta 'Deseja duplicar este item para as outras tabelas?' ao salvar um item novo?
R: O parâmetro PARMFATUR.STATUALIZAITEMTABPRECO está ligado ('S'); ao incluir um item pela primeira vez o sistema oferece replicar o mesmo preço para as demais Tabelas de Preço que ainda não têm esse item. Responda Não se não quiser replicar.
Fonte: source/TFA006/UdmTFA006.pas:1064-1090 (TdmTFA006.tabITEMTABPRECOAfterPost)
P: Deu 'A tabela de preço do item ... está sendo alterada em outra instância no momento. Atualização de preço Cancelada!'
R: Outro usuário/processo está alterando o mesmo item de tabela de preço no mesmo instante (conflito de SAVEPOINT); aguarde e tente salvar/reprocessar novamente.
Fonte: source/TFA006/UTFA006.pas:832-852 (TfrmTFA006.btnSalvarClick)
P: Por que não consigo digitar/selecionar um produto na aba Atualização de Preço quando o tipo é 'Atualização de Preço' (A)?
R: É preciso primeiro informar ao menos uma Tabela de Preço de origem na grade 'Tabelas'; sem isso o sistema bloqueia com 'A tabela de preço deve ser informada!'.
Fonte: source/TFA006/UdmTFA006.pas:479-500 (TdmTFA006.tabTABELACD_ITEMValidate)
P: Deu 'Já Existem Promoções cadastradas neste Período. Verifique!' ao salvar uma promoção do item.
R: Já existe outro período de preço/promoção cadastrado para o mesmo item, tabela e condição de pagamento que sobrepõe as datas informadas; ajuste as datas ou exclua/edite a promoção existente.
Fonte: source/TFA006/UdmTFA006.pas:1316-1402 (TdmTFA006.Valida_DiponibilidadePromo)
P: Por que o botão 'Excluir Produtos' apaga todos os itens da tabela mesmo eu tendo aplicado um filtro?
R: O botão 'Excluir Produtos' remove TODOS os itens (ITEMTABPRECO) da Tabela de Preço selecionada, ignorando qualquer filtro da tela; a ação é irreversível e exige confirmação explícita. Está disponível só para o usuário autorizador na TFA008.
Fonte: source/TFA006/UTFA006.pas:4034-4056 (TfrmTFA006.btnExcluiProdutosClick)
P: Deu 'A Tabela de Preço %s é uma Tabela de Caixa Master. Verifique!' ao configurar tabela mestre de caixa.
R: A tabela de preço que está sendo editada já é usada como CD_TABMASTER (mestre) de outra tabela de caixa; não é permitido encadear uma tabela master como escrava de outra. Escolha outra tabela.
Fonte: source/TFA006/UdmTFA006.pas:1202-1235 (TdmTFA006.tabTABPRECOCD_TABMASTERValidate)
P: Deu 'A Data Final não pode ser Menor que a Data Inicial!' na promoção do item.
R: A data final do período de preço/promoção informada é anterior à data inicial; corrija as datas do período.
Fonte: source/TFA006/UdmTFA006.pas:628-629 (TdmTFA006.tabITEMTABPRECODATABeforePost)
P: Por que ao alterar o preço base do item (VL_PRECO) os preços promocionais futuros também mudam sozinhos?
R: Isso é intencional quando o parâmetro PARMFATUR.ST_ALTERAVLTFA006 está ligado ('S'): o sistema recalcula automaticamente os preços dos períodos de promoção ainda vigentes (DT_FINAL >= hoje) mantendo o percentual de desconto já cadastrado.
Fonte: source/TFA006/UdmTFA006.pas:1237-1269 (TdmTFA006.tabITEMTABPRECOVL_PRECOValidate)
Dúvidas em aberto (o código não responde)
- O parâmetro ST_JUROVENDA só afeta a visibilidade do combo/label de cálculo de juros (ST_CALCULAJUROS) quando igual a 'T'? Não há outro efeito de negócio localizado no módulo. — UTFA006.pas:445-446 apenas alterna Visible; não achei uso do valor calculado.
- Qual é o efeito real de PARMFATUR.CD_TABCOMPRA na consulta de itens (join ITEMTABCOMPRA)? O parâmetro é passado como CD_TABCOMPRA ao abrir tabITEMTABPRECO, mas o SQL completo da query está no .dfm e não foi lido por completo. — UdmTFA006.pas:381-382 e UdmTFA006.dfm:227-236.
- O que a procedure RETORNA_PERFIL_TFA006 faz exatamente? É citada no briefing como chamada pelo módulo mas não encontrei a chamada direta nos dois .pas lidos. — Pode estar embutida no SQL de algum TFDQuery no .dfm (não lido por completo).
- Como o combo cmbST_TABELA = 'V' (Alteração de Validade) trata data de validade vazia? Não vi validação de campo obrigatório para tabTABELADT_VALIDADE antes do UPDATE em btnPROCESSARClick. — UTFA006.pas:2230-2238.