uo_order_wfjg.sru 78 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013
  1. $PBExportHeader$uo_order_wfjg.sru
  2. forward
  3. global type uo_order_wfjg from nonvisualobject
  4. end type
  5. type s_order_wfjgmx from structure within uo_order_wfjg
  6. end type
  7. type s_order_wfjgmx_out from structure within uo_order_wfjg
  8. end type
  9. end forward
  10. type s_order_wfjgmx from structure
  11. long orderid
  12. string ordercode
  13. long mtrlid
  14. decimal { 4 } qty
  15. string dscrp
  16. string mtrlcode
  17. long printid
  18. decimal { 10 } price
  19. datetime requiredate
  20. datetime accomplishdate
  21. long storageid
  22. string jgdscrp
  23. integer iforder
  24. string status
  25. string woodcode
  26. string pcode
  27. long relprintid
  28. long relid2
  29. string relcode
  30. string plancode
  31. string mxdscrp2
  32. string mxdscrp3
  33. string mxdscrp4
  34. end type
  35. type s_order_wfjgmx_out from structure
  36. long orderid
  37. string ordercode
  38. long mtrlid
  39. decimal { 4 } qty
  40. string dscrp
  41. string mtrlcode
  42. long printid
  43. decimal { 10 } price
  44. long storageid
  45. integer iforder
  46. string status
  47. string woodcode
  48. string pcode
  49. string dscrp2
  50. string unit
  51. string plancode
  52. string saletaskcode
  53. end type
  54. global type uo_order_wfjg from nonvisualobject
  55. end type
  56. global uo_order_wfjg uo_order_wfjg
  57. type variables
  58. PUBLIC PROTECTEDWRITE Long scid = 0
  59. PUBLIC PROTECTEDWRITE Long wfjgid = 0
  60. PUBLIC PROTECTEDWRITE String taskcode
  61. PUBLIC PROTECTEDWRITE DateTime opdate
  62. PUBLIC PROTECTEDWRITE String operator
  63. PUBLIC PROTECTEDWRITE Int status
  64. PUBLIC PROTECTEDWRITE DateTime accomplishdate
  65. PUBLIC PROTECTEDWRITE String permit_emp
  66. Long sptid = 0
  67. String assign_emp
  68. DateTime requiredate
  69. String dscrp = '' //备注
  70. Transaction commit_transaction //数据commit事务
  71. Int billtype
  72. int banktypeid
  73. PRIVATE:
  74. s_order_wfjgmx wfjgmx[] //明细结构数组
  75. s_order_wfjgmx_out wfjgmx_out[] //明细结构数组
  76. Long it_mxbt = 0 //明细结构数组末指针
  77. Long it_mxbt_out = 0 //明细结构数组末指针
  78. Boolean it_newbegin = TRUE //新建标志
  79. Boolean it_updatebegin = FALSE//修改标志
  80. end variables
  81. forward prototypes
  82. public function integer p_reset ()
  83. public function integer p_clearmx ()
  84. public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit)
  85. public function integer newbegin (long arg_scid, ref string arg_msg)
  86. public function integer p_getinfo (long arg_scid, long arg_wfjgid, ref string arg_msg)
  87. public function integer getinfo (long arg_scid, long arg_wfjgid, ref string arg_msg)
  88. public function integer add_dscrp (long arg_scid, long arg_wfjgid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  89. public function integer cancel (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit)
  90. public function integer cancelpermit (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit)
  91. public function integer finishtask (integer arg_finishtype, long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit)
  92. public function integer firstpermit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  93. public function integer lastpermit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  94. public function integer stopbuytask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit)
  95. public function integer tempstoptask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit)
  96. public function integer trycmplbuytask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit)
  97. public function integer updatebegin (long arg_scid, long arg_wfjgid, ref string arg_msg)
  98. public function integer addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  99. public function integer checkmxmpl (long arg_scid, long arg_wfjgid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg)
  100. public function integer checkmxmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg)
  101. public function integer wasteqty (long arg_scid, decimal arg_wasteqty, long arg_wfjg_orderid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcode, ref string arg_msg, boolean arg_ifcommit)
  102. public function integer stopmx (long arg_scid, long arg_orderid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, decimal arg_stopqty, ref string arg_msg, boolean arg_commit)
  103. public function integer stopmx1 (long arg_scid, long arg_orderid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, decimal arg_stopqty, ref string arg_msg, boolean arg_commit)
  104. public function integer uf_del_outware_wfjg (boolean arg_ifcommit, ref string arg_msg)
  105. public function integer uf_create_outware_wfjg (boolean arg_ifcommit, ref string arg_msg)
  106. public function integer check_addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  107. public function integer acceptmx (long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, long arg_storageid, string arg_jgdscrp, string arg_status, string arg_woodcode, string arg_pcode, long arg_relprintid, long arg_relid2, string arg_relcode, long arg_orderid, string arg_plancode, string arg_mxdscrp2, string arg_mxdscrp3, string arg_mxdscrp4)
  108. public function integer uf_create_outware_wfjg_noaudit (boolean arg_ifcommit, ref string arg_msg)
  109. public function integer addmxcmpl (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit, long arg_printid)
  110. public function integer acceptmx_out (long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_dscrp2, string arg_plancode, string arg_saletaskcode)
  111. end prototypes
  112. public function integer p_reset ();//INT p_RESET()
  113. //清除对象及其明细
  114. scid = 0
  115. wfjgid = 0
  116. taskcode = ''
  117. operator = ''
  118. status = 0
  119. it_newbegin = FALSE
  120. it_updatebegin = FALSE
  121. //清除明细
  122. P_CLEARMX()
  123. RETURN 1
  124. end function
  125. public function integer p_clearmx ();//INT p_clearmx()
  126. //清除明细
  127. it_mxbt = 0
  128. it_mxbt_out = 0
  129. RETURN 1
  130. end function
  131. public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit);//====================================================================
  132. // Function: savesubmit()
  133. //--------------------------------------------------------------------
  134. // Description:
  135. //--------------------------------------------------------------------
  136. // Arguments:
  137. // value string arg_operator
  138. // reference string arg_msg
  139. // value boolean arg_ifcommit
  140. //--------------------------------------------------------------------
  141. // Returns: integer
  142. //--------------------------------------------------------------------
  143. // Author: yyx Date: 2004.06.23
  144. //--------------------------------------------------------------------
  145. // Modify History:
  146. //
  147. //====================================================================
  148. Integer rslt = 1,cnt = 0,i,j
  149. Long LS_NEWwfjgID
  150. DateTime server_datetime
  151. String ls_sccode
  152. IF IsNull(dscrp) THEN dscrp = ''
  153. IF IsNull(assign_emp) THEN assign_emp = ''
  154. IF IsNull(arg_operator) THEN arg_operator = ''
  155. IF Len(dscrp) > 0 THEN dscrp = ' ' + dscrp
  156. IF IsNull(billtype) THEN billtype = 0
  157. IF IsNull(banktypeid) THEN banktypeid = 0
  158. operator = arg_operator
  159. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  160. rslt = 0
  161. arG_MSG = "非编辑状态不可以提交"
  162. GOTO ext
  163. END IF
  164. IF Trim(assign_emp) = '' THEN
  165. rslt = 0
  166. arG_MSG = "请输入外加工负责人"
  167. GOTO ext
  168. END IF
  169. cnt = 0
  170. SELECT count(*) INTO :cnt
  171. FROM u_spt
  172. Where sptid = :sptid USING commit_transaction;
  173. IF commit_transaction.SQLCode <> 0 THEN
  174. rslt = 0
  175. arG_MSG = "查询操作失败,供应商资料"
  176. GOTO ext
  177. END IF
  178. IF cnt = 0 THEN
  179. rslt = 0
  180. arG_MSG = "供应商未定义或错误"
  181. GOTO ext
  182. END IF
  183. SELECT Top 1 getdate() INTO :server_datetime FROM u_user USING commit_transaction;
  184. //取得系统时间,借用操作员表
  185. IF commit_transaction.SQLCode <> 0 THEN
  186. rslt = 0
  187. arG_MSG = "查询操作失败,日期 "
  188. GOTO ext
  189. END IF
  190. IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空
  191. rslt = 0
  192. arG_MSG = "没有正确计划收货明细内容"
  193. GOTO ext
  194. END IF
  195. IF sys_option_wfjg_outmx = 1 And it_mxbt_out = 0 THEN
  196. rslt = 0
  197. arg_msg = "系统选项[079]限制,没有正确的计划发出明细内容"
  198. GOTO ext
  199. END IF
  200. cnt = 0
  201. SELECT count(*) INTO :cnt
  202. FROM u_user
  203. Where username = :operator USING commit_transaction ;
  204. IF commit_transaction.SQLCode <> 0 THEN
  205. rslt = 0
  206. arG_MSG = "查询操作失败,操作员!"
  207. GOTO ext
  208. END IF
  209. IF cnt = 0 THEN
  210. rslt = 0
  211. arG_MSG = "操作员姓名未登记或已取消!"
  212. GOTO ext
  213. END IF
  214. opdate = server_datetime //填写单据建立时间(最近修改时间)
  215. ////////////////////////////////////////////////开始区分:新建/更新 处理
  216. IF wfjgID = 0 THEN //新建
  217. LS_NEWwfjgID = f_sys_scidentity(scid,"u_order_wfjg","wfjgID",arG_MSG,TRUE, commit_transaction) //数据commit事务)
  218. IF LS_NEWwfjgID <= 0 THEN
  219. rslt = 0
  220. // ROLLBACK;
  221. GOTO ext
  222. END IF
  223. IF f_get_sccode(scid,commit_transaction,ls_sccode,arG_MSG) = 0 THEN
  224. rslt = 0
  225. GOTO ext
  226. END IF
  227. taskcode = getid(scid,ls_sccode + 'WJ',Date(server_datetime),FALSE,commit_transaction)
  228. IF taskcode = "err" THEN
  229. taskcode = ''
  230. rslt = 0
  231. arG_MSG = "无法获取外加工编号"+"~n"+commit_transaction.SQLErrText
  232. // ROLLBACK USING commit_transaction;
  233. GOTO ext
  234. END IF
  235. INSERT INTO u_order_wfjg
  236. ( scid,
  237. wfjgID,
  238. TaskCode,
  239. sptID,
  240. requiredate,
  241. Status,
  242. Opemp,
  243. Assign_Emp,
  244. Dscrp,
  245. opdate,
  246. billtype,
  247. banktypeid)
  248. VALUES ( :scid,
  249. :LS_NEWwfjgID,
  250. :TaskCode,
  251. :sptID,
  252. :requiredate,
  253. :Status,
  254. :Operator,
  255. :Assign_Emp,
  256. :Dscrp,
  257. :opdate,
  258. :billtype,
  259. :banktypeid) USING commit_transaction ;
  260. IF commit_transaction.SQLCode <> 0 THEN
  261. rslt = 0
  262. if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg') > 0 then
  263. arg_msg = '插入外加工计划操作失败,关键字分部ID、单据ID重复'
  264. else
  265. arG_MSG = "插入外加工计划操作失败"+"~n"+commit_transaction.SQLErrText
  266. end if
  267. // ROLLBACK USING commit_transaction;
  268. GOTO ext
  269. END IF
  270. //读取新taskid
  271. wfjgID = LS_NEWwfjgID
  272. ELSE //////////////////////////////////////////////////更新
  273. UPDATE u_order_wfjg
  274. SET sptID = :sptID,
  275. requiredate = :requiredate,
  276. Assign_Emp = :Assign_Emp,
  277. Dscrp = :Dscrp,
  278. moddate = getdate(),
  279. Modemp = :publ_operator,
  280. billtype = :billtype,
  281. banktypeid = :banktypeid
  282. WHERE u_order_wfjg.wfjgID = :wfjgID
  283. AND u_order_wfjg.scid = :scid USING commit_transaction;
  284. IF commit_transaction.SQLCode <> 0 THEN
  285. rslt = 0
  286. if pos(lower(commit_transaction.SQLErrText),'pk_u_order_wfjg') > 0 then
  287. arg_msg = '更新外加工计划操作失败,关键字分部ID、单据ID重复'
  288. else
  289. arG_MSG = "更新外加工计划操作失败"+"~n"+commit_transaction.SQLErrText
  290. end if
  291. // ROLLBACK USING commit_transaction;
  292. GOTO ext
  293. END IF
  294. //删除原有明细
  295. DELETE FROM u_order_wfjgMx
  296. WHERE u_order_wfjgMx.wfjgID = :wfjgID
  297. AND u_order_wfjgMx.scid = :scid USING commit_transaction;
  298. IF commit_transaction.SQLCode <> 0 THEN
  299. rslt = 0
  300. arG_MSG = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  301. // ROLLBACK USING commit_transaction;
  302. GOTO ext
  303. END IF
  304. //删除原有明细
  305. DELETE FROM u_order_wfjgMx_out
  306. WHERE u_order_wfjgMx_out.wfjgID = :wfjgID
  307. AND u_order_wfjgMx_out.scid = :scid USING commit_transaction;
  308. IF commit_transaction.SQLCode <> 0 THEN
  309. rslt = 0
  310. arG_MSG = "删除旧有明细/计划出操作失败"+"~n"+commit_transaction.SQLErrText
  311. // ROLLBACK USING commit_transaction;
  312. GOTO ext
  313. END IF
  314. END IF
  315. FOR i = 1 TO it_mxbt
  316. INSERT INTO u_order_wfjgMx
  317. ( scid,
  318. wfjgID,
  319. mtrlid,
  320. qty,
  321. price,
  322. dscrp,
  323. printid,
  324. requiredate,
  325. orderid,
  326. storageid,
  327. jgdscrp,
  328. status,
  329. woodcode,
  330. pcode,
  331. iforder,
  332. relprintid,
  333. relid2,
  334. relcode,
  335. plancode,
  336. mxdscrp2,
  337. mxdscrp3,
  338. mxdscrp4)
  339. VALUES (:scid,
  340. :wfjgID,
  341. :wfjgmx[i].mtrlid,
  342. :wfjgmx[i].QTY,
  343. :wfjgmx[i].price,
  344. :wfjgmx[i].dscrp,
  345. :wfjgmx[i].printid,
  346. :wfjgmx[i].requiredate,
  347. :wfjgmx[i].orderid,
  348. :wfjgmx[i].storageid,
  349. :wfjgmx[i].jgdscrp,
  350. :wfjgmx[i].status,
  351. :wfjgmx[i].woodcode,
  352. :wfjgmx[i].pcode,
  353. :wfjgmx[i].iforder,
  354. :wfjgmx[i].relprintid,
  355. :wfjgmx[i].relid2,
  356. :wfjgmx[i].relcode ,
  357. :wfjgmx[i].plancode,
  358. :wfjgmx[i].mxdscrp2,
  359. :wfjgmx[i].mxdscrp3,
  360. :wfjgmx[i].mxdscrp4
  361. ) USING commit_transaction;
  362. IF commit_transaction.SQLCode <> 0 THEN
  363. if it_newbegin then
  364. wfjgID = 0 //还原taskid
  365. end if
  366. rslt = 0
  367. arG_MSG = "插入收货明细操作失败"+"~n"+commit_transaction.SQLErrText
  368. GOTO ext
  369. END IF
  370. NEXT
  371. FOR j = 1 TO it_mxbt_out
  372. INSERT INTO u_order_wfjgMx_out
  373. ( scid,
  374. wfjgID,
  375. mtrlid,
  376. qty,
  377. price,
  378. dscrp,
  379. printid,
  380. orderid,
  381. storageid,
  382. status,
  383. woodcode,
  384. pcode,
  385. iforder,
  386. dscrp2,
  387. plancode,
  388. saletaskcode)
  389. VALUES (:scid,
  390. :wfjgID,
  391. :wfjgmx_out[j].mtrlid,
  392. :wfjgmx_out[j].QTY,
  393. :wfjgmx_out[j].price,
  394. :wfjgmx_out[j].dscrp,
  395. :wfjgmx_out[j].printid,
  396. :wfjgmx_out[j].orderid,
  397. :wfjgmx_out[j].storageid,
  398. :wfjgmx_out[j].status,
  399. :wfjgmx_out[j].woodcode,
  400. :wfjgmx_out[j].pcode,
  401. :wfjgmx_out[j].iforder,
  402. :wfjgmx_out[j].dscrp2,
  403. :wfjgmx_out[j].plancode,
  404. :wfjgmx_out[j].saletaskcode) USING commit_transaction;
  405. IF commit_transaction.SQLCode <> 0 THEN
  406. if it_newbegin then
  407. wfjgID = 0 //还原taskid
  408. end if
  409. rslt = 0
  410. arG_MSG = "插入发料明细操作失败"+"~n"+commit_transaction.SQLErrText
  411. GOTO ext
  412. END IF
  413. NEXT
  414. it_newbegin = FALSE
  415. it_updatebegin = FALSE
  416. ext:
  417. IF rslt = 0 then
  418. ROLLBACK USING commit_transaction;
  419. p_clearmx()
  420. elseif arg_ifcommit AND rslt = 1 THEN
  421. COMMIT USING commit_transaction;
  422. END IF
  423. arg_msg = '外协订单,'+ arg_msg
  424. Return(rslt)
  425. end function
  426. public function integer newbegin (long arg_scid, ref string arg_msg);//重置对象,设定业务类型与关联ID,准备建立新单
  427. //0 fail 1 success
  428. long rslt=1,CNT=0
  429. if arg_scid < 0 then
  430. arg_msg = '请选择分部'
  431. rslt = 0
  432. goto ext
  433. end if
  434. p_reset()
  435. it_newbegin=TRUE
  436. it_updatebegin=FALSE
  437. scid=arg_scid
  438. ext:
  439. if rslt = 0 then p_reset()
  440. arg_msg = '外协订单,'+ arg_msg
  441. return rslt
  442. end function
  443. public function integer p_getinfo (long arg_scid, long arg_wfjgid, ref string arg_msg);int rslt=1
  444. SELECT wfjgID,
  445. TaskCode,
  446. sptID,
  447. requiredate,
  448. accomplishdate,
  449. Status,
  450. Opemp,
  451. Assign_Emp,
  452. Permit_Emp,
  453. Dscrp,
  454. opdate,
  455. billtype
  456. INTO :wfjgID,
  457. :TaskCode,
  458. :sptID,
  459. :requiredate,
  460. :accomplishdate,
  461. :Status,
  462. :Operator,
  463. :Assign_Emp,
  464. :Permit_Emp,
  465. :Dscrp,
  466. :opdate,
  467. :billtype
  468. FROM u_order_wfjg
  469. WHERE u_order_wfjg.wfjgID = :arg_wfjgID
  470. and u_order_wfjg.scid = :arg_scid using commit_transaction;
  471. if commit_transaction.sqlcode<>0 then
  472. rslt=0
  473. if pos(lower(commit_transaction.SQLErrText),'more than') > 0 then
  474. arg_msg = '查询外加工计划内容失败,查询数据返回值多于一个'
  475. else
  476. ARG_MSG='查询外加工计划内容失败(错误外加工计划唯一码)'
  477. end if
  478. goto ext
  479. end if
  480. scid=arg_scid
  481. ext:
  482. return rslt
  483. end function
  484. public function integer getinfo (long arg_scid, long arg_wfjgid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0,j = 1
  485. IF arg_wfjgid <= 0 THEN
  486. rslt = 0
  487. arg_msg = '错误外加工计划唯一码'
  488. GOTO ext
  489. END IF
  490. IF p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 THEN
  491. rslt = 0
  492. GOTO ext
  493. END IF
  494. //用游标读取明细
  495. DECLARE cur_inwaermx CURSOR FOR
  496. SELECT u_order_wfjgmx.mtrlid,
  497. u_order_wfjgmx.qty,
  498. u_order_wfjgmx.price,
  499. u_order_wfjgmx.dscrp,
  500. u_mtrldef.mtrlcode,
  501. u_order_wfjgmx.printid,
  502. u_order_wfjgmx.orderid,
  503. u_order_wfjgmx.storageid,
  504. u_order_wfjgmx.jgdscrp,
  505. u_order_wfjgmx.iforder,
  506. u_order_wfjgmx.status,
  507. u_order_wfjgmx.woodcode,
  508. u_order_wfjgmx.pcode,
  509. u_order_wfjgmx.relprintid,
  510. u_order_wfjgmx.relid2,
  511. u_order_wfjgmx.relcode
  512. FROM u_order_wfjgmx,u_mtrldef
  513. WHERE u_order_wfjgmx.wfjgid = :arg_wfjgid AND
  514. u_order_wfjgmx.scid = :arg_scid AND
  515. u_order_wfjgmx.mtrlid = u_mtrldef.mtrlid USING commit_transaction;
  516. OPEN cur_inwaermx;
  517. FETCH cur_inwaermx INTO :wfjgmx[i].mtrlid,
  518. :wfjgmx[i].qty,
  519. :wfjgmx[i].price,
  520. :wfjgmx[i].dscrp,
  521. :wfjgmx[i].mtrlcode,
  522. :wfjgmx[i].printid,
  523. :wfjgmx[i].orderid,
  524. :wfjgmx[i].storageid,
  525. :wfjgmx[i].jgdscrp,
  526. :wfjgmx[i].iforder,
  527. :wfjgmx[i].status,
  528. :wfjgmx[i].woodcode,
  529. :wfjgmx[i].pcode,
  530. :wfjgmx[i].relprintid,
  531. :wfjgmx[i].relid2,
  532. :wfjgmx[i].relcode;
  533. DO WHILE commit_transaction.SQLCode = 0
  534. i++
  535. FETCH cur_inwaermx INTO :wfjgmx[i].mtrlid,:wfjgmx[i].qty,:wfjgmx[i].price,
  536. :wfjgmx[i].dscrp,:wfjgmx[i].mtrlcode,
  537. :wfjgmx[i].printid,:wfjgmx[i].orderid,
  538. :wfjgmx[i].storageid,:wfjgmx[i].jgdscrp,:wfjgmx[i].iforder,
  539. :wfjgmx[i].status,:wfjgmx[i].woodcode,:wfjgmx[i].pcode,
  540. :wfjgmx[i].relprintid,
  541. :wfjgmx[i].relid2,
  542. :wfjgmx[i].relcode;
  543. LOOP
  544. CLOSE cur_inwaermx;
  545. //检验明细是否读入完整
  546. SELECT count(*) INTO :no_mxcheck
  547. FROM u_order_wfjgmx
  548. WHERE u_order_wfjgmx.wfjgid = :arg_wfjgid
  549. AND u_order_wfjgmx.scid = :arg_scid USING commit_transaction;
  550. IF commit_transaction.SQLCode <> 0 THEN
  551. rslt = 0
  552. IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN
  553. arg_msg = '查询外加工计划收货明细操作失败,查询数据返回值多于一个'
  554. ELSE
  555. arg_msg = "查询操作失败,外加工计划收货明细数量"
  556. END IF
  557. GOTO ext
  558. END IF
  559. IF i <> (no_mxcheck+1) THEN
  560. rslt = 0
  561. arg_msg = "查询操作失败,外加工计划明细"
  562. GOTO ext
  563. END IF
  564. it_mxbt = i - 1
  565. //
  566. //用游标读取明细
  567. DECLARE cur_inwaermx_out CURSOR FOR
  568. SELECT u_order_wfjgmx_out.mtrlid,
  569. u_order_wfjgmx_out.qty,
  570. u_order_wfjgmx_out.price,
  571. u_order_wfjgmx_out.dscrp,
  572. u_mtrldef.mtrlcode,
  573. u_order_wfjgmx_out.printid,
  574. u_order_wfjgmx_out.orderid,
  575. u_order_wfjgmx_out.storageid,
  576. u_order_wfjgmx_out.iforder,
  577. u_order_wfjgmx_out.status,
  578. u_order_wfjgmx_out.woodcode,
  579. u_order_wfjgmx_out.pcode,
  580. u_order_wfjgmx_out.dscrp2,
  581. u_mtrldef.unit
  582. FROM u_order_wfjgmx_out,u_mtrldef
  583. WHERE u_order_wfjgmx_out.wfjgid = :arg_wfjgid AND
  584. u_order_wfjgmx_out.scid = :arg_scid AND
  585. u_order_wfjgmx_out.mtrlid = u_mtrldef.mtrlid USING commit_transaction;
  586. OPEN cur_inwaermx_out;
  587. FETCH cur_inwaermx_out INTO :wfjgmx_out[j].mtrlid,
  588. :wfjgmx_out[j].qty,
  589. :wfjgmx_out[j].price,
  590. :wfjgmx_out[j].dscrp,
  591. :wfjgmx_out[j].mtrlcode,
  592. :wfjgmx_out[j].printid,
  593. :wfjgmx_out[j].orderid,
  594. :wfjgmx_out[j].storageid,
  595. :wfjgmx_out[j].iforder,
  596. :wfjgmx_out[j].status,
  597. :wfjgmx_out[j].woodcode,
  598. :wfjgmx_out[j].pcode,
  599. :wfjgmx_out[j].dscrp2,
  600. :wfjgmx_out[j].unit;
  601. DO WHILE commit_transaction.SQLCode = 0
  602. j++
  603. FETCH cur_inwaermx_out INTO :wfjgmx_out[j].mtrlid,
  604. :wfjgmx_out[j].qty,
  605. :wfjgmx_out[j].price,
  606. :wfjgmx_out[j].dscrp,
  607. :wfjgmx_out[j].mtrlcode,
  608. :wfjgmx_out[j].printid,
  609. :wfjgmx_out[j].orderid,
  610. :wfjgmx_out[j].storageid,
  611. :wfjgmx_out[j].iforder,
  612. :wfjgmx_out[j].status,
  613. :wfjgmx_out[j].woodcode,
  614. :wfjgmx_out[j].pcode,
  615. :wfjgmx_out[j].dscrp2,
  616. :wfjgmx_out[j].unit;
  617. LOOP
  618. CLOSE cur_inwaermx_out;
  619. //检验明细是否读入完整
  620. SELECT count(*) INTO :no_mxcheck
  621. FROM u_order_wfjgmx_out
  622. WHERE u_order_wfjgmx_out.wfjgid = :arg_wfjgid
  623. AND u_order_wfjgmx_out.scid = :arg_scid USING commit_transaction;
  624. IF commit_transaction.SQLCode <> 0 THEN
  625. rslt = 0
  626. IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN
  627. arg_msg = '查询外加工计划发料明细操作失败,查询数据返回值多于一个'
  628. ELSE
  629. arg_msg = "查询操作失败,外加工计划发料明细数量"
  630. END IF
  631. GOTO ext
  632. END IF
  633. IF j <> (no_mxcheck+1) THEN
  634. rslt = 0
  635. arg_msg = "查询操作失败,外加工计划明细"
  636. GOTO ext
  637. END IF
  638. it_mxbt_out = j - 1
  639. //
  640. it_newbegin = FALSE
  641. it_updatebegin = FALSE
  642. ext:
  643. IF rslt = 0 THEN p_reset()
  644. RETURN rslt
  645. end function
  646. public function integer add_dscrp (long arg_scid, long arg_wfjgid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart)
  647. //0 fail 1 SUCCESS
  648. INT rslt=1
  649. arg_newdescppart=TRIM(arg_newdescppart)
  650. IF it_updatebegin OR it_newbegin THEN
  651. rslt=0
  652. arG_MSG="编辑状态下不可用"
  653. goto ext
  654. END IF
  655. IF arg_newdescppart='' THEN
  656. rslt=0
  657. arG_MSG="要添加内容为空,操作取消"
  658. goto ext
  659. END IF
  660. if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then
  661. rslt=0
  662. goto ext
  663. end if
  664. IF status=0 THEN
  665. rslt=0
  666. arG_MSG="待审核状态下不可用"
  667. goto ext
  668. END IF
  669. UPDATE u_order_wfjg
  670. SET DSCRP = DSCRP+' '+:arg_newdescppart
  671. WHERE u_order_wfjg.wfjgid = :arg_wfjgid
  672. and u_order_wfjg.scid = :arg_scid using commit_transaction;
  673. if commit_transaction.SQLCode<>0 then
  674. rslt=0
  675. arG_MSG="因网络或其它原因导致添加外加工计划备注操作失败"+"~n"+commit_transaction.SQLErrText
  676. rollback using commit_transaction;
  677. goto ext
  678. end if
  679. DSCRP = DSCRP+' '+arg_newdescppart
  680. it_newbegin=FALSE
  681. it_updatebegin=FALSE
  682. EXT:
  683. if arg_ifcommit and rslt=1 then
  684. COMMIT using commit_transaction;
  685. end if
  686. p_reset()
  687. arg_msg = '外协订单,'+ arg_msg
  688. return (rslt)
  689. end function
  690. public function integer cancel (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);//删除未审核的订单
  691. //0 FAIL, 1 SUCCESS
  692. INT rslt=1
  693. IF arg_wfjgid<=0 THEN
  694. rslt=0
  695. ARG_MSG='错误外加工计划唯一码'
  696. goto ext
  697. end if
  698. if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then
  699. rslt=0
  700. goto ext
  701. end if
  702. IF Status<>0 THEN
  703. rslt=0
  704. arG_MSG="外加工计划已经审核,不可以删除"
  705. goto ext
  706. END IF
  707. DELETE FROM u_order_wfjg
  708. WHERE u_order_wfjg.wfjgid = :arg_wfjgid
  709. and u_order_wfjg.scid = :arg_scid using commit_transaction;
  710. if commit_transaction.sqlcode<>0 then
  711. rslt=0
  712. arG_MSG="删除外加工计划操作失败"+"~n"+commit_transaction.SQLErrText
  713. ROLLBACK using commit_transaction;
  714. goto ext
  715. end if
  716. DELETE FROM u_order_wfjgMx
  717. WHERE u_order_wfjgMx.wfjgid = :arg_wfjgid
  718. and u_order_wfjgMx.scid = :arg_scid using commit_transaction;
  719. if commit_transaction.sqlcode<>0 then
  720. rslt=0
  721. arG_MSG="删除外加工计划明细操作失败"+"~n"+commit_transaction.SQLErrText
  722. ROLLBACK using commit_transaction;
  723. goto ext
  724. end if
  725. DELETE FROM u_order_wfjgMx_out
  726. WHERE u_order_wfjgMx_out.wfjgID = :wfjgID
  727. AND u_order_wfjgMx_out.scid = :scid USING commit_transaction;
  728. IF commit_transaction.SQLCode <> 0 THEN
  729. rslt = 0
  730. arG_MSG = "删除旧有明细/计划出操作失败"+"~n"+commit_transaction.SQLErrText
  731. ROLLBACK USING commit_transaction;
  732. GOTO ext
  733. END IF
  734. it_newbegin=FALSE
  735. it_updatebegin=FALSE
  736. if arg_ifcommit and rslt =1 then
  737. COMMIT using commit_transaction;
  738. end if
  739. EXT:
  740. p_reset()
  741. arg_msg = '外协订单,'+ arg_msg
  742. return (rslt)
  743. end function
  744. public function integer cancelpermit (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  745. uo_saletask uo_sale
  746. uo_sale = CREATE uo_saletask
  747. uo_sale.commit_transaction = commit_transaction
  748. uo_order_ml_mrp uo_mrp
  749. uo_mrp = CREATE uo_order_ml_mrp
  750. IF arg_wfjgid <= 0 THEN
  751. rslt = 0
  752. ARG_MSG = '错误外加工计划唯一码'
  753. GOTO ext
  754. END IF
  755. IF getinfo(arg_scid,arg_wfjgid,ARG_MSG) = 0 THEN
  756. rslt = 0
  757. GOTO ext
  758. END IF
  759. IF Status <> 1 THEN
  760. rslt = 0
  761. ARG_MSG = "外加工计划只有在已审核状态才可以执行撤消审核,请核对"
  762. GOTO ext
  763. END IF
  764. //检查进仓单
  765. SELECT count(*)
  766. INTO :cnt
  767. FROM u_inwaremx,u_inware
  768. WHERE ( u_inware.scid = u_inwaremx.scid ) AND
  769. ( u_inware.inwareid = u_inwaremx.inwareid ) AND
  770. ( u_inware.billtype = 4) AND
  771. ( u_inwaremx.relid = :arg_wfjgid ) AND
  772. ( u_inwaremx.scid = :arg_scid) USING commit_transaction ;
  773. IF commit_transaction.SQLCode <> 0 THEN
  774. rslt = 0
  775. ARG_MSG = "因网络或其它原因导致查询外加工计划收货数量操作失败"+"~n"+commit_transaction.SQLErrText
  776. GOTO ext
  777. END IF
  778. IF cnt > 0 THEN
  779. rslt = 0
  780. ARG_MSG = "外加工计划已经有相关进仓单据,不可以撤消审核"
  781. GOTO ext
  782. END IF
  783. //检查发出单
  784. SELECT count(*)
  785. INTO :cnt
  786. FROM u_outwaremx,u_outware
  787. WHERE ( u_outware.scid = u_outwaremx.scid ) AND
  788. ( u_outware.outwareid = u_outwaremx.outwareid ) AND
  789. ( u_outware.billtype = 4) AND
  790. ( u_outwaremx.relid = :arg_wfjgid ) AND
  791. ( u_outwaremx.scid = :arg_scid) USING commit_transaction ;
  792. IF commit_transaction.SQLCode <> 0 THEN
  793. rslt = 0
  794. ARG_MSG = "因网络或其它原因导致查询外加工计划发货数量操作失败"+"~n"+commit_transaction.SQLErrText
  795. GOTO ext
  796. END IF
  797. IF cnt > 0 THEN
  798. rslt = 0
  799. ARG_MSG = "外加工计划已经有相关出仓单据,不可以撤消审核"
  800. GOTO ext
  801. END IF
  802. //检查外协收货单
  803. SELECT count(*) INTO :cnt FROM ow_wfjgmx_in_aft Where relid = :arg_wfjgid USING commit_transaction ;
  804. IF commit_transaction.SQLCode <> 0 THEN
  805. rslt = 0
  806. ARG_MSG = "因网络或其它原因导致查询外加工计划车间收货数量操作失败"+"~n"+commit_transaction.SQLErrText
  807. GOTO ext
  808. END IF
  809. IF cnt > 0 THEN
  810. rslt = 0
  811. ARG_MSG = "外加工计划已经有相关车间收货或返工单据,不可以撤消审核"
  812. GOTO ext
  813. END IF
  814. //检查外协发出单
  815. if sys_option_autocreate_outware = 0 then
  816. SELECT count(*) INTO :cnt FROM ow_wfjgmx_out Where relid = :arg_wfjgid USING commit_transaction ;
  817. else
  818. //如果使用订单自动生成发出单,则检查是否有非自动生成的发出单(原则上没有)
  819. SELECT count(*)
  820. INTO :cnt
  821. FROM ow_wfjgmx_out,ow_wfjg_out
  822. WHERE ( ow_wfjgmx_out.scid = :arg_scid )
  823. AND ( ow_wfjgmx_out.relid = :arg_wfjgid )
  824. AND (ow_wfjg_out.scid = ow_wfjgmx_out.scid)
  825. AND (ow_wfjg_out.outwareid = ow_wfjgmx_out.outwareid)
  826. And (ow_wfjg_out.relid <> :arg_wfjgid ) Using commit_transaction;
  827. end if
  828. IF commit_transaction.SQLCode <> 0 THEN
  829. rslt = 0
  830. ARG_MSG = "因网络或其它原因导致查询外加工计划车间发货数量操作失败"+"~n"+commit_transaction.SQLErrText
  831. GOTO ext
  832. END IF
  833. IF cnt > 0 THEN
  834. rslt = 0
  835. ARG_MSG = "外加工计划已经有相关车间发货或退回单据,不可以撤消审核"
  836. GOTO ext
  837. END IF
  838. //检查损耗单
  839. SELECT count(*) INTO :cnt FROM u_order_wfjg_wasteMx Where wfjg_orderid = :arg_wfjgid USING commit_transaction ;
  840. IF commit_transaction.SQLCode <> 0 THEN
  841. rslt = 0
  842. ARG_MSG = "因网络或其它原因导致查询外加工计划损耗数量操作失败"+"~n"+commit_transaction.SQLErrText
  843. GOTO ext
  844. END IF
  845. IF cnt > 0 THEN
  846. rslt = 0
  847. ARG_MSG = "外加工计划已经有相关损耗单据,不可以撤消审核"
  848. GOTO ext
  849. END IF
  850. //删除外协发出单, 系统选项控制 sys_option_autocreate_outware ;
  851. if uf_del_outware_wfjg(false, arg_msg) = 0 then
  852. rslt = 0
  853. GOTO ext
  854. end if
  855. Long i
  856. IF billtype > 0 THEN
  857. FOR i = 1 TO it_mxbt
  858. IF billtype = 1 THEN
  859. UPDATE u_SaleTaskMx
  860. SET wfjgtaskqty = wfjgtaskqty - :wfjgmx[i].qty
  861. WHERE scid = :scid AND
  862. TaskID = :wfjgmx[i].orderid AND
  863. printid = :wfjgmx[i].relprintid USING commit_transaction;
  864. IF commit_transaction.SQLCode <> 0 THEN
  865. rslt = 0
  866. ARG_MSG = "因网络或其它原因导致外加工计划最终审核操作失败"+"~n"+commit_transaction.SQLErrText
  867. GOTO ext
  868. END IF
  869. ELSEIF billtype = 2 THEN
  870. IF wfjgmx[i].orderid > 0 AND wfjgmx[i].relprintid > 0 AND wfjgmx[i].relid2 > 0 THEN
  871. IF uo_mrp.uof_add_rqmtrl_consignedqty(scid, wfjgmx[i].orderid, wfjgmx[i].relprintid, wfjgmx[i].relid2, 3, 0 - wfjgmx[i].qty, FALSE, ARG_MSG) = 0 THEN
  872. rslt = 0
  873. GOTO ext
  874. END IF
  875. END IF
  876. END IF
  877. NEXT
  878. END IF
  879. UPDATE u_order_wfjg
  880. SET Status = 0,
  881. permit_date = NULL,
  882. permit_emp = ''
  883. WHERE scid = :arg_scid
  884. AND wfjgid = :arg_wfjgid
  885. AND Status = 1
  886. USING commit_transaction ;
  887. IF commit_transaction.SQLCode <> 0 THEN
  888. rslt = 0
  889. ARG_MSG = "因网络或其它原因导致外协订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText
  890. GOTO ext
  891. ELSEIF commit_transaction.SQLNRows = 0 THEN
  892. rslt = 0
  893. ARG_MSG = "外协订单正在更新,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  894. GOTO ext
  895. END IF
  896. it_newbegin = FALSE
  897. it_updatebegin = FALSE
  898. ext:
  899. IF rslt = 0 THEN
  900. ROLLBACK USING commit_transaction;
  901. ELSEIF arg_ifcommit THEN
  902. COMMIT USING commit_transaction;
  903. END IF
  904. p_reset()
  905. DESTROY uo_sale
  906. DESTROY uo_mrp
  907. ARG_MSG = '外协订单,'+ ARG_MSG
  908. Return (rslt)
  909. end function
  910. public function integer finishtask (integer arg_finishtype, long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0
  911. datetime null_dt
  912. setnull(null_dt)
  913. IF arg_wfjgid<=0 THEN
  914. rslt=0
  915. ARG_MSG='错误外加工计划唯一码'
  916. goto ext
  917. end if
  918. if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then
  919. rslt=0
  920. goto ext
  921. end if
  922. if arg_finishtype = 5 or arg_finishtype = 6 then
  923. IF Status<>1 THEN
  924. rslt=0
  925. arG_MSG="外加工计划只有在进行状态才可以执行完成,请核对"
  926. goto ext
  927. END IF
  928. else
  929. if arg_finishtype = 1 then
  930. IF Status<>6 THEN
  931. rslt=0
  932. arG_MSG="外加工计划只有在手动完成状态下才可以执行取消手动完成,请核对"
  933. goto ext
  934. END IF
  935. end if
  936. end if
  937. if arg_finishtype = 5 or arg_finishtype = 6 then
  938. UPDATE u_order_wfjg
  939. SET status=:arg_finishtype,
  940. accomplishdate=getdate(),
  941. finishemp=:publ_operator
  942. WHERE ( u_order_wfjg.wfjgid = :arg_wfjgid )
  943. and ( u_order_wfjg.scid = :arg_scid ) using commit_transaction;
  944. if commit_transaction.sqlcode<>0 then
  945. rslt=0
  946. arG_MSG="因网络或其它原因导致完成外加工计划操作失败"+"~n"+commit_transaction.SQLErrText
  947. rollback using commit_transaction;
  948. goto ext
  949. end if
  950. else
  951. UPDATE u_order_wfjg
  952. SET status=:arg_finishtype,
  953. accomplishdate=:null_dt,
  954. finishemp=''
  955. WHERE ( u_order_wfjg.wfjgid = :arg_wfjgid )
  956. and ( u_order_wfjg.scid = :arg_scid ) using commit_transaction;
  957. if commit_transaction.sqlcode<>0 then
  958. rslt=0
  959. arG_MSG="因网络或其它原因导致取消手动完成外加工计划操作失败"+"~n"+commit_transaction.SQLErrText
  960. rollback using commit_transaction;
  961. goto ext
  962. end if
  963. end if
  964. EXT:
  965. if arg_ifcommit and rslt=1 then
  966. COMMIT using commit_transaction;
  967. end if
  968. p_reset()
  969. arg_msg = '外协订单,'+ arg_msg
  970. return (rslt)
  971. end function
  972. public function integer firstpermit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//buypermit
  973. Int rslt = 1,cnt = 0
  974. uo_saletask uo_sale
  975. uo_sale = Create uo_saletask
  976. uo_sale.commit_transaction = commit_transaction
  977. uo_order_ml_mrp uo_mrp
  978. uo_mrp = Create uo_order_ml_mrp
  979. IF arg_wfjgid <= 0 THEN
  980. rslt = 0
  981. ARG_MSG = '错误外加工计划唯一码'
  982. GOTO ext
  983. END IF
  984. IF getinfo(arg_scid,arg_wfjgid,ARG_MSG) = 0 THEN
  985. rslt = 0
  986. GOTO ext
  987. END IF
  988. IF Status <> 0 THEN
  989. rslt = 0
  990. ARG_MSG = "外加工计划已经审核,操作取消"
  991. GOTO ext
  992. END IF
  993. cnt = 0
  994. SELECT count(*) INTO :cnt
  995. FROM u_user
  996. Where username = :arg_emp Using commit_transaction;
  997. IF commit_transaction.SQLCode <> 0 THEN
  998. rslt = 0
  999. ARG_MSG = "查询操作失败,操作员!"
  1000. GOTO ext
  1001. END IF
  1002. IF cnt = 0 THEN
  1003. rslt = 0
  1004. ARG_MSG = "操作员姓名未登记或已取消!"
  1005. GOTO ext
  1006. END IF
  1007. Long i
  1008. IF billtype > 0 THEN
  1009. FOR i = 1 To it_mxbt
  1010. IF billtype = 1 THEN
  1011. UPDATE u_SaleTaskMx
  1012. SET wfjgtaskqty = wfjgtaskqty + :wfjgmx[i].qty
  1013. WHERE scid = :scid AND
  1014. TaskID = :wfjgmx[i].orderid AND
  1015. printid = :wfjgmx[i].relprintid Using commit_transaction;
  1016. IF commit_transaction.SQLCode <> 0 THEN
  1017. rslt = 0
  1018. ARG_MSG = "因网络或其它原因导致外加工计划最终审核操作失败"+"~n"+commit_transaction.SQLErrText
  1019. GOTO ext
  1020. END IF
  1021. ELSEIF billtype = 2 THEN
  1022. IF wfjgmx[i].orderid > 0 And wfjgmx[i].relprintid > 0 And wfjgmx[i].relid2 > 0 THEN
  1023. IF uo_mrp.uof_add_rqmtrl_consignedqty(scid, wfjgmx[i].orderid, wfjgmx[i].relprintid, wfjgmx[i].relid2, 3, wfjgmx[i].qty, False, ARG_MSG) = 0 THEN
  1024. rslt = 0
  1025. GOTO ext
  1026. END IF
  1027. END IF
  1028. END IF
  1029. NEXT
  1030. END IF
  1031. UPDATE u_order_wfjg
  1032. SET Permit_Emp = :arg_emp,
  1033. Permit_date = getdate(),
  1034. Status = 1
  1035. WHERE scid = :arg_scid
  1036. AND wfjgid = :arg_wfjgid
  1037. AND Status = 0
  1038. Using commit_transaction;
  1039. IF commit_transaction.SQLCode <> 0 THEN
  1040. rslt = 0
  1041. ARG_MSG = "因网络或其它原因导致外协订单最终审核操作失败"+"~n"+commit_transaction.SQLErrText
  1042. GOTO ext
  1043. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1044. rslt = 0
  1045. ARG_MSG = "外协订单正在更新,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1046. GOTO ext
  1047. END IF
  1048. //自动生产外协发出单, 系统选项控制 sys_option_autocreate_outware ;
  1049. IF sys_option_autocreate_outware = 1 THEN //自动生成 且 审核
  1050. IF uf_create_outware_wfjg(False, ARG_MSG) = 0 THEN
  1051. rslt = 0
  1052. GOTO ext
  1053. END IF
  1054. ELSEIF sys_option_autocreate_outware = 2 THEN //自动生成 不审核
  1055. IF uf_create_outware_wfjg_noaudit(False, ARG_MSG) = 0 THEN
  1056. rslt = 0
  1057. GOTO ext
  1058. END IF
  1059. END IF
  1060. it_newbegin = False
  1061. it_updatebegin = False
  1062. ext:
  1063. IF rslt = 0 THEN
  1064. ROLLBACK Using commit_transaction;
  1065. ELSEIF arg_ifcommit THEN
  1066. COMMIT Using commit_transaction;
  1067. END IF
  1068. p_reset()
  1069. Destroy uo_sale
  1070. Destroy uo_mrp
  1071. ARG_MSG = '外协订单,'+ ARG_MSG
  1072. Return (rslt)
  1073. end function
  1074. public function integer lastpermit (long arg_scid, long arg_wfjgid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0
  1075. IF arg_wfjgid<=0 THEN
  1076. rslt=0
  1077. ARG_MSG='错误外加工计划唯一码'
  1078. goto ext
  1079. end if
  1080. if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then
  1081. rslt=0
  1082. goto ext
  1083. end if
  1084. IF Status<>4 THEN
  1085. rslt=0
  1086. arG_MSG="外加工计划只有在已采购审核状态才可以执行最终审核,请核对"
  1087. goto ext
  1088. END IF
  1089. cnt=0
  1090. SELECT count(*) INTO :cnt
  1091. FROM u_user
  1092. WHERE username=:arg_emp ;
  1093. if sqlca.sqlcode<>0 then
  1094. rslt=0
  1095. arG_MSG="查询操作失败,操作员!"
  1096. goto ext
  1097. end if
  1098. if cnt=0 then
  1099. rslt=0
  1100. arG_MSG="操作员姓名未登记或已取消!"
  1101. goto ext
  1102. end if
  1103. UPDATE u_order_wfjg
  1104. SET Permit_emp = :arg_emp,
  1105. Status = 1
  1106. WHERE wfjgid = :arg_wfjgid
  1107. and scid = :arg_scid ;
  1108. if sqlca.sqlcode<>0 then
  1109. rslt=0
  1110. arG_MSG="因网络或其它原因导致外加工计划最终审核操作失败"+"~n"+SQLCA.SQLErrText
  1111. goto ext
  1112. end if
  1113. it_newbegin=FALSE
  1114. it_updatebegin=FALSE
  1115. EXT:
  1116. if rslt=0 then
  1117. rollback;
  1118. elseif arg_ifcommit then
  1119. COMMIT;
  1120. end if
  1121. p_reset()
  1122. arg_msg = '外协订单,'+ arg_msg
  1123. return (rslt)
  1124. end function
  1125. public function integer stopbuytask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0
  1126. IF arg_wfjgid<=0 THEN
  1127. rslt=0
  1128. ARG_MSG='错误外加工计划唯一码'
  1129. goto ext
  1130. end if
  1131. if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then
  1132. rslt=0
  1133. goto ext
  1134. end if
  1135. IF Status<>1 THEN
  1136. rslt=0
  1137. arG_MSG="外加工计划只有在进行状态才可以执行终止,请核对"
  1138. goto ext
  1139. END IF
  1140. UPDATE u_order_wfjg
  1141. SET Status = 5,
  1142. accomplishdate=getdate(),
  1143. stopemp=:publ_operator
  1144. WHERE wfjgid = :arg_wfjgid
  1145. and scid = :arg_scid using commit_transaction ;
  1146. if commit_transaction.sqlcode<>0 then
  1147. rslt=0
  1148. arG_MSG="因网络或其它原因导致终止外加工计划操作失败"+"~n"+commit_transaction.SQLErrText
  1149. rollback using commit_transaction;
  1150. goto ext
  1151. end if
  1152. it_newbegin=FALSE
  1153. it_updatebegin=FALSE
  1154. EXT:
  1155. if arg_ifcommit and rslt=1 then
  1156. COMMIT using commit_transaction;
  1157. end if
  1158. p_reset()
  1159. arg_msg = '外协订单,'+ arg_msg
  1160. return (rslt)
  1161. end function
  1162. public function integer tempstoptask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0
  1163. IF arg_wfjgid<=0 THEN
  1164. rslt=0
  1165. ARG_MSG='错误外加工计划唯一码'
  1166. goto ext
  1167. end if
  1168. if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then
  1169. rslt=0
  1170. goto ext
  1171. end if
  1172. IF Status<>1 and Status<>2 THEN
  1173. rslt=0
  1174. arG_MSG="外加工计划只有在进行状态或暂停状态才可以执行暂停/取消暂停操作"
  1175. goto ext
  1176. END IF
  1177. if Status=1 then
  1178. UPDATE u_order_wfjg
  1179. SET Status = 2 ,
  1180. stopemp=:publ_operator
  1181. WHERE wfjgid = :arg_wfjgid
  1182. and scid = :arg_scid using commit_transaction ;
  1183. if commit_transaction.sqlcode<>0 then
  1184. rslt=0
  1185. arG_MSG="因网络或其它原因导致暂停外加工计划操作失败"+"~n"+commit_transaction.SQLErrText
  1186. goto ext
  1187. end if
  1188. else
  1189. UPDATE u_order_wfjg
  1190. SET Status = 1,stopemp=''
  1191. WHERE wfjgid = :arg_wfjgid
  1192. and scid = :arg_scid using commit_transaction;
  1193. if commit_transaction.sqlcode<>0 then
  1194. rslt=0
  1195. arG_MSG="因网络或其它原因导致取消暂停外加工计划操作失败"+"~n"+commit_transaction.SQLErrText
  1196. goto ext
  1197. end if
  1198. end if
  1199. it_newbegin=FALSE
  1200. it_updatebegin=FALSE
  1201. EXT:
  1202. if rslt=0 then
  1203. rollback using commit_transaction;
  1204. elseif arg_ifcommit then
  1205. COMMIT using commit_transaction;
  1206. end if
  1207. p_reset()
  1208. arg_msg = '外协订单,'+ arg_msg
  1209. return (rslt)
  1210. end function
  1211. public function integer trycmplbuytask (long arg_scid, long arg_wfjgid, ref string arg_msg, boolean arg_ifcommit);//trycmplbuytask(arg_taskid,arg_msg,arg_ifcommit)
  1212. int rslt = 1,cnt = 0
  1213. datetime null_dt
  1214. setnull(null_dt)
  1215. if arg_wfjgid <= 0 then
  1216. rslt = 0
  1217. arg_msg = '错误外加工计划唯一码'
  1218. goto ext
  1219. end if
  1220. if p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 then
  1221. rslt = 0
  1222. goto ext
  1223. end if
  1224. if status<>1 and status <> 5 then
  1225. rslt=1
  1226. if status<>1 then
  1227. arg_msg="外加工计划只有在进行状态下才可以执行设完成状态"
  1228. elseif status <>5 then
  1229. arg_msg="外加工计划只有在完成状态下才可以执行撤消完成状态"
  1230. end if
  1231. goto ext
  1232. end if
  1233. decimal ls_zerook
  1234. boolean if_finish
  1235. if_finish=true
  1236. declare zero_cur cursor for
  1237. select u_order_wfjgMx.qty - u_order_wfjgMx.stopqty - u_order_wfjgMx.consignedqty - u_order_wfjgMx.wasteqty
  1238. from u_order_wfjgMx
  1239. where ( u_order_wfjgMx.wfjgid = :arg_wfjgid )
  1240. and ( u_order_wfjgMx.scid = :arg_scid )
  1241. using commit_transaction ;
  1242. open zero_cur;
  1243. fetch zero_cur into :ls_zerook;
  1244. do while commit_transaction.sqlcode = 0
  1245. if if_finish then
  1246. if ls_zerook > 0 then if_finish=false
  1247. end if
  1248. fetch zero_cur into :ls_zerook;
  1249. loop
  1250. close zero_cur;
  1251. if status = 1 and if_finish then
  1252. update u_order_wfjg
  1253. set status = 5,
  1254. accomplishdate = getdate(),
  1255. finishemp = :publ_operator
  1256. where ( u_order_wfjg.wfjgid = :arg_wfjgid )
  1257. and ( u_order_wfjg.scid = :arg_scid ) using commit_transaction;
  1258. if commit_transaction.sqlcode <> 0 then
  1259. rslt = 0
  1260. arg_msg = "因网络或其他原因导致外加工计划完成状态设置操作失败"+"~n"+commit_transaction.sqlerrtext
  1261. goto ext
  1262. end if
  1263. end if
  1264. if status = 5 and not if_finish then
  1265. update u_order_wfjg
  1266. set status = 1,
  1267. accomplishdate = :null_dt,
  1268. finishemp = ''
  1269. where ( u_order_wfjg.wfjgid = :arg_wfjgid )
  1270. and ( u_order_wfjg.scid = :arg_scid ) using commit_transaction;
  1271. if commit_transaction.sqlcode <> 0 then
  1272. rslt = 0
  1273. arg_msg = "因网络或其他原因导致外加工计划撤消完成状态设置操作失败"+"~n"+commit_transaction.sqlerrtext
  1274. goto ext
  1275. end if
  1276. end if
  1277. it_newbegin = false
  1278. it_updatebegin = false
  1279. ext:
  1280. if rslt=0 then
  1281. rollback using commit_transaction;
  1282. elseif arg_ifcommit then
  1283. commit using commit_transaction;
  1284. end if
  1285. p_reset()
  1286. arg_msg = '外协订单,'+ arg_msg
  1287. return (rslt)
  1288. end function
  1289. public function integer updatebegin (long arg_scid, long arg_wfjgid, ref string arg_msg);//UPDATEbegin(long arg_taskid,ref string arg_msg)
  1290. //从置对象,设定业务类型与关联ID,准备更新进仓单
  1291. //0 fail 1 success
  1292. long rslt=1,CNT=0
  1293. IF arg_wfjgid<=0 THEN
  1294. rslt=0
  1295. ARG_MSG='错误外加工计划唯一码'
  1296. goto ext
  1297. end if
  1298. if p_getinfo(arg_scid,arg_wfjgid,arg_msg)=0 then
  1299. rslt=0
  1300. goto ext
  1301. end if
  1302. if Status<>0 then
  1303. rslt=0
  1304. ARG_MSG='已经处于审核或完成等状态,不可以修改,如果外加工计划未完成并要修改请先撤销审核'
  1305. goto ext
  1306. end if
  1307. it_newbegin=FALSE
  1308. it_updatebegin=TRUE
  1309. p_clearmx() //清除明细
  1310. ext:
  1311. if rslt=0 then p_reset()
  1312. arg_msg = '外协订单,'+ arg_msg
  1313. return rslt
  1314. end function
  1315. public function integer addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);int rslt = 1,cnt = 0
  1316. if arg_wfjgid <= 0 then
  1317. rslt = 0
  1318. arg_msg = '错误外加工计划唯一码'
  1319. goto ext
  1320. end if
  1321. if arg_addqty = 0 then
  1322. rslt = 1
  1323. goto ext
  1324. end if
  1325. if p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 then
  1326. rslt = 0
  1327. goto ext
  1328. end if
  1329. //====================================================================
  1330. // Script - addmxcmpl ( long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit )
  1331. // Reason:检查数量限制
  1332. //--------------------------------------------------------------------
  1333. // Modified By: yyx Date: 2004.02.12
  1334. //--------------------------------------------------------------------
  1335. long ls_isbuylimit
  1336. decimal ls_buyqty,ls_consignedqty
  1337. string ls_mtrlcode
  1338. select isbuylimit,mtrlcode into :ls_isbuylimit,:ls_mtrlcode from u_mtrldef
  1339. where mtrlid = :arg_mtrlid
  1340. using commit_transaction;
  1341. if commit_transaction.sqlcode <> 0 then
  1342. rslt = 0
  1343. arg_msg = '查询物料资料失败'
  1344. goto ext
  1345. end if
  1346. //if ls_isbuylimit = 1 then
  1347. select u_order_wfjgMx_out.qty,
  1348. u_order_wfjgMx_out.consignedqty
  1349. into :ls_buyqty,
  1350. :ls_consignedqty
  1351. from u_order_wfjgMx_out
  1352. where ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) and
  1353. ( u_order_wfjgMx_out.scid = :arg_scid ) and
  1354. ( u_order_wfjgMx_out.mtrlid = :arg_mtrlid ) and
  1355. ( u_order_wfjgMx_out.status = :arg_status ) and
  1356. ( u_order_wfjgMx_out.orderid = :arg_orderid ) and
  1357. (u_order_wfjgMx_out.woodcode=:arg_woodcode) and
  1358. (u_order_wfjgMx_out.pcode=:arg_pcode) using commit_transaction;
  1359. if commit_transaction.sqlcode <> 0 then
  1360. rslt = 0
  1361. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  1362. arg_msg = '查询外协订单已完成数量操作失败,查询数据返回值多于一个'
  1363. else
  1364. arg_msg = "物料编码["+ls_mtrlcode+"]不存在对应属性的外协订单发出明细"
  1365. end if
  1366. goto ext
  1367. end if
  1368. if sys_option_ifovertask_wfjg_out = 0 then
  1369. if ls_buyqty < ls_consignedqty + arg_addqty then
  1370. rslt = 0
  1371. arg_msg = "物料["+ls_mtrlcode+"]的未完成数量只有"+string(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能发出"+string(arg_addqty,'#,##0.0#')
  1372. goto ext
  1373. end if
  1374. end if
  1375. //end if
  1376. //====================================================================
  1377. update u_order_wfjgMx_out
  1378. set consignedqty = consignedqty + :arg_addqty
  1379. where ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) and
  1380. ( u_order_wfjgMx_out.scid = :arg_scid ) and
  1381. ( u_order_wfjgMx_out.mtrlid = :arg_mtrlid ) and
  1382. ( u_order_wfjgMx_out.status = :arg_status ) and
  1383. ( u_order_wfjgMx_out.orderid = :arg_orderid ) and
  1384. (u_order_wfjgMx_out.woodcode=:arg_woodcode) and
  1385. (u_order_wfjgMx_out.pcode=:arg_pcode) using commit_transaction;
  1386. if sqlca.sqlcode <> 0 then
  1387. rslt = 0
  1388. arg_msg = "因网络或错误产品唯一码导致外协订单完成数量操作失败"+"~n"+commit_transaction.sqlerrtext
  1389. goto ext
  1390. end if
  1391. it_newbegin = false
  1392. it_updatebegin = false
  1393. ext:
  1394. if rslt = 0 then
  1395. rollback using commit_transaction;
  1396. elseif arg_ifcommit then
  1397. commit using commit_transaction;
  1398. end if
  1399. p_reset()
  1400. arg_msg = '外协订单,'+ arg_msg
  1401. return (rslt)
  1402. end function
  1403. public function integer checkmxmpl (long arg_scid, long arg_wfjgid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg);//checkmxcmpl(long arg_taskid,long arg_mtrlid,decimal arg_addqty,ref string arg_msg,boolean arg_ifcommit)
  1404. INT rslt=1,cnt=0
  1405. IF arg_wfjgid<=0 THEN
  1406. rslt=0
  1407. ARG_MSG='错误外加工计划唯一码'
  1408. goto ext
  1409. end if
  1410. if arg_addqty=0 then
  1411. rslt=1
  1412. goto ext
  1413. end if
  1414. rslt=p_getinfo(arg_scid,arg_wfjgid,arg_msg)
  1415. if rslt=0 then goto ext
  1416. IF Status<>1 THEN
  1417. rslt=0
  1418. arG_MSG="外加工计划只有在进行状态下才可以执行进仓"
  1419. goto ext
  1420. END IF
  1421. decimal ls_buyQty,ls_assignQty
  1422. string ls_mtrlcode
  1423. SELECT u_order_wfjgMx.Qty,
  1424. u_order_wfjgMx.consignedqty,
  1425. u_mtrldef.mtrlcode
  1426. INTO :ls_buyQty,
  1427. :ls_assignQty,
  1428. :ls_mtrlcode
  1429. FROM u_order_wfjgMx ,u_mtrldef
  1430. WHERE ( u_order_wfjgMx.wfjgid =:arg_wfjgid ) AND
  1431. ( u_order_wfjgMx.scid =:arg_scid ) and
  1432. ( u_order_wfjgMx.MtrlID =:arg_mtrlid ) and
  1433. ( u_mtrldef.mtrlid=u_order_wfjgMx.MtrlID ) and
  1434. ( u_order_wfjgMx.status=:arg_status ) and
  1435. ( u_order_wfjgMx.woodcode=:arg_woodcode ) and
  1436. (u_order_wfjgMx.pcode=:arg_pcode) using commit_transaction;
  1437. if commit_transaction.sqlcode<>0 then
  1438. rslt=0
  1439. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  1440. arg_msg = '查询外加工计划已完成数量操作失败,查询数据返回值多于一个'
  1441. else
  1442. arG_MSG="物料编码["+ls_mtrlcode+"]不存在对应属性的外加工计划收货明细"
  1443. end if
  1444. goto ext
  1445. end if
  1446. if ls_buyQty < ls_assignQty + arg_addqty then
  1447. rslt=0
  1448. arG_MSG="物料["+ls_mtrlcode+"]的外加工计划未完成数量只有"+string(ls_buyQty - ls_assignQty,'#,##0.0#')+",不能入库"+string(arg_addqty,'#,##0.0#')
  1449. goto ext
  1450. end if
  1451. EXT:
  1452. p_reset()
  1453. arg_msg = '外协订单,'+ arg_msg
  1454. return (rslt)
  1455. end function
  1456. public function integer checkmxmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg);//checkmxcmpl(long arg_taskid,long arg_mtrlid,decimal arg_addqty,ref string arg_msg,boolean arg_ifcommit)
  1457. INT rslt=1,cnt=0
  1458. IF arg_wfjgid<=0 THEN
  1459. rslt=0
  1460. ARG_MSG='错误外加工计划唯一码'
  1461. goto ext
  1462. end if
  1463. if arg_addqty=0 then
  1464. rslt=1
  1465. goto ext
  1466. end if
  1467. rslt=p_getinfo(arg_scid,arg_wfjgid,arg_msg)
  1468. if rslt=0 then goto ext
  1469. IF Status<>1 THEN
  1470. rslt=0
  1471. arG_MSG="外加工计划只有在进行状态下才可以执行进仓"
  1472. goto ext
  1473. END IF
  1474. decimal ls_buyQty,ls_assignQty
  1475. string ls_mtrlcode
  1476. SELECT u_order_wfjgMx_out.Qty,
  1477. u_order_wfjgMx_out.consignedqty,
  1478. u_mtrldef.mtrlcode
  1479. INTO :ls_buyQty,
  1480. :ls_assignQty,
  1481. :ls_mtrlcode
  1482. FROM u_order_wfjgMx_out ,u_mtrldef
  1483. WHERE ( u_order_wfjgMx_out.wfjgid =:arg_wfjgid ) AND
  1484. ( u_order_wfjgMx_out.scid =:arg_scid ) and
  1485. ( u_order_wfjgMx_out.MtrlID =:arg_mtrlid ) and
  1486. ( u_mtrldef.mtrlid=u_order_wfjgMx_out.MtrlID ) and
  1487. ( u_order_wfjgMx_out.status=:arg_status ) and
  1488. ( u_order_wfjgMx_out.woodcode=:arg_woodcode) and
  1489. (u_order_wfjgMx_out.pcode=:arg_pcode) using commit_transaction;
  1490. if commit_transaction.sqlcode<>0 then
  1491. rslt=0
  1492. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  1493. arg_msg = '查询外加工计划已完成数量操作失败,查询数据返回值多于一个'
  1494. else
  1495. arG_MSG="物料编码["+ls_mtrlcode+"]不存在对应属性的外加工计划发料明细"+"~n"+commit_transaction.SQLErrText
  1496. end if
  1497. goto ext
  1498. end if
  1499. if ls_buyQty < ls_assignQty + arg_addqty then
  1500. rslt=0
  1501. arG_MSG="物料["+ls_mtrlcode+"]的外加工计划未完成数量只有"+string(ls_buyQty - ls_assignQty,'#,##0.0#')+",不能入库"+string(arg_addqty,'#,##0.0#')
  1502. goto ext
  1503. end if
  1504. EXT:
  1505. p_reset()
  1506. arg_msg = '外协订单,'+ arg_msg
  1507. return (rslt)
  1508. end function
  1509. public function integer wasteqty (long arg_scid, decimal arg_wasteqty, long arg_wfjg_orderid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1510. Decimal ls_buyqty,ls_consignedqty
  1511. IF arg_wfjg_orderid <= 0 THEN
  1512. rslt = 0
  1513. ARG_MSG = '错误外加工计划唯一码'
  1514. GOTO ext
  1515. END IF
  1516. SELECT count(*)
  1517. INTO :cnt
  1518. FROM u_order_wfjgmx
  1519. WHERE u_order_wfjgmx.scid = :arg_scid AND
  1520. u_order_wfjgmx.wfjgid = :arg_wfjg_orderid AND
  1521. u_order_wfjgmx.mtrlid = :arg_mtrlid AND
  1522. ( u_order_wfjgMx.status = :arg_status ) AND
  1523. ( u_order_wfjgMx.woodcode = :arg_woodcode ) AND
  1524. ( u_order_wfjgMx.pcode = :arg_pcode ) AND
  1525. ( u_order_wfjgmx.orderid = :arg_orderid ) USING commit_transaction;
  1526. IF commit_transaction.SQLCode <> 0 THEN
  1527. rslt = 0
  1528. ARG_MSG = "查询外加工明细操作失败!在物料"+String(arg_mtrlcode)
  1529. GOTO ext
  1530. END IF
  1531. IF cnt = 0 THEN
  1532. rslt = 0
  1533. ARG_MSG = "外加工明细不存在,在物料!"+String(arg_mtrlcode)
  1534. GOTO ext
  1535. END IF
  1536. SELECT u_order_wfjgMx.qty,
  1537. u_order_wfjgMx.consignedqty + u_order_wfjgMx.wasteqty
  1538. INTO :ls_buyqty,
  1539. :ls_consignedqty
  1540. FROM u_order_wfjgMx
  1541. WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjg_orderid ) AND
  1542. ( u_order_wfjgMx.scid = :arg_scid ) AND
  1543. ( u_order_wfjgMx.mtrlid = :arg_mtrlid ) AND
  1544. ( u_order_wfjgMx.status = :arg_status ) AND
  1545. ( u_order_wfjgMx.woodcode = :arg_woodcode ) AND
  1546. ( u_order_wfjgMx.pcode = :arg_pcode ) AND
  1547. ( u_order_wfjgmx.orderid = :arg_orderid ) USING commit_transaction;
  1548. IF commit_transaction.SQLCode <> 0 THEN
  1549. rslt = 0
  1550. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  1551. arg_msg = '查询外加工计划已完成数量操作失败,查询数据返回值多于一个'
  1552. else
  1553. ARG_MSG = "物料编码["+arg_mtrlcode+"]不存在对应属性的外加工计划明细"
  1554. end if
  1555. GOTO ext
  1556. END IF
  1557. IF ls_buyqty < ls_consignedqty + arg_wasteqty THEN
  1558. rslt = 0
  1559. ARG_MSG = "物料["+arg_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能入库"+String(arg_wasteqty,'#,##0.0#')
  1560. GOTO ext
  1561. END IF
  1562. UPDATE u_order_wfjgmx
  1563. SET u_order_wfjgmx.wasteqty = u_order_wfjgmx.wasteqty + :arg_wasteqty
  1564. WHERE u_order_wfjgmx.scid = :arg_scid AND
  1565. u_order_wfjgmx.wfjgid = :arg_wfjg_orderid AND
  1566. u_order_wfjgmx.mtrlid = :arg_mtrlid AND
  1567. ( u_order_wfjgMx.status = :arg_status ) AND
  1568. ( u_order_wfjgMx.woodcode = :arg_woodcode ) AND
  1569. ( u_order_wfjgMx.pcode = :arg_pcode ) AND
  1570. ( u_order_wfjgmx.orderid = :arg_orderid ) USING commit_transaction;
  1571. IF commit_transaction.SQLCode <> 0 THEN
  1572. rslt = 0
  1573. ARG_MSG = "因网络或其它原因导致更新外加工计划损耗操作失败"+"~n"+commit_transaction.SQLErrText
  1574. GOTO ext
  1575. END IF
  1576. ext:
  1577. IF rslt = 0 THEN
  1578. ROLLBACK USING commit_transaction;
  1579. ELSEIF arg_ifcommit THEN
  1580. COMMIT USING commit_transaction;
  1581. END IF
  1582. arg_msg = '外协订单,'+ arg_msg
  1583. Return (rslt)
  1584. end function
  1585. public function integer stopmx (long arg_scid, long arg_orderid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, decimal arg_stopqty, ref string arg_msg, boolean arg_commit);Int rslt = 1
  1586. Int li_flag
  1587. DateTime null_dt
  1588. Decimal ld_notconsignedqty
  1589. SetNull(null_dt)
  1590. IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  1591. rslt = 0
  1592. GOTO ext
  1593. END IF
  1594. IF status <> 1 THEN
  1595. arg_msg = '订单只能在进行状态下才能操作'
  1596. rslt = 0
  1597. GOTO ext
  1598. END IF
  1599. SELECT stopflag INTO :li_flag
  1600. FROM u_order_wfjgmx
  1601. WHERE scid = :arg_scid
  1602. AND wfjgid = :arg_orderid
  1603. AND printid = :arg_printid;
  1604. IF sqlca.SQLCode <> 0 THEN
  1605. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  1606. arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败,查询数据返回值多于一个'
  1607. else
  1608. arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败'
  1609. end if
  1610. rslt = 0
  1611. GOTO ext
  1612. END IF
  1613. IF arg_flag = 0 THEN
  1614. IF li_flag = 0 THEN
  1615. arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止'
  1616. rslt = 0
  1617. GOTO ext
  1618. END IF
  1619. ELSE
  1620. IF li_flag = 1 THEN
  1621. arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止'
  1622. rslt = 0
  1623. GOTO ext
  1624. END IF
  1625. END IF
  1626. IF arg_flag = 1 THEN
  1627. SELECT u_order_wfjgmx.Qty - u_order_wfjgmx.consignedqty
  1628. INTO :ld_notconsignedqty
  1629. FROM u_order_wfjgmx
  1630. WHERE scid = :arg_scid
  1631. AND wfjgid = :arg_orderid
  1632. AND printid = :arg_printid;
  1633. IF sqlca.SQLCode <> 0 THEN
  1634. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  1635. arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败,查询数据返回值多于一个'
  1636. else
  1637. arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败'
  1638. end if
  1639. rslt = 0
  1640. GOTO ext
  1641. END IF
  1642. IF ld_notconsignedqty <= 0 THEN
  1643. arg_msg = '明细物料'+arg_mtrlcode+'已完成收货,不能中止'
  1644. rslt = 0
  1645. GOTO ext
  1646. END IF
  1647. IF ld_notconsignedqty < arg_stopqty THEN
  1648. arg_msg = '明细物料'+arg_mtrlcode+'未完成数量只有:' + String(ld_notconsignedqty,'###,##0.#####') + ',不能中止:' + String(arg_stopqty,'###,##0.#####')
  1649. rslt = 0
  1650. GOTO ext
  1651. END IF
  1652. IF trycmplbuytask(arg_scid,arg_orderid,arg_msg,FALSE) = 0 THEN
  1653. rslt = 0
  1654. GOTO ext
  1655. END IF
  1656. END IF
  1657. IF arg_flag = 0 THEN
  1658. UPDATE u_order_wfjgmx
  1659. SET stopflag = 0,
  1660. stopemp = '',
  1661. stopdate = :null_dt,
  1662. stopreason = '',
  1663. stopqty = 0
  1664. WHERE scid = :arg_scid
  1665. AND wfjgid = :arg_orderid
  1666. AND printid = :arg_printid;
  1667. ELSE
  1668. UPDATE u_order_wfjgmx
  1669. SET stopflag = 1,
  1670. stopemp = :publ_operator,
  1671. stopdate = getdate(),
  1672. stopreason = :arg_stopreason,
  1673. stopqty = :arg_stopqty
  1674. WHERE scid = :arg_scid
  1675. AND wfjgid = :arg_orderid
  1676. AND printid = :arg_printid;
  1677. END IF
  1678. IF sqlca.SQLCode <> 0 THEN
  1679. arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText
  1680. rslt = 0
  1681. GOTO ext
  1682. END IF
  1683. ext:
  1684. IF rslt = 0 THEN
  1685. ROLLBACK;
  1686. ELSEIF rslt = 1 AND arg_commit THEN
  1687. COMMIT;
  1688. END IF
  1689. arg_msg = '外协订单,'+ arg_msg
  1690. RETURN rslt
  1691. end function
  1692. public function integer stopmx1 (long arg_scid, long arg_orderid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, decimal arg_stopqty, ref string arg_msg, boolean arg_commit);Int rslt = 1
  1693. Int li_flag
  1694. DateTime null_dt
  1695. Decimal ld_notconsignedqty
  1696. SetNull(null_dt)
  1697. IF p_getinfo(arg_scid,arg_orderid,arg_msg) = 0 THEN
  1698. rslt = 0
  1699. GOTO ext
  1700. END IF
  1701. IF status <> 1 THEN
  1702. arg_msg = '订单只能在进行状态下才能操作'
  1703. rslt = 0
  1704. GOTO ext
  1705. END IF
  1706. SELECT stopflag INTO :li_flag
  1707. FROM u_order_wfjgmx_out
  1708. WHERE scid = :arg_scid
  1709. AND wfjgid = :arg_orderid
  1710. AND printid = :arg_printid;
  1711. IF sqlca.SQLCode <> 0 THEN
  1712. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  1713. arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败,查询数据返回值多于一个'
  1714. else
  1715. arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败'
  1716. end if
  1717. rslt = 0
  1718. GOTO ext
  1719. END IF
  1720. IF arg_flag = 0 THEN
  1721. IF li_flag = 0 THEN
  1722. arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止'
  1723. rslt = 0
  1724. GOTO ext
  1725. END IF
  1726. ELSE
  1727. IF li_flag = 1 THEN
  1728. arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止'
  1729. rslt = 0
  1730. GOTO ext
  1731. END IF
  1732. END IF
  1733. IF arg_flag = 1 THEN
  1734. SELECT u_order_wfjgmx_out.Qty - u_order_wfjgmx_out.consignedqty
  1735. INTO :ld_notconsignedqty
  1736. FROM u_order_wfjgmx_out
  1737. WHERE scid = :arg_scid
  1738. AND wfjgid = :arg_orderid
  1739. AND printid = :arg_printid;
  1740. IF sqlca.SQLCode <> 0 THEN
  1741. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  1742. arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败,查询数据返回值多于一个'
  1743. else
  1744. arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败'
  1745. end if
  1746. rslt = 0
  1747. GOTO ext
  1748. END IF
  1749. IF ld_notconsignedqty <= 0 THEN
  1750. arg_msg = '明细物料'+arg_mtrlcode+'已完成发出,不能中止'
  1751. rslt = 0
  1752. GOTO ext
  1753. END IF
  1754. IF ld_notconsignedqty < arg_stopqty THEN
  1755. arg_msg = '明细物料'+arg_mtrlcode+'未完成数量只有:' + String(ld_notconsignedqty,'###,##0.#####') + ',不能中止:' + String(arg_stopqty,'###,##0.#####')
  1756. rslt = 0
  1757. GOTO ext
  1758. END IF
  1759. END IF
  1760. IF arg_flag = 0 THEN
  1761. UPDATE u_order_wfjgmx_out
  1762. SET stopflag = 0,
  1763. stopemp = '',
  1764. stopdate = :null_dt,
  1765. stopreason = '',
  1766. stopqty = 0
  1767. WHERE scid = :arg_scid
  1768. AND wfjgid = :arg_orderid
  1769. AND printid = :arg_printid;
  1770. ELSE
  1771. UPDATE u_order_wfjgmx_out
  1772. SET stopflag = 1,
  1773. stopemp = :publ_operator,
  1774. stopdate = getdate(),
  1775. stopreason = :arg_stopreason,
  1776. stopqty = :arg_stopqty
  1777. WHERE scid = :arg_scid
  1778. AND wfjgid = :arg_orderid
  1779. AND printid = :arg_printid;
  1780. END IF
  1781. IF sqlca.SQLCode <> 0 THEN
  1782. arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText
  1783. rslt = 0
  1784. GOTO ext
  1785. END IF
  1786. ext:
  1787. IF rslt = 0 THEN
  1788. ROLLBACK;
  1789. ELSEIF rslt = 1 AND arg_commit THEN
  1790. COMMIT;
  1791. END IF
  1792. arg_msg = '外协订单,'+ arg_msg
  1793. RETURN rslt
  1794. end function
  1795. public function integer uf_del_outware_wfjg (boolean arg_ifcommit, ref string arg_msg);//辅助生成外协发出单
  1796. IF sys_option_autocreate_outware = 0 THEN RETURN 1
  1797. //IF it_mxbt_out <= 0 THEN RETURN 1
  1798. Int rslt = 1
  1799. Long cnt
  1800. Long ll_outwareid
  1801. //====================================================================
  1802. //撤审并删除自动生成的仓库外协发出单
  1803. //====================================================================
  1804. uo_outware_wfjg uo_ware
  1805. uo_ware = Create uo_outware_wfjg
  1806. uo_ware.commit_transaction = sqlca
  1807. cnt = 0
  1808. SELECT count(*)
  1809. INTO :cnt
  1810. FROM ow_wfjg_out
  1811. WHERE relid = :wfjgid
  1812. AND billtype = 4
  1813. And scid = :scid Using commit_transaction;
  1814. IF sqlca.SQLCode <> 0 THEN
  1815. rslt = 0
  1816. arg_msg = '查询是否有自动建立的外协发出单失败'+'~n'+commit_transaction.SQLErrText
  1817. GOTO ext
  1818. END IF
  1819. IF cnt = 1 THEN
  1820. SELECT outwareid INTO :ll_outwareid
  1821. FROM ow_wfjg_out
  1822. WHERE relid = :wfjgid
  1823. AND billtype = 4
  1824. And scid = :scid Using commit_transaction;
  1825. IF sqlca.SQLCode <> 0 THEN
  1826. rslt = 0
  1827. arg_msg = '查询自动建立的外协发出单信息失败'+'~n'+commit_transaction.SQLErrText
  1828. GOTO ext
  1829. END IF
  1830. IF uo_ware.getinfo(scid,ll_outwareid,arg_msg) = 0 THEN
  1831. rslt = 0
  1832. GOTO ext
  1833. END IF
  1834. IF uo_ware.flag = 1 THEN
  1835. IF uo_ware.c_auditing(False,arg_msg) = 0 THEN
  1836. rslt = 0
  1837. GOTO ext
  1838. END IF
  1839. END IF
  1840. IF uo_ware.del(scid,ll_outwareid,arg_msg,False) = 0 THEN
  1841. rslt = 0
  1842. GOTO ext
  1843. END IF
  1844. END IF
  1845. ext:
  1846. Destroy uo_ware
  1847. IF rslt = 0 THEN
  1848. ROLLBACK Using commit_transaction;
  1849. arg_msg = "辅助删除外协发出单失败,"+arg_msg
  1850. ELSEIF arg_ifcommit THEN
  1851. COMMIT Using commit_transaction;
  1852. END IF
  1853. RETURN rslt
  1854. end function
  1855. public function integer uf_create_outware_wfjg (boolean arg_ifcommit, ref string arg_msg);//辅助生成外协发出单
  1856. IF it_mxbt_out <= 0 THEN RETURN 1
  1857. Int rslt = 1
  1858. //====================================================================
  1859. // 按外协订单发出明细内容自动建立
  1860. //====================================================================
  1861. uo_outware_wfjg uo_ware
  1862. uo_ware = Create uo_outware_wfjg
  1863. uo_ware.commit_transaction = sqlca
  1864. Long i,j
  1865. Long ll_mx
  1866. Decimal ld_sumqty,ld_acceptqty,ld_lastqty
  1867. Long ll_mtrlwareid[]
  1868. Decimal ld_noallocqty[]
  1869. Long ll_printid = 0
  1870. DateTime server_dt
  1871. SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ;
  1872. //取得系统时间,借用操作员表
  1873. IF commit_transaction.SQLCode <> 0 THEN
  1874. rslt = 0
  1875. arg_msg = "查询操作失败,日期 "
  1876. GOTO ext
  1877. END IF
  1878. IF uo_ware.newbegin(scid,4,arg_msg) = 0 THEN
  1879. rslt = 0
  1880. GOTO ext
  1881. END IF
  1882. // //初始化主表参数
  1883. uo_ware.outdate = server_dt
  1884. uo_ware.outrep = publ_operator
  1885. uo_ware.dscrp = '外协订单 '+taskcode+' 自动生成'
  1886. uo_ware.relid = wfjgid //相关ID
  1887. uo_ware.sptid = sptid
  1888. uo_ware.part = taskcode
  1889. uo_ware.if_getid_ture = False
  1890. //检查是否够库存
  1891. FOR i = 1 To it_mxbt_out
  1892. SELECT sum(noallocqty) INTO :ld_sumqty
  1893. FROM u_mtrlware
  1894. WHERE mtrlid = :wfjgmx_out[i].mtrlid
  1895. AND storageid = :wfjgmx_out[i].storageid
  1896. AND status = :wfjgmx_out[i].status
  1897. AND woodcode = :wfjgmx_out[i].woodcode
  1898. And pcode = :wfjgmx_out[i].pcode;
  1899. IF sqlca.SQLCode <> 0 THEN
  1900. rslt = 0
  1901. arg_msg = '查询 '+wfjgmx_out[i].mtrlcode+' 库存数量失败'+'~r~n'+sqlca.SQLErrText
  1902. GOTO ext
  1903. END IF
  1904. IF ld_sumqty < wfjgmx_out[i].qty THEN
  1905. rslt = 0
  1906. arg_msg = wfjgmx_out[i].mtrlcode+' 库存数量:'+String(ld_sumqty,'#,##0.##########')+'少于本次出仓数量:'+String(wfjgmx_out[i].qty,'#,##0.##########')+',不能自动生成发出单'
  1907. GOTO ext
  1908. END IF
  1909. NEXT
  1910. //插入明细
  1911. FOR i = 1 To it_mxbt_out
  1912. ll_mx = 1
  1913. DECLARE cur_mx CURSOR FOR
  1914. SELECT noallocqty,mtrlwareid
  1915. FROM u_mtrlware
  1916. WHERE mtrlid = :wfjgmx_out[i].mtrlid
  1917. AND storageid = :wfjgmx_out[i].storageid
  1918. AND status = :wfjgmx_out[i].status
  1919. AND woodcode = :wfjgmx_out[i].woodcode
  1920. AND pcode = :wfjgmx_out[i].pcode
  1921. ORDER BY noallocqty DESC
  1922. Using commit_transaction;
  1923. OPEN cur_mx;
  1924. FETCH cur_mx Into :ld_noallocqty[ll_mx],:ll_mtrlwareid[ll_mx];
  1925. DO WHILE commit_transaction.SQLCode = 0
  1926. ll_mx++
  1927. FETCH cur_mx Into :ld_noallocqty[ll_mx],:ll_mtrlwareid[ll_mx];
  1928. LOOP
  1929. CLOSE cur_mx;
  1930. ld_lastqty = wfjgmx_out[i].qty
  1931. FOR j = 1 To ll_mx - 1
  1932. IF ld_lastqty <= ld_noallocqty[j] THEN
  1933. ld_acceptqty = ld_lastqty
  1934. ld_lastqty = 0
  1935. ELSE
  1936. ld_acceptqty = ld_noallocqty[j]
  1937. ld_lastqty = ld_lastqty - ld_noallocqty[j]
  1938. END IF
  1939. ll_printid++
  1940. IF uo_ware.acceptmx(ll_mtrlwareid[j],&
  1941. ld_acceptqty ,&
  1942. wfjgmx_out[i].unit,&
  1943. ld_acceptqty ,&
  1944. wfjgmx_out[i].dscrp,&
  1945. ll_printid,&
  1946. arg_msg,&
  1947. 1,&
  1948. wfjgid,&
  1949. wfjgmx_out[i].printid,&
  1950. 1,&
  1951. 0,&
  1952. '',&
  1953. wfjgmx_out[i].dscrp2) = 0 THEN
  1954. arg_msg = "行:"+String(i)+","+arg_msg
  1955. rslt = 0
  1956. GOTO ext
  1957. END IF
  1958. IF ld_lastqty = 0 THEN EXIT
  1959. NEXT
  1960. NEXT
  1961. //保存发出单
  1962. IF uo_ware.Save(False,arg_msg) = 0 THEN
  1963. rslt = 0
  1964. GOTO ext
  1965. END IF
  1966. IF uo_ware.getinfo(scid,uo_ware.outwareid,arg_msg) = 0 THEN
  1967. rslt = 0
  1968. GOTO ext
  1969. END IF
  1970. //审核发出单
  1971. IF uo_ware.auditing(False,arg_msg) = 0 THEN
  1972. rslt = 0
  1973. GOTO ext
  1974. END IF
  1975. //
  1976. ext:
  1977. Destroy uo_ware
  1978. IF rslt = 0 THEN
  1979. ROLLBACK Using commit_transaction;
  1980. arg_msg = "辅助建立外协发出单失败,"+arg_msg
  1981. ELSEIF arg_ifcommit THEN
  1982. COMMIT Using commit_transaction;
  1983. END IF
  1984. RETURN rslt
  1985. end function
  1986. public function integer check_addmxcmpl_out (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);
  1987. int rslt = 1,cnt = 0
  1988. if arg_wfjgid <= 0 then
  1989. rslt = 0
  1990. arg_msg = '错误外加工计划唯一码'
  1991. goto ext
  1992. end if
  1993. if arg_addqty = 0 then
  1994. rslt = 1
  1995. goto ext
  1996. end if
  1997. if p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 then
  1998. rslt = 0
  1999. goto ext
  2000. end if
  2001. //====================================================================
  2002. // Script - addmxcmpl ( long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit )
  2003. // Reason:检查数量限制
  2004. //--------------------------------------------------------------------
  2005. // Modified By: yyx Date: 2004.02.12
  2006. //--------------------------------------------------------------------
  2007. long ls_isbuylimit
  2008. decimal ls_buyqty,ls_consignedqty
  2009. string ls_mtrlcode
  2010. select isbuylimit,mtrlcode into :ls_isbuylimit,:ls_mtrlcode from u_mtrldef
  2011. where mtrlid = :arg_mtrlid
  2012. using commit_transaction;
  2013. if commit_transaction.sqlcode <> 0 then
  2014. rslt = 0
  2015. arg_msg = '查询物料资料失败'
  2016. goto ext
  2017. end if
  2018. //if ls_isbuylimit = 1 then
  2019. select u_order_wfjgMx_out.qty,
  2020. u_order_wfjgMx_out.consignedqty
  2021. into :ls_buyqty,
  2022. :ls_consignedqty
  2023. from u_order_wfjgMx_out
  2024. where ( u_order_wfjgMx_out.wfjgid = :arg_wfjgid ) and
  2025. ( u_order_wfjgMx_out.scid = :arg_scid ) and
  2026. ( u_order_wfjgMx_out.mtrlid = :arg_mtrlid ) and
  2027. ( u_order_wfjgMx_out.status = :arg_status ) and
  2028. ( u_order_wfjgMx_out.orderid = :arg_orderid ) and
  2029. (u_order_wfjgMx_out.woodcode=:arg_woodcode) and
  2030. (u_order_wfjgMx_out.pcode=:arg_pcode) using commit_transaction;
  2031. if commit_transaction.sqlcode <> 0 then
  2032. rslt = 0
  2033. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  2034. arg_msg = '查询外协订单已完成数量操作失败,查询数据返回值多于一个'
  2035. else
  2036. arg_msg = "物料编码["+ls_mtrlcode+"]不存在对应属性的外协订单发出明细"
  2037. end if
  2038. goto ext
  2039. end if
  2040. if ls_buyqty < ls_consignedqty + arg_addqty then
  2041. rslt = 0
  2042. arg_msg = "物料["+ls_mtrlcode+"]的未完成数量只有"+string(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能发出"+string(arg_addqty,'#,##0.0#')
  2043. goto ext
  2044. end if
  2045. //end if
  2046. ext:
  2047. if rslt = 0 then
  2048. elseif arg_ifcommit then
  2049. end if
  2050. arg_msg = '外协订单,'+ arg_msg
  2051. return (rslt)
  2052. end function
  2053. public function integer acceptmx (long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, long arg_storageid, string arg_jgdscrp, string arg_status, string arg_woodcode, string arg_pcode, long arg_relprintid, long arg_relid2, string arg_relcode, long arg_orderid, string arg_plancode, string arg_mxdscrp2, string arg_mxdscrp3, string arg_mxdscrp4);//RETURN 0 fail 1 success
  2054. // 函数增加一个明细项
  2055. Long rslt = 1,cnt = 0,LS_i
  2056. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  2057. rslt = 0
  2058. arG_MSG = "非编辑状态不可以使用,操作取消"
  2059. GOTO ext
  2060. END IF
  2061. //清除空值
  2062. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  2063. IF IsNull(arg_qty) THEN arg_qty = 0
  2064. IF IsNull(arg_price) THEN arg_price = 0
  2065. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  2066. IF IsNull(ARG_mtrlCODE) THEN ARG_mtrlCODE = ''
  2067. IF IsNull(arg_printid) THEN arg_printid = 0
  2068. IF IsNull(arg_storageid) THEN arg_storageid = 0
  2069. IF IsNull(arg_jgdscrp) THEN arg_jgdscrp = ''
  2070. IF IsNull(arg_status) THEN arg_status = ''
  2071. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  2072. IF IsNull(arg_pcode) THEN arg_pcode = ''
  2073. IF IsNull(arg_relprintid) THEN arg_relprintid = 0
  2074. IF IsNull(arg_relid2) THEN arg_relid2 = 0
  2075. IF IsNull(arg_relcode) THEN arg_relcode = ''
  2076. IF IsNull(arg_orderid) THEN arg_orderid = 0
  2077. IF IsNull(arg_plancode) THEN arg_plancode = ''
  2078. IF IsNull(arg_mxdscrp2) THEN arg_mxdscrp2 = ''
  2079. IF IsNull(arg_mxdscrp3) THEN arg_mxdscrp3 =''
  2080. IF IsNull(arg_mxdscrp4) THEN arg_mxdscrp4 = ''
  2081. arg_requiredate = datetime(date(arg_requiredate))
  2082. IF arg_mtrlid = 0 OR arg_qty = 0 THEN // 如果进仓数量为 0,或物料编号为空,则不作任何处理
  2083. rslt = 1
  2084. GOTO ext
  2085. END IF
  2086. IF arg_price < 0 THEN //检查进仓价
  2087. rslt = 0
  2088. arG_MSG = "物料:" + String(ARG_mtrlCODE)+" 单价错误"
  2089. GOTO ext
  2090. END IF
  2091. //检查物料ID
  2092. SELECT COUNT(*)
  2093. INTO :cnt
  2094. FROM u_mtrldef
  2095. Where u_mtrldef.mtrlid = :arg_mtrlid ;
  2096. IF sqlca.SQLCode <> 0 THEN
  2097. rslt = 0
  2098. arG_MSG = "查询操作失败,物料编码"
  2099. GOTO ext
  2100. END IF
  2101. IF cnt = 0 THEN
  2102. rslt = 0
  2103. arG_MSG = "错误的物料编码: "+String(ARG_mtrlCODE)
  2104. GOTO ext
  2105. END IF
  2106. cnt = 0
  2107. SELECT COUNT(*)
  2108. INTO :cnt
  2109. FROM u_storage
  2110. Where u_storage.storageid = :arg_storageid ;
  2111. IF sqlca.SQLCode <> 0 THEN
  2112. rslt = 0
  2113. arG_MSG = "查询操作失败,仓库编号"
  2114. GOTO ext
  2115. END IF
  2116. IF cnt = 0 THEN
  2117. rslt = 0
  2118. arG_MSG = "错误的仓库编号"
  2119. GOTO ext
  2120. END IF
  2121. //检查超数量
  2122. IF arg_orderid > 0 AND arg_relid2 > 0 THEN
  2123. Decimal ld_noqty,ld_readyqty
  2124. SELECT u_OrderRqMtrl.truerqqty - u_OrderRqMtrl.consignedqty - ISNULL(notmp.noauditqty,0) as noqty
  2125. INTO :ld_noqty
  2126. FROM u_OrderRqMtrl
  2127. LEFT OUTER JOIN (
  2128. SELECT u_order_wfjgMx.scid
  2129. ,orderid
  2130. ,relprintid
  2131. ,relid2
  2132. ,SUM(Qty) AS noauditqty
  2133. FROM u_order_wfjgMx
  2134. inner join u_order_wfjg on u_order_wfjg.scid = u_order_wfjgMx.scid
  2135. and u_order_wfjg.wfjgID = u_order_wfjgMx.wfjgID
  2136. where u_order_wfjg.status = 0 and u_order_wfjg.scid = :scid and u_order_wfjg.wfjgid <> :wfjgid
  2137. GROUP BY u_order_wfjgMx.scid
  2138. ,orderid
  2139. ,relprintid
  2140. ,relid2
  2141. ) AS notmp ON u_OrderRqMtrl.scid = notmp.scid
  2142. AND u_OrderRqMtrl.taskID = notmp.orderid
  2143. AND u_OrderRqMtrl.printid = notmp.relprintid
  2144. AND u_OrderRqMtrl.mxpkid = notmp.relid2
  2145. WHERE (u_OrderRqMtrl.plantype = 3)
  2146. AND u_OrderRqMtrl.scid = :scid
  2147. AND u_OrderRqMtrl.taskID = :arg_orderid
  2148. AND u_OrderRqMtrl.printid = :arg_relprintid
  2149. AND u_OrderRqMtrl.mxpkid = :arg_relid2;
  2150. IF SQLCA.SQLCODE <> 0 THEN
  2151. arg_msg = "第" + String(arg_printid) + "行,查询需求表失败"+arg_mtrlcode+'失败!'+commit_transaction.SQLErrText
  2152. rslt = 0
  2153. GOTO ext
  2154. END IF
  2155. ld_readyqty = arg_qty
  2156. FOR LS_i = 1 TO it_mxbt
  2157. IF wfjgmx[it_mxbt].orderid = arg_orderid AND &
  2158. wfjgmx[it_mxbt].relprintid = arg_relprintid AND &
  2159. wfjgmx[it_mxbt].relid2 = arg_relid2 THEN
  2160. ld_readyqty += wfjgmx[it_mxbt].qty
  2161. END IF
  2162. NEXT
  2163. IF ld_readyqty > ld_noqty THEN
  2164. arg_msg = "第" + String(arg_printid) + '行,本次开单数'+String(ld_readyqty,"#,##0.00##")+'不能大于未开单数'+String(ld_noqty,"#,##0.00##")
  2165. rslt = 0
  2166. GOTO ext
  2167. END IF
  2168. END IF
  2169. FOR LS_i = 1 TO it_mxbt //合并重复项
  2170. IF sys_option_order_wfjg_mxhb = 0 THEN
  2171. IF wfjgmx[it_mxbt].orderid = arg_orderid AND &
  2172. wfjgmx[it_mxbt].mtrlid = arg_mtrlid AND &
  2173. wfjgmx[it_mxbt].status = arg_status AND &
  2174. wfjgmx[it_mxbt].woodcode = arg_woodcode AND &
  2175. wfjgmx[it_mxbt].pcode = arg_pcode AND &
  2176. wfjgmx[it_mxbt].requiredate = arg_requiredate THEN
  2177. wfjgmx[it_mxbt].Qty = wfjgmx[it_mxbt].Qty+arg_qty
  2178. rslt = 1
  2179. GOTO ext
  2180. END IF
  2181. END IF
  2182. NEXT
  2183. //写入内容
  2184. it_mxbt++
  2185. wfjgmx[it_mxbt].printid = arg_printid
  2186. wfjgmx[it_mxbt].mtrlid = arg_mtrlid
  2187. wfjgmx[it_mxbt].mtrlcode = ARG_mtrlCODE
  2188. wfjgmx[it_mxbt].status = arg_status
  2189. wfjgmx[it_mxbt].woodcode = arg_woodcode
  2190. wfjgmx[it_mxbt].pcode = arg_pcode
  2191. wfjgmx[it_mxbt].Qty = arg_qty
  2192. wfjgmx[it_mxbt].price = arg_price
  2193. wfjgmx[it_mxbt].dscrp = arg_dscrp
  2194. wfjgmx[it_mxbt].requiredate = arg_requiredate
  2195. wfjgmx[it_mxbt].storageid = arg_storageid
  2196. wfjgmx[it_mxbt].jgdscrp = arg_jgdscrp
  2197. wfjgmx[it_mxbt].relprintid = arg_relprintid
  2198. wfjgmx[it_mxbt].relid2 = arg_relid2
  2199. wfjgmx[it_mxbt].relcode = arg_relcode
  2200. wfjgmx[it_mxbt].orderid = arg_orderid
  2201. wfjgmx[it_mxbt].plancode = arg_plancode
  2202. wfjgmx[it_mxbt].mxdscrp2 = arg_mxdscrp2
  2203. wfjgmx[it_mxbt].mxdscrp3 = arg_mxdscrp3
  2204. wfjgmx[it_mxbt].mxdscrp4= arg_mxdscrp4
  2205. IF arg_orderid > 0 THEN
  2206. wfjgmx[it_mxbt].iforder = 1
  2207. END IF
  2208. ext:
  2209. IF rslt = 0 THEN p_clearmx()
  2210. arG_MSG = '外协订单,'+ arG_MSG
  2211. Return(rslt)
  2212. end function
  2213. public function integer uf_create_outware_wfjg_noaudit (boolean arg_ifcommit, ref string arg_msg);//辅助生成外协发出单
  2214. IF it_mxbt_out <= 0 THEN RETURN 1
  2215. Int rslt = 1
  2216. //====================================================================
  2217. // 按外协订单发出明细内容自动建立
  2218. //====================================================================
  2219. uo_outware_wfjg uo_ware
  2220. uo_ware = Create uo_outware_wfjg
  2221. uo_ware.commit_transaction = sqlca
  2222. Long i,j
  2223. Long ll_mx
  2224. Decimal ld_sumqty,ld_acceptqty,ld_lastqty
  2225. Long ll_mtrlwareid[]
  2226. Decimal ld_noallocqty[]
  2227. Long ll_printid = 0
  2228. DateTime server_dt
  2229. SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ;
  2230. //取得系统时间,借用操作员表
  2231. IF commit_transaction.SQLCode <> 0 THEN
  2232. rslt = 0
  2233. arg_msg = "查询操作失败,日期 "
  2234. GOTO ext
  2235. END IF
  2236. IF uo_ware.newbegin(scid,4,arg_msg) = 0 THEN
  2237. rslt = 0
  2238. GOTO ext
  2239. END IF
  2240. // //初始化主表参数
  2241. uo_ware.outdate = server_dt
  2242. uo_ware.outrep = publ_operator
  2243. uo_ware.dscrp = '外协订单 '+taskcode+' 自动生成'
  2244. uo_ware.relid = wfjgid //相关ID
  2245. uo_ware.sptid = sptid
  2246. uo_ware.part = taskcode
  2247. uo_ware.if_getid_ture = False
  2248. //检查是否够库存
  2249. FOR i = 1 To it_mxbt_out
  2250. SELECT top 1 mtrlwareid INTO :ld_sumqty
  2251. FROM u_mtrlware
  2252. WHERE mtrlid = :wfjgmx_out[i].mtrlid
  2253. AND storageid = :wfjgmx_out[i].storageid
  2254. AND status = :wfjgmx_out[i].status
  2255. AND woodcode = :wfjgmx_out[i].woodcode
  2256. And pcode = :wfjgmx_out[i].pcode;
  2257. IF sqlca.SQLCode <> 0 And sqlca.SQLCode <> 100 THEN
  2258. rslt = 0
  2259. arg_msg = '查询 '+wfjgmx_out[i].mtrlcode+' 库存数量失败'+'~r~n'+sqlca.SQLErrText
  2260. GOTO ext
  2261. ELSEIF sqlca.SQLCode = 100 THEN
  2262. Long ls_mtrlwareid,ls_sptid
  2263. String ls_mtrlcode,ls_plancode
  2264. ls_mtrlwareid = 0
  2265. ls_sptid = 0
  2266. ls_mtrlcode = ''
  2267. ls_plancode = ''
  2268. IF f_insert_0_mtrlware(ls_mtrlwareid, wfjgmx_out[i].mtrlid,ls_mtrlcode, wfjgmx_out[i].storageid,ls_sptid,wfjgmx_out[i].status,wfjgmx_out[i].woodcode,wfjgmx_out[i].pcode,ls_plancode,0,arg_msg) = 0 THEN
  2269. rslt = 0
  2270. GOTO ext
  2271. END IF
  2272. ELSE
  2273. END IF
  2274. // IF ld_sumqty < wfjgmx_out[i].qty THEN
  2275. // rslt = 0
  2276. // arg_msg = wfjgmx_out[i].mtrlcode+' 库存数量:'+String(ld_sumqty,'#,##0.##########')+'少于本次出仓数量:'+String(wfjgmx_out[i].qty,'#,##0.##########')+',不能自动生成发出单'
  2277. // GOTO ext
  2278. // END IF
  2279. NEXT
  2280. //插入明细
  2281. FOR i = 1 To it_mxbt_out
  2282. ll_mx = 1
  2283. DECLARE cur_mx CURSOR FOR
  2284. SELECT noallocqty,mtrlwareid
  2285. FROM u_mtrlware
  2286. WHERE mtrlid = :wfjgmx_out[i].mtrlid
  2287. AND storageid = :wfjgmx_out[i].storageid
  2288. AND status = :wfjgmx_out[i].status
  2289. AND woodcode = :wfjgmx_out[i].woodcode
  2290. AND pcode = :wfjgmx_out[i].pcode
  2291. ORDER BY noallocqty DESC
  2292. Using commit_transaction;
  2293. OPEN cur_mx;
  2294. FETCH cur_mx Into :ld_noallocqty[ll_mx],:ll_mtrlwareid[ll_mx];
  2295. DO WHILE commit_transaction.SQLCode = 0
  2296. ll_mx++
  2297. FETCH cur_mx Into :ld_noallocqty[ll_mx],:ll_mtrlwareid[ll_mx];
  2298. LOOP
  2299. CLOSE cur_mx;
  2300. ld_lastqty = wfjgmx_out[i].qty
  2301. FOR j = 1 To ll_mx - 1
  2302. // IF ld_lastqty <= ld_noallocqty[j] THEN
  2303. // ld_acceptqty = ld_lastqty
  2304. // ld_lastqty = 0
  2305. // ELSE
  2306. // ld_acceptqty = ld_noallocqty[j]
  2307. // ld_lastqty = ld_lastqty - ld_noallocqty[j]
  2308. // END IF
  2309. ll_printid++
  2310. IF uo_ware.acceptmx(ll_mtrlwareid[j],&
  2311. ld_lastqty ,&
  2312. wfjgmx_out[i].unit,&
  2313. ld_lastqty ,&
  2314. wfjgmx_out[i].dscrp,&
  2315. ll_printid,&
  2316. arg_msg,&
  2317. 1,&
  2318. wfjgid,&
  2319. wfjgmx_out[i].printid,&
  2320. 1,&
  2321. 0,&
  2322. '',&
  2323. wfjgmx_out[i].dscrp2) = 0 THEN
  2324. arg_msg = "行:"+String(i)+","+arg_msg
  2325. rslt = 0
  2326. GOTO ext
  2327. END IF
  2328. IF ld_lastqty = 0 THEN EXIT
  2329. NEXT
  2330. NEXT
  2331. //保存发出单
  2332. IF uo_ware.Save(False,arg_msg) = 0 THEN
  2333. rslt = 0
  2334. GOTO ext
  2335. END IF
  2336. //
  2337. ext:
  2338. Destroy uo_ware
  2339. IF rslt = 0 THEN
  2340. ROLLBACK Using commit_transaction;
  2341. arg_msg = "辅助建立外协发出单失败,"+arg_msg
  2342. ELSEIF arg_ifcommit THEN
  2343. COMMIT Using commit_transaction;
  2344. END IF
  2345. RETURN rslt
  2346. end function
  2347. public function integer addmxcmpl (long arg_scid, long arg_wfjgid, long arg_mtrlid, long arg_orderid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit, long arg_printid);Int rslt = 1,cnt = 0
  2348. IF arg_wfjgid <= 0 THEN
  2349. rslt = 0
  2350. arg_msg = '错误外加工计划唯一码'
  2351. GOTO ext
  2352. END IF
  2353. IF arg_addqty = 0 THEN
  2354. rslt = 1
  2355. GOTO ext
  2356. END IF
  2357. IF p_getinfo(arg_scid,arg_wfjgid,arg_msg) = 0 THEN
  2358. rslt = 0
  2359. GOTO ext
  2360. END IF
  2361. IF status <> 1 AND status <> 5 THEN
  2362. rslt = 0
  2363. IF status <> 1 THEN
  2364. arg_msg = "外加工计划只有在进行状态下才可以执行进仓"
  2365. ELSEIF status <> 5 THEN
  2366. arg_msg = "外加工计划只有在完成状态下才可以撤消进仓"
  2367. END IF
  2368. GOTO ext
  2369. END IF
  2370. Long ls_isbuylimit,ll_relid2
  2371. Decimal ls_buyqty,ls_consignedqty = 0
  2372. String ls_mtrlcode
  2373. SELECT isbuylimit,mtrlcode INTO :ls_isbuylimit,:ls_mtrlcode FROM u_mtrldef
  2374. WHERE mtrlid = :arg_mtrlid
  2375. USING commit_transaction;
  2376. IF commit_transaction.SQLCode <> 0 THEN
  2377. rslt = 0
  2378. IF Pos(Lower(sqlca.SQLErrText),'more than') > 0 THEN
  2379. arg_msg = '查询物料资料失败,查询数据返回值多于一个'
  2380. ELSE
  2381. arg_msg = '查询物料资料失败'
  2382. END IF
  2383. GOTO ext
  2384. END IF
  2385. SELECT u_order_wfjgMx.qty,
  2386. u_order_wfjgMx.consignedqty + u_order_wfjgMx.wasteqty,
  2387. u_order_wfjgMx.relid2
  2388. INTO :ls_buyqty,
  2389. :ls_consignedqty,
  2390. :ll_relid2
  2391. FROM u_order_wfjgMx
  2392. WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjgid ) AND
  2393. ( u_order_wfjgMx.scid = :arg_scid ) AND
  2394. ( u_order_wfjgMx.mtrlid = :arg_mtrlid ) AND
  2395. ( u_order_wfjgMx.status = :arg_status ) AND
  2396. u_order_wfjgMx.woodcode = :arg_woodcode AND
  2397. u_order_wfjgMx.pcode = :arg_pcode AND
  2398. u_order_wfjgMx.printid = :arg_printid USING commit_transaction;
  2399. IF commit_transaction.SQLCode <> 0 THEN
  2400. rslt = 0
  2401. IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN
  2402. arg_msg = '查询外加工计划已完成数量失败,查询数据返回值多于一个'
  2403. ELSE
  2404. arg_msg = "物料编码["+ls_mtrlcode+"]不存在对应属性的外加工计划明细"
  2405. END IF
  2406. GOTO ext
  2407. END IF
  2408. IF sys_option_ifovertask_wfjg = 0 THEN
  2409. IF ls_buyqty < ls_consignedqty + arg_addqty THEN
  2410. rslt = 0
  2411. arg_msg = "物料["+ls_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty,'#,##0.0###')+",不能入库"+String(arg_addqty,'#,##0.0#')
  2412. GOTO ext
  2413. END IF
  2414. END IF
  2415. // or :arg_orderid=0 荣改20170506
  2416. UPDATE u_order_wfjgMx
  2417. SET consignedqty = consignedqty + :arg_addqty
  2418. WHERE ( u_order_wfjgMx.wfjgid = :arg_wfjgid ) AND
  2419. ( u_order_wfjgMx.scid = :arg_scid ) AND
  2420. ( u_order_wfjgMx.mtrlid = :arg_mtrlid ) AND
  2421. ( u_order_wfjgMx.status = :arg_status ) AND
  2422. ( u_order_wfjgMx.orderid = :arg_orderid or :arg_orderid=0 ) AND
  2423. u_order_wfjgMx.woodcode = :arg_woodcode AND
  2424. u_order_wfjgMx.pcode = :arg_pcode AND
  2425. u_order_wfjgMx.printid = :arg_printid USING commit_transaction;
  2426. IF commit_transaction.SQLCode <> 0 THEN
  2427. rslt = 0
  2428. arg_msg = "因网络或错误产品唯一码导致外加工计划完成数量操作失败"+"~n"+commit_transaction.SQLErrText
  2429. GOTO ext
  2430. END IF
  2431. IF ll_relid2 > 0 THEN
  2432. UPDATE u_OrderRqMtrl
  2433. SET inqty = inqty + :arg_addqty
  2434. Where mxpkid = :ll_relid2 USING commit_transaction;
  2435. IF commit_transaction.SQLCode <> 0 THEN
  2436. rslt = 0
  2437. arg_msg = "因网络或其它原因导致更新销售订单明细的外协需求已订货数操作失败"+"~n"+commit_transaction.SQLErrText
  2438. GOTO ext
  2439. END IF
  2440. END IF
  2441. it_newbegin = FALSE
  2442. it_updatebegin = FALSE
  2443. ext:
  2444. IF rslt = 0 THEN
  2445. ROLLBACK USING commit_transaction;
  2446. ELSEIF arg_ifcommit THEN
  2447. COMMIT USING commit_transaction;
  2448. END IF
  2449. p_reset()
  2450. arg_msg = '外协订单,'+ arg_msg
  2451. Return (rslt)
  2452. end function
  2453. public function integer acceptmx_out (long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_dscrp2, string arg_plancode, string arg_saletaskcode);//return 0 fail 1 success
  2454. // 函数增加一个明细项
  2455. Long rslt = 1,cnt = 0,ls_i
  2456. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  2457. rslt = 0
  2458. arg_msg = "非编辑状态不可以使用,操作取消"
  2459. GOTO ext
  2460. END IF
  2461. //清除空值
  2462. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  2463. IF IsNull(arg_qty) THEN arg_qty = 0
  2464. IF IsNull(arg_price) THEN arg_price = 0
  2465. IF IsNull(arg_dscrp) THEN arg_dscrp = ''
  2466. IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = ''
  2467. IF IsNull(arg_printid) THEN arg_printid = 0
  2468. IF IsNull(arg_storageid) THEN arg_storageid = 0
  2469. IF IsNull(arg_status) THEN arg_status = ''
  2470. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  2471. IF IsNull(arg_pcode) THEN arg_pcode = ''
  2472. IF IsNull(arg_dscrp2) THEN arg_dscrp2 = ''
  2473. IF IsNull(arg_plancode) THEN arg_plancode = ''
  2474. IF IsNull(arg_saletaskcode) THEN arg_saletaskcode = ''
  2475. IF arg_mtrlid = 0 OR arg_qty = 0 THEN // 如果进仓数量为 0,或物料编号为空,则不作任何处理
  2476. rslt = 1
  2477. GOTO ext
  2478. END IF
  2479. IF arg_price < 0 THEN
  2480. rslt = 0
  2481. arg_msg = "物料:" + String(arg_mtrlcode)+" 单价错误"
  2482. GOTO ext
  2483. END IF
  2484. //检查物料id
  2485. SELECT count(*)
  2486. INTO :cnt
  2487. FROM u_mtrldef
  2488. Where u_mtrldef.mtrlid = :arg_mtrlid ;
  2489. IF sqlca.SQLCode <> 0 THEN
  2490. rslt = 0
  2491. arg_msg = "查询操作失败,物料编号"
  2492. GOTO ext
  2493. END IF
  2494. IF cnt = 0 THEN
  2495. rslt = 0
  2496. arg_msg = "错误的产品编号: "+String(arg_mtrlcode)
  2497. GOTO ext
  2498. END IF
  2499. cnt = 0
  2500. SELECT count(*)
  2501. INTO :cnt
  2502. FROM u_storage
  2503. Where u_storage.storageid = :arg_storageid ;
  2504. IF sqlca.SQLCode <> 0 THEN
  2505. rslt = 0
  2506. arg_msg = "查询操作失败,仓库编号"
  2507. GOTO ext
  2508. END IF
  2509. IF cnt = 0 THEN
  2510. rslt = 0
  2511. arg_msg = "错误的仓库编号"
  2512. GOTO ext
  2513. END IF
  2514. FOR ls_i = 1 TO it_mxbt_out //合并重复项
  2515. IF wfjgmx_out[ls_i].mtrlid = arg_mtrlid AND &
  2516. wfjgmx_out[ls_i].status = arg_status AND &
  2517. wfjgmx_out[ls_i].woodcode = arg_woodcode AND &
  2518. wfjgmx_out[ls_i].pcode = arg_pcode THEN
  2519. wfjgmx_out[ls_i].qty = wfjgmx_out[ls_i].qty+arg_qty
  2520. rslt = 1
  2521. GOTO ext
  2522. END IF
  2523. NEXT
  2524. //写入内容
  2525. it_mxbt_out++
  2526. wfjgmx_out[it_mxbt_out].mtrlid = arg_mtrlid
  2527. wfjgmx_out[it_mxbt_out].qty = arg_qty
  2528. wfjgmx_out[it_mxbt_out].dscrp = arg_dscrp
  2529. wfjgmx_out[it_mxbt_out].mtrlcode = arg_mtrlcode
  2530. wfjgmx_out[it_mxbt_out].printid = arg_printid
  2531. wfjgmx_out[it_mxbt_out].price = arg_price
  2532. wfjgmx_out[it_mxbt_out].storageid = arg_storageid
  2533. wfjgmx_out[it_mxbt_out].status = arg_status
  2534. wfjgmx_out[it_mxbt_out].woodcode = arg_woodcode
  2535. wfjgmx_out[it_mxbt_out].pcode = arg_pcode
  2536. wfjgmx_out[it_mxbt_out].dscrp2 = arg_dscrp2
  2537. wfjgmx_out[it_mxbt_out].plancode = arg_plancode
  2538. wfjgmx_out[it_mxbt_out].saletaskcode = arg_saletaskcode
  2539. ext:
  2540. IF rslt = 0 THEN p_clearmx()
  2541. arg_msg = '外协订单,'+ arg_msg
  2542. Return(rslt)
  2543. end function
  2544. on uo_order_wfjg.create
  2545. call super::create
  2546. TriggerEvent( this, "constructor" )
  2547. end on
  2548. on uo_order_wfjg.destroy
  2549. TriggerEvent( this, "destructor" )
  2550. call super::destroy
  2551. end on