getid.srf 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. $PBExportHeader$getid.srf
  2. global type getid from function_object
  3. end type
  4. forward prototypes
  5. global function string getid (long argscid, string argctg, date argdate, boolean arg_ifcommit, transaction arg_transaction)
  6. end prototypes
  7. global function string getid (long argscid, string argctg, date argdate, boolean arg_ifcommit, transaction arg_transaction);// 函数获取一个新的业务编号
  8. String rslt,ls_oldfirststr,ls_datestyle ,ls_typecode,ls_firststr
  9. Long cnt,id
  10. DateTime d1,d2
  11. Long ll_nmbr
  12. String ls_sccode
  13. argctg = Upper(Trim(argctg))
  14. d1 = DateTime(argDate)
  15. ls_oldfirststr = Right(argctg,2)
  16. ls_sccode = Left(argctg,Len(argctg) - 2)
  17. //取新单号
  18. IF argctg = 'TXM' THEN
  19. ls_datestyle = 'yymmdd'
  20. ls_firststr = argctg
  21. elseif argctg = 'P' then
  22. ls_datestyle = 'pbarcode'
  23. ls_firststr = argctg
  24. ELSE
  25. SELECT datestyle,firststr
  26. INTO :ls_datestyle,:ls_firststr
  27. FROM u_billcode
  28. WHERE oldfirststr = :ls_oldfirststr
  29. USING arg_transaction;
  30. IF arg_transaction.SQLCode <> 0 THEN
  31. ROLLBACK USING arg_transaction;
  32. rslt = "err"
  33. GOTO ext
  34. END IF
  35. IF Trim(ls_firststr) = '' THEN
  36. ls_firststr = ls_oldfirststr
  37. END IF
  38. ls_firststr = ls_sccode + ls_firststr
  39. END IF
  40. //
  41. rslt = String(argDate,Trim(ls_datestyle))
  42. CHOOSE CASE ls_datestyle
  43. CASE 'yymmdd'
  44. UPDATE u_bsnno
  45. SET nmbr = nmbr + 1
  46. WHERE opDate = :d1
  47. AND typecode = :ls_firststr
  48. AND scid = :argscid
  49. AND status = 0 USING arg_transaction;
  50. IF arg_transaction.SQLCode <> 0 THEN
  51. ROLLBACK USING arg_transaction ;
  52. rslt = "err"
  53. GOTO ext
  54. END IF
  55. IF arg_transaction.SQLNRows = 0 THEN
  56. INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
  57. Values (:argscid, :d1, :ls_firststr, 1, 0) USING arg_transaction;
  58. IF arg_transaction.SQLCode <> 0 THEN
  59. ROLLBACK USING arg_transaction ;
  60. rslt = "err"
  61. GOTO ext
  62. END IF
  63. END IF
  64. SELECT nmbr
  65. INTO :ll_nmbr
  66. FROM u_bsnno
  67. WHERE opDate = :d1
  68. AND typecode = :ls_firststr
  69. AND scid = :argscid
  70. AND status = 0 USING arg_transaction;
  71. IF argctg = 'TXM' THEN
  72. rslt = rslt + String(ll_nmbr,"00000")
  73. ELSE
  74. rslt = ls_firststr + rslt + String(ll_nmbr,"000")
  75. END IF
  76. CASE 'yymm'
  77. d2 = DateTime(Date(String(Year(argDate)) + '-' + String(Month(argDate)) + '-01'))
  78. UPDATE u_bsnno SET nmbr = nmbr + 1 WHERE opDate = :d2 AND typecode = :ls_firststr
  79. AND scid = :argscid AND status = 1 USING arg_transaction;
  80. IF arg_transaction.SQLCode <> 0 THEN
  81. ROLLBACK USING arg_transaction ;
  82. rslt = "err"
  83. GOTO ext
  84. END IF
  85. IF arg_transaction.SQLNRows = 0 THEN
  86. INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
  87. Values (:argscid, :d2, :ls_firststr, 1, 1) USING arg_transaction;
  88. IF arg_transaction.SQLCode <> 0 THEN
  89. ROLLBACK USING arg_transaction ;
  90. rslt = "err"
  91. GOTO ext
  92. END IF
  93. END IF
  94. SELECT nmbr
  95. INTO :ll_nmbr
  96. FROM u_bsnno
  97. WHERE opDate = :d2
  98. AND typecode = :ls_firststr
  99. AND scid = :argscid
  100. AND status = 1 USING arg_transaction;
  101. rslt = ls_firststr + rslt + String(ll_nmbr,"00000")
  102. CASE 'yy'
  103. d2 = DateTime(Date(String(Year(argDate)) + '-01-01'))
  104. UPDATE u_bsnno SET nmbr = nmbr + 1 WHERE opDate = :d2 AND typecode = :ls_firststr
  105. AND scid = :argscid AND status = 2 USING arg_transaction;
  106. IF arg_transaction.SQLCode <> 0 THEN
  107. ROLLBACK USING arg_transaction ;
  108. rslt = "err"
  109. GOTO ext
  110. END IF
  111. IF arg_transaction.SQLNRows = 0 THEN
  112. INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
  113. Values (:argscid, :d2, :ls_firststr, 1, 2) USING arg_transaction;
  114. IF arg_transaction.SQLCode <> 0 THEN
  115. ROLLBACK USING arg_transaction ;
  116. rslt = "err"
  117. GOTO ext
  118. END IF
  119. END IF
  120. SELECT nmbr
  121. INTO :ll_nmbr FROM u_bsnno
  122. WHERE opDate = :d2
  123. AND typecode = :ls_firststr
  124. AND scid = :argscid
  125. AND status = 2 USING arg_transaction;
  126. rslt = ls_firststr + rslt + String(ll_nmbr,"0000000")
  127. case 'pbarcode'
  128. UPDATE u_bsnno
  129. SET nmbr = nmbr + 1
  130. WHERE typecode = :ls_firststr
  131. AND scid = :argscid
  132. AND status = 0 USING arg_transaction;
  133. IF arg_transaction.SQLCode <> 0 THEN
  134. ROLLBACK USING arg_transaction ;
  135. rslt = "err"
  136. GOTO ext
  137. END IF
  138. IF arg_transaction.SQLNRows = 0 THEN
  139. INSERT INTO u_bsnno(scid, typecode, nmbr, status)
  140. Values (:argscid, :ls_firststr, 1, 0) USING arg_transaction;
  141. IF arg_transaction.SQLCode <> 0 THEN
  142. ROLLBACK USING arg_transaction ;
  143. rslt = "err"
  144. GOTO ext
  145. END IF
  146. END IF
  147. SELECT nmbr
  148. INTO :ll_nmbr
  149. FROM u_bsnno
  150. WHERE typecode = :ls_firststr
  151. AND scid = :argscid USING arg_transaction;
  152. rslt = ls_firststr + String(ll_nmbr,"000000000")
  153. END CHOOSE
  154. IF rslt = '' THEN rslt = 'err'
  155. IF arg_ifcommit AND rslt <> "err" THEN
  156. COMMIT USING arg_transaction;
  157. END IF
  158. ext:
  159. RETURN(rslt)
  160. end function