所谓单据别自动编码:指的就是需要根据系统参数设定的自动编码方式来生成单据的流水规则
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
#单据别编码,类似系统标准的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
转载请注明:赫非域 » 如何写单据别自动编码应用