QT_DIASVALIDADEPEDORC - Quantidade de dias de validade padrão de Pedidos e Orçamentos
Tela: MFA001 - Parâmetros de Faturamento Localização: Parâmetros → Pedidos / Ordem de Serviço → campo Validade Ped./Orc. (label
Label42emUMFA001.dfm:7999-8011, posicionado emLeft=38, Top=211; ao lado, label auxiliarDias— e o editedtQT_DIASVALIDADEPEDORCemUMFA001.dfm:8773-8789,Left=133, Top=207). Tabela:PARMFATUR.QT_DIASVALIDADEPEDORCTipo: Numérico inteiro (quantidade de dias).DOM_INTEGERno DDL (docs/schema/tables/PARMFATUR.sql:127);TIntegerFieldno client (UdmMFA001.pas:168). OTDBEditnão possui máscara/formatação adicional. Valor padrão:NULL— otabPARMFATURAfterInsertemUdmMFA001.pas:434-513não atribui valor inicial a este campo. A empresa começa sem validade configurada. Validação (MFA001): Não háOnValidatenotabPARMFATURQT_DIASVALIDADEPEDORC. Qualquer inteiro (positivo, zero ou negativo) é aceito na tela de parâmetros.
O que o parâmetro faz
QT_DIASVALIDADEPEDORC é a quantidade padrão de dias de validade que será sugerida automaticamente ao incluir um novo Pedido de Venda (MPD002), Pedido de Compra (MPD020) ou Orçamento de Oficina (MOF005).
Em cada um desses módulos, ao clicar em Novo, o sistema lê o parâmetro em PARMFATUR e copia o valor para o campo QT_DIASVALIDADE do pedido recém-criado (ou soma ao DT_ORCAMENTO para calcular a DT_VALIDADEORC no orçamento de oficina). O operador pode alterar manualmente o valor no pedido; o parâmetro apenas semeia o default.
A validação OnValidate do campo QT_DIASVALIDADE no pedido (UdmMPD002.pas:4212-4219 e UdmMPD020.pas:2414-2421) preenche o campo descritivo DS_VALIDADE com "Este Pedido / Orçamento é Válido por <N> Dias." sempre que QT_DIASVALIDADE é alterado.
Telas impactadas
| Módulo | Código | Papel |
|---|---|---|
| Parâmetros de Faturamento | MFA001 | Produtora — cadastra/edita o valor no campo edtQT_DIASVALIDADEPEDORC (aba Pedidos / Ordem de Serviço, UMFA001.dfm:8773). |
| Pedido de Venda | MPD002 | Consumidora. Na inclusão de pedido, se o campo estiver vazio, copia o parâmetro para PEDIDO.QT_DIASVALIDADE (UMPD002.pas:3518-3523). Traz o campo no SELECT consolidado de PARMFATUR (UdmMPD002.pas:5754). |
| Pedido de Compra | MPD020 | Consumidora. Na inclusão de pedido (Append), copia sempre o parâmetro para PEDIDO.QT_DIASVALIDADE (UMPD020.pas:1008). |
| Orçamento de Oficina | MOF005 | Consumidora. Lê o parâmetro em iQT_VALIDADEORC (UdmMOF005.pas:225, 239) e, na inclusão, calcula ORCAMENTO.DT_VALIDADEORC := DT_ORCAMENTO + iQT_VALIDADEORC (UMOF005.pas:967-968). |
Procedures impactadas
Nenhuma stored procedure em Scripts/ referencia QT_DIASVALIDADEPEDORC. Toda a lógica é executada no cliente Delphi, nos módulos consumidores acima.
Campos envolvidos
| Campo | Tabela | Papel |
|---|---|---|
QT_DIASVALIDADEPEDORC | PARMFATUR | Valor padrão em dias (este parâmetro) |
QT_DIASVALIDADE | PEDIDO | Validade em dias gravada no pedido — recebe cópia do parâmetro na inclusão |
DS_VALIDADE | PEDIDO | Texto descritivo gerado pelo OnValidate do QT_DIASVALIDADE ("Este Pedido / Orçamento é Válido por N Dias.") |
DT_ORCAMENTO | ORCAMENTO (MOF005) | Data base do orçamento de oficina |
DT_VALIDADEORC | ORCAMENTO (MOF005) | Data de validade calculada como DT_ORCAMENTO + QT_DIASVALIDADEPEDORC |
Comportamento / Regra
Valor = NULL ou vazio (padrão)
| Aspecto | Comportamento |
|---|---|
| Preenchimento em MFA001 | Campo nasce vazio no AfterInsert; o usuário pode deixar em branco. |
| Efeito em MPD002 | Linha UMPD002.pas:3518: if (ParmFatur.Values['QT_DIASVALIDADEPEDORC'] <> '') then ... — o bloco é pulado. PEDIDO.QT_DIASVALIDADE permanece vazio; DS_VALIDADE fica em branco. |
| Efeito em MPD020 | Linha UMPD020.pas:1008: atribuição direta sem checagem — tabPEDIDOQT_DIASVALIDADE.AsString := ''. O campo fica vazio no pedido de compra recém-criado. |
| Efeito em MOF005 | Em UdmMOF005.pas:238-239, só atualiza iQT_VALIDADEORC se Resultado[5] <> ''; e em UMOF005.pas:967, só calcula a data de validade se iQT_VALIDADEORC <> ''. ORCAMENTO.DT_VALIDADEORC fica NULL. |
Resultado esperado: nenhuma sugestão de validade é feita; o pedido/orçamento é criado sem prazo de validade preenchido. O operador precisa informar manualmente no campo QT_DIASVALIDADE se desejar.
Valor = 0
| Aspecto | Comportamento |
|---|---|
| Validação em MFA001 | Aceito (não há OnValidate). |
| Efeito em MPD002 | ParmFatur.Values['QT_DIASVALIDADEPEDORC'] = '0', que é <> '', então o bloco executa: PEDIDO.QT_DIASVALIDADE := '0'. O OnValidate do pedido (UdmMPD002.pas:4214) também aceita e gera DS_VALIDADE = "Este Pedido / Orçamento é Válido por 0 Dias.". |
| Efeito em MPD020 | PEDIDO.QT_DIASVALIDADE := 0. DS_VALIDADE = "Este Pedido / Orçamento é Válido por 0 Dias." |
| Efeito em MOF005 | StrToInt('0') = 0 → DT_VALIDADEORC := DT_ORCAMENTO + 0, ou seja, a validade é o próprio dia da emissão. |
Resultado esperado: pedidos/orçamentos nascem com validade igual a "zero dias" — na prática, vencem no mesmo dia. Normalmente este valor é usado apenas quando a empresa quer forçar visibilidade do campo de validade, mas não há um caso real de negócio que o justifique.
Valor > 0 (ex.: 30)
Simulação passo a passo
Pré-requisitos do cenário:
PARMFATUR.QT_DIASVALIDADEPEDORC = 30(definido em MFA001).- Hoje =
2026-04-21. - Operador cria um novo pedido/orçamento.
-
Em MFA001 → aba Pedidos / Ordem de Serviço → informe
Validade Ped./Orc. = 30. Salve (F6). -
Pedido de Venda (MPD002):
- Operador clica em Novo →
tabPEDIDO.Appendexecuta. - Trecho
UMPD002.pas:3518-3523:if (ParmFatur.Values['QT_DIASVALIDADEPEDORC'] <> '') thenbegindmMPD002.tabPEDIDO.Edit;if (trim(dmMPD002.tabPEDIDOQT_DIASVALIDADE.AsString) = '') thendmMPD002.tabPEDIDOQT_DIASVALIDADE.AsString := ParmFatur.Values['QT_DIASVALIDADEPEDORC'];end; PEDIDO.QT_DIASVALIDADE := 30.- O
OnValidate(tabPEDIDOQT_DIASVALIDADEValidateemUdmMPD002.pas:4212-4219) dispara e grava:DS_VALIDADE = "Este Pedido / Orçamento é Válido por 30 Dias.". - Se o operador informar outro valor (ex.: 15), o
DS_VALIDADEé recalculado para "...15 Dias.". - Observação: o
ifinterno só copia o parâmetro se o pedido ainda estiver vazio — assim, duplicações de pedido ou navegações que já trouxeram um valor preservam o que estava.
- Operador clica em Novo →
-
Pedido de Compra (MPD020):
- Operador clica em Novo →
tabPEDIDO.Appendexecuta emUMPD020.pas:1007. - Trecho
UMPD020.pas:1008:dmMPD020.tabPEDIDOQT_DIASVALIDADE.AsString := ParmFatur.Values['QT_DIASVALIDADEPEDORC']; - Atribuição incondicional —
PEDIDO.QT_DIASVALIDADE := 30sempre, mesmo que haja valor anterior (diferente de MPD002). DS_VALIDADE = "Este Pedido / Orçamento é Válido por 30 Dias.".
- Operador clica em Novo →
-
Orçamento de Oficina (MOF005):
- No carregamento de parâmetros (
UdmMOF005.pas:222-239) a empresa obtémiQT_VALIDADEORC := '30'. - Ao clicar em Novo orçamento (
UMOF005.pas:963-968):if(dmMOF005.iQT_VALIDADEORC <> '') thendmMOF005.tabORCAMENTODT_VALIDADEORC.AsDateTime :=dmMOF005.tabORCAMENTODT_ORCAMENTO.AsDateTime + StrToInt(dmMOF005.iQT_VALIDADEORC); - Com
DT_ORCAMENTO = 2026-04-21:DT_VALIDADEORC := 2026-04-21 + 30 dias = 2026-05-21.
- No carregamento de parâmetros (
Resultado esperado: novos pedidos e orçamentos nascem com validade padrão de N dias (contados a partir da data de emissão), reduzindo digitação e padronizando o prazo comercial da empresa. O usuário sempre pode editar o valor no documento.
:::info Diferença entre MPD002 e MPD020
- MPD002 (venda) respeita um valor prévio em
QT_DIASVALIDADE— só preenche se estiver vazio. - MPD020 (compra) sobrescreve qualquer valor prévio com o parâmetro. :::
:::warning Sem validação de valor negativo em MFA001
Diferente de NR_ACESSOLIMITE, NR_DIASATRASO e outros numéricos, este campo não tem OnValidate em UdmMFA001.pas. Valores negativos são aceitos e, em MOF005, produziriam DT_VALIDADEORC < DT_ORCAMENTO (validade já vencida). Trate operacionalmente com cuidado.
:::
Interações com outros parâmetros
Este parâmetro não possui dependência cruzada com outros parâmetros de PARMFATUR. Ele é lido de forma isolada no momento da inclusão do pedido/orçamento.
O campo PEDIDO.QT_DIASVALIDADE (que recebe o valor) é usado apenas como informação descritiva (DS_VALIDADE) — o ERP não automatiza cancelamentos nem bloqueios de pedidos vencidos com base nele.
Referências no Código Fonte
Delphi — MFA001 (cadastro do parâmetro)
| Arquivo | Linhas | Papel |
|---|---|---|
source/MFA001/UMFA001.dfm | 7999-8011 | TLabel Label42 com Caption = 'Validade Ped./Orc.' |
source/MFA001/UMFA001.dfm | 8773-8789 | TDBEdit edtQT_DIASVALIDADEPEDORC com DataField = 'QT_DIASVALIDADEPEDORC', DataSource = dmMFA001.dsPARMFATUR, dentro da aba Pedidos / Ordem de Serviço |
source/MFA001/UMFA001.pas | 318 | Declaração edtQT_DIASVALIDADEPEDORC: TDBEdit |
source/MFA001/UdmMFA001.pas | 168 | Declaração tabPARMFATURQT_DIASVALIDADEPEDORC: TIntegerField |
source/MFA001/UdmMFA001.pas | 434-513 | tabPARMFATURAfterInsert não atribui default (campo nasce NULL) |
source/MFA001/UdmMFA001.dfm | 176, 1308-1311, 2393, 2557, 2778, 3056 | SELECT/INSERT/UPDATE de PARMFATUR incluindo o campo e definição do TIntegerField |
Delphi — Consumidores
| Arquivo | Linhas | Papel |
|---|---|---|
source/MPD002/UdmMPD002.pas | 5754 | Inclui P.QT_DIASVALIDADEPEDORC no SELECT consolidado de PARMFATUR para o ParmFatur.Values |
source/MPD002/UMPD002.pas | 3518-3523 | Na inclusão de pedido, copia o parâmetro para PEDIDO.QT_DIASVALIDADE somente se estiver vazio |
source/MPD002/UdmMPD002.pas | 4212-4219 | tabPEDIDOQT_DIASVALIDADEValidate — atualiza DS_VALIDADE = "Este Pedido / Orçamento é Válido por N Dias." |
source/MPD020/UMPD020.pas | 1008 | Na inclusão de pedido de compra, atribui PEDIDO.QT_DIASVALIDADE := ParmFatur.Values['QT_DIASVALIDADEPEDORC'] (incondicional) |
source/MPD020/UdmMPD020.pas | 2414-2421 | OnValidate análogo ao MPD002, atualiza DS_VALIDADE |
source/MOF005/UdmMOF005.pas | 225, 238-239 | SELECT em PARMFATUR → popula iQT_VALIDADEORC quando não vazio |
source/MOF005/UMOF005.pas | 967-968 | Calcula ORCAMENTO.DT_VALIDADEORC := DT_ORCAMENTO + StrToInt(iQT_VALIDADEORC) |
DDL
docs/schema/tables/PARMFATUR.sql:127—QT_DIASVALIDADEPEDORC DOM_INTEGER,(semNOT NULL, sem default → permiteNULL).docs/schema/tables/PEDIDO.sql:77—QT_DIASVALIDADE DOM_INTEGER,(campo destino nos pedidos).
SQL — Procedures
Nenhuma stored procedure em Scripts/ referencia QT_DIASVALIDADEPEDORC (grep em Scripts/ retornou zero matches). A regra inteira é executada no lado cliente, nos módulos consumidores Delphi.