D365 X++: 顾客月次締め請求書 更新错误解决方法
D365 X++: 顾客月次締め請求書 更新错误解决方法
在 D365 X++ 中,如果你遇到以下错误提示:
顾客の月次締め請求書 のレコードを編集できません (CustConsInvoice_JP)。 更新するデータが選択されていないため、操作を完了できません。TTSBEGIN/TTSCOMMIT および FORUPDATE 句を確認してください。
这通常意味着你试图更新顾客的月次締め請求書记录(CustConsInvoice_JP),但没有选择要更新的数据。以下是一些解决方法:
-
确保在
ttsbegin和ttscommit之间包含了要更新的数据。 确保代码中正确地获取了要更新的consInvoice对象,并且在ttsbegin和ttscommit之间进行了更新操作。 -
检查是否使用了
forupdate关键字。 如果你的代码中包含select语句,确保使用了forupdate关键字来锁定数据,以便在更新操作期间避免数据冲突。 -
检查
consInvoice对象是否包含了需要更新的数据。 可以通过打印consInvoice对象的值来确认。确保对象中包含了所有需要更新的字段和值。 -
确保
consInvoice对象的RecId属性是否有值。 如果RecId属性为空,可能是因为没有正确加载或创建consInvoice对象。确保在使用consInvoice对象之前,已经正确地加载或创建了它。
如果以上方法都无法解决问题,你可以尝试使用调试工具来进一步分析和排查错误。例如,你可以使用X++调试器来查看consInvoice对象的值和执行的代码,并确定问题所在。
代码示例:
public void confirmByClosingSpecial()
{
boolean isRetry = false;
try
{
ttsbegin;
if (isRetry)
{
this.reLoadConsInvoice(true);
}
if (consInvoice.Status == CustVendConsInvoiceStatus_JP::Unconfirmed)
{
// 対象請求書の支払済み・取消確認
// Ensures that no related invoice journal has been paid.
if (this.mnkHasNoPaymTrans(consInvoice))
{
consInvoice.Status = CustVendConsInvoiceStatus_JP::Confirmed;
consInvoice.CustVendConsInvoice_JP::setInvoiceAmount();
// Recalculate consolidation date and due date.
consInvoice.PaymTerm = consInvoice.CustVendConsInvoice_JP::getCustVendInvoiceJourWithSmallestId().Payment;
consInvoice.update();
CustConsInvoiceType_JP::MnkUpdateConsRefRecId_Confirm(consInvoice);
}
}
else
{
// Only unconfirmed consolidated invoice can be confirmed.
throw error('@GLS63323');
}
ttscommit;
}
catch (Exception::Deadlock)
{
retry;
}
catch (Exception::UpdateConflict)
{
if (appl.ttsLevel() == 0)
{
if (xSession::currentRetryCount() >= #RetryNum)
{
throw Exception::UpdateConflictNotRecovered;
}
else
{
isRetry = true;
retry;
}
}
else
{
throw Exception::UpdateConflict;
}
}
}
注意:
- 确保在
ttsbegin和ttscommit之间包含了要更新的数据。 - 检查是否使用了
forupdate关键字。 - 检查
consInvoice对象是否包含了需要更新的数据。 - 确保
consInvoice对象的RecId属性是否有值。
如果你仍然无法解决问题,可以尝试使用调试工具来进一步分析和排查错误。
原文地址: https://www.cveoy.top/t/topic/qdse 著作权归作者所有。请勿转载和采集!