TIPTOP ERP 如何客制单据别自动编码的应用

TIPTOP ERP 如何编程单据别自动编码的应用


注:一下方法 TIPTOP GP 5.25版本上才是这个架构

01、所谓单据别自动编码:指的就是需要根据系统参数设定的自动编码方式来生成单据的流水规则

          如采购单号、入库单号、工单号码..........

          这里以一个实例代码来说明做【单据别自动编码】在一个程序中哪些地方要修改

          ex:AAP应付系统 新 客制表 tc_oaa_file

                                                         tc_oaa01:单据别

                                                         tc_oaa02:单据日期

                                                         ......


02、设定基础资料:单据别

           TIPTOP ERP # Prog. Version..: '5.25.11-12.12.11(00010)'     #

TIPTOP ERP 如何客制单据别自动编码的应用_第1张图片

     ①。先在单据别作业里面先随便新增一个单据别,然后数据后台修改单别的性质为一个现有系统不使用的单据性质

            ex:这里在应付单据别apy_file新增 单据性质为66的单据别PP66

     ②。修改数据库表doc_file单别的性质与上面第①步里面一样

     ③。aooi800(gee_file)维护新客制表的信息


03、客制编码应用

#_a()新增函数-------------------------------------------------------------------
FUNCTION xxx_a()
   ......
   #INSERT之前CALL s_auto_assign_no()按编码规则生成单据编号
   CALL s_auto_assign_no("aap",g_tc_oaa.tc_oaa01,g_tc_oaa.tc_oaa02,"","tc_oaa_file","tc_oaa01","","","")
        RETURNING li_result,g_tc_oaa.tc_oaa01
   IF (NOT li_result) THEN
      CONTINUE WHILE
   END IF
   DISPLAY BY NAME g_tc_oaa.tc_oaa01
 
   INSERT INTO tc_oaa_file VALUES (g_tc_oaa.*)
   IF SQLCA.sqlcode THEN
      CALL cl_err3("ins","tc_oaa_file",g_tc_oaa.tc_oaa01,"",SQLCA.sqlcode,"","",1)
      CONTINUE WHILE
   END IF
   ......
END FUNCTION

#_i(p_cmd)输入单头信息(u/a)----------------------------------------------------
FUNCTION xxx_i(p_cmd)

   INPUT BY NAME g_tc_oaa.* 
      .....
      BEFORE INPUT
          .......
          CALL cl_set_docno_format("tc_oaa01")  #格式化单据别栏位,中间有个 "-" 符号

      ......    
      AFTER FIELD tc_oaa01        #主键key
           IF NOT cl_null(g_tc_oaa.tc_oaa01)
              AND (g_tc_oaa.tc_oaa01 <> g_tc_oaa_t.tc_oaa01 OR cl_null(g_tc_oaa_t.tc_oaa01)) THEN   
              LET g_t1 = s_get_doc_no(g_tc_oaa.tc_oaa01)  #检查单据别是否存在                       
              CALL s_check_no("aap",g_tc_oaa.tc_oaa01,g_tc_oaa_t.tc_oaa01,"66","tc_oaa_file","tc_oaa01","")
                 RETURNING li_result,g_tc_oaa.tc_oaa01
              DISPLAY BY NAME g_tc_oaa.tc_oaa01
              IF (NOT li_result) THEN
                 NEXT FIELD tc_oaa01
              END IF
           END IF 
      ......     
END FUNCTION




注:因为GP5.10下的版本自动编码没有这种灵活的架构,一般根据公司编码规则硬编码

一下提供#GP5.10单据别自动编码应用的demo:

#单据别编码,类似系统标准的s_auto_assign_no()函数功能
FUNCTION xxxxa_auto_assign_no()
   DEFINE li_result     LIKE type_file.num5,
          l_tc_oaa001   LIKE tc_oaa_file.tc_oaa001
   DEFINE l_oayslip     LIKE oay_file.oayslip,       
          l_date        LIKE type_file.chr1000,      #日期
          l_cnt         LIKE type_file.num10,        #資料庫中該單別當前年月是否有產生單據
          l_max_cn      LIKE type_file.num10,        #資料庫中該單別當前年月最大的流水編號
          l_max_str     STRING,
          l_max_cn_chr  LIKE type_file.chr4,
          indx          LIKE type_file.num5,      
          l_wc          LIKE type_file.chr1000       #查單別QBE
          
   LET l_oayslip = s_get_doc_no(g_tc_oaa.tc_oaa001)  #單據別
   LET l_date = g_today
   LET l_date = l_date[1,2],l_date[4,5]     #依年月編碼
   LET l_wc=l_oayslip,'-',l_date,'%'
   LET li_result = 1
   SELECT COUNT(*) INTO l_cnt
       FROM tc_oaa_file
       WHERE tc_oaa001 LIKE l_wc
   IF SQLCA.sqlcode THEN
      LET li_result = 0
      INITIALIZE l_tc_oaa001 TO NULL
   ELSE
     CASE
       WHEN SQLCA.sqlcode=0 AND l_cnt=0       #該單別當前年月未產生任何單據,則流水號碼別從0001開始
         LET l_tc_oaa001=l_oayslip,'-',l_date,'0001'   
       WHEN SQLCA.sqlcode=0 AND l_cnt>=1      #該單別當月已有單據存在,則流水號碼別自動+1
         SELECT MAX(substr(tc_oaa001,9,4)) INTO l_max_cn  #这里要注意下,假如单据是设定3码就是9,4码就是10,依此类推
           FROM tc_oaa_file
           WHERE tc_oaa001 LIKE l_wc 
         LET l_max_cn = l_max_cn+1
         LET l_max_str = l_max_cn USING "####"
         LET l_max_cn_chr = ''
         FOR indx = 1 TO l_max_str.getLength() STEP + 1
           IF cl_null(l_max_str.getCharAt(indx)) THEN
              LET l_max_cn_chr = l_max_cn_chr CLIPPED,"0"
           ELSE
              LET l_max_cn_chr = l_max_cn_chr CLIPPED,l_max_str.getCharAt(indx) CLIPPED
           END IF
         END FOR
         LET l_tc_oaa001 = l_oayslip CLIPPED,"-",l_date CLIPPED ,l_max_cn_chr
       OTHERWISE
         LET li_result = 0
         INITIALIZE l_tc_oaa001 TO NULL
     END CASE
   END IF
          
   RETURN li_result,l_tc_oaa001
END FUNCTION


http://blog.csdn.net/yihuiworld



你可能感兴趣的:(ERP,ERP实施,Tiptop,4gl,易拓,鼎捷)