uo_workpricetable.sru 26 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109
  1. $PBExportHeader$uo_workpricetable.sru
  2. forward
  3. global type uo_workpricetable from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_workpricetable from nonvisualobject
  7. end type
  8. global uo_workpricetable uo_workpricetable
  9. type variables
  10. long mtrlid //产品id
  11. long wpmtrlid
  12. decimal wprate
  13. s_workpricetable workpricemx[] //明细结构数组
  14. long it_mxbt=0 //明细结构数组末指针
  15. boolean it_updatebegin=false//修改标志
  16. Long deep_count = 0
  17. long il_printid = 0
  18. end variables
  19. forward prototypes
  20. public function integer p_clearmx ()
  21. public function integer p_reset ()
  22. public function integer updatebegin (long arg_mtrlid, ref string arg_msg)
  23. public function integer c_auditing (long arg_mtrlid, ref string arg_msg, boolean arg_ifcommit)
  24. public function integer acceptsumrec (long arg_mtrlid, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer save (boolean arg_ifcommit, ref string arg_msg)
  26. public function integer auditing (long arg_mtrlid, long arg_wrkgrpid, string arg_auditingrep, ref string arg_msg, boolean arg_ifcommit)
  27. public function integer update_auditflag (long arg_mtrlid, datetime arg_auditdate, string arg_auditingrep, ref string arg_msg, boolean arg_ifcommit)
  28. public function integer c_auditing (long arg_mtrlid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit)
  29. public function integer f_addpfmx (long arg_mtrlid, string arg_pfcode, decimal arg_qty, long arg_lp, ref string arg_msg, boolean arg_ifcommit)
  30. public function integer f_clearpfmx (long arg_mtrlid, ref string arg_msg, boolean arg_ifcommit)
  31. public function integer f_addworkprice (long arg_mtrlid, ref string arg_msg, boolean arg_ifcommit)
  32. public function integer auditing_gs (long arg_mtrlid, long arg_wrkgrpid, string arg_auditingrep, ref string arg_msg, boolean arg_ifcommit)
  33. public function integer c_auditing_gs (long arg_mtrlid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit)
  34. public function integer acceptmx (long arg_proid, string arg_procode, string arg_proname, decimal arg_workqty, decimal arg_workprice, long arg_wrkgrpid, string arg_worklevel, string arg_techlevel, decimal arg_workhour, string arg_dscrp, integer arg_lastflag, long arg_proorder, integer arg_ifownpro, integer arg_lsxtype, integer arg_ifstandard, string arg_status, integer arg_ifjd, string arg_pricestr, string arg_stepstr, ref string arg_msg)
  35. end prototypes
  36. public function integer p_clearmx ();//INT p_clearmx()
  37. //清除明细
  38. it_mxbt=0
  39. RETURN 1
  40. end function
  41. public function integer p_reset ();//INT p_RESET()
  42. //清除对象及其明细
  43. wpmtrlid = 0
  44. wprate = 0
  45. it_updatebegin=FALSE
  46. //清除明细
  47. P_CLEARMX()
  48. RETURN 1
  49. end function
  50. public function integer updatebegin (long arg_mtrlid, ref string arg_msg);Long ll_auditflag,rslt = 1,ll_mtrlid,ll_count
  51. SELECT mtrlid,auditflag
  52. INTO :ll_mtrlid,:ll_auditflag
  53. FROM u_mtrldef
  54. Where mtrlid = :arg_mtrlid;
  55. IF sqlca.SQLCode <> 0 THEN
  56. rslt = 0
  57. arg_msg = '查询该产品的资料失败! 原因:'+sqlca.SQLErrText
  58. GOTO ext
  59. END IF
  60. IF ll_auditflag = 1 THEN
  61. rslt = 0
  62. arg_msg = '该产品的工价表已审核,不能修改!'
  63. GOTO ext
  64. END IF
  65. SELECT count(*)
  66. INTO :ll_count
  67. From u_sc_workprice Where mtrlid = :arg_mtrlid;
  68. IF sqlca.SQLCode <> 0 THEN
  69. rslt = 0
  70. arg_msg = '查询该产品的工价表失败,原因:'+sqlca.SQLErrText
  71. GOTO ext
  72. END IF
  73. mtrlid = ll_mtrlid
  74. p_clearmx()
  75. it_updatebegin = True
  76. ext:
  77. IF rslt = 0 THEN p_reset()
  78. RETURN rslt
  79. end function
  80. public function integer c_auditing (long arg_mtrlid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,ll_count,ll_Auditflag
  81. DateTime serdate
  82. IF IsNull(arg_mtrlid) THEN
  83. rslt = 0
  84. arg_msg = '没有撤核对象!'
  85. GOTO ext
  86. END IF
  87. SELECT Auditflag INTO :ll_Auditflag FROM u_mtrldef Where mtrlid = :arg_mtrlid;
  88. IF sqlca.SQLCode <> 0 THEN
  89. rslt = 0
  90. arg_msg = '该产品没有审核!'
  91. GOTO ext
  92. END IF
  93. SetNull(serdate)
  94. UPDATE u_mtrldef
  95. SET Auditflag = 0,
  96. Audit_emp = '',
  97. Audit_date = :serdate
  98. Where mtrlid = :arg_mtrlid;
  99. IF sqlca.SQLCode <> 0 THEN
  100. rslt = 0
  101. arg_msg = '撤核失败!原因:'+sqlca.SQLErrText
  102. ROLLBACK;
  103. GOTO ext
  104. END IF
  105. ext:
  106. IF rslt = 1 AND arg_ifcommit THEN
  107. COMMIT;
  108. END IF
  109. RETURN rslt
  110. end function
  111. public function integer acceptsumrec (long arg_mtrlid, ref string arg_msg, boolean arg_ifcommit);////acceptsumrec(long arg_mtrlid,string arg_msg, boolean arg_ifcommit)
  112. //s_workpricetable s_pricetable[]
  113. //dec ls_sumhour,ls_sumprice
  114. //long ls_wrkgrpid,i=1,k,ls_mxid,ls_proid,procount
  115. //int rslt=1
  116. //string ls_procode
  117. //
  118. //declare getworkprosum cursor for
  119. // SELECT SUM(u_sc_workprice.Workhour), SUM(u_sc_workprice.workPrice),
  120. // u_sc_workgroup.wrkgrpid
  121. // FROM u_sc_workprice, u_sc_workprocedure, u_sc_workgroup
  122. // WHERE (u_sc_workprice.proid = u_sc_workprocedure.proid) AND
  123. // (u_sc_workprocedure.wrkgrpid = u_sc_workgroup.wrkgrpid) AND
  124. // ((u_sc_workprice.Mtrlid = :arg_mtrlid)) AND u_sc_workprice.sumflag = 0
  125. // GROUP BY u_sc_workgroup.wrkgrpid;
  126. //open getworkprosum;
  127. //Do While sqlca.sqlcode=0
  128. // Fetch getworkprosum into :ls_sumhour,:ls_sumprice,:ls_wrkgrpid;
  129. // if sqlca.sqlcode<>0 then exit;
  130. // s_pricetable[i].wrkgrpid=ls_wrkgrpid
  131. // s_pricetable[i].workhour=ls_sumhour
  132. // s_pricetable[i].workprice=ls_sumprice
  133. // i++
  134. //loop
  135. //Close getworkprosum;
  136. //delete from u_sc_workprice where mtrlid=:arg_mtrlid and sumflag=1;
  137. //if sqlca.sqlcode=-1 then
  138. // rslt=0
  139. // arg_msg='删除工序失败!'
  140. // goto ext
  141. //end if
  142. //
  143. //for k= 1 to upperbound(s_pricetable)
  144. //// ls_mxid=f_sys_scidentity(0,"u_sc_workprice","mxid",arg_msg,false)
  145. //// if ls_mxid<0 then
  146. //// rslt=0
  147. //// goto ext
  148. //// end if
  149. //
  150. // select proid,code into :ls_proid,:ls_procode from u_sc_workprocedure where wrkgrpid=:s_pricetable[K].wrkgrpid and sysflag=1;
  151. // if sqlca.sqlcode=-1 then
  152. // arg_msg='查询工序资料失败,原因:'+sqlca.sqlerrtext
  153. // rslt=0
  154. // goto ext
  155. // end if
  156. //
  157. // SELECT count(*) into :procount FROM u_sc_workprice INNER JOIN
  158. // u_sc_workprocedure ON u_sc_workprice.proid = u_sc_workprocedure.proid AND
  159. // u_sc_workprocedure.wrkgrpid = :s_pricetable[k].wrkgrpid AND u_sc_workprice.mtrlid = :arg_mtrlid AND
  160. // u_sc_workprice.sumflag = 0;
  161. // if sqlca.sqlcode=-1 then
  162. // arg_msg='查询该产品工序资料失败,原因:'+sqlca.sqlerrtext
  163. // rslt=0
  164. // goto ext
  165. // end if
  166. //
  167. // if procount>1 then
  168. //
  169. // insert into u_sc_workprice
  170. // (mtrlid,
  171. // proid,
  172. // Procode,
  173. // workPrice,
  174. // Workhour,
  175. // sumflag)
  176. // values(:arg_mtrlid,
  177. // :ls_proid,
  178. // :ls_Procode,
  179. // :s_pricetable[K].workPrice,
  180. // :s_pricetable[K].Workhour,
  181. // 1);
  182. //
  183. // if sqlca.sqlcode<>0 then
  184. // rslt=0
  185. // arg_msg="插入工序明细表错误!原因:"+sqlca.sqlerrtext
  186. // rollback;
  187. // goto ext
  188. // end if
  189. // end if
  190. //next
  191. //
  192. //
  193. //ext:
  194. //if rslt=1 and arg_ifcommit then
  195. // commit;
  196. //end if
  197. //
  198. //if rslt=0 then
  199. // rollback;
  200. //end if
  201. //return rslt
  202. return 1
  203. end function
  204. public function integer save (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i
  205. Long cnt
  206. DateTime serdate
  207. IF it_updatebegin = TRUE THEN
  208. IF IsNull(mtrlid) OR mtrlid = 0 THEN
  209. arg_msg = '产品错误,没有对应的产品'
  210. rslt = 0
  211. GOTO ext
  212. END IF
  213. // IF it_mxbt = 0 THEN
  214. // arg_msg = '没有可保存的工序明细'
  215. // rslt = 0
  216. // GOTO ext
  217. // END IF
  218. IF wpmtrlid > 0 THEN
  219. cnt = 0
  220. SELECT count(*) INTO :cnt
  221. FROM u_mtrldef
  222. Where mtrlid = :wpmtrlid;
  223. IF sqlca.SQLCode <> 0 THEN
  224. arg_msg = '查询标准产品资料失败'
  225. rslt = 0
  226. GOTO ext
  227. END IF
  228. IF cnt <> 1 THEN
  229. arg_msg = '不存在标准产品资料或资料重复'
  230. rslt = 0
  231. GOTO ext
  232. END IF
  233. IF wprate <= 0 THEN
  234. arg_msg = '请正确输入标准产品工价的比率'
  235. rslt = 0
  236. GOTO ext
  237. END IF
  238. END IF
  239. SELECT Top 1 getdate() INTO :serdate FROM u_user;
  240. IF sqlca.SQLCode <> 0 THEN
  241. arg_msg = '取服务器时间失败'
  242. rslt = 0
  243. GOTO ext
  244. END IF
  245. UPDATE u_mtrldef
  246. SET popdate = :serdate,
  247. popemp = :publ_operator,
  248. wpmtrlid = :wpmtrlid,
  249. wprate = :wprate
  250. Where mtrlid = :mtrlid;
  251. IF sqlca.SQLCode <> 0 THEN
  252. rslt = 0
  253. arg_msg = '写入操作日期和操作人失败!'+sqlca.SQLErrText
  254. ROLLBACK;
  255. GOTO ext
  256. END IF
  257. DELETE FROM u_sc_workprice
  258. WHERE mtrlid = :mtrlid
  259. AND auditflag = 0;
  260. IF sqlca.SQLCode <> 0 THEN
  261. rslt = 0
  262. arg_msg = '删除工价表明细失败!'
  263. GOTO ext
  264. END IF
  265. FOR i = 1 TO it_mxbt
  266. INSERT INTO u_sc_workprice
  267. (mtrlid,
  268. proid,
  269. proname,
  270. procode,
  271. workprice,
  272. worklevel,
  273. techlevel,
  274. workhour,
  275. dscrp,
  276. lastflag,
  277. proorder,
  278. workqty,
  279. wrkgrpid,
  280. ifownpro,
  281. lsxtype,
  282. ifstandard,
  283. status,
  284. ifjd,
  285. pricestr,
  286. stepstr
  287. )
  288. VALUES(:mtrlid,
  289. :workpricemx[i].proid,
  290. :workpricemx[i].proname,
  291. :workpricemx[i].procode,
  292. :workpricemx[i].workprice,
  293. :workpricemx[i].worklevel,
  294. :workpricemx[i].techlevel,
  295. :workpricemx[i].workhour,
  296. :workpricemx[i].dscrp,
  297. :workpricemx[i].lastflag,
  298. :workpricemx[i].proorder,
  299. :workpricemx[i].workqty,
  300. :workpricemx[i].wrkgrpid,
  301. :workpricemx[i].ifownpro,
  302. :workpricemx[i].lsxtype,
  303. :workpricemx[i].ifstandard,
  304. :workpricemx[i].status,
  305. :workpricemx[i].ifjd,
  306. :workpricemx[i].pricestr,
  307. :workpricemx[i].stepstr
  308. );
  309. IF sqlca.SQLCode <> 0 THEN
  310. rslt = 0
  311. arg_msg = "插入工序明细表错误!原因:"+sqlca.SQLErrText
  312. GOTO ext
  313. END IF
  314. NEXT
  315. END IF
  316. it_updatebegin = FALSE
  317. ext:
  318. IF rslt = 0 THEN
  319. ROLLBACK;
  320. mtrlid = 0
  321. p_clearmx()
  322. ELSEIF rslt = 1 AND arg_ifcommit THEN
  323. COMMIT;
  324. END IF
  325. RETURN rslt
  326. end function
  327. public function integer auditing (long arg_mtrlid, long arg_wrkgrpid, string arg_auditingrep, ref string arg_msg, boolean arg_ifcommit);//====================================================================
  328. // Function: auditing()
  329. //--------------------------------------------------------------------
  330. // Description: 审核工价表
  331. //--------------------------------------------------------------------
  332. // Arguments:
  333. // value long arg_mtrlid
  334. // value string arg_auditingrep
  335. // reference string arg_msg
  336. // value boolean arg_ifcommit
  337. //--------------------------------------------------------------------
  338. // Returns: integer
  339. //--------------------------------------------------------------------
  340. // Author: yyx Date: 2003.11.01
  341. //--------------------------------------------------------------------
  342. // Modify History:
  343. //
  344. //====================================================================
  345. Long rslt = 1,ll_count,ll_Auditflag
  346. DateTime serdate
  347. IF IsNull(arg_mtrlid) THEN
  348. rslt = 0
  349. arg_msg = '没有审核对象!'
  350. GOTO ext
  351. END IF
  352. ll_count = 0
  353. SELECT count(*) Into :ll_count From u_sc_workprice Where mtrlid = :arg_mtrlid;
  354. IF sqlca.SQLCode <> 0 THEN
  355. rslt = 0
  356. arg_msg = '查询该产品的工价表失败,原因:'+sqlca.SQLErrText
  357. GOTO ext
  358. END IF
  359. IF ll_count = 0 THEN
  360. rslt = 0
  361. arg_msg = '该产品没有工序,不能审核'
  362. GOTO ext
  363. END IF
  364. SELECT Top 1 getdate() Into :serdate From u_user;
  365. IF sqlca.SQLCode <> 0 THEN
  366. arg_msg = '查询服务器时间失败'
  367. rslt = 0
  368. GOTO ext
  369. END IF
  370. ll_count = 0
  371. IF arg_wrkGrpid > 0 THEN
  372. SELECT count(*) INTO :ll_count
  373. FROM u_sc_workgroup
  374. Where wrkGrpid = :arg_wrkGrpid;
  375. IF sqlca.SQLCode <> 0 Or ll_count <> 1 THEN
  376. arg_msg = '查询工组资料失败,或者不存在工组资料'
  377. rslt = 0
  378. GOTO ext
  379. END IF
  380. END IF
  381. UPDATE u_sc_workprice
  382. SET auditflag = 1,
  383. auditrep = :arg_auditingrep,
  384. auditdate = :serdate
  385. WHERE mtrlid = :arg_mtrlid
  386. And (wrkGrpid = :arg_wrkGrpid Or :arg_wrkGrpid = -1 );
  387. IF sqlca.SQLCode <> 0 THEN
  388. arg_msg = '更新工价表明细审核标记失败,'+sqlca.SQLErrText
  389. rslt = 0
  390. GOTO ext
  391. END IF
  392. IF update_auditflag(arg_mtrlid,serdate,arg_auditingrep,arg_msg,False) = 0 THEN
  393. rslt = 0
  394. GOTO ext
  395. END IF
  396. ext:
  397. IF rslt = 1 And arg_ifcommit THEN
  398. COMMIT;
  399. END IF
  400. RETURN rslt
  401. end function
  402. public function integer update_auditflag (long arg_mtrlid, datetime arg_auditdate, string arg_auditingrep, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  403. Long cnt
  404. SELECT count(*) INTO :cnt
  405. FROM u_sc_workprice
  406. WHERE auditflag = 0
  407. AND mtrlid = :arg_mtrlid;
  408. IF sqlca.SQLCode <> 0 THEN
  409. arg_msg = '查询工价表明细未审核工序数失败'
  410. rslt = 0
  411. GOTO ext
  412. END IF
  413. IF cnt = 0 THEN
  414. UPDATE u_mtrldef
  415. SET Auditflag = 1,
  416. Audit_emp = :arg_auditingrep,
  417. Audit_date = :arg_auditdate
  418. Where mtrlid = :arg_mtrlid;
  419. ELSE
  420. UPDATE u_mtrldef
  421. SET Auditflag = 0,
  422. Audit_emp = :arg_auditingrep,
  423. Audit_date = :arg_auditdate
  424. Where mtrlid = :arg_mtrlid;
  425. END IF
  426. IF sqlca.SQLCode <> 0 THEN
  427. rslt = 0
  428. arg_msg = '更新工价表审核标记失败,原因:'+sqlca.SQLErrText
  429. GOTO ext
  430. END IF
  431. ext:
  432. IF rslt = 0 THEN
  433. ROLLBACK;
  434. ELSEIF rslt = 1 AND arg_ifcommit THEN
  435. COMMIT;
  436. END IF
  437. RETURN rslt
  438. end function
  439. public function integer c_auditing (long arg_mtrlid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,ll_count,ll_Auditflag
  440. DateTime serdate,null_dt
  441. SetNull(null_dt)
  442. IF IsNull(arg_mtrlid) THEN
  443. rslt = 0
  444. arg_msg = '没有审核对象!'
  445. GOTO ext
  446. END IF
  447. ll_count = 0
  448. SELECT count(*) INTO :ll_count FROM u_sc_workprice Where mtrlid = :arg_mtrlid;
  449. IF sqlca.SQLCode <> 0 THEN
  450. rslt = 0
  451. arg_msg = '查询该产品的工价表失败,原因:'+sqlca.SQLErrText
  452. GOTO ext
  453. END IF
  454. IF ll_count = 0 THEN
  455. rslt = 0
  456. arg_msg = '该产品没有工序,不能审核'
  457. GOTO ext
  458. END IF
  459. ll_count = 0
  460. IF arg_wrkGrpid > 0 THEN
  461. SELECT count(*) INTO :ll_count
  462. FROM u_sc_workgroup
  463. Where wrkGrpid = :arg_wrkGrpid;
  464. IF sqlca.SQLCode <> 0 OR ll_count <> 1 THEN
  465. arg_msg = '查询工组资料失败,或者不存在工组资料'
  466. rslt = 0
  467. GOTO ext
  468. END IF
  469. END IF
  470. UPDATE u_sc_workprice
  471. SET auditflag = 0,
  472. auditrep = '',
  473. auditdate = :null_dt
  474. WHERE mtrlid = :arg_mtrlid
  475. And (wrkGrpid = :arg_wrkGrpid OR :arg_wrkGrpid = -1 );
  476. IF sqlca.SQLCode <> 0 THEN
  477. arg_msg = '更新工价表明细审核标记失败,'+sqlca.SQLErrText
  478. rslt = 0
  479. GOTO ext
  480. END IF
  481. IF update_auditflag(arg_mtrlid,null_dt,'',arg_msg,FALSE) = 0 THEN
  482. rslt = 0
  483. GOTO ext
  484. END IF
  485. ext:
  486. IF rslt = 1 AND arg_ifcommit THEN
  487. COMMIT;
  488. END IF
  489. RETURN rslt
  490. end function
  491. public function integer f_addpfmx (long arg_mtrlid, string arg_pfcode, decimal arg_qty, long arg_lp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  492. Long ll_i,cnt,ll_j
  493. String ls_pfcode
  494. Decimal ld_qty
  495. Long count = 0
  496. Long proid
  497. Long proorder
  498. String procode
  499. String proname
  500. Long wrkgrpid
  501. Decimal workprice
  502. Decimal workqty
  503. String worklevel
  504. Decimal workhour
  505. String dscrp
  506. Long auditflag
  507. String auditrep
  508. DateTime auditdate
  509. Long lastflag
  510. string status
  511. IF IsNull(mtrlid) OR mtrlid = 0 THEN
  512. arg_msg = '产品错误,没有对应的产品'
  513. rslt = 0
  514. GOTO ext
  515. END IF
  516. s_pfmx ls_s_pfmx[]
  517. //查询默认清单
  518. deep_count++
  519. datastore ds_workprice
  520. ds_workprice = CREATE datastore
  521. ds_workprice.DataObject = 'dw_sc_workpricetable_mx'
  522. ds_workprice.SetTransObject(sqlca)
  523. IF count > 2000 THEN //防止死递归
  524. arg_msg = '递归太深'+String(count)
  525. rslt = 0
  526. GOTO ext
  527. END IF
  528. DECLARE pf_cur CURSOR FOR
  529. SELECT u_PrdPF.Sonscale,
  530. u_PrdPF.SonLoss,
  531. u_PrdPF.SonDECLosS,
  532. u_PrdPF.SonMtrlid,
  533. u_mtrldef.mtrlcode,
  534. u_mtrldef.mtrlorigin,
  535. u_PrdPF.sonpfcode
  536. FROM u_PrdPF,
  537. u_mtrldef
  538. WHERE ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) AND
  539. ( u_PrdPF.mtrlid = :arg_mtrlid ) AND
  540. ( u_PrdPF.pfcode = :arg_pfcode );
  541. OPEN pf_cur;
  542. count = 1
  543. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  544. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  545. :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].mtrlorigin,:ls_s_pfmx[count].sonpfcode;
  546. DO WHILE sqlca.SQLCode = 0
  547. count++
  548. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale,:ls_s_pfmx[count].SonLoss,&
  549. :ls_s_pfmx[count].SonDECLosS,:ls_s_pfmx[count].SonMtrlid,&
  550. :ls_s_pfmx[count].mtrlcode,:ls_s_pfmx[count].mtrlorigin,:ls_s_pfmx[count].sonpfcode;
  551. LOOP
  552. count = count - 1
  553. CLOSE pf_cur;
  554. FOR ll_i = 1 TO count
  555. SELECT count(*) INTO :cnt
  556. FROM u_PrdPF
  557. WHERE ( u_PrdPF.mtrlid = :ls_s_pfmx[ll_i].SonMtrlid ) AND
  558. ( u_PrdPF.pfcode = :ls_s_pfmx[count].sonpfcode );
  559. IF sqlca.SQLCode <> 0 THEN
  560. arg_msg = '查询物料:'+ls_s_pfmx[count].mtrlcode+'物料清单失败,'+sqlca.SQLErrText
  561. rslt = 0
  562. GOTO ext
  563. END IF
  564. ld_qty = arg_qty * (ls_s_pfmx[ll_i].Sonscale/(1 - ls_s_pfmx[ll_i].SonLoss)+ls_s_pfmx[ll_i].SonDECLosS)
  565. //如果自制,将其工价表插入
  566. IF ls_s_pfmx[ll_i].mtrlorigin = 0 THEN
  567. ds_workprice.Retrieve(ls_s_pfmx[ll_i].SonMtrlid)
  568. FOR ll_j = 1 TO ds_workprice.RowCount()
  569. il_printid++
  570. proid = ds_workprice.Object.proid[ll_j]
  571. proorder = ds_workprice.Object.proorder[ll_j]
  572. procode = ds_workprice.Object.procode[ll_j]
  573. proname = ds_workprice.Object.u_sc_workprice_proname[ll_j]
  574. wrkgrpid = ds_workprice.Object.wrkgrpid[ll_j]
  575. workprice = ds_workprice.Object.workprice[ll_j]
  576. workqty = ds_workprice.Object.workqty[ll_j] * ld_qty
  577. worklevel = ds_workprice.Object.worklevel[ll_j]
  578. workhour = ds_workprice.Object.workhour[ll_j] * ld_qty
  579. dscrp = ds_workprice.Object.dscrp[ll_j]
  580. auditflag = ds_workprice.Object.auditflag[ll_j]
  581. auditrep = ds_workprice.Object.auditrep[ll_j]
  582. auditdate = ds_workprice.Object.auditdate[ll_j]
  583. status = ds_workprice.Object.u_sc_workprice_status[ll_j]
  584. INSERT INTO u_sc_workprice_mx
  585. (parentmtrlid,
  586. printid,
  587. mtrlid,
  588. proid,
  589. proorder,
  590. procode,
  591. proname,
  592. wrkgrpid,
  593. workprice,
  594. workqty,
  595. worklevel,
  596. workhour,
  597. dscrp,
  598. auditflag,
  599. auditrep,
  600. auditdate,
  601. lastflag,
  602. lp,
  603. status)
  604. VALUES
  605. (:mtrlid,
  606. :il_printid,
  607. :ls_s_pfmx[ll_i].SonMtrlid,
  608. :proid,
  609. :proorder,
  610. :procode,
  611. :proname,
  612. :wrkgrpid,
  613. :workprice,
  614. :workqty,
  615. :worklevel,
  616. :workhour,
  617. :dscrp,
  618. :auditflag,
  619. :auditrep,
  620. :auditdate,
  621. :lastflag,
  622. :arg_lp,
  623. :status);
  624. IF sqlca.SQLCode <> 0 THEN
  625. arg_msg = '插入下级自制部件工价表失败'+sqlca.SQLErrText
  626. rslt = 0
  627. GOTO ext
  628. END IF
  629. NEXT
  630. END IF
  631. IF f_addpfmx(ls_s_pfmx[ll_i].SonMtrlid,ls_s_pfmx[ll_i].sonpfcode,ld_qty,arg_lp + 1 ,arg_msg,arg_ifcommit) = 0 THEN
  632. rslt = 0
  633. GOTO ext
  634. END IF
  635. NEXT
  636. ext:
  637. IF rslt = 0 THEN
  638. ROLLBACK;
  639. ELSEIF rslt = 1 AND arg_ifcommit THEN
  640. COMMIT;
  641. END IF
  642. RETURN rslt
  643. end function
  644. public function integer f_clearpfmx (long arg_mtrlid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  645. DELETE FROM u_sc_workprice_mx
  646. WHERE parentmtrlid = :arg_mtrlid;
  647. IF sqlca.SQLCode <> 0 THEN
  648. arg_msg = "删除下级工价表失败,"+sqlca.SQLErrText
  649. rslt = 0
  650. GOTO ext
  651. END IF
  652. ext:
  653. if rslt = 0 then
  654. rollback;
  655. elseif rslt = 1 and arg_ifcommit then
  656. commit;
  657. end if
  658. RETURN rslt
  659. end function
  660. public function integer f_addworkprice (long arg_mtrlid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  661. Long ll_j
  662. Long proid
  663. Long proorder
  664. String procode
  665. String proname
  666. Long wrkgrpid
  667. Decimal workprice
  668. Decimal workqty
  669. String worklevel
  670. Decimal workhour
  671. String dscrp
  672. Long auditflag
  673. String auditrep
  674. DateTime auditdate
  675. Long lastflag
  676. string status
  677. int ifjd
  678. datastore ds_workprice
  679. ds_workprice = CREATE datastore
  680. ds_workprice.DataObject = 'dw_sc_workpricetable_mx'
  681. ds_workprice.SetTransObject(sqlca)
  682. ds_workprice.Retrieve(arg_mtrlid)
  683. FOR ll_j = 1 TO ds_workprice.RowCount()
  684. il_printid++
  685. proid = ds_workprice.Object.proid[ll_j]
  686. proorder = ds_workprice.Object.proorder[ll_j]
  687. procode = ds_workprice.Object.procode[ll_j]
  688. proname = ds_workprice.Object.u_sc_workprice_proname[ll_j]
  689. wrkgrpid = ds_workprice.Object.wrkgrpid[ll_j]
  690. workprice = ds_workprice.Object.workprice[ll_j]
  691. workqty = ds_workprice.Object.workqty[ll_j]
  692. worklevel = ds_workprice.Object.worklevel[ll_j]
  693. workhour = ds_workprice.Object.workhour[ll_j]
  694. dscrp = ds_workprice.Object.dscrp[ll_j]
  695. auditflag = ds_workprice.Object.auditflag[ll_j]
  696. auditrep = ds_workprice.Object.auditrep[ll_j]
  697. auditdate = ds_workprice.Object.auditdate[ll_j]
  698. status = ds_workprice.Object.u_sc_workprice_status[ll_j]
  699. ifjd = ds_workprice.Object.u_sc_workprice_ifjd[ll_j]
  700. INSERT INTO u_sc_workprice_mx
  701. (parentmtrlid,
  702. printid,
  703. mtrlid,
  704. proid,
  705. proorder,
  706. procode,
  707. proname,
  708. wrkgrpid,
  709. workprice,
  710. workqty,
  711. worklevel,
  712. workhour,
  713. dscrp,
  714. auditflag,
  715. auditrep,
  716. auditdate,
  717. lastflag,
  718. lp,
  719. status,
  720. ifjd)
  721. VALUES
  722. (:arg_mtrlid,
  723. :il_printid,
  724. :arg_mtrlid,
  725. :proid,
  726. :proorder,
  727. :procode,
  728. :proname,
  729. :wrkgrpid,
  730. :workprice,
  731. :workqty,
  732. :worklevel,
  733. :workhour,
  734. :dscrp,
  735. :auditflag,
  736. :auditrep,
  737. :auditdate,
  738. :lastflag,
  739. 0,
  740. :status,
  741. :ifjd);
  742. IF sqlca.SQLCode <> 0 THEN
  743. arg_msg = '插入下级自制部件工价表失败'+sqlca.SQLErrText
  744. rslt = 0
  745. GOTO ext
  746. END IF
  747. NEXT
  748. ext:
  749. IF rslt = 0 THEN
  750. ROLLBACK;
  751. ELSEIF rslt = 1 AND arg_ifcommit THEN
  752. COMMIT;
  753. END IF
  754. RETURN rslt
  755. end function
  756. public function integer auditing_gs (long arg_mtrlid, long arg_wrkgrpid, string arg_auditingrep, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,ll_count,ll_Auditflag
  757. DateTime serdate
  758. IF IsNull(arg_mtrlid) THEN
  759. rslt = 0
  760. arg_msg = '没有审核对象!'
  761. GOTO ext
  762. END IF
  763. ll_count = 0
  764. SELECT count(*) INTO :ll_count FROM u_sc_workprice Where mtrlid = :arg_mtrlid;
  765. IF sqlca.SQLCode <> 0 THEN
  766. rslt = 0
  767. arg_msg = '查询该产品的工价表失败,原因:'+sqlca.SQLErrText
  768. GOTO ext
  769. END IF
  770. IF ll_count = 0 THEN
  771. rslt = 0
  772. arg_msg = '该产品没有工序,不能审核'
  773. GOTO ext
  774. END IF
  775. SELECT Top 1 getdate() INTO :serdate FROM u_user;
  776. IF sqlca.SQLCode <> 0 THEN
  777. arg_msg = '查询服务器时间失败'
  778. rslt = 0
  779. GOTO ext
  780. END IF
  781. ll_count = 0
  782. IF arg_wrkGrpid > 0 THEN
  783. SELECT count(*) INTO :ll_count
  784. FROM u_sc_workgroup
  785. Where wrkGrpid = :arg_wrkGrpid;
  786. IF sqlca.SQLCode <> 0 OR ll_count <> 1 THEN
  787. arg_msg = '查询工组资料失败,或者不存在工组资料'
  788. rslt = 0
  789. GOTO ext
  790. END IF
  791. END IF
  792. UPDATE u_sc_workprice
  793. SET auditflag_gs = 1,
  794. auditrep_gs = :arg_auditingrep,
  795. auditdate_gs = :serdate
  796. WHERE mtrlid = :arg_mtrlid
  797. And (wrkGrpid = :arg_wrkGrpid OR :arg_wrkGrpid = -1 );
  798. IF sqlca.SQLCode <> 0 THEN
  799. arg_msg = '更新工价表明细工时审核标记失败,'+sqlca.SQLErrText
  800. rslt = 0
  801. GOTO ext
  802. END IF
  803. ext:
  804. IF rslt = 1 AND arg_ifcommit THEN
  805. COMMIT;
  806. END IF
  807. RETURN rslt
  808. end function
  809. public function integer c_auditing_gs (long arg_mtrlid, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,ll_count,ll_Auditflag
  810. DateTime serdate,null_dt
  811. SetNull(null_dt)
  812. IF IsNull(arg_mtrlid) THEN
  813. rslt = 0
  814. arg_msg = '没有审核对象!'
  815. GOTO ext
  816. END IF
  817. ll_count = 0
  818. SELECT count(*) INTO :ll_count FROM u_sc_workprice Where mtrlid = :arg_mtrlid;
  819. IF sqlca.SQLCode <> 0 THEN
  820. rslt = 0
  821. arg_msg = '查询该产品的工价表失败,原因:'+sqlca.SQLErrText
  822. GOTO ext
  823. END IF
  824. IF ll_count = 0 THEN
  825. rslt = 0
  826. arg_msg = '该产品没有工序,不能审核'
  827. GOTO ext
  828. END IF
  829. ll_count = 0
  830. IF arg_wrkGrpid > 0 THEN
  831. SELECT count(*) INTO :ll_count
  832. FROM u_sc_workgroup
  833. Where wrkGrpid = :arg_wrkGrpid;
  834. IF sqlca.SQLCode <> 0 OR ll_count <> 1 THEN
  835. arg_msg = '查询工组资料失败,或者不存在工组资料'
  836. rslt = 0
  837. GOTO ext
  838. END IF
  839. END IF
  840. UPDATE u_sc_workprice
  841. SET auditflag_gs = 0,
  842. auditrep_gs = '',
  843. auditdate_gs = :null_dt
  844. WHERE mtrlid = :arg_mtrlid
  845. And (wrkGrpid = :arg_wrkGrpid OR :arg_wrkGrpid = -1 );
  846. IF sqlca.SQLCode <> 0 THEN
  847. arg_msg = '更新工价表明细工时审核标记失败,'+sqlca.SQLErrText
  848. rslt = 0
  849. GOTO ext
  850. END IF
  851. ext:
  852. IF rslt = 1 AND arg_ifcommit THEN
  853. COMMIT;
  854. END IF
  855. RETURN rslt
  856. end function
  857. public function integer acceptmx (long arg_proid, string arg_procode, string arg_proname, decimal arg_workqty, decimal arg_workprice, long arg_wrkgrpid, string arg_worklevel, string arg_techlevel, decimal arg_workhour, string arg_dscrp, integer arg_lastflag, long arg_proorder, integer arg_ifownpro, integer arg_lsxtype, integer arg_ifstandard, string arg_status, integer arg_ifjd, string arg_pricestr, string arg_stepstr, ref string arg_msg);Long rslt = 1,ll_proid
  858. String ll_procode
  859. IF it_updatebegin = FALSE THEN
  860. rslt = 0
  861. arG_MSG = "非编辑状态不可以使用,操作取消"
  862. GOTO ext
  863. END IF
  864. //清空值
  865. IF IsNull(arg_workqty) THEN arg_workqty = 1
  866. IF IsNull(arg_workPrice) THEN arg_workPrice = 0
  867. IF IsNull(arg_workhour) THEN arg_workhour = 0
  868. IF IsNull(arg_lastflag) THEN arg_lastflag = 0
  869. IF IsNull(arg_proid) THEN arg_proid = 0
  870. IF IsNull(arg_procode) THEN arg_procode = ''
  871. IF IsNull(arg_proname) THEN arg_proname = ''
  872. IF IsNull(arg_techlevel) THEN arg_techlevel = ''
  873. IF IsNull(arg_worklevel) THEN arg_worklevel = ''
  874. IF IsNull(arg_proorder) THEN arg_proorder = 0
  875. IF IsNull(arg_wrkgrpid) THEN arg_wrkgrpid = 0
  876. IF IsNull(arg_ifownpro) THEN arg_ifownpro = 0
  877. IF IsNull(arg_lsxtype) THEN arg_lsxtype = 0
  878. IF IsNull(arg_ifstandard) THEN arg_ifstandard = 0
  879. IF IsNull(arg_status) THEN arg_status = ''
  880. if isnull(arg_ifjd) then arg_ifjd = 0
  881. if isnull(arg_pricestr) then arg_pricestr = ''
  882. if isnull(arg_stepstr) then arg_stepstr = ''
  883. IF Trim(arg_procode) = '' AND Trim(arg_proname) = '' THEN
  884. rslt = 1
  885. GOTO ext
  886. END IF
  887. IF Trim(arg_procode) = '' THEN
  888. rslt = 0
  889. arG_MSG = "工序号不能为空"
  890. GOTO ext
  891. END IF
  892. IF Trim(arg_proname) = '' THEN
  893. rslt = 0
  894. arG_MSG = "工序名称不能为空"
  895. GOTO ext
  896. END IF
  897. IF arg_workqty <= 0 THEN
  898. rslt = 0
  899. arG_MSG = "数量不能少于1"
  900. GOTO ext
  901. END IF
  902. IF arg_wrkgrpid = 0 THEN
  903. rslt = 0
  904. arG_MSG = "请选择工序所属工组"
  905. GOTO ext
  906. END IF
  907. //写入内容
  908. it_mxbt++
  909. workpricemx[it_mxbt].proid = arg_proid
  910. workpricemx[it_mxbt].Procode = arg_procode
  911. workpricemx[it_mxbt].proname = arg_proname
  912. workpricemx[it_mxbt].workqty = arg_workqty
  913. workpricemx[it_mxbt].workPrice = arg_workPrice
  914. workpricemx[it_mxbt].worklevel = arg_worklevel
  915. workpricemx[it_mxbt].Techlevel = arg_techlevel
  916. workpricemx[it_mxbt].Workhour = arg_workhour
  917. workpricemx[it_mxbt].Dscrp = arg_Dscrp
  918. workpricemx[it_mxbt].lastflag = arg_lastflag
  919. workpricemx[it_mxbt].proorder = arg_proorder
  920. workpricemx[it_mxbt].wrkgrpid = arg_wrkgrpid
  921. workpricemx[it_mxbt].ifownpro = arg_ifownpro
  922. workpricemx[it_mxbt].lsxtype = arg_lsxtype
  923. workpricemx[it_mxbt].ifstandard = arg_ifstandard
  924. workpricemx[it_mxbt].status = arg_status
  925. workpricemx[it_mxbt].ifjd = arg_ifjd
  926. workpricemx[it_mxbt].pricestr = arg_pricestr
  927. workpricemx[it_mxbt].stepstr = arg_stepstr
  928. ext:
  929. IF rslt = 0 THEN p_clearmx()
  930. Return(rslt)
  931. end function
  932. on uo_workpricetable.create
  933. call super::create
  934. TriggerEvent( this, "constructor" )
  935. end on
  936. on uo_workpricetable.destroy
  937. TriggerEvent( this, "destructor" )
  938. call super::destroy
  939. end on