Acumatica 付款和应用程序屏幕上需要的输入

Acumatica 付款和应用程序屏幕上需要的输入,acumatica,Acumatica,有谁能帮我一下,这个“到期日”字段中的场景值将被填充。aspx看起来像这样,它来自SOOrder DAC <px:PXGridColumn DataField="SOOrder__DueDate" Label="Due Date" Width="90px" ></px:PXGridColumn> 双下划线符号“\uuuuuu”是一种Acumatica约定,意味着字段来自一个连接的DAC,而不是DataView的主DAC 使用网格上的Acumatica功能,您可以找到

有谁能帮我一下,这个“到期日”字段中的场景值将被填充。aspx看起来像这样,它来自SOOrder DAC

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


双下划线符号“\uuuuuu”是一种Acumatica约定,意味着字段来自一个连接的DAC,而不是DataView的主DAC

使用网格上的Acumatica功能,您可以找到DataView名称“SoAdjustions”,并使用按钮操作->查看业务逻辑源。。。要获取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;
PXSelectJoin-SOAdjustments;
DataView的主DAC是出现在本例中的BQL查询:SOAdjust中的第一个DAC

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

SOOrder.DueDate字段解析为SOOrder数据库表的DueDate字段。这是一个标准的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
#区域TermsID
公共抽象类termsID:PX.Data.IBqlField
{
}
受保护字符串_TermsID;
[PXDBString(10,IsUnicode=true)]
[PXDefault(typeof(Search),PersistingCheck=PXPersistingCheck.Nothing)]
[PXUIField(DisplayName=“Terms”,Visibility=PXUIVisibility.Visible)]
[PXSelector(typeof(搜索),DescriptionField=typeof(Terms.descr),Filterable=true)]
[条款(类型of(SOOrder.invoiceDate)、类型of(SOOrder.dueDate)、类型of(SOOrder.discDate)、类型of(SOOrder.curyordertottal)、类型of(SOOrder.curytermsdiscamp))]
公共虚拟字符串TermsID
{
得到
{
返回此。\u TermsID;
}
设置
{
此值为.\u TermsID=值;
}
}
#端区
计算DueDate的算法是PX.Objects.CS.TermsAttribute.CalChartMSDates方法的一部分:

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;
        }
    }           
}
public static void计算日期(术语、日期时间?docDate、out DateTime?dueDate、out DateTime?discDate)
{
dueDate=null;
discDate=null;
if(docDate!=null&&terms!=null)
{
DateTime DocDate=DocDate.Value;
开关(术语类型)
{
案例术语dueType.FixedNumberOfDays:
dueDate=DocDate.AddDays((双)期限.DayDue00);
打破
案例术语dueType.Prox:
DateTime sameDayOfNextMonth=DocDate.AddMonths(1);
DateTime firstDayOfNextMonth=新日期时间(sameDayOfNextMonth.Year,sameDayOfNextMonth.Month,1);
dueDate=下个月的第一天。AddDays((双)期限。DayDue00);
打破
案例术语dueType.DayOfNextMonth:
dueDate=新的PXDateTime(DocDate.Year,DocDate.Month,(int)terms.daydeDue00)。AddMonths(1);
打破
案例术语dueType.dayOfMonth:
int monthShift=DocDate.Day>(int)terms.dayde00?1:0;
dueDate=新的PXDateTime(DocDate.Year,DocDate.Month,(int)terms.daydeDue00)。addmonthshift(monthShift);
打破
案例术语DueType.自定义:
int nextmonth=0;
如果(DocDate.Day>=terms.DayFrom00&&DocDate.Day到期日)
{
discDate=dueDate;
}
}           
}