uo_sc_task_finish.sru 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. $PBExportHeader$uo_sc_task_finish.sru
  2. forward
  3. global type uo_sc_task_finish from uo_transactionobject
  4. end type
  5. end forward
  6. global type uo_sc_task_finish from uo_transactionobject
  7. end type
  8. global uo_sc_task_finish uo_sc_task_finish
  9. type variables
  10. end variables
  11. forward prototypes
  12. public function integer uf_finishbarcode (long arg_wrkgrpid[], string arg_barcode[], datetime arg_opdate[], ref string arg_msg)
  13. end prototypes
  14. public function integer uf_finishbarcode (long arg_wrkgrpid[], string arg_barcode[], datetime arg_opdate[], ref string arg_msg);uo_finish uo_finish_wg
  15. uo_finish_wg = Create uo_finish
  16. Int rslt = 1
  17. Long ll_i, ll_j
  18. Long arr_wrkgrpid[]
  19. Long ll_cnt = 0
  20. Long ll_scid
  21. Long ll_wagemth
  22. String arr_taskcode[]
  23. Decimal arr_qty[]
  24. Boolean arr_task[]
  25. Long arr_taskid[]
  26. Long arr_empid[]
  27. Long arr_workgroupid[]
  28. Decimal arr_workprice[]
  29. String arr_procode[]
  30. String arr_proname[]
  31. Long arr_wageid[]
  32. Long arr_scid[]
  33. Long ll_mxcnt
  34. s_finish_mx s_mx[],s_empty[]
  35. // 汇总工组
  36. FOR ll_i = 1 To UpperBound(arg_wrkgrpid)
  37. arr_task[ll_i] = False
  38. SELECT relcode, qty, scid
  39. INTO :arr_taskcode[ll_i], :arr_qty[ll_i], :arr_scid[ll_i]
  40. FROM u_ordermtrl_workgroup_barcode
  41. Where barcode = :arg_barcode[ll_i] And swkpid = :arg_wrkgrpid[ll_i];
  42. IF sqlca.SQLCode <> 0 THEN
  43. rslt = 0
  44. arg_msg = '查询工序派工单号失败,' + sqlca.SQLErrText
  45. GOTO ext
  46. END IF
  47. IF arr_taskcode[ll_i] <> '' THEN
  48. SELECT u_sc_task.taskid,
  49. u_sc_task.empid,
  50. u_sc_task.workgroupid,
  51. ISNULL(U_OrderRqwp.workPrice, 0),
  52. u_sc_task.procode,
  53. u_sc_task.proname
  54. INTO :arr_taskid[ll_i],
  55. :arr_empid[ll_i],
  56. :arr_workgroupid[ll_i],
  57. :arr_workprice[ll_i],
  58. :arr_procode[ll_i],
  59. :arr_proname[ll_i]
  60. FROM u_sc_task LEFT OUTER JOIN
  61. U_OrderRqwp ON u_sc_task.scid = U_OrderRqwp.scid AND
  62. u_sc_task.orderid = U_OrderRqwp.orderid AND
  63. u_sc_task.mtrlid = U_OrderRqwp.Mtrlid AND
  64. u_sc_task.procode = U_OrderRqwp.Procode
  65. Where u_sc_task.taskcode = :arr_taskcode[ll_i];
  66. IF sqlca.SQLCode <> 0 THEN
  67. rslt = 0
  68. arg_msg = '查询工序派工单信息失败,' +sqlca.SQLErrText
  69. GOTO ext
  70. END IF
  71. arr_wageid[ll_i] = 0
  72. IF arr_empid[ll_i] > 0 Or (arr_empid[ll_i] = 0 And arr_workgroupid[ll_i] = 0 ) THEN
  73. SELECT top 1 wageid
  74. INTO :arr_wageid[ll_i]
  75. FROM u_gz_wageitem
  76. WHERE (u_gz_wageitem.wagemode = 12 ) AND
  77. ( u_gz_wageitem.useflag = 1 ) ;
  78. IF sqlca.SQLCode <> 0 THEN
  79. arr_wageid[ll_i] = 0
  80. END IF
  81. ELSEIF arr_workgroupid[ll_i] > 0 THEN
  82. SELECT top 1 wageid
  83. INTO :arr_wageid[ll_i]
  84. FROM u_gz_wageitem
  85. WHERE (u_gz_wageitem.wagemode = 16 ) AND
  86. ( u_gz_wageitem.useflag = 1 ) ;
  87. IF sqlca.SQLCode <> 0 THEN
  88. arr_wageid[ll_i] = 0
  89. END IF
  90. END IF
  91. arr_task[ll_i] = True
  92. FOR ll_j = 1 To ll_cnt
  93. IF arr_wrkgrpid[ll_j] = arg_wrkgrpid[ll_i] THEN
  94. GOTO _next
  95. END IF
  96. NEXT
  97. ll_cnt++
  98. arr_wrkgrpid[ll_cnt] = arg_wrkgrpid[ll_i]
  99. END IF
  100. _next:
  101. NEXT
  102. Long arr_opdate[], empty_opdate[]
  103. Long ll_k
  104. FOR ll_i = 1 To ll_cnt
  105. ll_scid = 0 // TODO: 获取分部
  106. arr_opdate = empty_opdate
  107. FOR ll_j = 1 To UpperBound(arg_wrkgrpid)
  108. IF arr_task[ll_j] And &
  109. arg_wrkgrpid[ll_j] = arr_wrkgrpid[ll_i] THEN
  110. ll_scid = arr_scid[ll_j]
  111. FOR ll_k = 1 To UpperBound(arr_opdate)
  112. IF Long(String(arg_opdate[ll_j], 'yyyyMM')) = arr_opdate[ll_k] THEN
  113. GOTO _nextbarcode
  114. END IF
  115. NEXT
  116. arr_opdate[UpperBound(arr_opdate) + 1] = Long(String(arg_opdate[ll_j], 'yyyyMM'))
  117. END IF
  118. _nextbarcode:
  119. NEXT
  120. ll_wagemth = 0 // TODO: 获取工资月份
  121. FOR ll_k = 1 To UpperBound(arr_opdate)
  122. ll_wagemth = arr_opdate[ll_k]
  123. IF uo_finish_wg.newbegin(ll_scid,arg_msg) = 0 THEN
  124. rslt = 0
  125. GOTO ext
  126. END IF
  127. uo_finish_wg.scid = ll_scid
  128. uo_finish_wg.relcode = ''
  129. uo_finish_wg.assign_emp = publ_operator
  130. uo_finish_wg.wrkgrpid = arr_wrkgrpid[ll_i]
  131. uo_finish_wg.wagemth = ll_wagemth
  132. uo_finish_wg.dscrp = ''
  133. uo_finish_wg.finishdate = DateTime(Today(),Now())
  134. ll_mxcnt = 0
  135. s_mx = s_empty
  136. FOR ll_j = 1 To UpperBound(arg_wrkgrpid)
  137. IF arr_task[ll_j] And &
  138. arg_wrkgrpid[ll_j] = arr_wrkgrpid[ll_i] And &
  139. Long(String(arg_opdate[ll_j], 'yyyyMM')) = arr_opdate[ll_k] THEN
  140. ll_mxcnt++
  141. s_mx[ll_mxcnt].taskid = arr_taskid[ll_j]
  142. s_mx[ll_mxcnt].printid = ll_mxcnt
  143. s_mx[ll_mxcnt].comqty = arr_qty[ll_j]
  144. s_mx[ll_mxcnt].mxdscrp = ''
  145. s_mx[ll_mxcnt].wageid = arr_wageid[ll_j]
  146. s_mx[ll_mxcnt].empid = arr_empid[ll_j]
  147. s_mx[ll_mxcnt].workgroupid = arr_workgroupid[ll_j]
  148. s_mx[ll_mxcnt].workPrice = arr_workprice[ll_j]
  149. s_mx[ll_mxcnt].procode = arr_procode[ll_j]
  150. s_mx[ll_mxcnt].proname = arr_proname[ll_j]
  151. s_mx[ll_mxcnt].storageid = 0
  152. END IF
  153. NEXT
  154. IF uo_finish_wg.Save(s_mx,arg_msg,False) = 0 THEN
  155. rslt = 0
  156. GOTO ext
  157. END IF
  158. NEXT
  159. NEXT
  160. GOTO ext
  161. ext:
  162. Destroy uo_finish_wg
  163. IF rslt = 1 THEN
  164. COMMIT;
  165. ELSE
  166. ROLLBACK;
  167. END IF
  168. RETURN rslt
  169. end function
  170. on uo_sc_task_finish.create
  171. call super::create
  172. end on
  173. on uo_sc_task_finish.destroy
  174. call super::destroy
  175. end on