目录
1.提示报错信息
INITIALIZE g_errparam TO NULL
LET g_errparam.extend = "警告:" #错误信息的前缀
LET g_errparam.code = 'aap-00113' #错误信息代码,在常用工具->错误讯息维护作业中添加
LET g_errparam.popup = FALSE #错误信息是否需要弹框(false不用,true则有)
CALL cl_err()
NEXT FIELD CURRENT
2.开窗设置
INPUT 以及CONSTRUCT初都需要写
ON ACTION controlp INFIELD xmda004
#add-point:ON ACTION controlp INFIELD b_xmda004 name="construct.c.filter.page1.b_xmda004"
#應用 a08 樣板自動產生(Version:3)
#開窗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 xmda004 #顯示到畫面上
NEXT FIELD xmda004 #返回原欄位
3.字段下拉框
在xxxx_init的画面资料初始化代码区
CALL s_fin_set_comp_scc('l_yy','43') #年度
CALL s_fin_set_comp_scc('l_mm','111') #期別
4.单头预设值
查询预设值:在xxx_
init()中初始化区域填写代码:
LET g_master.chk1 = 'Y'
LET g_master.chk2 = 'Y'
DISPLAY g_master.chk1 TO chk1
DISPLAY g_master.chk2 TO chk2
cxcq001_ui_dialog中 的input段填写代码:
INPUT BY NAME g_master.chk1,g_master.chk2
ATTRIBUTE(WITHOUT DEFAULTS)
BEFORE INPUT
LET g_master.chk1 = 'Y'
DISPLAY g_master.chk1 TO chk1
LET g_master.chk2 = 'Y'
DISPLAY g_master.chk2 TO chk2
AFTER INPUT
新增预设值:在 xxx_insert()
中的单头预设值处填写代码:
#add-point:單頭預設值 name="insert.default"
LET g_xmzyuc_m.xmzyucdocdt = g_today #add by lzy#2021/1/27 单据日期默认为今天
#end add-point
5.校验帯值
校验带值都是写在 xxxx_input()
下的 AFTER FIELD xxxxx
#應用 a02 樣板自動產生(Version:2)
AFTER FIELD xmaauc004
#確認資料無重複
IF g_xmaauc_m.xmaauc001 IS NOT NULL AND g_xmaauc_m.xmaauc002 IS NOT NULL AND g_xmaauc_d[g_detail_idx].xmaauc003 IS NOT NULL AND g_xmaauc_d[g_detail_idx].xmaauc004 IS NOT NULL THEN
IF l_cmd = 'a' OR ( l_cmd = 'u' AND (g_xmaauc_m.xmaauc001 != g_xmaauc001_t OR g_xmaauc_m.xmaauc002 != g_xmaauc002_t OR g_xmaauc_d[g_detail_idx].xmaauc003 != g_xmaauc_d_t.xmaauc003 OR g_xmaauc_d[g_detail_idx].xmaauc004 != g_xmaauc_d_t.xmaauc004)) THEN
IF NOT ap_chk_notDup("","SELECT COUNT(*) FROM xmaauc_t WHERE "||"xmaaucent = " ||g_enterprise|| " AND "||"xmaauc001 = '"||g_xmaauc_m.xmaauc001 ||"' AND "|| "xmaauc002 = '"||g_xmaauc_m.xmaauc002 ||"' AND "|| "xmaauc003 = '"||g_xmaauc_d[g_detail_idx].xmaauc003 ||"' AND "|| "xmaauc004 = '"||g_xmaauc_d[g_detail_idx].xmaauc004 ||"'",'std-00004',0) THEN
CALL citi999_xmaauc004_desc()
NEXT FIELD CURRENT
END IF
END IF
END IF
#抓取型别說明(含校驗帶值)
IF l_cmd = 'a' OR (l_cmd = 'u' AND (g_xmaauc_d[l_ac].xmaauc004 != g_xmaauc_d_t.xmaauc004 OR g_xmaauc_d[l_ac].xmaauc004 IS NULL )) THEN
INITIALIZE g_chkparam.* TO NULL
LET g_chkparam.arg1 = g_xmaauc_d[l_ac].xmaauc004
#160318-00025#17 by 07900 --add-str
LET g_errshow = TRUE #是否開窗
IF NOT cl_chk_exist("cv_oocq002_6") THEN #校驗帶值失败处理
LET g_xmaauc_d[l_ac].xmaauc004 = g_xmaauc_d_t.xmaauc004
CALL citi999_xmaauc004_desc()
NEXT FIELD CURRENT
END IF
END IF
6.显示参考字段值
自定义FUCTION区域代码:
#包裝容器顯示
PRIVATE FUNCTION axmt500_xmdc003_ref(p_xmdc003)
DEFINE p_xmdc003 LIKE xmdc_t.xmdc003
DEFINE r_imaal003 LIKE imaal_t.imaal003
INITIALIZE g_ref_fields TO NULL
LET g_ref_fields[1] = p_xmdc003
CALL ap_ref_array2(g_ref_fields,"SELECT imaal003 FROM imaal_t WHERE imaalent='"||g_enterprise||"' AND imaal001=? AND imaal002='"||g_dlang||"'","") RETURNING g_rtn_fields
LET r_imaal003 = '', g_rtn_fields[1] , ''
DISPLAY BY NAME g_xmdc2_d[l_ac].xmdc003_desc
RETURN r_imaal003
END FUNCTION
7.项次自增
在 axmt500 xxxx_input
> DIALOG
> BEFORE INSERT
下的 #項次加1
处可以捞到代码:
#項次加1
SELECT MAX(xmdcseq)+1 INTO g_xmdc_d[l_ac].xmdcseq FROM xmdc_t
WHERE xmdcent = g_enterprise AND xmdcdocno = g_xmda_m.xmdadocno
IF cl_null(g_xmdc_d[l_ac].xmdcseq) OR g_xmdc_d[l_ac].xmdcseq = 0 THEN
LET g_xmdc_d[l_ac].xmdcseq = 1
END IF
8.数值计算
字段数据变化时计算数值
#add-point:AFTER FIELD xmzzuc007 name="input.a.page1.xmzzuc007"
#当[数量]和[单价]都不为空的时候,才会去计算 add by lzy
IF NOT cl_null(g_xmzzuc_d[l_ac].xmzzuc007) AND NOT cl_null(g_xmzzuc_d[l_ac].xmzzuc003) THEN
# s_axmt500_get_amount_2 是个公共函数,用来计算 未税金额、含税金额、税额
CALL s_axmt500_get_amount_2(g_xmzzuc_d[l_ac].xmzzuc003,g_xmzzuc_d[l_ac].xmzzuc007,g_xmzzuc_d[l_ac].xmzzuc005,g_xmzyuc_m.xmzyuc007,g_xmzyuc_m.xmzyuc010)
RETURNING g_xmzzuc_d[l_ac].xmzzuc009,g_xmzzuc_d[l_ac].xmzzuc008,g_xmzzuc_d[l_ac].xmzzuc010
END IF
DISPLAY BY NAME g_xmzzuc_d[l_ac].xmzzuc009,g_xmzzuc_d[l_ac].xmzzuc008,g_xmzzuc_d[l_ac].xmzzuc010 #显示到界面上
#END add-point
Q查询:在 xxxx_b_fill
方法中写SQL语句,将查询到的数值赋值给单身字段
详细参考下面的单身填充
9..单身预设值
有的时候单身的数据要和单头数据保持一致,我们在BEFORE INSERT中可设置初始值
#让单身的[税种]和单头的[税种]保持一致 add by lzy
LET g_xmzzuc_d[l_ac].xmzzuc005 = g_xmzyuc_m.xmzyuc006
#让单身的[税率]和单头的[税率]保持一致 add by lzy
LET g_xmzzuc_d[l_ac].xmzzuc006 = g_xmzyuc_m.xmzyuc008
10.单身填充
a.修改sql语句:字段的顺序和数量和单身中显示的字段保持一致;左连接的数据表写全;可以实现相同数据表的相同字段的不同情况下显示的数据(参考上图)
b.参考字段填充:
自定义sql(获取参考字段的SQL)
LET l_sql = "SELECT oodbl004 FROM oodbl_t,ooef_t ",
" WHERE oodblent = '",g_enterprise,"' ",
" AND ooefent = oodblent ",
" AND ooef001 = '",g_site,"' ",
" AND ooef019 = oodbl001 ",
" AND oodbl002 = ? ",
" AND oodbl003 = '",g_dlang,"' "
PREPARE axmt500_get_tax_desc1_prep FROM l_sql
在遍历中加入参考字段的赋值:
EXECUTE axmt500_get_tax_desc1_prep USING g_xmdc_d[l_ac].xmdc016
INTO g_xmdc_d[l_ac].xmdc016_desc
c.SUM填充
个人觉得:这样速度比较慢,考虑优化方案
SELECT sum(xmdc007) INTO g_xmda_d[l_ac].l_xmdc007_sum1
FROM xmda_t
LEFT JOIN xmdd_t ON xmddent = g_enterprise AND xmdddocno = xmdadocno
LEFT JOIN xmdc_t ON xmdcent = g_enterprise AND xmdcdocno = xmdadocno
LEFT JOIN imaa_t ON imaa001 = xmdc001 AND imaaent = xmdaent
WHERE xmdaent= g_enterprise AND 1=1 AND TO_CHAR(xmdd011,'yyyy-MM') < TO_CHAR(l_date,'yyyy-MM')
AND xmda004= g_xmda_d[l_ac].xmda004 AND imaa135 = g_xmda_d[l_ac].imaa135
11.按钮功能设置
cl_set_act_visible()
:用于设置功能是否显现
# N未確認/D抽單/R已拒絕允許修改
IF g_xmda_m.xmdastus NOT MATCHES "[NDR]" THEN
CALL cl_set_act_visible("modify,modify_detail,delete", FALSE)
CALL cl_set_act_visible("open_apmi004_01,open_xmdb,open_axmt500_03,open_axmt500_05,get_price", FALSE)
CALL cl_set_act_visible("s_item_select", FALSE)
END IF
12.XG报表
主程式中加入对子报表的调用:
子报表在XXX_x01_ins_data()中写select 语句,或者在XXX_x01_sel_prep()中写select 语句
13.临时表
方式一:自定义FUNCTION:声明临时表:在XXX_init()中调用;在需要的地方写INSERT语句
方式二:参考XG报表创建临时表
14.凭证报表
调用方式参考XG报表
在XXX_g02_sel_prep()中写入select语句
在 XXX_g02_ins_data ()中写自定义字段的赋值
SELECT sum(xmemuc007*xmenuc008)+0.5 INTO sr_s.l_grossweight
from xmemuc_t
LEFT JOIN xmenuc_t ON xmemuc_t.xmemucent = xmenuc_t.xmenucent AND xmemuc_t.xmemucdocno = xmenuc_t.xmenucdocno AND xmemuc001 = xmenuc001 AND xmemuc002 = xmenuc002 AND xmemuc003 = xmenuc003
WHERE xmenuc_t.xmenucdocno = sr_s.xmelucdocno
AND xmenuc010 = sr_s.xmenuc010
GROUP BY xmemucdocno,xmenuc010
实现过程中遇到的问题见上一篇(现阶段一直更新)