getid_saletask.srf 4.6 KB

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