Giải thích kỹ thuật về những gì bạn thấy là phần này của mã tạo ra SQL không hợp lệ, nhưng có vẻ như tôi có vấn đề với thiết lập của bạn.
Nếu bạn chạy date2str vào một ngày trống, nó sẽ trả về một chuỗi rỗng. Hãy thử điều này trong một công việc và bạn sẽ thấy một chuỗi rỗng trong infolog.
static void TestEmptyDate(Args _args)
{
AccountingDate _date;
;
info(date2str(_date, 321, 2, 3, 2, 3, 4, DateFlags::None));
}
Đó sau đó được nối trong phương pháp updateDistributionsForEvent
để tạo ra một câu lệnh 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());
đâu T1.ACCOUNTINGDATE={ d\'%2\'}
là phần có liên quan mà tạo T1.ACCOUNTINGDATE={ d''}
trong chuỗi SQL.
Nếu bạn cố gắng chạy
select {d''}
trong SQL bạn sẽ nhận được
Msg 241, Level 16, State 3, Line 1 Conversion failed when converting date and/or time from character string.
vì một chuỗi rỗng không thể được phân tích để hẹn hò.