123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- $PBExportHeader$getid.srf
- global type getid from function_object
- end type
- forward prototypes
- global function string getid (long argscid, string argctg, date argdate, boolean arg_ifcommit, transaction arg_transaction)
- end prototypes
- global function string getid (long argscid, string argctg, date argdate, boolean arg_ifcommit, transaction arg_transaction);// 函数获取一个新的业务编号
- String rslt,ls_billstyle,ls_datestyle ,ls_typecode,ls_firststr
- Long cnt,id
- DateTime d1,d2
- Long ll_nmbr
- string ls_sccode
- argctg = Upper(Trim(argctg))
- ls_billstyle = Right(argctg,2)
- d1 = DateTime(argDate)
- ls_sccode = Left(argctg,Len(argctg) - 2)
- //取新单号
- SELECT datestyle,firststr
- INTO :ls_datestyle,:ls_firststr
- FROM u_billcode
- WHERE left(billstyle,2) = :ls_billstyle
- USING arg_transaction;
- IF arg_transaction.SQLCode = -1 THEN
- ROLLBACK USING arg_transaction;
- rslt = "err"
- GOTO ext
- END IF
- IF ls_firststr = '' THEN
- ls_datestyle = 'yymmdd'
- ls_firststr = argctg
- ELSE
- ls_firststr = ls_sccode+ls_firststr
- END IF
- //
- rslt = String(argDate,Trim(ls_datestyle))
- CHOOSE CASE ls_datestyle
- CASE 'yymmdd'
- UPDATE u_bsnno
- SET nmbr = nmbr + 1
- WHERE opDate = :d1
- AND typecode = :ls_firststr
- AND scid = :argscid
- AND status = 0 USING arg_transaction;
-
- IF arg_transaction.SQLCode <> 0 THEN
- ROLLBACK USING arg_transaction ;
- rslt = "err"
- GOTO ext
- END IF
-
- IF arg_transaction.SQLNRows = 0 THEN
- INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
- Values (:argscid, :d1, :ls_firststr, 1, 0) USING arg_transaction;
-
- IF arg_transaction.SQLCode <> 0 THEN
- ROLLBACK USING arg_transaction ;
- rslt = "err"
- GOTO ext
- END IF
- END IF
-
- SELECT nmbr
- INTO :ll_nmbr
- FROM u_bsnno
- WHERE opDate = :d1
- AND typecode = :ls_firststr
- AND scid = :argscid
- AND status = 0 USING arg_transaction;
-
- rslt = ls_firststr + rslt + String(ll_nmbr,"000")
-
- CASE 'yymm'
- d2 = DateTime(Date(String(Year(argDate)) + '-' + String(Month(argDate)) + '-01'))
-
- UPDATE u_bsnno SET nmbr = nmbr + 1 WHERE opDate = :d2 AND typecode = :ls_firststr
- AND scid = :argscid AND status = 1 USING arg_transaction;
-
- IF arg_transaction.SQLCode <> 0 THEN
- ROLLBACK USING arg_transaction ;
- rslt = "err"
- GOTO ext
- END IF
-
- IF arg_transaction.SQLNRows = 0 THEN
- INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
- Values (:argscid, :d2, :ls_firststr, 1, 1) USING arg_transaction;
-
- IF arg_transaction.SQLCode <> 0 THEN
- ROLLBACK USING arg_transaction ;
- rslt = "err"
- GOTO ext
- END IF
- END IF
-
- SELECT nmbr
- INTO :ll_nmbr
- FROM u_bsnno
- WHERE opDate = :d2
- AND typecode = :ls_firststr
- AND scid = :argscid
- AND status = 1 USING arg_transaction;
-
- rslt = ls_firststr + rslt + String(ll_nmbr,"00000")
- CASE 'yy'
- d2 = DateTime(Date(String(Year(argDate)) + '-01-01'))
-
- UPDATE u_bsnno SET nmbr = nmbr + 1 WHERE opDate = :d2 AND typecode = :ls_firststr
- AND scid = :argscid AND status = 2 USING arg_transaction;
-
- IF arg_transaction.SQLCode <> 0 THEN
- ROLLBACK USING arg_transaction ;
- rslt = "err"
- GOTO ext
- END IF
-
- IF arg_transaction.SQLNRows = 0 THEN
- INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
- Values (:argscid, :d2, :ls_firststr, 1, 2) USING arg_transaction;
-
- IF arg_transaction.SQLCode <> 0 THEN
- ROLLBACK USING arg_transaction ;
- rslt = "err"
- GOTO ext
- END IF
- END IF
-
- SELECT nmbr
- INTO :ll_nmbr FROM u_bsnno
- WHERE opDate = :d2
- AND typecode = :ls_firststr
- AND scid = :argscid
- AND status = 2 USING arg_transaction;
-
- rslt = ls_firststr + rslt + String(ll_nmbr,"0000000")
- END CHOOSE
- IF rslt = '' then rslt="err"
- IF arg_ifcommit AND rslt <> "err" THEN
- COMMIT USING arg_transaction;
- END IF
- ext:
- RETURN(rslt)
- end function
|