【问题标题】:Suitescript Invoice for only Fulfilled Items on Sales OrdersSuitescript 仅针对销售订单上已履行的项目开具发票
【发布时间】:2019-07-09 19:40:13
【问题描述】:

我是suitescript 的新手,我想构建一个脚本,该脚本按定期计划运行,并且仅根据项目履行情况开具发票(即发票和项目履行之间存在一对一关系,但可能是一对多关系销售订单和发票/项目履行之间的关系)。

我能够成功运行将销售订单整体转换为发票的脚本 - 但是这包括销售订单上的所有项目,而不仅仅是已履行的项目(我们的业务中有很多情况,其中只有发生部分履行,然后必须关闭订单)。目前,根据我的研究,我无法找到成功创建此脚本的其他示例。我最初的想法是以某种方式将销售订单上的“qtyfulfilled”存储在一个包含项目的数组中,并以此创建发票。但在我看来,转换功能似乎是保留销售订单和发票之间链接的最佳方式。

 var invoice = record.transform({
      fromType: record.Type.SALES_ORDER,
      fromID: salesOrderId,
      toType: record.Type.INVOICE,
      isDynamic: true
 });

这将返回包含销售订单中所有项目的发票,而不仅仅是已履行的项目。

编辑:

我实现了建议的代码版本,我只是迭代销售订单的行并将发票上的每一行数量替换为“fulfilledquantity” - 但是我意识到当数量为零时,发票似乎仍在存储该线为零值。

发票脚本的下游,我通过 NS 集成将发票记录传递给我们的 EDI 提供商。通过我的脚本创建的发票映射到 EDI 810(发票记录)中,其中未履行的行项目的数量行为 0,这会导致 EDI 文件中的错误。

我编写了以下内容以在数量之后遍历发票行并删除零数量行,但收到​​以下错误:“name”:“USER_ERROR”,“message”:“请选择要添加的项目” -

    for (var k = 0; k < lineCount; k++) {

                    var currentInvoiceLineQuantity = newInvoice.getSublistValue ({
                        sublistId: 'item',
                        fieldId: 'quantity',
                        line: k
                    });

                    if(currentInvoiceLineQuantity === 0){
                        newInvoice.removeSublistSubrecord({
                            sublistId: 'item',
                            fieldid: 'item',
                            line: k
                        });

                        k--;

                        lineCount--;

                    }

                }   

【问题讨论】:

    标签: netsuite suitescript suitescript2.0


    【解决方案1】:

    将销售订单转换为发票后,遍历行并更改数量以仅对已履行的金额开具发票。

    下面的示例来自一个用 SS1.0 编写的旧脚本,但可以很容易地转换为 SS2.0。

    var lineCount = invoice.getLineItemCount('item');
    
    for (var i = 1; i <= lineCount; i++) {
      const quantity = invoice.getLineItemValue('item', 'quantity', i);
      const remaining = invoice.getLineItemValue('item', 'quantityremaining', i);
      invoice.setLineItemValue('item', 'quantity', i, quantity - remaining);
    }
    

    【讨论】:

      【解决方案2】:

      如果您在 Item Fulfillments 的 After Submit 用户事件中执行此操作,您可以将相关的销售订单转换为发票,然后向后遍历行时间并删除不在履行中的那些。

      您应该对照发货数量检查数量,并且您可能需要对任何无法发货的商品进行计费的逻辑(我会在订单的第一次发货或没有更多订单发货时这样做。)

      最后,您可能需要处理运费逻辑,以收取每次履行的运费或将履行的运费收取至原始销售订单的运费。

      【讨论】:

        猜你喜欢
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        • 1970-01-01
        • 2012-07-02
        相关资源
        最近更新 更多