【问题标题】:Programmatically create PAYMENT_VENDOR record in NetSuite?以编程方式在 NetSuite 中创建 PAYMENT_VENDOR 记录?
【发布时间】:2017-03-31 23:43:57
【问题描述】:

所以,这就是我正在做的事情(现在硬编码大多数值,只是想学习 NS):

    var vendorBillPayment = record.create({
            type: record.Type.VENDOR_PAYMENT,
            isDynamic: false,
            defaultValues: {
                entity: 45
            }
        })

        vendorBillPayment.setValue({
            fieldId: 'entityname',
            value: "Superior ISP"
        })

        vendorBillPayment.setValue({
            fieldId: 'account',
            value: 129
        })

        vendorBillPayment.setValue({
            fieldId: 'currency',
            value: 1
        })

        vendorBillPayment.setValue({
            fieldId: 'customform',
            value: 45
        })

        vendorBillPayment.setValue({
            fieldId: 'exchangerate',
            value: "1.00"
        })

        var recordId = vendorBillPayment.save({
             enableSourcing: false,
             ignoreMandatoryFields: true
        })

现在,问题从下面的sn-p开始,VendorPayment记录有一个子列表'apply',是支付需要申请的账单列表。

        vendorBillPayment.setSublistValue({
            sublistId: 'apply',
            fieldId: 'internalid',
            line: 1,
            value: "303"
        });

返回的错误是:

    error message:{"type":"error.SuiteScriptError","name":"UNEXPECTED_ERROR","message":null,"stack":["anonymous(N/recordService)","<anonymous>(/SuiteScripts/..)"],"cause":{"type":"internal error","code":"UNEXPECTED_ERROR","details":null,"userEvent":null,"stackTrace":["anonymous(N/recordService)","<anonymous>(/SuiteScripts/..)"],"notifyOff":false},"id":"","notifyOff":false}

也就是说,不是很有用的消息。我一直在查看他们的文档,但没有成功。

编辑:原来应用子列表是列表类型。这意味着,不能以编程方式从该子列表中添加/删除行。只是为了编辑现有的行。

除了创建 VENDOR_PAYMENT 记录之外,还有其他方式以编程方式支付供应商账单吗?

【问题讨论】:

  • SuiteScript 2.0 中子列表的第一个索引是0 而不是1;尝试将line 设置为0。我认为您还需要检查子列表行上的apply 框,因此您还需要在该行上将apply 设置为true
  • @erictgrubaugh 嗨,很抱歉延迟回复,感谢您的回复。现在,关于这个问题 - 不可能使用网络套件上的 VENDOR_PAYMENT 记录来做到这一点。原因是“应用”子列表属于“列表”类型,这意味着您不能动态添加/删除行。您只能编辑现有的行。
  • 有趣。虽然我没有专门针对 Vendor Payments 尝试过此操作,但我知道 Customer Payments 不存在此限制。
  • @erictgrubaugh 我想知道,既然您是 NetSuite 专家,还有其他方法可以以编程方式支付供应商账单吗?我首先尝试直接在账单记录上设置状态,结果很快发现状态是一个只读字段。然后,我尝试了 VENDOR_PAYMENT 方法。我脑海中浮现的另一个想法是使用 NS Web 服务,但这会给我的系统引入我宁愿避免的依赖关系(apache 轴等)。您认为还有其他方式可以支付供应商账单吗?
  • 如果供应商付款上的 apply 子列表不可编写脚本,我不知道还有其他方法可以做到这一点。如果它在 SuiteScript 中不可用,我也不相信它会在 Web 服务中可用。

标签: netsuite suitescript


【解决方案1】:

根据您提供的代码很难确定,但我发现了两个潜在问题。首先,根据 NetSuite 的文档,Apply 子列表被列为可编写脚本。您可以在此处的供应商付款下查看记录浏览器中列出的子列表:https://system.na1.netsuite.com/help/helpcenter/en_US/srbrowser/Browser2016_1/script/record/itemfulfillment.html 您还可以在此处的 Scriptable Sublists 列表中看到“应用”子列表:https://system.na2.netsuite.com/app/help/helpcenter.nl?fid=chapter_N3206326.html

现在讨论代码问题。正如我之前所说,这并不完全清楚,但根据您在上面提供的内容,您似乎正在尝试在记录保存后添加/编辑“应用”子列表。您需要在保存之前添加子列表值,或者在设置子列表值之前重新加载记录。我可以看到的第二个问题是您正在尝试设置您无法执行的子列表记录的“内部 ID”。我可能是错的,但我不知道 NetSuite、自定义或其他允许设置“internalid”的记录。我可以通过您尝试编写的更大的脚本示例提供更明确的方向,但到目前为止,这就是您的示例中所能看到的全部。

【讨论】:

    【解决方案2】:

    如果您在同一个脚本中执行所有这些操作,那么您必须在申请前重新加载供应商付款:

    var recordId = vendorBillPayment.save({
        enableSourcing: false,
        ignoreMandatoryFields: true
    });
    vendorBillPayment = record.load({
        type:record.Type.VENDOR_PAYMENT,
        id:recordId
    });
    

    另请注意,如果您收到针对特定账单的付款,您可以一步完成:

    var vendorBillPayment = record.transform({
        fromType: 'vendorbill',
        fromId: 303,
        toType:'vendorpayment'
    });
    // adjust the apply lines as necessary
    

    【讨论】:

      【解决方案3】:

      创建Vendor Payment时,子列表'apply'依赖于所选Vendor/Supplier(entity)的Open Vendor Bills,所以必须先设置Vendor/Supplier(entity)(即你在做什么)。话虽如此,您不能添加/支付在供应商付款上不具有“未结”状态的供应商账单。如果您在“申请”子列表中没有看到供应商法案,则意味着供应商法案尚未批准或金额为零。您要确保您要支付的供应商账单已获批准或状态为“未结清”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-27
        • 2013-04-28
        • 1970-01-01
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        • 2014-07-20
        相关资源
        最近更新 更多