T100 常用代码段

目录

1.提示报错信息

2.开窗设置

3.字段下拉框

4.单头预设值

5.校验帯值

6.显示参考字段值

7.项次自增

8.数值计算

9..单身预设值

10.单身填充

11.按钮功能设置

12.XG报表

13.临时表

14.凭证报表


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

实现过程中遇到的问题见上一篇(现阶段一直更新)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值