uo_finish.sru 62 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716
  1. $PBExportHeader$uo_finish.sru
  2. forward
  3. global type uo_finish from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_finish from nonvisualobject
  7. end type
  8. global uo_finish uo_finish
  9. type variables
  10. public protectedwrite long finishid
  11. public protectedwrite string finishcode
  12. public protectedwrite datetime opdate
  13. public protectedwrite string opemp
  14. public protectedwrite string modemp
  15. public protectedwrite datetime moddate
  16. public protectedwrite string auditingrep,secauditingrep,thrauditingrep
  17. public protectedwrite datetime auditingdate,secauditingdate,thrauditingdate
  18. public protectedwrite long flag
  19. public protectedwrite long secflag,thrflag
  20. long scid
  21. string relcode
  22. string assign_emp
  23. datetime finishdate
  24. long printnum
  25. long wrkGrpid //自制:工组 id; 外协:供应商id
  26. long wagemth //自制:月份; 外协:结算方式
  27. string dscrp
  28. long billtype //0:工序派工; 1:外协工序派工
  29. string inputway //建立途径 (来自安卓.....)
  30. Boolean if_getid_ture = false
  31. long it_mxbt=0 //明细结构数组末指针
  32. //private:
  33. s_finish_mx s_finish_mx[] //明细结构
  34. boolean it_newbegin=true //新建标志
  35. boolean it_updatebegin=false//修改标志
  36. int uo_option_inware_mtrlcuscode
  37. int uo_option_taskplancode
  38. int uo_option_finish_wagemth_type
  39. int uo_option_orderrqwp_auditgj
  40. end variables
  41. forward prototypes
  42. public function integer p_clearmx ()
  43. public function integer p_reset ()
  44. public function integer newbegin (integer arg_scid, ref string arg_msg)
  45. public function integer updatebegin (long arg_finishid, ref string arg_msg)
  46. public function integer getinfo (long arg_finishid, ref string arg_msg)
  47. public function integer save (s_finish_mx s_mx[], ref string arg_msg, boolean arg_ifcommit)
  48. public function integer audit (long arg_finishid, ref string arg_msg, boolean arg_ifcommit)
  49. public function integer c_audit (long arg_finishid, ref string arg_msg, boolean arg_ifcommit)
  50. public function integer secauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit)
  51. public function integer c_secauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit)
  52. public function integer c_thrauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit)
  53. public function integer del (long arg_finishid, ref string arg_msg, boolean arg_ifcommit)
  54. public function integer p_del_inware (long arg_inwareid, long arg_printid, ref string arg_msg)
  55. public function integer uof_find_cust (long arg_scid, long arg_orderid, ref long arg_cusid, ref string arg_plancode, ref string arg_mtrlcuscode, ref string arg_msg)
  56. public function integer p_del_taskwork (ref string arg_msg)
  57. public function integer p_create_inware (long arg_printid, long arg_taskid, long arg_storageid, string arg_location, decimal arg_comqty, decimal arg_workprice, string arg_mxdscrp, ref string arg_msg)
  58. public function integer p_getinfo (long arg_finishid, ref string arg_msg)
  59. public function integer p_create_taskwork (s_finish_mx s_mx[], ref string arg_msg, integer arg_ifaudit)
  60. public function integer thrauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit, integer arg_ifaudit)
  61. public function integer p_del_mustpay (s_finish_mx s_mx[], ref string arg_msg)
  62. public function integer p_create_mustpay (s_finish_mx s_mx[], ref string arg_msg)
  63. public function integer mod_price (long arg_finishid, long arg_printid, decimal arg_fprice, decimal arg_jgprice, decimal arg_taxrate, decimal arg_rebate, ref string arg_msg, boolean arg_ifcommit)
  64. end prototypes
  65. public function integer p_clearmx ();//INT p_clearmx()
  66. //清除明细
  67. it_mxbt=0
  68. RETURN 1
  69. end function
  70. public function integer p_reset ();//int p_reset()
  71. //清除对象及其明细
  72. scid = 0
  73. finishid = 0
  74. finishcode = ''
  75. relcode = ''
  76. assign_emp = ''
  77. wrkGrpid = 0
  78. opemp = ''
  79. modemp = ''
  80. auditingrep = ''
  81. flag= 0
  82. secflag = 0
  83. dscrp = ''
  84. thrflag = 0
  85. wagemth = 0
  86. SetNull(finishdate)
  87. billtype = 0
  88. //-------
  89. it_newbegin=false
  90. it_updatebegin=false
  91. it_mxbt = 0
  92. //清除明细
  93. p_clearmx()
  94. RETURN 1
  95. end function
  96. public function integer newbegin (integer arg_scid, ref string arg_msg);//重置对象,设定业务类型与关联ID,准备建立新单
  97. //0 fail 1 success
  98. Long rslt = 1,CNT = 0
  99. IF arg_scid < 0 THEN
  100. arg_msg = '请选择分部'
  101. rslt = 0
  102. GOTO ext
  103. END IF
  104. p_reset()
  105. scid = arg_scid
  106. it_newbegin = TRUE
  107. it_updatebegin = FALSE
  108. ext:
  109. IF rslt = 0 THEN p_reset()
  110. RETURN rslt
  111. end function
  112. public function integer updatebegin (long arg_finishid, ref string arg_msg);//UPDATEbegin(long arg_finishid,ref string arg_msg)
  113. //从置对象,设定业务类型与关联ID,准备更新进仓单
  114. //0 fail 1 success
  115. Long rslt = 1
  116. IF arg_finishid <= 0 THEN
  117. rslt = 0
  118. ARG_MSG = '错误销售订单唯一码'
  119. GOTO ext
  120. END IF
  121. IF p_getinfo(arg_finishid,ARG_MSG) = 0 THEN
  122. rslt = 0
  123. GOTO ext
  124. END IF
  125. IF flag <> 0 THEN
  126. rslt = 0
  127. arg_msg = '完工单已经审核,不可以修改'
  128. GOTO ext
  129. END IF
  130. p_clearmx() //清除明细
  131. it_newbegin = FALSE
  132. it_updatebegin = TRUE
  133. ext:
  134. IF rslt = 0 THEN p_reset()
  135. RETURN rslt
  136. end function
  137. public function integer getinfo (long arg_finishid, ref string arg_msg);//getinfo(long arg_finishid,string arg_msg)
  138. //0 失败 1成功
  139. Int rslt = 1,i = 1,no_mxcheck = 0
  140. IF arg_finishid <= 0 THEN
  141. rslt = 0
  142. arg_msg = '错误完工单唯一码'
  143. GOTO ext
  144. END IF
  145. IF p_getinfo(arg_finishid,arg_msg) = 0 THEN
  146. rslt = 0
  147. GOTO ext
  148. END IF
  149. //用游标读取明细
  150. DECLARE cur_finishmx CURSOR FOR
  151. SELECT u_finishmx.scid,
  152. u_finishmx.finishid,
  153. u_finishmx.printid,
  154. u_finishmx.taskid,
  155. u_finishmx.procode,
  156. u_finishmx.proname,
  157. u_finishmx.comqty,
  158. u_finishmx.workprice,
  159. u_finishmx.mxdscrp,
  160. u_finishmx.Wageid,
  161. u_finishmx.empid,
  162. u_finishmx.workgroupid,
  163. u_finishmx.reltaskworkid,
  164. u_finishmx.reltaskworkcode,
  165. u_finishmx.storageid,
  166. u_finishmx.relinwareid,
  167. u_finishmx.relinwarecode,
  168. u_sc_task.taskcode,
  169. u_sc_task.flag,
  170. u_sc_task.lastflag,
  171. u_finishmx.location,
  172. isnull(u_gz_wageitem.wagemode,0),
  173. u_sc_task.mtrlid,
  174. u_sc_task.status,
  175. u_sc_task.woodcode,
  176. u_sc_task.pcode
  177. FROM u_finishmx INNER JOIN
  178. u_sc_task ON u_finishmx.taskid = u_sc_task.taskid LEFT OUTER JOIN
  179. u_gz_wageitem ON u_finishmx.wageid = u_gz_wageitem.wageid
  180. WHERE u_finishmx.finishid = :arg_finishid ;
  181. OPEN cur_finishmx;
  182. FETCH cur_finishmx INTO :s_finish_mx[i].scid,:s_finish_mx[i].finishid,
  183. :s_finish_mx[i].printid,:s_finish_mx[i].taskid,
  184. :s_finish_mx[i].procode,
  185. :s_finish_mx[i].proname,
  186. :s_finish_mx[i].comqty,
  187. :s_finish_mx[i].workprice,
  188. :s_finish_mx[i].mxdscrp,
  189. :s_finish_mx[i].Wageid,
  190. :s_finish_mx[i].empid,
  191. :s_finish_mx[i].workgroupid,
  192. :s_finish_mx[i].reltaskworkid,
  193. :s_finish_mx[i].reltaskworkcode,
  194. :s_finish_mx[i].storageid,
  195. :s_finish_mx[i].relinwareid,
  196. :s_finish_mx[i].relinwarecode,
  197. :s_finish_mx[i].taskcode,
  198. :s_finish_mx[i].taskflag,
  199. :s_finish_mx[i].lastflag,
  200. :s_finish_mx[i].location,
  201. :s_finish_mx[i].wagemode,
  202. :s_finish_mx[i].mtrlid,
  203. :s_finish_mx[i].status,
  204. :s_finish_mx[i].woodcode,
  205. :s_finish_mx[i].pcode;
  206. DO WHILE sqlca.SQLCode = 0
  207. i++
  208. FETCH cur_finishmx INTO :s_finish_mx[i].scid,:s_finish_mx[i].finishid,
  209. :s_finish_mx[i].printid,:s_finish_mx[i].taskid,
  210. :s_finish_mx[i].procode,
  211. :s_finish_mx[i].proname,
  212. :s_finish_mx[i].comqty,
  213. :s_finish_mx[i].workprice,
  214. :s_finish_mx[i].mxdscrp,
  215. :s_finish_mx[i].Wageid,
  216. :s_finish_mx[i].empid,
  217. :s_finish_mx[i].workgroupid,
  218. :s_finish_mx[i].reltaskworkid,
  219. :s_finish_mx[i].reltaskworkcode,
  220. :s_finish_mx[i].storageid,
  221. :s_finish_mx[i].relinwareid,
  222. :s_finish_mx[i].relinwarecode,
  223. :s_finish_mx[i].taskcode,
  224. :s_finish_mx[i].taskflag,
  225. :s_finish_mx[i].lastflag,
  226. :s_finish_mx[i].location,
  227. :s_finish_mx[i].wagemode,
  228. :s_finish_mx[i].mtrlid,
  229. :s_finish_mx[i].status,
  230. :s_finish_mx[i].woodcode,
  231. :s_finish_mx[i].pcode;
  232. LOOP
  233. CLOSE cur_finishmx;
  234. //检验明细是否读入完整
  235. SELECT count(*) INTO :no_mxcheck
  236. FROM u_finishmx
  237. Where u_finishmx.finishid = :arg_finishid ;
  238. IF sqlca.SQLCode <> 0 THEN
  239. rslt = 0
  240. arg_msg = "查询操作失败,完工单明细数量"
  241. GOTO ext
  242. END IF
  243. IF i <> (no_mxcheck+1) THEN
  244. rslt = 0
  245. arg_msg = "查询操作失败,完工单明细"
  246. GOTO ext
  247. END IF
  248. it_mxbt = i - 1
  249. it_newbegin = FALSE
  250. it_updatebegin = FALSE
  251. ext:
  252. IF rslt = 0 THEN p_reset()
  253. RETURN rslt
  254. end function
  255. public function integer save (s_finish_mx s_mx[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,i, j
  256. DateTime server_dt
  257. Long ll_finishid,ll_lastflag
  258. String ls_finishcode
  259. Long cnt
  260. DateTime ld_finishdate
  261. String ls_sccode
  262. Decimal lde_workhour
  263. String ls_empstr
  264. IF uo_option_finish_wagemth_type = -1000 THEN
  265. rslt = 0
  266. arg_msg = '选项:[401]工序完工单的计件月份按仓审时间,读取初始默认值失败,操作取消!'
  267. GOTO ext
  268. END IF
  269. datastore ds
  270. ds = Create datastore
  271. IF sys_option_finish_taskwork_emp = 0 THEN // 工作中心派工的工序完工单计件审时生成计件单员工明细模式
  272. ds.DataObject = 'ds_workgroupmx_empid'
  273. ELSE
  274. ds.DataObject = 'ds_sc_task_empid'
  275. END IF
  276. ds.SetTransObject(sqlca)
  277. IF it_newbegin = False And it_updatebegin = False THEN
  278. rslt = 0
  279. arg_msg = "非编辑状态不可以提交"
  280. GOTO ext
  281. END IF
  282. IF IsNull(relcode) THEN relcode = ''
  283. IF IsNull(scid) THEN scid = 0
  284. IF IsNull(dscrp) THEN dscrp = ''
  285. IF IsNull(assign_emp) THEN assign_emp = ''
  286. IF IsNull(Wrkgrpid) THEN Wrkgrpid = 0
  287. IF IsNull(Wagemth) THEN Wagemth = 0
  288. if isnull(inputway) then inputway = ''
  289. IF assign_emp = '' THEN
  290. arg_msg = '请填入负责人!'
  291. rslt = 0
  292. GOTO ext
  293. END IF
  294. opemp = publ_operator
  295. SELECT Top 1 getdate() Into :server_dt From u_user ;
  296. IF sqlca.SQLCode <> 0 THEN
  297. rslt = 0
  298. arg_msg = "查询操作失败,日期 "
  299. GOTO ext
  300. END IF
  301. opdate = server_dt //填写单据建立时间(最近修改时间)
  302. IF Wrkgrpid = 0 THEN
  303. rslt = 0
  304. IF billtype = 0 THEN
  305. arg_msg = "请选择工组"
  306. ELSE
  307. arg_msg = "请选择供应商"
  308. END IF
  309. GOTO ext
  310. END IF
  311. IF billtype = 0 THEN
  312. IF uo_option_finish_wagemth_type = 0 THEN
  313. IF Wagemth = 0 THEN
  314. rslt = 0
  315. arg_msg = "请填入计件月份"
  316. GOTO ext
  317. END IF
  318. ELSE
  319. Wagemth = 0
  320. END IF
  321. ELSE
  322. IF Wagemth = 0 THEN //
  323. rslt = 0
  324. arg_msg = "请选择结算方式"
  325. GOTO ext
  326. END IF
  327. END IF
  328. it_mxbt = UpperBound(s_mx)
  329. IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空
  330. rslt = 0
  331. arg_msg = "没有正确完工单明细内容"
  332. GOTO ext
  333. END IF
  334. //检查完工单数量是否超派工单
  335. Decimal ld_qty_otherfinish_notaudit
  336. Decimal ld_qty_sc_task,ld_fqty_sc_task
  337. Decimal ld_qty_samebill_othermx
  338. Long ll_orderid
  339. String ls_relcode,ls_relcode_arr[]
  340. Long it_mxbt_rel,k
  341. Int li_wagemode
  342. Int li_tasktype
  343. FOR i = 1 To it_mxbt
  344. SELECT u_sc_task.qty,u_sc_task.fqty,u_sc_task.orderid,u_sc_task.tasktype
  345. INTO :ld_qty_sc_task,:ld_fqty_sc_task,:ll_orderid,:li_tasktype
  346. From u_sc_task Where u_sc_task.taskid = :s_mx[i].taskid;
  347. IF sqlca.SQLCode <> 0 THEN
  348. arg_msg = '明细行:'+String(i)+',查询相关派工单数量及已完成数失败,'+sqlca.SQLErrText
  349. rslt = 0
  350. GOTO ext
  351. END IF
  352. SELECT taskrelcode INTO :ls_relcode
  353. FROM u_order_ml
  354. WHERE scid = :scid
  355. And orderid = :ll_orderid;
  356. IF sqlca.SQLCode = 0 THEN
  357. FOR k = 1 To it_mxbt_rel
  358. IF ls_relcode = ls_relcode_arr[k] THEN
  359. GOTO _exit_rel
  360. END IF
  361. NEXT
  362. it_mxbt_rel++
  363. ls_relcode_arr[it_mxbt_rel] = ls_relcode
  364. _exit_rel:
  365. END IF
  366. SELECT isnull(sum(u_finishmx.comqty),0) INTO :ld_qty_otherfinish_notaudit
  367. FROM u_finish,u_finishmx
  368. WHERE u_finish.finishid <> :finishid
  369. AND u_finish.finishid = u_finishmx.finishid
  370. AND u_finishmx.taskid = :s_mx[i].taskid
  371. And u_finish.flag = 0;
  372. IF sqlca.SQLCode <> 0 THEN
  373. arg_msg = '明细行:'+String(i)+',查询相关派工单其它已开未审完工单数量失败,'+sqlca.SQLErrText
  374. rslt = 0
  375. GOTO ext
  376. END IF
  377. ld_qty_samebill_othermx = 0
  378. FOR j = 1 To i - 1
  379. IF s_mx[j].taskid = s_mx[i].taskid THEN
  380. ld_qty_samebill_othermx += s_mx[j].comqty
  381. END IF
  382. NEXT
  383. IF ld_qty_sc_task < ld_fqty_sc_task + ld_qty_otherfinish_notaudit + ld_qty_samebill_othermx + s_mx[i].comqty THEN
  384. arg_msg = '明细行:'+String(i)+',超派工单数量,请检查,~n派工数量:'+String(ld_qty_sc_task,'##0.#########')+'~n已完工数量:'+String(ld_fqty_sc_task,'##0.#########')+'~n其它完工单已开未审数量:'+String(ld_qty_otherfinish_notaudit,'##0.#########')+'~n本单其它明细行相同派工单数量:'+String(ld_qty_samebill_othermx,'##0.#########')+'~n本明细数量:'+String(s_mx[i].comqty,'##0.#########')
  385. rslt = 0
  386. GOTO ext
  387. END IF
  388. IF s_mx[i].wageid > 0 THEN
  389. SELECT wagemode INTO :li_wagemode
  390. FROM u_gz_wageitem
  391. Where wageid = :s_mx[i].wageid;
  392. IF sqlca.SQLCode <> 0 THEN
  393. arg_msg = '明细行:'+String(i)+',查询工资项目属性失败,'+sqlca.SQLErrText
  394. rslt = 0
  395. GOTO ext
  396. END IF
  397. IF li_wagemode <> 16 And li_wagemode <> 17 And li_wagemode <> 12 THEN
  398. arg_msg = '明细行:'+String(i)+',工资项目类型不属于工作中心计件或个人计件,请检查'
  399. rslt = 0
  400. GOTO ext
  401. END IF
  402. If (li_wagemode = 16 Or li_wagemode = 17) And s_mx[i].workgroupid = 0 THEN
  403. arg_msg = '明细行:'+String(i)+',工资项目类型属于工作中心计件,但没有选择工作中心,请检查'
  404. rslt = 0
  405. GOTO ext
  406. END IF
  407. IF li_wagemode = 12 And s_mx[i].empid = 0 THEN
  408. arg_msg = '明细行:'+String(i)+',工资项目类型属于个人计件,但没有选择员工,请检查'
  409. rslt = 0
  410. GOTO ext
  411. END IF
  412. END IF
  413. //计算实际工时
  414. //实际工时=完工时间-开始时间-准备工时-收尾工时-待工工时
  415. SELECT top 1 datediff(second, :s_mx[i].starttime, :s_mx[i].endtime) / 3600.0 - :s_mx[i].beforehour - :s_mx[i].afterhour - :s_mx[i].waithour
  416. INTO :lde_workhour
  417. From u_user ;
  418. IF sqlca.SQLCode <> 0 THEN
  419. rslt = 0
  420. arg_msg = "计算实际工时错误, "+sqlca.SQLErrText
  421. GOTO ext
  422. END IF
  423. IF IsNull(lde_workhour) THEN lde_workhour = 0
  424. IF lde_workhour < 0 THEN
  425. arg_msg = '明细行:'+String(i)+',计算实际工时为['+String(lde_workhour, '#,##0.0####')+'],不合逻辑'
  426. rslt = 0
  427. GOTO ext
  428. END IF
  429. s_mx[i].workhour = lde_workhour
  430. //按工作中心”派工类型,记录工作中心人员
  431. ls_empstr = ''
  432. IF s_mx[i].workgroupid > 0 THEN
  433. IF sys_option_finish_taskwork_emp = 1 And li_tasktype = 1 THEN
  434. cnt = ds.Retrieve(s_mx[i].taskid)
  435. ELSE
  436. cnt = ds.Retrieve(s_mx[i].workgroupid)
  437. END IF
  438. FOR j = 1 To cnt
  439. ls_empstr += Trim(ds.Object.u_rs_empinfo_empname[j])+','
  440. NEXT
  441. END IF
  442. s_mx[i].empstr = ls_empstr
  443. NEXT
  444. IF it_mxbt_rel > 0 THEN
  445. IF PosA(dscrp,'指令单生产批号:') > 0 THEN
  446. dscrp = MidA(dscrp,1,PosA(dscrp,'指令单生产批号:') - 1)
  447. END IF
  448. IF PosA(dscrp,'指令单相关号:') > 0 THEN
  449. dscrp = MidA(dscrp,1,PosA(dscrp,'指令单相关号:') - 1)
  450. END IF
  451. IF LenA(dscrp) > 0 THEN
  452. dscrp = dscrp + ' 指令单生产批号:'
  453. ELSE
  454. dscrp = '指令单生产批号:'
  455. END IF
  456. FOR k = 1 To it_mxbt_rel
  457. IF k = it_mxbt_rel THEN
  458. dscrp = dscrp + ls_relcode_arr[k]
  459. ELSE
  460. dscrp = dscrp + ls_relcode_arr[k] + ','
  461. END IF
  462. NEXT
  463. END IF
  464. IF LenA(dscrp) > 255 THEN dscrp = LeftA(dscrp,250)+'...'
  465. ///// //末工序必须选仓库
  466. //FOR i = 1 TO it_mxbt
  467. // SELECT lastflag
  468. // INTO :ll_lastflag
  469. // FROM u_sc_task
  470. // Where taskid = :s_mx[i].taskid;
  471. // IF sqlca.SQLCode <> 0 THEN
  472. // rslt = 0
  473. // arg_msg = '第'+String(i)+'行,查询派工单资料失败'
  474. // GOTO ext
  475. // END IF
  476. //
  477. // IF ll_lastflag = 1 AND s_mx[i].storageid = 0 THEN
  478. // rslt = 0
  479. // arg_msg = '第'+String(i)+'行,请选择进仓仓库'
  480. // GOTO ext
  481. // END IF
  482. //NEXT
  483. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  484. IF finishid = 0 THEN
  485. ll_finishid = f_sys_scidentity(0,"u_finish","finishid",arg_msg,True,id_sqlca)
  486. IF ll_finishid <= 0 THEN
  487. rslt = 0
  488. GOTO ext
  489. END IF
  490. //取分部代号
  491. IF f_get_sccode(scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  492. rslt = 0
  493. GOTO ext
  494. END IF
  495. IF billtype = 0 THEN
  496. ls_finishcode = getid(scid,ls_sccode+"PW",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号
  497. ELSE
  498. ls_finishcode = getid(scid,ls_sccode+"PG",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号
  499. END IF
  500. IF ls_finishcode = "err" THEN
  501. rslt = 0
  502. arg_msg = "无法获取工序完工单编号"+"~n"+sqlca.SQLErrText
  503. GOTO ext
  504. END IF
  505. INSERT INTO u_finish
  506. (scid,
  507. finishid ,
  508. finishcode,
  509. relcode,
  510. assign_emp,
  511. wrkgrpid,
  512. wagemth,
  513. opemp,
  514. opdate,
  515. dscrp,
  516. finishdate,
  517. billtype,
  518. inputway)
  519. VALUES (:scid,
  520. :ll_finishid,
  521. :ls_finishcode,
  522. :relcode,
  523. :assign_emp,
  524. :wrkgrpid,
  525. :wagemth,
  526. :opemp,
  527. :opdate,
  528. :dscrp,
  529. :finishdate,
  530. :billtype,
  531. :inputway);
  532. IF sqlca.SQLCode <> 0 THEN
  533. rslt = 0
  534. arg_msg = "插入生产完工单操作失败"+"~n"+sqlca.SQLErrText
  535. GOTO ext
  536. END IF
  537. //读取新finishid
  538. finishid = ll_finishid
  539. finishcode = ls_finishcode
  540. ELSE
  541. UPDATE u_finish
  542. SET
  543. assign_emp = :assign_emp,
  544. relcode = :relcode ,
  545. wrkgrpid = :wrkgrpid,
  546. wagemth = :wagemth,
  547. modemp = :publ_operator,
  548. moddate = :server_dt,
  549. dscrp = :dscrp,
  550. finishdate = :finishdate
  551. WHERE finishid = :finishid
  552. And flag = 0 ;
  553. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  554. rslt = 0
  555. arg_msg = "更新计划操作失败"+"~n"+sqlca.SQLErrText
  556. GOTO ext
  557. END IF
  558. //删除原有明细
  559. DELETE FROM u_finishmx
  560. Where u_finishmx.finishid = :finishid;
  561. IF sqlca.SQLCode <> 0 THEN
  562. rslt = 0
  563. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  564. GOTO ext
  565. END IF
  566. END IF
  567. FOR i = 1 To it_mxbt
  568. INSERT INTO u_finishmx
  569. (scid,
  570. finishid,
  571. taskid,
  572. printid,
  573. comqty,
  574. mxdscrp,
  575. empid,
  576. workgroupid,
  577. workprice,
  578. procode,
  579. proname,
  580. wageid,
  581. storageid,
  582. location,
  583. starttime,
  584. endtime,
  585. workhour,
  586. beforehour,
  587. afterhour,
  588. waithour,
  589. techlevel,
  590. empstr)
  591. VALUES (:scid,:finishid,
  592. :s_mx[i].taskid,
  593. :s_mx[i].printid,
  594. :s_mx[i].comqty,
  595. :s_mx[i].mxdscrp,
  596. :s_mx[i].empid,
  597. :s_mx[i].workgroupid,
  598. :s_mx[i].workprice,
  599. :s_mx[i].procode,
  600. :s_mx[i].proname,
  601. :s_mx[i].wageid,
  602. :s_mx[i].storageid,
  603. :s_mx[i].Location,
  604. :s_mx[i].starttime,
  605. :s_mx[i].endtime,
  606. :s_mx[i].workhour,
  607. :s_mx[i].beforehour,
  608. :s_mx[i].afterhour,
  609. :s_mx[i].waithour,
  610. :s_mx[i].techlevel,
  611. :s_mx[i].empstr) ;
  612. IF sqlca.SQLCode <> 0 THEN
  613. IF it_newbegin THEN finishid = 0 //还原finishid
  614. rslt = 0
  615. arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText
  616. GOTO ext
  617. END IF
  618. NEXT
  619. it_newbegin = False
  620. it_updatebegin = False
  621. ext:
  622. Destroy ds
  623. IF rslt = 0 THEN
  624. ROLLBACK;
  625. p_clearmx()
  626. ELSEIF arg_ifcommit And rslt = 1 THEN
  627. COMMIT;
  628. END IF
  629. Return(rslt)
  630. end function
  631. public function integer audit (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 ,i
  632. Long ll_taskid , ll_flag
  633. String ls_taskcode
  634. uo_sc_task uo_task
  635. uo_task = CREATE uo_sc_task
  636. IF arg_finishid = 0 THEN
  637. rslt = 0
  638. arg_msg = "没有审核对象"
  639. GOTO ext
  640. END IF
  641. IF getinfo(arg_finishid,arg_msg) = 0 THEN
  642. rslt = 0
  643. GOTO ext
  644. END IF
  645. IF flag <> 0 THEN
  646. rslt = 0
  647. arg_msg = "完工单只有在待确认状态才可以执行确认"
  648. GOTO ext
  649. END IF
  650. IF secflag = 1 THEN
  651. rslt = 0
  652. arg_msg = "完工单已经经理审不可以执行审核"
  653. GOTO ext
  654. END IF
  655. FOR i = 1 TO it_mxbt
  656. ll_flag = s_finish_mx[i].taskflag
  657. IF ll_flag = 0 THEN
  658. rslt = 0
  659. arg_msg = "查询派工单:"+String(s_finish_mx[i].taskcode)+"非进行状态,不能提交完成。"
  660. GOTO ext
  661. END IF
  662. IF uo_task.addcmpl(s_finish_mx[i].taskid,s_finish_mx[i].comqty,finishdate,publ_operator,arg_msg,FALSE) = 0 THEN
  663. rslt = 0
  664. GOTO ext
  665. END IF
  666. NEXT
  667. UPDATE u_finish
  668. SET auditingrep = :publ_operator,
  669. auditingdate = getdate(),
  670. flag = 1
  671. WHERE finishid = :arg_finishid
  672. AND flag = 0
  673. and secflag = 0 ;
  674. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  675. rslt = 0
  676. arg_msg = "完工单确认操作失败"+"~n"+sqlca.SQLErrText
  677. GOTO ext
  678. END IF
  679. flag = 1
  680. ext:
  681. IF rslt = 0 THEN
  682. ROLLBACK;
  683. ELSEIF rslt = 1 AND arg_ifcommit THEN
  684. COMMIT;
  685. END IF
  686. DESTROY uo_task
  687. RETURN rslt
  688. end function
  689. public function integer c_audit (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i
  690. Long ll_cnt
  691. String ls_inwarecode
  692. long ll_flag
  693. DateTime null_dt
  694. SetNull(null_dt)
  695. uo_sc_task uo_task
  696. uo_task = CREATE uo_sc_task
  697. IF arg_finishid = 0 THEN
  698. rslt = 0
  699. arg_msg = "没有撤销确认对象"
  700. GOTO ext
  701. END IF
  702. IF getinfo(arg_finishid,arg_msg) = 0 THEN
  703. rslt = 0
  704. GOTO ext
  705. END IF
  706. IF flag <> 1 THEN
  707. rslt = 0
  708. arg_msg = "只有在确认状态才可以执行撤销确认,请核对"
  709. GOTO ext
  710. END IF
  711. IF secflag <> 0 THEN
  712. rslt = 0
  713. arg_msg = "仓库审核状态有误,请核对"
  714. GOTO ext
  715. END IF
  716. FOR i = 1 TO it_mxbt
  717. ll_flag = s_finish_mx[i].taskflag
  718. IF uo_task.addcmpl(s_finish_mx[i].taskid,0 - s_finish_mx[i].comqty,null_dt,'',arg_msg,FALSE) = 0 THEN
  719. rslt = 0
  720. arg_msg = "更新派工单状态失败! " + arg_msg
  721. GOTO ext
  722. END IF
  723. NEXT
  724. UPDATE u_finish
  725. SET auditingrep = '',
  726. auditingdate = :null_dt,
  727. flag = 0
  728. WHERE finishid = :arg_finishid
  729. AND flag = 1
  730. AND secflag = 0;
  731. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  732. rslt = 0
  733. arg_msg = "完工单撤销确认操作失败"+"~n"+sqlca.SQLErrText
  734. GOTO ext
  735. END IF
  736. flag = 1
  737. ext:
  738. IF rslt = 0 THEN
  739. ROLLBACK;
  740. ELSEIF rslt = 1 AND arg_ifcommit THEN
  741. COMMIT;
  742. END IF
  743. DESTROY uo_task
  744. RETURN rslt
  745. end function
  746. public function integer secauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 ,i
  747. Long ll_taskid , ll_flag
  748. String ls_taskcode
  749. Long ll_wagemth
  750. DateTime server_dt
  751. IF arg_finishid = 0 THEN
  752. rslt = 0
  753. arg_msg = "没有审核对象"
  754. GOTO ext
  755. END IF
  756. IF uo_option_finish_wagemth_type = -1000 THEN
  757. rslt = 0
  758. arg_msg = '选项:[401]工序完工单的计件月份按仓审时间,读取初始默认值失败,操作取消!'
  759. GOTO ext
  760. END IF
  761. SELECT Top 1 getdate() Into :server_dt From u_user ;
  762. IF sqlca.SQLCode <> 0 THEN
  763. rslt = 0
  764. arg_msg = "查询操作失败,日期 "
  765. GOTO ext
  766. END IF
  767. ll_wagemth = Long(String(Date(server_dt),'yyyymm'))
  768. IF getinfo(arg_finishid,arg_msg) = 0 THEN
  769. rslt = 0
  770. GOTO ext
  771. END IF
  772. IF flag <> 1 THEN
  773. rslt = 0
  774. arg_msg = "完工单只有在已确认状态才可以执行仓库审核"
  775. GOTO ext
  776. END IF
  777. IF secflag <> 0 THEN
  778. rslt = 0
  779. arg_msg = "完工单只有在待仓库核状态才可以执行仓库审核"
  780. GOTO ext
  781. END IF
  782. UPDATE u_finish
  783. SET secauditingrep = :publ_operator,
  784. secauditingdate = getdate(),
  785. secflag = 1
  786. WHERE finishid = :arg_finishid
  787. AND flag = 1
  788. And secflag = 0;
  789. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  790. rslt = 0
  791. arg_msg = "完工单仓库审批操作失败"+"~n"+sqlca.SQLErrText
  792. GOTO ext
  793. END IF
  794. IF billtype = 0 THEN
  795. UPDATE u_finish
  796. SET wagemth = case :uo_option_finish_wagemth_type when 0 then wagemth else :ll_wagemth END
  797. Where finishid = :arg_finishid;
  798. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  799. rslt = 0
  800. arg_msg = "完工单仓库审批操作失败"+"~n"+sqlca.SQLErrText
  801. GOTO ext
  802. END IF
  803. END IF
  804. FOR i = 1 To it_mxbt
  805. IF s_finish_mx[i].lastflag = 1 And s_finish_mx[i].storageid > 0 THEN
  806. IF p_create_inware(s_finish_mx[i].printid,s_finish_mx[i].taskid,s_finish_mx[i].storageid,s_finish_mx[i].Location,s_finish_mx[i].comqty,s_finish_mx[i].workprice,s_finish_mx[i].mxdscrp,arg_msg) = 0 THEN
  807. rslt = 0
  808. GOTO ext
  809. END IF
  810. END IF
  811. NEXT
  812. secflag = 1
  813. ext:
  814. IF rslt = 0 THEN
  815. ROLLBACK;
  816. ELSEIF rslt = 1 And arg_ifcommit THEN
  817. COMMIT;
  818. END IF
  819. RETURN rslt
  820. end function
  821. public function integer c_secauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i
  822. DateTime null_dt
  823. SetNull(null_dt)
  824. IF uo_option_finish_wagemth_type = -1000 THEN
  825. rslt = 0
  826. arg_msg = '选项:[401]工序完工单的计件月份按仓审时间,读取初始默认值失败,操作取消!'
  827. GOTO ext
  828. END IF
  829. IF arg_finishid = 0 THEN
  830. rslt = 0
  831. arg_msg = "没有撤审对象"
  832. GOTO ext
  833. END IF
  834. IF getinfo(arg_finishid,arg_msg) = 0 THEN
  835. rslt = 0
  836. GOTO ext
  837. END IF
  838. IF flag <> 1 THEN
  839. rslt = 0
  840. arg_msg = "确认状态有误,请核对"
  841. GOTO ext
  842. END IF
  843. IF secflag <> 1 THEN
  844. rslt = 0
  845. arg_msg = "只有在已仓库审核状态才可以执行仓库撤审,请核对"
  846. GOTO ext
  847. END IF
  848. UPDATE u_finish
  849. SET secauditingrep = '',
  850. secauditingdate = :null_dt,
  851. secflag = 0
  852. WHERE finishid = :arg_finishid
  853. AND flag = 1
  854. And secflag = 1;
  855. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  856. rslt = 0
  857. arg_msg = "完工单仓库撤审操作失败"+"~n"+sqlca.SQLErrText
  858. GOTO ext
  859. END IF
  860. IF billtype = 0 THEN
  861. UPDATE u_finish
  862. SET wagemth = case :uo_option_finish_wagemth_type when 0 then wagemth else 0 END
  863. Where finishid = :arg_finishid;
  864. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  865. rslt = 0
  866. arg_msg = "完工单仓库撤审操作失败"+"~n"+sqlca.SQLErrText
  867. GOTO ext
  868. END IF
  869. END IF
  870. FOR i = 1 To it_mxbt
  871. IF s_finish_mx[i].relinwareid > 0 THEN
  872. IF p_del_inware(s_finish_mx[i].relinwareid,s_finish_mx[i].printid,arg_msg) = 0 THEN
  873. rslt = 0
  874. GOTO ext
  875. END IF
  876. END IF
  877. NEXT
  878. secflag = 0
  879. ext:
  880. IF rslt = 0 THEN
  881. ROLLBACK;
  882. ELSEIF rslt = 1 And arg_ifcommit THEN
  883. COMMIT;
  884. END IF
  885. RETURN rslt
  886. end function
  887. public function integer c_thrauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i
  888. DateTime null_dt
  889. SetNull(null_dt)
  890. If uo_option_orderrqwp_auditgj = -1000 Then
  891. rslt = 0
  892. arg_msg = '选项:[398]工价表如果未进行工价审,指令单工序明细生成时对应工序工价为0,读取初始默认值失败,操作取消!'
  893. Goto ext
  894. End If
  895. If arg_finishid = 0 Then
  896. rslt = 0
  897. arg_msg = "没有撤审对象"
  898. Goto ext
  899. End If
  900. If getinfo(arg_finishid,arg_msg) = 0 Then
  901. rslt = 0
  902. Goto ext
  903. End If
  904. If secflag <> 1 Then
  905. rslt = 0
  906. arg_msg = "仓库审核状态有误,请核对"
  907. Goto ext
  908. End If
  909. If thrflag <> 1 Then
  910. rslt = 0
  911. arg_msg = "只有在已计件审核状态才可以执行计件撤审,请核对"
  912. Goto ext
  913. End If
  914. Update u_finish
  915. Set thrauditingrep = '',
  916. thrauditingdate = :null_dt,
  917. thrflag = 0
  918. Where finishid = :arg_finishid
  919. And secflag = 1
  920. And thrflag = 1;
  921. If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then
  922. rslt = 0
  923. arg_msg = "完工单计件撤审操作失败"+"~n"+sqlca.SQLErrText
  924. Goto ext
  925. End If
  926. If billtype = 0 Then
  927. If p_del_taskwork(arg_msg) = 0 Then
  928. rslt = 0
  929. Goto ext
  930. End If
  931. //20141121 选项 398 加强,工序完工单计件撤审的时候,如果工序的工价表已经进行工价审核,以最新的工价更新完工单的单价,否则更新为0
  932. If uo_option_orderrqwp_auditgj = 1 Then
  933. Update u_finishmx
  934. Set u_finishmx.workprice = case isnull(u_sc_workprice.auditflag_gj,0) when 0 then 0 else isnull(u_sc_workprice.workPrice,0) End
  935. From u_finishmx Inner JOIN
  936. u_sc_task ON u_finishmx.taskid = u_sc_task.taskid Inner JOIN
  937. u_Order_ml ON u_Order_ml.OrderID = u_sc_task.orderid And
  938. u_Order_ml.scid = u_sc_task.scid LEFT Outer JOIN
  939. U_OrderRqwp ON u_Order_ml.scid = U_OrderRqwp.scid And
  940. u_Order_ml.OrderID = U_OrderRqwp.orderid And
  941. u_sc_task.procode = U_OrderRqwp.Procode LEFT Outer JOIN
  942. u_sc_workprice ON
  943. CASE WHEN U_OrderRqwp.sonmtrlid = 0 THEN U_OrderRqwp.mtrlid ELSE U_OrderRqwp.sonmtrlid
  944. End = u_sc_workprice.Mtrlid And CASE WHEN rtrim(U_OrderRqwp.procode_ori)
  945. = '' THEN U_OrderRqwp.procode ELSE U_OrderRqwp.procode_ori End = u_sc_workprice.procode
  946. Where u_finishmx.finishid = :arg_finishid;
  947. If sqlca.SQLCode <> 0 Then
  948. rslt = 0
  949. arg_msg = "按工价表最新工价更新工序完工单价格失败"+"~n"+sqlca.SQLErrText
  950. Goto ext
  951. End If
  952. End If
  953. Else
  954. If p_del_mustpay(s_finish_mx, arg_msg) = 0 Then
  955. rslt = 0
  956. Goto ext
  957. End If
  958. End If
  959. thrflag = 0
  960. ext:
  961. If rslt = 0 Then
  962. Rollback;
  963. ElseIf rslt = 1 And arg_ifcommit Then
  964. Commit;
  965. End If
  966. Return rslt
  967. end function
  968. public function integer del (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  969. rslt = getinfo(arg_finishid, arg_msg)
  970. IF rslt = 0 THEN GOTO ext
  971. IF flag <> 0 THEN
  972. rslt = 0
  973. arg_msg = "生产完工单已经审核,不可以删除"
  974. GOTO ext
  975. END IF
  976. DELETE FROM u_finish
  977. Where finishid = :arg_finishid;
  978. IF sqlca.SQLCode <> 0 THEN
  979. rslt = 0
  980. arg_msg = "删除生产完工单操作失败"+"~n"+sqlca.SQLErrText
  981. GOTO ext
  982. END IF
  983. //删除明细
  984. DELETE FROM u_finishmx
  985. Where u_finishmx.finishid = :arg_finishid;
  986. IF sqlca.SQLCode <> 0 THEN
  987. rslt = 0
  988. arg_msg = "删除生产完工明细操作失败"+"~n"+sqlca.SQLErrText
  989. GOTO ext
  990. END IF
  991. ext:
  992. IF rslt = 0 THEN
  993. ROLLBACK;
  994. p_reset()
  995. ELSEIF rslt = 1 AND arg_ifcommit THEN
  996. COMMIT;
  997. END IF
  998. Return (rslt)
  999. end function
  1000. public function integer p_del_inware (long arg_inwareid, long arg_printid, ref string arg_msg);Int rslt = 1
  1001. Long ll_cnt,ll_flag
  1002. String ls_inwarecode
  1003. uo_inware uo_ware
  1004. uo_ware = CREATE uo_inware
  1005. uo_ware.commit_transaction = sqlca
  1006. uo_ware.if_getid_ture = FALSE
  1007. IF arg_inwareid <= 0 THEN
  1008. rslt = 0
  1009. arg_msg = '错误的进仓单ID'
  1010. GOTO ext
  1011. END IF
  1012. SELECT count(*)
  1013. INTO :ll_cnt
  1014. FROM u_inware
  1015. Where inwareid = :arg_inwareid;
  1016. IF sqlca.SQLCode <> 0 THEN
  1017. rslt = 0
  1018. arg_msg = "查询相关进仓单失败"+"~n"+sqlca.SQLErrText
  1019. GOTO ext
  1020. END IF
  1021. IF ll_cnt = 0 THEN
  1022. rslt = 1
  1023. GOTO ext
  1024. ELSEIF ll_cnt > 0 THEN
  1025. SELECT flag
  1026. INTO :ll_flag
  1027. FROM u_inware
  1028. Where inwareid = :arg_inwareid;
  1029. IF sqlca.SQLCode <> 0 THEN
  1030. rslt = 0
  1031. arg_msg = "查询相关进仓单审核标记失败"+"~n"+sqlca.SQLErrText
  1032. GOTO ext
  1033. END IF
  1034. END IF
  1035. IF ll_flag = 1 THEN
  1036. rslt = 0
  1037. arg_msg = '第'+String(arg_printid)+'行,相关进仓单已经审核,请先撤审'
  1038. GOTO ext
  1039. // IF uo_ware.getinfo(scid,arg_inwareid,arg_msg) = 0 THEN
  1040. // rslt = 0
  1041. // GOTO ext
  1042. // END IF
  1043. //
  1044. // IF uo_ware.c_auditing(false,arg_msg) = 0 THEN
  1045. // rslt = 0
  1046. // GOTO ext
  1047. // END IF
  1048. END IF
  1049. IF uo_ware.del(scid,arg_inwareid,arg_msg,FALSE) = 0 THEN
  1050. rslt = 0
  1051. GOTO ext
  1052. END IF
  1053. UPDATE u_finishmx
  1054. SET relinwareid = 0,
  1055. relinwarecode = ''
  1056. WHERE finishid = :finishid AND
  1057. printid = :arg_printid;
  1058. IF sqlca.SQLCode <> 0 THEN
  1059. rslt = 0
  1060. arg_msg = '更新完工单明细相关进仓单失败'
  1061. GOTO ext
  1062. END IF
  1063. ext:
  1064. DESTROY uo_ware
  1065. IF rslt = 0 THEN
  1066. ROLLBACK;
  1067. END IF
  1068. RETURN rslt
  1069. end function
  1070. public function integer uof_find_cust (long arg_scid, long arg_orderid, ref long arg_cusid, ref string arg_plancode, ref string arg_mtrlcuscode, ref string arg_msg);Int rslt = 1
  1071. IF uo_option_inware_mtrlcuscode = -1000 THEN
  1072. rslt = 0
  1073. arg_msg = '选项:[138]生产进仓单产品批号策略按指令单号,读取初始默认值失败,操作取消!'
  1074. GOTO ext
  1075. END IF
  1076. IF uo_option_taskplancode = -1000 THEN
  1077. rslt = 0
  1078. arg_msg = '选项:[038]使用客户批号库存,读取初始默认值失败,操作取消!'
  1079. GOTO ext
  1080. END IF
  1081. Long li_ordertype,cnt
  1082. Long ll_cusid
  1083. String ls_cuscode,ls_cusname,ls_plancode
  1084. Long ll_mtrlid,ll_mtrlid_p,ll_porderid
  1085. Boolean lb_ifsameorder
  1086. Int li_ifmtrlcuscode
  1087. String ls_ordercode
  1088. SELECT ordercode,ordertype,mtrlid,porderid INTO :ls_ordercode,:li_ordertype,:ll_mtrlid,:ll_porderid
  1089. FROM u_order_ml
  1090. WHERE scid = :arg_scid
  1091. And orderid = :arg_orderid;
  1092. IF sqlca.SQLCode <> 0 THEN
  1093. rslt = 0
  1094. arg_msg = '查询指令单信息失败,'+sqlca.SQLErrText
  1095. GOTO ext
  1096. END IF
  1097. IF li_ordertype = 0 THEN
  1098. ll_cusid = 0
  1099. GOTO ext
  1100. END IF
  1101. SELECT count(*) INTO :cnt
  1102. FROM u_order_ml_mx
  1103. WHERE orderid = :arg_orderid
  1104. And scid = :arg_scid;
  1105. IF sqlca.SQLCode <> 0 THEN
  1106. rslt = 0
  1107. arg_msg = '查询指令单相关计划明细信息失败,'+sqlca.SQLErrText
  1108. GOTO ext
  1109. END IF
  1110. IF cnt <> 1 THEN
  1111. ll_cusid = 0
  1112. GOTO ext
  1113. END IF
  1114. SELECT ifmtrlcuscode INTO :li_ifmtrlcuscode
  1115. FROM u_mtrldef
  1116. Where mtrlid = :ll_mtrlid;
  1117. IF sqlca.SQLCode <> 0 THEN
  1118. rslt = 0
  1119. arg_msg = '查询物料是否使用产品批号属性失败,'+sqlca.SQLErrText
  1120. GOTO ext
  1121. END IF
  1122. IF uo_option_inware_mtrlcuscode = 1 And li_ifmtrlcuscode = 1 THEN
  1123. arg_mtrlcuscode = ls_ordercode
  1124. ELSE
  1125. arg_mtrlcuscode = ''
  1126. END IF
  1127. IF li_ordertype = 4 THEN
  1128. SELECT mtrlid INTO :ll_mtrlid_p
  1129. FROM u_order_ml
  1130. WHERE scid = :arg_scid
  1131. And orderid = :ll_porderid;
  1132. IF sqlca.SQLCode <> 0 THEN
  1133. rslt = 0
  1134. arg_msg = '查询指令单上级计划物料资料失败,'+sqlca.SQLErrText
  1135. GOTO ext
  1136. END IF
  1137. IF ll_mtrlid_p = ll_mtrlid THEN
  1138. lb_ifsameorder = True
  1139. SELECT u_order_ml.cusid,
  1140. isnull(u_cust.cuscode,''),
  1141. isnull(u_cust.name,''),
  1142. u_order_ml.taskrelcode
  1143. INTO
  1144. :ll_cusid,
  1145. :ls_cuscode,
  1146. :ls_cusname,
  1147. :ls_plancode
  1148. FROM u_order_ml left OUTER join u_cust on u_cust.cusid = u_order_ml.cusid
  1149. WHERE u_order_ml.scid = :arg_scid
  1150. And u_order_ml.orderid = :ll_porderid;
  1151. IF sqlca.SQLCode <> 0 THEN
  1152. rslt = 0
  1153. arg_msg = '查询指令单上级计划相关客户信息失败,'+sqlca.SQLErrText
  1154. GOTO ext
  1155. END IF
  1156. END IF
  1157. ELSE
  1158. SELECT u_order_ml.cusid,
  1159. isnull(u_cust.cuscode,''),
  1160. isnull(u_cust.name,''),
  1161. u_order_ml.taskrelcode
  1162. INTO
  1163. :ll_cusid,
  1164. :ls_cuscode,
  1165. :ls_cusname,
  1166. :ls_plancode
  1167. FROM u_order_ml left OUTER join u_cust on u_cust.cusid = u_order_ml.cusid
  1168. WHERE u_order_ml.scid = :arg_scid
  1169. And u_order_ml.orderid = :arg_orderid;
  1170. IF sqlca.SQLCode <> 0 THEN
  1171. rslt = 0
  1172. arg_msg = '查询指令单相关客户信息失败,'+sqlca.SQLErrText
  1173. GOTO ext
  1174. END IF
  1175. END IF
  1176. IF lb_ifsameorder And uo_option_taskplancode = 1 THEN
  1177. arg_plancode = ls_plancode
  1178. ELSE
  1179. arg_plancode = ''
  1180. END IF
  1181. ext:
  1182. arg_cusid = ll_cusid
  1183. RETURN rslt
  1184. end function
  1185. public function integer p_del_taskwork (ref string arg_msg);Int rslt = 1
  1186. Long ll_cnt,ll_flag
  1187. String ls_inwarecode
  1188. uo_scwg_taskwork_2 uo_ware
  1189. uo_ware = CREATE uo_scwg_taskwork_2
  1190. uo_ware.commit_transaction = sqlca
  1191. uo_scwg_taskwork_day uo_ware_day
  1192. uo_ware_day = CREATE uo_scwg_taskwork_day
  1193. uo_ware_day.commit_transaction = sqlca
  1194. Long ll_billid[]
  1195. Long ll_mxbt = 1,ll_i
  1196. long ll_billid_day[]
  1197. long ll_mxbt_day = 1
  1198. DECLARE cur_taskwork CURSOR FOR
  1199. SELECT billid
  1200. FROM u_scwg_taskwork_2
  1201. WHERE relid = :finishid
  1202. And (billtype = 0 OR billtype = 1);
  1203. OPEN cur_taskwork ;
  1204. FETCH cur_taskwork INTO :ll_billid[ll_mxbt];
  1205. DO WHILE sqlca.SQLCode = 0
  1206. ll_mxbt++
  1207. FETCH cur_taskwork INTO :ll_billid[ll_mxbt];
  1208. LOOP
  1209. CLOSE cur_taskwork;
  1210. ll_mxbt = ll_mxbt -1
  1211. FOR ll_i = 1 TO ll_mxbt
  1212. IF uo_ware.del(ll_billid[ll_i],arg_msg,FALSE) = 0 THEN
  1213. arg_msg = '删除相关计件单失败,'+arg_msg
  1214. rslt = 0
  1215. GOTO ext
  1216. END IF
  1217. NEXT
  1218. DECLARE cur_taskwork_day CURSOR FOR
  1219. SELECT billid
  1220. FROM u_scwg_taskwork_day
  1221. WHERE relid = :finishid
  1222. And (billtype = 0);
  1223. OPEN cur_taskwork_day ;
  1224. FETCH cur_taskwork_day INTO :ll_billid_day[ll_mxbt_day];
  1225. DO WHILE sqlca.SQLCode = 0
  1226. ll_mxbt_day++
  1227. FETCH cur_taskwork_day INTO :ll_billid_day[ll_mxbt_day];
  1228. LOOP
  1229. CLOSE cur_taskwork_day;
  1230. ll_mxbt_day = ll_mxbt_day -1
  1231. FOR ll_i = 1 TO ll_mxbt_day
  1232. IF uo_ware_day.del(ll_billid_day[ll_i],arg_msg,FALSE) = 0 THEN
  1233. arg_msg = '删除相关工作中心日分配计件单失败,'+arg_msg
  1234. rslt = 0
  1235. GOTO ext
  1236. END IF
  1237. NEXT
  1238. ext:
  1239. DESTROY uo_ware
  1240. destroy uo_ware_day
  1241. IF rslt = 0 THEN
  1242. ROLLBACK;
  1243. END IF
  1244. RETURN rslt
  1245. end function
  1246. public function integer p_create_inware (long arg_printid, long arg_taskid, long arg_storageid, string arg_location, decimal arg_comqty, decimal arg_workprice, string arg_mxdscrp, ref string arg_msg);Long rslt = 1
  1247. Long i
  1248. Long ll_wrkid,mtrlid,orderid,balctype,cusid,ll_ref_inwareid
  1249. String status,woodcode,pcode,mtrlcode,unit,ls_ref_inwarecode
  1250. String ls_plancode,ls_mtrlcuscode
  1251. decimal ld_planprice
  1252. int li_ifmtrlcuscode
  1253. uo_inware uo_ware
  1254. uo_ware = Create uo_inware
  1255. uo_ware.commit_transaction = sqlca
  1256. uo_ware.if_getid_ture = False
  1257. SELECT u_sc_task.mtrlid,
  1258. u_sc_task.status,
  1259. u_sc_task.woodcode,
  1260. u_sc_task.pcode,
  1261. u_mtrldef.mtrlcode,
  1262. u_sc_task.orderid,
  1263. u_mtrldef.unit,
  1264. u_mtrldef.ifmtrlcuscode
  1265. INTO :mtrlid,
  1266. :status,
  1267. :woodcode,
  1268. :pcode,
  1269. :mtrlcode,
  1270. :orderid,
  1271. :unit,
  1272. :li_ifmtrlcuscode
  1273. FROM u_sc_task,u_mtrldef
  1274. WHERE u_sc_task.mtrlid = u_mtrldef.mtrlid AND
  1275. taskid = :arg_taskid;
  1276. IF sqlca.SQLCode <> 0 THEN
  1277. rslt = 0
  1278. arg_msg = '查询派工单资料失败'
  1279. GOTO ext
  1280. END IF
  1281. if billtype = 0 then
  1282. SELECT storageid
  1283. INTO :ll_wrkid
  1284. FROM u_sc_workgroup
  1285. Where wrkgrpid = :wrkgrpid;
  1286. IF sqlca.SQLCode <> 0 THEN
  1287. rslt = 0
  1288. arg_msg = '查找工组对应车间失败'
  1289. GOTO ext
  1290. END IF
  1291. else
  1292. SELECT wrkGrpid
  1293. INTO :ll_wrkid
  1294. FROM u_order_ml
  1295. Where orderid = :orderid;
  1296. IF sqlca.SQLCode <> 0 THEN
  1297. rslt = 0
  1298. arg_msg = '查找指令对应车间失败'
  1299. GOTO ext
  1300. END IF
  1301. end if
  1302. If sys_option_inware_mtrlcuscode = 1 And li_ifmtrlcuscode = 1 Then
  1303. int li_ordertype
  1304. long ll_pzlorderid
  1305. string ls_pzlordercode, ls_ordercode
  1306. Select ordertype,pzlorderid, ordercode
  1307. Into :li_ordertype,:ll_pzlorderid,:ls_ordercode
  1308. From u_order_ml
  1309. Where u_order_ml.scid = :scid
  1310. And orderid = :orderid;
  1311. If sqlca.SQLCode <> 0 Then
  1312. ls_mtrlcuscode = ''
  1313. Else
  1314. If li_ordertype = 4 And ll_pzlorderid > 0 Then
  1315. Select ordercode Into :ls_pzlordercode
  1316. From u_order_ml
  1317. Where u_order_ml.scid = :scid
  1318. And orderid = :ll_pzlorderid;
  1319. If sqlca.SQLCode <> 0 Then
  1320. ls_mtrlcuscode = ''
  1321. Else
  1322. ls_mtrlcuscode = ls_pzlordercode
  1323. End If
  1324. Else
  1325. ls_mtrlcuscode = ls_ordercode
  1326. End If
  1327. End If
  1328. Else
  1329. ls_mtrlcuscode = ''
  1330. End If
  1331. //dw_child.Object.u_inwaremx_mtrlcuscode[child_row] = ls_mtrlcuscode
  1332. SELECT balctype
  1333. INTO :balctype
  1334. FROM u_storage
  1335. Where storageid = :arg_storageid;
  1336. IF sqlca.SQLCode <> 0 THEN
  1337. rslt = 0
  1338. arg_msg = '查询仓库资料失败'
  1339. GOTO ext
  1340. END IF
  1341. f_get_planprice_mtrl(mtrlid,status,woodcode,pcode,ld_planprice)
  1342. IF balctype = 1 THEN
  1343. IF uof_find_cust(scid,orderid,cusid,ls_plancode,ls_mtrlcuscode,arg_msg) = 0 THEN
  1344. rslt = 0
  1345. GOTO ext
  1346. END IF
  1347. ELSE
  1348. IF uo_option_taskplancode = 1 THEN
  1349. SELECT taskrelcode
  1350. INTO :ls_plancode
  1351. FROM u_order_ml
  1352. WHERE u_order_ml.scid = :scid
  1353. And orderid = :orderid;
  1354. IF sqlca.SQLCode <> 0 THEN
  1355. ls_plancode = ''
  1356. END IF
  1357. ELSE
  1358. ls_plancode = ''
  1359. END IF
  1360. END IF
  1361. IF uo_ware.newbegin(scid,3,arg_msg) = 0 THEN
  1362. rslt = 0
  1363. GOTO ext
  1364. END IF
  1365. uo_ware.indate = finishdate
  1366. uo_ware.inrep = opemp
  1367. uo_ware.part = finishcode
  1368. uo_ware.dscrp = ''
  1369. uo_ware.storageid = arg_storageid
  1370. uo_ware.sptname = '工序完工单自动生成'
  1371. uo_ware.relid = ll_wrkid
  1372. IF mtrlid > 0 THEN
  1373. IF uo_ware.acceptmx(1,&
  1374. mtrlid,&
  1375. mtrlcode,&
  1376. ls_plancode,&
  1377. status,&
  1378. arg_comqty,&
  1379. ld_planprice,&
  1380. 1,&
  1381. arg_mxdscrp,&
  1382. arg_msg,&
  1383. 0,&
  1384. orderid,&
  1385. 1,&
  1386. woodcode,&
  1387. pcode,&
  1388. cusid,&
  1389. unit,&
  1390. 1,arg_comqty,0,0,'','',0,0,ls_mtrlcuscode,arg_location,&
  1391. arg_comqty,&
  1392. 0) = 0 THEN
  1393. rslt = 0
  1394. GOTO ext
  1395. END IF
  1396. END IF
  1397. IF uo_ware.Save(False,arg_msg) = 0 THEN
  1398. rslt = 0
  1399. GOTO ext
  1400. END IF
  1401. ll_ref_inwareid = uo_ware.inwareid
  1402. ls_ref_inwarecode = uo_ware.inwarecode
  1403. //IF uo_ware.getinfo(scid,ll_ref_inwareid,arg_msg) = 0 THEN
  1404. // rslt = 0
  1405. // GOTO ext
  1406. //END IF
  1407. //
  1408. //IF uo_ware.auditing(false,arg_msg) = 0 THEN
  1409. // rslt = 0
  1410. // GOTO ext
  1411. //END IF
  1412. UPDATE u_finishmx
  1413. SET relinwareid = :ll_ref_inwareid,
  1414. relinwarecode = :ls_ref_inwarecode
  1415. WHERE finishid = :finishid AND
  1416. printid = :arg_printid;
  1417. IF sqlca.SQLCode <> 0 THEN
  1418. rslt = 0
  1419. arg_msg = '更新完工单明细相关进仓单失败'
  1420. GOTO ext
  1421. END IF
  1422. ext:
  1423. Destroy uo_ware
  1424. IF rslt = 0 THEN
  1425. ROLLBACK;
  1426. END IF
  1427. RETURN rslt
  1428. end function
  1429. public function integer p_getinfo (long arg_finishid, ref string arg_msg);Int rslt = 1
  1430. IF arg_finishid <= 0 THEN
  1431. rslt = 0
  1432. arg_msg = '错误生产任务单唯一码'
  1433. GOTO ext
  1434. END IF
  1435. SELECT scid,
  1436. finishid,
  1437. finishcode,
  1438. relcode,
  1439. assign_emp,
  1440. wrkgrpid,
  1441. opemp,
  1442. opdate,
  1443. modemp,
  1444. moddate,
  1445. auditingrep,
  1446. auditingdate,
  1447. flag,
  1448. dscrp,
  1449. secflag,
  1450. thrflag,
  1451. finishdate,
  1452. wagemth,
  1453. billtype,
  1454. inputway
  1455. INTO
  1456. :scid,
  1457. :finishid,
  1458. :finishcode,
  1459. :relcode,
  1460. :assign_emp,
  1461. :wrkgrpid,
  1462. :opemp,
  1463. :opdate,
  1464. :modemp,
  1465. :moddate,
  1466. :auditingrep,
  1467. :auditingdate,
  1468. :flag,
  1469. :dscrp,
  1470. :secflag,
  1471. :thrflag,
  1472. :finishdate,
  1473. :wagemth,
  1474. :billtype,
  1475. :inputway
  1476. FROM u_finish
  1477. Where finishid = :arg_finishid ;
  1478. IF sqlca.SQLCode <> 0 THEN
  1479. rslt = 0
  1480. arg_msg = '查询生产任务完工单内容失败(错误生产任务完工单唯一码)'
  1481. GOTO ext
  1482. END IF
  1483. finishid = arg_finishid
  1484. ext:
  1485. IF rslt = 0 THEN p_reset()
  1486. RETURN rslt
  1487. end function
  1488. public function integer p_create_taskwork (s_finish_mx s_mx[], ref string arg_msg, integer arg_ifaudit);Long rslt = 1
  1489. Long ll_ref_billid
  1490. String ls_ref_billcode
  1491. uo_scwg_taskwork_2 uo_ware
  1492. uo_ware = Create uo_scwg_taskwork_2
  1493. uo_ware.commit_transaction = sqlca
  1494. uo_ware.if_getid_ture = False
  1495. uo_scwg_taskwork_day uo_ware_wrk
  1496. uo_ware_wrk = Create uo_scwg_taskwork_day
  1497. uo_ware_wrk.commit_transaction = sqlca
  1498. uo_ware_wrk.if_getid_ture = False
  1499. datastore ds_workgroupmx
  1500. ds_workgroupmx = Create datastore
  1501. IF sys_option_finish_taskwork_emp = 0 THEN // 工作中心派工的工序完工单计件审时生成计件单员工明细模式
  1502. ds_workgroupmx.DataObject = 'ds_workgroupmx_empid'
  1503. ELSE
  1504. ds_workgroupmx.DataObject = 'ds_sc_task_empid'
  1505. END IF
  1506. ds_workgroupmx.SetTransObject(sqlca)
  1507. Long ll_empid_arr[]
  1508. Long ll_empid_wageid[]
  1509. Long it_emp = 0
  1510. Long ll_wrkgrpid_arr[]
  1511. Long ll_wkp_wageid[]
  1512. Long it_wrk = 0
  1513. Long it_wrk_day = 0
  1514. Long ll_wrkgrpid_day[],ll_day_wageid[]
  1515. Long ll_billtype,ll_wrkgrpid
  1516. Long ll_i,ll_j,ll_k,ll_l
  1517. Long ll_mtrlid_arr[]
  1518. String ls_procode_arr[],ls_proname_arr[]
  1519. Decimal ld_comqty_arr[],ld_workprice_arr[]
  1520. String ls_mxdscrp_arr[]
  1521. String ls_status_arr[],ls_woodcode_arr[],ls_pcode_arr[],ls_wpcode_arr[]
  1522. String ls_wpcode
  1523. Long ll_orderid_arr[]
  1524. Long ll_mxbt_mx
  1525. Long ll_scid
  1526. Long ll_mxbt_mx_
  1527. Long ll_wkpid
  1528. Long ll_empid_arr_[], ll_empid_arr_null[]
  1529. String ls_empname_arr_[], ls_empname_arr_null[]
  1530. Decimal lde_wageamt_arr_[], lde_wageamt_arr_null[], lde_workhours_arr_[]
  1531. Long ll_rowcnt
  1532. Decimal ld_wageamt, lde_assignamt_sum, lde_assignamt
  1533. Dec lde_workhours, lde_workhours_sum
  1534. String ls_status,ls_woodcode,ls_pcode
  1535. Long ll_mtrlid,ll_orderid
  1536. Decimal ld_wageamt_sm, lde_wageamt_sum
  1537. SELECT storageid
  1538. INTO :ll_wkpid
  1539. FROM u_sc_workgroup
  1540. Where wrkGrpid = :wrkGrpid;
  1541. IF sqlca.SQLCode <> 0 THEN
  1542. arg_msg = "查询工组所属车间失败,"+sqlca.SQLErrText
  1543. rslt = 0
  1544. GOTO ext
  1545. END IF
  1546. FOR ll_i = 1 To it_mxbt
  1547. IF s_mx[ll_i].empid > 0 And s_mx[ll_i].wagemode = 12 THEN //个人计件
  1548. FOR ll_j = 1 To it_emp
  1549. IF ll_empid_arr[ll_j] = s_mx[ll_i].empid And ll_empid_wageid[ll_j] = s_mx[ll_i].wageid THEN
  1550. GOTO _next
  1551. END IF
  1552. NEXT
  1553. it_emp++
  1554. ll_empid_arr[it_emp] = s_mx[ll_i].empid
  1555. ll_empid_wageid[it_emp] = s_mx[ll_i].wageid
  1556. ELSEIF s_mx[ll_i].workgroupid > 0 And s_mx[ll_i].wagemode = 16 THEN //工作中心产品月分配
  1557. FOR ll_j = 1 To it_wrk
  1558. IF ll_wrkgrpid_arr[ll_j] = s_mx[ll_i].workgroupid And ll_wkp_wageid[ll_j] = s_mx[ll_i].wageid THEN
  1559. GOTO _next
  1560. END IF
  1561. NEXT
  1562. it_wrk++
  1563. ll_wrkgrpid_arr[it_wrk] = s_mx[ll_i].workgroupid
  1564. ll_wkp_wageid[it_wrk] = s_mx[ll_i].wageid
  1565. ELSEIF s_mx[ll_i].workgroupid > 0 And s_mx[ll_i].wagemode = 17 THEN //工作中心产品日分配
  1566. FOR ll_j = 1 To it_wrk_day
  1567. IF ll_wrkgrpid_day[ll_j] = s_mx[ll_i].workgroupid And ll_day_wageid[ll_j] = s_mx[ll_i].wageid THEN
  1568. GOTO _next
  1569. END IF
  1570. NEXT
  1571. it_wrk_day++
  1572. ll_wrkgrpid_day[it_wrk_day] = s_mx[ll_i].workgroupid
  1573. ll_day_wageid[it_wrk_day] = s_mx[ll_i].wageid
  1574. END IF
  1575. _next:
  1576. NEXT
  1577. IF it_emp = 0 And it_wrk = 0 And it_wrk_day = 0 THEN
  1578. rslt = 1
  1579. GOTO ext
  1580. END IF
  1581. IF it_emp > 0 THEN //个人计件
  1582. FOR ll_i = 1 To it_emp
  1583. IF uo_ware.newbegin(scid,arg_msg) = 0 THEN
  1584. rslt = 0
  1585. GOTO ext
  1586. END IF
  1587. uo_ware.billdate = finishdate
  1588. uo_ware.wrkGrpid = ll_empid_arr[ll_i]
  1589. uo_ware.rep = opemp
  1590. uo_ware.relcode = finishcode
  1591. uo_ware.dscrp = '工序完工单自动生成'
  1592. uo_ware.wagemth = wagemth
  1593. uo_ware.wageid = ll_empid_wageid[ll_i]
  1594. uo_ware.billtype = 1
  1595. uo_ware.relid = finishid
  1596. ll_mxbt_mx = 0
  1597. FOR ll_j = 1 To it_mxbt
  1598. IF ll_empid_arr[ll_i] = s_mx[ll_j].empid And ll_empid_wageid[ll_i] = s_mx[ll_j].wageid THEN
  1599. SELECT mtrlid,status,woodcode,pcode,orderid,scid
  1600. INTO :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode,:ll_orderid,:ll_scid
  1601. FROM u_sc_task
  1602. Where taskid = :s_mx[ll_j].taskid;
  1603. IF sqlca.SQLCode <> 0 THEN
  1604. rslt = 0
  1605. arg_msg = '查询派工单资料失败'
  1606. GOTO ext
  1607. END IF
  1608. SELECT wpcode INTO :ls_wpcode
  1609. FROM u_order_ml
  1610. WHERE scid = :ll_scid
  1611. And orderid = :ll_orderid;
  1612. IF sqlca.SQLCode <> 0 THEN
  1613. rslt = 0
  1614. arg_msg = '查询相关指令单工价表号失败'+sqlca.SQLErrText
  1615. GOTO ext
  1616. END IF
  1617. FOR ll_k = 1 To ll_mxbt_mx
  1618. IF ll_orderid_arr[ll_k] = ll_orderid And &
  1619. ls_procode_arr[ll_k] = s_mx[ll_j].procode And &
  1620. ls_proname_arr[ll_k] = s_mx[ll_j].proname And &
  1621. ld_workprice_arr[ll_k] = s_mx[ll_j].workprice THEN
  1622. ld_comqty_arr[ll_k] = ld_comqty_arr[ll_k] + s_mx[ll_j].comqty
  1623. GOTO _next_mx
  1624. END IF
  1625. NEXT
  1626. ll_mxbt_mx++
  1627. ll_mtrlid_arr[ll_mxbt_mx] = ll_mtrlid
  1628. ls_procode_arr[ll_mxbt_mx] = s_mx[ll_j].procode
  1629. ls_proname_arr[ll_mxbt_mx] = s_mx[ll_j].proname
  1630. ld_comqty_arr[ll_mxbt_mx] = s_mx[ll_j].comqty
  1631. ld_workprice_arr[ll_mxbt_mx] = s_mx[ll_j].workprice
  1632. ls_mxdscrp_arr[ll_mxbt_mx] = s_mx[ll_j].mxdscrp
  1633. ls_status_arr[ll_mxbt_mx] = ls_status
  1634. ls_woodcode_arr[ll_mxbt_mx] = ls_woodcode
  1635. ls_pcode_arr[ll_mxbt_mx] = ls_pcode
  1636. ll_orderid_arr[ll_mxbt_mx] = ll_orderid
  1637. ls_wpcode_arr[ll_mxbt_mx] = ls_wpcode
  1638. END IF
  1639. _next_mx:
  1640. NEXT
  1641. FOR ll_l = 1 To ll_mxbt_mx
  1642. IF uo_ware.acceptmx(ll_mtrlid_arr[ll_l],&
  1643. ls_procode_arr[ll_l],&
  1644. ls_proname_arr[ll_l],&
  1645. ld_comqty_arr[ll_l],&
  1646. ld_workprice_arr[ll_l],&
  1647. ls_mxdscrp_arr[ll_l],&
  1648. arg_msg,&
  1649. ll_l,&
  1650. ls_status_arr[ll_l],&
  1651. ls_woodcode_arr[ll_l],&
  1652. ls_pcode_arr[ll_l],&
  1653. '',&
  1654. ll_orderid_arr[ll_l],'','',0,0,&
  1655. ls_wpcode_arr[ll_l]) = 0 THEN
  1656. rslt = 0
  1657. GOTO ext
  1658. END IF
  1659. NEXT
  1660. IF uo_ware.Save(arg_msg,False) = 0 THEN
  1661. rslt = 0
  1662. GOTO ext
  1663. END IF
  1664. IF arg_ifaudit = 1 THEN
  1665. IF uo_ware.affirm(uo_ware.billid,arg_msg,False) = 0 THEN
  1666. arg_msg = '确认个人产品计件单失败,'+arg_msg
  1667. rslt = 0
  1668. GOTO ext
  1669. END IF
  1670. IF uo_ware.auditmx_1(uo_ware.billid,arg_msg,False) = 0 THEN
  1671. arg_msg = '审核个人产品计件单失败,'+arg_msg
  1672. rslt = 0
  1673. GOTO ext
  1674. END IF
  1675. END IF
  1676. NEXT
  1677. END IF
  1678. IF it_wrk > 0 THEN //工作中心产品月分配
  1679. FOR ll_i = 1 To it_wrk
  1680. IF uo_ware.newbegin(scid,arg_msg) = 0 THEN
  1681. rslt = 0
  1682. GOTO ext
  1683. END IF
  1684. uo_ware.billdate = finishdate
  1685. uo_ware.wrkGrpid = ll_wrkgrpid_arr[ll_i]
  1686. uo_ware.rep = opemp
  1687. uo_ware.relcode = finishcode
  1688. uo_ware.dscrp = '工序完工单自动生成'
  1689. uo_ware.wagemth = wagemth
  1690. uo_ware.wageid = ll_wkp_wageid[ll_i]
  1691. uo_ware.billtype = 0
  1692. uo_ware.relid = finishid
  1693. uo_ware.wkpid = ll_wkpid
  1694. ll_mxbt_mx = 0
  1695. FOR ll_j = 1 To it_mxbt
  1696. IF ll_wrkgrpid_arr[ll_i] = s_mx[ll_j].workgroupid And ll_wkp_wageid[ll_i] = s_mx[ll_j].wageid And &
  1697. s_mx[ll_j].empid = 0 THEN
  1698. SELECT mtrlid,status,woodcode,pcode,orderid,scid
  1699. INTO :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode,:ll_orderid,:ll_scid
  1700. FROM u_sc_task
  1701. Where taskid = :s_mx[ll_j].taskid;
  1702. IF sqlca.SQLCode <> 0 THEN
  1703. rslt = 0
  1704. arg_msg = '查询派工单资料失败'
  1705. GOTO ext
  1706. END IF
  1707. SELECT wpcode INTO :ls_wpcode
  1708. FROM u_order_ml
  1709. WHERE scid = :ll_scid
  1710. And orderid = :ll_orderid;
  1711. IF sqlca.SQLCode <> 0 THEN
  1712. rslt = 0
  1713. arg_msg = '查询相关指令单工价表号失败'+sqlca.SQLErrText
  1714. GOTO ext
  1715. END IF
  1716. FOR ll_k = 1 To ll_mxbt_mx
  1717. IF ll_orderid_arr[ll_k] = ll_orderid And &
  1718. ls_procode_arr[ll_k] = s_mx[ll_j].procode And &
  1719. ls_proname_arr[ll_k] = s_mx[ll_j].proname And &
  1720. ld_workprice_arr[ll_k] = s_mx[ll_j].workprice THEN
  1721. ld_comqty_arr[ll_k] = ld_comqty_arr[ll_k] + s_mx[ll_j].comqty
  1722. GOTO _next_mx_wrk
  1723. END IF
  1724. NEXT
  1725. ll_mxbt_mx++
  1726. ll_mtrlid_arr[ll_mxbt_mx] = ll_mtrlid
  1727. ls_procode_arr[ll_mxbt_mx] = s_mx[ll_j].procode
  1728. ls_proname_arr[ll_mxbt_mx] = s_mx[ll_j].proname
  1729. ld_comqty_arr[ll_mxbt_mx] = s_mx[ll_j].comqty
  1730. ld_workprice_arr[ll_mxbt_mx] = s_mx[ll_j].workprice
  1731. ls_mxdscrp_arr[ll_mxbt_mx] = s_mx[ll_j].mxdscrp
  1732. ls_status_arr[ll_mxbt_mx] = ls_status
  1733. ls_woodcode_arr[ll_mxbt_mx] = ls_woodcode
  1734. ls_pcode_arr[ll_mxbt_mx] = ls_pcode
  1735. ll_orderid_arr[ll_mxbt_mx] = ll_orderid
  1736. ls_wpcode_arr[ll_mxbt_mx] = ls_wpcode
  1737. END IF
  1738. _next_mx_wrk:
  1739. NEXT
  1740. FOR ll_l = 1 To ll_mxbt_mx
  1741. IF uo_ware.acceptmx(ll_mtrlid_arr[ll_l],&
  1742. ls_procode_arr[ll_l],&
  1743. ls_proname_arr[ll_l],&
  1744. ld_comqty_arr[ll_l],&
  1745. ld_workprice_arr[ll_l],&
  1746. ls_mxdscrp_arr[ll_l],&
  1747. arg_msg,&
  1748. ll_l,&
  1749. ls_status_arr[ll_l],&
  1750. ls_woodcode_arr[ll_l],&
  1751. ls_pcode_arr[ll_l],&
  1752. '',&
  1753. ll_orderid_arr[ll_l],'','',0,0,&
  1754. ls_wpcode_arr[ll_l]) = 0 THEN
  1755. rslt = 0
  1756. GOTO ext
  1757. END IF
  1758. NEXT
  1759. IF uo_ware.Save(arg_msg,False) = 0 THEN
  1760. rslt = 0
  1761. GOTO ext
  1762. END IF
  1763. IF arg_ifaudit = 1 THEN
  1764. IF uo_ware.affirm(uo_ware.billid,arg_msg,False) = 0 THEN
  1765. arg_msg = '确认工作中心产品月分配失败,'+arg_msg
  1766. rslt = 0
  1767. GOTO ext
  1768. END IF
  1769. IF uo_ware.auditmx_1(uo_ware.billid,arg_msg,False) = 0 THEN
  1770. arg_msg = '审核工作中心产品月分配失败,'+arg_msg
  1771. rslt = 0
  1772. GOTO ext
  1773. END IF
  1774. END IF
  1775. NEXT
  1776. END IF
  1777. IF it_wrk_day > 0 THEN //工作中心产品日分配
  1778. FOR ll_i = 1 To it_wrk_day
  1779. IF uo_ware_wrk.newbegin(scid,arg_msg) = 0 THEN
  1780. rslt = 0
  1781. GOTO ext
  1782. END IF
  1783. uo_ware_wrk.billdate = finishdate
  1784. uo_ware_wrk.wrkGrpid = ll_wrkgrpid_day[ll_i]
  1785. uo_ware_wrk.rep = opemp
  1786. uo_ware_wrk.relcode = finishcode
  1787. uo_ware_wrk.dscrp = '工序完工单自动生成'
  1788. uo_ware_wrk.wagemth = wagemth
  1789. uo_ware_wrk.wageid = ll_day_wageid[ll_i]
  1790. uo_ware_wrk.billtype = 0
  1791. uo_ware_wrk.relid = finishid
  1792. uo_ware_wrk.wkpid = ll_wkpid
  1793. ld_wageamt_sm = 0
  1794. //处理dw_child, 取当前工作中心,工资项目的明细,按指令/工序汇总
  1795. ll_mxbt_mx = 0
  1796. FOR ll_j = 1 To it_mxbt
  1797. IF ll_wrkgrpid_day[ll_i] = s_mx[ll_j].workgroupid And ll_day_wageid[ll_i] = s_mx[ll_j].wageid THEN
  1798. SELECT mtrlid,status,woodcode,pcode,orderid,scid
  1799. INTO :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode,:ll_orderid,:ll_scid
  1800. FROM u_sc_task
  1801. Where taskid = :s_mx[ll_j].taskid;
  1802. IF sqlca.SQLCode <> 0 THEN
  1803. rslt = 0
  1804. arg_msg = '查询派工单资料失败'
  1805. GOTO ext
  1806. END IF
  1807. SELECT wpcode INTO :ls_wpcode
  1808. FROM u_order_ml
  1809. WHERE scid = :ll_scid
  1810. And orderid = :ll_orderid;
  1811. IF sqlca.SQLCode <> 0 THEN
  1812. rslt = 0
  1813. arg_msg = '查询相关指令单工价表号失败'+sqlca.SQLErrText
  1814. GOTO ext
  1815. END IF
  1816. FOR ll_k = 1 To ll_mxbt_mx
  1817. IF ll_orderid_arr[ll_k] = ll_orderid And &
  1818. ls_procode_arr[ll_k] = s_mx[ll_j].procode And &
  1819. ls_proname_arr[ll_k] = s_mx[ll_j].proname And &
  1820. ld_workprice_arr[ll_k] = s_mx[ll_j].workprice THEN
  1821. ld_comqty_arr[ll_k] = ld_comqty_arr[ll_k] + s_mx[ll_j].comqty
  1822. GOTO _next_mx_day
  1823. END IF
  1824. NEXT
  1825. ll_mxbt_mx++
  1826. ll_mtrlid_arr[ll_mxbt_mx] = ll_mtrlid
  1827. ls_procode_arr[ll_mxbt_mx] = s_mx[ll_j].procode
  1828. ls_proname_arr[ll_mxbt_mx] = s_mx[ll_j].proname
  1829. ld_comqty_arr[ll_mxbt_mx] = s_mx[ll_j].comqty
  1830. ld_workprice_arr[ll_mxbt_mx] = s_mx[ll_j].workprice
  1831. ls_mxdscrp_arr[ll_mxbt_mx] = s_mx[ll_j].mxdscrp
  1832. ls_status_arr[ll_mxbt_mx] = ls_status
  1833. ls_woodcode_arr[ll_mxbt_mx] = ls_woodcode
  1834. ls_pcode_arr[ll_mxbt_mx] = ls_pcode
  1835. ll_orderid_arr[ll_mxbt_mx] = ll_orderid
  1836. ls_wpcode_arr[ll_mxbt_mx] = ls_wpcode
  1837. END IF
  1838. _next_mx_day:
  1839. NEXT
  1840. FOR ll_j = 1 To ll_mxbt_mx
  1841. IF uo_ware_wrk.acceptmx(ll_mtrlid_arr[ll_j],&
  1842. ls_procode_arr[ll_j],&
  1843. ls_proname_arr[ll_j],&
  1844. ld_comqty_arr[ll_j],&
  1845. ld_workprice_arr[ll_j],&
  1846. '',&
  1847. arg_msg,&
  1848. ll_j,&
  1849. ls_status_arr[ll_j],&
  1850. ls_woodcode_arr[ll_j],&
  1851. ls_pcode_arr[ll_j],&
  1852. ll_orderid_arr[ll_j],'','',&
  1853. ls_wpcode_arr[ll_j]) = 0 THEN
  1854. rslt = 0
  1855. GOTO ext
  1856. END IF
  1857. ld_wageamt_sm = ld_wageamt_sm + ld_comqty_arr[ll_j] * ld_workprice_arr[ll_j]
  1858. NEXT
  1859. uo_ware_wrk.relempstr = ''
  1860. //处理empid
  1861. IF sys_option_finish_taskwork_emp = 0 THEN // 工作中心派工的工序完工单计件审时生成计件单员工明细模式
  1862. //按员工平均分配
  1863. ll_rowcnt = ds_workgroupmx.Retrieve(ll_wrkgrpid_day[ll_i])
  1864. IF ll_rowcnt = 0 THEN
  1865. lde_workhours = 1
  1866. ELSE
  1867. lde_workhours = 1.0 / ll_rowcnt
  1868. END IF
  1869. FOR ll_k = 1 To ds_workgroupmx.RowCount() //人员列表
  1870. IF uo_ware_wrk.acceptmx_emp(0,&
  1871. ds_workgroupmx.Object.u_rs_empinfo_empid[ll_k],&
  1872. ds_workgroupmx.Object.u_rs_empinfo_empname[ll_k],&
  1873. lde_workhours,0,0,&
  1874. 0,&
  1875. ld_wageamt_sm / ll_rowcnt ,&
  1876. '',&
  1877. arg_msg,&
  1878. ll_k) = 0 THEN
  1879. rslt = 0
  1880. GOTO ext
  1881. END IF
  1882. NEXT
  1883. ELSE // sys_option_finish_taskwork_emp = 1
  1884. lde_wageamt_sum = ld_wageamt_sm //整张单的总金额
  1885. ll_mxbt_mx_ = 0
  1886. ll_empid_arr_ = ll_empid_arr_null
  1887. ls_empname_arr_ = ls_empname_arr_null
  1888. lde_wageamt_arr_ = lde_wageamt_arr_null
  1889. FOR ll_j = 1 To it_mxbt
  1890. IF ll_wrkgrpid_day[ll_i] = s_mx[ll_j].workgroupid &
  1891. And ll_day_wageid[ll_i] = s_mx[ll_j].wageid THEN
  1892. ll_rowcnt = ds_workgroupmx.Retrieve(s_mx[ll_j].taskid)
  1893. IF ll_rowcnt <= 0 THEN
  1894. arg_msg = "未设置工序派工单工作中心人员"
  1895. rslt = 0
  1896. GOTO ext
  1897. END IF
  1898. lde_assignamt_sum = ds_workgroupmx.Object.assignamt_sum[1] //总比例
  1899. IF lde_assignamt_sum <= 0 THEN
  1900. arg_msg = "工序派工单工作中心人员总分配比例不能为0"
  1901. rslt = 0
  1902. GOTO ext
  1903. END IF
  1904. ld_wageamt_sm = s_mx[ll_j].comqty * s_mx[ll_j].workprice //一条派工单的金额
  1905. FOR ll_k = 1 To ds_workgroupmx.RowCount() //人员列表
  1906. lde_assignamt = ds_workgroupmx.Object.assignamt[ll_k] //个人分配比例
  1907. ld_wageamt = (lde_assignamt / lde_assignamt_sum) * ld_wageamt_sm //当前员工的金额
  1908. FOR ll_l = 1 To ll_mxbt_mx_
  1909. IF ds_workgroupmx.Object.u_rs_empinfo_empid[ll_k] = ll_empid_arr_[ll_l] THEN
  1910. lde_wageamt_arr_[ll_l] += ld_wageamt
  1911. GOTO _next_mx_
  1912. END IF
  1913. NEXT
  1914. ll_mxbt_mx_++
  1915. ll_empid_arr_[ll_mxbt_mx_] = ds_workgroupmx.Object.u_rs_empinfo_empid[ll_k]
  1916. ls_empname_arr_[ll_mxbt_mx_] = ds_workgroupmx.Object.u_rs_empinfo_empname[ll_k]
  1917. lde_wageamt_arr_[ll_mxbt_mx_] = ld_wageamt
  1918. IF it_mxbt = 1 THEN //如果只有一条派工单,不改变比例"数值"
  1919. lde_workhours_arr_[ll_mxbt_mx_] = lde_assignamt
  1920. END IF
  1921. _next_mx_:
  1922. NEXT
  1923. END IF
  1924. NEXT
  1925. FOR ll_k = 1 To ll_mxbt_mx_ //人员列表
  1926. IF it_mxbt = 1 THEN
  1927. lde_workhours = lde_workhours_arr_[ll_k]
  1928. ELSE
  1929. IF lde_wageamt_sum = 0 THEN
  1930. lde_workhours = 1
  1931. ELSE
  1932. lde_workhours = lde_wageamt_arr_[ll_k] / lde_wageamt_sum
  1933. END IF
  1934. END IF
  1935. IF uo_ware_wrk.acceptmx_emp(0,&
  1936. ll_empid_arr_[ll_k],&
  1937. ls_empname_arr_[ll_k],&
  1938. lde_workhours,0,0,&
  1939. 0,&
  1940. lde_wageamt_arr_[ll_k] ,&
  1941. '',&
  1942. arg_msg,&
  1943. ll_k) = 0 THEN
  1944. rslt = 0
  1945. GOTO ext
  1946. END IF
  1947. NEXT
  1948. END IF
  1949. IF uo_ware_wrk.Save(arg_msg,False) = 0 THEN
  1950. rslt = 0
  1951. GOTO ext
  1952. END IF
  1953. IF arg_ifaudit = 1 THEN
  1954. IF uo_ware_wrk.affirm(uo_ware_wrk.billid,arg_msg,False) = 0 THEN
  1955. arg_msg = '确认工作中心日分配计件单失败,'+arg_msg
  1956. rslt = 0
  1957. GOTO ext
  1958. END IF
  1959. IF uo_ware_wrk.auditmx(uo_ware_wrk.billid,arg_msg,False) = 0 THEN
  1960. arg_msg = '审核工作中心日分配计件单失败,'+arg_msg
  1961. rslt = 0
  1962. GOTO ext
  1963. END IF
  1964. END IF
  1965. NEXT
  1966. END IF
  1967. ext:
  1968. Destroy uo_ware
  1969. Destroy uo_ware_wrk
  1970. Destroy ds_workgroupmx
  1971. IF rslt = 0 THEN
  1972. ROLLBACK;
  1973. END IF
  1974. RETURN rslt
  1975. end function
  1976. public function integer thrauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit, integer arg_ifaudit);//自制:计件审, 外协:财审
  1977. Long rslt = 1 ,i
  1978. Long ll_taskid , ll_flag
  1979. String ls_taskcode
  1980. IF arg_finishid = 0 THEN
  1981. rslt = 0
  1982. arg_msg = "没有审核对象"
  1983. GOTO ext
  1984. END IF
  1985. IF getinfo(arg_finishid,arg_msg) = 0 THEN
  1986. rslt = 0
  1987. GOTO ext
  1988. END IF
  1989. IF secflag <> 1 THEN
  1990. rslt = 0
  1991. arg_msg = "完工单只有在已经仓库审核状态才可以执行计件审核"
  1992. GOTO ext
  1993. END IF
  1994. IF thrflag <> 0 THEN
  1995. rslt = 0
  1996. arg_msg = "完工单只有在待计件审核状态才可以执行计件审核"
  1997. GOTO ext
  1998. END IF
  1999. UPDATE u_finish
  2000. SET thrauditingrep = :publ_operator,
  2001. thrauditingdate = getdate(),
  2002. thrflag = 1
  2003. WHERE finishid = :arg_finishid
  2004. AND secflag = 1
  2005. And thrflag = 0;
  2006. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  2007. rslt = 0
  2008. arg_msg = "完工单计件审批操作失败"+"~n"+sqlca.SQLErrText
  2009. GOTO ext
  2010. END IF
  2011. IF billtype = 0 THEN
  2012. IF p_create_taskwork(s_finish_mx,arg_msg,arg_ifaudit) = 0 THEN
  2013. arg_msg = '生成计件单失败,'+arg_msg
  2014. rslt = 0
  2015. GOTO ext
  2016. END IF
  2017. ELSE
  2018. IF p_create_mustpay(s_finish_mx,arg_msg) = 0 THEN
  2019. arg_msg = '生成应付帐失败,'+arg_msg
  2020. rslt = 0
  2021. GOTO ext
  2022. END IF
  2023. END IF
  2024. thrflag = 1
  2025. ext:
  2026. IF rslt = 0 THEN
  2027. ROLLBACK;
  2028. ELSEIF rslt = 1 And arg_ifcommit THEN
  2029. COMMIT;
  2030. END IF
  2031. RETURN rslt
  2032. end function
  2033. public function integer p_del_mustpay (s_finish_mx s_mx[], ref string arg_msg);Int rslt = 1
  2034. Long i
  2035. Long ll_moneyid_native
  2036. Decimal jgsum_amt
  2037. Long ll_payid
  2038. string ls_unit
  2039. uo_mustpay uo_pay
  2040. uo_pay = Create uo_mustpay
  2041. uo_spt_price uo_sptprice
  2042. uo_sptprice = Create uo_spt_price
  2043. SELECT moneyid INTO :ll_moneyid_native
  2044. FROM cw_currency
  2045. Where native = 1;
  2046. IF sqlca.SQLCode <> 0 THEN
  2047. arg_msg = '查询本位币资料失败'
  2048. rslt = 0
  2049. GOTO ext
  2050. END IF
  2051. FOR i = 1 To it_mxbt
  2052. jgsum_amt += Round(s_mx[i].comqty * s_mx[i].workprice, 2)
  2053. SELECT unit
  2054. INTO :ls_unit
  2055. FROM u_mtrldef
  2056. Where mtrlid = :s_mx[i].mtrlid;
  2057. IF sqlca.SQLCode <> 0 THEN
  2058. arg_msg = "查询物料资料失败,"+sqlca.SQLErrText
  2059. rslt = 0
  2060. GOTO ext
  2061. END IF
  2062. IF uo_sptprice.uof_del_sptprice_auto(wrkGrpid,finishid,s_mx[i].printid,s_mx[i].mtrlid,s_mx[i].status,s_mx[i].woodcode,s_mx[i].pcode,s_mx[i].proname,&
  2063. ls_unit,ll_moneyid_native,False,arg_msg) = 0 THEN
  2064. arg_msg = '更新行:'+String(i)+','+arg_msg
  2065. rslt = 0
  2066. GOTO ext
  2067. END IF
  2068. NEXT
  2069. IF jgsum_amt <> 0 THEN
  2070. SELECT payid
  2071. INTO :ll_payid
  2072. FROM u_bmstpay
  2073. WHERE scid = :scid
  2074. AND sptid = :wrkGrpid
  2075. AND billcode = :finishcode
  2076. And inwareid = :finishid;
  2077. IF sqlca.SQLCode <> 0 THEN
  2078. arg_msg = '查询应付账资料失败,'+sqlca.SQLErrText
  2079. rslt = 0
  2080. GOTO ext
  2081. END IF
  2082. IF uo_pay.del_payrec(scid,1,ll_payid,wrkGrpid,arg_msg,False) = 0 THEN
  2083. rslt = 0
  2084. GOTO ext
  2085. END IF
  2086. END IF
  2087. ext:
  2088. Destroy uo_pay
  2089. Destroy uo_sptprice
  2090. IF rslt = 0 THEN
  2091. ROLLBACK;
  2092. END IF
  2093. RETURN rslt
  2094. end function
  2095. public function integer p_create_mustpay (s_finish_mx s_mx[], ref string arg_msg);Long rslt = 1
  2096. Long i
  2097. Int li_btype
  2098. Long ll_accountsid
  2099. Long ll_moneyid_native
  2100. Long ll_dft_itemid,ll_dft_itemid_tax
  2101. Decimal ld_jgprice_notax
  2102. Decimal jgsum_amt
  2103. String ls_unit
  2104. String ls_about,ls_dscrp
  2105. Decimal ld_payamt = 0,ld_mstpayamt = 0,ld_taxamt = 0
  2106. uo_mustpay uo_pay
  2107. uo_pay = Create uo_mustpay
  2108. uo_spt_price uo_sptprice
  2109. uo_sptprice = Create uo_spt_price
  2110. SELECT btype,accountsid INTO :li_btype,:ll_accountsid
  2111. FROM cw_banktype
  2112. Where banktypeid = :wagemth Using sqlca;
  2113. IF sqlca.SQLCode <> 0 THEN
  2114. rslt = 0
  2115. arg_msg = '查询结算方式类型失败,'+ sqlca.SQLErrText
  2116. GOTO ext
  2117. END IF
  2118. SELECT moneyid INTO :ll_moneyid_native
  2119. FROM cw_currency
  2120. Where native = 1;
  2121. IF sqlca.SQLCode <> 0 THEN
  2122. arg_msg = '查询本位币资料失败'
  2123. rslt = 0
  2124. GOTO ext
  2125. END IF
  2126. Decimal lde_rebate, lde_rate
  2127. lde_rebate = 1
  2128. lde_rate = 1
  2129. jgsum_amt = 0
  2130. FOR i = 1 To it_mxbt
  2131. jgsum_amt += Round(s_mx[i].comqty * s_mx[i].workprice, 2)
  2132. SELECT unit
  2133. INTO :ls_unit
  2134. FROM u_mtrldef
  2135. Where mtrlid = :s_mx[i].mtrlid;
  2136. IF sqlca.SQLCode <> 0 THEN
  2137. arg_msg = "查询物料资料失败,"+sqlca.SQLErrText
  2138. rslt = 0
  2139. GOTO ext
  2140. END IF
  2141. ld_jgprice_notax = s_mx[i].workprice
  2142. IF uo_sptprice.uof_update_sptprice(0,wrkGrpid,s_mx[i].mtrlid,ls_unit,s_mx[i].status,s_mx[i].woodcode,s_mx[i].pcode,s_mx[i].proname,&
  2143. finishid,s_mx[i].workprice,lde_rebate,lde_rate,s_mx[i].workprice/lde_rate,ld_jgprice_notax /lde_rate , &
  2144. finishdate,finishcode,0,'外协工序完工单',s_mx[i].printid,1,ll_moneyid_native,finishdate,DateTime(9999-01-01),False,arg_msg) = 0 THEN
  2145. rslt = 0
  2146. GOTO ext
  2147. END IF
  2148. NEXT
  2149. IF jgsum_amt <> 0 THEN
  2150. ld_mstpayamt = jgsum_amt
  2151. ld_taxamt = 0
  2152. IF li_btype = 1 THEN
  2153. ld_payamt = ld_mstpayamt
  2154. ELSE
  2155. ld_payamt = 0
  2156. END IF
  2157. ls_about = finishcode + "应付款,相关号:"+relcode
  2158. SELECT itemid INTO :ll_dft_itemid
  2159. FROM u_itemdef
  2160. Where dfttype = 2 Using sqlca;
  2161. IF sqlca.SQLCode <> 0 THEN
  2162. arg_msg = '查询默认采购外协退货项目资料失败,'+sqlca.SQLErrText
  2163. rslt = 0
  2164. GOTO ext
  2165. END IF
  2166. ls_dscrp = ls_about
  2167. s_bmstpay s_pay
  2168. s_pay.scid = scid
  2169. s_pay.sptid = wrkGrpid
  2170. s_pay.paydate = finishdate
  2171. s_pay.inrep = assign_emp
  2172. s_pay.oriamt = ld_mstpayamt
  2173. s_pay.mstpayamt = ld_mstpayamt
  2174. s_pay.payamt = ld_payamt
  2175. s_pay.payamt_cn = ld_payamt
  2176. s_pay.dscrp = ls_about
  2177. s_pay.billcode = finishcode
  2178. s_pay.relcode = relcode
  2179. s_pay.banktypeid = wagemth
  2180. s_pay.viewdate = finishdate
  2181. s_pay.opemp = publ_operator
  2182. s_pay.buildtype = 1
  2183. s_pay.inwareid = finishid
  2184. s_pay.accountsid = ll_accountsid
  2185. s_pay.itemid = ll_dft_itemid
  2186. s_pay.moneyid = ll_moneyid_native
  2187. s_pay.moneyid_cn = ll_moneyid_native
  2188. IF uo_pay.add_payrec (s_pay,arg_msg,False) = 0 THEN
  2189. rslt = 0
  2190. GOTO ext
  2191. END IF
  2192. END IF
  2193. ext:
  2194. Destroy uo_pay
  2195. Destroy uo_sptprice
  2196. IF rslt = 0 THEN
  2197. ROLLBACK;
  2198. END IF
  2199. RETURN rslt
  2200. end function
  2201. public function integer mod_price (long arg_finishid, long arg_printid, decimal arg_fprice, decimal arg_jgprice, decimal arg_taxrate, decimal arg_rebate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2202. IF p_getinfo(arg_finishid,arg_msg) = 0 THEN
  2203. rslt = 0
  2204. GOTO ext
  2205. END IF
  2206. IF secflag = 0 THEN
  2207. rslt = 0
  2208. arg_msg = '单据待审核状态下不能执行修改单价功能'
  2209. GOTO ext
  2210. END IF
  2211. IF thrflag = 1 THEN
  2212. rslt = 0
  2213. arg_msg = '单据已财审,不能执行修改加工价'
  2214. GOTO ext
  2215. END IF
  2216. Decimal ld_jgprice , ld_taxrate, ld_rebate
  2217. SELECT workprice
  2218. INTO :ld_jgprice
  2219. FROM u_finishmx
  2220. WHERE finishid = :arg_finishid
  2221. AND printid = :arg_printid
  2222. Using sqlca;
  2223. IF sqlca.SQLCode <> 0 THEN
  2224. rslt = 0
  2225. arg_msg = '查询单据明细内容失败'+sqlca.SQLErrText
  2226. GOTO ext
  2227. END IF
  2228. //ld_taxrate = 0
  2229. //ld_rebate = 1
  2230. //IF arg_taxrate = -1 THEN arg_taxrate = ld_taxrate
  2231. //IF arg_rebate = -1 THEN arg_rebate = ld_rebate
  2232. IF arg_jgprice = ld_jgprice THEN //没有修改,成功返回
  2233. rslt = 1
  2234. //arg_msg = '单价或税率没有任何修改,不能保存'
  2235. GOTO ext
  2236. END IF
  2237. UPDATE u_finishmx
  2238. SET workprice = :arg_jgprice
  2239. WHERE finishid = :arg_finishid
  2240. And printid = :arg_printid Using sqlca;
  2241. IF sqlca.SQLCode <> 0 THEN
  2242. rslt = 0
  2243. arg_msg = '更新单据明细失败'+sqlca.SQLErrText
  2244. GOTO ext
  2245. END IF
  2246. ext:
  2247. IF rslt = 0 THEN
  2248. ROLLBACK Using sqlca;
  2249. ELSEIF rslt = 1 And arg_ifcommit THEN
  2250. COMMIT Using sqlca;
  2251. END IF
  2252. RETURN rslt
  2253. end function
  2254. on uo_finish.create
  2255. call super::create
  2256. TriggerEvent( this, "constructor" )
  2257. end on
  2258. on uo_finish.destroy
  2259. TriggerEvent( this, "destructor" )
  2260. call super::destroy
  2261. end on
  2262. event constructor;String str_optionvalue,arg_msg
  2263. f_get_sys_option_value('138',str_optionvalue,arg_msg)
  2264. uo_option_inware_mtrlcuscode = Long(str_optionvalue)
  2265. f_get_sys_option_value('038',str_optionvalue,arg_msg)
  2266. uo_option_taskplancode = Long(str_optionvalue)
  2267. f_get_sys_option_value('401',str_optionvalue,arg_msg)
  2268. uo_option_finish_wagemth_type = Long(str_optionvalue)
  2269. str_optionvalue = ''
  2270. f_get_sys_option_value('398',str_optionvalue,arg_msg)
  2271. uo_option_orderrqwp_auditgj = Long(str_optionvalue)
  2272. end event