7

Trong AX tôi có một số thực thể. Khi tôi cố gắng đăng các bảng chấm công chưa được đăng, nó hoạt động tốt cho tất cả các thực thể ngoại trừ trường hợp tôi gặp lỗi SQL: "Chuyển đổi không thành công khi chuyển đổi ngày và/hoặc thời gian từ chuỗi ký tự"Dynamics AX 2012: Chuyển đổi không thành công khi chuyển đổi ngày và/hoặc thời gian từ chuỗi ký tự

Ngăn xếp cuộc gọi dưới đây:

enter image description here

Trong phương pháp được đánh dấu, tôi thấy không thể tìm thấy bất kỳ SourceDocumentHeader nào trong bảng Phân phối tài khoản, do đó, AccountingDate trống.

Có ai gặp vấn đề tương tự và biết cách giải quyết không? Thật kỳ lạ đối với tôi vì tất cả các thực thể khác đều hoạt động OK.

Cảm ơn.

Trả lời

6

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ò.

Các vấn đề liên quan