La spiegazione tecnica di ciò che stai vedendo è che questa parte del codice genera SQL non valido, ma mi sembra che tu abbia un problema con la tua configurazione.
Se si esegue date2str su una data vuota, viene restituita una stringa vuota. Si prega di provare questo in un lavoro e vedrete una stringa vuota nel infolog.
static void TestEmptyDate(Args _args)
{
AccountingDate _date;
;
info(date2str(_date, 321, 2, 3, 2, 3, 4, DateFlags::None));
}
Che poi viene concatenato nel metodo updateDistributionsForEvent
per generare un'istruzione 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());
Dove T1.ACCOUNTINGDATE={ d\'%2\'}
è la parte rilevante che genera T1.ACCOUNTINGDATE={ d''}
nella stringa SQL.
Se si prova a correre
select {d''}
in SQL otterrete
Msg 241, Level 16, State 3, Line 1 Conversion failed when converting date and/or time from character string.
perché una stringa vuota non può essere analizzato a una data.
fonte
2015-09-30 11:48:26