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

Netsuite中如何实现首次打印输出原件、后续打印输出副本?

NetSuite 设置首次打印为原件、后续打印为副本的实现方案

在NetSuite中实现这个需求,核心是通过跟踪打印状态/次数,配合打印模板的动态判断来区分原件和副本,以下是两种可行方案:

方案一:自定义打印次数字段+模板判断+用户事件脚本(支持多次打印计数)

1. 创建自定义字段跟踪打印次数

  • 路径:自定义 > 列表/记录/字段 > 事务处理字段 > 新建
  • 字段配置:
    • 类型:数字
    • 名称:打印次数
    • ID:custbody_print_count(建议用这个标准命名)
    • 应用对象:选择需要设置的事务类型(如销售订单、发票、采购订单等)
    • 存储值:勾选
    • 默认值:0

2. 修改打印模板动态显示原件/副本

  • 路径:自定义 > 表单 > 高级PDF/HTML模板,找到对应事务的模板(或新建模板)
  • 在模板的页眉/显眼位置插入Freemarker判断代码:
<#-- 动态显示原件/副本 -->
<#if record.custbody_print_count == 0>
**原件**
<#else>
**副本(第${record.custbody_print_count}次打印)**
</#if>
  • 保存模板后,将其设置为对应事务类型的默认打印模板(路径:自定义 > 事务处理表单 > 编辑对应表单 > 打印模板)

3. 编写用户事件脚本更新打印次数

  • 路径:自定义 > 脚本 > 脚本 > 新建,选择用户事件脚本
  • 用SuiteScript 2.x编写核心逻辑,在打印触发时更新计数:
/**
 * @NApiVersion 2.x
 * @NScriptType UserEventScript
 */
define(['N/record'], function(record) {
    function beforeLoad(context) {
        // 仅在打印事件触发时执行
        if (context.type === context.UserEventType.PRINT) {
            var currRec = context.newRecord;
            var currCount = currRec.getValue({fieldId: 'custbody_print_count'});
            currRec.setValue({fieldId: 'custbody_print_count', value: currCount + 1});
        }
    }

    return {
        beforeLoad: beforeLoad
    };
});
  • 部署脚本:选择目标事务类型,设置触发事件为打印,确保脚本生效

方案二:利用原生打印状态字段(快速实现,仅区分首次/非首次)

部分事务类型(如销售订单)自带isprint字段(标记是否已打印),无需自定义字段和脚本,直接在模板中判断:

  • 在打印模板中插入:
<#if record.isprint == 'F'>
**原件**
<#else>
**副本**
</#if>
  • 局限性:只能判断是否打印过,无法统计打印次数,适合只需要区分首次和后续打印的场景

关键注意事项

  • 确保操作账号拥有自定义字段、模板编辑和脚本部署的权限
  • 测试时需验证:首次打印前确认打印次数为0,打印后检查字段值是否自动+1
  • 高级PDF模板的Freemarker语法要准确,若模板报错,可先简化判断逻辑排查问题

内容的提问来源于stack exchange,提问作者L.A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:45:39