码迷,mamicode.com
首页 > 其他好文 > 详细

Dynamics AX 盘点日记账行

时间:2015-06-24 00:28:12      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

需求:

根据用户输入时间段(过账日期),查询盘点日记账行。要求显示一下字段:

日记账(JournalId), 日期,物料编号,尺寸,颜色,站点,仓库,库位,现有量,盘点数量,实际成本额。

设计:

创建窗体:InventCountedTable

添加数据源(Data Sources):

InventJournalTrans(主表), InventTransOrigin, InventTrans, InventDim, InventJournalTable

将所有表的Allow属性设置成No,禁止用户编辑记录。

InventTransOrigin: JoinSource: InventJournalTrans; LinkType: InnerJoin(内关联到主表)

InventTrans: JoinSource: InventTransOrigin; LinkType: InnverJoin(内关联到InventTransOrigin, 这两个表是一对多的关系,通过RecId关联,InventTransOrigin表保存的是InventTrans的公共字段)。

InventDim: JoinSource: InventJournalTrans: LinkType: InnerJoin(内关联到主表)

InventJournalTable: JoinSource: InventJournalTrans; LinkType: InnerJoin(内关联到主表)

添加控件(Design)

为Design设置数据源 DataSource: InventJournalTrans,Caption=盘点日记账明细

添加两个Group控件,设置控件Width&Height=Column width&Column height。

第一个Group控件中添加查询条件和查询按钮。

FromDateTime: UtcDateTimeEdit, Label=From: , AutoDeclaration=Yes

ToDateTime: UtcDateTimeEdit, Label=To: , AutoDeclaration=Yes

BtnQuery: Button, Label=查询

设置第二个Group控件的数据源 DataSource: InventJournalTrans,该控件中添加Grid保存查询到的结果。

将用户需要显示的字段拖拽到Grid,设置Grid数据源inventJournalTrans, Width&Height=Column width&Column height.

编码:

在窗体申明方法中申明变量:

public class FormRun extends ObjectRun
{
    //First open form no data shows flag
    boolean             firstFlag;
    //The range of journal name
    QueryBuildRange     qbrJournalName;
    //The range of posted date
    QueryBuildRange     qbrDT;
    //The range of posted or not
    QueryBuildRange     qbrPosted;
}

查询按钮覆盖方法click()

void clicked()
{
  super();
//执行数据源的查询操作   inventJournalTrans_ds.executeQuery(); }

数据源InventJournalTrans覆盖方法executeQuery方法

public void executeQuery()
{
    //Make sure that correct records shows
    qbrJournalName  = SysQuery::findOrCreateRange(InventJournalTrans_q.dataSourceTable(tableNum(InventJournalTable)),fieldNum(InventJournalTable, JournalNameId));
    if(!firstFlag)
    {
        qbrJournalName.value("Null");
        firstFlag   = true;
    }
    else
    {
        qbrJournalName.value("IMov");
    }
    qbrJournalName.status(RangeStatus::Locked);

    //Add range of posted records
    qbrPosted  = SysQuery::findOrCreateRange(InventJournalTrans_q.dataSourceTable(tableNum(InventJournalTable)),fieldNum(InventJournalTable,Posted));
    //qbrPosted.value(enum2str(NoYes::Yes));
    qbrPosted.status(RangeStatus::Locked);

    //Add range of posted date time
    qbrDT = SysQuery::findOrCreateRange(InventJournalTrans_q.dataSourceTable(tableNum(InventJournalTable)),fieldNum(InventJournalTable,PostedDateTime));
    qbrDT.value(FromDateTime.valueStr()+".."+ ToDateTime.valueStr());
    qbrDT.status(RangeStatus::Locked);
    super();
}

当前效果图:

 

 技术分享

在开始查询的时候验证FromDateTime和ToDateTime两个控件不为空,且时间不交叉(在按钮的点击时间中验证):

void clicked()
{
    super();
    if(FromDateTime.valueStr())
    {
        if(FromDateTime.valueStr() > ToDateTime.valueStr())
        {
            error(开始日期不能大于结束日期!);
        }
        else
        {
            inventJournalTrans_ds.executeQuery();
        }
    }
    else
    {
        error(开始日期不能为空!);
    }
}

 

待改进:

1.为UtcDateTime控件ToDateTime设置初始值为当前时间(在窗体方法init中处理)

 

Dynamics AX 盘点日记账行

标签:

原文地址:http://www.cnblogs.com/keepmove/p/4596485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!