У нас есть бизнес-требование установить стоимость возврата SO на первоначальную стоимость, выданную без выставления счетов, если это возможно. Мы определили, что заказы на продажу необходимы для отслеживания выдачи материалов нашему клиенту, и мы руководствуемся затратами, а не ценой. Мы используем FIFO-калькуляцию, но SO-заказы на возврат, похоже, не возвращаются с первоначальной COST, если не выставлены счета (что мы также не делаем традиционным способом).
Я обнаружил, что установка удельной / дополнительной стоимости на линии отгрузки SO непосредственно в базе данных до появления сообщения Подтвердить отгрузку и Обновить IN для получения желаемых результатов. Применяя пользовательскую опцию меню для оптимизации и строгого контроля возврата, я клонировал соседний код в качестве основы. Раздел между === - это то место, где я устанавливаю цену за единицу продукции и дополнительные расходы. PXTrace показывает ожидаемое значение, но оно равно $ 0 в записи об отправке. Я подумал, что мне может понадобиться «docgraph.Update (sOShipmentLine)», чтобы сохранить его, но он недоступен в этой области.
using (var ts = new PXTransactionScope())
{
PXTimeStampScope.SetRecordComesFirst(typeof(SOOrder), true);
//Reminder - SOShipmentEntry docgraph = PXGraph.CreateInstance<SOShipmentEntry>();
docgraph.CreateShipment(order, SiteID, filter.ShipDate, adapter.MassProcess, SOOperation.Receipt, created, adapter.QuickProcessFlow);
PXTrace.WriteError("Setting Cost");
//Set Cost on Shipment to Cost On SO Line
PXResultset<SOShipment> results =
PXSelectJoin<SOShipment,
InnerJoin <SOShipLine, On<SOShipLine.shipmentNbr, Equal<SOShipment.shipmentNbr>>,
InnerJoin <SOLine, On<SOLine.orderType, Equal<SOShipLine.origOrderType>,
And<SOLine.orderNbr, Equal<SOShipLine.origOrderNbr>, And<SOLine.lineNbr, Equal<SOShipLine.origLineNbr>>>>
>>,
Where<SOShipment.shipmentNbr, Equal<Required<SOShipment.shipmentNbr>>>>
.Select(docgraph, docgraph.Document.Current.ShipmentNbr);
PXTrace.WriteError("Shipment {0} - Records {1}", docgraph.Document.Current.ShipmentNbr, results.Count);
foreach (PXResult<SOShipment, SOShipLine, SOLine> record in results)
{
SOShipment shipment = (SOShipment)record;
SOShipLine shipmentLine = (SOShipLine)record;
SOLine sOLine = (SOLine)record;
==============================================
shipmentLine.UnitCost = GetReturnUnitCost(sOLine.OrigOrderType, sOLine.OrigOrderNbr, sOLine.OrigLineNbr, sOLine.CuryInfoID);
shipmentLine.ExtCost = shipmentLine.Qty * shipmentLine.UnitCost;
PXTrace.WriteError(string.Format("{0} {1}-{2} = {3} / {4}", shipmentLine.LineType, shipmentLine.ShipmentNbr, shipmentLine.LineNbr, shipmentLine.Qty, shipmentLine.UnitCost));
==============================================
}
PXAutomation.CompleteSimple(docgraph.Document.View);
var items = new List<object> { order };
PXAutomation.RemovePersisted(docgraph, typeof(SOOrder), items);
PXAutomation.RemoveProcessing(docgraph, typeof(SOOrder), items);
ts.Complete();
}
Все еще на кривой обучения, поэтому я ожидаю, что решение, вероятно, будет простым и очевидным для кого-то более опытного.