dDataBase vs Date() - quem nasceu primeiro
Voce ja usou as duas e provavelmente nao parou pra pensar na diferenca conceitual. dDataBase e uma das ideias mais brilhantes (e perigosas) do Protheus.
Voce escreve dHoje := Date() ou dHoje := dDataBase? Resposta superficial: e "mais ou menos" a mesma coisa. Resposta certa: sao conceitos COMPLETAMENTE diferentes, e usar errado quebra rotina contabil/fiscal.
Date(): a data REAL
Date() retorna a data do relogio do servidor onde o AppServer roda. E imutavel — voce nao pode mudar, e sempre o calendario real.
Equivale a SELECT CURRENT_DATE em SQL, new Date() em JavaScript, datetime.today() em Python.
dDataBase: a data OPERACIONAL
dDataBase e uma variavel publica que o usuario configura ao entrar no Protheus (tela de login mostra "Data Base: 12/05/2026"). Pode ser qualquer data — passada, futura, hoje.
O sistema todo usa dDataBase em vez de Date() pra:
- Data de emissao de NF
- Data de movimento de estoque
- Data de lancamento contabil
- Calculo de saldos
Por que isso existe?
Imagine: e dia 12/05 mas a empresa esta fechando o mes de abril. Precisa lancar uma NF de abril que esqueceu. Se o sistema usasse Date() sempre, a NF ficaria como 12/05 e iria pro mes errado.
Solucao: usuario muda dDataBase pra 30/04/2026 antes de lancar, faz a operacao, depois volta pra hoje. NF fica com data correta no balanco.
O perigo
Se dev usa Date() em rotina financeira em vez de dDataBase, fura todo o sistema:
// ERRADO em rotina financeira:
RecLock("SE1", .T.)
SE1->E1_EMISSAO := Date() // sempre data real
SE1->(MsUnlock())
// CERTO:
RecLock("SE1", .T.)
SE1->E1_EMISSAO := dDataBase // respeita o que o usuario configurou
SE1->(MsUnlock())Regra simples
- Date(): log, auditoria, timestamps tecnicos, hora de execucao
- dDataBase: tudo relacionado a contabilidade, fiscal, financeiro, movimento de estoque
Quem nasceu primeiro?
Date() e nativo do Clipper/xBase desde os anos 80. Era a unica funcao disponivel originalmente.
dDataBase foi adicionada pelo Siga Advanced (TOTVS/Microsiga) nos anos 90, especificamente pra resolver o problema fiscal brasileiro de "data operacional". E uma das contribuicoes conceituais mais ricas do Protheus pra ERPs.
Outros ERPs?
SAP tem SY-DATUM (data sistema) e BLDAT (data documento) — conceitualmente igual. Oracle EBS chama de ACCOUNTING_DATE. A ideia de "data operacional separada da data fisica" e padrao em ERPs do mundo todo.