2016-01-21 91 views
2

我試圖使用nlapiTransformRecord將netsuite中的銷售訂單轉換爲現金銷售。根據文檔,這應該是可行的,因爲它是一個允許的轉換,但我無法在任何地方找到這種特定轉換的示例。 下面是我想要做的一個例子。netsuite將銷售訂單轉換爲現金出售

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

開始加載記錄。現在根據文檔,我沒有對銷售訂單進行現金銷售的唯一要求是發佈期限。我曾嘗試過,沒有設置這個領域無濟於事。 customform只是一種現金銷售自定義表單。顯然,ID不是真實的。

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

現在我已經嘗試設置發佈時間段值並設置爲轉換的默認值,並且都返回這不是有效的記錄轉換。無論如何,這裏是轉換文檔關於它的標準轉換。

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

回答

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); 
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); 
+0

其實您可以覆蓋獨立於傳輸日期的發佈期。不是最佳做法,但它確實可行。 – bknights

+0

同意。對於腳本解決方案,我總是更喜歡設置「trandate」,並讓NetSuite通過硬編碼「postingperiod」設置「postingperiod」。 – prasun

1

你所得到的超級有用「這不是一個有效的記錄轉型」的錯誤,因爲你的銷售訂單的付款方式爲「現金」類型,即,淨值計算的不。因此,您無法將其轉換爲現金出售。請將付款方式更改爲「現金」類型或將其轉換爲發票。您可以測試NS如何通過在界面中按下按鈕上的按鈕來天真地處理它。除此之外,你的代碼/其他建議是正確的。

+0

這是問題中提到的錯誤的最可能原因。 –

0

好吧,原來我們中國辦公室裏的一個人禁用了這個轉換,讓他以某種方式允許他正在運行的腳本。這很有趣。