getid.srf 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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_billstyle,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. ls_billstyle = Right(argctg,2)
  15. d1 = DateTime(argDate)
  16. ls_sccode = Left(argctg,Len(argctg) - 2)
  17. //取新单号
  18. SELECT datestyle,firststr
  19. INTO :ls_datestyle,:ls_firststr
  20. FROM u_billcode
  21. WHERE left(billstyle,2) = :ls_billstyle
  22. USING arg_transaction;
  23. IF arg_transaction.SQLCode = -1 THEN
  24. ROLLBACK USING arg_transaction;
  25. rslt = "err"
  26. GOTO ext
  27. END IF
  28. IF ls_firststr = '' THEN
  29. ls_datestyle = 'yymmdd'
  30. ls_firststr = argctg
  31. ELSE
  32. ls_firststr = ls_sccode+ls_firststr
  33. END IF
  34. //
  35. rslt = String(argDate,Trim(ls_datestyle))
  36. CHOOSE CASE ls_datestyle
  37. CASE 'yymmdd'
  38. UPDATE u_bsnno
  39. SET nmbr = nmbr + 1
  40. WHERE opDate = :d1
  41. AND typecode = :ls_firststr
  42. AND scid = :argscid
  43. AND status = 0 USING arg_transaction;
  44. IF arg_transaction.SQLCode <> 0 THEN
  45. ROLLBACK USING arg_transaction ;
  46. rslt = "err"
  47. GOTO ext
  48. END IF
  49. IF arg_transaction.SQLNRows = 0 THEN
  50. INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
  51. Values (:argscid, :d1, :ls_firststr, 1, 0) USING arg_transaction;
  52. IF arg_transaction.SQLCode <> 0 THEN
  53. ROLLBACK USING arg_transaction ;
  54. rslt = "err"
  55. GOTO ext
  56. END IF
  57. END IF
  58. SELECT nmbr
  59. INTO :ll_nmbr
  60. FROM u_bsnno
  61. WHERE opDate = :d1
  62. AND typecode = :ls_firststr
  63. AND scid = :argscid
  64. AND status = 0 USING arg_transaction;
  65. rslt = ls_firststr + rslt + String(ll_nmbr,"000")
  66. CASE 'yymm'
  67. d2 = DateTime(Date(String(Year(argDate)) + '-' + String(Month(argDate)) + '-01'))
  68. UPDATE u_bsnno SET nmbr = nmbr + 1 WHERE opDate = :d2 AND typecode = :ls_firststr
  69. AND scid = :argscid AND status = 1 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. IF arg_transaction.SQLNRows = 0 THEN
  76. INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
  77. Values (:argscid, :d2, :ls_firststr, 1, 1) USING arg_transaction;
  78. IF arg_transaction.SQLCode <> 0 THEN
  79. ROLLBACK USING arg_transaction ;
  80. rslt = "err"
  81. GOTO ext
  82. END IF
  83. END IF
  84. SELECT nmbr
  85. INTO :ll_nmbr
  86. FROM u_bsnno
  87. WHERE opDate = :d2
  88. AND typecode = :ls_firststr
  89. AND scid = :argscid
  90. AND status = 1 USING arg_transaction;
  91. rslt = ls_firststr + rslt + String(ll_nmbr,"00000")
  92. CASE 'yy'
  93. d2 = DateTime(Date(String(Year(argDate)) + '-01-01'))
  94. UPDATE u_bsnno SET nmbr = nmbr + 1 WHERE opDate = :d2 AND typecode = :ls_firststr
  95. AND scid = :argscid AND status = 2 USING arg_transaction;
  96. IF arg_transaction.SQLCode <> 0 THEN
  97. ROLLBACK USING arg_transaction ;
  98. rslt = "err"
  99. GOTO ext
  100. END IF
  101. IF arg_transaction.SQLNRows = 0 THEN
  102. INSERT INTO u_bsnno(scid, opdate, typecode, nmbr, status)
  103. Values (:argscid, :d2, :ls_firststr, 1, 2) USING arg_transaction;
  104. IF arg_transaction.SQLCode <> 0 THEN
  105. ROLLBACK USING arg_transaction ;
  106. rslt = "err"
  107. GOTO ext
  108. END IF
  109. END IF
  110. SELECT nmbr
  111. INTO :ll_nmbr FROM u_bsnno
  112. WHERE opDate = :d2
  113. AND typecode = :ls_firststr
  114. AND scid = :argscid
  115. AND status = 2 USING arg_transaction;
  116. rslt = ls_firststr + rslt + String(ll_nmbr,"0000000")
  117. END CHOOSE
  118. IF rslt = '' then rslt="err"
  119. IF arg_ifcommit AND rslt <> "err" THEN
  120. COMMIT USING arg_transaction;
  121. END IF
  122. ext:
  123. RETURN(rslt)
  124. end function