uo_outware_scllplan.sru 92 KB

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