付款和申请屏幕上需要输入

问题描述 投票:0回答:1

任何人都可以帮助我,在这个“截止日期”字段中的值将被填充,.aspx看起来像这样,它来自SOOrder DAC。

<px:PXGridColumn DataField="SOOrder__DueDate" Label="Due Date" Width="90px" ></px:PXGridColumn>

enter image description here

acumatica
1个回答
0
投票

双下划线符号'__'是Acumatica约定,表示该字段来自连接的DAC而不是DataView的主DAC。

在网格上使用Acumatica Inspect Element功能,您可以找到DataView名称“SOAdjustments”并使用按钮Actions-> View Business Logic Source ...来获取DataView声明:

PXSelectJoin<SOAdjust,

LeftJoin<SOOrder, On<SOOrder.orderType, Equal<SOAdjust.adjdOrderType>,
                  And<SOOrder.orderNbr, Equal<SOAdjust.adjdOrderNbr>>>>,

Where<SOAdjust.adjgDocType, Equal<Current<ARPayment.docType>>,
      And<SOAdjust.adjgRefNbr, Equal<Current<ARPayment.refNbr>>>>> SOAdjustments;

DataView的主要DAC是出现在BQL查询中的第一个DAC:在这种情况下是SOAdjust。

在LeftJoin BQL子句中,SOOrder DAC加入了查询。屏幕上显示的DueDate字段是该查询的连接SOOrder DAC。

SOOrder.Due日期字段解析为SOOrder数据库表的截止日期字段。它是一个标准的DB字段,这意味着显示的值只是从数据库中获取的。

在您的情况下,我认为该值最初由SOOrder.TermsID字段上的[Terms(...)]属性设置:

#region TermsID
public abstract class termsID : PX.Data.IBqlField
{
}
protected String _TermsID;
[PXDBString(10, IsUnicode = true)]
[PXDefault(typeof(Search<Customer.termsID, Where<Customer.bAccountID, Equal<Current<SOOrder.customerID>>>>), PersistingCheck = PXPersistingCheck.Nothing)]
[PXUIField(DisplayName = "Terms", Visibility = PXUIVisibility.Visible)]
[PXSelector(typeof(Search<Terms.termsID, Where<Terms.visibleTo, Equal<TermsVisibleTo.all>, Or<Terms.visibleTo, Equal<TermsVisibleTo.customer>>>>), DescriptionField = typeof(Terms.descr), Filterable = true)]
[Terms(typeof(SOOrder.invoiceDate), typeof(SOOrder.dueDate), typeof(SOOrder.discDate), typeof(SOOrder.curyOrderTotal), typeof(SOOrder.curyTermsDiscAmt))]
public virtual String TermsID
{
    get
    {
        return this._TermsID;
    }
    set
    {
        this._TermsID = value;
    }
}
#endregion

计算截止日期的算法是PX.Objects.CS.Terms Attribute.CalcTermsDates方法的一部分:

public static void CalcTermsDates(Terms terms, DateTime? docDate, out DateTime? dueDate, out DateTime? discDate)
{
    dueDate = null;
    discDate = null;
    if (docDate != null && terms != null)
    {
        DateTime DocDate = docDate.Value;
        switch (terms.DueType)
        {
            case TermsDueType.FixedNumberOfDays:
                dueDate = DocDate.AddDays((double)terms.DayDue00);
                break;
            case TermsDueType.Prox:
                DateTime sameDayOfNextMonth = DocDate.AddMonths(1);
                DateTime firstDayOfNextMonth = new DateTime(sameDayOfNextMonth.Year, sameDayOfNextMonth.Month, 1);
                dueDate = firstDayOfNextMonth.AddDays((double)terms.DayDue00);
                break;
            case TermsDueType.DayOfNextMonth:
                dueDate = new PXDateTime(DocDate.Year, DocDate.Month, (int)terms.DayDue00).AddMonths(1);
                break;
            case TermsDueType.DayOfTheMonth:
                int monthShift = DocDate.Day > (int)terms.DayDue00 ? 1 : 0;
                dueDate = new PXDateTime(DocDate.Year, DocDate.Month, (int)terms.DayDue00).AddMonths(monthShift);
                break;
            case TermsDueType.Custom:
                int nextmonth = 0;
                if (DocDate.Day >= terms.DayFrom00 && DocDate.Day <= terms.DayTo00)
                {
                    if (terms.DayDue00 <= terms.DayTo00)
                    {
                        nextmonth = 1;
                    }
                    dueDate = new PXDateTime(DocDate.Year, DocDate.Month, (int)terms.DayDue00).AddMonths(nextmonth);
                }
                if (DocDate.Day >= terms.DayFrom01 && DocDate.Day <= terms.DayTo01)
                {
                    if (terms.DayDue01 <= terms.DayTo01)
                    {
                        nextmonth = 1;
                    }
                    dueDate = new PXDateTime(DocDate.Year, DocDate.Month, (int)terms.DayDue01).AddMonths(nextmonth);
                }
                break;
            case TermsDueType.EndOfMonth:
                dueDate = new DateTime(DocDate.Year, DocDate.Month, 1).AddMonths(1).AddDays(-1);
                break;
            case TermsDueType.EndOfNextMonth:
                dueDate = new DateTime(DocDate.Year, DocDate.Month, 1).AddMonths(2).AddDays(-1);
                break;
            default:
                break;
        }

        if (terms.InstallmentType == TermsInstallmentType.Multiple)
        {
            discDate = dueDate;
        }
        else
        {
        switch (terms.DiscType)
        {
            case TermsDueType.FixedNumberOfDays:
                discDate = DocDate.AddDays((double)terms.DayDisc);
                break;
            case TermsDueType.Prox:
                DateTime sameDayOfNextMonth = DocDate.AddMonths(1);
                DateTime firstDayOfNextMonth = new DateTime(sameDayOfNextMonth.Year, sameDayOfNextMonth.Month, 1);
                discDate = firstDayOfNextMonth.AddDays((double)terms.DayDisc);
                break;
            case TermsDueType.DayOfNextMonth:
                discDate = new PXDateTime(DocDate.Year, DocDate.Month, (int)terms.DayDisc).AddMonths(1);
                break;
            case TermsDueType.DayOfTheMonth:
                int monthShift;

                    if (terms.DueType == TermsDueType.DayOfNextMonth && DocDate.Day <= (int)terms.DayDue00)
                        monthShift = DocDate.Day >= (int)terms.DayDisc ? 1 : 0;
                else if (terms.DueType == TermsDueType.EndOfNextMonth)
                    monthShift = DocDate.Day >= (int)terms.DayDisc ? 1 : 0;
                else
                    monthShift = DocDate.Day > (int)terms.DayDue00 ? 1 : 0;
                discDate = new PXDateTime(DocDate.Year, DocDate.Month, (int)terms.DayDisc).AddMonths(monthShift);
                break;
            case TermsDueType.EndOfMonth:
                discDate = new DateTime(DocDate.Year, DocDate.Month, 1).AddMonths(1).AddDays(-1);
                break;
            case TermsDueType.EndOfNextMonth:
                discDate = new DateTime(DocDate.Year, DocDate.Month, 1).AddMonths(2).AddDays(-1);
                break;
            default:
                break;
        }
        }

        if (discDate > dueDate)
        {
            discDate = dueDate;
        }
    }           
}
© www.soinside.com 2019 - 2024. All rights reserved.