2

我正在尝试使用 nlapiTransformRecord 将 netsuite 中的销售订单转换为现金销售。根据文档,这应该是可行的,因为它是允许的转换,但我在任何地方都找不到这种特定转换的示例。这是我正在尝试做的一个例子。

var int = 123456;
var rec = nlapiLoadRecord('salesorder', int);
rec.setFieldValue('customform', 123);

从加载记录开始。现在根据文档,我在销售订单上没有的现金销售唯一需要的字段是发布期。我尝试过设置此字段和不设置此字段均无济于事。此外,customform 只是一个现金销售自定义表单。显然,身份证不是真实的。

rec.setFieldValue('postingperiod', 58);
var cash = nlapiTransformRecord('salesorder', int, 'cashsale', {'postingperiod': 58});

现在我已经尝试设置 postperiod 值并将其设置为转换的默认值,并且两者都返回 That is not a valid record transformation。无论如何,这是关于它的转换文档的行是标准转换。

Record Type   Record Name     Transform Type    Transform Name (Target Record)
salesorder    Sales Order     cashsale          Cash Sale
4

4 回答 4

1

销售订单是非过帐交易,所以,下面的代码不会有任何影响

var int = 123456;
var rec = nlapiLoadRecord('salesorder', int);
rec.setFieldValue('customform', 123);

NetSuite 会根据交易日期自动设置过帐周期,因此在大多数情况下您无需显式设置。

var cash = nlapiTransformRecord('salesorder', int, 'cashsale');

如果您确实需要更改发布周期,我建议您在动态模式下转换记录,然后在其上设置 trandate,因为 NetSuite 会自动拉取适当的发布周期。

var cash = nlapiTransformRecord('salesorder', int, 'cash sale', {'recordmode': 'dynamic'});
cash.setFieldValue('trandate', APPROPRIATE_TRANDATE_VALUE);
nlapiSubmitRecord(cash);
于 2016-01-21T18:08:31.593 回答
1

您收到超级有用的“这不是有效的记录转换”错误,因为您的销售订单上的付款方式不是“现金”类型,即净额。因此,您无法将其转换为现金销售。将付款方式更改为“现金”类型或将您的转换为发票。您可以通过按下 UI 中 SO 的账单按钮来测试 NS 如何天真地处理它。除此之外,您的代码/其他建议是正确的。

于 2016-02-02T02:44:01.840 回答
1

你可以这样做:

var cash = nlapiTransformRecord('salesorder', int, 'cashsale'); // can initialize with {customform:formId} 
cash.setFieldValue('postingperiod', 58); // assuming 58 is the internal id of an open period
nlapiSubmitRecord(cash);
于 2016-01-21T16:03:43.350 回答
0

好吧,原来我们中国办公室的一个人已经禁用了他正在运行的脚本以某种方式允许的转换。所以这很有趣。

于 2016-02-10T18:58:47.800 回答