7

AXではいくつかのエンティティがあります。私は未転記タイムシートを投稿しようとすると、それは私がSQLエラーを取得しています1の以外のすべてのエンティティのため正常に動作します:「文字列から日付/時刻を変換する際、変換に失敗しました」Dynamics AX 2012:文字列から日付および/または時刻を変換するときに変換に失敗しました

コールスタックは以下の通りです:

強調表示の方法では

enter image description here

私はそれがAccountDistributionテーブル内の任意のSourceDocumentHeaderを見つけることができないことがわかり、そのAccountingDateは空です。

誰もが同じ問題を経験し、それを解決する方法を知っていますか? 他のすべてのエンティティが正常に動作するので、私にとっては奇妙です。

ありがとうございました。

答えて

6

あなたが見ていることの技術的な説明は、コードのこの部分が無効なSQLを生成することですが、セットアップに問題があるかのように見えます。

空の日付でdate2strを実行すると、空の文字列が返されます。仕事でこれを試してみてください。そして、infologに空の文字列が表示されます。その後、SQL文を生成する方法updateDistributionsForEventに連結されることを

static void TestEmptyDate(Args _args) 
{ 
    AccountingDate _date; 
    ; 
    info(date2str(_date, 321, 2, 3, 2, 3, 4, DateFlags::None)); 
} 

T1.ACCOUNTINGDATE={ d\'%2\'}は、SQL文字列に T1.ACCOUNTINGDATE={ d''}を生成し、関連する部分である
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()); 

あなたは空の文字列を日付に解析できないので、あなたが

Msg 241, Level 16, State 3, Line 1 Conversion failed when converting date and/or time from character string.

を取得しますSQLで

select {d''} 

を実行してみてください。

関連する問題