uo_taskwork.sru 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640
  1. $PBExportHeader$uo_taskwork.sru
  2. forward
  3. global type uo_taskwork from nonvisualobject
  4. end type
  5. type s_taskworkmx from structure within uo_taskwork
  6. end type
  7. end forward
  8. type s_taskworkmx from structure
  9. long empid
  10. string procode
  11. string proname
  12. string empcode
  13. string empname
  14. decimal { 10 } amount
  15. decimal { 10 } workprice
  16. decimal { 5 } workhour
  17. string mxdscrp
  18. long printid
  19. string status
  20. long proorder
  21. end type
  22. global type uo_taskwork from nonvisualobject
  23. end type
  24. global uo_taskwork uo_taskwork
  25. type variables
  26. PUBLIC PROTECTEDWRITE Long scid //分部
  27. PUBLIC PROTECTEDWRITE Long billid //计件单自动增量id
  28. //工资月份
  29. PUBLIC PROTECTEDWRITE String billcode //计件单的唯一编号
  30. PUBLIC PROTECTEDWRITE DateTime opdate //建立时间,自动
  31. PUBLIC PROTECTEDWRITE String opemp //建立人
  32. PUBLIC PROTECTEDWRITE DateTime moddate //修改时间,自动
  33. PUBLIC PROTECTEDWRITE String modemp //修改人
  34. PUBLIC PROTECTEDWRITE Int flag //审核标志
  35. PUBLIC PROTECTEDWRITE DateTime auditingdate //审核时间
  36. PUBLIC PROTECTEDWRITE String auditingrep //审核操作员
  37. PUBLIC PROTECTEDWRITE datetime affirmdate //确认时间
  38. PUBLIC PROTECTEDWRITE String affirmemp //确认人
  39. PUBLIC PROTECTEDWRITE int affirmflag //确认标志
  40. Long wagemth
  41. Long orderid //订单号
  42. DateTime billdate //计件日期
  43. Long wrkgrpid //工组id
  44. String wrkgrpname = ''//工组
  45. Long wageid //工资项目id
  46. Long mtrlid // 产品id
  47. Decimal qty //数量
  48. String dscrp = '' //备注
  49. String relcode = '' //相关号码 
  50. long relid = 0
  51. uo_wage u_wage
  52. PRIVATE:
  53. s_taskworkmx taskworkmx[] //明细结构数组
  54. Long it_mxbt = 0 //明细结构数组末指针
  55. Boolean it_newbegin = FALSE //新建标志
  56. Boolean it_updatebegin = FALSE//修改标志
  57. end variables
  58. forward prototypes
  59. public function integer p_clearmx ()
  60. public function integer p_reset ()
  61. public function integer c_auditing (long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit)
  62. public function integer save (ref string arg_msg, boolean arg_ifcommit)
  63. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg)
  64. public function integer newbegin (long arg_scid, ref string arg_msg)
  65. public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg)
  66. public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg)
  67. public function integer affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  68. public function integer c_affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  69. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg)
  70. public function integer acceptmx (long arg_empid, string arg_empcode, string arg_empname, string arg_procode, string arg_proname, decimal arg_amount, decimal arg_workprice, decimal arg_workhour, string arg_mxdscrp, ref string arg_msg, long arg_printid, string arg_status, long arg_proorder)
  71. public function integer auditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  72. public function integer cauditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  73. public function integer auditing (long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit)
  74. public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  75. end prototypes
  76. public function integer p_clearmx ();//INT p_clearmx()
  77. //清除明细
  78. it_mxbt=0
  79. RETURN 1
  80. end function
  81. public function integer p_reset ();//INT p_RESET()
  82. //清除对象及其明细
  83. billid=0
  84. billcode=''
  85. opemp=''
  86. auditingrep=''
  87. flag=0
  88. orderid=0
  89. wrkgrpid=0
  90. wrkgrpname=''
  91. wageid=0
  92. mtrlid=0
  93. qty=0
  94. dscrp=''
  95. relcode=''
  96. it_newbegin=FALSE
  97. it_updatebegin=FALSE
  98. //清除明细
  99. P_CLEARMX()
  100. RETURN 1
  101. end function
  102. public function integer c_auditing (long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit);
  103. Long cnt = 0,i
  104. Int rslt = 1
  105. DateTime null_server_dt
  106. SetNull(null_server_dt)
  107. //检查该月份,该工资项目是否已开工资变更单
  108. cnt = 0
  109. SELECT count(*) INTO :cnt
  110. FROM u_sc_taskwork
  111. WHERE wagemth = :arg_wagemth
  112. AND wageid = :arg_wageid
  113. AND Auditingflag = 1;
  114. IF sqlca.SQLCode <> 0 THEN
  115. rslt = 0
  116. arg_msg = '查询计件单明细失败,原因>>'+sqlca.SQLErrText
  117. GOTO ext
  118. END IF
  119. IF cnt = 0 THEN
  120. rslt = 0
  121. arg_msg = '该月的计件单未审核,不用撤审!'
  122. GOTO ext
  123. END IF
  124. cnt = 0
  125. SELECT count(*) INTO :cnt
  126. FROM u_gz_wageitem Where useflag = 1 AND wageid = :arg_wageid;
  127. IF sqlca.SQLCode <> 0 THEN
  128. rslt = 0
  129. arg_msg = '查询工资项目失败,原因>>'+sqlca.SQLErrText
  130. GOTO ext
  131. END IF
  132. IF cnt = 0 THEN
  133. rslt = 0
  134. arg_msg = '不存在该工资项目,原因>>'+sqlca.SQLErrText
  135. GOTO ext
  136. END IF
  137. IF u_wage.f_wage_clear(arg_wageid,arg_wagemth,arg_msg,FALSE) = 0 THEN
  138. rslt = 0
  139. GOTO ext
  140. END IF
  141. IF sys_option_taskwork_not_affirm = 0 THEN
  142. UPDATE u_sc_taskwork SET
  143. Auditingflag = 0,
  144. Auditingrep = '',
  145. Auditingdate = :null_server_dt
  146. Where wagemth = :arg_wagemth AND Auditingflag = 1 AND wageid = :arg_wageid;
  147. ELSE
  148. UPDATE u_sc_taskwork SET
  149. Auditingflag = 0,
  150. Auditingrep = '',
  151. Auditingdate = :null_server_dt,
  152. affirmdate = :null_server_dt,
  153. affirmemp = '',
  154. affirmflag = 0
  155. Where wagemth = :arg_wagemth AND Auditingflag = 1 AND wageid = :arg_wageid;
  156. END IF
  157. IF sqlca.SQLCode <> 0 THEN
  158. arg_msg = '更新计件明细单失败,原因:'+sqlca.SQLErrText
  159. rslt = 0
  160. GOTO ext
  161. END IF
  162. ext:
  163. IF rslt = 0 THEN
  164. ROLLBACK;
  165. ELSEIF rslt = 1 AND arg_ifcommit THEN
  166. COMMIT;
  167. END IF
  168. RETURN rslt
  169. end function
  170. public function integer save (ref string arg_msg, boolean arg_ifcommit);//====================================================================
  171. // Function: save(arg_msg,arg_ifcommit)
  172. //--------------------------------------------------------------------
  173. // Description:
  174. //--------------------------------------------------------------------
  175. // Arguments:
  176. // reference string arg_msg
  177. // value boolean arg_ifcommit
  178. //--------------------------------------------------------------------
  179. // Returns: integer
  180. //--------------------------------------------------------------------
  181. // Author: yyx Date: 2003.11.21
  182. //--------------------------------------------------------------------
  183. // Modify History:
  184. //
  185. //====================================================================
  186. Integer rslt = 1,cnt = 0,i
  187. DateTime server_dt
  188. Long ls_newid
  189. IF IsNull(wrkgrpid) THEN wrkgrpid = 0
  190. IF IsNull(wrkgrpname) THEN wrkgrpname = ''
  191. IF IsNull(wageid) THEN wageid = 0
  192. IF IsNull(mtrlid) THEN mtrlid = 0
  193. IF IsNull(dscrp) THEN dscrp = ''
  194. IF IsNull(wagemth) THEN wagemth = 0
  195. IF IsNull(orderid) THEN orderid = 0
  196. if isnull(relid) then relid = 0
  197. IF IsNull(relcode) THEN relcode = ''
  198. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  199. rslt = 0
  200. arg_msg = "非编辑状态不可以提交"
  201. GOTO ext
  202. END IF
  203. SELECT Top 1 getdate() INTO :server_dt FROM u_user;
  204. //取得系统时间,借用操作员表
  205. IF sqlca.SQLCode <> 0 THEN
  206. rslt = 0
  207. arg_msg = "查询操作失败,日期 "
  208. GOTO ext
  209. END IF
  210. IF mtrlid <= 0 THEN
  211. rslt = 0
  212. arg_msg = '请先选择产品'
  213. GOTO ext
  214. END IF
  215. if wagemth = 0 then
  216. rslt = 0
  217. arg_msg = '请输入工资月份'
  218. GOTO ext
  219. END IF
  220. IF it_mxbt = 0 THEN //
  221. rslt = 0
  222. arg_msg = "没有计件明细"
  223. GOTO ext
  224. END IF
  225. //IF f_check_inoutdate(0,billdate,FALSE,arG_MSG) = 0 THEN
  226. // rslt = 0
  227. // GOTO ext
  228. //END IF
  229. cnt = 0
  230. SELECT count(*) INTO :cnt
  231. FROM u_gz_wageitem
  232. Where wageid = :wageid;
  233. IF sqlca.SQLCode <> 0 THEN
  234. rslt = 0
  235. arg_msg = "查询工资项目失败!"
  236. GOTO ext
  237. END IF
  238. IF cnt <> 1 THEN
  239. rslt = 0
  240. arg_msg = "不存在工资项目!"
  241. GOTO ext
  242. END IF
  243. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  244. IF billid = 0 THEN //新建
  245. ls_newid = f_sys_scidentity(0,"u_sc_taskwork","billid",arg_msg,TRUE,sqlca)
  246. IF ls_newid <= 0 THEN
  247. rslt = 0
  248. GOTO ext
  249. END IF
  250. billcode = getid(0,"JJ",Date(server_dt),TRUE,sqlca) //取得新单据编号
  251. IF billcode = "err" THEN
  252. billcode = ''
  253. rslt = 0
  254. arg_msg = "无法获取计件单编号"
  255. GOTO ext
  256. END IF
  257. INSERT INTO u_sc_taskwork (
  258. scid,
  259. billid,
  260. billcode,
  261. Wagemth,
  262. orderid,
  263. wrkGrpid,
  264. WrkGrpname,
  265. wageid,
  266. billdate,
  267. Dscrp,
  268. opdate,
  269. opemp,
  270. mtrlid,
  271. relcode,
  272. relid )
  273. VALUES (
  274. :scid,
  275. :ls_newid,
  276. :billcode,
  277. :Wagemth,
  278. :orderid,
  279. :wrkGrpid,
  280. :WrkGrpname,
  281. :wageid,
  282. :billdate,
  283. :dscrp,
  284. :server_dt,
  285. :publ_operator,
  286. :mtrlid,
  287. :relcode,
  288. :relid );
  289. IF sqlca.SQLCode <> 0 THEN
  290. rslt = 0
  291. arg_msg = "因网络或其它原因导致插入操作失败>>"+"~n"+sqlca.SQLErrText
  292. GOTO ext
  293. END IF
  294. billid = ls_newid
  295. FOR i = 1 TO it_mxbt
  296. INSERT INTO u_sc_taskworkmx
  297. ( scid,
  298. billid,
  299. empid,
  300. empcode,
  301. empname,
  302. procode,
  303. proname,
  304. amount,
  305. workprice,
  306. workhour,
  307. mxdscrp,
  308. printid,
  309. status,
  310. proorder)
  311. VALUES (
  312. :scid,
  313. :ls_newid,
  314. :taskworkmx[i].empid,
  315. :taskworkmx[i].empcode,
  316. :taskworkmx[i].empname,
  317. :taskworkmx[i].procode,
  318. :taskworkmx[i].proname,
  319. :taskworkmx[i].amount,
  320. :taskworkmx[i].workprice,
  321. :taskworkmx[i].workhour,
  322. :taskworkmx[i].mxdscrp,
  323. :taskworkmx[i].printid,
  324. :taskworkmx[i].status,
  325. :taskworkmx[i].proorder);
  326. IF sqlca.SQLCode <> 0 THEN
  327. billid = 0 //还原noticeid
  328. rslt = 0
  329. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  330. ROLLBACK ;
  331. GOTO ext
  332. END IF
  333. NEXT
  334. ELSE //////////////////////////////////////////////// //更新
  335. UPDATE u_sc_taskwork
  336. SET orderid = :orderid,
  337. Mtrlid = :Mtrlid,
  338. wrkGrpid = :wrkGrpid,
  339. WrkGrpname = :WrkGrpname,
  340. wageid = :wageid,
  341. billdate = :billdate,
  342. Dscrp = :Dscrp,
  343. moddate = :server_dt,
  344. modemp = :publ_operator,
  345. relcode = :relcode,
  346. wagemth = :wagemth,
  347. relid = :relid
  348. WHERE u_sc_taskwork.billid = :billid
  349. AND u_sc_taskwork.scid = :scid
  350. AND Auditingflag = 0;
  351. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  352. rslt = 0
  353. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  354. GOTO ext
  355. END IF
  356. //删除原有明细
  357. DELETE FROM u_sc_taskworkmx
  358. Where u_sc_taskworkmx.billid = :billid;
  359. IF sqlca.SQLCode <> 0 THEN
  360. rslt = 0
  361. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  362. GOTO ext
  363. END IF
  364. FOR i = 1 TO it_mxbt
  365. INSERT INTO u_sc_taskworkmx
  366. (scid,
  367. billid,
  368. empid,
  369. empcode,
  370. empname,
  371. procode,
  372. proname,
  373. amount,
  374. workprice,
  375. workhour,
  376. mxdscrp,
  377. printid,
  378. status,
  379. proorder)
  380. VALUES (
  381. :scid,
  382. :billid,
  383. :taskworkmx[i].empid,
  384. :taskworkmx[i].empcode,
  385. :taskworkmx[i].empname,
  386. :taskworkmx[i].procode,
  387. :taskworkmx[i].proname,
  388. :taskworkmx[i].amount,
  389. :taskworkmx[i].workprice,
  390. :taskworkmx[i].workhour,
  391. :taskworkmx[i].mxdscrp,
  392. :taskworkmx[i].printid,
  393. :taskworkmx[i].status,
  394. :taskworkmx[i].proorder);
  395. IF sqlca.SQLCode <> 0 THEN
  396. rslt = 0
  397. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  398. GOTO ext
  399. END IF
  400. NEXT
  401. END IF
  402. it_newbegin = FALSE
  403. it_updatebegin = FALSE
  404. ext:
  405. IF rslt = 0 THEN
  406. ROLLBACK;
  407. p_clearmx()
  408. ELSEIF rslt = 1 AND arg_ifcommit THEN
  409. COMMIT;
  410. END IF
  411. Return(rslt)
  412. end function
  413. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);//====================================================================
  414. // Function: add_dscrp(arg_billid,arg_newdescppart,arg_msg)
  415. //--------------------------------------------------------------------
  416. // Description:
  417. //--------------------------------------------------------------------
  418. // Arguments:
  419. // value long arg_billid
  420. // value string arg_newdescppart
  421. // reference string arg_msg
  422. //--------------------------------------------------------------------
  423. // Returns: integer
  424. //--------------------------------------------------------------------
  425. // Author: yyx Date: 2003.11.21
  426. //--------------------------------------------------------------------
  427. // Modify History:
  428. //
  429. //====================================================================
  430. int rslt = 1
  431. arg_newdescppart = trim(arg_newdescppart)
  432. if arg_billid <= 0 then
  433. rslt = 0
  434. arg_msg = "没有删除对象,操作取消"
  435. goto ext
  436. end if
  437. if it_newbegin or it_updatebegin then
  438. rslt=0
  439. arg_msg="编辑状态下不可以执行,操作取消"
  440. goto ext
  441. end if
  442. select u_sc_taskwork.auditingflag
  443. into :flag
  444. from u_sc_taskwork
  445. where u_sc_taskwork.billid = :arg_billid;
  446. if sqlca.sqlcode <> 0 then
  447. rslt = 0
  448. arg_msg = '查询计件单操作失败'
  449. goto ext
  450. end if
  451. if flag = 0 then
  452. rslt = 0
  453. arg_msg = "非审核状态下不可用"
  454. goto ext
  455. end if
  456. update u_sc_taskwork
  457. set dscrp = dscrp+' '+:arg_newdescppart
  458. where u_sc_taskwork.billid = :billid;
  459. if sqlca.sqlcode <> 0 then
  460. rollback ;
  461. rslt = 0
  462. arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.sqlerrtext
  463. goto ext
  464. end if
  465. commit;
  466. dscrp = dscrp+' '+arg_newdescppart
  467. ext:
  468. return (rslt)
  469. end function
  470. public function integer newbegin (long arg_scid, ref string arg_msg);long rslt = 1
  471. if arg_scid < 0 then
  472. arg_msg = '请选择分部'
  473. rslt = 0
  474. goto ext
  475. end if
  476. p_reset()
  477. scid=arg_scid
  478. it_newbegin=TRUE
  479. it_updatebegin=FALSE
  480. ext:
  481. if rslt = 0 then p_reset()
  482. return rslt
  483. end function
  484. public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1
  485. IF arg_billid <= 0 THEN
  486. rslt = 0
  487. arG_MSG = "非法的单据唯一码"
  488. GOTO ext
  489. END IF
  490. SELECT
  491. billcode,
  492. Wagemth,
  493. orderid,
  494. wrkGrpid,
  495. WrkGrpname,
  496. wageid,
  497. billdate,
  498. Dscrp,
  499. mtrlid,
  500. relcode,
  501. AuditingFlag,
  502. affirmflag,
  503. relid
  504. INTO
  505. :billcode,
  506. :Wagemth,
  507. :orderid,
  508. :wrkGrpid,
  509. :WrkGrpname,
  510. :wageid,
  511. :billdate,
  512. :Dscrp,
  513. :mtrlid,
  514. :relcode,
  515. :flag,
  516. :affirmflag,
  517. :relid
  518. FROM u_sc_taskwork
  519. Where billid = :arg_billid
  520. and scid = :arg_scid;
  521. IF sqlca.SQLCode <> 0 THEN
  522. rslt = 0
  523. arG_MSG = "查询操作失败(错误单据唯一码),单据"+sqlca.SQLErrText
  524. GOTO ext
  525. END IF
  526. billid = arg_billid
  527. scid = arg_scid
  528. ext:
  529. IF rslt = 0 THEN p_reset()
  530. RETURN rslt
  531. end function
  532. public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg);
  533. Int rslt = 1
  534. Long i = 1,no_mxcheck = 0
  535. IF arg_billid <= 0 THEN
  536. rslt = 0
  537. arg_msg = "非法出仓单唯一码"
  538. GOTO ext
  539. END IF
  540. rslt = p_getinfo(arg_scid,arg_billid,arg_msg)
  541. IF rslt = 0 THEN GOTO ext
  542. DECLARE cur_mx CURSOR FOR
  543. SELECT Empid, Procode, Proname, Empcode, Empname, Amount, Workprice, Workhour,
  544. MXDscrp, printid,status,proorder
  545. FROM u_sc_taskworkmx
  546. Where billid = :arg_billid;
  547. OPEN cur_mx;
  548. FETCH cur_mx INTO :taskworkmx[i].empid,:taskworkmx[i].procode,:taskworkmx[i].proname,
  549. :taskworkmx[i].empcode,:taskworkmx[i].empname,:taskworkmx[i].amount,:taskworkmx[i].workprice,
  550. :taskworkmx[i].Workhour,:taskworkmx[i].MXDscrp,:taskworkmx[i].printid,:taskworkmx[i].status,:taskworkmx[i].proorder;
  551. DO WHILE sqlca.SQLCode = 0
  552. i++
  553. FETCH cur_mx INTO :taskworkmx[i].empid,:taskworkmx[i].procode,:taskworkmx[i].proname,
  554. :taskworkmx[i].empcode,:taskworkmx[i].empname,:taskworkmx[i].amount,:taskworkmx[i].workprice,
  555. :taskworkmx[i].Workhour,:taskworkmx[i].MXDscrp,:taskworkmx[i].printid,:taskworkmx[i].status,:taskworkmx[i].proorder;
  556. LOOP
  557. CLOSE cur_mx;
  558. //检验明细是否读入完整
  559. SELECT count(*) INTO :no_mxcheck
  560. FROM u_sc_taskworkmx
  561. WHERE u_sc_taskworkmx.billid = :arg_billid;
  562. IF sqlca.SQLCode <> 0 THEN
  563. rslt = 0
  564. arg_msg = "查询操作失败,单据明细数量"
  565. GOTO ext
  566. END IF
  567. IF i <> (no_mxcheck+1) THEN
  568. rslt = 0
  569. arg_msg = "查询操作失败,单据明细"
  570. GOTO ext
  571. END IF
  572. billid = arg_billid
  573. it_mxbt = i - 1
  574. ext:
  575. IF rslt = 0 THEN p_reset()
  576. RETURN rslt
  577. end function
  578. public function integer affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  579. Long i
  580. uo_order_ml uo_ml
  581. uo_ml = CREATE uo_order_ml
  582. IF arg_billid = 0 THEN
  583. rslt = 0
  584. arg_msg = "没有审核对象"
  585. GOTO ext
  586. END IF
  587. IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  588. rslt = 0
  589. GOTO ext
  590. END IF
  591. IF affirmflag = 1 THEN
  592. rslt = 0
  593. arg_msg = '该单据已确认'
  594. GOTO ext
  595. END IF
  596. UPDATE u_sc_taskwork
  597. SET affirmemp = :publ_operator,
  598. affirmdate = getdate(),
  599. affirmflag = 1
  600. WHERE u_sc_taskwork.billid = :arg_billid
  601. AND affirmflag = 0;
  602. IF sqlca.SQLCode <> 0 THEN
  603. rslt = 0
  604. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+sqlca.SQLErrText
  605. GOTO ext
  606. ELSEIF sqlca.SQLNRows = 0 THEN
  607. rslt = 0
  608. arg_msg = "单据正在确认,请稍后查询。"+"~n"+sqlca.SQLErrText
  609. GOTO ext
  610. END IF
  611. IF sys_option_add_orderrqwp_fqty = 1 THEN
  612. IF orderid > 0 AND relid > 0 THEN
  613. FOR i = 1 TO it_mxbt
  614. IF uo_ml.uof_add_procode_qty(scid,orderid,relid,&
  615. taskworkmx[i].procode,taskworkmx[i].amount,arg_msg,FALSE) = 0 THEN
  616. rslt = 0
  617. GOTO ext
  618. END IF
  619. NEXT
  620. END IF
  621. END IF
  622. ext:
  623. IF rslt = 0 THEN
  624. ROLLBACK;
  625. ELSEIF rslt = 1 AND arg_ifcommit THEN
  626. COMMIT;
  627. END IF
  628. DESTROY uo_ml
  629. RETURN rslt
  630. end function
  631. public function integer c_affirm (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  632. DateTime null_dt
  633. SetNull(null_dt)
  634. Long i
  635. uo_order_ml uo_ml
  636. uo_ml = CREATE uo_order_ml
  637. IF arg_billid = 0 THEN
  638. rslt = 0
  639. arg_msg = "没有审核对象"
  640. GOTO ext
  641. END IF
  642. IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  643. rslt = 0
  644. GOTO ext
  645. END IF
  646. IF affirmflag = 0 THEN
  647. rslt = 0
  648. arg_msg = '该单据未确认,不能反确认'
  649. GOTO ext
  650. END IF
  651. UPDATE u_sc_taskwork
  652. SET affirmemp = '',
  653. affirmdate = :null_dt,
  654. affirmflag = 0
  655. WHERE u_sc_taskwork.billid = :arg_billid
  656. AND u_sc_taskwork.scid = :arg_scid
  657. AND affirmflag = 1
  658. AND AuditingFlag = 0;
  659. IF sqlca.SQLCode <> 0 THEN
  660. rslt = 0
  661. arg_msg = "因网络或其它原因导致反确认单据操作失败"+"~n"+sqlca.SQLErrText
  662. GOTO ext
  663. ELSEIF sqlca.SQLNRows = 0 THEN
  664. rslt = 0
  665. arg_msg = "单据正在反确认,请稍后查询。"+"~n"+sqlca.SQLErrText
  666. GOTO ext
  667. END IF
  668. IF sys_option_add_orderrqwp_fqty = 1 THEN
  669. IF orderid > 0 AND relid > 0 THEN
  670. FOR i = 1 TO it_mxbt
  671. IF uo_ml.uof_add_procode_qty(scid,orderid,relid,&
  672. taskworkmx[i].procode,0 - taskworkmx[i].amount,arg_msg,FALSE) = 0 THEN
  673. rslt = 0
  674. GOTO ext
  675. END IF
  676. NEXT
  677. END IF
  678. END IF
  679. ext:
  680. IF rslt = 0 THEN
  681. ROLLBACK ;
  682. ELSEIF rslt = 1 AND arg_ifcommit THEN
  683. COMMIT ;
  684. END IF
  685. DESTROY uo_ml
  686. RETURN rslt
  687. end function
  688. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);//====================================================================
  689. // Function: updatebegin(arg_billid,arg_msg)
  690. //--------------------------------------------------------------------
  691. // Description:
  692. //--------------------------------------------------------------------
  693. // Arguments:
  694. // value long arg_billid
  695. // reference string arg_msg
  696. //--------------------------------------------------------------------
  697. // Returns: integer
  698. //--------------------------------------------------------------------
  699. // Author: yyx Date: 2003.11.21
  700. //--------------------------------------------------------------------
  701. // Modify History:
  702. //
  703. //====================================================================
  704. int rslt = 1
  705. if arg_billid <= 0 then
  706. billid = 0
  707. goto ext
  708. end if
  709. if p_getinfo(arg_scid,arg_billid,arg_msg) = 0 then
  710. rslt = 0
  711. goto ext
  712. end if
  713. if affirmflag = 1 then
  714. rslt = 0
  715. arg_msg = '单据已经确认,不可以修改'
  716. goto ext
  717. end if
  718. if flag = 1 then
  719. rslt = 0
  720. arg_msg = '单据已经审核,不可以修改'
  721. goto ext
  722. end if
  723. billid = arg_billid
  724. p_clearmx()
  725. it_newbegin = false
  726. it_updatebegin = true
  727. ext:
  728. if rslt = 0 then p_reset()
  729. return rslt
  730. end function
  731. public function integer acceptmx (long arg_empid, string arg_empcode, string arg_empname, string arg_procode, string arg_proname, decimal arg_amount, decimal arg_workprice, decimal arg_workhour, string arg_mxdscrp, ref string arg_msg, long arg_printid, string arg_status, long arg_proorder);
  732. Long rslt = 1,cnt = 0,ls_i
  733. String ls_empname,ls_empcode
  734. Decimal lde_workqty,ld_othertask_qty
  735. Decimal ld_Otherbill_qty,ld_Otherbill_qty_2
  736. Decimal ld_finish_qty
  737. Decimal lde_orderqty, lde_assignqty, lde_cp_rate, lde_gz_qty
  738. String ls_assmsg
  739. IF it_newbegin = False And it_updatebegin = False THEN
  740. rslt = 0
  741. arg_msg = "非编辑状态不可以使用,操作取消"
  742. GOTO ext
  743. END IF
  744. IF IsNull(arg_empid) THEN arg_empid = 0
  745. IF IsNull(arg_empcode) THEN arg_empcode = ''
  746. IF IsNull(arg_empname) THEN arg_empname = ''
  747. IF IsNull(arg_procode) THEN arg_procode = ''
  748. IF IsNull(arg_proname) THEN arg_proname = ''
  749. IF IsNull(arg_amount) THEN arg_amount = 0
  750. IF IsNull(arg_workprice) THEN arg_workprice = 0
  751. IF IsNull(arg_workhour) THEN arg_workhour = 0
  752. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  753. IF IsNull(arg_status) THEN arg_status = ''
  754. IF arg_amount = 0 THEN
  755. rslt = 1
  756. GOTO ext
  757. END IF
  758. IF IsNull(arg_empcode) Or Trim(arg_empcode) = '' THEN
  759. rslt = 0
  760. arg_msg = '员工编号不能为空'
  761. GOTO ext
  762. END IF
  763. IF Trim(arg_proname) = '' THEN
  764. rslt = 0
  765. arg_msg = '工序名称不能为空'
  766. GOTO ext
  767. END IF
  768. IF arg_amount < 0 Or arg_workhour < 0 THEN //检查生产数量
  769. rslt = 0
  770. arg_msg = "数量或工时错误"
  771. GOTO ext
  772. END IF
  773. SELECT empcode,empname
  774. INTO :ls_empcode,:ls_empname
  775. FROM u_rs_empinfo
  776. Where empid = :arg_empid;
  777. IF sqlca.SQLCode <> 0 THEN
  778. rslt = 0
  779. arg_msg = '查询员工资料失败。>'+sqlca.SQLErrText
  780. GOTO ext
  781. END IF
  782. IF ls_empname <> arg_empname Or ls_empcode <> arg_empcode THEN
  783. rslt = 0
  784. arg_msg = arg_empname+'>>该员工的编号或名称不正确。'
  785. GOTO ext
  786. END IF
  787. /////////////// //
  788. IF orderid > 0 THEN //选订单的
  789. //查订单数
  790. // u_saletaskmx.orderqty, u_saletaskmx.assignqty
  791. //按已进仓的比例, 限制计件总数
  792. SELECT orderqty , assignqty
  793. INTO :lde_orderqty, :lde_assignqty
  794. FROM u_saletaskmx
  795. WHERE scid = :scid
  796. AND taskid = :orderid
  797. And printid = :relid;
  798. IF sqlca.SQLCode <> 0 THEN
  799. arg_msg = '查询工序:'+arg_procode+',订单相关信息失败,'+sqlca.SQLErrText
  800. rslt = 0
  801. GOTO ext
  802. END IF
  803. //计划总数 lde_workqty
  804. //已完成数 ld_finish_qty
  805. IF sys_option_add_orderrqwp_fqty = 1 THEN
  806. //查数量顺带查是否有该工序
  807. SELECT proqty, finishqty INTO :lde_workqty, :ld_finish_qty
  808. FROM U_OrderRqwp
  809. WHERE scid = :scid
  810. AND printid = :relid
  811. AND procode = :arg_procode
  812. AND taskid = :orderid
  813. And mtrlid = :mtrlid;
  814. IF sqlca.SQLCode <> 0 THEN
  815. arg_msg = '查询工序:'+arg_procode+',计划数量失败,'+sqlca.SQLErrText
  816. rslt = 0
  817. GOTO ext
  818. END IF
  819. END IF
  820. //计划总数
  821. // IF sys_option_taskwork_procode_order = 0 THEN
  822. // SELECT workqty * :qty INTO :lde_workqty
  823. // FROM u_sc_workprice
  824. // WHERE mtrlid = :mtrlid
  825. // And procode = :arg_procode;
  826. // IF sqlca.SQLCode <> 0 THEN
  827. // arg_msg = '查询产品工序数失败,'+sqlca.SQLErrText
  828. // rslt = 0
  829. // GOTO ext
  830. // END IF
  831. // ld_finish_qty = 0
  832. // END IF
  833. IF sys_option_taskwork_not_affirm = 1 THEN
  834. ld_finish_qty = 0
  835. END IF
  836. IF sys_opton_taskwork_gz_qty = 0 THEN //按订单已进仓数 开计件单
  837. lde_gz_qty = lde_assignqty
  838. ls_assmsg = "订单已进仓数"
  839. ELSEIF sys_opton_taskwork_gz_qty = 1 THEN //按订单安排生产数 开计件单
  840. IF sys_option_taskwork_procode_order = 1 THEN
  841. SELECT proqty INTO :lde_workqty
  842. FROM U_OrderRqwp
  843. WHERE scid = :scid
  844. AND printid = :relid
  845. AND procode = :arg_procode
  846. AND taskid = :orderid
  847. And mtrlid = :mtrlid;
  848. IF sqlca.SQLCode <> 0 THEN
  849. arg_msg = '查询工序:'+arg_procode+',计划数量失败,'+sqlca.SQLErrText
  850. rslt = 0
  851. GOTO ext
  852. END IF
  853. lde_gz_qty = lde_workqty
  854. ELSE
  855. SELECT workqty INTO :lde_workqty
  856. FROM u_sc_workprice
  857. WHERE mtrlid = :mtrlid
  858. And procode = :arg_procode;
  859. IF sqlca.SQLCode <> 0 THEN
  860. arg_msg = '行:'+String(arg_printid)+',查询工序:'+arg_procode+',工价表数量失败,'+sqlca.SQLErrText
  861. rslt = 0
  862. GOTO ext
  863. END IF
  864. lde_gz_qty = lde_orderqty * lde_workqty
  865. END IF
  866. ls_assmsg = "订单安排生产数"
  867. ELSEIF sys_opton_taskwork_gz_qty = 2 THEN //不限制
  868. lde_gz_qty =100000
  869. END IF
  870. //产品个人工序 已开单数 And (u_sc_taskwork.affirmflag = 0 Or :sys_option_taskwork_not_affirm = 1 )
  871. SELECT isnull(sum(Amount),0) INTO :ld_othertask_qty
  872. FROM u_sc_taskworkmx,u_sc_taskwork
  873. WHERE u_sc_taskworkmx.billid = u_sc_taskwork.billid
  874. AND u_sc_taskworkmx.scid = u_sc_taskwork.scid
  875. AND u_sc_taskwork.mtrlid = :mtrlid
  876. AND u_sc_taskwork.orderid = :orderid
  877. AND u_sc_taskwork.relid = :relid
  878. AND u_sc_taskworkmx.procode = :arg_procode
  879. AND u_sc_taskwork.billid <> :billid
  880. ;
  881. IF sqlca.SQLCode <> 0 THEN
  882. arg_msg = '查询工序:'+arg_procode+'其它已开单未确认数失败,'+sqlca.SQLErrText
  883. rslt = 0
  884. GOTO ext
  885. END IF
  886. //个人产品工序 已开单数 And (u_scwg_taskwork_2.affirmflag = 0 Or :sys_option_taskwork_not_affirm = 1 )
  887. SELECT isnull(sum(qty),0) INTO :ld_Otherbill_qty_2
  888. FROM u_scwg_taskwork_2,u_scwg_taskwork_2_mx
  889. WHERE u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid
  890. AND u_scwg_taskwork_2_mx.mtrlid = :mtrlid
  891. AND u_scwg_taskwork_2_mx.orderid = :orderid
  892. AND u_scwg_taskwork_2_mx.procode = :arg_procode
  893. AND u_scwg_taskwork_2_mx.relprintid = :relid
  894. AND u_scwg_taskwork_2.scid = :scid
  895. ;
  896. IF sqlca.SQLCode <> 0 THEN
  897. arg_msg = '查询工序:'+arg_procode+'个人产品计件单开单未确认数失败,'+sqlca.SQLErrText
  898. rslt = 0
  899. GOTO ext
  900. END IF
  901. Decimal ld_mx_qty = 0
  902. Long l
  903. //找本单总数
  904. FOR l = 1 To it_mxbt
  905. IF taskworkmx[l].procode = arg_procode THEN
  906. ld_mx_qty = ld_mx_qty + taskworkmx[l].Amount
  907. END IF
  908. NEXT
  909. IF arg_amount + Max(ld_finish_qty , ld_othertask_qty + ld_Otherbill_qty + ld_Otherbill_qty_2) + ld_mx_qty > lde_gz_qty THEN
  910. rslt = 0
  911. arg_msg = '第 '+String(arg_printid)+' 行,工序:'+arg_procode+',员工:'+arg_empname+',计件数量不能大于'+ls_assmsg+', 系统选项[081]限制~r~n' &
  912. + '订单安排生产数:'+String(lde_orderqty,'####0.####')+',已进仓数:'+String(lde_assignqty,'####0.####')+',可计件总数:'+String(lde_gz_qty,'####0.####')+'~r~n' &
  913. + '计件已完成数:'+String(ld_finish_qty,'####0.####')+',本单已开单:'+String(ld_mx_qty,'####0.####')+',其他已开单数:'+String(ld_othertask_qty + ld_Otherbill_qty + ld_Otherbill_qty_2,'####0.####')+'~r~n' &
  914. + '不能开单:'+String(arg_amount,'####0.####')+'~r~n' &
  915. + String(lde_gz_qty,'####0.####') +' < '+String(ld_finish_qty,'####0.####')+' + '+String(ld_mx_qty,'####0.####')+' + '+String(ld_othertask_qty + ld_Otherbill_qty + ld_Otherbill_qty_2,'####0.####')+' + '+String(arg_amount,'####0.####')
  916. GOTO ext
  917. END IF
  918. END IF
  919. //***检查工价表工序是否已审核工价
  920. Int ll_auditflag
  921. IF sys_option_taskwork_procode_order = 0 THEN
  922. SELECT auditflag
  923. INTO :ll_auditflag
  924. FROM u_sc_workprice
  925. WHERE mtrlid = :mtrlid
  926. And procode = :arg_procode;
  927. IF sqlca.SQLCode = 0 THEN
  928. IF ll_auditflag = 0 THEN
  929. arg_msg = '工序工价未审核:'+arg_procode+arg_proname
  930. rslt = 0
  931. GOTO ext
  932. END IF
  933. ELSE
  934. cnt = 0
  935. SELECT count(*) INTO :cnt
  936. FROM u_sc_workprocedure
  937. WHERE code = :arg_procode
  938. And ifpubl = 1;
  939. IF sqlca.SQLCode <> 0 THEN
  940. arg_msg = '查询工序:'+arg_procode+arg_proname+' 审核标记失败'
  941. rslt = 0
  942. GOTO ext
  943. END IF
  944. IF cnt = 0 THEN
  945. arg_msg = '查询工序:'+arg_procode+arg_proname+' 审核标记失败'
  946. rslt = 0
  947. GOTO ext
  948. END IF
  949. END IF
  950. END IF
  951. //******************************
  952. Decimal ld_workprice
  953. //检查限价
  954. IF sys_option_taskwork_price_if_mod = 1 THEN //启用检查限价选项
  955. IF sys_option_taskwork_procode_order = 0 THEN //按工价表限价
  956. SELECT workPrice INTO :ld_workprice
  957. FROM u_sc_workprice
  958. WHERE mtrlid = :mtrlid
  959. And procode = :arg_procode;
  960. IF sqlca.SQLCode = 0 THEN
  961. IF ld_workprice <> arg_workprice THEN
  962. rslt = 0
  963. arg_msg = '工序:'+arg_procode+' 工价表工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_workprice,'#,##0.00########')
  964. GOTO ext
  965. END IF
  966. ELSE
  967. SELECT workprice INTO :ld_workprice
  968. FROM u_sc_workprocedure
  969. WHERE code = :arg_procode
  970. And ifpubl = 1;
  971. IF sqlca.SQLCode <> 0 THEN
  972. rslt = 0
  973. arg_msg = '查询公共工序:'+arg_procode+' 工价失败'+'~n'+sqlca.SQLErrText
  974. GOTO ext
  975. END IF
  976. IF ld_workprice <> arg_workprice THEN
  977. rslt = 0
  978. arg_msg = '公共工序:'+arg_procode+' 工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_workprice,'#,##0.00########')
  979. GOTO ext
  980. END IF
  981. END IF
  982. ELSE //按生产计划工序明细限价
  983. SELECT workPrice INTO :ld_workprice
  984. FROM U_OrderRqwp
  985. WHERE scid = :scid
  986. AND taskid = :orderid
  987. AND printid = :relid
  988. And procode = :arg_procode;
  989. IF sqlca.SQLCode = 0 THEN
  990. IF ld_workprice <> arg_workprice THEN
  991. rslt = 0
  992. arg_msg = '工序:'+arg_procode+' 生产计划工序明细工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_workprice,'#,##0.00########')
  993. GOTO ext
  994. END IF
  995. ELSE
  996. SELECT workprice INTO :ld_workprice
  997. FROM u_sc_workprocedure
  998. WHERE code = :arg_procode
  999. And ifpubl = 1;
  1000. IF sqlca.SQLCode <> 0 THEN
  1001. rslt = 0
  1002. arg_msg = '查询公共工序:'+arg_procode+' 工价失败'+'~n'+sqlca.SQLErrText
  1003. GOTO ext
  1004. END IF
  1005. IF ld_workprice <> arg_workprice THEN
  1006. rslt = 0
  1007. arg_msg = '公共工序:'+arg_procode+' 工价为:'+String(ld_workprice,'#,##0.00########')+',不能输入工价:'+String(arg_workprice,'#,##0.00########')
  1008. GOTO ext
  1009. END IF
  1010. END IF
  1011. END IF
  1012. END IF
  1013. /////////////////////////// //
  1014. FOR ls_i = 1 To it_mxbt //合并重复项
  1015. IF taskworkmx[ls_i].empid = arg_empid And &
  1016. taskworkmx[ls_i].procode = arg_procode THEN
  1017. taskworkmx[ls_i].Amount = taskworkmx[ls_i].Amount+arg_amount
  1018. taskworkmx[ls_i].workhour = taskworkmx[ls_i].workhour+arg_workhour
  1019. rslt = 1
  1020. GOTO ext
  1021. END IF
  1022. NEXT
  1023. //写入内容
  1024. it_mxbt++
  1025. taskworkmx[it_mxbt].empid = arg_empid
  1026. taskworkmx[it_mxbt].empcode = arg_empcode
  1027. taskworkmx[it_mxbt].empname = arg_empname
  1028. taskworkmx[it_mxbt].procode = arg_procode
  1029. taskworkmx[it_mxbt].proname = arg_proname
  1030. taskworkmx[it_mxbt].Amount = arg_amount
  1031. taskworkmx[it_mxbt].workPrice = arg_workprice
  1032. taskworkmx[it_mxbt].workhour = arg_workhour
  1033. taskworkmx[it_mxbt].mxdscrp = arg_mxdscrp
  1034. taskworkmx[it_mxbt].printid = arg_printid
  1035. taskworkmx[it_mxbt].status = arg_status
  1036. taskworkmx[it_mxbt].proorder = arg_proorder
  1037. ext:
  1038. IF rslt = 0 THEN p_clearmx()
  1039. Return(rslt)
  1040. end function
  1041. public function integer auditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);
  1042. Long cnt = 0,i
  1043. Int rslt = 1
  1044. Decimal ls_emp_sumwage
  1045. uo_order_ml uo_ml
  1046. uo_ml = Create uo_order_ml
  1047. IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  1048. rslt = 0
  1049. GOTO ext
  1050. END IF
  1051. IF wagemth = 0 THEN
  1052. rslt = 0
  1053. arg_msg = '请输入工资月份'
  1054. GOTO ext
  1055. END IF
  1056. IF sys_option_taskwork_not_affirm = 0 THEN
  1057. IF affirmflag = 0 THEN
  1058. rslt = 0
  1059. arg_msg = '单据需要先确认后审核,请检查'
  1060. GOTO ext
  1061. END IF
  1062. END IF
  1063. IF flag = 1 THEN
  1064. rslt = 0
  1065. arg_msg = '单据已审核,操作取消'
  1066. GOTO ext
  1067. END IF
  1068. cnt = 0
  1069. SELECT count(*) INTO :cnt
  1070. From u_gz_wageitem Where useflag = 1 And wageid = :wageid;
  1071. IF sqlca.SQLCode <> 0 THEN
  1072. rslt = 0
  1073. arg_msg = '查询工资项目失败!原因>>'+sqlca.SQLErrText
  1074. GOTO ext
  1075. END IF
  1076. IF cnt = 0 THEN
  1077. rslt = 0
  1078. arg_msg = '不存在该工资项目!原因>>'+sqlca.SQLErrText
  1079. GOTO ext
  1080. END IF
  1081. FOR i = 1 To it_mxbt
  1082. ls_emp_sumwage = 0.00
  1083. ls_emp_sumwage = taskworkmx[i].amount * taskworkmx[i].workprice
  1084. IF u_wage.f_setwagemxdata(wagemth,taskworkmx[i].empid,wageid,ls_emp_sumwage,arg_msg,False) = 0 THEN
  1085. rslt = 0
  1086. GOTO ext
  1087. END IF
  1088. NEXT
  1089. IF sys_option_taskwork_not_affirm = 0 THEN
  1090. UPDATE u_sc_taskwork SET
  1091. Auditingflag = 1,
  1092. Auditingrep = :publ_operator,
  1093. Auditingdate = getdate()
  1094. WHERE Auditingflag = 0
  1095. AND billid = :arg_billid
  1096. And scid = :arg_scid;
  1097. ELSE
  1098. UPDATE u_sc_taskwork SET
  1099. Auditingflag = 1,
  1100. Auditingrep = :publ_operator,
  1101. Auditingdate = getdate(),
  1102. affirmdate = getdate(),
  1103. affirmemp = :publ_operator,
  1104. affirmflag = 1
  1105. WHERE Auditingflag = 0
  1106. AND billid = :arg_billid
  1107. And scid = :arg_scid;
  1108. END IF
  1109. IF sqlca.SQLCode <> 0 THEN
  1110. arg_msg = '更新计件明细单失败,原因>>'+sqlca.SQLErrText
  1111. rslt = 0
  1112. GOTO ext
  1113. END IF
  1114. IF sys_option_taskwork_not_affirm = 1 THEN
  1115. IF sys_option_add_orderrqwp_fqty = 1 THEN
  1116. IF orderid > 0 And relid > 0 THEN
  1117. FOR i = 1 To it_mxbt
  1118. IF uo_ml.uof_add_procode_qty(scid,orderid,relid,&
  1119. taskworkmx[i].procode,taskworkmx[i].amount,arg_msg,False) = 0 THEN
  1120. rslt = 0
  1121. GOTO ext
  1122. END IF
  1123. NEXT
  1124. END IF
  1125. END IF
  1126. END IF
  1127. ext:
  1128. IF rslt = 0 THEN
  1129. ROLLBACK;
  1130. ELSEIF rslt = 1 And arg_ifcommit THEN
  1131. COMMIT;
  1132. END IF
  1133. Destroy uo_ml
  1134. RETURN rslt
  1135. end function
  1136. public function integer cauditmx (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);
  1137. Long cnt = 0,i
  1138. Int rslt = 1
  1139. DateTime null_server_dt
  1140. Decimal ls_emp_sumwage
  1141. SetNull(null_server_dt)
  1142. uo_order_ml uo_ml
  1143. uo_ml = Create uo_order_ml
  1144. IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  1145. rslt = 0
  1146. GOTO ext
  1147. END IF
  1148. IF flag = 0 THEN
  1149. rslt = 0
  1150. arg_msg = '单据还没有审核,操作取消'
  1151. GOTO ext
  1152. END IF
  1153. cnt = 0
  1154. SELECT count(*) INTO :cnt
  1155. From u_gz_wageitem Where useflag = 1 And wageid = :wageid;
  1156. IF sqlca.SQLCode <> 0 THEN
  1157. rslt = 0
  1158. arg_msg = '查询工资项目失败,原因>>'+sqlca.SQLErrText
  1159. GOTO ext
  1160. END IF
  1161. IF cnt = 0 THEN
  1162. rslt = 0
  1163. arg_msg = '不存在该工资项目,原因>>'+sqlca.SQLErrText
  1164. GOTO ext
  1165. END IF
  1166. FOR i = 1 To it_mxbt
  1167. ls_emp_sumwage = 0.00
  1168. ls_emp_sumwage = taskworkmx[i].amount * taskworkmx[i].workprice
  1169. IF u_wage.f_setwagemxdata(wagemth,taskworkmx[i].empid,wageid,0 - ls_emp_sumwage,arg_msg,False) = 0 THEN
  1170. rslt = 0
  1171. GOTO ext
  1172. END IF
  1173. NEXT
  1174. IF sys_option_taskwork_not_affirm = 0 THEN
  1175. UPDATE u_sc_taskwork SET
  1176. Auditingflag = 0,
  1177. Auditingrep = '',
  1178. Auditingdate = :null_server_dt
  1179. WHERE Auditingflag = 1
  1180. AND scid = :arg_scid
  1181. And billid = :arg_billid;
  1182. ELSE
  1183. UPDATE u_sc_taskwork SET
  1184. Auditingflag = 0,
  1185. Auditingrep = '',
  1186. Auditingdate = :null_server_dt,
  1187. affirmdate = :null_server_dt,
  1188. affirmemp = '',
  1189. affirmflag = 0
  1190. WHERE Auditingflag = 1
  1191. AND scid = :arg_scid
  1192. And billid = :arg_billid;
  1193. END IF
  1194. IF sqlca.SQLCode <> 0 THEN
  1195. arg_msg = '更新计件明细单失败,原因:'+sqlca.SQLErrText
  1196. rslt = 0
  1197. GOTO ext
  1198. END IF
  1199. IF sys_option_taskwork_not_affirm = 1 THEN
  1200. IF sys_option_add_orderrqwp_fqty = 1 THEN
  1201. IF orderid > 0 And relid > 0 THEN
  1202. FOR i = 1 To it_mxbt
  1203. IF uo_ml.uof_add_procode_qty(scid,orderid,relid,&
  1204. taskworkmx[i].procode,0 - taskworkmx[i].amount,arg_msg,False) = 0 THEN
  1205. rslt = 0
  1206. GOTO ext
  1207. END IF
  1208. NEXT
  1209. END IF
  1210. END IF
  1211. END IF
  1212. ext:
  1213. IF rslt = 0 THEN
  1214. ROLLBACK;
  1215. ELSEIF rslt = 1 And arg_ifcommit THEN
  1216. COMMIT;
  1217. END IF
  1218. Destroy uo_ml
  1219. RETURN rslt
  1220. end function
  1221. public function integer auditing (long arg_wageid, long arg_wagemth, ref string arg_msg, boolean arg_ifcommit);
  1222. Long cnt = 0,i
  1223. Int rslt = 1
  1224. Decimal ls_emp_sumwage
  1225. datastore ds_emp_sumworktaskwage
  1226. IF sys_option_taskwork_not_affirm = 0 THEN
  1227. cnt = 0
  1228. SELECT count(*) INTO :cnt
  1229. FROM u_sc_taskwork
  1230. WHERE wagemth = :arg_wagemth
  1231. AND wageid = :arg_wageid
  1232. AND affirmflag = 0;
  1233. IF sqlca.SQLCode <> 0 THEN
  1234. rslt = 0
  1235. arg_msg = '查询是否有单未确认操作失败,'+sqlca.SQLErrText
  1236. GOTO ext
  1237. END IF
  1238. IF cnt > 0 THEN
  1239. rslt = 0
  1240. arg_msg = '该月份存在未确认的单据('+String(cnt)+'),请先全部确认'
  1241. GOTO ext
  1242. END IF
  1243. END IF
  1244. //cnt = 0
  1245. //SELECT count(*) INTO :cnt
  1246. // FROM u_sc_taskwork
  1247. // WHERE wagemth = :arg_wagemth
  1248. // AND wageid = :arg_wageid
  1249. // AND Auditingflag = 1;
  1250. //IF sqlca.SQLCode <> 0 THEN
  1251. // rslt = 0
  1252. // arg_msg = '查询计件单明细失败!原因:'+sqlca.SQLErrText
  1253. // GOTO ext
  1254. //END IF
  1255. //
  1256. //IF cnt > 0 THEN
  1257. // rslt = 0
  1258. // arg_msg = '该月的计件单已审核,审核前请先执行撤审!'
  1259. // GOTO ext
  1260. //END IF
  1261. cnt = 0
  1262. SELECT count(*) INTO :cnt
  1263. FROM u_gz_wageitem Where useflag = 1 AND wageid = :arg_wageid;
  1264. IF sqlca.SQLCode <> 0 THEN
  1265. rslt = 0
  1266. arg_msg = '查询工资项目失败!原因>>'+sqlca.SQLErrText
  1267. GOTO ext
  1268. END IF
  1269. IF cnt = 0 THEN
  1270. rslt = 0
  1271. arg_msg = '不存在该工资项目!原因>>'+sqlca.SQLErrText
  1272. GOTO ext
  1273. END IF
  1274. ds_emp_sumworktaskwage = CREATE datastore
  1275. ds_emp_sumworktaskwage.DataObject = 'dw_emp_sumtaskworkwage'
  1276. ds_emp_sumworktaskwage.SetTransObject(sqlca)
  1277. IF ds_emp_sumworktaskwage.Retrieve(arg_wagemth,arg_wageid) <= 0 THEN
  1278. rslt = 0
  1279. arg_msg = '本月没有计件单可审核或查询计件单失败'
  1280. GOTO ext
  1281. END IF
  1282. FOR i = 1 TO ds_emp_sumworktaskwage.RowCount()
  1283. ls_emp_sumwage = 0.00
  1284. ls_emp_sumwage = ds_emp_sumworktaskwage.Object.sumwage[i]
  1285. IF u_wage.f_setwagemxdata(arg_wagemth,ds_emp_sumworktaskwage.Object.empid[i],arg_wageid,ls_emp_sumwage,arg_msg,FALSE) = 0 THEN
  1286. rslt = 0
  1287. GOTO ext
  1288. END IF
  1289. NEXT
  1290. IF sys_option_taskwork_not_affirm = 0 THEN
  1291. UPDATE u_sc_taskwork SET
  1292. Auditingflag = 1,
  1293. Auditingrep = :publ_operator,
  1294. Auditingdate = getdate()
  1295. WHERE wagemth = :arg_wagemth
  1296. AND Auditingflag = 0
  1297. AND wageid = :arg_wageid;
  1298. ELSE
  1299. UPDATE u_sc_taskwork SET
  1300. Auditingflag = 1,
  1301. Auditingrep = :publ_operator,
  1302. Auditingdate = getdate(),
  1303. affirmdate = getdate(),
  1304. affirmemp = :publ_operator,
  1305. affirmflag = 1
  1306. WHERE wagemth = :arg_wagemth
  1307. AND Auditingflag = 0
  1308. AND wageid = :arg_wageid;
  1309. END IF
  1310. IF sqlca.SQLCode <> 0 THEN
  1311. arg_msg = '更新计件明细单失败,原因>>'+sqlca.SQLErrText
  1312. rslt = 0
  1313. GOTO ext
  1314. END IF
  1315. ext:
  1316. IF rslt = 0 THEN
  1317. ROLLBACK;
  1318. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1319. COMMIT;
  1320. END IF
  1321. RETURN rslt
  1322. end function
  1323. public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);//====================================================================
  1324. // Function: del(arg_billid,arg_msg)
  1325. //--------------------------------------------------------------------
  1326. // Description:
  1327. //--------------------------------------------------------------------
  1328. // Arguments:
  1329. // value long arg_billid
  1330. // reference string arg_msg
  1331. //--------------------------------------------------------------------
  1332. // Returns: integer
  1333. //--------------------------------------------------------------------
  1334. // Author: yyx Date: 2003.11.21
  1335. //--------------------------------------------------------------------
  1336. // Modify History:
  1337. //
  1338. //====================================================================
  1339. Int rslt = 1
  1340. IF arg_billid <= 0 THEN
  1341. rslt = 0
  1342. arg_msg = "没有删除对象,操作取消"
  1343. GOTO ext
  1344. END IF
  1345. IF p_getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  1346. rslt = 0
  1347. GOTO ext
  1348. END IF
  1349. IF affirmflag = 1 THEN
  1350. rslt = 0
  1351. arg_msg = "单据已经确认,不可以删除"
  1352. GOTO ext
  1353. END IF
  1354. IF flag = 1 THEN
  1355. rslt = 0
  1356. arg_msg = "单据已经审核,不可以删除"
  1357. GOTO ext
  1358. END IF
  1359. DELETE FROM u_sc_taskwork
  1360. WHERE u_sc_taskwork.billid = :arg_billid
  1361. AND u_sc_taskwork.scid = :arg_scid;
  1362. IF sqlca.SQLCode <> 0 THEN
  1363. rslt = 0
  1364. arg_msg = "删除计件单操作失败"+"~n"+sqlca.SQLErrText
  1365. GOTO ext
  1366. END IF
  1367. DELETE FROM u_sc_taskworkmx
  1368. WHERE u_sc_taskworkmx.billid = :arg_billid
  1369. AND u_sc_taskworkmx.scid = :arg_scid;
  1370. IF sqlca.SQLCode <> 0 THEN
  1371. rslt = 0
  1372. arg_msg = "删除计件单明细操作失败"+"~n"+sqlca.SQLErrText
  1373. GOTO ext
  1374. END IF
  1375. ext:
  1376. IF rslt = 0 THEN
  1377. ROLLBACK ;
  1378. p_reset()
  1379. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1380. COMMIT ;
  1381. END IF
  1382. Return (rslt)
  1383. end function
  1384. on uo_taskwork.create
  1385. call super::create
  1386. TriggerEvent( this, "constructor" )
  1387. end on
  1388. on uo_taskwork.destroy
  1389. TriggerEvent( this, "destructor" )
  1390. call super::destroy
  1391. end on
  1392. event constructor; u_wage=create uo_wage
  1393. end event
  1394. event destructor;DESTROY u_wage
  1395. end event