Acumatica 如何将自定义字段值从销售订单详细信息粘贴到发货和应收账款发票?

Acumatica 如何将自定义字段值从销售订单详细信息粘贴到发货和应收账款发票?,acumatica,acumatica-kb,Acumatica,Acumatica Kb,我已经在SOLine、SOShipLine和ARTran DAC中创建了一个自定义DB绑定字段,名为Specialist: public class SOLineExt : PXCacheExtension<PX.Objects.SO.SOLine> { public class usrSpecialist : IBqlField { } [PXDBString(60)] [PXUIField(DisplayName = "Specialist")]

我已经在SOLine、SOShipLine和ARTran DAC中创建了一个自定义DB绑定字段,名为Specialist

public class SOLineExt : PXCacheExtension<PX.Objects.SO.SOLine>
{
    public class usrSpecialist : IBqlField { }

    [PXDBString(60)]
    [PXUIField(DisplayName = "Specialist")]
    public string UsrSpecialist { get; set; }
}

public class SOShipLineExt : PXCacheExtension<PX.Objects.SO.SOShipLine>
{
    public class usrSpecialist : IBqlField { }

    [PXDBString(60)]
    [PXUIField(DisplayName = "Specialist")]
    public string UsrSpecialist { get; set; }
}

public class ARTranExt : PXCacheExtension<PX.Objects.AR.ARTran>
{
    public class usrSpecialist : IBqlField { }

    [PXDBString(60)]
    [PXUIField(DisplayName = "Specialist")]
    public string UsrSpecialist { get; set; }
}
公共类solinext:PXCacheExtension
{
公共类usrSpecialist:IBqlField{}
[PXDBString(60)]
[PXUIField(DisplayName=“Specialist”)]
公共字符串UsrSpecialist{get;set;}
}
公共类SOShipLineExt:PXCacheExtension
{
公共类usrSpecialist:IBqlField{}
[PXDBString(60)]
[PXUIField(DisplayName=“Specialist”)]
公共字符串UsrSpecialist{get;set;}
}
公共类ARTranExt:PXCacheExtension
{
公共类usrSpecialist:IBqlField{}
[PXDBString(60)]
[PXUIField(DisplayName=“Specialist”)]
公共字符串UsrSpecialist{get;set;}
}

如何将自定义字段值从销售订单详细信息粘贴到发货和应收账款发票?

将自定义字段值从SOLine粘贴到SOShipLine,您应该为SOShipmentEntryBLC创建扩展,并覆盖CreateShipmentFromSchedules方法,如下例所示:

public class SOShipmentEntry_Extension : PXGraphExtension<PX.Objects.SO.SOShipmentEntry>
{
    public delegate bool CreateShipmentFromSchedulesDel(
        PXResult<SOShipmentPlan, SOLineSplit, SOLine, InventoryItem, INLotSerClass, INSite, SOShipLine> res,
        SOShipLine newline, SOOrderType ordertype, string operation, DocumentList<SOShipment> list);

    [PXOverride]
    public bool CreateShipmentFromSchedules(
        PXResult<SOShipmentPlan, SOLineSplit, SOLine, InventoryItem, INLotSerClass, INSite, SOShipLine> res,
        SOShipLine newline, SOOrderType ordertype, string operation, DocumentList<SOShipment> list,
        CreateShipmentFromSchedulesDel del)
    {
        SOLine line = (SOLine)res;
        PXFieldDefaulting specialistFieldDefaulting = new PXFieldDefaulting((s, a) =>
        {
            if (line != null)
            {
                a.NewValue = line.GetExtension<SOLineExt>().UsrSpecialist;
                a.Cancel = true;
            }
        });

        bool result;
        Base.FieldDefaulting.AddHandler<SOShipLineExt.usrSpecialist>(specialistFieldDefaulting);
        try
        {
            result = del(res, newline, ordertype, operation, list);
        }
        finally
        {
            Base.FieldDefaulting.RemoveHandler<SOShipLineExt.usrSpecialist>(specialistFieldDefaulting);
        }
        return result;
    }
}
公共类SOShipmentEntry_扩展:pXgrapherExtension
{
公共委托bool CreateShipmentFromSchedulesDel(
pxres,
SOShipLine换行符、SOOrderType订单类型、字符串操作、文档列表);
[PXOverride]
公共bool CreateShipmentFromSchedules(
pxres,
SOShipLine换行符、SOOrderType ordertype、字符串操作、DocumentList列表、,
CreateShipmentFromSchedulesDel)
{
索林线=(索林)res;
PXFieldDefaulting specialistFieldDefaulting=新PXFieldDefaulting((s,a)=>
{
如果(行!=null)
{
a、 NewValue=line.GetExtension().UsrSpecialist;
a、 取消=真;
}
});
布尔结果;
Base.FieldDefaulting.AddHandler(specialistFieldDefaulting);
尝试
{
结果=del(res、换行符、订单类型、操作、列表);
}
最后
{
Base.FieldDefaulting.RemoveHandler(specialistFieldDefaulting);
}
返回结果;
}
}
这是新创建的装运的外观: 执行以下销售订单的创建发货操作后:


要将自定义字段值粘贴到ARTran,您应该为SOINVOICECENTRYBLC创建一个扩展,并覆盖CreateTranFromShipLine方法

因为销售订单(SO301000)和装运(SO302000)屏幕上的准备发票按钮可用于根据装运详细信息或直接从这些订单的销售订单详细信息创建新的应收账款发票,该订单类型不处理装运(订单类型屏幕上未选中“处理装运”选项),需要验证当前销售订单的类型是否处理装运。对于处理装运的订单类型,我们将将自定义字段值从SOShipLine粘贴到ARTran。否则,自定义字段值将从SOLine粘贴到ARTran

public class SOInvoiceEntry_Extension : PXGraphExtension<PX.Objects.SO.SOInvoiceEntry>
{
    public delegate ARTran CreateTranFromShipLineDel(ARInvoice newdoc, SOOrderType ordertype, string operation,
        SOLine orderline, ref SOShipLine shipline);

    [PXOverride]
    public ARTran CreateTranFromShipLine(ARInvoice newdoc, SOOrderType ordertype, string operation,
        SOLine orderline, ref SOShipLine shipline, CreateTranFromShipLineDel del)
    {
        var arTran = del(newdoc, ordertype, operation, orderline, ref shipline);
        PXCache<ARTran>.GetExtension<ARTranExt>(arTran).UsrSpecialist = ordertype.RequireShipping == true ?
            shipline.GetExtension<SOShipLineExt>().UsrSpecialist :
            orderline.GetExtension<SOLineExt>().UsrSpecialist;
        return arTran;
    }
}
public类SOInvoiceEntry_扩展名:PXGraphExtension
{
公共委托ARTran CreateTranFromShipLineDel(ARInvoice newdoc,SOOrderType ordertype,字符串操作,
SOLine订单行,参考SOShipLine(订单行);
[PXOverride]
public ARTran CreateTranFromShipLine(ARInvoice newdoc,SOOrderType ordertype,字符串操作,
SOLine订单行,参考SOShipLine shipline,CreateTranFromShipLineDel)
{
var arTran=del(newdoc,ordertype,operation,orderline,ref shipline);
PXCache
准备装运如下:

新的应收账款发票应该是这样的: 对订单类型的销售订单执行“准备发票”操作后,不处理发货:

有关如何将应收发票明细中的自定义字段值直接粘贴到总账交易的示例,请检查