На днях обнаружил прекрасное.
Сразу скажу, что это 4ка или 2009. 2012ю заводить не стал - просьба имеющим проверить.
Суть в чем - следующий Job выдает разное кол-во записей в зависимости от того, forceliterals в запросе или forceplaceholders. Глюк связан с обработкой дат при их передаче как литералов в выражениях критериев запросов where. Там в качестве вот этой плюс единицы к TransDate (т.е. любому полю типа "дата") получается не один день, как можно ожидать, и как срабатывает при передаче через параметр, а что-то вроде {ts'1901-01-01 00:00:00'} т.е. один ГОД!
X++:
static void JobSQLDateParamTest(Args _args)
{
LedgerJournalTrans ljt;
;
select
//forceliterals
forceplaceholders
count(recid) from ljt
where
ljt.Due < ljt.TransDate + 1;
info(int642str(ljt.Recid));
}