getid.srf 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  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 = 'G1' THEN //工序派工单成组号
  22. ls_datestyle = 'yymmdd'
  23. ls_firststr = argctg
  24. ELSEIF argctg = 'P' THEN
  25. ls_datestyle = 'pbarcode'
  26. ls_firststr = argctg
  27. ELSEIF Left(argctg,7) = 'BARCODE' THEN
  28. ls_datestyle = 'yy'
  29. ls_firststr = Right(argctg,1)
  30. ELSEIF argctg = 'OUT' THEN
  31. ls_datestyle = 'yy'
  32. ls_firststr = argctg
  33. ELSE
  34. SELECT datestyle,firststr
  35. INTO :ls_datestyle,:ls_firststr
  36. FROM u_billcode
  37. WHERE oldfirststr = :ls_oldfirststr
  38. Using arg_transaction;
  39. IF arg_transaction.SQLCode = -1 THEN
  40. ROLLBACK Using arg_transaction;
  41. rslt = "err"
  42. GOTO ext
  43. elseif arg_transaction.SQLCode = 100 THEN
  44. ls_firststr = ''
  45. ls_datestyle = 'yymmdd'
  46. END IF
  47. IF Trim(ls_firststr) = '' THEN
  48. ls_firststr = ls_oldfirststr
  49. END IF
  50. ls_firststr = ls_sccode + ls_firststr
  51. END IF
  52. //
  53. rslt = String(argDate,Trim(ls_datestyle))
  54. CHOOSE CASE ls_datestyle
  55. CASE 'yymmdd'
  56. UPDATE u_bsnno
  57. SET nmbr = nmbr + 1
  58. WHERE opDate = :d1
  59. AND typecode = :ls_firststr
  60. AND scid = :argscid
  61. And status = 0 Using arg_transaction;
  62. IF arg_transaction.SQLCode <> 0 THEN
  63. ROLLBACK Using arg_transaction ;
  64. rslt = "err"
  65. GOTO ext
  66. END IF
  67. IF arg_transaction.SQLNRows = 0 THEN
  68. INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
  69. Values (:argscid, :d1, :ls_firststr, 1, 0) Using arg_transaction;
  70. IF arg_transaction.SQLCode <> 0 THEN
  71. ROLLBACK Using arg_transaction ;
  72. rslt = "err"
  73. GOTO ext
  74. END IF
  75. END IF
  76. SELECT nmbr
  77. INTO :ll_nmbr
  78. FROM u_bsnno
  79. WHERE opDate = :d1
  80. AND typecode = :ls_firststr
  81. AND scid = :argscid
  82. And status = 0 Using arg_transaction;
  83. IF argctg = 'TXM' or argctg = 'G1' THEN
  84. rslt = rslt + String(ll_nmbr,"00000")
  85. ELSE
  86. rslt = ls_firststr + rslt + String(ll_nmbr,"000")
  87. END IF
  88. CASE 'yymm'
  89. d2 = DateTime(Date(String(Year(argDate)) + '-' + String(Month(argDate)) + '-01'))
  90. UPDATE u_bsnno SET nmbr = nmbr + 1 WHERE opDate = :d2 AND typecode = :ls_firststr
  91. And scid = :argscid And status = 1 Using arg_transaction;
  92. IF arg_transaction.SQLCode <> 0 THEN
  93. ROLLBACK Using arg_transaction ;
  94. rslt = "err"
  95. GOTO ext
  96. END IF
  97. IF arg_transaction.SQLNRows = 0 THEN
  98. INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
  99. Values (:argscid, :d2, :ls_firststr, 1, 1) Using arg_transaction;
  100. IF arg_transaction.SQLCode <> 0 THEN
  101. ROLLBACK Using arg_transaction ;
  102. rslt = "err"
  103. GOTO ext
  104. END IF
  105. END IF
  106. SELECT nmbr
  107. INTO :ll_nmbr
  108. FROM u_bsnno
  109. WHERE opDate = :d2
  110. AND typecode = :ls_firststr
  111. AND scid = :argscid
  112. And status = 1 Using arg_transaction;
  113. rslt = ls_firststr + rslt + String(ll_nmbr,"00000")
  114. CASE 'yy'
  115. d2 = DateTime(Date(String(Year(argDate)) + '-01-01'))
  116. UPDATE u_bsnno
  117. SET nmbr = nmbr + 1
  118. WHERE opDate = :d2
  119. AND typecode = :ls_firststr
  120. AND scid = :argscid
  121. And status = 2 Using arg_transaction;
  122. IF arg_transaction.SQLCode <> 0 THEN
  123. ROLLBACK Using arg_transaction ;
  124. rslt = "err"
  125. GOTO ext
  126. END IF
  127. IF arg_transaction.SQLNRows = 0 THEN
  128. INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
  129. Values (:argscid, :d2, :ls_firststr, 1, 2) Using arg_transaction;
  130. IF arg_transaction.SQLCode <> 0 THEN
  131. ROLLBACK Using arg_transaction ;
  132. rslt = "err"
  133. GOTO ext
  134. END IF
  135. END IF
  136. SELECT nmbr
  137. INTO :ll_nmbr FROM u_bsnno
  138. WHERE opDate = :d2
  139. AND typecode = :ls_firststr
  140. AND scid = :argscid
  141. And status = 2 Using arg_transaction;
  142. IF Left(argctg,7) = 'BARCODE' THEN
  143. rslt = ls_firststr + rslt + String(ll_nmbr,"00000000")
  144. ELSEIF argctg = 'OUT' THEN
  145. rslt = rslt + String(ll_nmbr,"000000000")
  146. ELSE
  147. rslt = ls_firststr + rslt + String(ll_nmbr,"0000000")
  148. END IF
  149. CASE 'pbarcode'
  150. UPDATE u_bsnno
  151. SET nmbr = nmbr + 1
  152. WHERE typecode = :ls_firststr
  153. AND scid = :argscid
  154. And status = 0 Using arg_transaction;
  155. IF arg_transaction.SQLCode <> 0 THEN
  156. ROLLBACK Using arg_transaction ;
  157. rslt = "err"
  158. GOTO ext
  159. END IF
  160. IF arg_transaction.SQLNRows = 0 THEN
  161. INSERT INTO u_bsnno(scid, typecode, nmbr, status)
  162. Values (:argscid, :ls_firststr, 1, 0) Using arg_transaction;
  163. IF arg_transaction.SQLCode <> 0 THEN
  164. ROLLBACK Using arg_transaction ;
  165. rslt = "err"
  166. GOTO ext
  167. END IF
  168. END IF
  169. SELECT nmbr
  170. INTO :ll_nmbr
  171. FROM u_bsnno
  172. WHERE typecode = :ls_firststr
  173. And scid = :argscid Using arg_transaction;
  174. rslt = ls_firststr + String(ll_nmbr,"000000000")
  175. END CHOOSE
  176. IF rslt = '' THEN rslt = 'err'
  177. IF arg_ifcommit And rslt <> "err" THEN
  178. COMMIT Using arg_transaction;
  179. END IF
  180. ext:
  181. Return(rslt)
  182. end function