uo_sc_task.sru 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352
  1. $PBExportHeader$uo_sc_task.sru
  2. forward
  3. global type uo_sc_task from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_sc_task from nonvisualobject
  7. end type
  8. global uo_sc_task uo_sc_task
  9. type variables
  10. Long taskid
  11. String taskcode
  12. Long orderid
  13. Long mtrlid
  14. Long flag
  15. String taskrep
  16. DateTime taskdate
  17. String opemp
  18. DateTime opdate
  19. String modemp
  20. DateTime moddate
  21. String auditingrep
  22. DateTime auditingdate
  23. Long LastFlag
  24. Long empid
  25. Long scid
  26. Long wrkgrpid
  27. Long proid
  28. String procode
  29. String proname
  30. Dec qty
  31. Dec fqty
  32. Long tasktype
  33. Long workgroupid
  34. Long modelid
  35. DateTime rqdate
  36. String dscrp
  37. datetime cfdate
  38. String status
  39. String woodcode
  40. String pcode
  41. string partname
  42. long Proorder
  43. int kind
  44. int queue
  45. string teamorder
  46. decimal empqty,before_time,order_time,work_time
  47. long squadid
  48. string relcode,pbarcode
  49. long reltechid
  50. int billtype //<单据类型>0-派工(默认),1-退回,2-返工
  51. int billkind //<派工类型>0-自制(默认),1-外协
  52. long reloutid //相关派工ID
  53. decimal workprice
  54. Boolean if_getid_ture = FALSE
  55. end variables
  56. forward prototypes
  57. public function integer p_reset ()
  58. public function integer save (ref string arg_msg, boolean arg_ifcommit)
  59. public function integer p_getinfo (long arg_taskid, ref string arg_msg)
  60. public function integer del (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  61. public function integer updatebegin (long arg_taskid, ref string arg_msg)
  62. public function integer audit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  63. public function integer c_audit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  64. public function integer c_finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  65. public function integer stoptask (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  66. public function integer finishtask (long arg_taskid, string arg_finishemp, ref string arg_msg, boolean arg_ifcommit)
  67. public function integer addcmpl (long arg_taskid, decimal arg_addqty, datetime arg_finishdate, string arg_finishemp, ref string arg_msg, boolean arg_ifcommit)
  68. public function integer tryfinish (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  69. public function integer del_queue (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  70. public function integer update_tasktype (long arg_taskid, long arg_tasktype, ref string arg_msg, boolean arg_ifcommit)
  71. public function integer update_workgroupid (long arg_taskid, long arg_workgroupid, ref string arg_msg, boolean arg_ifcommit)
  72. public function integer update_empid (long arg_taskid, long arg_empid, ref string arg_msg, boolean arg_ifcommit)
  73. public function integer update_groupstr (long arg_taskid[], integer arg_kind, ref string arg_msg, boolean arg_ifcommit)
  74. public function integer uof_emp_del (long arg_taskid, long arg_empid, ref string arg_msg, boolean arg_ifcommit)
  75. public function integer uof_emp_create (long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  76. public function integer uof_emp_add (long arg_taskid, long arg_empid, decimal arg_assignamt, ref string arg_msg, boolean arg_ifcommit)
  77. public function integer uof_update_qty (long arg_taskid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  78. public function integer uof_chk (long arg_taskid, string arg_chkemp, integer arg_ifpass, string arg_chkrslt, ref string arg_msg, boolean arg_ifcommit, ref long arg_printid)
  79. public function integer uof_prechk (long arg_taskid, long arg_empid, string arg_prechkdscrp, string arg_carcode, string arg_locode, string arg_othercode, ref string arg_msg, boolean arg_ifcommit)
  80. end prototypes
  81. public function integer p_reset ();taskid = 0
  82. taskcode = ''
  83. orderid = 0
  84. mtrlid = 0
  85. flag = 0
  86. taskrep = ''
  87. opemp = ''
  88. modemp = ''
  89. auditingrep = ''
  90. LastFlag = 0
  91. empid = 0
  92. scid = 0
  93. wrkgrpid = 0
  94. proid = 0
  95. procode = ''
  96. proname = ''
  97. qty = 0
  98. fqty = 0
  99. tasktype = 0
  100. workgroupid = 0
  101. modelid = 0
  102. dscrp = ''
  103. status = ''
  104. woodcode = ''
  105. pcode = ''
  106. SetNull( opdate)
  107. SetNull( moddate)
  108. SetNull( taskdate)
  109. SetNull( auditingdate)
  110. SetNull( rqdate)
  111. reltechid = 0
  112. RETURN 1
  113. end function
  114. public function integer save (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  115. DateTime server_dt
  116. Long ll_taskid
  117. String ls_taskcode
  118. Long cnt
  119. DateTime ld_taskdate
  120. Decimal ld_period,ld_modelqty
  121. String ls_modelcode
  122. Decimal ld_orderqty = 0,ld_sumqty = 0,ld_thisqty = 0
  123. String ls_groupstr
  124. IF IsNull(taskrep) THEN taskrep = ''
  125. IF IsNull(qty) THEN qty = 0
  126. IF IsNull(fqty) THEN fqty = 0
  127. IF Year(Date(taskdate)) < 2001 THEN
  128. arg_msg = '生产派工单日期为空或不合理!'
  129. rslt = 0
  130. GOTO ext
  131. END IF
  132. IF qty = 0 THEN
  133. arg_msg = '没有正确的计划生产数'
  134. rslt = 0
  135. GOTO ext
  136. END IF
  137. cnt = 0
  138. SELECT Top 1 getdate() Into :server_dt From u_user ;
  139. IF sqlca.SQLCode <> 0 THEN
  140. rslt = 0
  141. arg_msg = "查询操作失败,日期 "
  142. GOTO ext
  143. END IF
  144. IF billkind = 0 THEN //自制
  145. IF tasktype = 0 THEN
  146. IF empid > 0 And workgroupid = 0 THEN
  147. tasktype = 3
  148. END IF
  149. IF empid = 0 And workgroupid > 0 THEN
  150. tasktype = 1
  151. END IF
  152. IF tasktype = 0 THEN
  153. IF empid <> 0 Or workgroupid <> 0 THEN
  154. rslt = 0
  155. arg_msg = "设置了员工或工作中心,请选择相应的派工类型 "
  156. GOTO ext
  157. END IF
  158. END IF
  159. ELSEIF tasktype = 1 THEN
  160. IF workgroupid = 0 THEN
  161. rslt = 0
  162. arg_msg = "工作中心派工,请选择相应的工作中心派工 "
  163. GOTO ext
  164. END IF
  165. empid = 0
  166. ELSEIF tasktype = 3 THEN
  167. IF empid = 0 THEN
  168. rslt = 0
  169. arg_msg = "个人派工,请选择相应的员工 "
  170. GOTO ext
  171. END IF
  172. workgroupid = 0
  173. END IF
  174. ELSEIF billkind = 1 THEN //外协
  175. IF empid = 0 THEN
  176. rslt = 0
  177. arg_msg = "外协派工,请选择相应的供应商 "
  178. GOTO ext
  179. END IF
  180. IF billtype = 0 THEN //1.派工
  181. ELSEIF billtype = 1 THEN //2.退回
  182. IF reloutid = 0 THEN
  183. rslt = 0
  184. arg_msg = "外协退回,请选择相应的外协派工单 "
  185. GOTO ext
  186. END IF
  187. ELSEIF billtype = 2 THEN //3.返工
  188. END IF
  189. END IF
  190. IF Kind = 0 THEN
  191. SELECT outtypestr
  192. INTO :ls_groupstr
  193. FROM u_order_ml
  194. WHERE scid = :scid
  195. And orderid = :orderid;
  196. IF sqlca.SQLCode <> 0 THEN
  197. rslt = 0
  198. arg_msg = '查询生产计划/指令单成组号失败,'+sqlca.SQLErrText
  199. GOTO ext
  200. END IF
  201. SELECT proqty
  202. INTO :ld_orderqty
  203. FROM U_OrderRqwp
  204. WHERE scid = :scid
  205. AND orderid = :orderid
  206. AND procode = :procode
  207. And mtrlid = :mtrlid;
  208. IF sqlca.SQLCode <> 0 THEN
  209. rslt = 0
  210. arg_msg = '查询生产计划工序明细计划生产数失败,'+sqlca.SQLErrText
  211. GOTO ext
  212. END IF
  213. IF taskid > 0 THEN
  214. SELECT qty
  215. INTO :ld_thisqty
  216. FROM u_sc_task
  217. Where taskid = :taskid;
  218. IF sqlca.SQLCode <> 0 THEN
  219. arg_msg = '查询安排生产数失败,'+sqlca.SQLErrText
  220. rslt = 0
  221. GOTO ext
  222. END IF
  223. END IF
  224. SELECT qty
  225. INTO :ld_sumqty
  226. FROM uv_sc_task_qty
  227. WHERE scid = :scid
  228. AND orderid = :orderid
  229. AND mtrlid = :mtrlid
  230. And procode = :procode;
  231. IF sqlca.SQLCode = -1 THEN
  232. arg_msg = '查询已安排生产数失败,'+sqlca.SQLErrText
  233. rslt = 0
  234. GOTO ext
  235. ELSEIF sqlca.SQLCode = 100 THEN
  236. ld_sumqty = 0
  237. END IF
  238. IF ld_sumqty - ld_thisqty + qty > ld_orderqty THEN
  239. arg_msg = '待安排生产数:'+String(ld_orderqty - (ld_sumqty - ld_thisqty),'#,##0.#########')+',不能再安排 '+String(qty,'#,##0.#########')
  240. rslt = 0
  241. GOTO ext
  242. END IF
  243. ELSEIF Kind = 1 THEN //排机台
  244. IF workgroupid = 0 THEN
  245. arg_msg = '错误的机台编号ID,请重新选择机台'
  246. rslt = 0
  247. GOTO ext
  248. END IF
  249. IF modelid = 0 THEN
  250. arg_msg = "错误的模具唯一码,请选择模具"
  251. rslt = 0
  252. GOTO ext
  253. END IF
  254. IF squadid = 0 THEN
  255. arg_msg = '请选择班类型'
  256. rslt = 0
  257. GOTO ext
  258. END IF
  259. SELECT proqty
  260. INTO :ld_orderqty
  261. FROM U_OrderRqwp
  262. WHERE scid = :scid
  263. AND orderid = :orderid
  264. AND procode = :procode
  265. And mtrlid = :mtrlid;
  266. IF sqlca.SQLCode <> 0 THEN
  267. rslt = 0
  268. arg_msg = '查询生产计划工序明细计划生产数失败,'+sqlca.SQLErrText
  269. GOTO ext
  270. END IF
  271. SELECT sum(qty)
  272. INTO :ld_sumqty
  273. FROM u_sc_task
  274. WHERE scid = :scid
  275. AND orderid = :orderid
  276. AND mtrlid = :mtrlid
  277. AND procode = :procode
  278. AND kind = 1
  279. And flag <> 2;
  280. IF sqlca.SQLCode = -1 THEN
  281. arg_msg = '查询机台已安排生产数失败,'+sqlca.SQLErrText
  282. rslt = 0
  283. GOTO ext
  284. ELSEIF sqlca.SQLCode = 100 THEN
  285. ld_sumqty = 0
  286. END IF
  287. IF taskid > 0 THEN
  288. SELECT qty
  289. INTO :ld_thisqty
  290. FROM u_sc_task
  291. Where taskid = :taskid;
  292. IF sqlca.SQLCode <> 0 THEN
  293. arg_msg = '查询机台安排生产数失败,'+sqlca.SQLErrText
  294. rslt = 0
  295. GOTO ext
  296. END IF
  297. END IF
  298. IF ld_sumqty - ld_thisqty + qty > ld_orderqty THEN
  299. arg_msg = '待安排生产数:'+String(ld_orderqty - (ld_sumqty - ld_thisqty),'#,##0.#########')+',不能再安排 '+String(qty,'#,##0.#########')
  300. rslt = 0
  301. GOTO ext
  302. END IF
  303. //.......计算计划需时
  304. SELECT period INTO :ld_period
  305. FROM u_mtrldef_sl
  306. Where mtrlid = :mtrlid;
  307. IF sqlca.SQLCode <> 0 THEN
  308. arg_msg = '查询产品标准生产周期失败'
  309. rslt = 0
  310. GOTO ext
  311. END IF
  312. SELECT modelqty INTO :ld_modelqty
  313. FROM u_model_mtrl
  314. WHERE modelid = :modelid
  315. And mtrlid = :mtrlid;
  316. IF sqlca.SQLCode <> 0 THEN
  317. arg_msg = '查询模腔数失败'
  318. rslt = 0
  319. GOTO ext
  320. END IF
  321. SELECT modelcode INTO :ls_modelcode
  322. FROM u_modeldef
  323. Where modelid = :modelid;
  324. IF sqlca.SQLCode <> 0 THEN
  325. arg_msg = '查询模具编号失败'
  326. rslt = 0
  327. GOTO ext
  328. END IF
  329. IF ld_period = 0 Or ld_modelqty = 0 THEN
  330. order_time = 0
  331. ELSE
  332. order_time = qty / (3600 / ld_period * ld_modelqty ) // 计划需时
  333. END IF
  334. work_time = before_time + order_time //实际需时
  335. ////
  336. SELECT max(queue) INTO :queue
  337. FROM u_sc_task
  338. WHERE u_sc_task.workgroupid = :workgroupid
  339. And u_sc_task.Kind = 1;
  340. IF sqlca.SQLCode <> 0 THEN
  341. arg_msg = '错误的机台唯一码'
  342. rslt = 0
  343. GOTO ext
  344. END IF
  345. IF IsNull(queue) THEN queue = 0
  346. IF queue = - 1 THEN queue = 0
  347. queue++
  348. END IF
  349. // // 080915 某些车间工作日期按指令单下单日期
  350. //uf_get_sc_workdate(orderid, taskdate)
  351. IF taskid = 0 THEN //新建
  352. ll_taskid = f_sys_scidentity(0,"u_sc_task","taskid",arg_msg,True,id_sqlca)
  353. IF ll_taskid <= 0 THEN
  354. rslt = 0
  355. GOTO ext
  356. END IF
  357. IF billkind = 0 THEN
  358. IF Kind = 0 THEN
  359. ls_taskcode = getid(scid,"PP",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号
  360. pbarcode = getid(scid,"P",Date(server_dt),if_getid_ture,sqlca)
  361. ELSE
  362. ls_taskcode = getid(scid,"PJ",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号
  363. END IF
  364. ELSE
  365. IF billtype = 0 THEN
  366. ls_taskcode = getid(scid,"PA",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 派工
  367. ELSEIF billtype = 1 THEN
  368. ls_taskcode = getid(scid,"PB",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 退回
  369. ELSEIF billtype = 2 THEN
  370. ls_taskcode = getid(scid,"PE",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 返工
  371. END IF
  372. END IF
  373. IF ls_taskcode = "err" THEN
  374. rslt = 0
  375. arg_msg = "无法获取工序派工单编号"+"~n"+sqlca.SQLErrText
  376. GOTO ext
  377. END IF
  378. INSERT INTO u_sc_task
  379. (taskid ,
  380. taskcode,
  381. scid,
  382. orderid,
  383. wrkgrpid,
  384. procode,
  385. proname,
  386. LastFlag,
  387. qty,
  388. tasktype,
  389. workgroupid,
  390. modelid,
  391. empid,
  392. taskdate,
  393. rqdate,
  394. taskrep,
  395. dscrp,
  396. opemp,
  397. opdate,
  398. proid,
  399. mtrlid,
  400. status,
  401. woodcode,
  402. pcode,
  403. kind,
  404. teamorder,
  405. empqty,
  406. before_time,
  407. order_time,
  408. work_time,
  409. squadid,
  410. queue,
  411. relcode,
  412. pbarcode,
  413. reltechid,
  414. groupstr,
  415. cfdate,
  416. billtype,
  417. billkind,
  418. reloutid,
  419. workprice)
  420. VALUES (
  421. :ll_taskid,
  422. :ls_taskcode,
  423. :scid,
  424. :orderid,
  425. :wrkgrpid,
  426. :procode,
  427. :proname,
  428. :LastFlag,
  429. :qty,
  430. :tasktype,
  431. :workgroupid,
  432. :modelid,
  433. :empid,
  434. :taskdate,
  435. :rqdate,
  436. :taskrep,
  437. :dscrp,
  438. :publ_operator,
  439. :server_dt,
  440. :proid,
  441. :mtrlid,
  442. :status,
  443. :woodcode,
  444. :pcode,
  445. :Kind,
  446. :teamorder,
  447. :empqty,
  448. :before_time,
  449. :order_time,
  450. :work_time,
  451. :squadid,
  452. :queue,
  453. :relcode,
  454. :pbarcode,
  455. :reltechid,
  456. :ls_groupstr,
  457. :cfdate,
  458. :billtype,
  459. :billkind,
  460. :reloutid,
  461. :workprice);
  462. IF sqlca.SQLCode <> 0 THEN
  463. rslt = 0
  464. arg_msg = "插入生产派工单操作失败"+"~n"+sqlca.SQLErrText
  465. GOTO ext
  466. END IF
  467. taskid = ll_taskid
  468. taskcode = ls_taskcode
  469. ELSE //修改
  470. UPDATE u_sc_task
  471. SET orderid = :orderid,
  472. wrkgrpid = :wrkgrpid,
  473. procode = :procode ,
  474. proname = :proname,
  475. LastFlag = :LastFlag,
  476. qty = :qty,
  477. tasktype = :tasktype,
  478. workgroupid = :workgroupid,
  479. modelid = :modelid,
  480. empid = :empid,
  481. taskdate = :taskdate,
  482. rqdate = :rqdate,
  483. taskrep = :taskrep,
  484. dscrp = :dscrp,
  485. mtrlid = :mtrlid,
  486. status = :status,
  487. woodcode = :woodcode,
  488. pcode = :pcode,
  489. teamorder = :teamorder,
  490. empqty = :empqty,
  491. before_time = :before_time,
  492. order_time = :order_time,
  493. work_time = :work_time,
  494. squadid = :squadid,
  495. modemp = :publ_operator,
  496. moddate = :server_dt,
  497. relcode = :relcode,
  498. reltechid = :reltechid,
  499. groupstr = :ls_groupstr,
  500. cfdate = :cfdate,
  501. billtype = :billtype,
  502. billkind = :billkind,
  503. reloutid = :reloutid,
  504. workprice = :workprice
  505. WHERE taskid = :taskid
  506. And flag = 0 ;
  507. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  508. rslt = 0
  509. arg_msg = "更新生产派工单操作失败"+"~n"+sqlca.SQLErrText
  510. GOTO ext
  511. END IF
  512. END IF
  513. IF billkind = 0 THEN
  514. //工作中心派工, 实例化工作中心员工
  515. IF tasktype = 1 THEN
  516. IF uof_emp_create(taskid, arg_msg, False) = 0 THEN
  517. rslt = 0
  518. arg_msg = "工作中心派工类型, 插入工作中心员工操作失败"+"~n"+arg_msg
  519. GOTO ext
  520. END IF
  521. END IF
  522. END IF
  523. UPDATE u_order_ml
  524. SET u_Order_ml.sctaskflag = isnull(uv_sc_task_qty_flag.sctaskflag, '')
  525. FROM u_Order_ml LEFT OUTER JOIN
  526. uv_sc_task_qty_flag ON u_Order_ml.scid = uv_sc_task_qty_flag.scid AND
  527. u_Order_ml.OrderID = uv_sc_task_qty_flag.OrderID
  528. WHERE u_Order_ml.scid = :scid
  529. And u_order_ml.orderid = :orderid;
  530. IF sqlca.SQLCode <> 0 THEN
  531. rslt = 0
  532. arg_msg = '更新生产指令单派工状态失败,原因:'+sqlca.SQLErrText
  533. GOTO ext
  534. END IF
  535. ext:
  536. IF rslt = 0 THEN
  537. ROLLBACK;
  538. p_reset()
  539. ELSEIF arg_ifcommit And rslt = 1 THEN
  540. COMMIT;
  541. END IF
  542. Return(rslt)
  543. end function
  544. public function integer p_getinfo (long arg_taskid, ref string arg_msg);Int rslt = 1
  545. IF arg_taskid <= 0 THEN
  546. rslt = 0
  547. arg_msg = '错误生产任务单唯一码'
  548. GOTO ext
  549. END IF
  550. SELECT u_sc_task.taskid,
  551. u_sc_task.taskcode,
  552. u_sc_task.scid,
  553. u_sc_task.orderid,
  554. u_sc_task.wrkgrpid,
  555. u_sc_task.procode,
  556. u_sc_task.proname,
  557. u_sc_task.LastFlag,
  558. u_sc_task.qty,
  559. u_sc_task.fqty,
  560. u_sc_task.tasktype,
  561. u_sc_task.workgroupid,
  562. u_sc_task.modelid,
  563. u_sc_task.empid,
  564. u_sc_task.taskdate,
  565. u_sc_task.rqdate,
  566. u_sc_task.taskrep,
  567. u_sc_task.dscrp,
  568. u_sc_task.opemp,
  569. u_sc_task.opdate,
  570. u_sc_task.flag,
  571. u_sc_task.proid,
  572. u_sc_task.mtrlid,
  573. u_sc_task.status,
  574. u_sc_task.woodcode,
  575. u_sc_task.pcode,
  576. U_OrderRqwp.partname,
  577. U_OrderRqwp.Proorder,
  578. u_sc_task.billtype,
  579. u_sc_task.billkind,
  580. u_sc_task.reloutid
  581. INTO
  582. :taskid,
  583. :taskcode,
  584. :scid,
  585. :orderid,
  586. :wrkgrpid,
  587. :procode,
  588. :proname,
  589. :LastFlag,
  590. :qty,
  591. :fqty,
  592. :tasktype,
  593. :workgroupid,
  594. :modelid,
  595. :empid,
  596. :taskdate,
  597. :rqdate,
  598. :taskrep,
  599. :dscrp,
  600. :opemp,
  601. :opdate,
  602. :flag,
  603. :proid,
  604. :mtrlid,
  605. :status,
  606. :woodcode,
  607. :pcode,
  608. :partname,
  609. :Proorder,
  610. :billtype,
  611. :billkind,
  612. :reloutid
  613. FROM u_sc_task LEFT OUTER JOIN
  614. U_OrderRqwp ON u_sc_task.scid = U_OrderRqwp.scid AND
  615. u_sc_task.orderid = U_OrderRqwp.orderid AND
  616. u_sc_task.procode = U_OrderRqwp.Procode AND
  617. u_sc_task.mtrlid = U_OrderRqwp.Mtrlid
  618. Where u_sc_task.taskid = :arg_taskid ;
  619. IF sqlca.SQLCode <> 0 THEN
  620. rslt = 0
  621. arg_msg = '查询生产任务单内容失败(错误生产任务单唯一码)'
  622. GOTO ext
  623. END IF
  624. taskdate = DateTime(Date(taskdate),Time(0))
  625. taskid = arg_taskid
  626. ext:
  627. IF rslt = 0 THEN p_reset()
  628. RETURN rslt
  629. end function
  630. public function integer del (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  631. Long cnt
  632. uo_order_ml uo_orderml
  633. uo_orderml = Create uo_order_ml
  634. rslt = p_getinfo(arg_taskid, arg_msg)
  635. IF rslt = 0 THEN GOTO ext
  636. IF flag <> 0 THEN
  637. rslt = 0
  638. arg_msg = "生产派工单已经审核,不可以删除"
  639. GOTO ext
  640. END IF
  641. UPDATE u_ordermtrl_workgroup_barcode
  642. SET relcode = ''
  643. Where relcode = :taskcode;
  644. IF sqlca.SQLCode <> 0 THEN
  645. rslt = 0
  646. arg_msg = "清空\部件条码的相关号码失败"+"~n"+sqlca.SQLErrText
  647. GOTO ext
  648. END IF
  649. DELETE FROM u_sc_task
  650. Where taskid = :arg_taskid;
  651. IF sqlca.SQLCode <> 0 THEN
  652. rslt = 0
  653. arg_msg = "删除生产任务单操作失败"+"~n"+sqlca.SQLErrText
  654. GOTO ext
  655. END IF
  656. //工作中心派工, 实例化工作中心员工
  657. //IF tasktype = 1 THEN
  658. DELETE From u_sc_task_emp Where taskid = :arg_taskid;
  659. IF sqlca.SQLCode <> 0 THEN
  660. rslt = 0
  661. arg_msg = "工作中心派工类型, 删除工作中心员工操作失败"+"~n"+sqlca.SQLErrText
  662. GOTO ext
  663. END IF
  664. //END IF
  665. //IF uo_orderml.f_addschour(orderid,proid,queue,tolqueue,0 - taskqty ,arg_msg ,FALSE) = 0 THEN
  666. // rslt = 0
  667. // GOTO ext
  668. //END IF
  669. //IF uo_orderml.f_update_taskflag(orderid,arg_msg ,FALSE) = 0 THEN
  670. // rslt = 0
  671. // GOTO ext
  672. //END IF
  673. UPDATE u_order_ml
  674. SET u_Order_ml.sctaskflag = isnull(uv_sc_task_qty_flag.sctaskflag, '')
  675. FROM u_Order_ml LEFT OUTER JOIN
  676. uv_sc_task_qty_flag ON u_Order_ml.scid = uv_sc_task_qty_flag.scid AND
  677. u_Order_ml.OrderID = uv_sc_task_qty_flag.OrderID
  678. WHERE u_Order_ml.scid = :scid
  679. And u_order_ml.orderid = :orderid;
  680. IF sqlca.SQLCode <> 0 THEN
  681. rslt = 0
  682. arg_msg = '更新生产指令单派工状态失败,原因:'+sqlca.SQLErrText
  683. GOTO ext
  684. END IF
  685. ext:
  686. IF rslt = 0 THEN
  687. ROLLBACK;
  688. p_reset()
  689. ELSEIF rslt = 1 And arg_ifcommit THEN
  690. COMMIT;
  691. END IF
  692. Destroy uo_orderml
  693. Return (rslt)
  694. end function
  695. public function integer updatebegin (long arg_taskid, ref string arg_msg);Long rslt = 1
  696. p_reset()
  697. rslt = p_getinfo(arg_taskid,arg_msg)
  698. IF rslt = 0 THEN GOTO ext
  699. IF flag <> 0 THEN
  700. rslt = 0
  701. arg_msg = '已经处于审核或完成等状态,不可以修改'
  702. GOTO ext
  703. END IF
  704. ext:
  705. IF rslt = 0 THEN p_reset()
  706. RETURN rslt
  707. end function
  708. public function integer audit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,ll_j,cnt
  709. uo_order_ml uo_orderml
  710. uo_orderml = Create uo_order_ml
  711. uo_sc_task uo_st
  712. uo_st = Create uo_sc_task
  713. datastore ds_barcode
  714. ds_barcode = Create datastore
  715. ds_barcode.DataObject = 'ds_barcode_sc_task_print_no_inherit'
  716. ds_barcode.SetTransObject(sqlca)
  717. IF arg_taskid = 0 THEN
  718. rslt = 0
  719. arg_msg = "没有审核对象"
  720. GOTO ext
  721. END IF
  722. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  723. rslt = 0
  724. GOTO ext
  725. END IF
  726. IF flag <> 0 THEN
  727. rslt = 0
  728. arg_msg = "只有在待审批状态才可以执行审批,请核对"
  729. GOTO ext
  730. END IF
  731. UPDATE u_sc_task
  732. SET auditingrep = :publ_operator,
  733. auditingdate = getdate(),
  734. flag = 1
  735. WHERE taskid = :arg_taskid
  736. And flag = 0;
  737. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  738. rslt = 0
  739. arg_msg = "工序派工单审核操作失败"+"~n"+sqlca.SQLErrText
  740. GOTO ext
  741. END IF
  742. IF billkind = 1 And billtype = 1 THEN
  743. IF reloutid <= 0 THEN //外协退回, 更新源派工单的 安排数
  744. rslt = 0
  745. arg_msg = "相关外协工序派工单ID错误"
  746. GOTO ext
  747. END IF
  748. IF uo_st.uof_update_qty(reloutid, 0 - qty, arg_msg, False) = 0 THEN
  749. rslt = 0
  750. GOTO ext
  751. END IF
  752. ELSE
  753. // //更新安排数
  754. IF uo_orderml.uf_add_taskqty(scid,orderid,mtrlid,procode,qty ,arg_msg ,False) = 0 THEN
  755. rslt = 0
  756. GOTO ext
  757. END IF
  758. END IF
  759. //更新条码相关号
  760. Long ll_printid,ll_pid
  761. String ls_barcode
  762. Decimal ld_barcode_qty,ld_qty_tmp
  763. ld_qty_tmp = qty
  764. IF partname <> '' THEN
  765. SELECT count(*)
  766. INTO :cnt
  767. FROM U_OrderRqwp
  768. WHERE scid = :scid
  769. AND orderid = :orderid
  770. AND partname = :partname
  771. And proorder < :proorder;
  772. IF sqlca.SQLCode <> 0 THEN cnt = 1
  773. IF cnt = 0 THEN
  774. ds_barcode.Retrieve(scid,orderid,partname,taskcode)
  775. FOR ll_j = 1 To ds_barcode.RowCount()
  776. IF ld_qty_tmp <= 0 THEN EXIT
  777. ll_printid = ds_barcode.Object.printid[ll_j]
  778. ll_pid = ds_barcode.Object.pid[ll_j]
  779. ls_barcode = ds_barcode.Object.barcode[ll_j]
  780. ld_barcode_qty = ds_barcode.Object.qty[ll_j]
  781. UPDATE u_ordermtrl_workgroup_barcode
  782. SET relcode = :taskcode
  783. WHERE scid = :scid
  784. AND orderid = :orderid
  785. AND printid = :ll_printid
  786. And pid = :ll_pid;
  787. IF sqlca.SQLCode <> 0 THEN
  788. rslt = 0
  789. arg_msg = '更新条码相关号失败,'+sqlca.SQLErrText
  790. GOTO ext
  791. END IF
  792. ld_qty_tmp = ld_qty_tmp - ld_barcode_qty
  793. NEXT
  794. END IF
  795. END IF
  796. //如果是外协退回,直接完成了它
  797. IF billkind = 1 And billtype = 1 THEN
  798. UPDATE u_sc_task
  799. SET flag = 3
  800. Where taskid = :arg_taskid;
  801. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  802. rslt = 0
  803. arg_msg = "外协工序退回单完成操作失败"+"~n"+sqlca.SQLErrText
  804. GOTO ext
  805. END IF
  806. END IF
  807. flag = 1
  808. ext:
  809. IF rslt = 0 THEN
  810. ROLLBACK;
  811. ELSEIF rslt = 1 And arg_ifcommit THEN
  812. COMMIT;
  813. END IF
  814. Destroy uo_orderml
  815. Destroy uo_st
  816. RETURN rslt
  817. end function
  818. public function integer c_audit (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  819. Long cnt
  820. DateTime null_dt
  821. SetNull(null_dt)
  822. uo_order_ml uo_orderml
  823. uo_orderml = Create uo_order_ml
  824. uo_sc_task uo_st
  825. uo_st = Create uo_sc_task
  826. IF arg_taskid = 0 THEN
  827. rslt = 0
  828. arg_msg = "没有撤审对象"
  829. GOTO ext
  830. END IF
  831. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  832. rslt = 0
  833. GOTO ext
  834. END IF
  835. //如果是外协退回,直接完成了它
  836. IF billkind = 1 And billtype = 1 THEN
  837. IF flag = 3 THEN
  838. UPDATE u_sc_task
  839. SET flag = 1
  840. Where taskid = :arg_taskid;
  841. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  842. rslt = 0
  843. arg_msg = "外协工序退回单取消完成操作失败"+"~n"+sqlca.SQLErrText
  844. GOTO ext
  845. END IF
  846. flag = 1
  847. END IF
  848. END IF
  849. IF flag <> 1 THEN
  850. rslt = 0
  851. arg_msg = "只有在审批状态才可以执行撤审,请核对"
  852. GOTO ext
  853. END IF
  854. IF fqty > 0 THEN
  855. rslt = 0
  856. arg_msg = "派工单已有完成数,不能撤审,请核对"
  857. GOTO ext
  858. END IF
  859. SELECT count(*) INTO :cnt
  860. FROM u_finishmx
  861. Where taskid = :arg_taskid;
  862. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  863. rslt = 0
  864. arg_msg = "查询派工单是否已有相关完工单失败"+"~n"+sqlca.SQLErrText
  865. GOTO ext
  866. END IF
  867. IF cnt > 0 THEN
  868. rslt = 0
  869. arg_msg = "派工单已有相关完工单,如要撤审,请先删除相关完工单"
  870. GOTO ext
  871. END IF
  872. IF billkind = 1 THEN
  873. SELECT count(*) INTO :cnt
  874. FROM u_sc_task
  875. Where reloutid = :arg_taskid;
  876. IF sqlca.SQLCode <> 0 THEN
  877. rslt = 0
  878. arg_msg = "查询外协派工单是否已有相关外协退回单失败"+"~n"+sqlca.SQLErrText
  879. GOTO ext
  880. END IF
  881. IF cnt > 0 THEN
  882. rslt = 0
  883. arg_msg = "外协派工单已有相关外协退回单,如要撤审,请先删除相关外协退回单"
  884. GOTO ext
  885. END IF
  886. END IF
  887. UPDATE u_sc_task
  888. SET auditingrep = '',
  889. auditingdate = :null_dt,
  890. flag = 0
  891. WHERE taskid = :arg_taskid
  892. And flag = 1;
  893. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  894. rslt = 0
  895. arg_msg = "派工单撤审操作失败"+"~n"+sqlca.SQLErrText
  896. GOTO ext
  897. END IF
  898. IF billkind = 1 And billtype = 1 THEN
  899. IF reloutid <= 0 THEN //外协退回, 更新源派工单的 安排数
  900. rslt = 0
  901. arg_msg = "相关外协工序派工单ID错误"
  902. GOTO ext
  903. END IF
  904. IF uo_st.uof_update_qty(reloutid, qty, arg_msg, False) = 0 THEN
  905. rslt = 0
  906. GOTO ext
  907. END IF
  908. ELSE
  909. IF uo_orderml.uf_add_taskqty(scid,orderid,mtrlid,procode,0 - qty ,arg_msg ,False) = 0 THEN
  910. rslt = 0
  911. GOTO ext
  912. END IF
  913. END IF
  914. //更新条码相关号
  915. UPDATE u_ordermtrl_workgroup_barcode
  916. SET relcode = ''
  917. WHERE relcode = :taskcode
  918. AND scid = :scid
  919. And orderid = :orderid;
  920. IF sqlca.SQLCode <> 0 THEN
  921. rslt = 0
  922. arg_msg = '更新条码相关号失败,'+sqlca.SQLErrText
  923. GOTO ext
  924. END IF
  925. flag = 1
  926. ext:
  927. IF rslt = 0 THEN
  928. ROLLBACK;
  929. ELSEIF rslt = 1 And arg_ifcommit THEN
  930. COMMIT;
  931. END IF
  932. Destroy uo_st
  933. Destroy uo_orderml
  934. RETURN rslt
  935. end function
  936. public function integer c_finishtask (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  937. DateTime null_dt
  938. SetNull(null_dt)
  939. uo_order_ml uo_orderml
  940. uo_orderml = CREATE uo_order_ml
  941. IF arg_taskid = 0 THEN
  942. rslt = 0
  943. arg_msg = "没有审核对象"
  944. GOTO ext
  945. END IF
  946. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  947. rslt = 0
  948. GOTO ext
  949. END IF
  950. IF flag <> 4 THEN
  951. rslt = 0
  952. arg_msg = "该派工单只有在已完成状态下才能执行操作"
  953. GOTO ext
  954. END IF
  955. UPDATE u_sc_task
  956. SET accomplishdate = :taskdate,
  957. accomplishemp = '' ,
  958. flag = 1
  959. WHERE taskid = :arg_taskid;
  960. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  961. rslt = 0
  962. arg_msg = "因网络或其它原因导致计划审批操作失败"+"~n"+sqlca.SQLErrText
  963. GOTO ext
  964. END IF
  965. ////更新完成数
  966. IF uo_orderml.uf_add_ftaskqty(scid,orderid,mtrlid,procode,taskdate, fqty - qty ,arg_msg ,FALSE) = 0 THEN
  967. rslt = 0
  968. GOTO ext
  969. END IF
  970. flag = 1
  971. ext:
  972. IF rslt = 0 THEN
  973. ROLLBACK;
  974. ELSEIF rslt = 1 AND arg_ifcommit THEN
  975. COMMIT;
  976. END IF
  977. DESTROY uo_orderml
  978. RETURN rslt
  979. end function
  980. public function integer stoptask (long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  981. uo_order_ml uo_orderml
  982. uo_orderml = CREATE uo_order_ml
  983. IF arg_taskid = 0 THEN
  984. rslt = 0
  985. arg_msg = "没有审核对象"
  986. GOTO ext
  987. END IF
  988. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  989. rslt = 0
  990. GOTO ext
  991. END IF
  992. IF flag <> 1 THEN
  993. rslt = 0
  994. arg_msg = "派工单"+taskcode+"处于非在进行状态,不能执行终止操作"
  995. GOTO ext
  996. END IF
  997. UPDATE u_sc_task
  998. SET Stopdate = getdate(),
  999. Stopemp = :arg_emp,
  1000. flag = 2
  1001. WHERE taskid = :arg_taskid AND
  1002. flag = 1;
  1003. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  1004. rslt = 0
  1005. arg_msg = "因网络或其它原因导致计划审批操作失败"+"~n"+sqlca.SQLErrText
  1006. GOTO ext
  1007. END IF
  1008. //IF uo_orderml.f_cmpschour(orderid,proid,queue, tolqueue,taskqty ,arg_msg ,FALSE) = 0 THEN
  1009. // rslt = 0
  1010. // GOTO ext
  1011. //END IF
  1012. // ////更新派工状态
  1013. // IF uo_orderml.f_update_taskflag(orderid,arg_msg ,FALSE) = 0 THEN
  1014. // rslt = 0
  1015. // GOTO ext
  1016. // END IF
  1017. flag = 2
  1018. ext:
  1019. IF rslt = 0 THEN
  1020. ROLLBACK;
  1021. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1022. COMMIT;
  1023. END IF
  1024. DESTROY uo_orderml
  1025. RETURN rslt
  1026. end function
  1027. public function integer finishtask (long arg_taskid, string arg_finishemp, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  1028. datetime arg_finishdate
  1029. uo_order_ml uo_orderml
  1030. uo_orderml = CREATE uo_order_ml
  1031. arg_finishdate = datetime(today(),now())
  1032. IF arg_taskid = 0 THEN
  1033. rslt = 0
  1034. arg_msg = "没有审核对象"
  1035. GOTO ext
  1036. END IF
  1037. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1038. rslt = 0
  1039. GOTO ext
  1040. END IF
  1041. IF IsNull(arg_finishdate) THEN
  1042. rslt = 0
  1043. arg_msg = '请输入实际完成日期'
  1044. GOTO ext
  1045. END IF
  1046. IF flag <> 1 THEN
  1047. rslt = 0
  1048. arg_msg = "派工单"+taskcode+"处于非在进行状态,操作取消"
  1049. GOTO ext
  1050. END IF
  1051. IF arg_finishdate < taskdate THEN
  1052. rslt = 0
  1053. arg_msg = '实际完成日期不能早于工作日期,请核对'
  1054. GOTO ext
  1055. END IF
  1056. UPDATE u_sc_task
  1057. SET accomplishdate = :arg_finishdate,
  1058. Accomplishemp = :arg_finishemp ,
  1059. flag = 4
  1060. Where taskid = :arg_taskid;
  1061. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  1062. rslt = 0
  1063. arg_msg = "因网络或其它原因导致计划审批操作失败"+"~n"+sqlca.SQLErrText
  1064. GOTO ext
  1065. END IF
  1066. ////更新完成数
  1067. IF uo_orderml.uf_add_ftaskqty(scid,orderid,mtrlid,procode,arg_finishdate, qty - fqty ,arg_msg ,FALSE) = 0 THEN
  1068. rslt = 0
  1069. GOTO ext
  1070. END IF
  1071. flag = 4
  1072. ext:
  1073. IF rslt = 0 THEN
  1074. ROLLBACK;
  1075. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1076. COMMIT;
  1077. END IF
  1078. DESTROY uo_orderml
  1079. RETURN rslt
  1080. end function
  1081. public function integer addcmpl (long arg_taskid, decimal arg_addqty, datetime arg_finishdate, string arg_finishemp, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  1082. DateTime ld_finishdate,ld_null
  1083. uo_order_ml uo_orderml
  1084. uo_orderml = Create uo_order_ml
  1085. uo_order_plan_tech uo_plan
  1086. uo_plan = Create uo_order_plan_tech
  1087. ld_finishdate = DateTime(Today(),Now())
  1088. ld_finishdate = arg_finishdate
  1089. IF arg_taskid = 0 THEN
  1090. rslt = 0
  1091. arg_msg = "没有完成对象"
  1092. GOTO ext
  1093. END IF
  1094. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1095. rslt = 0
  1096. GOTO ext
  1097. END IF
  1098. IF arg_addqty = 0 THEN
  1099. GOTO ext
  1100. END IF
  1101. IF flag = 1 THEN
  1102. IF fqty + arg_addqty > qty THEN
  1103. rslt = 0
  1104. arg_msg = '工序派工单:'+taskcode+'未派工数只有:'+String(qty - fqty,'#,##0.##########')+',不能再派工'+String(arg_addqty,'#,##0.##########')
  1105. GOTO ext
  1106. END IF
  1107. END IF
  1108. UPDATE u_sc_task
  1109. SET fqty = fqty + :arg_addqty
  1110. Where taskid = :arg_taskid;
  1111. IF sqlca.SQLCode <> 0 THEN
  1112. rslt = 0
  1113. arg_msg = "因网络或其它原因导致计划审批操作失败"+"~n"+sqlca.SQLErrText
  1114. GOTO ext
  1115. END IF
  1116. IF tryfinish(arg_taskid,arg_msg,False) = 0 THEN
  1117. rslt = 0
  1118. GOTO ext
  1119. END IF
  1120. //更新完成数
  1121. IF uo_orderml.uf_add_ftaskqty(scid,orderid,mtrlid,procode, ld_finishdate,arg_addqty,arg_msg ,False) = 0 THEN
  1122. rslt = 0
  1123. GOTO ext
  1124. END IF
  1125. Long ll_maxProorder,ll_Proorder
  1126. String ls_partname
  1127. Long ll_billid[],ll_printid
  1128. Decimal ld_noqty[],ld_oriqty,ld_argqty
  1129. Long ll_mxbt,ll_i
  1130. Int li_if_barcode
  1131. Int li_flag
  1132. IF orderid > 0 THEN
  1133. ld_oriqty = arg_addqty
  1134. SELECT partname,Proorder
  1135. INTO :ls_partname,:ll_Proorder
  1136. FROM U_OrderRqwp
  1137. WHERE scid = :scid
  1138. AND orderid = :orderid
  1139. AND mtrlid = :mtrlid
  1140. And procode = :procode;
  1141. IF sqlca.SQLCode <> 0 THEN
  1142. rslt = 0
  1143. arg_msg = '查询相关指令单工序进度信息失败 '+sqlca.SQLErrText
  1144. GOTO ext
  1145. END IF
  1146. IF Trim(ls_partname) <> '' THEN
  1147. SELECT top 1 if_barcode,printid
  1148. INTO :li_if_barcode,:ll_printid
  1149. FROM u_OrderMtrl_workgroup_tree
  1150. WHERE scid = :scid
  1151. AND orderid = :orderid
  1152. AND partname = :ls_partname
  1153. Order By if_barcode Desc;
  1154. IF sqlca.SQLCode <> 0 THEN
  1155. li_if_barcode = 0
  1156. END IF
  1157. IF li_if_barcode = 2 THEN
  1158. SELECT max(proorder) INTO :ll_maxProorder
  1159. FROM U_OrderRqwp
  1160. WHERE scid = :scid
  1161. AND orderid = :orderid
  1162. AND mtrlid = :mtrlid
  1163. And partname = :ls_partname;
  1164. IF sqlca.SQLCode <> 0 THEN
  1165. rslt = 0
  1166. arg_msg = '查询相关指令单工序进度最大序号失败 '+sqlca.SQLErrText
  1167. GOTO ext
  1168. END IF
  1169. IF ll_Proorder = ll_maxProorder THEN
  1170. ll_mxbt = 1
  1171. IF arg_addqty > 0 THEN
  1172. DECLARE cur_audit CURSOR FOR
  1173. SELECT billid,qty - fqty
  1174. FROM u_order_plan_tech
  1175. WHERE scid = :scid
  1176. AND orderid = :orderid
  1177. AND printid = :ll_printid
  1178. And qty > fqty;
  1179. OPEN cur_audit;
  1180. FETCH cur_audit Into :ll_billid[ll_mxbt],:ld_noqty[ll_mxbt];
  1181. DO WHILE sqlca.SQLCode = 0
  1182. ll_mxbt++
  1183. FETCH cur_audit Into :ll_billid[ll_mxbt],:ld_noqty[ll_mxbt];
  1184. LOOP
  1185. CLOSE cur_audit;
  1186. FOR ll_i = 1 To ll_mxbt - 1
  1187. IF ld_oriqty > ld_noqty[ll_i] THEN
  1188. ld_argqty = ld_noqty[ll_i]
  1189. ld_oriqty = ld_oriqty - ld_noqty[ll_i]
  1190. ELSE
  1191. ld_argqty = ld_oriqty
  1192. ld_oriqty = 0
  1193. END IF
  1194. IF uo_plan.addcmpqty(ll_billid[ll_i],ld_argqty,arg_msg,False) = 0 THEN
  1195. arg_msg = '更新工组条码进度已完成数及相关工艺派工单失败,'+arg_msg
  1196. rslt = 0
  1197. GOTO ext
  1198. END IF
  1199. IF ld_oriqty <= 0 THEN EXIT
  1200. NEXT
  1201. ELSE
  1202. DECLARE cur_caudit CURSOR FOR
  1203. SELECT billid,fqty
  1204. FROM u_order_plan_tech
  1205. WHERE scid = :scid
  1206. AND orderid = :orderid
  1207. AND printid = :ll_printid
  1208. AND fqty > 0
  1209. Order By fqty Desc;
  1210. OPEN cur_caudit;
  1211. FETCH cur_caudit Into :ll_billid[ll_mxbt],:ld_noqty[ll_mxbt];
  1212. DO WHILE sqlca.SQLCode = 0
  1213. ll_mxbt++
  1214. FETCH cur_caudit Into :ll_billid[ll_mxbt],:ld_noqty[ll_mxbt];
  1215. LOOP
  1216. CLOSE cur_caudit;
  1217. FOR ll_i = 1 To ll_mxbt - 1
  1218. IF 0 - ld_oriqty > ld_noqty[ll_i] THEN
  1219. ld_argqty = 0 - ld_noqty[ll_i]
  1220. ld_oriqty = ld_oriqty + ld_noqty[ll_i]
  1221. ELSE
  1222. ld_argqty = ld_oriqty
  1223. ld_oriqty = 0
  1224. END IF
  1225. IF uo_plan.addcmpqty(ll_billid[ll_i],ld_argqty,arg_msg,False) = 0 THEN
  1226. arg_msg = '更新工组条码进度已完成数及相关工艺派工单失败,'+arg_msg
  1227. rslt = 0
  1228. GOTO ext
  1229. END IF
  1230. IF ld_oriqty <= 0 THEN EXIT
  1231. NEXT
  1232. END IF
  1233. END IF
  1234. END IF
  1235. END IF
  1236. END IF
  1237. ext:
  1238. IF rslt = 0 THEN
  1239. ROLLBACK;
  1240. ELSEIF rslt = 1 And arg_ifcommit THEN
  1241. COMMIT;
  1242. END IF
  1243. Destroy uo_orderml
  1244. Destroy uo_plan
  1245. Return (rslt)
  1246. end function
  1247. public function integer tryfinish (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1248. DateTime null_dt
  1249. SetNull(null_dt)
  1250. IF arg_taskid <= 0 THEN
  1251. rslt = 0
  1252. arg_msg = '错误的工序派工单唯一码'
  1253. GOTO ext
  1254. END IF
  1255. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1256. rslt = 0
  1257. GOTO ext
  1258. END IF
  1259. IF flag <> 1 AND flag <> 3 THEN
  1260. rslt = 0
  1261. IF flag <> 1 THEN
  1262. arg_msg = '工序派工单只有在进行状态下才能设置完成状态'
  1263. ELSEIF flag <> 3 THEN
  1264. arg_msg = '工序派工单只有在自动完成状态下才能撤销完成状态'
  1265. END IF
  1266. GOTO ext
  1267. END IF
  1268. IF flag = 1 AND fqty >= qty THEN
  1269. UPDATE u_sc_task
  1270. SET flag = 3,
  1271. accomplishdate = getdate(),
  1272. accomplishemp = :publ_operator
  1273. Where taskid = :arg_taskid;
  1274. IF sqlca.SQLCode <> 0 THEN
  1275. rslt = 0
  1276. arg_msg = '因网络或其他原因导致工序派工单完成状态设置操作失败'+"~n"+sqlca.SQLErrText
  1277. GOTO ext
  1278. END IF
  1279. END IF
  1280. IF flag = 3 AND fqty < qty THEN
  1281. UPDATE u_sc_task
  1282. SET flag = 1,
  1283. accomplishdate = :null_dt,
  1284. accomplishemp = ''
  1285. Where taskid = :arg_taskid;
  1286. IF sqlca.SQLCode <> 0 THEN
  1287. rslt = 0
  1288. arg_msg = '因网络或其他原因导致工序派工单完成状态设置操作失败'+"~n"+sqlca.SQLErrText
  1289. GOTO ext
  1290. END IF
  1291. END IF
  1292. ext:
  1293. IF rslt = 0 THEN
  1294. ROLLBACK;
  1295. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1296. COMMIT;
  1297. END IF
  1298. Return (rslt)
  1299. end function
  1300. public function integer del_queue (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1301. Long cnt
  1302. rslt = p_getinfo(arg_taskid, arg_msg)
  1303. IF rslt = 0 THEN GOTO ext
  1304. IF flag <> 0 THEN
  1305. rslt = 0
  1306. arg_msg = "机台任务已经开启,不可以删除,如要删除,请先更改状态"
  1307. GOTO ext
  1308. END IF
  1309. SELECT count(*) INTO :cnt
  1310. FROM u_data_collect
  1311. Where taskid = :arg_taskid;
  1312. IF sqlca.SQLCode <> 0 THEN
  1313. rslt = 0
  1314. arg_msg = "查询机台排程是否已有相关质检单失败"+"~n"+sqlca.SQLErrText
  1315. GOTO ext
  1316. END IF
  1317. IF cnt > 0 THEN
  1318. rslt = 0
  1319. arg_msg = "该机台任务已有相关质检单,如要删除,请先删除相关质检单!"
  1320. GOTO ext
  1321. END IF
  1322. DELETE FROM u_sc_task
  1323. Where taskid = :arg_taskid;
  1324. IF sqlca.SQLCode <> 0 THEN
  1325. rslt = 0
  1326. arg_msg = "删除机台排程操作失败"+"~n"+sqlca.SQLErrText
  1327. GOTO ext
  1328. END IF
  1329. ext:
  1330. IF rslt = 0 THEN
  1331. ROLLBACK;
  1332. p_reset()
  1333. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1334. COMMIT;
  1335. END IF
  1336. Return (rslt)
  1337. end function
  1338. public function integer update_tasktype (long arg_taskid, long arg_tasktype, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1339. Long ll_flag
  1340. SELECT flag
  1341. INTO :ll_flag
  1342. FROM u_sc_task
  1343. Where taskid = :arg_taskid;
  1344. IF sqlca.SQLCode <> 0 THEN
  1345. rslt = 0
  1346. arg_msg = '查询工序派工单审核状态失败,' + sqlca.SQLErrText
  1347. GOTO ext
  1348. END IF
  1349. IF ll_flag <> 0 THEN
  1350. rslt = 0
  1351. arg_msg = '工序派工单不在待审核状态,不能修改派工类型'
  1352. GOTO ext
  1353. END IF
  1354. UPDATE u_sc_task
  1355. SET tasktype = :arg_tasktype,
  1356. modemp = :publ_operator,
  1357. moddate = getdate()
  1358. Where taskid = :arg_taskid;
  1359. IF sqlca.SQLCode <> 0 THEN
  1360. rslt = 0
  1361. arg_msg = '因网络或其它原因导致更新派工类型失败,' + sqlca.SQLErrText
  1362. GOTO ext
  1363. END IF
  1364. ext:
  1365. IF rslt = 0 THEN
  1366. ROLLBACK;
  1367. p_reset()
  1368. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1369. COMMIT;
  1370. END IF
  1371. RETURN rslt
  1372. end function
  1373. public function integer update_workgroupid (long arg_taskid, long arg_workgroupid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1374. Long ll_flag
  1375. SELECT flag
  1376. INTO :ll_flag
  1377. FROM u_sc_task
  1378. Where taskid = :arg_taskid;
  1379. IF sqlca.SQLCode <> 0 THEN
  1380. rslt = 0
  1381. arg_msg = '查询工序派工单审核状态失败,' + sqlca.SQLErrText
  1382. GOTO ext
  1383. END IF
  1384. IF ll_flag <> 0 THEN
  1385. rslt = 0
  1386. arg_msg = '工序派工单不在待审核状态,不能修改工作中心'
  1387. GOTO ext
  1388. END IF
  1389. UPDATE u_sc_task
  1390. SET workgroupid = :arg_workgroupid,
  1391. modemp = :publ_operator,
  1392. moddate = getdate()
  1393. Where taskid = :arg_taskid;
  1394. IF sqlca.SQLCode <> 0 THEN
  1395. rslt = 0
  1396. arg_msg = '因网络或其它原因导致更新工作中心失败,' + sqlca.SQLErrText
  1397. GOTO ext
  1398. END IF
  1399. ext:
  1400. IF rslt = 0 THEN
  1401. ROLLBACK;
  1402. p_reset()
  1403. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1404. COMMIT;
  1405. END IF
  1406. RETURN rslt
  1407. end function
  1408. public function integer update_empid (long arg_taskid, long arg_empid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1409. Long ll_flag
  1410. SELECT flag
  1411. INTO :ll_flag
  1412. FROM u_sc_task
  1413. Where taskid = :arg_taskid;
  1414. IF sqlca.SQLCode <> 0 THEN
  1415. rslt = 0
  1416. arg_msg = '查询工序派工单审核状态失败,' + sqlca.SQLErrText
  1417. GOTO ext
  1418. END IF
  1419. IF ll_flag <> 0 THEN
  1420. rslt = 0
  1421. arg_msg = '工序派工单不在待审核状态,不能修改员工'
  1422. GOTO ext
  1423. END IF
  1424. UPDATE u_sc_task
  1425. SET empid = :arg_empid,
  1426. modemp = :publ_operator,
  1427. moddate = getdate()
  1428. Where taskid = :arg_taskid;
  1429. IF sqlca.SQLCode <> 0 THEN
  1430. rslt = 0
  1431. arg_msg = '因网络或其它原因导致更新员工失败,' + sqlca.SQLErrText
  1432. GOTO ext
  1433. END IF
  1434. ext:
  1435. IF rslt = 0 THEN
  1436. ROLLBACK;
  1437. p_reset()
  1438. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1439. COMMIT;
  1440. END IF
  1441. RETURN rslt
  1442. end function
  1443. public function integer update_groupstr (long arg_taskid[], integer arg_kind, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1444. Long ll_i,cnt
  1445. Decimal ld_fqty
  1446. String ls_taskcode,ls_groupstr
  1447. DateTime server_dt
  1448. //arg_kind 0-成组 1-清空
  1449. For ll_i = 1 To UpperBound(arg_taskid)
  1450. Select fqty ,taskcode
  1451. Into :ld_fqty,:ls_taskcode
  1452. From u_sc_task
  1453. Where taskid = :arg_taskid[ll_i];
  1454. If sqlca.SQLCode <> 0 Then
  1455. rslt = 0
  1456. arg_msg = '查询工序派工单信息失败,ID:'+String(arg_taskid[ll_i])+','+sqlca.SQLErrText
  1457. Goto ext
  1458. End If
  1459. If ld_fqty > 0 Then
  1460. rslt = 0
  1461. arg_msg = '单号:'+ls_taskcode+' 已有完工数,不能再更改成组号'
  1462. Goto ext
  1463. End If
  1464. Select count(*)
  1465. Into :cnt
  1466. From u_sc_task Inner JOIN
  1467. u_finishmx ON u_sc_task.taskid = u_finishmx.taskid
  1468. Where u_sc_task.taskid = :arg_taskid[ll_i];
  1469. If sqlca.SQLCode <> 0 Then
  1470. rslt = 0
  1471. arg_msg = '单号:'+ls_taskcode+' 已开完工单,不能再更改成组号'
  1472. Goto ext
  1473. End If
  1474. Next
  1475. If arg_kind = 0 Then
  1476. Select Top 1 getdate() Into :server_dt From u_user ;
  1477. If sqlca.SQLCode <> 0 Then
  1478. rslt = 0
  1479. arg_msg = "查询操作失败,日期 "
  1480. Goto ext
  1481. End If
  1482. ls_groupstr = getid(scid,"G1",Date(server_dt),if_getid_ture,sqlca)
  1483. If ls_groupstr = "err" Then
  1484. rslt = 0
  1485. arg_msg = "无法获取工序派工单成组号"+"~n"+sqlca.SQLErrText
  1486. Goto ext
  1487. End If
  1488. Else
  1489. ls_groupstr = ''
  1490. End If
  1491. For ll_i = 1 To UpperBound(arg_taskid)
  1492. Update u_sc_task
  1493. Set groupstr = :ls_groupstr
  1494. Where taskid = :arg_taskid[ll_i];
  1495. If sqlca.SQLCode <> 0 Then
  1496. rslt = 0
  1497. arg_msg = "更新工序派工单成组号失败,ID:"+String(arg_taskid[ll_i])+"~n"+sqlca.SQLErrText
  1498. Goto ext
  1499. End If
  1500. Next
  1501. ext:
  1502. If rslt = 0 Then
  1503. Rollback;
  1504. p_reset()
  1505. ElseIf arg_ifcommit And rslt = 1 Then
  1506. Commit;
  1507. End If
  1508. Return rslt
  1509. end function
  1510. public function integer uof_emp_del (long arg_taskid, long arg_empid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1511. DELETE From u_sc_task_emp
  1512. Where taskid = :arg_taskid
  1513. And empid = :arg_empid;
  1514. IF sqlca.SQLCode <> 0 THEN
  1515. rslt = 0
  1516. arg_msg = "工作中心派工类型, 删除工作中心员工操作失败"+"~n"+sqlca.SQLErrText
  1517. GOTO ext
  1518. END IF
  1519. ext:
  1520. IF rslt = 0 THEN
  1521. ROLLBACK;
  1522. ELSE
  1523. COMMIT;
  1524. END IF
  1525. RETURN rslt
  1526. end function
  1527. public function integer uof_emp_create (long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1528. Long ll_workgroupid
  1529. DELETE FROM u_sc_task_emp
  1530. Where taskid = :arg_taskid;
  1531. IF sqlca.SQLCode <> 0 THEN
  1532. rslt = 0
  1533. arg_msg = "工作中心派工类型, 删除工序派工单工作中心员工操作失败"+"~n"+sqlca.SQLErrText
  1534. GOTO ext
  1535. END IF
  1536. SELECT workgroupid
  1537. INTO :ll_workgroupid
  1538. FROM u_sc_task
  1539. Where taskid = :arg_taskid;
  1540. IF sqlca.SQLCode <> 0 THEN
  1541. rslt = 0
  1542. arg_msg = "工作中心派工类型,查找工序派工单工作中心操作失败"+"~n"+sqlca.SQLErrText
  1543. GOTO ext
  1544. END IF
  1545. INSERT INTO u_sc_task_emp
  1546. (taskid, empid, assignamt)
  1547. SELECT :arg_taskid, empid, assignamt
  1548. FROM u_workgroupmx
  1549. Where (workgroupid = :ll_workgroupid);
  1550. IF sqlca.SQLCode <> 0 THEN
  1551. rslt = 0
  1552. arg_msg = "工作中心派工类型, 插入工作中心员工操作失败"+"~n"+sqlca.SQLErrText
  1553. GOTO ext
  1554. END IF
  1555. //IF sqlca.SQLNRows <= 0 THEN
  1556. // rslt = 0
  1557. // arg_msg = "工作中心派工类型, 工作中心员工没有相应工作人员"
  1558. // GOTO ext
  1559. //END IF
  1560. ext:
  1561. IF rslt = 0 THEN
  1562. ROLLBACK;
  1563. ELSE
  1564. COMMIT;
  1565. END IF
  1566. RETURN rslt
  1567. end function
  1568. public function integer uof_emp_add (long arg_taskid, long arg_empid, decimal arg_assignamt, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1569. Long cnt
  1570. //SELECT count(*)
  1571. // INTO :cnt
  1572. // FROM u_sc_task_emp
  1573. // WHERE taskid = :arg_taskid
  1574. // And empid = :arg_empid;
  1575. //IF sqlca.SQLCode <> 0 THEN
  1576. // rslt = 0
  1577. // arg_msg = "工作中心派工类型, 查找工作中心员工操作失败"+"~n"+sqlca.SQLErrText
  1578. // GOTO ext
  1579. //END IF
  1580. //
  1581. //IF cnt > 0 THEN
  1582. // rslt = 0
  1583. // arg_msg = "工作中心派工类型, 员工已存在"
  1584. // GOTO ext
  1585. //END IF
  1586. UPDATE u_sc_task_emp
  1587. SET assignamt = :arg_assignamt
  1588. WHERE taskid = :arg_taskid
  1589. And empid = :arg_empid;
  1590. IF sqlca.SQLCode = 0 THEN
  1591. IF sqlca.SQLNRows = 0 THEN
  1592. INSERT INTO u_sc_task_emp
  1593. (taskid, empid, assignamt)
  1594. Values(:arg_taskid, :arg_empid, :arg_assignamt);
  1595. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  1596. rslt = 0
  1597. arg_msg = "工作中心派工类型, 插入工作中心员工操作失败"+"~n"+sqlca.SQLErrText
  1598. GOTO ext
  1599. END IF
  1600. END IF
  1601. ELSE
  1602. rslt = 0
  1603. arg_msg = "工作中心派工类型, 更新工作中心员工操作失败"+"~n"+sqlca.SQLErrText
  1604. GOTO ext
  1605. END IF
  1606. ext:
  1607. IF rslt = 0 THEN
  1608. ROLLBACK;
  1609. ELSEif arg_ifcommit then
  1610. COMMIT;
  1611. END IF
  1612. RETURN rslt
  1613. end function
  1614. public function integer uof_update_qty (long arg_taskid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  1615. DateTime ld_finishdate,ld_null
  1616. uo_order_ml uo_orderml
  1617. uo_orderml = Create uo_order_ml
  1618. IF arg_taskid = 0 THEN
  1619. rslt = 0
  1620. arg_msg = "没有完成对象"
  1621. GOTO ext
  1622. END IF
  1623. IF arg_addqty = 0 THEN
  1624. GOTO ext
  1625. END IF
  1626. IF p_getinfo(arg_taskid,arg_msg) = 0 THEN
  1627. rslt = 0
  1628. GOTO ext
  1629. END IF
  1630. //Decimal lde_qty, lde_fqty
  1631. //String ls_taskcode
  1632. //
  1633. //SELECT taskcode, qty, fqty
  1634. // INTO :ls_taskcode, :lde_qty, :lde_fqty
  1635. // FROM u_sc_task
  1636. // Where taskid = :arg_taskid;
  1637. //IF sqlca.SQLCode <> 0 THEN
  1638. // rslt = 0
  1639. // arg_msg = "查询源派工单信息失败,"+sqlca.SQLErrText
  1640. // GOTO ext
  1641. //END IF
  1642. IF fqty > qty - arg_addqty THEN
  1643. rslt = 0
  1644. arg_msg = '工序派工单:'+taskcode+'未派工数只有:'+String(qty - fqty,'#,##0.##########')+',不能减少派工'+String(arg_addqty,'#,##0.##########')
  1645. GOTO ext
  1646. END IF
  1647. UPDATE u_sc_task
  1648. SET qty = qty - :arg_addqty
  1649. Where taskid = :arg_taskid;
  1650. IF sqlca.SQLCode <> 0 THEN
  1651. rslt = 0
  1652. arg_msg = "更新源派工单计划数量失败"+"~n"+sqlca.SQLErrText
  1653. GOTO ext
  1654. END IF
  1655. IF tryfinish(arg_taskid,arg_msg,False) = 0 THEN
  1656. rslt = 0
  1657. GOTO ext
  1658. END IF
  1659. // //更新安排数
  1660. IF uo_orderml.uf_add_taskqty(scid,orderid,mtrlid,procode,0 - arg_addqty ,arg_msg ,False) = 0 THEN
  1661. rslt = 0
  1662. GOTO ext
  1663. END IF
  1664. ext:
  1665. IF rslt = 0 THEN
  1666. ROLLBACK;
  1667. ELSEIF rslt = 1 And arg_ifcommit THEN
  1668. COMMIT;
  1669. END IF
  1670. Destroy uo_orderml
  1671. Return (rslt)
  1672. end function
  1673. public function integer uof_chk (long arg_taskid, string arg_chkemp, integer arg_ifpass, string arg_chkrslt, ref string arg_msg, boolean arg_ifcommit, ref long arg_printid);Int rslt = 1
  1674. Long ll_printid
  1675. Int li_chkrsltflag
  1676. Int li_prechkflag
  1677. uo_finish uo_finish_wg
  1678. uo_finish_wg = Create uo_finish
  1679. Long cur_scid, ll_wrkgrpid, ll_wagemth, ll_tasktype, ll_workgroupid, ll_empid
  1680. s_finish_mx s_mx[]
  1681. Decimal ld_addqty, ld_workprice
  1682. String ls_procode, ls_proname
  1683. Boolean lb_find
  1684. Long ll_wageid
  1685. SELECT prechkflag, scid, wrkgrpid, qty - fqty, tasktype, workgroupid, empid
  1686. INTO :li_prechkflag, :cur_scid, :ll_wrkgrpid, :ld_addqty , :ll_tasktype, :ll_workgroupid, :ll_empid
  1687. FROM u_sc_task
  1688. Where taskid = :arg_taskid;
  1689. IF sqlca.SQLCode <> 0 THEN
  1690. rslt = 0
  1691. arg_msg = '查询工序派工单待质检状态失败,'+sqlca.SQLErrText
  1692. GOTO ext
  1693. END IF
  1694. IF li_prechkflag <> 1 THEN
  1695. rslt = 0
  1696. arg_msg = '工序派工单不是在待质检状态,不能质检'
  1697. GOTO ext
  1698. END IF
  1699. SELECT isnull(max(printid),0)
  1700. INTO :ll_printid
  1701. FROM u_sc_task_chkmx
  1702. Where taskid = :arg_taskid;
  1703. IF sqlca.SQLCode <> 0 THEN ll_printid = 0
  1704. ll_printid++
  1705. INSERT INTO u_sc_task_chkmx
  1706. (taskid,
  1707. printid,
  1708. chkemp,
  1709. chkdate,
  1710. chkrslt,
  1711. ifpass)
  1712. VALUES (:arg_taskid,
  1713. :ll_printid,
  1714. :arg_chkemp,
  1715. getdate(),
  1716. :arg_chkrslt,
  1717. :arg_ifpass);
  1718. IF sqlca.SQLCode <> 0 THEN
  1719. rslt = 0
  1720. arg_msg = '插入质检明细失败,'+sqlca.SQLErrText
  1721. GOTO ext
  1722. END IF
  1723. //返回新的printid, 可用于附件保存
  1724. arg_printid = ll_printid
  1725. IF arg_ifpass = 0 THEN
  1726. //不合格,返工
  1727. li_chkrsltflag = 2
  1728. ELSE
  1729. //合格
  1730. li_chkrsltflag = 1
  1731. END IF
  1732. UPDATE u_sc_task
  1733. SET chkemp = :arg_chkemp,
  1734. chkdate = getdate(),
  1735. chkrsltflag = :li_chkrsltflag,
  1736. prechkflag = 0
  1737. Where taskid = :arg_taskid;
  1738. IF sqlca.SQLCode <> 0 THEN
  1739. rslt = 0
  1740. arg_msg = '更新工序派工单质检标记失败,'+sqlca.SQLErrText
  1741. GOTO ext
  1742. END IF
  1743. IF li_chkrsltflag = 1 THEN // 合格,自动生成完工单
  1744. ll_wagemth = Long(String(Today(), 'yyyyMM'))
  1745. SELECT ISNULL(U_OrderRqwp.workPrice, 0), u_sc_task.procode, u_sc_task.proname
  1746. INTO :ld_workprice, :ls_procode, :ls_proname
  1747. FROM u_sc_task LEFT OUTER JOIN
  1748. U_OrderRqwp ON u_sc_task.scid = U_OrderRqwp.scid AND
  1749. u_sc_task.orderid = U_OrderRqwp.orderid AND
  1750. u_sc_task.procode = U_OrderRqwp.Procode AND
  1751. u_sc_task.mtrlid = U_OrderRqwp.Mtrlid
  1752. Where taskid = :arg_taskid;
  1753. IF sqlca.SQLCode <> 0 THEN
  1754. rslt = 0
  1755. arg_msg = '查询工序派工单工价失败,'+sqlca.SQLErrText
  1756. GOTO ext
  1757. END IF
  1758. lb_find = False
  1759. IF ll_tasktype = 1 THEN
  1760. IF ll_workgroupid > 0 THEN
  1761. SELECT u_workgroup.wageid
  1762. INTO :ll_wageid
  1763. FROM u_workgroup INNER JOIN
  1764. u_gz_wageitem ON u_workgroup.wageid = u_gz_wageitem.wageid
  1765. Where (u_workgroup.workgroupid = :ll_workgroupid);
  1766. IF sqlca.SQLCode = 0 THEN
  1767. lb_find = True
  1768. END IF
  1769. END IF
  1770. IF Not lb_find THEN
  1771. SELECT top 1 wageid
  1772. INTO :ll_wageid
  1773. FROM u_gz_wageitem
  1774. WHERE (u_gz_wageitem.wagemode = 16 ) AND
  1775. ( u_gz_wageitem.useflag = 1 ) ;
  1776. IF sqlca.SQLCode <> 0 THEN
  1777. ll_wageid = 0
  1778. ELSE
  1779. lb_find = True
  1780. END IF
  1781. END IF
  1782. ELSE
  1783. SELECT top 1 wageid
  1784. INTO :ll_wageid
  1785. FROM u_gz_wageitem
  1786. WHERE (u_gz_wageitem.wagemode = 12 ) AND
  1787. ( u_gz_wageitem.useflag = 1 ) ;
  1788. IF sqlca.SQLCode <> 0 THEN
  1789. ll_wageid = 0
  1790. END IF
  1791. END IF
  1792. IF uo_finish_wg.newbegin(cur_scid,arg_msg) = 0 THEN
  1793. rslt = 0
  1794. GOTO ext
  1795. END IF
  1796. uo_finish_wg.scid = cur_scid
  1797. uo_finish_wg.relcode = ''
  1798. uo_finish_wg.assign_emp = publ_operator
  1799. uo_finish_wg.wrkgrpid = ll_wrkgrpid
  1800. uo_finish_wg.wagemth = ll_wagemth
  1801. uo_finish_wg.dscrp = ''
  1802. uo_finish_wg.finishdate = DateTime(Today(),Now())
  1803. s_mx[1].taskid = arg_taskid
  1804. s_mx[1].printid = 1
  1805. s_mx[1].comqty = ld_addqty
  1806. s_mx[1].mxdscrp = ''
  1807. s_mx[1].wageid = ll_wageid
  1808. s_mx[1].empid = ll_empid
  1809. s_mx[1].workgroupid = ll_workgroupid
  1810. s_mx[1].workPrice = ld_workprice
  1811. s_mx[1].procode = ls_procode
  1812. s_mx[1].proname = ls_proname
  1813. s_mx[1].storageid = 0
  1814. s_mx[1].Location = ''
  1815. s_mx[1].starttime = DateTime(Today(),Now())
  1816. s_mx[1].endtime = DateTime(Today(),Now())
  1817. s_mx[1].workhour = 0
  1818. s_mx[1].beforehour = 0
  1819. s_mx[1].afterhour = 0
  1820. s_mx[1].waithour = 0
  1821. s_mx[1].TechLevel = ''
  1822. IF uo_finish_wg.Save(s_mx,arg_msg,False) = 0 THEN
  1823. rslt = 0
  1824. GOTO ext
  1825. END IF
  1826. // 自动确认
  1827. // IF uo_finish_wg.audit(uo_finish_wg.finishid,arg_msg,False) = 0 THEN
  1828. // rslt = 0
  1829. // GOTO ext
  1830. // END IF
  1831. END IF
  1832. ext:
  1833. Destroy uo_finish_wg
  1834. IF rslt = 0 THEN
  1835. ROLLBACK;
  1836. ELSEIF rslt = 1 And arg_ifcommit THEN
  1837. COMMIT;
  1838. END IF
  1839. RETURN rslt
  1840. end function
  1841. public function integer uof_prechk (long arg_taskid, long arg_empid, string arg_prechkdscrp, string arg_carcode, string arg_locode, string arg_othercode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1842. String ls_taskcode
  1843. String ls_empname
  1844. Long ll_pempid
  1845. Int li_flag
  1846. uo_phone_push uo_push
  1847. uo_push = Create uo_phone_push
  1848. SELECT flag, taskcode
  1849. INTO :li_flag, :ls_taskcode
  1850. FROM u_sc_task
  1851. Where taskid = :arg_taskid;
  1852. IF sqlca.SQLCode <> 0 THEN
  1853. rslt = 0
  1854. arg_msg = '查询工序派工单状态失败,'+sqlca.SQLErrText
  1855. GOTO ext
  1856. END IF
  1857. IF li_flag <> 1 THEN
  1858. rslt = 0
  1859. arg_msg = '工序派工单不是在进行状态,不能申请质检'
  1860. GOTO ext
  1861. END IF
  1862. IF arg_empid > 0 THEN
  1863. SELECT empname, pempid
  1864. INTO :ls_empname, :ll_pempid
  1865. FROM u_rs_empinfo
  1866. Where empid = :arg_empid;
  1867. IF sqlca.SQLCode <> 0 THEN
  1868. rslt = 0
  1869. arg_msg = '查询员工信息失败,'+sqlca.SQLErrText
  1870. GOTO ext
  1871. END IF
  1872. END IF
  1873. UPDATE u_sc_task
  1874. SET prechkflag = 1 ,
  1875. prechkdate = getdate(),
  1876. empid = :arg_empid,
  1877. prechkdscrp = :arg_prechkdscrp,
  1878. carcode = :arg_carcode,
  1879. locode = :arg_locode,
  1880. othercode = :arg_othercode
  1881. Where taskid = :arg_taskid;
  1882. IF sqlca.SQLCode <> 0 THEN
  1883. rslt = 0
  1884. arg_msg = '更新待质检标记失败,'+sqlca.SQLErrText
  1885. GOTO ext
  1886. END IF
  1887. // DONE: 通知上司
  1888. Long ll_pushid
  1889. Long arr_empids[]
  1890. String ls_content
  1891. IF ll_pempid > 0 THEN
  1892. arr_empids[1] = ll_pempid
  1893. ls_content = '派工单号:'+ls_taskcode
  1894. IF arg_carcode <> '' THEN ls_content += ',车/袋号:'+arg_carcode
  1895. IF arg_locode <> '' THEN ls_content += ',仓位:'+arg_locode
  1896. IF arg_othercode <> '' THEN ls_content += ',其它:'+arg_othercode
  1897. IF uo_push.uf_add(arr_empids, ls_empname + '申请了工序派工质检', ls_content, 'sc_task_prechk', String(arg_taskid), ll_pushid, arg_msg, False) <> 1 THEN
  1898. rslt = 0
  1899. GOTO ext
  1900. END IF
  1901. END IF
  1902. ext:
  1903. Destroy uo_push
  1904. IF rslt = 0 THEN
  1905. ROLLBACK;
  1906. ELSEIF rslt = 1 And arg_ifcommit THEN
  1907. COMMIT;
  1908. END IF
  1909. RETURN rslt
  1910. end function
  1911. on uo_sc_task.create
  1912. call super::create
  1913. TriggerEvent( this, "constructor" )
  1914. end on
  1915. on uo_sc_task.destroy
  1916. TriggerEvent( this, "destructor" )
  1917. call super::destroy
  1918. end on