Technicznym wyjaśnieniem tego, co widzisz, jest to, że ta część kodu generuje nieprawidłowy kod SQL, ale wygląda na to, że masz problem z konfiguracją.
Jeśli uruchomisz date2str na pustej dacie, zwróci pusty ciąg znaków. Spróbuj tego w pracy, a zobaczysz pusty napis w informatorze.
static void TestEmptyDate(Args _args)
{
AccountingDate _date;
;
info(date2str(_date, 321, 2, 3, 2, 3, 4, DateFlags::None));
}
To wtedy dostaje łączone w metodzie updateDistributionsForEvent
wygenerować SQL:
sqlStatementText = strFmt('UPDATE T1 SET ACCOUNTINGEVENT=%1,RECVERSION=%2 FROM ACCOUNTINGDISTRIBUTION T1 WITH (INDEX(I_7452SOURCEDOCUMENTHEADERIDX)) CROSS JOIN SOURCEDOCUMENTLINE T2 ', _accountingEventRecId, xGlobal::randomPositiveInt32());
sqlStatementText += strFmt('WHERE (((T1.PARTITION=%1) AND (T1.ACCOUNTINGEVENT=0) AND (T1.ACCOUNTINGDATE={ d\'%2\'})) AND (T1.SOURCEDOCUMENTHEADER=%3)) AND ', getcurrentpartitionrecid(), sqlDate, _sourceDocumentRecId);
sqlStatementText += strFmt('((T2.RECID=T1.SOURCEDOCUMENTLINE) AND (T2.ACCOUNTINGSTATUS=%1 OR T2.ACCOUNTINGSTATUS=%2)) AND (T2.PARTITION=%3)', enum2int(SourceDocumentLineAccountingStatus::Completed), enum2int(SourceDocumentLineAccountingStatus::Canceled), getcurrentpartitionrecid());
Gdzie T1.ACCOUNTINGDATE={ d\'%2\'}
jest odpowiednia część, która generuje T1.ACCOUNTINGDATE={ d''}
w ciągu SQL.
Jeśli spróbujesz działa
select {d''}
w SQL otrzymasz
Msg 241, Level 16, State 3, Line 1 Conversion failed when converting date and/or time from character string.
bo pusty łańcuch nie może być analizowany na bieżąco.