标签:
需求:
根据用户输入时间段(过账日期),查询盘点日记账行。要求显示一下字段:
日记账(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中处理)
标签:
原文地址:http://www.cnblogs.com/keepmove/p/4596485.html