You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用X++实现标准保存按钮 自动保存日记账释放编号规则凭证号

以下是适用于Dynamics 365 Finance / Dynamics AX 平台的两种可落地代码方案:

方案1:复用标准日记账保存逻辑(推荐)

该方案直接调用系统原生的日记账持久化能力,会自动触发编号序列的占用移除逻辑,同时不会跳过标准字段校验、关联子表校验等规则,兼容性最高。

public void runAutoSaveLogic(LedgerJournalId _journalNum)
{
    LedgerJournalTable      ledgerJournalTable;
    LedgerJournalCheckPost  journalCheckPost;
    ;

    ttsbegin;
    // 获取待操作的日记账记录
    ledgerJournalTable = LedgerJournalTable::find(_journalNum, true);
    
    // 先执行校验逻辑,校验通过再更新
    if (ledgerJournalTable.validateWrite())
    {
        ledgerJournalTable.update();
    }

    // 触发标准保存逻辑,自动完成编号序列的状态更新
    journalCheckPost = LedgerJournalCheckPost::newLedgerJournalTable(ledgerJournalTable, NoYes::Yes);
    journalCheckPost.runSave();
    ttscommit;
}

注:如果不需要触发过账相关逻辑,仅调用runSave()即可,无需调用run()方法执行过账操作。

方案2:自定义绑定表单场景简化方案

如果你的自定义按钮是挂载在日记账标准表单/自定义绑定表单上,可直接调用数据源的原生保存方法,代码更精简:

[FormControlEventHandler(formControlStr(LedgerJournalTable, YourCustomButton), FormControlEventType::Clicked)]
public static void YourCustomButton_OnClicked(FormControl sender, FormControlEventArgs e)
{
    FormDataSource  ledgerJournalDS = sender.formRun().dataSource(tableStr(LedgerJournalTable));
    
    // 执行数据源校验+写入,自动同步到数据库,触发编号序列规则
    if (ledgerJournalDS.validateWrite())
    {
        ledgerJournalDS.write();
        ledgerJournalDS.refresh();
    }

    // 此处添加你的其他自定义业务逻辑
}

通用注意事项

  • 两种方案执行前都需要保证日记账的所有必填字段已经填充完成,否则validateWrite()会返回false阻止保存,符合标准业务校验规则
  • 若你的自定义逻辑中提前预留了凭证号,保存时系统会自动完成编号的确认,不会出现编号重复占用、断号的问题

内容的提问来源于stack exchange,提问作者Raynon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 06:45:06