D365 X++: 顾客月次締め請求書 更新错误解决方法

在 D365 X++ 中,如果你遇到以下错误提示:

顾客の月次締め請求書 のレコードを編集できません (CustConsInvoice_JP)。 更新するデータが選択されていないため、操作を完了できません。TTSBEGIN/TTSCOMMIT および FORUPDATE 句を確認してください。

这通常意味着你试图更新顾客的月次締め請求書记录(CustConsInvoice_JP),但没有选择要更新的数据。以下是一些解决方法:

  1. 确保在ttsbeginttscommit之间包含了要更新的数据。 确保代码中正确地获取了要更新的consInvoice对象,并且在ttsbeginttscommit之间进行了更新操作。

  2. 检查是否使用了forupdate关键字。 如果你的代码中包含select语句,确保使用了forupdate关键字来锁定数据,以便在更新操作期间避免数据冲突。

  3. 检查consInvoice对象是否包含了需要更新的数据。 可以通过打印consInvoice对象的值来确认。确保对象中包含了所有需要更新的字段和值。

  4. 确保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;
        }
    }
}

注意:

  • 确保在ttsbeginttscommit之间包含了要更新的数据。
  • 检查是否使用了forupdate关键字。
  • 检查consInvoice对象是否包含了需要更新的数据。
  • 确保consInvoice对象的RecId属性是否有值。

如果你仍然无法解决问题,可以尝试使用调试工具来进一步分析和排查错误。

D365 X++: 顾客月次締め請求書 更新错误解决方法

原文地址: https://www.cveoy.top/t/topic/qdse 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录