uo_taskwork_hz.sru 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894
  1. $PBExportHeader$uo_taskwork_hz.sru
  2. forward
  3. global type uo_taskwork_hz from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_taskwork_hz from nonvisualobject
  7. end type
  8. global uo_taskwork_hz uo_taskwork_hz
  9. type variables
  10. Long uo_billid
  11. String uo_billcode
  12. Int uo_option_taskwork_procode_order
  13. end variables
  14. forward prototypes
  15. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg)
  16. public function integer p_getflag (long arg_billid, ref long arg_flag, ref string arg_msg)
  17. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer updatebegin (long arg_billid, ref string arg_msg)
  19. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  20. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer save (s_taskwork_hz arg_s_taskwork, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  22. public function integer getinfo (long arg_billid, ref s_taskwork_hz_mx arg_s_mx[], ref long arg_arr_cnt, ref s_taskwork_hz_ordermx arg_s_ordermx[], ref long arg_arr_cntmx, ref string arg_msg)
  23. end prototypes
  24. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);
  25. Int rslt = 1
  26. long ll_flag
  27. IF arg_newdescppart = '' THEN
  28. rslt = 0
  29. arG_MSG = "要添加内容为空,操作取消"
  30. GOTO ext
  31. END IF
  32. IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN
  33. rslt = 0
  34. GOTO ext
  35. END IF
  36. IF ll_flag = 0 THEN
  37. rslt = 0
  38. arG_MSG = "待审核状态下不可用"
  39. GOTO ext
  40. END IF
  41. UPDATE u_taskwork_hz
  42. SET DSCRP = DSCRP+' '+:arg_newdescppart
  43. WHERE u_taskwork_hz.billid = :arg_billid;
  44. IF SQLCA.SQLCode <> 0 THEN
  45. rslt = 0
  46. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  47. GOTO ext
  48. END IF
  49. ext:
  50. IF rslt = 1 THEN
  51. COMMIT;
  52. ELSE
  53. ROLLBACK;
  54. END IF
  55. Return (rslt)
  56. end function
  57. public function integer p_getflag (long arg_billid, ref long arg_flag, ref string arg_msg);Int rslt = 1
  58. SELECT flag
  59. INTO :arg_flag
  60. FROM u_taskwork_hz
  61. WHERE billid = :arg_billid;
  62. IF sqlca.SQLCode <> 0 THEN
  63. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  64. rslt = 0
  65. GOTO ext
  66. END IF
  67. ext:
  68. RETURN rslt
  69. end function
  70. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);int rslt = 1
  71. long ll_flag
  72. if arg_billid <= 0 then
  73. rslt = 0
  74. arg_msg = '错误单据唯一码'
  75. GOTO ext
  76. END IF
  77. IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN
  78. rslt = 0
  79. GOTO ext
  80. END IF
  81. if ll_flag <> 0 then
  82. rslt = 0
  83. arg_msg = '单据不是在待审核状态,不能删除'
  84. GOTO ext
  85. END IF
  86. DELETE FROM u_taskwork_hz_mx
  87. WHERE billid = :arg_billid;
  88. IF sqlca.SQLCode <> 0 THEN
  89. rslt = 0
  90. arg_msg = "删除单据工序明细操作失败"+"~n"+sqlca.SQLErrText
  91. GOTO ext
  92. END IF
  93. DELETE FROM u_taskwork_hz_ordermx
  94. WHERE billid = :arg_billid;
  95. IF sqlca.SQLCode <> 0 THEN
  96. rslt = 0
  97. arg_msg = "删除单据计划明细操作失败"+"~n"+sqlca.SQLErrText
  98. GOTO ext
  99. END IF
  100. DELETE FROM u_taskwork_hz
  101. WHERE billid = :arg_billid
  102. AND flag = 0;
  103. IF sqlca.SQLCode <> 0 THEN
  104. rslt = 0
  105. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  106. GOTO ext
  107. END IF
  108. ext:
  109. IF rslt = 0 THEN
  110. ROLLBACK;
  111. ELSEIF rslt = 1 AND arg_ifcommit THEN
  112. COMMIT;
  113. END IF
  114. RETURN rslt
  115. end function
  116. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  117. long li_flag
  118. IF arg_billid <= 0 THEN
  119. rslt = 0
  120. arg_msg = '错误单据唯一码'
  121. GOTO ext
  122. END IF
  123. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  124. rslt = 0
  125. GOTO ext
  126. END IF
  127. IF li_flag = 1 THEN
  128. rslt = 0
  129. arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核'
  130. GOTO ext
  131. END IF
  132. ext:
  133. RETURN rslt
  134. end function
  135. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  136. Long ll_flag
  137. uo_taskwork uo_taskwork_dq
  138. uo_taskwork_dq = Create uo_taskwork
  139. uo_taskwork_dq.if_getid_ture = False
  140. IF uo_option_taskwork_procode_order = -1000 THEN
  141. arg_msg = '选项:[064]计件单按生产计划工序,读取初始默认值失败,操作取消!'
  142. rslt = 0
  143. GOTO ext
  144. END IF
  145. IF arg_billid <= 0 THEN
  146. rslt = 0
  147. arg_msg = '错误单据唯一码'
  148. GOTO ext
  149. END IF
  150. IF p_getflag(arg_billid,ll_flag,arg_msg) = 0 THEN
  151. rslt = 0
  152. GOTO ext
  153. END IF
  154. IF ll_flag <> 0 THEN
  155. rslt = 0
  156. arg_msg = '单据不是在待审核状态,不可以再审'
  157. GOTO ext
  158. END IF
  159. //自动建立产品个人计件单
  160. s_taskwork_hz_mx s_mx[]
  161. s_taskwork_hz_ordermx s_ordermx[]
  162. Long ll_arr_cnt ,ll_arr_cntmx
  163. Long ll_i,ll_j
  164. IF getinfo(arg_billid,s_mx,ll_arr_cnt,s_ordermx,ll_arr_cntmx,arg_msg) = 0 THEN
  165. rslt = 0
  166. GOTO ext
  167. END IF
  168. DateTime ld_billdate
  169. Long ll_wageid,ll_wagemth,ll_scid
  170. String ls_dscrp,ls_relcode
  171. Decimal ls_workqty
  172. Long ll_orderid_arr[]
  173. String ls_procode_arr[]
  174. Decimal ld_proqty_arr[]
  175. Long ll_k,it_mx_pro = 0
  176. Decimal ld_amount
  177. Long ll_printid = 0
  178. String ls_billcode
  179. String ls_wpcode
  180. //查询单据信息
  181. SELECT scid,billdate ,wageid,wagemth,relcode,billcode
  182. INTO :ll_scid,:ld_billdate,:ll_wageid,:ll_wagemth,:ls_relcode,:ls_billcode
  183. FROM u_taskwork_hz
  184. Where billid = :arg_billid;
  185. IF sqlca.SQLCode <> 0 THEN
  186. rslt = 0
  187. arg_msg = '查询单据相关信息失败'+sqlca.SQLErrText
  188. GOTO ext
  189. END IF
  190. //
  191. //不重复取工序
  192. FOR ll_i = 1 To ll_arr_cnt
  193. FOR ll_k = 1 To it_mx_pro
  194. IF ls_procode_arr[ll_k] = s_mx[ll_i].procode THEN
  195. GOTO _next
  196. END IF
  197. NEXT
  198. it_mx_pro++
  199. ls_procode_arr[it_mx_pro] = s_mx[ll_i].procode
  200. _next:
  201. NEXT
  202. //循环计划
  203. FOR ll_j = 1 To ll_arr_cntmx
  204. IF uo_taskwork_dq.newbegin(ll_scid,arg_msg) = 0 THEN
  205. rslt = 0
  206. GOTO ext
  207. END IF
  208. uo_taskwork_dq.orderid = s_ordermx[ll_j].orderid
  209. uo_taskwork_dq.billdate = ld_billdate
  210. uo_taskwork_dq.wageid = ll_wageid
  211. uo_taskwork_dq.mtrlid = s_ordermx[ll_j].mtrlid
  212. uo_taskwork_dq.qty = s_ordermx[ll_j].orderqty
  213. uo_taskwork_dq.dscrp = '由单据'+ls_billcode+'辅助自动生成'
  214. uo_taskwork_dq.relcode = ls_relcode
  215. uo_taskwork_dq.wagemth = ll_wagemth
  216. uo_taskwork_dq.relid = arg_billid
  217. IF ll_j <> ll_arr_cntmx THEN //如果不是最后一个计划,按计划扣减数量
  218. FOR ll_i = 1 To it_mx_pro
  219. IF uo_option_taskwork_procode_order = 1 THEN
  220. SELECT proqty INTO :ls_workqty
  221. FROM U_OrderRqwp
  222. WHERE scid = :ll_scid
  223. AND orderid = :s_ordermx[ll_j].orderid
  224. And procode = :ls_procode_arr[ll_i];
  225. IF sqlca.SQLCode <> 0 THEN
  226. arg_msg = '查询工序:'+s_mx[ll_i].procode+',计划数量失败,'+sqlca.SQLErrText
  227. rslt = 0
  228. GOTO ext
  229. END IF
  230. SELECT wpcode INTO :ls_wpcode
  231. FROM u_order_ml
  232. WHERE scid = :ll_scid
  233. And orderid = :s_ordermx[ll_j].orderid;
  234. IF sqlca.SQLCode <> 0 THEN
  235. arg_msg = '查询指令单工价表号失败,ID'+String(s_ordermx[ll_j].orderid) + ','+sqlca.SQLErrText
  236. rslt = 0
  237. GOTO ext
  238. END IF
  239. ELSE
  240. SELECT top 1 workqty * :s_ordermx[ll_j].orderqty,wpcode INTO :ls_workqty,:ls_wpcode
  241. FROM u_sc_workprice
  242. WHERE mtrlid = :s_ordermx[ll_j].mtrlid
  243. And procode = :ls_procode_arr[ll_i];
  244. IF sqlca.SQLCode <> 0 THEN
  245. arg_msg = '查询单件产品工序数失败,'+sqlca.SQLErrText
  246. rslt = 0
  247. GOTO ext
  248. END IF
  249. END IF
  250. FOR ll_k = 1 To ll_arr_cnt
  251. IF s_mx[ll_k].procode = ls_procode_arr[ll_i] And s_mx[ll_k].amount > 0 And ls_workqty > 0 THEN
  252. IF s_mx[ll_k].amount > ls_workqty THEN
  253. ld_amount = ls_workqty
  254. s_mx[ll_k].amount = s_mx[ll_k].amount - ls_workqty
  255. ls_workqty = 0
  256. ELSE
  257. ld_amount = s_mx[ll_k].amount
  258. ls_workqty = ls_workqty - s_mx[ll_k].amount
  259. s_mx[ll_k].amount = 0
  260. END IF
  261. ll_printid++
  262. IF uo_taskwork_dq.acceptmx(s_mx[ll_k].empid,&
  263. s_mx[ll_k].empcode,&
  264. s_mx[ll_k].empname,&
  265. s_mx[ll_k].procode,&
  266. s_mx[ll_k].proname,&
  267. ld_amount,&
  268. s_mx[ll_k].workprice,&
  269. s_mx[ll_k].workhour,&
  270. s_mx[ll_k].mxdscrp,&
  271. arg_msg,&
  272. ll_printid,&
  273. s_mx[ll_k].status,&
  274. 0,'',0,&
  275. ls_wpcode) = 0 THEN
  276. rslt = 0
  277. GOTO ext
  278. END IF
  279. IF ls_workqty = 0 THEN
  280. GOTO _next2
  281. END IF
  282. END IF
  283. NEXT
  284. _next2:
  285. NEXT
  286. ELSE //如果是最后一个计划,将所有未分配完的数量分配完
  287. FOR ll_k = 1 To ll_arr_cnt
  288. IF s_mx[ll_k].amount > 0 THEN
  289. ll_printid++
  290. IF uo_taskwork_dq.acceptmx(s_mx[ll_k].empid,&
  291. s_mx[ll_k].empcode,&
  292. s_mx[ll_k].empname,&
  293. s_mx[ll_k].procode,&
  294. s_mx[ll_k].proname,&
  295. s_mx[ll_k].amount,&
  296. s_mx[ll_k].workprice,&
  297. s_mx[ll_k].workhour,&
  298. s_mx[ll_k].mxdscrp,&
  299. arg_msg,&
  300. ll_printid,&
  301. s_mx[ll_k].status,&
  302. 0,'',0,&
  303. ls_wpcode) = 0 THEN
  304. rslt = 0
  305. GOTO ext
  306. END IF
  307. END IF
  308. NEXT
  309. END IF
  310. IF ll_printid > 0 THEN
  311. IF uo_taskwork_dq.Save(arg_msg,False) = 0 THEN
  312. rslt = 0
  313. GOTO ext
  314. END IF
  315. END IF
  316. ll_printid = 0
  317. NEXT
  318. //更新审核标记
  319. UPDATE u_taskwork_hz
  320. SET auditingrep = :arg_opemp,
  321. auditingdate = getdate(),
  322. flag = 1
  323. WHERE billid = :arg_billid
  324. And flag = 0;
  325. IF sqlca.SQLCode <> 0 THEN
  326. rslt = 0
  327. arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  328. GOTO ext
  329. END IF
  330. ext:
  331. IF rslt = 0 THEN
  332. ROLLBACK;
  333. ELSEIF rslt = 1 And arg_ifcommit THEN
  334. COMMIT;
  335. END IF
  336. Destroy uo_taskwork_dq
  337. RETURN rslt
  338. end function
  339. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  340. Long ll_flag
  341. uo_taskwork uo_taskwork_dq
  342. uo_taskwork_dq = CREATE uo_taskwork
  343. DateTime null_dt
  344. SetNull(null_dt)
  345. IF arg_billid <= 0 THEN
  346. rslt = 0
  347. ARG_MSG = '错误单据唯一码'
  348. GOTO ext
  349. END IF
  350. IF p_getflag(arg_billid,ll_flag,ARG_MSG) = 0 THEN
  351. rslt = 0
  352. GOTO ext
  353. END IF
  354. IF ll_flag <> 1 THEN
  355. rslt = 0
  356. ARG_MSG = '单据不是在审核状态,不可以撤审'
  357. GOTO ext
  358. END IF
  359. String ls_billcode[]
  360. Long ll_scid[],ll_billid[]
  361. Long i,ll_i
  362. i = 1
  363. //删除相关自动生成的计件单
  364. DECLARE cur_billmx CURSOR FOR
  365. SELECT scid,billid,billcode
  366. FROM u_sc_taskwork
  367. Where relid = :arg_billid;
  368. OPEN cur_billmx;
  369. FETCH cur_billmx INTO :ll_scid[i],:ll_billid[i],:ls_billcode[i];
  370. DO WHILE sqlca.SQLCode = 0
  371. i++
  372. FETCH cur_billmx INTO :ll_scid[i],:ll_billid[i],:ls_billcode[i];
  373. LOOP
  374. i = i - 1
  375. FOR ll_i = 1 TO i
  376. IF uo_taskwork_dq.del(ll_scid[ll_i],ll_billid[ll_i],ARG_MSG,false) = 0 THEN
  377. rslt = 0
  378. ARG_MSG = '删除自动建立的计件单 '+ls_billcode[ll_i]+' 失败,'+ARG_MSG
  379. GOTO ext
  380. END IF
  381. NEXT
  382. //更新审核标记
  383. UPDATE u_taskwork_hz
  384. SET auditingrep = '',
  385. auditingdate = :null_dt,
  386. flag = 0
  387. Where billid = :arg_billid;
  388. IF sqlca.SQLCode <> 0 THEN
  389. rslt = 0
  390. ARG_MSG = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText
  391. GOTO ext
  392. END IF
  393. ext:
  394. IF rslt = 0 THEN
  395. ROLLBACK;
  396. ELSEIF rslt = 1 AND arg_ifcommit THEN
  397. COMMIT;
  398. END IF
  399. DESTROY uo_taskwork_dq
  400. RETURN rslt
  401. end function
  402. public function integer save (s_taskwork_hz arg_s_taskwork, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0
  403. DateTime server_dt
  404. Long ll_billid,it_mxbt,i,it_mxbt_order,j
  405. String ls_sccode,ls_billcode
  406. IF IsNull(arg_s_taskwork.scid) THEN arg_s_taskwork.scid = 0
  407. IF IsNull(arg_s_taskwork.billid) THEN arg_s_taskwork.billid = 0
  408. IF IsNull(arg_s_taskwork.rep) THEN arg_s_taskwork.rep = ''
  409. IF IsNull(arg_s_taskwork.dscrp) THEN arg_s_taskwork.dscrp = ''
  410. IF IsNull(arg_s_taskwork.relcode) THEN arg_s_taskwork.relcode = ''
  411. IF IsNull(arg_s_taskwork.wagemth) THEN arg_s_taskwork.wagemth = 0
  412. IF IsNull(arg_s_taskwork.wageid) THEN arg_s_taskwork.wageid = 0
  413. IF arg_s_taskwork.rep = '' THEN
  414. arg_msg = '请输入经手人'
  415. rslt = 0
  416. GOTO ext
  417. END IF
  418. IF arg_s_taskwork.wagemth = 0 THEN
  419. arg_msg = '请输入工资月份'
  420. rslt = 0
  421. GOTO ext
  422. END IF
  423. IF arg_s_taskwork.wageid = 0 THEN
  424. arg_msg = '请选择工资项目'
  425. rslt = 0
  426. GOTO ext
  427. END IF
  428. SELECT Top 1 getdate() INTO :server_dt FROM u_user;
  429. IF sqlca.SQLCode <> 0 THEN
  430. rslt = 0
  431. arg_msg = "查询操作失败,日期 "
  432. GOTO ext
  433. END IF
  434. it_mxbt = UpperBound(arg_s_taskwork.arg_s_mx)
  435. IF it_mxbt <= 0 THEN
  436. rslt = 0
  437. arg_msg = "没有正确的工序明细内容"
  438. GOTO ext
  439. END IF
  440. it_mxbt_order = UpperBound(arg_s_taskwork.arg_s_ordermx)
  441. IF it_mxbt_order <= 0 THEN
  442. rslt = 0
  443. arg_msg = "没有正确的计划明细内容"
  444. GOTO ext
  445. END IF
  446. IF arg_s_taskwork.billid = 0 THEN
  447. ll_billid = f_sys_scidentity(0,"u_taskwork_hz","billid",arg_msg,TRUE,id_sqlca)
  448. IF ll_billid <= 0 THEN
  449. rslt = 0
  450. GOTO ext
  451. END IF
  452. IF f_get_sccode(arg_s_taskwork.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  453. rslt = 0
  454. GOTO ext
  455. END IF
  456. ls_billcode = getid(arg_s_taskwork.scid,ls_sccode + 'TH',Date(server_dt),FALSE,sqlca)
  457. IF ls_billcode = "err" THEN
  458. rslt = 0
  459. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  460. GOTO ext
  461. END IF
  462. INSERT INTO u_taskwork_hz
  463. (scid,
  464. billid,
  465. billcode,
  466. billdate,
  467. rep,
  468. wagemth,
  469. wageid,
  470. relcode,
  471. dscrp,
  472. opdate,
  473. opemp)
  474. VALUES
  475. (:arg_s_taskwork.scid,
  476. :ll_billid,
  477. :ls_billcode,
  478. :arg_s_taskwork.billdate,
  479. :arg_s_taskwork.rep,
  480. :arg_s_taskwork.wagemth,
  481. :arg_s_taskwork.wageid,
  482. :arg_s_taskwork.relcode,
  483. :arg_s_taskwork.dscrp,
  484. getdate(),
  485. :arg_opemp);
  486. IF sqlca.SQLCode <> 0 THEN
  487. rslt = 0
  488. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  489. GOTO ext
  490. END IF
  491. FOR i = 1 TO it_mxbt
  492. INSERT INTO u_taskwork_hz_mx
  493. (scid,
  494. billid,
  495. empid,
  496. procode,
  497. proname,
  498. empcode,
  499. empname,
  500. amount,
  501. workprice,
  502. workhour,
  503. mxdscrp,
  504. printid,
  505. status,
  506. proorder)
  507. VALUES
  508. (:arg_s_taskwork.scid,
  509. :ll_billid,
  510. :arg_s_taskwork.arg_s_mx[i].empid,
  511. :arg_s_taskwork.arg_s_mx[i].procode,
  512. :arg_s_taskwork.arg_s_mx[i].proname,
  513. :arg_s_taskwork.arg_s_mx[i].empcode,
  514. :arg_s_taskwork.arg_s_mx[i].empname,
  515. :arg_s_taskwork.arg_s_mx[i].amount,
  516. :arg_s_taskwork.arg_s_mx[i].workprice,
  517. :arg_s_taskwork.arg_s_mx[i].workhour,
  518. :arg_s_taskwork.arg_s_mx[i].mxdscrp,
  519. :arg_s_taskwork.arg_s_mx[i].printid,
  520. :arg_s_taskwork.arg_s_mx[i].status,
  521. :arg_s_taskwork.arg_s_mx[i].proorder);
  522. IF sqlca.SQLCode <> 0 THEN
  523. rslt = 0
  524. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  525. GOTO ext
  526. END IF
  527. NEXT
  528. FOR j = 1 TO it_mxbt_order
  529. INSERT INTO u_taskwork_hz_ordermx
  530. (scid,
  531. billid,
  532. printid,
  533. orderid)
  534. VALUES
  535. (:arg_s_taskwork.scid,
  536. :ll_billid,
  537. :arg_s_taskwork.arg_s_ordermx[j].printid,
  538. :arg_s_taskwork.arg_s_ordermx[j].orderid);
  539. IF sqlca.SQLCode <> 0 THEN
  540. rslt = 0
  541. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  542. GOTO ext
  543. END IF
  544. NEXT
  545. uo_billid = ll_billid
  546. uo_billcode = ls_billcode
  547. ELSE
  548. UPDATE u_taskwork_hz
  549. SET billdate = :arg_s_taskwork.billdate,
  550. rep = :arg_s_taskwork.rep,
  551. dscrp = :arg_s_taskwork.dscrp,
  552. relcode = :arg_s_taskwork.relcode,
  553. wagemth = :arg_s_taskwork.wagemth,
  554. wageid = :arg_s_taskwork.wageid,
  555. moddate = getdate(),
  556. modemp = :arg_opemp
  557. WHERE billid = :arg_s_taskwork.billid
  558. AND flag = 0 ;
  559. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  560. rslt = 0
  561. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  562. GOTO ext
  563. END IF
  564. DELETE FROM u_taskwork_hz_mx
  565. Where billid = :arg_s_taskwork.billid;
  566. IF sqlca.SQLCode <> 0 THEN
  567. rslt = 0
  568. arg_msg = "删除旧有工序明细操作失败"+"~n"+sqlca.SQLErrText
  569. GOTO ext
  570. END IF
  571. FOR i = 1 TO it_mxbt
  572. INSERT INTO u_taskwork_hz_mx
  573. (scid,
  574. billid,
  575. empid,
  576. procode,
  577. proname,
  578. empcode,
  579. empname,
  580. amount,
  581. workprice,
  582. workhour,
  583. mxdscrp,
  584. printid,
  585. status,
  586. proorder)
  587. VALUES
  588. (:arg_s_taskwork.scid,
  589. :arg_s_taskwork.billid,
  590. :arg_s_taskwork.arg_s_mx[i].empid,
  591. :arg_s_taskwork.arg_s_mx[i].procode,
  592. :arg_s_taskwork.arg_s_mx[i].proname,
  593. :arg_s_taskwork.arg_s_mx[i].empcode,
  594. :arg_s_taskwork.arg_s_mx[i].empname,
  595. :arg_s_taskwork.arg_s_mx[i].amount,
  596. :arg_s_taskwork.arg_s_mx[i].workprice,
  597. :arg_s_taskwork.arg_s_mx[i].workhour,
  598. :arg_s_taskwork.arg_s_mx[i].mxdscrp,
  599. :arg_s_taskwork.arg_s_mx[i].printid,
  600. :arg_s_taskwork.arg_s_mx[i].status,
  601. :arg_s_taskwork.arg_s_mx[i].proorder);
  602. IF sqlca.SQLCode <> 0 THEN
  603. rslt = 0
  604. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  605. GOTO ext
  606. END IF
  607. NEXT
  608. DELETE FROM u_taskwork_hz_ordermx
  609. Where billid = :arg_s_taskwork.billid;
  610. IF sqlca.SQLCode <> 0 THEN
  611. rslt = 0
  612. arg_msg = "删除旧有计划明细操作失败"+"~n"+sqlca.SQLErrText
  613. GOTO ext
  614. END IF
  615. FOR j = 1 TO it_mxbt_order
  616. INSERT INTO u_taskwork_hz_ordermx
  617. (scid,
  618. billid,
  619. printid,
  620. orderid)
  621. VALUES
  622. (:arg_s_taskwork.scid,
  623. :arg_s_taskwork.billid,
  624. :arg_s_taskwork.arg_s_ordermx[j].printid,
  625. :arg_s_taskwork.arg_s_ordermx[j].orderid);
  626. IF sqlca.SQLCode <> 0 THEN
  627. rslt = 0
  628. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  629. GOTO ext
  630. END IF
  631. NEXT
  632. uo_billid = arg_s_taskwork.billid
  633. END IF
  634. ext:
  635. IF rslt = 0 THEN
  636. ROLLBACK;
  637. ELSEIF arg_ifcommit AND rslt = 1 THEN
  638. COMMIT;
  639. END IF
  640. RETURN rslt
  641. end function
  642. public function integer getinfo (long arg_billid, ref s_taskwork_hz_mx arg_s_mx[], ref long arg_arr_cnt, ref s_taskwork_hz_ordermx arg_s_ordermx[], ref long arg_arr_cntmx, ref string arg_msg);Int rslt = 1
  643. Long i = 1,j = 1 ,no_mxcheck = 0
  644. IF arg_billid <= 0 THEN
  645. rslt = 0
  646. arg_msg = '错误单据唯一码'
  647. GOTO ext
  648. END IF
  649. DECLARE cur_mx CURSOR FOR
  650. SELECT u_rs_empinfo.Empcode,
  651. u_taskwork_hz_mx.procode,
  652. u_taskwork_hz_mx.Amount,
  653. u_taskwork_hz_mx.Workprice,
  654. u_taskwork_hz_mx.Workhour,
  655. u_taskwork_hz_mx.mxdscrp,
  656. u_taskwork_hz_mx.proname,
  657. u_taskwork_hz_mx.Empid,
  658. u_taskwork_hz_mx.printid,
  659. u_rs_empinfo.Empname ,
  660. u_taskwork_hz_mx.status
  661. FROM u_taskwork_hz_mx,
  662. u_rs_empinfo
  663. WHERE ( u_taskwork_hz_mx.Empid = u_rs_empinfo.empid )
  664. AND ( u_taskwork_hz_mx.billid = :arg_billid )
  665. Order By u_taskwork_hz_mx.printid;
  666. OPEN cur_mx;
  667. FETCH cur_mx INTO :arg_s_mx[i].empcode,:arg_s_mx[i].procode,
  668. :arg_s_mx[i].amount,:arg_s_mx[i].workprice,:arg_s_mx[i].workhour,
  669. :arg_s_mx[i].mxdscrp,:arg_s_mx[i].proname,:arg_s_mx[i].empid,
  670. :arg_s_mx[i].printid,:arg_s_mx[i].Empname,:arg_s_mx[i].status;
  671. DO WHILE sqlca.SQLCode = 0
  672. i++
  673. FETCH cur_mx INTO :arg_s_mx[i].empcode,:arg_s_mx[i].procode,
  674. :arg_s_mx[i].amount,:arg_s_mx[i].workprice,:arg_s_mx[i].workhour,
  675. :arg_s_mx[i].mxdscrp,:arg_s_mx[i].proname,:arg_s_mx[i].empid,
  676. :arg_s_mx[i].printid,:arg_s_mx[i].Empname,:arg_s_mx[i].status;
  677. LOOP
  678. CLOSE cur_mx;
  679. //检验明细是否读入完整
  680. SELECT count(*) INTO :no_mxcheck
  681. FROM u_taskwork_hz_mx
  682. Where billid = :arg_billid;
  683. IF sqlca.SQLCode <> 0 THEN
  684. rslt = 0
  685. arg_msg = "查询操作失败,工序明细数量"
  686. GOTO ext
  687. END IF
  688. IF i <> (no_mxcheck + 1) THEN
  689. rslt = 0
  690. arg_msg = "查询操作失败,单据汇总内容"
  691. GOTO ext
  692. END IF
  693. arg_arr_cnt = i - 1
  694. // //
  695. DECLARE cur_ordermx CURSOR FOR
  696. SELECT u_taskwork_hz_ordermx.printid,
  697. u_taskwork_hz_ordermx.orderid,
  698. u_Order_ml.mtrlid,
  699. u_Order_ml.orderqty
  700. FROM u_Order_ml RIGHT OUTER JOIN
  701. u_taskwork_hz_ordermx ON u_Order_ml.scid = u_taskwork_hz_ordermx.scid AND
  702. u_Order_ml.OrderID = u_taskwork_hz_ordermx.orderid
  703. Where u_taskwork_hz_ordermx.billid = :arg_billid;
  704. OPEN cur_ordermx;
  705. FETCH cur_ordermx INTO :arg_s_ordermx[j].printid,:arg_s_ordermx[j].orderid,
  706. :arg_s_ordermx[j].mtrlid,:arg_s_ordermx[j].orderqty;
  707. DO WHILE sqlca.SQLCode = 0
  708. j++
  709. FETCH cur_ordermx INTO :arg_s_ordermx[j].printid,:arg_s_ordermx[j].orderid,
  710. :arg_s_ordermx[j].mtrlid,:arg_s_ordermx[j].orderqty;
  711. LOOP
  712. CLOSE cur_ordermx;
  713. SELECT count(*) INTO :no_mxcheck
  714. FROM u_taskwork_hz_ordermx
  715. Where billid = :arg_billid;
  716. IF sqlca.SQLCode <> 0 THEN
  717. rslt = 0
  718. arg_msg = "查询操作失败,工序明细数量"
  719. GOTO ext
  720. END IF
  721. IF j <> (no_mxcheck + 1) THEN
  722. rslt = 0
  723. arg_msg = "查询操作失败,计划明细内容"
  724. GOTO ext
  725. END IF
  726. arg_arr_cntmx = j - 1
  727. ext:
  728. RETURN rslt
  729. end function
  730. on uo_taskwork_hz.create
  731. call super::create
  732. TriggerEvent( this, "constructor" )
  733. end on
  734. on uo_taskwork_hz.destroy
  735. TriggerEvent( this, "destructor" )
  736. call super::destroy
  737. end on
  738. event constructor;String arg_msg
  739. String str_optionvalue
  740. str_optionvalue = ''
  741. f_get_sys_option_value('064',str_optionvalue,arg_msg)
  742. uo_option_taskwork_procode_order = Long(str_optionvalue)
  743. end event