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:

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

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.

Veja também