我注意到,当SOLine的数量为零时,该行没有可用的SOLineSplit或INItemPlan记录。第二,数量大于0,系统生成这些记录,如果qty设置为0,则删除记录。
当记录设置为0Quantity时,是否有一种方法可以防止SOLineSplit和INItemPlan对象删除?
如果最初创建的SOLineSplit和INItemPlan数量为0,那么是否还有办法让系统创建SOLine和SOLine?
这个问题的原因是,客户希望系统在某个点之后锁定SOLine,但也允许从另一个屏幕调整Qty。因为这并不是直接更改SOLine屏幕上的值,所以这不会触发创建拆分和计划的事件。
我尝试在自定义屏幕中创建一个SOOrderEntry实例,如下所示:
SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();
//Also tried graph.Transactions.Current = line, but did not work
graph.Transactions.Update(line);
graph.Actions.PressSave();这样做会导致空对象引用错误:
错误:在处理字段OrderQty :对象引用时发生错误,未将其设置为对象的实例。 System.NullReferenceException:对象引用没有设置为对象的实例。在PX.Objects.SO.SOOrderEntry.SOLine_OrderQty_FieldUpdated(PXCache发件人,PXFieldUpdatedEventArgs e) .
发布于 2017-09-01 19:33:31
我认为在使用SOOrderEntry时,您的语句存在的问题是,您没有真正地加载图中的顺序来正确地更新它。在创建图形实例和事务更新之前,您应该像这样加载文档头.
SOOrderEntry graph = PXGraph.CreateInstance<SOOrderEntry>();
graph.Document.Current = graph.Document.Search<SOOrder.orderNbr>(line.OrderNbr, line.OrderType);
if(graph.Document.Current == null)
{
return;
}
graph.Transactions.Update(line);
graph.Actions.PressSave();至于控制如何从SOOrderEntry输入计划和拆分记录.这些条目通过PlanID上的属性来控制。附加的缓存是将其添加到SOOrderEntry上的地方..。
[PXMergeAttributes(Method = MergeMethod.Append)]
[SOLineSplitPlanID(typeof(SOOrder.noteID), typeof(SOOrder.hold), typeof(SOOrder.orderDate))]
protected virtual void SOLineSplit_PlanID_CacheAttached(PXCache sender)
{
}您可以对销售订单进行自己的图形扩展,并将该属性替换为您自己版本的SOLineSplitPlanID。这对你来说可能是一场战斗,因为我不知道你为什么希望计划记录在零质量的情况下存在。
https://stackoverflow.com/questions/46006720
复制相似问题