Счет-фактура Suitescript только для выполненных позиций в заказах на продажу - PullRequest
0 голосов
/ 09 июля 2019

Я довольно новичок в suitescript и хотел бы создать сценарий, который запускается по регулярному расписанию и только счета-фактуры, основанные на выполнении элемента (т. Е. Существует связь один к одному между счетом и выполнением элемента, но потенциально один ко многим связь между заказом на продажу и выполнением счета / товара).

Я могу успешно запустить сценарий, который преобразует заказ на продажу в целом в счет-фактуру - однако он включает в себя все позиции в заказе на продажу, а не только те, которые были выполнены (в нашем бизнесе есть много ситуаций, в которых только происходит частичное выполнение, и затем заказ должен быть закрыт). На данный момент из моего исследования я не могу найти другие примеры успешного создания этого сценария. Моя первоначальная идея состоит в том, чтобы каким-то образом сохранить 'qtyfulfilled' в заказе на продажу в массиве с товарами и как-то создать счет с этим. Однако мне кажется, что функция преобразования - это лучший способ сохранить связь между заказом на продажу и счетом.

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

Возвращает счет-фактуру со всеми товарами из заказа клиента, а не только с выполненными.

EDIT:

Я реализовал предложенную версию кода, в которой я просто перебираю строки заказа на продажу и заменяю количество каждой строки в счете-фактуре на «выполненное количество» - однако я понял, что при нулевом количестве счет-фактура, похоже, все еще хранится эта линия с нулевым значением.

Вниз по течению от сценария счета-фактуры Я передаю запись счета-фактуры нашему поставщику EDI через интеграцию NS. Счета-фактуры, созданные с помощью моей карты сценариев, в 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--;

                    }

                }   

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Если вы сделаете это в пользовательском событии «После отправки» по выполнению позиции, вы можете преобразовать связанный Заказ на продажу в счет-фактуру, а затем пройти назад по временам строки и удалить те, которые не были выполнены.

Вам следует проверять количества на соответствие отгруженным количествам, и вам может потребоваться логика для выставления счетов за любые невыполненные пункты (я делаю это либо при первом выполнении заказа, либо когда больше нет строк для отправки.)

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

0 голосов
/ 10 июля 2019

После преобразования заказа на продажу в накладную, выполните итерацию по строкам и измените количество, чтобы выставить только накладную на сумму, которая была выполнена.

Пример ниже взят из унаследованного сценария, написанного на 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);
}
...