Q查询
目录:【实习】T100学习笔记
很多步骤前面做过很多次了,就写的很省略,具体可以参见:
要求
QBE查询条件:
- 订单单号 xmzyucdocno
- 订单日期 xmzyucdocdt
- 业务人员 xmzyuc001
- 业务部门 xmzyuc002
- 客户编号 xmzyuc003
数据订单页签:
- 订单单号
- 订单日期
- 客户编号
简称 - 项次
- 料号
品名
规格 - 单位
单位说明 - 数量
- 单价
- 含税金额
- 未税金额
- 税额
1. azzi900建立程序代号cxmq666
2. azzi910建立作业代号cxmq666
3. 设计器 - 规格 - 下载规格 - 同时签出规格和程序
4. 设计器 - 常用工具 - r.a画面产生器 - 产生规格
r.a画面产生器(adzp168)
- 【样板类型】一定要选择Q查询作业
- 列表模式资料浏览区块:可以选择左方QBE或者上方QBE,根据需求设定
- 根据需求设定需要显示的字段,然后生成画面
5. 设计器 - 规格 - 下载规格
6. 设计器 - 档案 - 开启档案,修改规格
【参考字段】设置
客户编号 - 交易对象简称
料号 - 品名
料号 - 规格
单位 - 说明
修改完成后,上传规格
7. 设计器 - 程序 - 下载程序,修改程序
设计器不产生【开窗】代码,需自己写
此时,cxmq666里面的内容是空的,设计器只会帮我们产生一个空的框架,里面的内容需要自己修改,包括 constuct查询 和 input输入 都需要自己写。
位置:xxx_ui_dialog
→ DIALOG
→ DIALOG ATTRIBUTES(UNBUFFERED,FIELD ORDER FORM)
- input输入,在
#add-point:input段落 name="ui_dialog.input"
写input内容。 - construct查询,在
#add-point:construct段落 name="ui_dialog.construct"
里面写。
这部分代码控制开窗:
#单号、单据日期、业务人员、业务部门、客户编号
CONSTRUCT BY NAME g_wc ON xmzyucdocno,xmzyucdocdt,xmzyuc001,xmzyuc002,xmzyuc003
ON ACTION controlp INFIELD xmzyucdocno
#add-point:ON ACTION controlp INFIELD xmzyucdocno name="construct.c.xmzyucdocno"
#查询时开窗 add by lzy
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL cq_xmzyucdocno() #呼叫開窗
#CALL q_ooba002_1()
DISPLAY g_qryparam.return1 TO xmzyucdocno #顯示到畫面上
NEXT FIELD xmzyucdocno #返回原欄位
ON ACTION controlp INFIELD xmzyuc001
#add-point:ON ACTION controlp INFIELD xmzyuc001 name="construct.c.xmzyuc001"
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_ooag001() #呼叫開窗
DISPLAY g_qryparam.return1 TO xmzyuc001 #顯示到畫面上
NEXT FIELD xmzyuc001
ON ACTION controlp INFIELD xmzyuc002
#add-point:ON ACTION controlp INFIELD xmzyuc002 name="construct.c.xmzyuc002"
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_ooeg001_9() #呼叫開窗
DISPLAY g_qryparam.return1 TO xmzyuc002 #顯示到畫面上
NEXT FIELD xmzyuc002 #返回原欄位
ON ACTION controlp INFIELD xmzyuc003
#add-point:ON ACTION controlp INFIELD xmzyuc003 name="construct.c.xmzyuc003"
#開窗c段
INITIALIZE g_qryparam.* TO NULL
LET g_qryparam.state = 'c'
LET g_qryparam.reqry = FALSE
CALL q_pmaa001_13() #呼叫開窗
DISPLAY g_qryparam.return1 TO xmzyuc003 #顯示到畫面上
NEXT FIELD xmzyuc003 #返回原欄位
END CONSTRUCT
根据construct获取条件组成g_wc,在b_fill修改
在#add-point:b_fill段rank_sql_after name="b_fill.rank_sql_after"
中修改:
LET ls_sql_rank = "SELECT UNIQUE 'N',xmzzucdocno,xmzzucseq,xmzyucdocdt,xmzyuc003,pmaal004,xmzzuc001,imaal003,imaal004,",
"xmzzuc002,'',xmzzuc003,xmzzuc007,xmzzuc008,xmzzuc009,xmzzuc010",
" FROM xmzyuc_t ",
" LEFT JOIN xmzzuc_t ON xmzyucent=xmzzucent AND xmzyucdocno=xmzzucdocno ",
" LEFT JOIN pmaal_t ON xmzyucent=pmaalent AND xmzyuc003=pmaal001 AND pmaal002='",g_dlang,"'",
" LEFT JOIN imaal_t ON xmzzucent=imaalent AND xmzzuc001=imaal001 AND imaal002='",g_dlang,"'",
" WHERE xmzyucent=?",
" AND ", g_wc
LET ls_sql_rank = ls_sql_rank, cl_sql_add_filter("xmzyuc_t"),
" ORDER BY xmzyuc_t.xmzyucdocno"
还需在 #add-point:b_fill段sql_after name="b_fill.sql_after"
里修改:
如果画面上的栏位,不能用表里面的字段来表示,需要用自定义字段来接收的,可以在#add-point:b_fill段資料填充 name="b_fill.fill"
里面补充资料例如获取客户名称,数值计算等
#add-point:b_fill段資料填充 name="b_fill.fill"
# [单位说明]的查询, add by lzy
SELECT oocal003 INTO g_xmzyuc_d[l_ac].xmzzuc002_desc FROM oocal_t
WHERE oocalent = g_enterprise
AND oocal001 = g_xmzyuc_d[l_ac].xmzzuc002
#end add-point
如果需求是有多页单身,那么需要在b_fill的函数里面根据画面的栏位写多条sql语句,具体可以参考axmq540标准程序的b_fill逻辑
8. azzi850 给程序授权
总结
Q查询开发流程不难,主要就是在 b_fill 中写SQL。