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
相关产品推荐
相关产品推荐

