В транзакции NetSuite можно выбирать из множества дат, особенно в заказе на продажу. Я использую SuiteTalk для синхронизации информации о доставке из NetSuite в устаревшую систему. Какая дата является правильной датой, чтобы определить, когда были выполнены действия по заказу на продажу, указывающие на то, что что-то отгружено?
Даты транзакций NetSuite
Ответы (3)
После просмотра и сравнения всех значений дат во всех заказах на продажу я пришел к выводу, что нет явного победителя, который показывает дату / время последней активности. Поле формул было лучшим решением. Вот сохраненный поиск, демонстрирующий эту формулу.
Обратите внимание на формулу ниже, которая находит максимальную дату из всех соответствующих дат.
Эту рассчитанную дату также можно использовать в фильтре для поиска только недавно измененных позиций заказов на продажу, особенно тех, которые были отгружены вместе с номерами отслеживания и количествами.
Вот формула в формате, который можно вырезать и вставить.
GREATEST({trandate},{lastmodifieddate},{linelastmodifieddate},{billingtransaction.trandate},{billingtransaction.lastmodifieddate},{billingtransaction.linelastmodifieddate})
Посмотрите, сможете ли вы найти {shipdate} или {actualshipdate}
После обращения в службу поддержки NetSuite я узнал, что {linelastmodifieddate} недоступен через SuiteTalk API. У меня остались следующие даты:
{trandate}
{lastmodifieddate}
{billingtransaction.trandate}
{billingtransaction.lastmodifieddate}
В моем случае я отслеживаю все заказы на продажу, чтобы узнать, когда что-то будет отправлено. Поэтому я хочу знать, когда мы выполняем позицию внутри компании или когда мы ее отправляем. Проблема, с которой я столкнулся, заключалась в том, что эти даты встречаются повсюду. Я хотел включить {linelastmodifieddate}, потому что были времена, когда он был самым последним.
Поскольку мы выставляем счет при отправке или доставке товаров, {billingtransaction.trandate} представляет собой точную дату отправки. {billingtransaction.quantity} представляет точное количество отгруженных товаров. И {billingtransaction.trackingnumbers} включает список номеров отслеживания для этого груза. Это все, что мне нужно, чтобы увидеть "Статус доставки" каждой позиции в заказе на продажу.
Вот пример кода, с которого я начал идентифицировать заказы на продажу, которые недавно были отгружены.
service.searchPreferences = new SearchPreferences();
service.searchPreferences.bodyFieldsOnly = false;
service.searchPreferences.returnSearchColumns = true;
TransactionSearchAdvanced customSearch = new TransactionSearchAdvanced()
{
savedSearchScriptId = "customsearch_[your saved search here]"
,criteria = new TransactionSearch()
{
[your criteria here]
}
};
Console.WriteLine("Querying NetSuite");
SearchResult res = service.search(customSearch);
Console.WriteLine("\nThe search() operation completed successfully.");
Console.WriteLine(" Total Records = " + res.totalRecords);
Console.WriteLine(" Total Pages = " + res.totalPages);
Console.WriteLine(" Page Size = " + res.pageSize);
Console.WriteLine(" Current Page Index = " + res.pageIndex);
List<TransactionSearchRow> tsRows = new List<TransactionSearchRow>();
// Page through all the results
while (res.searchRowList.Length > 0)
{
foreach (TransactionSearchRow transactionRow in res.searchRowList)
{
tsRows.Add(transactionRow);
}
Console.WriteLine("\nQuerying NetSuite again...");
res = service.searchMore(++res.pageIndex);
}
// Sort the results
tsRows.Sort(delegate (TransactionSearchRow x, TransactionSearchRow y)
{
return x.basic.tranId[0].searchValue.CompareTo(y.basic.tranId[0].searchValue);
});
int i = 1;
// Parse the results
foreach (TransactionSearchRow tsRow in tsRows)
{
TransactionSearchRowBasic transactionRowBasic = tsRow.basic;
ItemSearchRowBasic itemRowBasic = tsRow.itemJoin;
TransactionSearchRowBasic billingRowBasic = tsRow.billingTransactionJoin;
string itemItemId = "";
string itemDesc = "";
double reqQty = 0;
string billTranId = "";
double billQty = 0;
string billTrackNo = "";
try { itemItemId = itemRowBasic.itemId[0].searchValue; } catch { }
try { itemDesc = itemRowBasic.salesDescription[0].searchValue; } catch { }
try { reqQty = transactionRowBasic.quantity[0].searchValue; } catch { }
try { billTranId = billingRowBasic.tranId[0].searchValue; } catch { }
try { billQty = billingRowBasic.quantity[0].searchValue; } catch { }
try { billTrackNo = billingRowBasic.trackingNumbers[0].searchValue; } catch { }
DateTime trandate = DateTime.MinValue;
DateTime lastmodifieddate = DateTime.MinValue;
DateTime billtrandate = DateTime.MinValue;
DateTime billlastmodifieddate = DateTime.MinValue;
try { trandate = transactionRowBasic.tranDate[0].searchValue; } catch { }
try { lastmodifieddate = transactionRowBasic.lastModifiedDate[0].searchValue; } catch { }
try { billtrandate = billingRowBasic.tranDate[0].searchValue; } catch { }
try { billlastmodifieddate = billingRowBasic.lastModifiedDate[0].searchValue; } catch { }
var list = new List<DateTime>();
list.Add(Convert.ToDateTime(trandate));
list.Add(Convert.ToDateTime(lastmodifieddate));
list.Add(Convert.ToDateTime(billtrandate));
list.Add(Convert.ToDateTime(billlastmodifieddate));
DateTime maxdate = list.Max(date => date);
Console.WriteLine(
$"\n {i++} of {tsRows.Count}" +
$"\n Document Number: {transactionRowBasic.tranId[0].searchValue}" +
$"\n SO Date: {trandate}" +
$"\n SO Modified: {lastmodifieddate}" +
$"\n Invoice Date: {billtrandate}" +
$"\n Invoice Modified: {billlastmodifieddate}" +
$"\n +++Max Date: {maxdate}" +
$"\n Item Name: {itemItemId}" +
$"\n Item Description: {itemDesc}" +
$"\n Bill Doc Number: {billTranId}" +
$"\n Requested Qty: {reqQty}" +
$"\n Bill Qty: {billQty}" +
$"\n Tracking Nos: {billTrackNo}"
);
}
service.logout();
Console.WriteLine("\n\nHit Enter to close this window.");
Console.ReadLine();