Record.removeCurrentSublistSubrecord()是Dynamic模式下修改inventorydetail的良药吗

故障 更改Item Receipt的时候需要涉及quantity更新的情况,此时Inventory Detail和Quantity两个字段互相羁绊,先改哪个都会导致另一个字段验证错误。其他土办法比如itemreceive=false,或者置空location字段都在UI上可以实现效果,但是在脚本中都会造成inventory detail quantity错误。 问题 以下哪一个办法是良药: 结论 Record.removeCurrentSublistSubrecord()不会引发inventory detail quantity must be x的错误,但是会导致unexpected error。 这种情况是由于isDynamic: true造成的,使用dynamic mode则会永无天日,使用standard mode你会平安落地。

用N/cache保存token用于发送http请求的MapReduce/Scheduled脚本

前情提要 某些NetSuite向外部系统推送数据的场景可能需要用到MapReduce的场景,此种情况如果涉及token是比较多变的。如果放在getInputData阶段取得token然后用参数带给map阶段使用,则可能随时遇到token过时的情况,可能还需要重新获得token;如果是每一步都重新获得token则可能消耗目标系统太多资源。中国很多集成实际上是采用了IP黑白名单制度,然而这种方式并不适合NetSuite这样的云平台。因此使用OAuth2.0这样token机制是必要的而用N/cache更使这样的情况变得便捷。 代码设计 使用N/cache构建如下的代码,可以实现向目标主机获取cookie然后使用cookie内容发送请求的目的。 其中getCookieToCache的方法如下。注意Cache.get()的loader返回值如果是json则系统会帮你stringify。 之后使用时,直接调取cacheObj.get()就好,如果cache因为过期、系统自动抛弃等原因不存在,系统会自动按照loader去获取。 延伸阅读

NetSuite错误: USER_ERROR: The transaction date you specified is not within the date range of your accounting period.

错误描述 保存单据时发生错误,信息如下: 对不起,您指定的事务处理日期不在会计期间的日期范围内。 The transaction date you specified is not within the date range of your accounting period. 原因 在 NetSuite 中,有一个名为“允许交易日期超出过账期”的偏好设置,它决定系统如何处理日期和期间不一致的交易。如果该偏好设置为“禁止”,并且交易日期超出当前过账期(例如:日期 = 2022年5月31日,期间 = 2022年6月),则会发生此错误。NetSuite 不允许您保存这样的交易。 解决方案 针对此同步错误有两种潜在解决方案: 编辑 NetSuite 中的偏好设置,允许交易日期超出过账期: 在 BILL 中打开出现同步错误的交易

无法创建客户存款,提示您为以下字段输入一个无效的字段值 123:customer

症状 假设客户的内部id是123。在脚本中无法创建客户存款,提示您为以下字段输入一个无效的字段值 123:customer。手动在页面用suitescript用customer id赋值123可以显示但是无法保存。手动选择或者搜索则无法显示该客户 解决 如果UI和script的系统表现是一致的,则更多去考虑这个问题出自某个系统设置。 进而在consolidated payment中找到系统启动了consolidated payment,在Setup > Accounting > Preferences > Accounting Preferences中找到Apply Payments Through Top-Level Customer Only这个选项被选中。如果这个选项被选中,则客户存款只能从最高级的母客户进行创建。

Scheduled和Map/Reduce类型脚本重复创建记录或者逻辑重复运行

症状 事务处理类型或者自定义类型的单据在Scheduled或者Map/Reduce类型的脚本背景下被重复创建,重复创建的时间可能非常接近,在同1分钟或几分钟以内。 分析过程 查看是否Scheduled和MapReduce类型脚本存在ondemand类型的唤起,这种情况可能是有该脚本自身以ondemand类型唤起,也可能是来自suitelet或者userevent类型的脚本唤起。 ondemand的唤起在部署资源充足的情况下可能在很短时间通过task.submit()被唤起多次,每次唤起通过search获得相同的数据,用相同的逻辑处理,因此重复创建记录可能就发生在同一分钟。 解决办法 最有效的办法是限制ondemand运行,只留一个not scheduled的脚本部署,确保只有一个实例在运行。如果同时也有定时运行的实例,务必移动到上班时间之外,避免ondemand触发和定时触发同时取数。

NetSuite导入固定资产记录的大纲

首先导入资产记录数据,然后导入折旧历史数据。 对于 FAM 资产和 FAM 资产折旧历史导入,资产类型是必填字段。 当您将数据导入 OneWorld 账户时,子公司字段是 FAM 资产和 FAM 资产折旧历史导入的必填字段。 如果启用了多货币功能,则 FAM 资产导入需要货币 ID 字段。货币 ID 是子公司基本货币的内部 ID。要确定货币的内部 ID,请转到列表 > 会计 > 货币。 当这些字段在记账凭证上是强制性的时,FAM 资产导入需要位置、部门和类别。 如果上年度净账面价值不等于资产原始成本: 您不必遵循系统生成的折旧历史记录名称的格式。您可以在 CSV 文件的名称字段中使用任何值来识别导入的折旧历史记录的折旧期。避免在名称中使用“|”分隔符,以便记录不会在折旧搜索中被检索到。 为了暴露所有导入字段,请将 FAM 资产和 FAM 资产折旧历史的首选表单设置为标准表单。转到自定义 > 列表、记录和字段 > 记录类型,然后点击一个记录。点击表单选项卡,勾选标准表单。为了保持数据完整性,在导入完成后将首选表单重新设置为自定义表单。 升级到 OneWorld 账户时,系统不会自动填充资产记录的子公司字段中的值。您可以使用 CSV 导入更新资产记录。在导入 CSV 文件之前,您必须手动为子公司添加一个值。或者,您也可以联系 NetSuite 专业服务部门协助您进行数据迁移。

初始化NetSuite财务环境(2)

迁移步骤 如果用试算平衡表则直接带有借贷双方的金额,而科目余额表需要根据科目类型转换一下。 根据NetSuite进行适配,使数据具备以下的基本信息:时间,科目,子公司,借方,贷方,备注,部门,名称。 把文件转换成csv格式进行导入。这个过程可能会因为操作误差可能有几次错误,可以尝试导入少量数据,等csv模板妥当之后再大量导入,以节约时间 此处有一些特殊的处理。 对于AP/AR类单据,应考虑余额以日记账类型导入之后再以NetSuite Transaction形式导入具体单据,最后用日记账形式抵消导入的期初余额。小技巧之一是可以用一个临时的供应商/客户用于日记账导入,之后抵消完整之后把这个供应商/客户停用,即可获得完美AP/AR数据。 对于银行类的单据(在NS中体现为Journal Entry,Invoice,Check),在导入期初的Journal之后再导入具体的单据可能会造成余额不等,此时创建open bank transaction冲回即可。 对于采购和销售订单(SO、PO),直接导入未接数据即可,对已结清部分不要导入。 完成未完成交易加载后,您可以验证您的数据是否准确迁移。至少,我建议在启用日期完成试算平衡调账和分户账调账。首先,与您的财务报表审计员核实,以确认他们需要什么来对实施过程感到满意。查看本文以获取有关准备与NetSuite实施相关的审计文件的更多提示。 其他关键信息 对于您迁移到 NetSuite 的每个子公司,都需要完成此操作。记账凭证只能属于一个子公司。 历史财务报表的记账凭证应以子公司的报告货币为准。您应使用原始交易的功能货币加载未完成交易。使用原始交易的汇率以确保虚构的分户账实体净为零。 我建议将您的历史财务报表记账凭证分两批加载。第一批应通过锁定期间加载,例如您的最后审计财务报表日期。将工作分成两组将提供两个好处。首先,您减少了上线日期的工作量。其次,您有机会练习准备和导入数据。 如果您的上线日期是月底(例如 2 月 1 日),则在您关闭 1 月账簿并导入财务数据之间可能存在时间差。我建议将此时间差纳入您的计划中,特别是如果您决定干净地关闭您的旧系统。 结束 财务数据迁移步骤是您在新会计系统上线前的最后步骤之一。确保正确执行此步骤以开始交易至关重要。请务必为完成此过程留出充足的时间。 原文 https://optimaldataconsulting.com/resources/load-financials-and-open-transactions-from-quickbooks-to-netsuite

初始化NetSuite财务环境(1)

引言 实施NetSuite的公司必须加载历史财务报表和未完成交易,以开始使用他们的新会计系统。这一步骤被称为财务数据迁移过程。这一步将使您能够利用NetSuite的报告功能,并在实施启动日期之后立即开始处理交易。 本文将讨论历史财务报表和未完成交易,提供一个简单示例,并提供完成此过程所需的资源。本文适用于计划录入汇总数据的项目。如果您计划加载详细的历史交易,本文将不适用。 什么是历史财务报表? 历史财务报表是您传统会计系统中成千上万个个人交易的总结结果。当转移到新系统(如NetSuite)时,通常会带入一个摘要日记账分录以记录这些数据。完成此任务的几个好处包括: 准备这些日记账分录的方法有两种,会在今后的文中进行描述。 什么是未完成交易? 未完成交易是在各自业务流程中间的活动。例如,未付供应商账单是不完整的,因为它仍需要支付。未完成交易的例子包括: 这些项目可能需要加载以开始在会计系统中交易。如果您未正确输入这些交易,您将无法开始使用NetSuite。了解如何加载这些交易而不在历史财务报表上创建错误是至关重要的。 开始之前的要求 在准备历史财务报表之前,您应完成以下工作: 我建议您锁定老系统中的账期,以防止更改。如果您未这样做可能会导致有些总账影响发生在旧系统而不是新系统,导致对账很难对齐。 为什么必须在影响应收账款(AR)和应付账款(AP)的行上使用虚构的客户/供应商? 任何影响明细账科目(如AR或AP)的交易都会在详细子分类账户报告上创建一行。大多数NetSuite原生交易都要求在交易中提供客户或供应商名称。但是,日记账分录不需要。这个特性为用户创造了一个机会,使他们无意中在详细明细账科目报告上创建一个无交易主体的行,而无法将其移除。 我们的历史财务报表日记账分录创建了一个独特的情况。我们以摘要级别准备了这些日记账。但是,明细账科目交易是在详细级别的。因此,为了避免这种错误,我们在摘要级别信息上创建一个虚构的客户和供应商。然后,在加载未完成交易时,我们将冲回余额。正确完成后,虚构实体的余额在加载历史数据后为零。