netsuite преобразовывает заказ на продажу в продажу за наличные

Я пытаюсь преобразовать заказ на продажу в netsuite в продажу за наличные с помощью nlapiTransformRecord. Согласно документации, это должно быть возможно, поскольку это разрешенное преобразование, но я нигде не могу найти примеров этого конкретного преобразования. Вот пример того, что я пытаюсь сделать.

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

Начните с загрузки записи. Теперь, согласно документации, единственное обязательное поле для продажи за наличные, которого у меня нет в заказе на продажу, - это postingperiod. Я пробовал использовать это поле и без него, но безрезультатно. Также customform - это просто индивидуальная форма для продажи за наличные. Очевидно идентификаторы не настоящие.

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

person ceridian    schedule 21.01.2016    source источник


Ответы (4)


Вы бы сделали это следующим образом:

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);
person bknights    schedule 21.01.2016

Заказ на продажу не является проводкой, поэтому приведенный ниже код не будет иметь никакого эффекта.

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);
person prasun    schedule 21.01.2016
comment
Фактически вы можете переопределить период разноски независимо от даты транзакции. Не лучшая практика, но, безусловно, выполнимая. - person bknights; 21.01.2016
comment
согласовано. Для решения сценария я всегда предпочитаю установить trandate и позволить NetSuite установить postingperiod вместо жесткого кодирования postingperiod - person prasun; 22.01.2016

Вы получаете очень полезную ошибку «Это недопустимое преобразование записи», потому что метод оплаты в вашем заказе на продажу не относится к типу «наличные», т. Е. Нетто-условиям. Таким образом, вы не можете превратить это в продажу за наличные. Либо измените способ оплаты на «наличный», либо сделайте преобразование в счет-фактуру. Вы можете наивно проверить, как NS справится с этим, нажав кнопку счета в SO в пользовательском интерфейсе. В остальном ваш код / ​​другие рекомендации верны.

person Shawn Blackburn    schedule 02.02.2016
comment
Это наиболее вероятная причина ошибки, упомянутой в вопросе. - person Seth Difley; 06.04.2017

Хорошо, оказалось, что один из парней в нашем китайском офисе каким-то образом отключил это преобразование для скрипта, который он запускал. Это было весело.

person ceridian    schedule 10.02.2016