uo_order_ml.sru 91 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612
  1. $PBExportHeader$uo_order_ml.sru
  2. forward
  3. global type uo_order_ml from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_order_ml from nonvisualobject
  7. end type
  8. global uo_order_ml uo_order_ml
  9. type variables
  10. PUBLIC PROTECTEDWRITE Long scid
  11. PUBLIC PROTECTEDWRITE Long taskid
  12. PUBLIC PROTECTEDWRITE String taskcode
  13. PUBLIC PROTECTEDWRITE DateTime opdate
  14. PUBLIC PROTECTEDWRITE String operator
  15. PUBLIC PROTECTEDWRITE DateTime accomplishdate
  16. PUBLIC PROTECTEDWRITE String permit_emp
  17. PUBLIC PROTECTEDWRITE String last_emp
  18. long MtrlID
  19. decimal SaleQty
  20. string mxdscrp
  21. string status
  22. string pcode
  23. string woodcode
  24. long outtype
  25. string unit
  26. datetime sclldate
  27. string scllrep
  28. long scllflag
  29. datetime auditingdate
  30. string auditingrep
  31. long flag
  32. string mtrlcode
  33. Transaction commit_transaction //数据commit事务
  34. PRIVATE:
  35. s_saletaskmx saletaskmx[] //明细结构
  36. Long it_mxbt = 0 //明细结构数组末指针
  37. Boolean it_newbegin = TRUE //新建标志
  38. Boolean it_updatebegin = FALSE//修改标志
  39. Long it_mxbt_mx = 0
  40. decimal mx_sumqty = 0
  41. end variables
  42. forward prototypes
  43. public function integer salemxprimt (long arg_scid, long arg_taskid, long arg_printid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  44. public function integer c_salemxprimt (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  45. public function integer uof_pz_change (long arg_type, string arg_updatestr, long arg_rqmtrlid, ref string arg_msg)
  46. public function integer c_salemxscllprimt (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  47. public function integer add_mxdscrp (long arg_scid, long arg_taskid, long arg_printid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  48. private function integer p_getinfo (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg)
  49. public function integer uof_cmp (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  50. public function integer uof_cmp_mx (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, decimal arg_qty, string arg_status, string arg_woodcode, string arg_pcode, integer arg_type, boolean arg_ifcommit)
  51. public function integer uof_delcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit)
  52. public function integer uof_buildcard1 (long arg_scid[], long arg_taskid[], long arg_printid[], long arg_qty[], string arg_operator, ref string arg_msg, boolean arg_ifcommit)
  53. public function integer uof_delcard1 (long arg_cardid[], string arg_cardcode[], long arg_row[], long arg_scid[], long arg_taskid[], long arg_printid[], ref string arg_msg, boolean arg_ifcommit)
  54. public function integer uof_auditcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit)
  55. public function integer uof_cauditcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit)
  56. public function integer uof_sc (s_saletaskmx arg_mx[], long arg_itmx, integer arg_scflag, ref string arg_msg)
  57. public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg)
  58. public function integer uof_cmp_workprice (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, boolean arg_ifcommit, ref string arg_msg)
  59. public function integer uof_add_workprice (s_order_ml_workprice_array arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg)
  60. public function integer uof_order_add_pro (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  61. public function int p_reset ()
  62. public function integer uof_finish_procode_qty (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, integer arg_type, ref string arg_msg, boolean arg_ifcommit)
  63. public function integer uof_mod_rqmtrl (s_order_ml_rqmtrl arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg)
  64. public function integer uof_auto_build_buy_forrq (long arg_mxpkid[], ref string arg_msg, boolean arg_ifcommit)
  65. public function integer uof_auto_build_buy_forarr (long arg_scid[], long arg_taskid[], long arg_printid[], ref string arg_msg, boolean arg_ifcommit)
  66. public function integer uof_auto_build_buy_notuse (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  67. public function integer salemxscllprimt (long arg_scid, long arg_taskid, long arg_printid, integer arg_chk_zero, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  68. public function integer uof_add_procode_qty (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  69. public function integer uof_finish_procode_qty_dsr (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, long arg_type, decimal arg_fpqty, ref string arg_msg, boolean arg_ifcommit)
  70. public subroutine uof_workprice_parm (decimal arg_orderqty, string arg_status, string arg_woodcode, string arg_pcode, string arg_ls_mtrlsectype, string arg_ls_zxmtrlmode, string arg_ls_mtrlmode, string arg_ls_cuscode, string arg_ls_cusname, string arg_parmstr, ref decimal arg_value_dec, decimal arg_price)
  71. end prototypes
  72. public function integer salemxprimt (long arg_scid, long arg_taskid, long arg_printid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//salepermit
  73. Int rslt = 1,cnt = 0
  74. Int ll_flag
  75. IF arg_taskid <= 0 THEN
  76. rslt = 0
  77. ARG_MSG = '错误销售订单唯一码'
  78. GOTO ext
  79. END IF
  80. SELECT flag
  81. INTO :ll_flag
  82. FROM u_saletaskmx
  83. WHERE scid = :Arg_scid AND
  84. taskid = :arg_taskid AND
  85. printid = :arg_printid;
  86. IF commit_transaction.SQLCode <> 0 THEN
  87. rslt = 0
  88. ARG_MSG = "查询操作失败,销售订单明细内容!"
  89. GOTO ext
  90. END IF
  91. IF ll_flag <> 0 THEN
  92. rslt = 0
  93. ARG_MSG = "销售订单明细已经审核,操作取消"
  94. GOTO ext
  95. END IF
  96. cnt = 0
  97. SELECT count(*) INTO :cnt
  98. FROM u_user
  99. Where username = :arg_emp USING commit_transaction;
  100. IF commit_transaction.SQLCode <> 0 THEN
  101. rslt = 0
  102. ARG_MSG = "查询操作失败,操作员!"
  103. GOTO ext
  104. END IF
  105. IF cnt = 0 THEN
  106. rslt = 0
  107. ARG_MSG = "操作员姓名未登记或已取消!"
  108. GOTO ext
  109. END IF
  110. UPDATE u_SaleTaskmx
  111. SET auditingrep = :arg_emp ,auditingdate = getdate(),
  112. flag = 1
  113. WHERE TaskID = :arg_taskid AND
  114. scid = :arg_scid AND
  115. printid = :arg_printid
  116. USING commit_transaction;
  117. IF commit_transaction.SQLCode <> 0 THEN
  118. rslt = 0
  119. ARG_MSG = "因网络或其它原因导致销售订单明细审核操作失败"+"~n"+commit_transaction.SQLErrText
  120. GOTO ext
  121. END IF
  122. ext:
  123. IF rslt = 0 THEN
  124. ROLLBACK USING commit_transaction;
  125. ELSEIF arg_ifcommit THEN
  126. COMMIT USING commit_transaction;
  127. END IF
  128. Return (rslt)
  129. end function
  130. public function integer c_salemxprimt (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);//salepermit
  131. Int rslt = 1,cnt = 0
  132. Int ll_flag
  133. DateTime nulldate
  134. SetNull(nulldate)
  135. IF arg_taskid <= 0 THEN
  136. rslt = 0
  137. ARG_MSG = '错误销售订单唯一码'
  138. GOTO ext
  139. END IF
  140. SELECT flag
  141. INTO :ll_flag
  142. FROM u_saletaskmx
  143. WHERE scid = :Arg_scid AND
  144. taskid = :arg_taskid AND
  145. printid = :arg_printid;
  146. IF commit_transaction.SQLCode <> 0 THEN
  147. rslt = 0
  148. ARG_MSG = "查询操作失败,销售订单明细内容!"
  149. GOTO ext
  150. END IF
  151. IF ll_flag = 0 THEN
  152. rslt = 0
  153. ARG_MSG = "销售订单明细还没有审核,操作取消"
  154. GOTO ext
  155. END IF
  156. Decimal ld_DstrQty
  157. SELECT sum(u_saleRqMtrl_scll.DstrQty)
  158. INTO :ld_DstrQty
  159. FROM u_saleRqMtrl_scll
  160. WHERE TaskID = :arg_taskid AND
  161. scid = :arg_scid AND
  162. printid = :arg_printid
  163. Using commit_transaction;
  164. IF commit_transaction.SQLCode <> 0 THEN
  165. rslt = 0
  166. ARG_MSG = "因网络或其它原因导致销查询领料明细操作失败"+"~n"+commit_transaction.SQLErrText
  167. GOTO ext
  168. END IF
  169. IF ld_DstrQty > 0 THEN
  170. rslt = 0
  171. ARG_MSG = "已开相关领料单,撤审操作取消"+"~n"
  172. GOTO ext
  173. END IF
  174. //检查计件
  175. //个人产品工序 已开单数
  176. cnt = 0
  177. SELECT COUNT(*)
  178. INTO :cnt
  179. FROM u_scwg_taskwork_2,u_scwg_taskwork_2_mx
  180. WHERE u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid
  181. AND u_scwg_taskwork_2_mx.orderid = :arg_taskid
  182. AND u_scwg_taskwork_2_mx.relprintid = :arg_printid
  183. And u_scwg_taskwork_2_mx.relscid = :arg_scid Using commit_transaction;
  184. IF commit_transaction.SQLCode <> 0 THEN
  185. ARG_MSG = "查询是否建立个人产品工序计件单操作失败"+"~n"+commit_transaction.SQLErrText
  186. rslt = 0
  187. GOTO ext
  188. END IF
  189. IF cnt > 0 THEN
  190. rslt = 0
  191. ARG_MSG = "销售订单已经有相关个人产品工序计件单,不可以撤消审核"
  192. GOTO ext
  193. END IF
  194. //产品个人工序 已开单数
  195. cnt = 0
  196. SELECT COUNT(*)
  197. INTO :cnt
  198. FROM u_sc_taskworkmx,u_sc_taskwork
  199. WHERE u_sc_taskworkmx.billid = u_sc_taskwork.billid
  200. AND u_sc_taskworkmx.scid = u_sc_taskwork.scid
  201. And u_sc_taskwork.orderid = :arg_taskid
  202. AND u_sc_taskwork.relid = :arg_printid;
  203. IF sqlca.SQLCode <> 0 THEN
  204. ARG_MSG = "查询是否建立产品个人工序计件单操作失败"+"~n"+commit_transaction.SQLErrText
  205. rslt = 0
  206. GOTO ext
  207. END IF
  208. IF cnt > 0 THEN
  209. rslt = 0
  210. ARG_MSG = "销售订单已经有相关产品个人工序计件单,不可以撤消审核"
  211. GOTO ext
  212. END IF
  213. UPDATE u_SaleTaskmx
  214. SET auditingrep = '' ,auditingdate = :nulldate,
  215. flag = 0
  216. WHERE TaskID = :arg_taskid AND
  217. scid = :arg_scid AND
  218. printid = :arg_printid AND
  219. flag = 1
  220. Using commit_transaction;
  221. IF commit_transaction.SQLCode <> 0 THEN
  222. rslt = 0
  223. ARG_MSG = "因网络或其它原因导致销售订单明细撤销审核操作失败"+"~n"+commit_transaction.SQLErrText
  224. GOTO ext
  225. END IF
  226. // DONE: 删除运算结果
  227. DELETE FROM u_orderRqMtrl
  228. WHERE taskid = :arg_taskid
  229. AND scid = :arg_scid
  230. And printid = :arg_printid Using commit_transaction;
  231. IF commit_transaction.SQLCode <> 0 THEN
  232. rslt = 0
  233. ARG_MSG = '删除物料需求表失败,' + commit_transaction.SQLErrText
  234. GOTO ext
  235. END IF
  236. DELETE FROM u_orderRqMtrl_tree
  237. WHERE taskid = :arg_taskid
  238. AND scid = :arg_scid
  239. AND printid = :arg_printid
  240. Using commit_transaction;
  241. IF commit_transaction.SQLCode <> 0 THEN
  242. rslt = 0
  243. ARG_MSG = '删除物料需求结构表失败,' + commit_transaction.SQLErrText
  244. GOTO ext
  245. END IF
  246. DELETE FROM u_saleRqMtrl_scll
  247. WHERE u_saleRqMtrl_scll.scid = :arg_scid AND
  248. u_saleRqMtrl_scll.taskID = :arg_taskid AND
  249. u_saleRqMtrl_scll.printid = :arg_printid
  250. Using commit_transaction;
  251. IF commit_transaction.SQLCode <> 0 THEN
  252. rslt = 0
  253. ARG_MSG = '删除领料明细表失败,' + commit_transaction.SQLErrText
  254. GOTO ext
  255. END IF
  256. //删除工价表
  257. DELETE FROM U_OrderRqwp
  258. WHERE U_OrderRqwp.scid = :Arg_scid AND
  259. U_OrderRqwp.taskid = :arg_taskid AND
  260. u_orderrqwp.printid = :arg_printid Using commit_transaction;
  261. IF commit_transaction.SQLCode <> 0 THEN
  262. rslt = 0
  263. arg_msg = '删除订单明细产品' + mtrlcode + '对应的工价明细失败'+"~n"+commit_transaction.SQLErrText
  264. GOTO ext
  265. END IF
  266. ext:
  267. IF rslt = 0 THEN
  268. ROLLBACK Using commit_transaction;
  269. ELSEIF arg_ifcommit THEN
  270. COMMIT Using commit_transaction;
  271. END IF
  272. Return (rslt)
  273. end function
  274. public function integer uof_pz_change (long arg_type, string arg_updatestr, long arg_rqmtrlid, ref string arg_msg);Int rslt = 1
  275. CHOOSE CASE arg_type
  276. CASE 1
  277. UPDATE u_saleRqMtrl_scll
  278. SET status = :arg_updatestr
  279. Where u_saleRqMtrl_scll.rqmtrlid = :arg_rqmtrlid;
  280. IF sqlca.SQLCode <> 0 THEN
  281. arg_msg = '更新失败,'+sqlca.SQLErrText
  282. rslt = 0
  283. GOTO ext
  284. END IF
  285. CASE 2
  286. UPDATE u_saleRqMtrl_scll
  287. SET woodcode = :arg_updatestr
  288. Where u_saleRqMtrl_scll.rqmtrlid = :arg_rqmtrlid;
  289. IF sqlca.SQLCode <> 0 THEN
  290. arg_msg = '更新失败,'+sqlca.SQLErrText
  291. rslt = 0
  292. GOTO ext
  293. END IF
  294. CASE 3
  295. UPDATE u_saleRqMtrl_scll
  296. SET pcode = :arg_updatestr
  297. Where u_saleRqMtrl_scll.rqmtrlid = :arg_rqmtrlid;
  298. IF sqlca.SQLCode <> 0 THEN
  299. arg_msg = '更新失败,'+sqlca.SQLErrText
  300. rslt = 0
  301. GOTO ext
  302. END IF
  303. END CHOOSE
  304. ext:
  305. IF rslt = 0 THEN
  306. ROLLBACK;
  307. ELSE
  308. COMMIT;
  309. END IF
  310. RETURN rslt
  311. end function
  312. public function integer c_salemxscllprimt (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);//salepermit
  313. Int rslt = 1,cnt = 0
  314. Int ll_flag,ll_scllflag
  315. DateTime nulldate
  316. Decimal ld_assignqty,ld_consignedqty
  317. SetNull(nulldate)
  318. IF arg_taskid <= 0 THEN
  319. rslt = 0
  320. ARG_MSG = '错误销售订单唯一码'
  321. GOTO ext
  322. END IF
  323. SELECT flag,
  324. scllflag,
  325. assignqty,
  326. consignedqty
  327. INTO :ll_flag,
  328. :ll_scllflag,
  329. :ld_assignqty,
  330. :ld_consignedqty
  331. FROM u_saletaskmx
  332. WHERE scid = :Arg_scid AND
  333. taskid = :arg_taskid AND
  334. printid = :arg_printid USING commit_transaction;
  335. IF commit_transaction.SQLCode <> 0 THEN
  336. rslt = 0
  337. ARG_MSG = "查询操作失败,销售订单明细内容!"
  338. GOTO ext
  339. END IF
  340. IF ll_flag = 0 THEN
  341. rslt = 0
  342. ARG_MSG = "销售订单明细还没有审核,不能撤销领料审核,操作取消"
  343. GOTO ext
  344. END IF
  345. IF ll_scllflag = 0 THEN
  346. rslt = 0
  347. ARG_MSG = "销售订单明细还没有领料审核,操作取消"
  348. GOTO ext
  349. END IF
  350. IF ld_assignqty > 0 THEN
  351. rslt = 0
  352. ARG_MSG = "销售订单明细已生产进仓,操作取消"
  353. GOTO ext
  354. END IF
  355. IF ld_consignedqty > 0 THEN
  356. rslt = 0
  357. ARG_MSG = "销售订单明细已发货,操作取消"
  358. GOTO ext
  359. END IF
  360. //检查是否已进仓、领料
  361. Decimal ld_dstrqty
  362. SELECT sum(dstrqty)
  363. INTO :ld_dstrqty
  364. FROM u_saleRqMtrl_scll
  365. WHERE u_saleRqMtrl_scll.scid = :arg_scid AND
  366. u_saleRqMtrl_scll.taskID = :arg_taskid AND
  367. u_saleRqMtrl_scll.printid = :arg_printid USING commit_transaction;
  368. IF commit_transaction.SQLCode <> 0 THEN
  369. rslt = 0
  370. ARG_MSG = "因网络或其它原因导致查询领料明细操作失败"+"~n"+commit_transaction.SQLErrText
  371. GOTO ext
  372. END IF
  373. IF ld_dstrqty > 0 THEN
  374. rslt = 0
  375. ARG_MSG = "销售订单明细已领料,操作取消"
  376. GOTO ext
  377. END IF
  378. //检查采购订单
  379. SELECT count(*)
  380. INTO :cnt
  381. FROM u_buytask INNER join u_buytaskmx
  382. on u_buytask.scid = u_buytaskmx.scid
  383. AND u_buytask.taskid = u_buytaskmx.taskid
  384. WHERE u_buytask.scid = :arg_scid
  385. AND u_buytaskmx.relid = :arg_taskid
  386. AND u_buytaskmx.relprintid = :arg_printid
  387. USING commit_transaction;
  388. IF commit_transaction.SQLCode <> 0 THEN
  389. rslt = 0
  390. ARG_MSG = "查询是否开采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  391. GOTO ext
  392. END IF
  393. IF cnt > 0 THEN
  394. rslt = 0
  395. ARG_MSG = "已开采购订单["+String(cnt)+"]"
  396. GOTO ext
  397. END IF
  398. //检查领料单
  399. SELECT count(*)
  400. INTO :cnt
  401. FROM u_outware INNER join u_outwaremx
  402. on u_outware.scid = u_outwaremx.scid
  403. AND u_outware.outwareid = u_outwaremx.outwareid
  404. WHERE u_outware.scid = :arg_scid
  405. AND u_outwaremx.relid = :arg_taskid
  406. AND u_outwaremx.relprintid = :arg_printid
  407. AND u_outware.billtype = 3
  408. USING commit_transaction;
  409. IF commit_transaction.SQLCode <> 0 THEN
  410. rslt = 0
  411. ARG_MSG = "查询是否开领料出仓单操作失败"+"~n"+commit_transaction.SQLErrText
  412. GOTO ext
  413. END IF
  414. IF cnt > 0 THEN
  415. rslt = 0
  416. ARG_MSG = "已开领料出仓单["+String(cnt)+"]"
  417. GOTO ext
  418. END IF
  419. //检查外协订单
  420. SELECT count(*)
  421. INTO :cnt
  422. FROM u_order_wfjgMx INNER JOIN
  423. u_order_wfjg ON u_order_wfjgMx.scid = u_order_wfjg.scid AND
  424. u_order_wfjgMx.wfjgID = u_order_wfjg.wfjgID
  425. WHERE u_order_wfjg.scid = :arg_scid
  426. AND u_order_wfjgMx.orderid = :arg_taskid
  427. AND u_order_wfjgMx.relprintid = :arg_printid
  428. USING commit_transaction;
  429. IF commit_transaction.SQLCode <> 0 THEN
  430. rslt = 0
  431. ARG_MSG = "查询是否开外协订单操作失败"+"~n"+commit_transaction.SQLErrText
  432. GOTO ext
  433. END IF
  434. IF cnt > 0 THEN
  435. rslt = 0
  436. ARG_MSG = "已开外协订单["+String(cnt)+"]"
  437. GOTO ext
  438. END IF
  439. //检查生产进仓单
  440. SELECT count(*)
  441. INTO :cnt
  442. FROM u_inware INNER join u_inwaremx
  443. on u_inware.scid = u_inwaremx.scid
  444. AND u_inware.inwareid = u_inwaremx.inwareid
  445. WHERE u_inware.scid = :arg_scid
  446. AND u_inwaremx.relid = :arg_taskid
  447. AND u_inwaremx.relprintid = :arg_printid
  448. AND u_inware.billtype = 3
  449. USING commit_transaction;
  450. IF commit_transaction.SQLCode <> 0 THEN
  451. rslt = 0
  452. ARG_MSG = "查询是否开生产进仓单操作失败"+"~n"+commit_transaction.SQLErrText
  453. GOTO ext
  454. END IF
  455. IF cnt > 0 THEN
  456. rslt = 0
  457. ARG_MSG = "已开生产进仓单["+String(cnt)+"]"
  458. GOTO ext
  459. END IF
  460. //检查计件
  461. //个人产品工序 已开单数
  462. cnt = 0
  463. SELECT COUNT(*)
  464. INTO :cnt
  465. FROM u_scwg_taskwork_2,u_scwg_taskwork_2_mx
  466. WHERE u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid
  467. AND u_scwg_taskwork_2_mx.orderid = :arg_taskid
  468. AND u_scwg_taskwork_2_mx.relprintid = :arg_printid
  469. And u_scwg_taskwork_2_mx.relscid = :arg_scid Using commit_transaction;
  470. IF commit_transaction.SQLCode <> 0 THEN
  471. ARG_MSG = "查询是否建立个人产品工序计件单操作失败"+"~n"+commit_transaction.SQLErrText
  472. rslt = 0
  473. GOTO ext
  474. END IF
  475. IF cnt > 0 THEN
  476. rslt = 0
  477. ARG_MSG = "销售订单已经有相关个人产品工序计件单,不可以撤消审核"
  478. GOTO ext
  479. END IF
  480. //产品个人工序 已开单数
  481. cnt = 0
  482. SELECT COUNT(*)
  483. INTO :cnt
  484. FROM u_sc_taskworkmx,u_sc_taskwork
  485. WHERE u_sc_taskworkmx.billid = u_sc_taskwork.billid
  486. AND u_sc_taskworkmx.scid = u_sc_taskwork.scid
  487. And u_sc_taskwork.orderid = :arg_taskid
  488. AND u_sc_taskwork.relid = :arg_printid;
  489. IF sqlca.SQLCode <> 0 THEN
  490. ARG_MSG = "查询是否建立产品个人工序计件单操作失败"+"~n"+commit_transaction.SQLErrText
  491. rslt = 0
  492. GOTO ext
  493. END IF
  494. IF cnt > 0 THEN
  495. rslt = 0
  496. ARG_MSG = "销售订单已经有相关产品个人工序计件单,不可以撤消审核"
  497. GOTO ext
  498. END IF
  499. UPDATE u_SaleTaskmx
  500. SET scllrep = '' ,sclldate = :nulldate,
  501. scllflag = 0
  502. WHERE TaskID = :arg_taskid AND
  503. scid = :arg_scid AND
  504. printid = :arg_printid AND
  505. flag = 1 AND scllflag = 1
  506. USING commit_transaction;
  507. IF commit_transaction.SQLCode <> 0 THEN
  508. rslt = 0
  509. ARG_MSG = "因网络或其它原因导致销售订单明细领料撤审操作失败"+"~n"+commit_transaction.SQLErrText
  510. GOTO ext
  511. END IF
  512. ext:
  513. IF rslt = 0 THEN
  514. ROLLBACK USING commit_transaction;
  515. ELSEIF arg_ifcommit THEN
  516. COMMIT USING commit_transaction;
  517. END IF
  518. Return (rslt)
  519. end function
  520. public function integer add_mxdscrp (long arg_scid, long arg_taskid, long arg_printid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart)
  521. //0 fail 1 SUCCESS
  522. Int rslt = 1
  523. arg_newdescppart = Trim(arg_newdescppart)
  524. IF arg_newdescppart = '' THEN
  525. rslt = 0
  526. arG_MSG = "要添加内容为空,操作取消"
  527. GOTO ext
  528. END IF
  529. UPDATE u_saletaskmx
  530. SET mxDSCRP = mxDSCRP+' '+:arg_newdescppart
  531. WHERE u_saletaskmx.taskid = :arg_taskid AND
  532. scid = :arg_scid AND
  533. printid = :arg_printid USING commit_transaction ;
  534. IF commit_transaction.SQLCode <> 0 THEN
  535. rslt = 0
  536. arG_MSG = "因网络或其它原因导致添加销售订单备注操作失败"+"~n"+ commit_transaction.SQLErrText
  537. GOTO ext
  538. END IF
  539. it_newbegin = FALSE
  540. it_updatebegin = FALSE
  541. ext:
  542. IF rslt = 0 THEN
  543. ROLLBACK USING commit_transaction;
  544. ELSEIF arg_ifcommit THEN
  545. COMMIT USING commit_transaction;
  546. END IF
  547. Return (rslt)
  548. end function
  549. private function integer p_getinfo (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg);Int rslt = 1
  550. SELECT u_SaleTaskMx.MtrlID,
  551. u_SaleTaskMx.mxdscrp,
  552. u_SaleTaskMx.status,
  553. u_SaleTaskMx.pcode,
  554. u_SaleTaskMx.woodcode,
  555. u_SaleTaskMx.outtype,
  556. u_SaleTaskMx.unit,
  557. u_SaleTaskMx.sclldate,
  558. u_SaleTaskMx.scllrep,
  559. u_SaleTaskMx.scllflag,
  560. u_SaleTaskMx.auditingdate,
  561. u_SaleTaskMx.auditingrep,
  562. u_SaleTaskMx.flag,
  563. u_mtrldef.mtrlcode
  564. INTO :MtrlID,
  565. :mxdscrp,
  566. :status,
  567. :pcode,
  568. :woodcode,
  569. :outtype,
  570. :unit,
  571. :sclldate,
  572. :scllrep,
  573. :scllflag,
  574. :auditingdate,
  575. :auditingrep,
  576. :flag,
  577. :mtrlcode
  578. FROM u_SaleTaskMx,u_mtrldef
  579. WHERE u_SaleTaskMx.scid = :Arg_scid AND
  580. u_SaleTaskMx.taskid = :arg_taskid AND
  581. u_SaleTaskMx.printid = :Arg_printid and
  582. u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid;
  583. IF commit_transaction.SQLCode <> 0 THEN
  584. rslt = 0
  585. ARG_MSG = '查询订单内容失败(错误订单唯一码)'
  586. GOTO ext
  587. END IF
  588. ext:
  589. RETURN rslt
  590. end function
  591. public function integer uof_cmp (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  592. Decimal orderqty
  593. Long ll_mtrlid
  594. String ls_status,ls_woodcode,ls_pcode
  595. Long ll_scllflag
  596. SELECT u_saletaskmx.orderqty,
  597. u_saletaskmx.mtrlid,
  598. u_saletaskmx.status,
  599. u_saletaskmx.woodcode,
  600. u_saletaskmx.pcode,
  601. u_saletaskmx.scllflag
  602. INTO :orderqty,
  603. :ll_mtrlid,
  604. :ls_status,
  605. :ls_woodcode,
  606. :ls_pcode,
  607. :ll_scllflag
  608. FROM u_saletaskmx
  609. WHERE u_saletaskmx.scid = :Arg_scid AND
  610. u_saletaskmx.taskid = :arg_taskid AND
  611. u_saletaskmx.printid = :arg_printid USING commit_transaction;
  612. IF commit_transaction.SQLCode <> 0 THEN
  613. rslt = 0
  614. arg_msg = '查询订单明细信息失败'
  615. GOTO ext
  616. END IF
  617. IF ll_scllflag = 1 THEN
  618. arg_msg = '已用料审核,不能再计算'
  619. END IF
  620. Long ll_sum
  621. SELECT sum(u_saleRqMtrl_scll.dstrqty)
  622. INTO :ll_sum
  623. FROM u_saleRqMtrl_scll WHERE u_saleRqMtrl_scll.scid = :Arg_scid AND
  624. u_saleRqMtrl_scll.taskid = :arg_taskid AND
  625. u_saleRqMtrl_scll.printid = :arg_printid USING commit_transaction;
  626. IF commit_transaction.SQLCode <> 0 THEN
  627. rslt = 0
  628. arg_msg = '查询需求明细已开单数量失败'
  629. GOTO ext
  630. END IF
  631. IF ll_sum > 0 THEN
  632. rslt = 0
  633. arg_msg = '需求明细已开领料单,不能再用料运算'
  634. GOTO ext
  635. END IF
  636. DELETE FROM u_saleRqMtrl_scll
  637. WHERE u_saleRqMtrl_scll.scid = :Arg_scid AND
  638. u_saleRqMtrl_scll.taskid = :arg_taskid AND
  639. u_saleRqMtrl_scll.printid = :arg_printid USING commit_transaction;
  640. IF commit_transaction.SQLCode <> 0 THEN
  641. rslt = 0
  642. arg_msg = '删除订单明细对应的需求明细失败'
  643. GOTO ext
  644. END IF
  645. IF uof_cmp_mx(Arg_scid,arg_taskid,arg_printid,ll_mtrlid,orderqty,ls_status,ls_woodcode,ls_pcode,1,FALSE) = 0 THEN
  646. rslt = 0
  647. arg_msg = '生成订单明细对应的需求明细失败'
  648. GOTO ext
  649. END IF
  650. ext:
  651. IF rslt = 0 THEN
  652. ROLLBACK USING commit_transaction;
  653. ELSEIF arg_ifcommit THEN
  654. COMMIT USING commit_transaction;
  655. END IF
  656. Return (rslt)
  657. end function
  658. public function integer uof_cmp_mx (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, decimal arg_qty, string arg_status, string arg_woodcode, string arg_pcode, integer arg_type, boolean arg_ifcommit);Long it_mxbt1,i,mtrlorigin,ls_newid
  659. Long rslt = 1
  660. s_outwaremx outwaremx[]
  661. String ls_msg
  662. SELECT mtrlorigin
  663. INTO :mtrlorigin
  664. FROM u_mtrldef
  665. Where mtrlid = :arg_mtrlid USING commit_transaction;
  666. IF commit_transaction.SQLCode <> 0 THEN
  667. rslt = 0
  668. GOTO ext
  669. END IF
  670. SELECT count(*)
  671. INTO :i
  672. FROM u_PrdPF
  673. Where u_PrdPF.mtrlid = :arg_mtrlid USING commit_transaction;
  674. IF commit_transaction.SQLCode <> 0 THEN
  675. rslt = 0
  676. GOTO ext
  677. END IF
  678. IF i = 0 OR mtrlorigin = 2 THEN
  679. IF arg_type = 1 THEN
  680. rslt = 1
  681. GOTO ext
  682. END IF
  683. ls_newid = f_sys_scidentity(arg_scid,"u_saleRqMtrl_scll","rqmtrlid",ls_msg,TRUE,commit_transaction)
  684. IF ls_newid <= 0 THEN
  685. rslt = 0
  686. GOTO ext
  687. END IF
  688. ////插入运算结果表
  689. UPDATE u_saleRqMtrl_scll
  690. SET trueRqqty = trueRqqty + :arg_qty
  691. WHERE scid = :arg_scid AND
  692. taskID = :arg_taskID AND
  693. MtrlID = :arg_mtrlid AND
  694. printid = :arg_printid AND
  695. status = :arg_status AND
  696. woodcode = :arg_woodcode AND
  697. pcode = :arg_pcode USING commit_transaction;
  698. IF commit_transaction.SQLCode = 0 THEN
  699. IF commit_transaction.SQLNRows = 0 THEN
  700. INSERT INTO u_saleRqMtrl_scll
  701. ( rqmtrlid,
  702. scid,
  703. taskID,
  704. MtrlID,
  705. printid,
  706. trueRqqty,
  707. status,
  708. woodcode,
  709. pcode
  710. )
  711. VALUES ( :ls_newid,
  712. :arg_scid,
  713. :arg_taskID,
  714. :arg_mtrlid,
  715. :arg_printid,
  716. :arg_qty,
  717. :arg_status,
  718. :arg_woodcode,
  719. :arg_pcode
  720. ) USING commit_transaction;
  721. IF commit_transaction.SQLCode <> 0 THEN
  722. rslt = 0
  723. GOTO ext
  724. END IF
  725. END IF
  726. ELSE
  727. rslt = 0
  728. GOTO ext
  729. END IF
  730. END IF
  731. it_mxbt1 = 1
  732. DECLARE cur_outwaremx CURSOR FOR
  733. SELECT u_PrdPF.SonMtrlid,
  734. u_mtrldef.mtrlcode ,
  735. u_mtrldef.mtrlname ,
  736. u_mtrldef.mtrlmode,
  737. u_mtrldef.unit ,
  738. u_mtrldef.mtrlsectype,
  739. u_mtrldef.zxmtrlmode,
  740. u_PrdPF.status,
  741. u_PrdPF.woodcode,
  742. u_PrdPF.pcode,
  743. reqty = case when u_PrdPF.sonloss = 1 then 0 else :arg_qty * u_PrdPF.Sonscale /( 1 - u_PrdPF.sonloss) + u_PrdPF.sondecloss END
  744. FROM u_PrdPF ,
  745. u_mtrldef
  746. WHERE ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) AND
  747. ( u_PrdPF.mtrlid = :arg_mtrlid ) USING commit_transaction;
  748. OPEN cur_outwaremx;
  749. FETCH cur_outwaremx INTO
  750. :outwaremx[it_mxbt1].Mtrlid,
  751. :outwaremx[it_mxbt1].mtrlcode,
  752. :outwaremx[it_mxbt1].mtrlname,
  753. :outwaremx[it_mxbt1].mtrlmode,
  754. :outwaremx[it_mxbt1].unit,
  755. :outwaremx[it_mxbt1].mtrlsectype,
  756. :outwaremx[it_mxbt1].zxmtrlmode,
  757. :outwaremx[it_mxbt1].status,
  758. :outwaremx[it_mxbt1].woodcode,
  759. :outwaremx[it_mxbt1].pcode,
  760. :outwaremx[it_mxbt1].qty;
  761. DO WHILE commit_transaction.SQLCode = 0
  762. it_mxbt1++
  763. FETCH cur_outwaremx INTO
  764. :outwaremx[it_mxbt1].Mtrlid,
  765. :outwaremx[it_mxbt1].mtrlcode,
  766. :outwaremx[it_mxbt1].mtrlname,
  767. :outwaremx[it_mxbt1].mtrlmode,
  768. :outwaremx[it_mxbt1].mtrlsectype,
  769. :outwaremx[it_mxbt1].zxmtrlmode,
  770. :outwaremx[it_mxbt1].unit,
  771. :outwaremx[it_mxbt1].status,
  772. :outwaremx[it_mxbt1].woodcode,
  773. :outwaremx[it_mxbt1].pcode,
  774. :outwaremx[it_mxbt1].qty;
  775. LOOP
  776. CLOSE cur_outwaremx;
  777. it_mxbt1 = it_mxbt1 - 1
  778. FOR i = 1 TO it_mxbt1
  779. IF uof_cmp_mx(arg_scid,arg_taskID,arg_printid,outwaremx[i].mtrlid,outwaremx[i].qty,outwaremx[i].status,outwaremx[i].woodcode,outwaremx[i].pcode,0,FALSE) = 0 THEN
  780. rslt = 0
  781. GOTO ext
  782. END IF
  783. NEXT
  784. ext:
  785. IF rslt = 0 THEN
  786. ROLLBACK USING commit_transaction;
  787. ELSEIF arg_ifcommit THEN
  788. COMMIT USING commit_transaction;
  789. END IF
  790. RETURN rslt
  791. end function
  792. public function integer uof_delcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  793. Long i
  794. String ls_cardcode
  795. String ls_mtrlcode,ls_taskcode
  796. Long ls_printid,ll_taskid,ll_scid
  797. String ls_status,ls_woodcode,ls_pcode
  798. SELECT u_mtrldef.mtrlcode,
  799. u_saletaskmx.printid,
  800. u_saletask.taskcode,
  801. u_saletaskmx.status,
  802. u_saletaskmx.woodcode,
  803. u_saletaskmx.pcode,
  804. u_saletaskmx.taskid,
  805. u_saletaskmx.scid
  806. INTO :ls_mtrlcode,
  807. :ls_printid,
  808. :ls_taskcode,
  809. :ls_status,
  810. :ls_woodcode,
  811. :ls_pcode,
  812. :ll_taskid,
  813. :ll_scid
  814. FROM u_saletaskmx_card INNER JOIN
  815. u_SaleTaskMx ON u_saletaskmx_card.scid = u_SaleTaskMx.scid AND
  816. u_saletaskmx_card.taskid = u_SaleTaskMx.TaskID AND
  817. u_saletaskmx_card.mxprintid = u_SaleTaskMx.printid INNER JOIN
  818. u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid INNER JOIN
  819. u_SaleTask ON u_SaleTask.TaskID = u_SaleTaskMx.TaskID AND
  820. u_SaleTask.scid = u_SaleTaskMx.scid
  821. Where u_saletaskmx_card.cardid = :arg_cardid[1] USING commit_transaction;
  822. IF commit_transaction.SQLCode <> 0 THEN
  823. arg_msg = '查询订单明细操作失败' +"~n"+commit_transaction.SQLErrText
  824. rslt = 0
  825. GOTO ext
  826. END IF
  827. Long ll_count
  828. SELECT count(*)
  829. INTO :ll_count
  830. FROM u_saletaskmx_card
  831. WHERE u_saletaskmx_card.scid = :ll_scid AND
  832. u_saletaskmx_card.taskid = :ll_taskid AND
  833. u_saletaskmx_card.mxprintid = :ls_printid USING commit_transaction;
  834. IF commit_transaction.SQLCode <> 0 THEN
  835. arg_msg = '查询流程卡数量操作失败' +"~n"+commit_transaction.SQLErrText
  836. rslt = 0
  837. GOTO ext
  838. END IF
  839. IF ll_count = UpperBound(arg_cardid) THEN
  840. UPDATE u_saletaskmx
  841. SET ifsc = 0
  842. WHERE scid = :ll_scid AND
  843. taskid = :ll_taskid AND
  844. printid = :ls_printid USING commit_transaction;
  845. IF commit_transaction.SQLCode <> 0 THEN
  846. arg_msg = '更新订单明细排产标记操作失败' +"~n"+commit_transaction.SQLErrText
  847. rslt = 0
  848. GOTO ext
  849. END IF
  850. END IF
  851. FOR i = 1 TO UpperBound(arg_cardid)
  852. DELETE FROM
  853. u_saletaskmx_card
  854. Where cardid = :arg_cardid[i] USING commit_transaction;
  855. IF commit_transaction.SQLCode <> 0 THEN
  856. arg_msg = '删除流程卡' +arg_cardcode[i] + '失败' +"~n"+commit_transaction.SQLErrText
  857. rslt = 0
  858. GOTO ext
  859. END IF
  860. ls_cardcode = ls_cardcode + arg_cardcode[i] + ','
  861. NEXT
  862. ls_cardcode = Left(ls_cardcode,Len(ls_cardcode) - 1)
  863. String ls_log
  864. ls_log = ls_log + '删除销售订单:' + ls_taskcode + '明细第' + String(ls_printid) + '行,编码:' + ls_mtrlcode + ','
  865. IF ls_status <> '' THEN
  866. ls_log = ls_log + sys_option_change_status + ':' + ls_status + ','
  867. END IF
  868. IF ls_woodcode <> '' THEN
  869. ls_log = ls_log + sys_option_change_woodcode + ':' + ls_woodcode + ','
  870. END IF
  871. IF ls_woodcode <> '' THEN
  872. ls_log = ls_log + sys_option_change_pcode + ':' + ls_pcode + ','
  873. END IF
  874. ls_log = ls_log + '卡号:'+ls_cardcode
  875. //日志
  876. if f_setsysoplog('生产流程卡',ls_log,arg_msg,false) = 0 then
  877. rslt = 0
  878. goto ext
  879. end if
  880. //--
  881. ext:
  882. IF rslt = 0 THEN
  883. ROLLBACK USING commit_transaction;
  884. ELSEIF arg_ifcommit THEN
  885. COMMIT USING commit_transaction;
  886. END IF
  887. RETURN rslt
  888. end function
  889. public function integer uof_buildcard1 (long arg_scid[], long arg_taskid[], long arg_printid[], long arg_qty[], string arg_operator, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  890. Long i,ll_cardid,j
  891. String cardcode
  892. DateTime server_datetime
  893. Long ll_count = 0
  894. SELECT Top 1 getdate() INTO :server_datetime FROM u_user USING commit_transaction;
  895. //取得系统时间,借用操作员表
  896. IF commit_transaction.SQLCode <> 0 THEN
  897. rslt = 0
  898. arg_msg = "查询操作失败,日期 "
  899. GOTO ext
  900. END IF
  901. FOR j = 1 TO UpperBound(arg_scid)
  902. FOR i = 1 TO arg_qty[j]
  903. ll_cardid = f_sys_scidentity(0,"u_saletaskmx_card","cardid",arg_msg,TRUE, commit_transaction) //数据commit事务)
  904. IF ll_cardid <= 0 THEN
  905. rslt = 0
  906. GOTO ext
  907. END IF
  908. cardcode = getid(0, 'LC',Date(server_datetime),FALSE,commit_transaction)
  909. IF cardcode = "err" THEN
  910. cardcode = ''
  911. rslt = 0
  912. arg_msg = "无法获取流程卡编号"+"~n"+commit_transaction.SQLErrText
  913. GOTO ext
  914. END IF
  915. INSERT INTO u_saletaskmx_card
  916. ( scid,
  917. taskid,
  918. mxprintid,
  919. cardid,
  920. cardcode,
  921. opdate,
  922. opemp )
  923. VALUES ( :arg_scid[j],
  924. :arg_taskid[j],
  925. :arg_printid[j],
  926. :ll_cardid,
  927. :cardcode,
  928. :server_datetime,
  929. :arg_operator ) USING commit_transaction;
  930. IF commit_transaction.SQLCode <> 0 THEN
  931. rslt = 0
  932. arg_msg = "流程卡" + cardcode +",插入数据库失败"+"~n"+commit_transaction.SQLErrText
  933. cardcode = ''
  934. GOTO ext
  935. END IF
  936. ll_count++
  937. NEXT
  938. NEXT
  939. IF ll_count = 0 THEN
  940. rslt = 0
  941. arg_msg = "没有可生成流程卡的数据"
  942. GOTO ext
  943. END IF
  944. ext:
  945. IF rslt = 0 THEN
  946. ROLLBACK USING commit_transaction;
  947. ELSEIF arg_ifcommit AND rslt = 1 THEN
  948. COMMIT USING commit_transaction;
  949. END IF
  950. RETURN rslt
  951. end function
  952. public function integer uof_delcard1 (long arg_cardid[], string arg_cardcode[], long arg_row[], long arg_scid[], long arg_taskid[], long arg_printid[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  953. Long i,j
  954. String ls_cardcode[]
  955. Long ll_cardqty
  956. Long ll_count
  957. String ls_log
  958. String ls_mtrlcode,ls_taskcode
  959. Long ls_printid,ll_taskid,ll_scid
  960. String ls_status,ls_woodcode,ls_pcode
  961. s_saletask_mtrl s_mtrl
  962. s_saletaskmx_card s_card[]
  963. FOR i = 1 TO UpperBound(arg_taskid)
  964. ll_cardqty = 0
  965. ll_count = 0
  966. SELECT u_mtrldef.mtrlcode,
  967. u_saletaskmx.printid,
  968. u_saletask.taskcode,
  969. u_saletaskmx.status,
  970. u_saletaskmx.woodcode,
  971. u_saletaskmx.pcode,
  972. u_saletaskmx.ifsc
  973. INTO :s_mtrl.mtrlcode[i],
  974. :s_mtrl.printid[i],
  975. :s_mtrl.taskcode[i],
  976. :s_mtrl.status[i],
  977. :s_mtrl.woodcode[i],
  978. :s_mtrl.pcode[i],
  979. :s_mtrl.ifsc[i]
  980. FROM
  981. u_SaleTaskMx INNER JOIN
  982. u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid INNER JOIN
  983. u_SaleTask ON u_SaleTask.TaskID = u_SaleTaskMx.TaskID AND
  984. u_SaleTask.scid = u_SaleTaskMx.scid
  985. WHERE u_SaleTaskMx.scid = :arg_scid[i] AND
  986. u_SaleTaskMx.taskid = :arg_taskid[i] AND
  987. u_saletaskmx.printid = :arg_printid[i] USING commit_transaction;
  988. IF commit_transaction.SQLCode <> 0 THEN
  989. arg_msg = '查询订单明细操作失败' +"~n"+commit_transaction.SQLErrText
  990. rslt = 0
  991. GOTO ext
  992. END IF
  993. IF s_mtrl.ifsc[i] = 1 THEN
  994. arg_msg = '销售订单:' + s_mtrl.taskcode[i] + '明细第' + String(arg_printid[i]) + '行,编码[' + s_mtrl.mtrlcode[i] + ']已排产,不能删除流程卡!'
  995. rslt = 0
  996. GOTO ext
  997. END IF
  998. //
  999. ls_cardcode[i] = ''
  1000. FOR j = 1 TO UpperBound(arg_cardid)
  1001. IF arg_row[j] = i THEN
  1002. ls_cardcode[i] = ls_cardcode[i] + arg_cardcode[j] + ','
  1003. ll_cardqty = ll_cardqty + 1
  1004. END IF
  1005. DELETE FROM u_saletaskmx_card
  1006. Where cardid In (:arg_cardid[j]) USING commit_transaction;
  1007. IF commit_transaction.SQLCode <> 0 THEN
  1008. arg_msg = '删除流程卡操作失败' +"~n"+commit_transaction.SQLErrText
  1009. rslt = 0
  1010. GOTO ext
  1011. END IF
  1012. NEXT
  1013. // ////写日志
  1014. // IF ls_cardcode[i] <> '' THEN
  1015. // ls_cardcode[i] = Left(ls_cardcode[i],Len(ls_cardcode[i] ) - 1)
  1016. //
  1017. // ls_log = ''
  1018. //
  1019. // ls_log = ls_log + '删除销售订单:' + s_mtrl.taskcode[i] + '明细第' + String(arg_printid[i]) + '行,编码:' + s_mtrl.mtrlcode[i] + ','
  1020. // IF ls_status <> '' THEN
  1021. // ls_log = ls_log + sys_option_change_status + ':' + s_mtrl.status[i] + ','
  1022. // END IF
  1023. // IF ls_woodcode <> '' THEN
  1024. // ls_log = ls_log + sys_option_change_woodcode + ':' + s_mtrl.woodcode[i] + ','
  1025. // END IF
  1026. // IF ls_woodcode <> '' THEN
  1027. // ls_log = ls_log + sys_option_change_pcode + ':' + s_mtrl.pcode[i] + ','
  1028. // END IF
  1029. // ls_log = ls_log + '卡号:'+ls_cardcode[i]
  1030. //
  1031. // if len(ls_log) > 250 then ls_log = left(ls_log, 250)
  1032. // //日志
  1033. // f_setsysoplog('生产流程卡',ls_log,arg_msg,FALSE)
  1034. // END IF
  1035. NEXT
  1036. ext:
  1037. IF rslt = 0 THEN
  1038. ROLLBACK USING commit_transaction;
  1039. ELSEIF arg_ifcommit THEN
  1040. COMMIT USING commit_transaction;
  1041. END IF
  1042. RETURN rslt
  1043. end function
  1044. public function integer uof_auditcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1045. Long i,printnum
  1046. DateTime server_dt
  1047. SELECT Top 1 getdate() Into :server_dt From u_user;
  1048. IF sqlca.SQLCode <> 0 THEN
  1049. rslt = 0
  1050. arg_msg = "查询操作失败,日期 "
  1051. GOTO ext
  1052. END IF
  1053. FOR i = 1 To UpperBound(arg_cardid)
  1054. IF sys_option_saletask_sc_card3 = 1 THEN
  1055. printnum = 0
  1056. SELECT printnum
  1057. INTO :printnum
  1058. FROM u_saletaskmx_card
  1059. Where cardid = :arg_cardid[i] Using commit_transaction;
  1060. IF commit_transaction.SQLCode <> 0 THEN
  1061. arg_msg = '确认流程卡' +arg_cardcode[i] + '失败,查询流程卡打印次数失败' +"~n"+commit_transaction.SQLErrText
  1062. rslt = 0
  1063. GOTO ext
  1064. END IF
  1065. IF printnum = 0 THEN
  1066. arg_msg = ' 流程卡' +arg_cardcode[i] + '必须先打印后确认'
  1067. rslt = 0
  1068. GOTO ext
  1069. END IF
  1070. END IF
  1071. UPDATE u_saletaskmx_card
  1072. SET flag = 1,
  1073. audittime = :server_dt,
  1074. auditemp = :publ_operator
  1075. Where cardid = :arg_cardid[i] Using commit_transaction;
  1076. IF commit_transaction.SQLCode <> 0 THEN
  1077. arg_msg = '确认流程卡' +arg_cardcode[i] + '失败' +"~n"+commit_transaction.SQLErrText
  1078. rslt = 0
  1079. GOTO ext
  1080. END IF
  1081. NEXT
  1082. ext:
  1083. IF rslt = 0 THEN
  1084. ROLLBACK Using commit_transaction;
  1085. ELSEIF arg_ifcommit THEN
  1086. COMMIT Using commit_transaction;
  1087. END IF
  1088. RETURN rslt
  1089. end function
  1090. public function integer uof_cauditcard (long arg_cardid[], string arg_cardcode[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1091. Long i
  1092. DateTime null_dt
  1093. SetNull(null_dt)
  1094. FOR i = 1 TO UpperBound(arg_cardid)
  1095. UPDATE u_saletaskmx_card
  1096. SET flag = 0,
  1097. audittime = :null_dt,
  1098. auditemp = ''
  1099. Where cardid = :arg_cardid[i] USING commit_transaction;
  1100. IF commit_transaction.SQLCode <> 0 THEN
  1101. arg_msg = '确认流程卡' +arg_cardcode[i] + '失败' +"~n"+commit_transaction.SQLErrText
  1102. rslt = 0
  1103. GOTO ext
  1104. END IF
  1105. NEXT
  1106. ext:
  1107. IF rslt = 0 THEN
  1108. ROLLBACK USING commit_transaction;
  1109. ELSEIF arg_ifcommit THEN
  1110. COMMIT USING commit_transaction;
  1111. END IF
  1112. RETURN rslt
  1113. end function
  1114. public function integer uof_sc (s_saletaskmx arg_mx[], long arg_itmx, integer arg_scflag, ref string arg_msg);Int rslt = 1
  1115. Long i
  1116. Long ll_count,ll_count1
  1117. DateTime server_dt
  1118. DateTime null_dt
  1119. Long ll_storageid_arr[],ll_storageid
  1120. Long ll_scid_arr[],ll_scid
  1121. Long ll_if_cus_mtrlware_arr[],ll_if_cus_mtrlware
  1122. String ll_storagename_arr[],ls_storagename
  1123. Long ll_inwaretype_arr[],ll_inwaretype
  1124. Long ll_j,count,ll_i
  1125. Decimal ld_add_qty
  1126. //Decimal ld_orderqty
  1127. Long if_plancode_arr[],if_plancode
  1128. String ls_status,ls_mtrlcode,ls_pcode,ls_woodcode
  1129. Long ll_mtrlwareid,ll_mtrlid
  1130. Long ll_cusid
  1131. String ls_plancode
  1132. SetNull(null_dt)
  1133. SELECT Top 1 getdate() INTO :server_dt FROM u_user;
  1134. IF sqlca.SQLCode <> 0 THEN
  1135. rslt = 0
  1136. arg_msg = "查询操作失败,日期 "
  1137. GOTO ext
  1138. END IF
  1139. FOR i = 1 TO arg_itmx
  1140. IF arg_scflag = 1 THEN
  1141. IF sys_option_saletask_sc_card = 1 THEN
  1142. ll_count = 0
  1143. SELECT printnum
  1144. INTO :ll_count
  1145. FROM u_saletaskmx
  1146. WHERE scid = :arg_mx[i].scid AND
  1147. taskid = :arg_mx[i].taskid AND
  1148. printid = :arg_mx[i].printid USING commit_transaction;
  1149. IF commit_transaction.SQLCode <> 0 THEN
  1150. rslt = 0
  1151. arg_msg = '查询打印次数失败!'
  1152. GOTO ext
  1153. END IF
  1154. IF ll_count = 0 THEN
  1155. rslt = 0
  1156. arg_msg = '订单生产跟踪表必须先打印后确认!操作取消'
  1157. GOTO ext
  1158. END IF
  1159. END IF
  1160. UPDATE u_saletaskmx
  1161. SET u_saletaskmx.ifsc = 1,
  1162. u_saletaskmx.audittime = :server_dt,
  1163. u_saletaskmx.auditemp = :publ_operator
  1164. WHERE scid = :arg_mx[i].scid AND
  1165. taskid = :arg_mx[i].taskid AND
  1166. printid = :arg_mx[i].printid USING commit_transaction;
  1167. IF commit_transaction.SQLCode <> 0 THEN
  1168. rslt = 0
  1169. arg_msg = '更新销售订单明细确认标记失败!'
  1170. GOTO ext
  1171. END IF
  1172. if sys_option_saletask_sc_mx_addware = 1 then
  1173. DECLARE pf_cur CURSOR FOR
  1174. SELECT u_storage.storageid,
  1175. u_storage.storagename,
  1176. u_storage.scid,
  1177. u_storage.balctype,
  1178. u_storage.inwaretype,
  1179. u_storage.if_plancode
  1180. FROM u_storage
  1181. WHERE ( u_storage.Mtrlprp = 0 ) AND
  1182. ( u_storage.scid = :scid )
  1183. Using commit_transaction;
  1184. OPEN pf_cur;
  1185. FETCH pf_cur Into :ll_storageid,:ls_storagename,:ll_scid,:ll_if_cus_mtrlware,:ll_inwaretype,:if_plancode;
  1186. DO WHILE commit_transaction.SQLCode = 0
  1187. count++
  1188. ll_storageid_arr[count] = ll_storageid
  1189. ll_storagename_arr[count] = ls_storagename
  1190. ll_scid_arr[count] = ll_scid
  1191. ll_if_cus_mtrlware_arr[count] = ll_if_cus_mtrlware
  1192. ll_inwaretype_arr[count] = ll_inwaretype
  1193. if_plancode_arr[count] = if_plancode
  1194. FETCH pf_cur Into :ll_storageid,:ls_storagename,:ll_scid,:ll_if_cus_mtrlware,:ll_inwaretype,:if_plancode;
  1195. LOOP
  1196. CLOSE pf_cur;
  1197. ll_mtrlid = arg_mx[i].mtrlid
  1198. ls_mtrlcode = arg_mx[i].mtrlcode
  1199. ls_status = arg_mx[i].Status
  1200. ls_pcode = arg_mx[i].pcode
  1201. ls_woodcode = arg_mx[i].woodcode
  1202. // ld_orderqty = arg_mx[i].orderqty
  1203. ld_add_qty = 0
  1204. FOR ll_j = 1 To count
  1205. ll_cusid = 0///不分客户
  1206. // IF ll_if_cus_mtrlware_arr[ll_j] = 1 THEN
  1207. // ll_cusid = 0 ///
  1208. // ELSE
  1209. // ll_cusid = 0
  1210. // END IF
  1211. IF if_plancode_arr[ll_j] = 0 THEN
  1212. ls_plancode = ''
  1213. ELSE
  1214. ls_plancode = arg_mx[i].plancode
  1215. END IF
  1216. SELECT top 1 mtrlwareid INTO :ll_mtrlwareid
  1217. FROM u_mtrlware
  1218. WHERE mtrlid = :ll_mtrlid
  1219. AND status = :ls_status
  1220. AND storageid = :ll_storageid_arr[ll_j]
  1221. AND woodcode = :ls_woodcode
  1222. AND pcode = :ls_pcode
  1223. AND SCID = :ll_scid_arr[ll_j]
  1224. AND ( sptid = :ll_cusid OR :ll_cusid = 0 )
  1225. AND plancode = :ls_plancode
  1226. Using commit_transaction;
  1227. IF commit_transaction.SQLCode = 0 THEN
  1228. // UPDATE u_mtrlware
  1229. // SET noallocqty = noallocqty + :ld_add_qty
  1230. // WHERE mtrlwareid = :ll_mtrlwareid
  1231. // AND scid = :ll_scid_arr[ll_j]
  1232. // Using commit_transaction;
  1233. // IF commit_transaction.SQLCode <> 0 THEN
  1234. // ARG_MSG = '产品:' + ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'增加库存失败'
  1235. // rslt = 0
  1236. // GOTO ext
  1237. // END IF
  1238. ELSEIF commit_transaction.SQLCode = -1 THEN
  1239. ARG_MSG = '查询:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'库存失败'
  1240. rslt = 0
  1241. GOTO ext
  1242. ELSEIF commit_transaction.SQLCode = 100 THEN
  1243. ll_mtrlwareid = 0
  1244. ll_mtrlwareid = f_sys_scidentity(ll_scid_arr[ll_j],"u_mtrlware","mtrlwareid",ARG_MSG,False,commit_transaction)
  1245. IF ll_mtrlwareid <= 0 THEN
  1246. rslt = 0
  1247. GOTO ext
  1248. END IF
  1249. INSERT INTO u_mtrlware(scid,
  1250. mtrlwareid,
  1251. mtrlid,
  1252. storageid,
  1253. noallocqty,
  1254. status,
  1255. woodcode,
  1256. pcode,
  1257. sptid,
  1258. plancode)
  1259. VALUES(:ll_scid_arr[ll_j],
  1260. :ll_mtrlwareid,
  1261. :ll_mtrlid,
  1262. :ll_storageid_arr[ll_j],
  1263. :ld_add_qty,
  1264. :ls_status,
  1265. :ls_woodcode,
  1266. :ls_pcode,
  1267. :ll_cusid,
  1268. :ls_plancode)
  1269. Using commit_transaction;
  1270. IF commit_transaction.SQLCode <> 0 THEN
  1271. ARG_MSG = '产品:'+ls_mtrlcode+'仓库:'+ll_storagename_arr[ll_j]+'加0库存失败或物料已经有库存,请检查'
  1272. rslt = 0
  1273. GOTO ext
  1274. END IF
  1275. END IF
  1276. NEXT
  1277. end if
  1278. ELSE
  1279. Long cnt
  1280. SELECT count(*) INTO :cnt
  1281. FROM u_inwaremx
  1282. INNER JOIN u_inware ON u_inware.scid = u_inwaremx.scid
  1283. AND u_inware.inwareid = u_inwaremx.inwareid
  1284. INNER JOIN u_saletaskmx ON u_SaleTaskMx.scid = u_inwaremx.scid
  1285. AND u_SaleTaskMx.taskid = u_inwaremx.relid
  1286. AND u_SaleTaskMx.printid = u_inwaremx.relprintid
  1287. WHERE u_inware.billtype = 3
  1288. AND u_SaleTaskMx.scid = :arg_mx[i].scid
  1289. AND u_SaleTaskMx.taskid = :arg_mx[i].taskid
  1290. AND u_SaleTaskMx.printid = :arg_mx[i].printid USING commit_transaction;
  1291. IF commit_transaction.SQLCode <> 0 THEN
  1292. rslt = 0
  1293. arg_msg = '查询是否已开生产进仓失败!'+sqlca.sqlerrtext
  1294. GOTO ext
  1295. END IF
  1296. IF cnt > 0 THEN
  1297. rslt = 0
  1298. arg_msg = "该明细已经开了生产进仓单,不能反确认"
  1299. GOTO ext
  1300. END IF
  1301. SELECT count(*) INTO :cnt
  1302. FROM u_outwaremx
  1303. INNER JOIN u_outware ON u_outware.scid = u_outwaremx.scid
  1304. AND u_outware.outwareid = u_outwaremx.outwareid
  1305. INNER JOIN u_SaleTaskMX ON u_outwaremx.scid = u_SaleTaskMX.scid
  1306. AND u_outwaremx.relid = u_SaleTaskMX.TaskID
  1307. AND u_outwaremx.relprintid = u_SaleTaskMX.printid
  1308. WHERE u_outware.billtype = 1 AND u_outware.thflag = 0
  1309. AND u_SaleTaskMx.scid = :arg_mx[i].scid
  1310. AND u_SaleTaskMx.taskid = :arg_mx[i].taskid
  1311. AND u_SaleTaskMx.printid = :arg_mx[i].printid USING commit_transaction;
  1312. IF commit_transaction.SQLCode <> 0 THEN
  1313. rslt = 0
  1314. arg_msg = '查询是否已开发货单失败!'+sqlca.sqlerrtext
  1315. GOTO ext
  1316. END IF
  1317. IF cnt > 0 THEN
  1318. rslt = 0
  1319. arg_msg = "该明细已经开了发货单,不能反确认"
  1320. GOTO ext
  1321. END IF
  1322. UPDATE u_saletaskmx
  1323. SET ifsc = 0,
  1324. u_saletaskmx.audittime = :null_dt,
  1325. u_saletaskmx.auditemp = ''
  1326. WHERE scid = :arg_mx[i].scid AND
  1327. taskid = :arg_mx[i].taskid AND
  1328. printid = :arg_mx[i].printid USING commit_transaction;
  1329. IF commit_transaction.SQLCode <> 0 THEN
  1330. rslt = 0
  1331. arg_msg = '更新销售订单明细确认标记失败!'
  1332. GOTO ext
  1333. END IF
  1334. END IF
  1335. // IF commit_transaction.SQLCode <> 0 THEN
  1336. // rslt = 0
  1337. // arg_msg = '更新销售订单明细确认标记失败!'
  1338. // GOTO ext
  1339. // END IF
  1340. NEXT
  1341. ext:
  1342. IF rslt = 0 THEN
  1343. ROLLBACK USING commit_transaction;
  1344. ELSE
  1345. COMMIT USING commit_transaction;
  1346. END IF
  1347. RETURN rslt
  1348. end function
  1349. public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  1350. Long i,ls_newid
  1351. DELETE FROM u_saleRqMtrl_scll
  1352. WHERE u_saleRqMtrl_scll.scid = :arg_rqmtrl.scid[1] AND
  1353. u_saleRqMtrl_scll.taskID = :arg_rqmtrl.taskid[1] AND
  1354. u_saleRqMtrl_scll.printid = :arg_rqmtrl.printid[1] USING commit_transaction;
  1355. IF commit_transaction.SQLCode <> 0 THEN
  1356. rslt = 0
  1357. arg_msg = '删除订单明细的物料领料明细失败'
  1358. GOTO ext
  1359. END IF
  1360. FOR i = 1 TO UpperBound(arg_rqmtrl.taskID)
  1361. ls_newid = f_sys_scidentity(arg_rqmtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,commit_transaction)
  1362. IF ls_newid <= 0 THEN
  1363. rslt = 0
  1364. GOTO ext
  1365. END IF
  1366. INSERT INTO u_saleRqMtrl_scll
  1367. ( rqmtrlid,
  1368. scid,
  1369. taskID,
  1370. MtrlID,
  1371. printid,
  1372. trueRqqty,
  1373. costamt,
  1374. status,
  1375. woodcode,
  1376. pcode,
  1377. ifchanged )
  1378. VALUES ( :ls_newid,
  1379. :arg_rqmtrl.scid[i],
  1380. :arg_rqmtrl.taskID[i],
  1381. :arg_rqmtrl.MtrlID[i],
  1382. :arg_rqmtrl.printid[i],
  1383. :arg_rqmtrl.cmplqty[i],
  1384. 0,
  1385. :arg_rqmtrl.status[i],
  1386. :arg_rqmtrl.woodcode[i],
  1387. :arg_rqmtrl.pcode[i],
  1388. :arg_rqmtrl.ifchanged[i] ) USING commit_transaction;
  1389. IF commit_transaction.SQLCode <> 0 THEN
  1390. rslt = 0
  1391. arg_msg = '插入订单明细的物料领料明细失败'
  1392. GOTO ext
  1393. END IF
  1394. NEXT
  1395. ext:
  1396. IF rslt = 0 THEN
  1397. ROLLBACK USING commit_transaction;
  1398. ELSEIF arg_ifcommit THEN
  1399. COMMIT USING commit_transaction;
  1400. END IF
  1401. RETURN rslt
  1402. end function
  1403. public function integer uof_cmp_workprice (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, boolean arg_ifcommit, ref string arg_msg);Long it_mxbt1,mtrlorigin,ls_newid
  1404. Long rslt = 1,I = 1,NO_MXCHECK = 0
  1405. s_outwaremx outwaremx[]
  1406. String ls_msg
  1407. Long ll_flag
  1408. SELECT auditflag
  1409. INTO :ll_flag
  1410. FROM u_mtrldef
  1411. Where mtrlid = :arg_mtrlid USING commit_transaction;
  1412. IF commit_transaction.SQLCode <> 0 THEN
  1413. rslt = 0
  1414. arg_msg = '工价表没有审核'
  1415. GOTO ext
  1416. END IF
  1417. s_workpricetable_array s_workprice
  1418. DECLARE CUR_INWAERMX CURSOR FOR
  1419. SELECT u_sc_workprice.proid,
  1420. u_sc_workprice.proorder,
  1421. u_sc_workprice.procode,
  1422. u_sc_workprice.proname,
  1423. u_sc_workprice.wrkgrpid,
  1424. u_sc_workprice.workprice,
  1425. u_sc_workprice.workqty,
  1426. u_sc_workprice.worklevel,
  1427. u_sc_workprice.techlevel,
  1428. u_sc_workprice.workhour,
  1429. u_sc_workprice.dscrp,
  1430. u_sc_workprice.Lastflag
  1431. FROM u_sc_workprice
  1432. Where u_sc_workprice.mtrlid = :arg_mtrlid USING commit_transaction;
  1433. OPEN CUR_INWAERMX;
  1434. FETCH CUR_INWAERMX INTO :s_workprice.proid[i],
  1435. :s_workprice.proorder[i],
  1436. :s_workprice.procode[i],
  1437. :s_workprice.proname[i],
  1438. :s_workprice.wrkgrpid[i],
  1439. :s_workprice.workprice[i],
  1440. :s_workprice.workqty[i],
  1441. :s_workprice.worklevel[i],
  1442. :s_workprice.techlevel[i],
  1443. :s_workprice.workhour[i],
  1444. :s_workprice.dscrp[i],
  1445. :s_workprice.Lastflag[I] ;
  1446. DO WHILE commit_transaction.SQLCode = 0
  1447. I++
  1448. FETCH CUR_INWAERMX INTO :s_workprice.proid[i],
  1449. :s_workprice.proorder[i],
  1450. :s_workprice.procode[i],
  1451. :s_workprice.proname[i],
  1452. :s_workprice.wrkgrpid[i],
  1453. :s_workprice.workprice[i],
  1454. :s_workprice.workqty[i],
  1455. :s_workprice.worklevel[i],
  1456. :s_workprice.techlevel[i],
  1457. :s_workprice.workhour[i],
  1458. :s_workprice.dscrp[i],
  1459. :s_workprice.Lastflag[I] ;
  1460. LOOP
  1461. CLOSE CUR_INWAERMX;
  1462. //检验明细是否读入完整
  1463. SELECT COUNT(*) INTO :NO_MXCHECK
  1464. FROM u_sc_workprice
  1465. Where u_sc_workprice.mtrlid = :arg_mtrlid USING commit_transaction;
  1466. IF commit_transaction.SQLCode <> 0 THEN
  1467. rslt = 0
  1468. arg_msg = "查询操作失败,工价表明细"
  1469. GOTO ext
  1470. END IF
  1471. IF I <> (NO_MXCHECK+1) THEN
  1472. rslt = 0
  1473. arg_msg = "查询操作失败,工价表明细"
  1474. GOTO ext
  1475. END IF
  1476. FOR I = 1 TO NO_MXCHECK
  1477. INSERT INTO u_order_ml_workprice
  1478. ( scid,
  1479. taskid,
  1480. printid,
  1481. proid,
  1482. proorder,
  1483. procode,
  1484. proname,
  1485. wrkgrpid,
  1486. workprice,
  1487. workqty,
  1488. worklevel,
  1489. techlevel,
  1490. workhour,
  1491. dscrp,
  1492. Lastflag )
  1493. VALUES ( :arg_scid,
  1494. :arg_taskid,
  1495. :arg_printid,
  1496. :s_workprice.proid[i],
  1497. :s_workprice.proorder[i],
  1498. :s_workprice.procode[i],
  1499. :s_workprice.proname[i],
  1500. :s_workprice.wrkgrpid[i],
  1501. :s_workprice.workprice[i],
  1502. :s_workprice.workqty[i],
  1503. :s_workprice.worklevel[i],
  1504. :s_workprice.techlevel[i],
  1505. :s_workprice.workhour[i],
  1506. :s_workprice.dscrp[i],
  1507. :s_workprice.Lastflag[I] ) USING commit_transaction;
  1508. IF commit_transaction.SQLCode <> 0 THEN
  1509. rslt = 0
  1510. arg_msg = "插入明细操作失败,销售订单明细运算工价明细"
  1511. GOTO ext
  1512. END IF
  1513. NEXT
  1514. ext:
  1515. IF rslt = 0 THEN
  1516. ROLLBACK USING commit_transaction;
  1517. ELSEIF arg_ifcommit THEN
  1518. COMMIT USING commit_transaction;
  1519. END IF
  1520. RETURN rslt
  1521. end function
  1522. public function integer uof_add_workprice (s_order_ml_workprice_array arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  1523. Long i,ls_newid
  1524. DELETE FROM u_order_ml_workprice
  1525. WHERE u_order_ml_workprice.scid = :arg_rqmtrl.scid[1] AND
  1526. u_order_ml_workprice.taskID = :arg_rqmtrl.taskid[1] AND
  1527. u_order_ml_workprice.printid = :arg_rqmtrl.printid[1] USING commit_transaction;
  1528. IF commit_transaction.SQLCode <> 0 THEN
  1529. rslt = 0
  1530. arg_msg = '删除订单明细的工价设定失败'
  1531. GOTO ext
  1532. END IF
  1533. FOR i = 1 TO UpperBound(arg_rqmtrl.taskID)
  1534. INSERT INTO u_order_ml_workprice
  1535. ( scid,
  1536. taskid,
  1537. printid,
  1538. proid,
  1539. proorder,
  1540. procode,
  1541. proname,
  1542. wrkgrpid,
  1543. workprice,
  1544. workqty,
  1545. worklevel,
  1546. techlevel,
  1547. workhour,
  1548. dscrp,
  1549. Lastflag,
  1550. ifchanged )
  1551. VALUES ( :arg_rqmtrl.scid[i],
  1552. :arg_rqmtrl.taskid[i],
  1553. :arg_rqmtrl.printid[i],
  1554. :arg_rqmtrl.proid[i],
  1555. :arg_rqmtrl.proorder[i],
  1556. :arg_rqmtrl.procode[i],
  1557. :arg_rqmtrl.proname[i],
  1558. :arg_rqmtrl.wrkgrpid[i],
  1559. :arg_rqmtrl.workprice[i],
  1560. :arg_rqmtrl.workqty[i],
  1561. :arg_rqmtrl.worklevel[i],
  1562. :arg_rqmtrl.techlevel[i],
  1563. :arg_rqmtrl.workhour[i],
  1564. :arg_rqmtrl.dscrp[i],
  1565. :arg_rqmtrl.Lastflag[i],
  1566. :arg_rqmtrl.ifchanged[i]) USING commit_transaction;
  1567. IF commit_transaction.SQLCode <> 0 THEN
  1568. rslt = 0
  1569. arg_msg = '插入订单明细的工价设定失败'
  1570. GOTO ext
  1571. END IF
  1572. NEXT
  1573. ext:
  1574. IF rslt = 0 THEN
  1575. ROLLBACK USING commit_transaction;
  1576. ELSEIF arg_ifcommit THEN
  1577. COMMIT USING commit_transaction;
  1578. END IF
  1579. RETURN rslt
  1580. end function
  1581. public function integer uof_order_add_pro (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1582. Long cnt
  1583. If arg_taskid = 0 Then
  1584. rslt = 0
  1585. arg_msg = "没有审核对象"
  1586. Goto ext
  1587. End If
  1588. If p_getinfo(arg_scid,arg_taskid,arg_printid,arg_msg) = 0 Then
  1589. rslt = 0
  1590. Goto ext
  1591. End If
  1592. If flag <> 1 And flag <> 5 And flag <> 6 Then
  1593. rslt = 0
  1594. arg_msg = '订单明细产品' + mtrlcode + ',只有在(在进行,完成)状态才可以生成工序,请核对'
  1595. Goto ext
  1596. End If
  1597. If scllflag = 1 Then
  1598. arg_msg = '订单明细产品' + mtrlcode + '已用料审核,不能再重新生成工序'
  1599. End If
  1600. cnt = 0
  1601. Select count(*) Into :cnt
  1602. From u_orderrqwp
  1603. Where scid = :arg_scid
  1604. And taskid = :arg_taskid
  1605. And printid = :arg_printid
  1606. And finishqty > 0;
  1607. If sqlca.SQLCode <> 0 Then
  1608. arg_msg = '查询销售订单明细产品' + mtrlcode + '的工序明细是否有完成数量失败,'+sqlca.SQLErrText
  1609. rslt = 0
  1610. Goto ext
  1611. End If
  1612. If cnt > 0 Then
  1613. arg_msg = '销售订单明细产品' + mtrlcode + '的工序明细已有完成数量,不能生成计划工序明细'
  1614. rslt = 0
  1615. Goto ext
  1616. End If
  1617. //检查计件单
  1618. cnt = 0
  1619. Select count(*) Into :cnt
  1620. From u_scwg_taskwork_2_mx
  1621. Where relscid = :arg_scid
  1622. And orderid = :arg_taskid
  1623. And relprintid = :arg_printid;
  1624. If sqlca.SQLCode <> 0 Then
  1625. arg_msg = '查询销售订单明细产品' + mtrlcode + '的工序明细是否有个人产品工序计件单失败,'+sqlca.SQLErrText
  1626. rslt = 0
  1627. Goto ext
  1628. End If
  1629. If cnt > 0 Then
  1630. arg_msg = '销售订单明细产品' + mtrlcode + '的工序明细已有个人产品工序计件单,不能生成计划工序明细'
  1631. rslt = 0
  1632. Goto ext
  1633. End If
  1634. //检查产品个人工序计件单
  1635. cnt = 0
  1636. Select count(*) Into :cnt
  1637. From u_sc_taskwork
  1638. Where scid = :arg_scid
  1639. And orderid = :arg_taskid
  1640. And relid = :arg_printid;
  1641. If sqlca.SQLCode <> 0 Then
  1642. arg_msg = '查询销售订单明细产品' + mtrlcode + '的工序明细是否有产品个人工序计件单失败,'+sqlca.SQLErrText
  1643. rslt = 0
  1644. Goto ext
  1645. End If
  1646. If cnt > 0 Then
  1647. arg_msg = '销售订单明细产品' + mtrlcode + '的工序明细已有产品个人工序计件单,不能生成计划工序明细'
  1648. rslt = 0
  1649. Goto ext
  1650. End If
  1651. //检查工价表
  1652. cnt = 0
  1653. Select count(*) Into :cnt
  1654. From u_sc_workprice
  1655. Where mtrlid = :mtrlid;
  1656. If sqlca.SQLCode <> 0 Then
  1657. arg_msg = '查询产品' + mtrlcode + '工价表失败,'+sqlca.SQLErrText
  1658. rslt = 0
  1659. Goto ext
  1660. End If
  1661. // 系统选项233,未使用工资时,审核不提示工价表未设置。
  1662. If sys_option_order_skip_workprice = 1 Then //检查建立
  1663. If cnt = 0 Then
  1664. arg_msg = '系统选项[233]限制,产品' + mtrlcode + '工价表未建立,不能建立工序工价'
  1665. rslt = 0
  1666. Goto ext
  1667. End If
  1668. ElseIf sys_option_order_skip_workprice = 2 Then //检查审核
  1669. If cnt = 0 Then
  1670. arg_msg = '产品' + mtrlcode + '工价表未建立,请先建立工价表'
  1671. rslt = 0
  1672. Goto ext
  1673. End If
  1674. Int li_auditflag_workprice
  1675. Select auditflag
  1676. Into :li_auditflag_workprice
  1677. From u_mtrldef
  1678. Where mtrlid = :mtrlid;
  1679. If sqlca.SQLCode <> 0 Then
  1680. arg_msg = '查询产品' + mtrlcode + '工价表失败,'+sqlca.SQLErrText
  1681. rslt = 0
  1682. Goto ext
  1683. End If
  1684. If li_auditflag_workprice = 0 Then
  1685. arg_msg = '系统选项[233]限制,产品' + mtrlcode + '工价表未审核,不能建立工序工价'
  1686. rslt = 0
  1687. Goto ext
  1688. End If
  1689. Else //0 不检查
  1690. End If
  1691. //IF cnt = 0 THEN
  1692. //
  1693. //
  1694. // IF sys_option_order_skip_workprice = 1 THEN
  1695. // rslt = 1
  1696. // GOTO ext
  1697. // ELSE
  1698. // arg_msg = '产品' + mtrlcode + '工价表未建立,请先建立工价表'
  1699. // rslt = 0
  1700. // GOTO ext
  1701. // END IF
  1702. //END IF
  1703. Delete From U_OrderRqwp
  1704. Where U_OrderRqwp.scid = :Arg_scid And
  1705. U_OrderRqwp.taskid = :arg_taskid And
  1706. u_orderrqwp.printid = :arg_printid Using sqlca;
  1707. If sqlca.SQLCode <> 0 Then
  1708. rslt = 0
  1709. arg_msg = '删除订单明细产品' + mtrlcode + '对应的工价明细失败'+"~n"+sqlca.SQLErrText
  1710. Goto ext
  1711. End If
  1712. /// //
  1713. //messagebox("",arg_taskid)
  1714. //messagebox("",arg_printid)
  1715. /////status
  1716. Insert Into u_orderrqwp(scid,taskid,mtrlid,procode,proname,proorder,proqty,wrkgrpid,lsxtype,workprice,status,ifjd,printid,pricestr,stepstr)
  1717. (Select u_SaleTaskMx.scid,u_SaleTaskMx.taskid,u_SaleTaskMx.mtrlid,u_sc_workprice.procode,
  1718. u_sc_workprice.proname,u_sc_workprice.proorder,u_sc_workprice.workqty * u_SaleTaskMx.orderqty,
  1719. u_sc_workprice.wrkgrpid,u_sc_workprice.lsxtype,u_sc_workprice.workprice,
  1720. case u_mtrldef.statusflag when 2 then u_SaleTaskMx.status else u_sc_workprice.status End as status,
  1721. u_sc_workprice.ifjd,u_SaleTaskMx.printid,u_sc_workprice.pricestr,u_sc_workprice.stepstr
  1722. From u_sc_workprice,u_SaleTaskMx,u_mtrldef
  1723. Where u_sc_workprice.mtrlid = u_SaleTaskMx.mtrlid
  1724. And u_mtrldef.mtrlid = u_SaleTaskMx.mtrlid
  1725. And u_SaleTaskMx.taskid = :arg_taskid
  1726. And u_SaleTaskMx.scid = :arg_scid
  1727. And u_SaleTaskMx.printid = :arg_printid
  1728. And u_sc_workprice.ifownpro = 0
  1729. And u_sc_workprice.lsxtype <> 0);
  1730. If sqlca.SQLCode <> 0 Then
  1731. rslt = 0
  1732. arg_msg = '添加销售订单明细的工序失败,原因:'+sqlca.SQLErrText
  1733. Goto ext
  1734. End If
  1735. //单价公式
  1736. //orderqty 排产数量
  1737. //status 配置
  1738. //woodcode 配置1
  1739. //pcode 配置2
  1740. //ls_mtrlsectype 自定义1
  1741. //ls_zxmtrlmode 自定义2
  1742. //物料规格arg_ls_mtrlmode
  1743. //客户编码 arg_ls_cuscode
  1744. //客户名称 arg_ls_cusname
  1745. //arg_parmstr 公式
  1746. //arg_value_dec 返回的工价
  1747. Decimal arg_orderqty
  1748. String arg_ls_mtrlmode,arg_ls_mtrlsectype,arg_ls_zxmtrlmode,arg_ls_cuscode,arg_ls_cusname
  1749. Long ii = 0,arry_saletaskid[],arry_itemid[]
  1750. Decimal de_temp = 0,arry_price[]
  1751. String arry_pricestr[],arry_procode[]
  1752. Select u_SaleTaskMx.orderqty,u_mtrldef.mtrlmode,u_mtrldef.mtrlsectype,u_mtrldef.zxmtrlmode,u_cust.cuscode,u_cust.name
  1753. Into :arg_orderqty,:arg_ls_mtrlmode,:arg_ls_mtrlsectype,:arg_ls_zxmtrlmode,:arg_ls_cuscode,:arg_ls_cusname
  1754. From u_SaleTaskMx Inner join u_mtrldef on u_SaleTaskMx.MtrlID = u_mtrldef.MtrlID
  1755. Inner join
  1756. u_SaleTask on u_SaleTaskMx.scid = u_SaleTask.scid And
  1757. u_SaleTaskMx.TaskID = u_SaleTask.TaskID Inner JOIN
  1758. u_cust ON u_SaleTask.CusID = u_cust.cusid
  1759. Where u_SaleTaskMx.taskid = :arg_taskid
  1760. And u_SaleTaskMx.scid = :arg_scid
  1761. And u_SaleTaskMx.printid = :arg_printid;
  1762. //游标读费用项目
  1763. Declare gongjia Cursor For
  1764. Select
  1765. u_orderrqwp.pricestr,
  1766. u_orderrqwp.procode,
  1767. u_orderrqwp.workprice
  1768. From u_orderrqwp
  1769. Where u_orderrqwp.taskid = :arg_taskid
  1770. And u_orderrqwp.scid = :arg_scid
  1771. And u_orderrqwp.printid = :arg_printid;
  1772. Open gongjia;
  1773. ii++
  1774. Fetch gongjia Into :arry_pricestr[ii],:arry_procode[ii],:arry_price[ii];
  1775. Do While sqlca.SQLCode = 0
  1776. ii++
  1777. Fetch gongjia Into :arry_pricestr[ii],:arry_procode[ii],:arry_price[ii];
  1778. Loop
  1779. Close gongjia;
  1780. //按公式计算工价
  1781. For ii = 1 To UpperBound(arry_pricestr)
  1782. If arry_pricestr[ii] <> '' Then
  1783. de_temp = 0
  1784. uof_workprice_parm(arg_orderqty,status,woodcode,pcode,arg_ls_mtrlsectype,arg_ls_zxmtrlmode,arg_ls_mtrlmode,arg_ls_cuscode,arg_ls_cusname,arry_pricestr[ii],de_temp,arry_price[ii])
  1785. If de_temp <> 0 Then
  1786. Update u_orderrqwp Set workprice = :de_temp
  1787. Where u_orderrqwp.taskid = :arg_taskid
  1788. And u_orderrqwp.scid = :arg_scid
  1789. And u_orderrqwp.printid = :arg_printid
  1790. And u_orderrqwp.procode = :arry_procode[ii];
  1791. End If
  1792. End If
  1793. Next
  1794. ext:
  1795. If rslt = 0 Then
  1796. Rollback;
  1797. p_reset()
  1798. ElseIf arg_ifcommit And rslt = 1 Then
  1799. Commit;
  1800. End If
  1801. Return rslt
  1802. end function
  1803. public function int p_reset ();scid = 0
  1804. taskid = 0
  1805. taskcode = ''
  1806. MtrlID = 0
  1807. SaleQty = 0
  1808. mxdscrp = ''
  1809. status = ''
  1810. pcode = ''
  1811. woodcode = ''
  1812. outtype = 0
  1813. unit = ''
  1814. scllflag = 0
  1815. flag = 0
  1816. RETURN 1
  1817. end function
  1818. public function integer uof_finish_procode_qty (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, integer arg_type, ref string arg_msg, boolean arg_ifcommit);
  1819. Int rslt = 1
  1820. Int li_finishflag
  1821. DateTime null_dt
  1822. SetNull(null_dt)
  1823. IF sys_option_add_orderrqwp_fqty = 1 THEN
  1824. arg_msg = '系统选项[071]限制,工序确认完成数只能由计件单确认增减'
  1825. rslt = 0
  1826. GOTO ext
  1827. END IF
  1828. SELECT finishflag INTO :li_finishflag
  1829. FROM U_OrderRqwp
  1830. WHERE scid = :arg_scid
  1831. AND taskid = :arg_taskid
  1832. AND printid = :arg_printid
  1833. And Procode = :arg_procode;
  1834. IF sqlca.SQLCode <> 0 THEN
  1835. arg_msg = '查询工序完成标记失败,'+sqlca.SQLErrText
  1836. rslt = 0
  1837. GOTO ext
  1838. END IF
  1839. IF arg_type = 0 THEN
  1840. IF li_finishflag = 1 THEN
  1841. arg_msg = '工序已确认完成,不能再确认'
  1842. rslt = 0
  1843. GOTO ext
  1844. END IF
  1845. UPDATE U_OrderRqwp
  1846. SET finishflag = 1,
  1847. finishdate = getdate(),
  1848. finishqty = proqty
  1849. WHERE scid = :arg_scid
  1850. AND taskid = :arg_taskid
  1851. AND printid = :arg_printid
  1852. AND Procode = :arg_procode
  1853. And finishflag = 0;
  1854. IF sqlca.SQLCode <> 0 THEN
  1855. arg_msg = '确认工序完成失败,'+sqlca.SQLErrText
  1856. rslt = 0
  1857. GOTO ext
  1858. END IF
  1859. ELSE
  1860. IF li_finishflag = 0 THEN
  1861. arg_msg = '工序还未确认,不能取消确认'
  1862. rslt = 0
  1863. GOTO ext
  1864. END IF
  1865. UPDATE U_OrderRqwp
  1866. SET finishflag = 0,
  1867. finishdate = :null_dt,
  1868. finishqty = 0
  1869. WHERE scid = :arg_scid
  1870. AND taskid = :arg_taskid
  1871. AND printid = :arg_printid
  1872. AND Procode = :arg_procode
  1873. And finishflag = 1;
  1874. IF sqlca.SQLCode <> 0 THEN
  1875. arg_msg = '取消确认工序完成失败,'+sqlca.SQLErrText
  1876. rslt = 0
  1877. GOTO ext
  1878. END IF
  1879. END IF
  1880. ext:
  1881. IF rslt = 0 THEN
  1882. ROLLBACK;
  1883. ELSEIF rslt = 1 And arg_ifcommit THEN
  1884. COMMIT;
  1885. END IF
  1886. RETURN rslt
  1887. end function
  1888. public function integer uof_mod_rqmtrl (s_order_ml_rqmtrl arg_rqmtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  1889. Long i
  1890. FOR i = 1 To UpperBound(arg_rqmtrl.taskID)
  1891. UPDATE u_OrderRqMtrl
  1892. SET sptid = :arg_rqmtrl.sptid[i]
  1893. Where scid = :arg_rqmtrl.scid[i] and
  1894. taskID = :arg_rqmtrl.taskID[i] and
  1895. MtrlID = :arg_rqmtrl.MtrlID[i] and
  1896. status = :arg_rqmtrl.status[i] and
  1897. woodcode = :arg_rqmtrl.woodcode[i] and
  1898. pcode = :arg_rqmtrl.pcode[i] and
  1899. plantype = :arg_rqmtrl.plantype[i] and
  1900. printid = :arg_rqmtrl.printid[i]
  1901. Using commit_transaction;
  1902. IF commit_transaction.SQLCode <> 0 THEN
  1903. rslt = 0
  1904. arg_msg = '更新默认供应商失败'
  1905. GOTO ext
  1906. END IF
  1907. NEXT
  1908. ext:
  1909. IF rslt = 0 THEN
  1910. ROLLBACK Using commit_transaction;
  1911. ELSEIF arg_ifcommit THEN
  1912. COMMIT Using commit_transaction;
  1913. END IF
  1914. RETURN rslt
  1915. end function
  1916. public function integer uof_auto_build_buy_forrq (long arg_mxpkid[], ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  1917. Long sptid[]
  1918. Long it_mx = 0
  1919. Long ll_bound, ll_i, ll_j, ll_sptid, ll_cnt
  1920. Boolean has_spt
  1921. arg_msg = ''
  1922. string ls_msg = ''
  1923. ll_bound = UpperBound(arg_mxpkid)
  1924. uo_buytask obj_task
  1925. obj_task = Create uo_buytask
  1926. obj_task.commit_transaction = commit_transaction
  1927. uo_spt_price uo_sptprice
  1928. uo_sptprice = Create uo_spt_price
  1929. IF ll_bound <= 0 THEN
  1930. rslt = 1
  1931. arg_msg = '没有需求明细'
  1932. GOTO ext
  1933. END IF
  1934. Long ll_scid, ll_lastscid
  1935. FOR ll_i = 1 To ll_bound
  1936. SELECT sptid
  1937. INTO :ll_sptid
  1938. FROM u_orderRqMtrl
  1939. Where mxpkid = :arg_mxpkid[ll_i] Using commit_transaction;
  1940. IF commit_transaction.SQLCode <> 0 THEN
  1941. rslt = 0
  1942. arg_msg = '查询物料需求表失败,' + commit_transaction.SQLErrText
  1943. GOTO ext
  1944. END IF
  1945. SELECT COUNT(0)
  1946. INTO :ll_cnt
  1947. FROM u_spt
  1948. Where sptid = :ll_sptid Using commit_transaction;
  1949. IF commit_transaction.SQLCode <> 0 THEN
  1950. rslt = 0
  1951. arg_msg = '查询供应商表失败,' + commit_transaction.SQLErrText
  1952. GOTO ext
  1953. END IF
  1954. IF ll_cnt <= 0 THEN CONTINUE
  1955. has_spt = False
  1956. FOR ll_j = 1 To it_mx
  1957. IF sptid[ll_j] = ll_sptid THEN
  1958. has_spt = True
  1959. EXIT
  1960. END IF
  1961. NEXT
  1962. IF Not has_spt THEN
  1963. it_mx++
  1964. sptid[it_mx] = ll_sptid
  1965. END IF
  1966. NEXT
  1967. s_buytaskmx_arr s_buy
  1968. Long it_buy
  1969. FOR ll_i = 1 To it_mx
  1970. it_buy = 0
  1971. FOR ll_j = 1 To ll_bound
  1972. SELECT COUNT(0)
  1973. INTO :ll_cnt
  1974. FROM u_OrderRqMtrl INNER JOIN
  1975. u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid LEFT OUTER JOIN
  1976. uv_orderrqmtrl_buyqty ON u_OrderRqMtrl.mxpkid = uv_orderrqmtrl_buyqty.mxpkid
  1977. WHERE (u_OrderRqMtrl.plantype = 2) AND
  1978. (u_OrderRqMtrl.truerqqty - isnull(uv_orderrqmtrl_buyqty.buyQty, 0) > 0) AND
  1979. (u_orderRqMtrl.mxpkid = :arg_mxpkid[ll_j]) AND
  1980. (u_orderRqMtrl.sptid = :sptid[ll_i]) Using commit_transaction;
  1981. IF commit_transaction.SQLCode <> 0 THEN
  1982. rslt = 0
  1983. arg_msg = '查询物料需求表数量失败,' + commit_transaction.SQLErrText
  1984. GOTO ext
  1985. END IF
  1986. IF ll_cnt <= 0 THEN CONTINUE
  1987. it_buy ++
  1988. SELECT u_mtrldef.mtrlcode,
  1989. u_mtrldef.unit,
  1990. u_OrderRqMtrl.truerqqty - ISNULL(uv_orderrqmtrl_buyqty.buyQty, 0) AS Expr1,
  1991. u_OrderRqMtrl.MtrlID,
  1992. u_OrderRqMtrl.status,
  1993. u_OrderRqMtrl.woodcode,
  1994. u_OrderRqMtrl.pcode,
  1995. u_OrderRqMtrl.mxpkid,
  1996. u_mtrldef.mrp_unit,
  1997. u_mtrldef.rate_buy,
  1998. u_mtrldef.rate_scll,
  1999. u_mtrldef.rate_sale,
  2000. u_mtrldef.unit_buy,
  2001. u_mtrldef.unit_scll,
  2002. u_mtrldef.unit_sale,
  2003. u_OrderRqMtrl.scid,
  2004. u_OrderRqMtrl.TaskID,
  2005. u_OrderRqMtrl.printid,
  2006. u_OrderRqMtrl.plancode
  2007. INTO :s_buy.mtrlcode[it_buy],
  2008. :s_buy.unit[it_buy],
  2009. :s_buy.uqty[it_buy],
  2010. :s_buy.MtrlID[it_buy],
  2011. :s_buy.status[it_buy],
  2012. :s_buy.woodcode[it_buy],
  2013. :s_buy.pcode[it_buy],
  2014. :s_buy.relid2[it_buy],
  2015. :s_buy.mrp_unit[it_buy],
  2016. :s_buy.rate_buy[it_buy],
  2017. :s_buy.rate_scll[it_buy],
  2018. :s_buy.rate_sale[it_buy],
  2019. :s_buy.unit_buy[it_buy],
  2020. :s_buy.unit_scll[it_buy],
  2021. :s_buy.unit_sale[it_buy],
  2022. :ll_scid,
  2023. :s_buy.Orderid[it_buy],
  2024. :s_buy.relprintid[it_buy],
  2025. :s_buy.plancode[it_buy]
  2026. FROM u_OrderRqMtrl INNER JOIN
  2027. u_mtrldef ON u_OrderRqMtrl.MtrlID = u_mtrldef.mtrlid LEFT OUTER JOIN
  2028. uv_orderrqmtrl_buyqty ON u_OrderRqMtrl.mxpkid = uv_orderrqmtrl_buyqty.mxpkid
  2029. WHERE (u_OrderRqMtrl.plantype = 2) AND
  2030. (u_OrderRqMtrl.truerqqty - ISNULL(uv_orderrqmtrl_buyqty.buyQty, 0) > 0) AND
  2031. (u_orderRqMtrl.mxpkid = :arg_mxpkid[ll_j]) Using commit_transaction;
  2032. IF commit_transaction.SQLCode <> 0 THEN
  2033. rslt = 0
  2034. arg_msg = '物料需求不存在ID:' + String(arg_mxpkid[ll_j]) + ',' + commit_transaction.SQLErrText
  2035. GOTO ext
  2036. END IF
  2037. SELECT requiredate,taskcode
  2038. INTO :s_buy.requiredate[it_buy],:s_buy.relcode[it_buy]
  2039. FROM u_saletask
  2040. Where scid = :ll_scid And TaskID = :s_buy.Orderid[it_buy] Using commit_transaction;
  2041. IF commit_transaction.SQLCode <> 0 THEN
  2042. rslt = 0
  2043. arg_msg = '查询订单需求日与相关号失败,' + commit_transaction.SQLErrText
  2044. GOTO ext
  2045. END IF
  2046. IF it_buy > 1 And ll_scid <> ll_lastscid THEN
  2047. rslt = 0
  2048. arg_msg = '物料需求不同分部不能保存'
  2049. GOTO ext
  2050. END IF
  2051. ll_lastscid = ll_scid
  2052. NEXT
  2053. IF it_buy = 0 THEN CONTINUE
  2054. IF obj_task.newbegin(ll_scid,arg_msg) = 0 THEN //
  2055. rslt = 0
  2056. GOTO ext
  2057. END IF
  2058. obj_task.requiredate = DateTime(Today(), Now())
  2059. obj_task.Assign_emp = publ_operator
  2060. obj_task.Kind = 0
  2061. obj_task.sptid = sptid[ll_i]
  2062. obj_task.relcode = ''
  2063. Long dftbanktypeid,dftmoneyid
  2064. SELECT dftbanktypeid,dftmoneyid
  2065. INTO :dftbanktypeid,:dftmoneyid
  2066. FROM u_spt
  2067. Where sptid = :sptid[ll_i] Using commit_transaction;
  2068. obj_task.banktypeid = dftbanktypeid
  2069. obj_task.train = ''
  2070. obj_task.billtype = 2
  2071. obj_task.moneyid = dftmoneyid
  2072. obj_task.mrate = f_get_mrate( dftmoneyid)
  2073. FOR ll_j = 1 To it_buy
  2074. CHOOSE CASE s_buy.mrp_unit[ll_j]
  2075. CASE 0
  2076. s_buy.rate[ll_j] = 1
  2077. CASE 1
  2078. IF s_buy.rate_buy[ll_j] = 0 THEN s_buy.rate_buy[ll_j] = 1
  2079. s_buy.uqty[ll_j] = s_buy.uqty[ll_j] / s_buy.rate_buy[ll_j]
  2080. s_buy.rate[ll_j] = s_buy.rate_buy[ll_j]
  2081. s_buy.unit[ll_j] = s_buy.unit_buy[ll_j]
  2082. CASE 2
  2083. s_buy.unit[ll_j] = s_buy.unit_scll[ll_j]
  2084. s_buy.rate[ll_j] = s_buy.rate_scll[ll_j]
  2085. IF s_buy.rate_scll[ll_j] = 0 THEN s_buy.rate_scll[ll_j] = 1
  2086. s_buy.uqty[ll_j] = s_buy.uqty[ll_j] / s_buy.rate_scll[ll_j]
  2087. CASE 3
  2088. s_buy.unit[ll_j] = s_buy.unit_sale[ll_j]
  2089. s_buy.rate[ll_j] = s_buy.rate_sale[ll_j]
  2090. IF s_buy.rate_sale[ll_j] = 0 THEN s_buy.rate_sale[ll_j] = 1
  2091. s_buy.uqty[ll_j] = s_buy.uqty[ll_j] / s_buy.rate_sale[ll_j]
  2092. END CHOOSE
  2093. Decimal ls_1stnewcost,ls_1stzqrate,ls_1strate,ld_rate
  2094. String ls_unit
  2095. ls_unit = s_buy.unit[ll_j]
  2096. IF uo_sptprice.uf_getmtrlsptprice(sptid[ll_i],s_buy.MtrlID[ll_j],ls_unit,s_buy.status[ll_j],s_buy.woodcode[ll_j],s_buy.pcode[ll_j],0,ls_1stnewcost,ls_1stzqrate,ls_1strate,arg_msg) = 1 THEN
  2097. s_buy.uprice[ll_j] = ls_1stnewcost
  2098. // s_buy.rate[ll_j] = ls_1stzqrate
  2099. ELSE
  2100. s_buy.uprice[ll_j] = 0
  2101. END IF
  2102. SELECT top 1 storageid
  2103. INTO :s_buy.storageid[ll_j]
  2104. FROM u_mtrl_storage
  2105. Where MtrlID = :s_buy.MtrlID[ll_j] Using commit_transaction;
  2106. IF commit_transaction.SQLCode <> 0 THEN
  2107. SELECT storageid
  2108. INTO :s_buy.storageid[ll_j]
  2109. FROM u_buytaskmx
  2110. WHERE mtrlid = :s_buy.MtrlID[ll_j]
  2111. Order By TaskID Desc Using commit_transaction;
  2112. IF commit_transaction.SQLCode <> 0 THEN
  2113. arg_msg = s_buy.mtrlcode[ll_j] + '请先设置存放仓库'
  2114. END IF
  2115. END IF
  2116. IF obj_task.acceptmx(0,&
  2117. 0,&
  2118. '',&
  2119. s_buy.MtrlID[ll_j],&
  2120. s_buy.uqty[ll_j],&
  2121. 0,&
  2122. s_buy.uprice[ll_j],&
  2123. 1,&
  2124. 0,&
  2125. '',&
  2126. s_buy.mtrlcode[ll_j],&
  2127. arg_msg,&
  2128. ll_j,&
  2129. s_buy.requiredate[ll_j],&
  2130. s_buy.storageid[ll_j],&
  2131. s_buy.status[ll_j],&
  2132. s_buy.woodcode[ll_j],&
  2133. s_buy.pcode[ll_j],&
  2134. s_buy.unit[ll_j],&
  2135. s_buy.rate[ll_j],&
  2136. s_buy.Orderid[ll_j],&
  2137. s_buy.relprintid[ll_j],&
  2138. s_buy.relcode[ll_j],&
  2139. '',&
  2140. s_buy.relid2[ll_j],0,&
  2141. s_buy.plancode[ll_j],'','','') = 0 THEN
  2142. rslt = 0
  2143. GOTO ext
  2144. END IF
  2145. NEXT
  2146. IF obj_task.savesubmit(publ_operator,arg_msg,False) = 0 THEN
  2147. rslt = 0
  2148. GOTO ext
  2149. END IF
  2150. IF ls_msg = '' THEN
  2151. ls_msg = obj_task.taskcode
  2152. ELSE
  2153. ls_msg += ',' + obj_task.taskcode
  2154. END IF
  2155. NEXT
  2156. IF ls_msg = '' THEN
  2157. ls_msg = '没有采购订单生成'
  2158. ELSE
  2159. ls_msg = '生成采购订单:' + ls_msg
  2160. END IF
  2161. arg_msg = ls_msg
  2162. ext:
  2163. IF rslt = 0 THEN
  2164. ROLLBACK Using commit_transaction;
  2165. ELSEIF arg_ifcommit THEN
  2166. COMMIT Using commit_transaction;
  2167. END IF
  2168. Destroy obj_task
  2169. Destroy uo_sptprice
  2170. Return (rslt)
  2171. end function
  2172. public function integer uof_auto_build_buy_forarr (long arg_scid[], long arg_taskid[], long arg_printid[], ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  2173. Long ll_mtrlid
  2174. String ls_msg = ''
  2175. s_order_ml_rqmtrl s_rqmtrl
  2176. Long sptid[]
  2177. Long it_mx = 0
  2178. uo_buytask obj_task
  2179. obj_task = Create uo_buytask
  2180. obj_task.commit_transaction = commit_transaction
  2181. uo_spt_price uo_sptprice
  2182. uo_sptprice = Create uo_spt_price
  2183. //DateTime requiredate
  2184. //String ls_taskcode
  2185. //SELECT requiredate,taskcode
  2186. // INTO :requiredate,:ls_taskcode
  2187. // FROM u_saletask
  2188. // Where scid = :arg_scid And taskid = :arg_taskid;
  2189. Long it_buy = 1
  2190. Long ll_bound, ll_i, ll_j, ll_sptid, ll_scid
  2191. Boolean has_spt
  2192. IF UpperBound(arg_scid) <> UpperBound(arg_taskid) Or UpperBound(arg_taskid) <> UpperBound(arg_printid) THEN
  2193. rslt = 0
  2194. arg_msg = '参数不正确'
  2195. GOTO ext
  2196. END IF
  2197. ll_bound = UpperBound(arg_scid)
  2198. IF ll_bound <= 0 THEN
  2199. rslt = 0
  2200. arg_msg = '订单明细队列不能为空'
  2201. GOTO ext
  2202. END IF
  2203. ll_scid = arg_scid[1]
  2204. FOR ll_i = 2 To ll_bound
  2205. IF ll_scid <> arg_scid[ll_i] THEN
  2206. rslt = 0
  2207. arg_msg = '不同分部的订单明细不能汇总'
  2208. GOTO ext
  2209. END IF
  2210. NEXT
  2211. FOR ll_i = 1 To ll_bound
  2212. //用游标读取明细
  2213. DECLARE CUR_INWAERMX CURSOR FOR
  2214. SELECT distinct u_OrderRqMtrl.sptid
  2215. FROM u_OrderRqMtrl LEFT OUTER JOIN uv_OrderRqMtrl_buyqty ON u_OrderRqMtrl.mxpkid = uv_OrderRqMtrl_buyqty.mxpkid
  2216. WHERE u_orderrqmtrl.plantype = 2 AND
  2217. u_orderrqmtrl.taskid = :arg_taskid[ll_i] AND
  2218. u_orderrqmtrl.printid = :arg_printid[ll_i] AND
  2219. u_orderrqmtrl.scid = :arg_scid[ll_i] AND
  2220. u_OrderRqMtrl.truerqqty - IsNull(uv_OrderRqMtrl_buyqty.buyqty, 0) > 0 And u_OrderRqMtrl.sptid > 0 Using commit_transaction;
  2221. OPEN CUR_INWAERMX;
  2222. FETCH CUR_INWAERMX Into :ll_sptid;
  2223. DO WHILE commit_transaction.SQLCode = 0
  2224. // 不含
  2225. has_spt = False
  2226. FOR ll_j = 1 To it_mx
  2227. IF sptid[ll_j] = ll_sptid THEN
  2228. has_spt = True
  2229. EXIT
  2230. END IF
  2231. NEXT
  2232. IF Not has_spt THEN
  2233. it_mx ++
  2234. sptid[it_mx] = ll_sptid
  2235. END IF
  2236. FETCH CUR_INWAERMX Into :ll_sptid;
  2237. LOOP
  2238. CLOSE CUR_INWAERMX;
  2239. NEXT
  2240. Long i,j
  2241. FOR i = 1 To it_mx
  2242. s_buytaskmx_arr s_buy
  2243. IF obj_task.newbegin(ll_scid,arg_msg) = 0 THEN //
  2244. rslt = 0
  2245. GOTO ext
  2246. END IF
  2247. obj_task.requiredate = DateTime(Today(), Now())
  2248. obj_task.Assign_emp = publ_operator
  2249. obj_task.Kind = 0
  2250. obj_task.sptid = sptid[i]
  2251. obj_task.relcode = ''
  2252. Long dftbanktypeid,dftmoneyid
  2253. String ls_sptcode, ls_sptname
  2254. SELECT dftbanktypeid,dftmoneyid, sptcode,name
  2255. INTO :dftbanktypeid,:dftmoneyid, :ls_sptcode, :ls_sptname
  2256. FROM u_spt
  2257. Where sptid = :sptid[i] Using commit_transaction;
  2258. IF sqlca.SQLCode <> 0 THEN
  2259. rslt = 0
  2260. arg_msg = '查询供应商信息失败,ID['+String(sptid[i])+'],'+sqlca.SQLErrText
  2261. GOTO ext
  2262. END IF
  2263. IF dftbanktypeid = 0 THEN
  2264. rslt = 0
  2265. arg_msg = '供应商编号['+ls_sptcode+']未定义默认结算方式'
  2266. GOTO ext
  2267. END IF
  2268. IF dftmoneyid = 0 THEN
  2269. rslt = 0
  2270. arg_msg = '供应商编号['+ls_sptcode+']未定义默认币种'
  2271. GOTO ext
  2272. END IF
  2273. obj_task.banktypeid = dftbanktypeid
  2274. obj_task.train = ''
  2275. obj_task.billtype = 2
  2276. obj_task.moneyid = dftmoneyid
  2277. obj_task.mrate = f_get_mrate( dftmoneyid)
  2278. it_buy = 1
  2279. FOR ll_i = 1 To ll_bound
  2280. DECLARE CUR_INWAERMX2 CURSOR FOR
  2281. SELECT u_mtrldef.mtrlcode ,
  2282. u_mtrldef.unit ,
  2283. u_OrderRqMtrl.truerqqty - ISNULL(uv_OrderRqMtrl_buyqty.buyqty, 0) ,
  2284. u_OrderRqMtrl.MtrlID ,
  2285. u_OrderRqMtrl.status ,
  2286. u_OrderRqMtrl.woodcode ,
  2287. u_OrderRqMtrl.pcode,
  2288. u_orderrqmtrl.mxpkid,
  2289. u_mtrldef.mrp_unit,
  2290. u_mtrldef.rate_buy,
  2291. u_mtrldef.rate_scll,
  2292. u_mtrldef.rate_sale,
  2293. u_mtrldef.unit_buy,
  2294. u_mtrldef.unit_scll,
  2295. u_mtrldef.unit_sale,
  2296. u_OrderRqMtrl.plancode
  2297. FROM u_orderrqmtrl LEFT OUTER JOIN uv_OrderRqMtrl_buyqty ON u_orderrqmtrl.mxpkid = uv_OrderRqMtrl_buyqty.mxpkid,u_mtrldef
  2298. WHERE u_orderrqmtrl.plantype = 2 AND
  2299. u_orderrqmtrl.taskid = :arg_taskid[ll_i] AND
  2300. u_orderrqmtrl.printid = :arg_printid[ll_i] AND
  2301. u_orderrqmtrl.scid = :arg_scid[ll_i] AND
  2302. u_OrderRqMtrl.truerqqty - ISNULL(uv_OrderRqMtrl_buyqty.buyqty, 0) > 0 AND
  2303. u_OrderRqMtrl.sptid = :sptid[i] AND
  2304. u_mtrldef.MtrlID = u_OrderRqMtrl.MtrlID Using commit_transaction;
  2305. OPEN CUR_INWAERMX2;
  2306. FETCH CUR_INWAERMX2 INTO :s_buy.mtrlcode[it_buy],
  2307. :s_buy.unit[it_buy],
  2308. :s_buy.uqty[it_buy],
  2309. :s_buy.MtrlID[it_buy],
  2310. :s_buy.status[it_buy],
  2311. :s_buy.woodcode[it_buy],
  2312. :s_buy.pcode[it_buy],
  2313. :s_buy.relid2[it_buy],
  2314. :s_buy.mrp_unit[it_buy],
  2315. :s_buy.rate_buy[it_buy],
  2316. :s_buy.rate_scll[it_buy],
  2317. :s_buy.rate_sale[it_buy],
  2318. :s_buy.unit_buy[it_buy],
  2319. :s_buy.unit_scll[it_buy],
  2320. :s_buy.unit_sale[it_buy],
  2321. :s_buy.plancode[it_buy];
  2322. DO WHILE commit_transaction.SQLCode = 0
  2323. s_buy.orderid[it_buy] = arg_taskid[ll_i]
  2324. s_buy.relprintid[it_buy] = arg_printid[ll_i]
  2325. s_buy.printid[it_buy] = it_buy
  2326. SELECT requiredate,taskcode
  2327. INTO :s_buy.requiredate[it_buy],:s_buy.relcode[it_buy]
  2328. FROM u_saletask
  2329. Where scid = :arg_scid[ll_i] And taskid = :arg_taskid[ll_i];
  2330. IF sqlca.SQLCode <> 0 THEN
  2331. rslt = 0
  2332. arg_msg = '查询订单需求日与相关号失败'
  2333. GOTO ext
  2334. END IF
  2335. it_buy++
  2336. FETCH CUR_INWAERMX2 INTO :s_buy.mtrlcode[it_buy],
  2337. :s_buy.unit[it_buy],
  2338. :s_buy.uqty[it_buy],
  2339. :s_buy.MtrlID[it_buy],
  2340. :s_buy.status[it_buy],
  2341. :s_buy.woodcode[it_buy],
  2342. :s_buy.pcode[it_buy],
  2343. :s_buy.relid2[it_buy],
  2344. :s_buy.mrp_unit[it_buy],
  2345. :s_buy.rate_buy[it_buy],
  2346. :s_buy.rate_scll[it_buy],
  2347. :s_buy.rate_sale[it_buy],
  2348. :s_buy.unit_buy[it_buy],
  2349. :s_buy.unit_scll[it_buy],
  2350. :s_buy.unit_sale[it_buy],
  2351. :s_buy.plancode[it_buy];
  2352. LOOP
  2353. CLOSE CUR_INWAERMX2;
  2354. NEXT
  2355. it_buy --
  2356. FOR j = 1 To it_buy
  2357. CHOOSE CASE s_buy.mrp_unit[j]
  2358. CASE 0
  2359. s_buy.rate[j] = 1
  2360. CASE 1
  2361. IF s_buy.rate_buy[j] = 0 THEN s_buy.rate_buy[j] = 1
  2362. s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_buy[j]
  2363. s_buy.rate[j] = s_buy.rate_buy[j]
  2364. s_buy.unit[j] = s_buy.unit_buy[j]
  2365. CASE 2
  2366. s_buy.unit[j] = s_buy.unit_scll[j]
  2367. s_buy.rate[j] = s_buy.rate_scll[j]
  2368. IF s_buy.rate_scll[j] = 0 THEN s_buy.rate_scll[j] = 1
  2369. s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_scll[j]
  2370. CASE 3
  2371. s_buy.unit[j] = s_buy.unit_sale[j]
  2372. s_buy.rate[j] = s_buy.rate_sale[j]
  2373. IF s_buy.rate_sale[j] = 0 THEN s_buy.rate_sale[j] = 1
  2374. s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_sale[j]
  2375. END CHOOSE
  2376. Decimal ls_1stnewcost,ls_1stzqrate,ls_1strate,ld_rate
  2377. String ls_unit
  2378. ls_unit = s_buy.unit[j]
  2379. IF uo_sptprice.uf_getmtrlsptprice(sptid[i],s_buy.MtrlID[j],ls_unit,s_buy.status[j],s_buy.woodcode[j],s_buy.pcode[j],0,ls_1stnewcost,ls_1stzqrate,ls_1strate,arg_msg) = 1 THEN
  2380. s_buy.uprice[j] = ls_1stnewcost
  2381. // s_buy.rate[j] = ls_1stzqrate
  2382. ELSE
  2383. s_buy.uprice[j] = 0
  2384. END IF
  2385. SELECT top 1 storageid
  2386. INTO :s_buy.storageid[j]
  2387. FROM u_mtrl_storage
  2388. Where MtrlID = :s_buy.MtrlID[j] Using commit_transaction;
  2389. IF commit_transaction.SQLCode <> 0 THEN
  2390. SELECT storageid
  2391. INTO :s_buy.storageid[j]
  2392. FROM u_buytaskmx
  2393. WHERE mtrlid = :s_buy.MtrlID[j]
  2394. Order By taskid Desc Using commit_transaction;
  2395. IF commit_transaction.SQLCode <> 0 THEN
  2396. arg_msg = s_buy.mtrlcode[j] + '请先设置存放仓库'
  2397. END IF
  2398. END IF
  2399. IF obj_task.acceptmx(0,&
  2400. 0,&
  2401. '',&
  2402. s_buy.MtrlID[j],&
  2403. s_buy.uqty[j],&
  2404. 0,&
  2405. s_buy.uprice[j],&
  2406. 1,&
  2407. 0,&
  2408. '',&
  2409. s_buy.mtrlcode[j],&
  2410. arg_msg,&
  2411. j,&
  2412. s_buy.requiredate[j],&
  2413. s_buy.storageid[j],&
  2414. s_buy.status[j],&
  2415. s_buy.woodcode[j],&
  2416. s_buy.pcode[j],&
  2417. s_buy.unit[j],&
  2418. s_buy.rate[j],&
  2419. s_buy.orderid[j],&
  2420. s_buy.relprintid[j],&
  2421. s_buy.relcode[j],&
  2422. '',&
  2423. s_buy.relid2[j],0,s_buy.plancode[j],'','','') = 0 THEN
  2424. rslt = 0
  2425. GOTO ext
  2426. END IF
  2427. NEXT
  2428. IF obj_task.savesubmit(publ_operator,arg_msg,False) = 0 THEN
  2429. rslt = 0
  2430. GOTO ext
  2431. END IF
  2432. IF ls_msg = '' THEN
  2433. ls_msg = obj_task.taskcode
  2434. ELSE
  2435. ls_msg += ',' + obj_task.taskcode
  2436. END IF
  2437. NEXT
  2438. IF ls_msg = '' THEN
  2439. ls_msg = '没有采购订单生成'
  2440. ELSE
  2441. ls_msg = '生成采购订单:' + ls_msg
  2442. END IF
  2443. arg_msg = ls_msg
  2444. ext:
  2445. IF rslt = 0 THEN
  2446. ROLLBACK Using commit_transaction;
  2447. ELSEIF arg_ifcommit THEN
  2448. COMMIT Using commit_transaction;
  2449. END IF
  2450. Return (rslt)
  2451. end function
  2452. public function integer uof_auto_build_buy_notuse (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  2453. Long ll_mtrlid
  2454. string ls_msg = ''
  2455. s_order_ml_rqmtrl s_rqmtrl
  2456. Long sptid[]
  2457. Long it_mx = 1
  2458. uo_buytask obj_task
  2459. obj_task = Create uo_buytask
  2460. obj_task.commit_transaction = commit_transaction
  2461. uo_spt_price uo_sptprice
  2462. uo_sptprice = create uo_spt_price
  2463. DateTime requiredate
  2464. String ls_taskcode
  2465. SELECT requiredate,taskcode
  2466. INTO :requiredate,:ls_taskcode
  2467. FROM u_saletask
  2468. Where scid = :arg_scid And taskid = :arg_taskid;
  2469. Long it_buy = 1
  2470. //用游标读取明细
  2471. DECLARE CUR_INWAERMX CURSOR FOR
  2472. SELECT distinct u_OrderRqMtrl.sptid
  2473. FROM u_OrderRqMtrl LEFT OUTER JOIN uv_OrderRqMtrl_buyqty ON u_OrderRqMtrl.mxpkid = uv_OrderRqMtrl_buyqty.mxpkid
  2474. WHERE u_orderrqmtrl.plantype = 2 AND
  2475. u_orderrqmtrl.taskid = :arg_taskid AND
  2476. u_orderrqmtrl.printid = :arg_printid AND
  2477. u_orderrqmtrl.scid = :arg_scid AND
  2478. u_OrderRqMtrl.truerqqty - ISNULL(uv_OrderRqMtrl_buyqty.buyqty, 0) > 0 and u_OrderRqMtrl.sptid > 0 Using commit_transaction;
  2479. OPEN CUR_INWAERMX;
  2480. FETCH CUR_INWAERMX Into :sptid[it_mx];
  2481. DO WHILE commit_transaction.SQLCode = 0
  2482. it_mx++
  2483. FETCH CUR_INWAERMX Into :sptid[it_mx];
  2484. LOOP
  2485. CLOSE CUR_INWAERMX;
  2486. Long i,j
  2487. FOR i = 1 To it_mx - 1
  2488. s_buytaskmx_arr s_buy
  2489. IF obj_task.newbegin(arg_scid,arg_msg) = 0 THEN //
  2490. rslt = 0
  2491. GOTO ext
  2492. END IF
  2493. obj_task.requiredate = requiredate
  2494. obj_task.Assign_emp = publ_operator
  2495. obj_task.Kind = 0
  2496. obj_task.sptid = sptid[i]
  2497. obj_task.relcode = ''
  2498. Long dftbanktypeid,dftmoneyid
  2499. SELECT dftbanktypeid,dftmoneyid
  2500. INTO :dftbanktypeid,:dftmoneyid
  2501. FROM u_spt
  2502. Where sptid = :sptid[i] Using commit_transaction;
  2503. obj_task.banktypeid = dftbanktypeid
  2504. obj_task.train = ''
  2505. obj_task.billtype = 2
  2506. obj_task.moneyid = dftmoneyid
  2507. obj_task.mrate = f_get_mrate( dftmoneyid)
  2508. it_buy = 1
  2509. DECLARE CUR_INWAERMX2 CURSOR FOR
  2510. SELECT u_mtrldef.mtrlcode ,
  2511. u_mtrldef.unit ,
  2512. u_OrderRqMtrl.truerqqty - ISNULL(uv_OrderRqMtrl_buyqty.buyqty, 0) ,
  2513. u_OrderRqMtrl.MtrlID ,
  2514. u_OrderRqMtrl.status ,
  2515. u_OrderRqMtrl.woodcode ,
  2516. u_OrderRqMtrl.pcode,
  2517. u_orderrqmtrl.mxpkid,
  2518. u_mtrldef.mrp_unit,
  2519. u_mtrldef.rate_buy,
  2520. u_mtrldef.rate_scll,
  2521. u_mtrldef.rate_sale,
  2522. u_mtrldef.unit_buy,
  2523. u_mtrldef.unit_scll,
  2524. u_mtrldef.unit_sale
  2525. FROM u_orderrqmtrl LEFT OUTER JOIN uv_OrderRqMtrl_buyqty ON u_orderrqmtrl.mxpkid = uv_OrderRqMtrl_buyqty.mxpkid,u_mtrldef
  2526. WHERE u_orderrqmtrl.plantype = 2 AND
  2527. u_orderrqmtrl.taskid = :arg_taskid AND
  2528. u_orderrqmtrl.printid = :arg_printid AND
  2529. u_orderrqmtrl.scid = :arg_scid AND
  2530. u_OrderRqMtrl.truerqqty - ISNULL(uv_OrderRqMtrl_buyqty.buyqty, 0) > 0 AND
  2531. u_OrderRqMtrl.sptid = :sptid[i] AND
  2532. u_mtrldef.MtrlID = u_OrderRqMtrl.MtrlID Using commit_transaction;
  2533. OPEN CUR_INWAERMX2;
  2534. FETCH CUR_INWAERMX2 INTO :s_buy.mtrlcode[it_buy],
  2535. :s_buy.unit[it_buy],
  2536. :s_buy.uqty[it_buy],
  2537. :s_buy.MtrlID[it_buy],
  2538. :s_buy.status[it_buy],
  2539. :s_buy.woodcode[it_buy],
  2540. :s_buy.pcode[it_buy],
  2541. :s_buy.relid2[it_buy],
  2542. :s_buy.mrp_unit[it_buy],
  2543. :s_buy.rate_buy[it_buy],
  2544. :s_buy.rate_scll[it_buy],
  2545. :s_buy.rate_sale[it_buy],
  2546. :s_buy.unit_buy[it_buy],
  2547. :s_buy.unit_scll[it_buy],
  2548. :s_buy.unit_sale[it_buy];
  2549. DO WHILE commit_transaction.SQLCode = 0
  2550. it_buy++
  2551. FETCH CUR_INWAERMX2 INTO :s_buy.mtrlcode[it_buy],
  2552. :s_buy.unit[it_buy],
  2553. :s_buy.uqty[it_buy],
  2554. :s_buy.MtrlID[it_buy],
  2555. :s_buy.status[it_buy],
  2556. :s_buy.woodcode[it_buy],
  2557. :s_buy.pcode[it_buy],
  2558. :s_buy.relid2[it_buy],
  2559. :s_buy.mrp_unit[it_buy],
  2560. :s_buy.rate_buy[it_buy],
  2561. :s_buy.rate_scll[it_buy],
  2562. :s_buy.rate_sale[it_buy],
  2563. :s_buy.unit_buy[it_buy],
  2564. :s_buy.unit_scll[it_buy],
  2565. :s_buy.unit_sale[it_buy];
  2566. LOOP
  2567. CLOSE CUR_INWAERMX2;
  2568. FOR j = 1 To it_buy - 1
  2569. CHOOSE CASE s_buy.mrp_unit[j]
  2570. case 0
  2571. s_buy.rate[j] = 1
  2572. CASE 1
  2573. if s_buy.rate_buy[j] = 0 then s_buy.rate_buy[j] = 1
  2574. s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_buy[j]
  2575. s_buy.rate[j] = s_buy.rate_buy[j]
  2576. s_buy.unit[j] = s_buy.unit_buy[j]
  2577. CASE 2
  2578. s_buy.unit[j] = s_buy.unit_scll[j]
  2579. s_buy.rate[j] = s_buy.rate_scll[j]
  2580. if s_buy.rate_scll[j] = 0 then s_buy.rate_scll[j] = 1
  2581. s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_scll[j]
  2582. CASE 3
  2583. s_buy.unit[j] = s_buy.unit_sale[j]
  2584. s_buy.rate[j] = s_buy.rate_sale[j]
  2585. if s_buy.rate_sale[j] = 0 then s_buy.rate_sale[j] = 1
  2586. s_buy.uqty[j] = s_buy.uqty[j] / s_buy.rate_sale[j]
  2587. END CHOOSE
  2588. decimal ls_1stnewcost,ls_1stzqrate,ls_1strate,ld_rate
  2589. string ls_unit
  2590. ls_unit = s_buy.unit[j]
  2591. IF uo_sptprice.uf_getmtrlsptprice(sptid[i],s_buy.MtrlID[j],ls_unit,s_buy.status[j],s_buy.woodcode[j],s_buy.pcode[j],0,ls_1stnewcost,ls_1stzqrate,ls_1strate,arg_msg) = 1 THEN
  2592. s_buy.uprice[j] = ls_1stnewcost
  2593. // s_buy.rate[j] = ls_1stzqrate
  2594. else
  2595. s_buy.uprice[j] = 0
  2596. end if
  2597. select top 1 storageid
  2598. into :s_buy.storageid[j]
  2599. from u_mtrl_storage
  2600. where mtrlid = :s_buy.MtrlID[j] Using commit_transaction;
  2601. if commit_transaction.sqlcode <> 0 then
  2602. select storageid
  2603. into :s_buy.storageid[j]
  2604. from u_buytaskmx
  2605. where mtrlid = :s_buy.MtrlID[j]
  2606. order by taskid desc Using commit_transaction;
  2607. if commit_transaction.sqlcode <> 0 then
  2608. arg_msg = s_buy.mtrlcode[j] + '请先设置存放仓库'
  2609. end if
  2610. end if
  2611. IF obj_task.acceptmx(0,&
  2612. 0,&
  2613. '',&
  2614. s_buy.MtrlID[j],&
  2615. s_buy.uqty[j],&
  2616. 0,&
  2617. s_buy.uprice[j],&
  2618. 1,&
  2619. 0,&
  2620. '',&
  2621. s_buy.mtrlcode[j],&
  2622. arg_msg,&
  2623. j,&
  2624. requiredate,&
  2625. s_buy.storageid[j],&
  2626. s_buy.status[j],&
  2627. s_buy.woodcode[j],&
  2628. s_buy.pcode[j],&
  2629. s_buy.unit[j],&
  2630. s_buy.rate[j],&
  2631. arg_taskid,&
  2632. arg_printid,&
  2633. ls_taskcode,&
  2634. '',&
  2635. s_buy.relid2[j],0,'','','','') = 0 THEN
  2636. rslt = 0
  2637. GOTO ext
  2638. END IF
  2639. NEXT
  2640. IF obj_task.savesubmit(publ_operator,arg_msg,False) = 0 THEN
  2641. rslt = 0
  2642. GOTO ext
  2643. END IF
  2644. IF ls_msg = '' THEN
  2645. ls_msg = obj_task.taskcode
  2646. ELSE
  2647. ls_msg += ',' + obj_task.taskcode
  2648. END IF
  2649. NEXT
  2650. IF ls_msg = '' THEN
  2651. ls_msg = '没有采购订单生成'
  2652. ELSE
  2653. ls_msg = '生成采购订单:' + ls_msg
  2654. END IF
  2655. arg_msg = ls_msg
  2656. ext:
  2657. IF rslt = 0 THEN
  2658. ROLLBACK Using commit_transaction;
  2659. ELSEIF arg_ifcommit THEN
  2660. COMMIT Using commit_transaction;
  2661. END IF
  2662. Return (rslt)
  2663. end function
  2664. public function integer salemxscllprimt (long arg_scid, long arg_taskid, long arg_printid, integer arg_chk_zero, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//salepermit
  2665. //arg_chk_zero //是否检查0需求
  2666. Int rslt = 1,cnt = 0
  2667. Int ll_flag,ll_scllflag
  2668. IF arg_taskid <= 0 THEN
  2669. rslt = 0
  2670. ARG_MSG = '错误销售订单唯一码'
  2671. GOTO ext
  2672. END IF
  2673. SELECT flag,scllflag
  2674. INTO :ll_flag,:ll_scllflag
  2675. FROM u_saletaskmx
  2676. WHERE scid = :Arg_scid AND
  2677. taskid = :arg_taskid AND
  2678. printid = :arg_printid USING commit_transaction;
  2679. IF commit_transaction.SQLCode <> 0 THEN
  2680. rslt = 0
  2681. ARG_MSG = "查询操作失败,销售订单明细内容!"
  2682. GOTO ext
  2683. END IF
  2684. IF ll_flag = 0 THEN
  2685. rslt = 0
  2686. ARG_MSG = "销售订单明细还没有审核,不能领料审核,操作取消"
  2687. GOTO ext
  2688. END IF
  2689. IF ll_scllflag <> 0 THEN
  2690. rslt = 0
  2691. ARG_MSG = "销售订单明细已领料审核,操作取消"
  2692. GOTO ext
  2693. END IF
  2694. IF arg_chk_zero = 1 THEN
  2695. SELECT count(*)
  2696. INTO :cnt
  2697. FROM u_orderrqmtrl
  2698. WHERE ( u_OrderRqMtrl.taskID = :arg_taskid )
  2699. AND ( u_OrderRqMtrl.scid = :arg_scid )
  2700. AND u_OrderRqMtrl.printid = :arg_printid
  2701. AND truerqqty = 0
  2702. USING commit_transaction;
  2703. IF commit_transaction.SQLCode <> 0 THEN
  2704. rslt = 0
  2705. ARG_MSG = "查询订单明细物料需求失败!"+commit_transaction.SQLErrText
  2706. GOTO ext
  2707. END IF
  2708. IF cnt > 0 THEN
  2709. rslt = 0
  2710. ARG_MSG = "订单明细物料需求存在需求数为0!"
  2711. GOTO ext
  2712. END IF
  2713. END IF
  2714. ////检查工价表是否已审核
  2715. //IF sys_option_chk_workprice = 1 THEN
  2716. //
  2717. //end if
  2718. cnt = 0
  2719. SELECT count(*) INTO :cnt
  2720. FROM u_user
  2721. Where username = :arg_emp USING commit_transaction;
  2722. IF commit_transaction.SQLCode <> 0 THEN
  2723. rslt = 0
  2724. ARG_MSG = "查询操作失败,操作员!"
  2725. GOTO ext
  2726. END IF
  2727. IF cnt = 0 THEN
  2728. rslt = 0
  2729. ARG_MSG = "操作员姓名未登记或已取消!"
  2730. GOTO ext
  2731. END IF
  2732. UPDATE u_SaleTaskmx
  2733. SET scllrep = :arg_emp ,sclldate = getdate(),
  2734. scllflag = 1
  2735. WHERE TaskID = :arg_taskid AND
  2736. scid = :arg_scid AND
  2737. printid = :arg_printid AND
  2738. flag = 1 AND scllflag = 0
  2739. USING commit_transaction;
  2740. IF commit_transaction.SQLCode <> 0 THEN
  2741. rslt = 0
  2742. ARG_MSG = "因网络或其它原因导致销售订单明细审核操作失败"+"~n"+commit_transaction.SQLErrText
  2743. GOTO ext
  2744. END IF
  2745. ext:
  2746. IF rslt = 0 THEN
  2747. ROLLBACK USING commit_transaction;
  2748. ELSEIF arg_ifcommit THEN
  2749. COMMIT USING commit_transaction;
  2750. END IF
  2751. Return (rslt)
  2752. end function
  2753. public function integer uof_add_procode_qty (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);//==============================================================================
  2754. // 函数: uo_order_ml::uof_add_procode_qty()
  2755. //------------------------------------------------------------------------------
  2756. // 描述: 更新工序完成数
  2757. //------------------------------------------------------------------------------
  2758. // 参数:
  2759. // value long arg_scid
  2760. // value long arg_taskid
  2761. // value long arg_printid
  2762. // value string arg_procode
  2763. // value decimal arg_qty
  2764. // reference string arg_msg
  2765. // value boolean arg_ifcommit
  2766. //------------------------------------------------------------------------------
  2767. // 返回值: integer
  2768. //------------------------------------------------------------------------------
  2769. // 作者: HD Lee 日期: 2011.12.01
  2770. //------------------------------------------------------------------------------
  2771. // 修改历史:
  2772. //
  2773. //==============================================================================
  2774. Int rslt = 1
  2775. String ls_taskcode
  2776. String ls_mtrlcode
  2777. DateTime null_dt
  2778. SetNull(null_dt)
  2779. IF arg_taskid <= 0 THEN
  2780. rslt = 0
  2781. arg_msg = '错误的销售订单唯一码'
  2782. GOTO ext
  2783. END IF
  2784. IF arg_qty = 0 THEN
  2785. rslt = 1
  2786. GOTO ext
  2787. END IF
  2788. //if sys_option_add_orderrqwp_fqty = 0 then
  2789. // arg_msg = '系统选项[071]限制,工序确认完成数只能手动完成'
  2790. // rslt = 0
  2791. // GOTO ext
  2792. //end if
  2793. SELECT taskcode
  2794. INTO :ls_taskcode
  2795. FROM u_SaleTask
  2796. WHERE scid = :arg_scid
  2797. AND taskid = :arg_taskid;
  2798. IF sqlca.SQLCode <> 0 THEN
  2799. arg_msg = '查询订单编号失败'
  2800. rslt = 0
  2801. GOTO ext
  2802. END IF
  2803. SELECT mtrlcode
  2804. INTO :ls_mtrlcode
  2805. FROM u_mtrldef,u_SaleTaskMx
  2806. WHERE u_SaleTaskMx.mtrlid = u_mtrldef.mtrlid
  2807. AND u_SaleTaskMx.scid = :arg_scid
  2808. AND u_SaleTaskMx.taskid = :arg_taskid
  2809. AND u_SaleTaskMx.printid = :arg_printid;
  2810. IF sqlca.SQLCode <> 0 THEN
  2811. arg_msg = '查询物料编号失败'
  2812. rslt = 0
  2813. GOTO ext
  2814. END IF
  2815. Decimal lde_proqty, lde_finishqty ,ld_nofinqty
  2816. SELECT U_OrderRqwp.proqty , U_OrderRqwp.finishqty
  2817. INTO :lde_proqty, :lde_finishqty
  2818. FROM U_OrderRqwp
  2819. WHERE scid = :arg_scid AND
  2820. taskid = :arg_taskid AND
  2821. printid = :arg_printid AND
  2822. Procode = :arg_procode;
  2823. IF sqlca.SQLCode <> 0 THEN
  2824. rslt = 0
  2825. arg_msg = '查询销售订单:'+ls_taskcode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',未完成数量失败~r~n'+sqlca.SQLErrText
  2826. GOTO ext
  2827. END IF
  2828. IF arg_qty > 0 THEN //增加
  2829. IF arg_qty > lde_proqty - lde_finishqty THEN
  2830. rslt = 0
  2831. arg_msg = '销售订单:'+ls_taskcode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',未完成数量为:'+String(lde_proqty - lde_finishqty,'#,##0.##########')+',不能增加完成:'+String(arg_qty,'#,##0.##########')
  2832. GOTO ext
  2833. END IF
  2834. ELSE
  2835. IF Abs(arg_qty) > lde_finishqty THEN
  2836. rslt = 0
  2837. arg_msg = '销售订单:'+ls_taskcode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',完成数量为:'+String(lde_finishqty,'#,##0.##########')+',不能取消完成:'+String(Abs(arg_qty),'#,##0.##########')
  2838. GOTO ext
  2839. END IF
  2840. END IF
  2841. UPDATE U_OrderRqwp
  2842. SET finishqty = finishqty + :arg_qty
  2843. WHERE scid = :arg_scid
  2844. AND taskid = :arg_taskid
  2845. AND printid = :arg_printid
  2846. AND Procode = :arg_procode;
  2847. IF sqlca.SQLCode <> 0 THEN
  2848. rslt = 0
  2849. arg_msg = '更新销售订单:'+ls_taskcode+',物料:'+ls_mtrlcode+',工序:'+arg_procode+',完成数量失败~r~n'+sqlca.SQLErrText
  2850. GOTO ext
  2851. END IF
  2852. ext:
  2853. IF rslt = 0 THEN
  2854. ROLLBACK;
  2855. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2856. COMMIT;
  2857. END IF
  2858. RETURN rslt
  2859. end function
  2860. public function integer uof_finish_procode_qty_dsr (long arg_scid, long arg_taskid, long arg_printid, string arg_procode, long arg_type, decimal arg_fpqty, ref string arg_msg, boolean arg_ifcommit);
  2861. Int rslt = 1
  2862. Int li_finishflag
  2863. DateTime null_dt
  2864. SetNull(null_dt)
  2865. IF sys_option_add_orderrqwp_fqty = 1 THEN
  2866. arg_msg = '系统选项[071]限制,工序确认完成数只能由计件单确认增减'
  2867. rslt = 0
  2868. GOTO ext
  2869. END IF
  2870. SELECT finishflag INTO :li_finishflag
  2871. FROM U_OrderRqwp
  2872. WHERE scid = :arg_scid
  2873. AND taskid = :arg_taskid
  2874. AND printid = :arg_printid
  2875. And Procode = :arg_procode;
  2876. IF sqlca.SQLCode <> 0 THEN
  2877. arg_msg = '查询工序完成标记失败,'+sqlca.SQLErrText
  2878. rslt = 0
  2879. GOTO ext
  2880. END IF
  2881. IF arg_type = 0 THEN
  2882. IF li_finishflag = 1 THEN
  2883. arg_msg = '工序已确认完成,不能再确认'
  2884. rslt = 0
  2885. GOTO ext
  2886. END IF
  2887. string ls_dscrp
  2888. ls_dscrp='//' + string(today(),'yyyymmdd') + ' ' + string(now(),'hh:mm') + '本次完成' + string(arg_fpqty,'#,##0.####')
  2889. //proqty
  2890. UPDATE U_OrderRqwp
  2891. SET
  2892. finishdate = getdate(),
  2893. finishqty = finishqty + :arg_fpqty,
  2894. dscrp= dscrp + :ls_dscrp
  2895. WHERE scid = :arg_scid
  2896. AND taskid = :arg_taskid
  2897. AND printid = :arg_printid
  2898. AND Procode = :arg_procode
  2899. And finishflag = 0;
  2900. IF sqlca.SQLCode <> 0 THEN
  2901. arg_msg = '确认工序完成失败,'+sqlca.SQLErrText
  2902. rslt = 0
  2903. GOTO ext
  2904. END IF
  2905. Decimal dec_proqty ,dec_finishqty
  2906. dec_proqty = 0
  2907. dec_finishqty = 0
  2908. SELECT proqty ,finishqty INTO :dec_proqty ,:dec_finishqty
  2909. FROM U_OrderRqwp
  2910. WHERE scid = :arg_scid
  2911. AND taskid = :arg_taskid
  2912. AND printid = :arg_printid
  2913. AND Procode = :arg_procode
  2914. And finishflag = 0;
  2915. IF IsNull(dec_proqty) THEN dec_proqty = 0
  2916. IF IsNull(dec_finishqty) THEN dec_finishqty = 0
  2917. IF dec_proqty = dec_finishqty THEN
  2918. UPDATE U_OrderRqwp
  2919. SET finishflag = 1
  2920. WHERE scid = :arg_scid
  2921. AND taskid = :arg_taskid
  2922. AND printid = :arg_printid
  2923. AND Procode = :arg_procode
  2924. And finishflag = 0;
  2925. IF sqlca.SQLCode <> 0 THEN
  2926. arg_msg = '确认工序完成失败,'+sqlca.SQLErrText
  2927. rslt = 0
  2928. GOTO ext
  2929. END IF
  2930. END IF
  2931. ELSE
  2932. // IF li_finishflag = 0 THEN
  2933. // arg_msg = '工序还未确认,不能取消确认'
  2934. // rslt = 0
  2935. // GOTO ext
  2936. // END IF
  2937. // And finishflag = 1
  2938. UPDATE U_OrderRqwp
  2939. SET finishflag = 0,
  2940. finishdate = :null_dt,
  2941. finishqty = 0,
  2942. dscrp=''
  2943. WHERE scid = :arg_scid
  2944. AND taskid = :arg_taskid
  2945. AND printid = :arg_printid
  2946. AND Procode = :arg_procode
  2947. ;
  2948. IF sqlca.SQLCode <> 0 THEN
  2949. arg_msg = '取消确认工序完成失败,'+sqlca.SQLErrText
  2950. rslt = 0
  2951. GOTO ext
  2952. END IF
  2953. END IF
  2954. ext:
  2955. IF rslt = 0 THEN
  2956. ROLLBACK;
  2957. ELSEIF rslt = 1 And arg_ifcommit THEN
  2958. COMMIT;
  2959. END IF
  2960. RETURN rslt
  2961. end function
  2962. public subroutine uof_workprice_parm (decimal arg_orderqty, string arg_status, string arg_woodcode, string arg_pcode, string arg_ls_mtrlsectype, string arg_ls_zxmtrlmode, string arg_ls_mtrlmode, string arg_ls_cuscode, string arg_ls_cusname, string arg_parmstr, ref decimal arg_value_dec, decimal arg_price);//orderqty 排产数量
  2963. //status 配置
  2964. //woodcode 配置1
  2965. //pcode 配置2
  2966. //ls_mtrlsectype 自定义1
  2967. //ls_zxmtrlmode 自定义2
  2968. //物料规格arg_ls_mtrlmode
  2969. //arg_parmstr 公式
  2970. //arg_value_dec 返回的工价
  2971. datastore ds_pricestr
  2972. ds_pricestr = Create datastore
  2973. ds_pricestr.DataObject = 'ds_pricestr_cmpl'
  2974. ds_pricestr.SetTransObject(commit_transaction)
  2975. ds_pricestr.Retrieve()
  2976. ds_pricestr.InsertRow(0)
  2977. String s_rtn
  2978. Select Top 1 Replace( :arg_parmstr,'不包含',' not like ') Into :arg_parmstr From u_user;
  2979. Select Top 1 Replace( :arg_parmstr,'不等于','<>') Into :arg_parmstr From u_user;
  2980. Select Top 1 Replace( :arg_parmstr,'包含',' like ') Into :arg_parmstr From u_user;
  2981. arg_orderqty = Dec(String(arg_orderqty,'#,##0.##########'))
  2982. Select Top 1 Replace( :arg_parmstr,'指令单数量',:arg_orderqty) Into :arg_parmstr From u_user;
  2983. Select Top 1 Replace( :arg_parmstr,'大于等于',' >= ') Into :arg_parmstr From u_user;
  2984. Select Top 1 Replace( :arg_parmstr,'小于等于',' <= ') Into :arg_parmstr From u_user;
  2985. Select Top 1 Replace( :arg_parmstr,'等于',' = ') Into :arg_parmstr From u_user;
  2986. Select Top 1 Replace( :arg_parmstr,'大于',' > ') Into :arg_parmstr From u_user;
  2987. Select Top 1 Replace( :arg_parmstr,'小于',' < ') Into :arg_parmstr From u_user;
  2988. If Pos(arg_parmstr,'配置1') > 0 Then
  2989. Select Top 1 Replace( :arg_parmstr,'配置1',"'"+:arg_woodcode+"'") Into :arg_parmstr From u_user;
  2990. End If
  2991. If Pos(arg_parmstr,'配置2') > 0 Then
  2992. Select Top 1 Replace( :arg_parmstr,'配置2',"'"+:arg_pcode+"'") Into :arg_parmstr From u_user;
  2993. End If
  2994. If Pos(arg_parmstr,'配置') > 0 Then
  2995. Select Top 1 Replace( :arg_parmstr,'配置',"'"+:arg_status+"'") Into :arg_parmstr From u_user;
  2996. End If
  2997. Select Top 1 Replace( :arg_parmstr,'自定义1',"'"+:arg_ls_mtrlsectype+"'") Into :arg_parmstr From u_user;
  2998. Select Top 1 Replace( :arg_parmstr,'自定义2',"'"+:arg_ls_zxmtrlmode+"'") Into :arg_parmstr From u_user;
  2999. Select Top 1 Replace( :arg_parmstr,'物料规格',"'"+:arg_ls_mtrlmode+"'") Into :arg_parmstr From u_user;
  3000. Select Top 1 Replace( :arg_parmstr,'客户编号',"'"+:arg_ls_cuscode+"'") Into :arg_parmstr From u_user;
  3001. Select Top 1 Replace( :arg_parmstr,'客户名称',"'"+:arg_ls_cusname+"'") Into :arg_parmstr From u_user;
  3002. //SELECT Top 1 Replace( :arg_parmstr,'工价表工价',"'"+:arg_price+"'") Into :arg_parmstr From u_user; ll_code = sqlca.SQLCode
  3003. Long ll_pos
  3004. String as_old
  3005. as_old = '工价表工价'
  3006. ll_pos = Pos(arg_parmstr,as_old)
  3007. If ll_pos > 0 Then
  3008. Do While ll_pos > 0
  3009. arg_parmstr = Replace(arg_parmstr, ll_pos, Len(as_old), String(arg_price))
  3010. ll_pos = Pos(arg_parmstr, as_old, ll_pos+Len(String(arg_price)))
  3011. Loop
  3012. End If
  3013. ds_pricestr.Modify('cmpl.expression= "'+arg_parmstr+'"')
  3014. ds_pricestr.AcceptText()
  3015. //ds_pricestr.Retrieve()
  3016. s_rtn = String(ds_pricestr.Object.cmpl[ds_pricestr.GetRow()])
  3017. arg_value_dec = Round(Dec(s_rtn),2)
  3018. Destroy ds_pricestr
  3019. end subroutine
  3020. on uo_order_ml.create
  3021. call super::create
  3022. TriggerEvent( this, "constructor" )
  3023. end on
  3024. on uo_order_ml.destroy
  3025. TriggerEvent( this, "destructor" )
  3026. call super::destroy
  3027. end on