uo_order_ml_mrp.sru 69 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804
  1. $PBExportHeader$uo_order_ml_mrp.sru
  2. forward
  3. global type uo_order_ml_mrp from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_order_ml_mrp from nonvisualobject
  7. end type
  8. global uo_order_ml_mrp uo_order_ml_mrp
  9. type variables
  10. boolean ifbuy_mtrl_not_useqty
  11. boolean ifwx_mtrl_not_useqty
  12. public long deep
  13. public long deep_scll
  14. end variables
  15. forward prototypes
  16. public function integer uof_check_dstrqty (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg)
  17. public function integer uof_get_qty (integer arg_type, long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, ref string arg_msg)
  18. public function integer uof_cmpl_rqmtrl_re (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, integer arg_plantype, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, integer arg_wrkgrpid_scll, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg)
  19. public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_wrkgrpid_scll, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg)
  20. public function integer uof_add_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  21. public function integer uof_add_rqmtrl_tree (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  22. public function integer uof_del_rqmtrl_scll (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg)
  23. public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  24. public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg)
  25. public function integer uof_del_rqmtrl_scll_other (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg)
  26. public function integer uof_add_rqmtrl_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  27. public function integer uof_add_rqmtrl_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  28. public function integer uof_add_rqmtrl_scll_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  29. public function integer uof_add_rqmtrl_scll_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  30. public function integer uof_add_rqmtrl_tree_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  31. public function integer uof_add_rqmtrl_tree_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  32. public function integer uof_cmpl_rqmtrl (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg, long arg_wrkgrpid, string arg_pfgroup)
  33. public function integer uof_add_rqmtrl_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg)
  34. public function integer uof_del_rqmtrl_relcode (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, boolean arg_ifcommit, ref string arg_msg)
  35. public function integer uof_add_rqmtrl_scll_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_rqmtrlid, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg)
  36. public function integer uof_add_rqmtrl_dstrqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg)
  37. public function integer uof_edit_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg)
  38. end prototypes
  39. public function integer uof_check_dstrqty (long arg_scid, long arg_taskid, long arg_printid, ref string arg_msg);
  40. Integer rslt = 1
  41. Integer li_status
  42. Integer li_scllflag
  43. Integer li_scllsecflag
  44. Decimal ld_dstrqty
  45. SELECT u_saletaskmx.flag,
  46. u_saletaskmx.scllflag
  47. INTO :li_status,
  48. :li_scllflag
  49. FROM u_saletaskmx
  50. WHERE u_saletaskmx.scid = :arg_scid AND
  51. u_saletaskmx.taskid = :arg_taskid AND
  52. u_saletaskmx.printid = :arg_printid;
  53. IF sqlca.SQLCode <> 0 THEN
  54. arg_msg = "查询销售订单明细状态失败," + sqlca.SQLErrText
  55. rslt = 0
  56. ELSE
  57. IF li_status <> 1 THEN
  58. arg_msg = "销售订单明细不是在进行状态,不能计算用料"
  59. rslt = 0
  60. GOTO ext
  61. ELSE
  62. IF li_scllflag = 1 THEN
  63. arg_msg = "销售订单明细已用料审核,不能计算用料"
  64. rslt = 0
  65. GOTO ext
  66. END IF
  67. END IF
  68. SELECT sum ( DstrQty )
  69. INTO :ld_dstrqty
  70. FROM u_saleRqMtrl_scll
  71. WHERE u_saleRqMtrl_scll.scid = :arg_scid AND
  72. u_saleRqMtrl_scll.taskID = :arg_taskid AND
  73. u_saleRqMtrl_scll.printid = :arg_printid
  74. USING sqlca;
  75. IF sqlca.SQLCode <> 0 THEN
  76. arg_msg = "查询销售订单明细已领料数失败," + sqlca.SQLErrText
  77. rslt = 0
  78. GOTO ext
  79. ELSEIF ld_dstrqty > 0 THEN
  80. arg_msg = "销售订单明细已有领料数,不能计算"
  81. rslt = 0
  82. GOTO ext
  83. END IF
  84. END IF
  85. ext:
  86. RETURN rslt
  87. end function
  88. public function integer uof_get_qty (integer arg_type, long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_qty, ref string arg_msg);
  89. Integer rslt = 1
  90. Decimal ld_qty
  91. String ls_mtrlcode
  92. Integer li_ordertype
  93. SELECT mtrlcode
  94. INTO :ls_mtrlcode
  95. FROM u_mtrldef Where mtrlid = :arg_mtrlid USING sqlca;
  96. IF sqlca.SQLCode <> 0 THEN
  97. arg_msg = "查询物料编码失败," + sqlca.SQLErrText
  98. rslt = 0
  99. GOTO ext
  100. ELSE
  101. CHOOSE CASE arg_type
  102. CASE 1
  103. SELECT sum ( u_buytaskmx.qty - u_buytaskmx.consignedqty )
  104. INTO :ld_qty
  105. FROM u_buytaskmx , u_buytask
  106. WHERE u_buytaskmx.scid = :arg_scid
  107. AND u_buytaskmx.mtrlid = :arg_mtrlid
  108. AND u_buytaskmx.status = :arg_status
  109. AND u_buytaskmx.woodcode = :arg_woodcode
  110. AND u_buytaskmx.pcode = :arg_pcode
  111. AND u_buytaskmx.scid = u_buytask.scid
  112. AND u_buytaskmx.taskid = u_buytask.taskid
  113. AND u_buytaskmx.stopflag = 0
  114. AND u_buytask.status = 1
  115. USING sqlca;
  116. IF sqlca.SQLCode = -1 THEN
  117. arg_msg = "查询物料:" + ls_mtrlcode + " 采购未进仓数失败," + sqlca.SQLErrText
  118. rslt = 0
  119. GOTO ext
  120. END IF
  121. CASE 3
  122. SELECT sum ( u_order_wfjgMx.qty - u_order_wfjgMx.consignedqty - u_order_wfjgMx.wasteqty )
  123. INTO :ld_qty
  124. FROM u_order_wfjgMx , u_order_wfjg
  125. WHERE u_order_wfjgMx.scid = :arg_scid AND
  126. u_order_wfjgMx.mtrlid = :arg_mtrlid AND
  127. u_order_wfjgMx.status = :arg_status AND
  128. u_order_wfjgMx.woodcode = :arg_woodcode AND
  129. u_order_wfjgMx.pcode = :arg_pcode AND
  130. u_order_wfjgMx.scid = u_order_wfjg.scid AND
  131. u_order_wfjgMx.wfjgID = u_order_wfjg.wfjgID AND
  132. u_order_wfjg.status = 1 USING sqlca;
  133. IF sqlca.SQLCode = -1 THEN
  134. arg_msg = "查询物料:" + ls_mtrlcode + " 外协未进仓数失败," + sqlca.SQLErrText
  135. rslt = 0
  136. GOTO ext
  137. END IF
  138. CASE 4
  139. SELECT sum ( u_Mtrlware.noallocqty )
  140. INTO :ld_qty
  141. FROM u_Mtrlware , u_storage
  142. WHERE u_Mtrlware.storageid = u_storage.storageid AND
  143. u_Mtrlware.scid = :arg_scid AND
  144. u_Mtrlware.mtrlid = :arg_mtrlid AND
  145. u_Mtrlware.status = :arg_status AND
  146. u_Mtrlware.woodcode = :arg_woodcode AND
  147. u_Mtrlware.pcode = :arg_pcode USING sqlca;
  148. IF sqlca.SQLCode = -1 THEN
  149. arg_msg = "查询物料:" + ls_mtrlcode + " 库存数失败," + sqlca.SQLErrText
  150. rslt = 0
  151. GOTO ext
  152. END IF
  153. CASE 5
  154. SELECT sum (u_saleRqMtrl_scll.trueRqqty - u_saleRqMtrl_scll.DstrQty )
  155. INTO :ld_qty
  156. FROM u_saleRqMtrl_scll INNER JOIN
  157. u_SaleTaskMx ON u_saleRqMtrl_scll.scid = u_SaleTaskMx.scid AND
  158. u_saleRqMtrl_scll.taskID = u_SaleTaskMx.TaskID AND
  159. u_saleRqMtrl_scll.printid = u_SaleTaskMx.printid
  160. WHERE (u_SaleTaskMx.flag = 1) AND
  161. u_saleRqMtrl_scll.scid = :arg_scid AND
  162. u_saleRqMtrl_scll.mtrlid = :arg_mtrlid AND
  163. u_saleRqMtrl_scll.status = :arg_status AND
  164. u_saleRqMtrl_scll.woodcode = :arg_woodcode AND
  165. u_saleRqMtrl_scll.pcode = :arg_pcode AND
  166. not exists (select 1 from u_saleRqMtrl_scll a where a.scid = u_saleRqMtrl_scll.scid and a.taskid = u_saleRqMtrl_scll.taskid and a.printid = u_saleRqMtrl_scll.printid and a.scid = :arg_scid AND
  167. a.taskid = :arg_taskid AND
  168. a.printid = :arg_printid)
  169. USING sqlca;
  170. IF sqlca.SQLCode = -1 THEN
  171. arg_msg = "查询物料:" + ls_mtrlcode + " 订单需求数失败," + sqlca.SQLErrText
  172. rslt = 0
  173. GOTO ext
  174. END IF
  175. END CHOOSE
  176. IF IsNull(ld_qty) THEN
  177. ld_qty = 0
  178. END IF
  179. END IF
  180. ext:
  181. arg_ref_qty = ld_qty
  182. RETURN rslt
  183. end function
  184. public function integer uof_cmpl_rqmtrl_re (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, integer arg_plantype, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, integer arg_wrkgrpid_scll, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);
  185. Integer rslt = 1
  186. Integer li_pfflag
  187. Long arr_mxt
  188. Long ll_i
  189. Boolean if_special_notuse = FALSE
  190. String ls_mtrlcode
  191. String ls_mtrlname
  192. String ls_mtrlmode
  193. String ls_unit
  194. String ls_mtrltype
  195. Integer li_mtrlkind
  196. Integer li_ifselforder
  197. Integer li_mtrlorigin
  198. Long ll_scid_mtrl
  199. Long ll_wrkgrpid_mtrl
  200. Decimal ld_buydays
  201. Decimal ld_orderdays
  202. Decimal ld_wfjgdays
  203. Decimal ld_aheaddays
  204. Date ld_sdate
  205. Date ld_edate
  206. DateTime ldt_sdate
  207. DateTime ldt_edate
  208. DateTime ldt_sdate_2359
  209. Decimal ld_cmplqty
  210. Decimal ld_mqty
  211. Decimal ld_bqty
  212. Decimal ld_wqty
  213. Decimal ld_pqty
  214. Decimal ld_otherrqqty
  215. Decimal ld_samerqqty
  216. Long count
  217. Long ll_j
  218. Decimal cmpl_qty
  219. s_pfmx ls_s_pfmx[]
  220. DECLARE pf_cur CURSOR FOR
  221. SELECT u_PrdPF.Sonscale ,
  222. u_PrdPF.SonLoss ,
  223. u_PrdPF.SonDECLosS ,
  224. u_PrdPF.SonMtrlid ,
  225. u_PrdPF.status ,
  226. u_PrdPF.woodcode ,
  227. u_PrdPF.pcode ,
  228. u_PrdPF.wrkGrpid ,
  229. u_mtrldef.mtrlorigin ,
  230. u_PrdPF.dscrp
  231. FROM u_PrdPF , u_mtrldef
  232. WHERE ( u_PrdPF.mtrlid = :arg_mtrlid )
  233. AND ( u_PrdPF.pfcode = '组装' )
  234. And ( u_PrdPF.SonMtrlid = u_mtrldef.mtrlid ) ;
  235. deep ++
  236. IF deep > 500 THEN
  237. arg_msg = "递归太深" + String(deep)
  238. rslt = 0
  239. ELSE
  240. SELECT mtrlcode ,
  241. mtrlname ,
  242. mtrlmode ,
  243. mtrltype ,
  244. unit ,
  245. mtrlkind ,
  246. mtrlorigin
  247. INTO :ls_mtrlcode,
  248. :ls_mtrlname,
  249. :ls_mtrlmode,
  250. :ls_mtrltype,
  251. :ls_unit,
  252. :li_mtrlkind ,
  253. :li_mtrlorigin
  254. FROM u_mtrldef
  255. Where mtrlid = :arg_mtrlid USING sqlca;
  256. IF sqlca.SQLCode <> 0 THEN
  257. arg_msg = "查询物料资失败," + sqlca.SQLErrText
  258. rslt = 0
  259. ELSE
  260. IF arg_if_allowuse = 1 THEN
  261. IF uof_get_qty(1,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_bqty,arg_msg) = 0 THEN
  262. rslt = 0
  263. GOTO ext
  264. END IF
  265. IF uof_get_qty(2,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_pqty,arg_msg) = 0 THEN
  266. rslt = 0
  267. GOTO ext
  268. END IF
  269. IF uof_get_qty(3,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_wqty,arg_msg) = 0 THEN
  270. rslt = 0
  271. GOTO ext
  272. END IF
  273. //
  274. // if uof_get_qty(4,arg_ifdate,arg_rqdate,arg_scid,arg_orderid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_mqty,arg_msg) = 0 then
  275. // rslt = 0
  276. // goto ext
  277. // end if
  278. // if uof_get_other_rqqty(arg_scid,arg_orderid,arg_mtrlid,li_mtrlorigin,arg_status,arg_woodcode,arg_pcode,ld_otherrqqty,arg_ifdate,ldt_sdate_2359,arg_msg) = 0 then
  279. // rslt = 0
  280. // goto label_0
  281. // end if
  282. END IF
  283. IF deep = 1 THEN
  284. ld_cmplqty = arg_qty
  285. ELSE
  286. arr_mxt = UpperBound(arg_s_mtrl.mtrlid)
  287. IF arr_mxt = 0 THEN
  288. ld_samerqqty = 0
  289. ELSE
  290. FOR ll_i = 1 TO arr_mxt
  291. IF arg_s_mtrl.scid[ll_i] = arg_scid AND arg_s_mtrl.taskid[ll_i] = arg_taskid AND arg_s_mtrl.printid[ll_i] = arg_printid AND arg_s_mtrl.mtrlid[ll_i] = arg_mtrlid AND arg_s_mtrl.status[ll_i] = arg_status AND arg_s_mtrl.woodcode[ll_i] = arg_woodcode AND arg_s_mtrl.pcode[ll_i] = arg_pcode AND arg_s_mtrl.wrkgrpid_scll[ll_i] = arg_wrkgrpid_scll THEN
  292. ld_samerqqty = ld_samerqqty + arg_s_mtrl.cmplqty[ll_i]
  293. END IF
  294. NEXT
  295. END IF
  296. IF arg_if_allowuse = 1 THEN
  297. If ((ifbuy_mtrl_not_useqty) Or (ifwx_mtrl_not_useqty)) THEN
  298. IF li_mtrlorigin = 2 THEN
  299. IF ifbuy_mtrl_not_useqty THEN
  300. ld_cmplqty = arg_qty
  301. if_special_notuse = TRUE
  302. END IF
  303. ELSE
  304. IF li_mtrlorigin = 3 THEN
  305. IF ifwx_mtrl_not_useqty THEN
  306. ld_cmplqty = arg_qty
  307. if_special_notuse = TRUE
  308. END IF
  309. END IF
  310. END IF
  311. END IF
  312. IF NOT if_special_notuse THEN
  313. IF ld_samerqqty > 0 THEN
  314. ld_cmplqty = arg_qty
  315. ELSE
  316. IF ld_otherrqqty >= ld_mqty + ld_bqty + ld_wqty + ld_pqty THEN
  317. ld_cmplqty = arg_qty
  318. ELSE
  319. IF arg_qty > ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty THEN
  320. ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty)
  321. ELSE
  322. ld_cmplqty = 0
  323. END IF
  324. END IF
  325. END IF
  326. END IF
  327. ELSE
  328. ld_cmplqty = arg_qty
  329. END IF
  330. arr_mxt ++
  331. arg_s_mtrl.scid[arr_mxt] = arg_scid
  332. arg_s_mtrl.taskid[arr_mxt] = arg_taskid
  333. arg_s_mtrl.printid[arr_mxt] = arg_printid
  334. arg_s_mtrl.mtrlid[arr_mxt] = arg_mtrlid
  335. arg_s_mtrl.qty[arr_mxt] = arg_qty
  336. arg_s_mtrl.status[arr_mxt] = arg_status
  337. arg_s_mtrl.woodcode[arr_mxt] = arg_woodcode
  338. arg_s_mtrl.pcode[arr_mxt] = arg_pcode
  339. arg_s_mtrl.cmplqty[arr_mxt] = ld_cmplqty
  340. arg_s_mtrl.plantype[arr_mxt] = arg_plantype
  341. arg_s_mtrl.mqty[arr_mxt] = ld_mqty
  342. arg_s_mtrl.bqty[arr_mxt] = ld_bqty
  343. arg_s_mtrl.wqty[arr_mxt] = ld_wqty
  344. arg_s_mtrl.pqty[arr_mxt] = ld_pqty
  345. // arg_s_mtrl.otherrqqty[arr_mxt] = ld_otherrqqty
  346. arg_s_mtrl.mtrlcode[arr_mxt] = ls_mtrlcode
  347. arg_s_mtrl.mtrlname[arr_mxt] = ls_mtrlname
  348. arg_s_mtrl.mtrlmode[arr_mxt] = ls_mtrlmode
  349. arg_s_mtrl.mtrltype[arr_mxt] = ls_mtrltype
  350. arg_s_mtrl.unit[arr_mxt] = ls_unit
  351. arg_s_mtrl.mtrlorigin[arr_mxt] = arg_plantype
  352. arg_s_mtrl.produce_scid[arr_mxt] = ll_scid_mtrl
  353. arg_s_mtrl.produce_wrkgrpid[arr_mxt] = ll_wrkgrpid_mtrl
  354. arg_s_mtrl.wrkgrpid_scll[arr_mxt] = arg_wrkgrpid_scll
  355. arg_s_mtrl.lp[arr_mxt] = arg_lp
  356. arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty
  357. arg_s_mtrl.ifmainmtrlid[arr_mxt] = 0
  358. arg_s_mtrl.pmtrlid[arr_mxt] = arg_pmtrlid
  359. arg_s_mtrl.ifchanged[arr_mxt] = 0
  360. If ((arg_plantype = 2) Or (arg_plantype = 6)) THEN
  361. rslt = 1
  362. GOTO ext
  363. END IF
  364. END IF
  365. IF ld_cmplqty <= 0 THEN
  366. rslt = 1
  367. ELSE
  368. count = 0
  369. OPEN pf_cur;
  370. count = 1
  371. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale ,
  372. :ls_s_pfmx[count].SonLoss ,
  373. :ls_s_pfmx[count].SonDECLosS ,
  374. :ls_s_pfmx[count].SonMtrlid ,
  375. :ls_s_pfmx[count].status ,
  376. :ls_s_pfmx[count].woodcode ,
  377. :ls_s_pfmx[count].pcode ,
  378. :ls_s_pfmx[count].wrkGrpid ,
  379. :ls_s_pfmx[count].mtrlorigin ,
  380. :ls_s_pfmx[count].dscrp ;
  381. DO WHILE sqlca.SQLCode = 0
  382. count ++
  383. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale ,
  384. :ls_s_pfmx[count].SonLoss ,
  385. :ls_s_pfmx[count].SonDECLosS ,
  386. :ls_s_pfmx[count].SonMtrlid ,
  387. :ls_s_pfmx[count].status ,
  388. :ls_s_pfmx[count].woodcode ,
  389. :ls_s_pfmx[count].pcode ,
  390. :ls_s_pfmx[count].wrkGrpid ,
  391. :ls_s_pfmx[count].mtrlorigin ,
  392. :ls_s_pfmx[count].dscrp ;
  393. LOOP
  394. count = count - 1
  395. CLOSE pf_cur;
  396. IF count = 0 THEN
  397. rslt = 1
  398. ELSE
  399. FOR ll_j = 1 TO count
  400. IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN
  401. cmpl_qty = f_option232_qty((ld_cmplqty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS)
  402. ELSE
  403. cmpl_qty = 0
  404. END IF
  405. rslt = uof_cmpl_rqmtrl_re(arg_scid,arg_taskid,arg_printid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].mtrlorigin,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty,ls_s_pfmx[ll_j].wrkGrpid,arg_lp + 1,arg_if_allowuse,arg_s_mtrl,arg_msg)
  406. IF rslt = 0 THEN
  407. EXIT
  408. END IF
  409. NEXT
  410. END IF
  411. END IF
  412. END IF
  413. END IF
  414. ext:
  415. RETURN rslt
  416. end function
  417. public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_wrkgrpid_scll, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);
  418. Integer rslt = 1
  419. Integer li_pfflag
  420. Long li_mxt
  421. Long ll_i
  422. String ls_mtrlcode
  423. String ls_mtrlname
  424. String ls_mtrlmode
  425. String ls_unit
  426. String ls_mtrltype
  427. Integer li_mtrlorigin
  428. Integer li_ifselforder
  429. Long ll_scid_mtrl
  430. Long ll_wrkgrpid_mtrl
  431. Long count
  432. Long ll_j
  433. Decimal cmpl_qty
  434. s_pfmx ls_s_pfmx[]
  435. DECLARE pf_cur CURSOR FOR
  436. SELECT u_PrdPF.Sonscale ,
  437. u_PrdPF.SonLoss ,
  438. u_PrdPF.SonDECLosS ,
  439. u_PrdPF.SonMtrlid ,
  440. u_PrdPF.status ,
  441. u_PrdPF.woodcode ,
  442. u_PrdPF.pcode ,
  443. u_PrdPF.wrkGrpid ,
  444. u_PrdPF.dscrp
  445. From u_PrdPF Where ( u_PrdPF.mtrlid = :arg_mtrlid ) And ( u_PrdPF.pfcode = '组装' ) ;
  446. deep ++
  447. IF deep > 2000 THEN
  448. arg_msg = "递归太深" + String(deep)
  449. rslt = 0
  450. ELSE
  451. SELECT mtrlcode ,
  452. mtrlname ,
  453. mtrlmode ,
  454. mtrltype ,
  455. unit ,
  456. Mtrlorigin
  457. INTO :ls_mtrlcode,
  458. :ls_mtrlname,
  459. :ls_mtrlmode,
  460. :ls_mtrltype,
  461. :ls_unit,
  462. :li_mtrlorigin
  463. From u_mtrldef Where mtrlid = :arg_mtrlid Using sqlca;
  464. IF sqlca.SQLCode <> 0 THEN
  465. arg_msg = "查询物料资失败," + sqlca.SQLErrText
  466. rslt = 0
  467. ELSE
  468. IF deep > 1 THEN
  469. li_mxt = UpperBound(arg_s_mtrl.mtrlid)
  470. li_mxt ++
  471. arg_s_mtrl.mtrlid[li_mxt] = arg_mtrlid
  472. arg_s_mtrl.qty[li_mxt] = arg_qty
  473. arg_s_mtrl.status[li_mxt] = arg_status
  474. arg_s_mtrl.woodcode[li_mxt] = arg_woodcode
  475. arg_s_mtrl.pcode[li_mxt] = arg_pcode
  476. arg_s_mtrl.cmplqty[li_mxt] = arg_qty
  477. arg_s_mtrl.plantype[li_mxt] = li_mtrlorigin
  478. arg_s_mtrl.mtrlcode[li_mxt] = ls_mtrlcode
  479. arg_s_mtrl.mtrlname[li_mxt] = ls_mtrlname
  480. arg_s_mtrl.mtrlmode[li_mxt] = ls_mtrlmode
  481. arg_s_mtrl.mtrltype[li_mxt] = ls_mtrltype
  482. arg_s_mtrl.unit[li_mxt] = ls_unit
  483. arg_s_mtrl.Mtrlorigin[li_mxt] = li_mtrlorigin
  484. arg_s_mtrl.produce_scid[li_mxt] = ll_scid_mtrl
  485. arg_s_mtrl.produce_wrkgrpid[li_mxt] = ll_wrkgrpid_mtrl
  486. arg_s_mtrl.wrkgrpid_scll[li_mxt] = arg_wrkgrpid_scll
  487. arg_s_mtrl.pmtrlid[li_mxt] = arg_pmtrlid
  488. END IF
  489. CHOOSE CASE li_mtrlorigin
  490. CASE 2, 6
  491. rslt = 1
  492. GOTO ext
  493. CASE 0
  494. IF ll_scid_mtrl <> arg_scid THEN
  495. rslt = 1
  496. GOTO ext
  497. END IF
  498. END CHOOSE
  499. count = 0
  500. OPEN pf_cur;
  501. count = 1
  502. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale ,
  503. :ls_s_pfmx[count].SonLoss ,
  504. :ls_s_pfmx[count].SonDECLosS ,
  505. :ls_s_pfmx[count].SonMtrlid ,
  506. :ls_s_pfmx[count].status ,
  507. :ls_s_pfmx[count].woodcode ,
  508. :ls_s_pfmx[count].pcode ,
  509. :ls_s_pfmx[count].wrkGrpid ,
  510. :ls_s_pfmx[count].dscrp ;
  511. DO WHILE sqlca.SQLCode = 0
  512. count ++
  513. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale ,
  514. :ls_s_pfmx[count].SonLoss ,
  515. :ls_s_pfmx[count].SonDECLosS ,
  516. :ls_s_pfmx[count].SonMtrlid ,
  517. :ls_s_pfmx[count].status ,
  518. :ls_s_pfmx[count].woodcode ,
  519. :ls_s_pfmx[count].pcode ,
  520. :ls_s_pfmx[count].wrkGrpid ,
  521. :ls_s_pfmx[count].dscrp ;
  522. LOOP
  523. count = count - 1
  524. CLOSE pf_cur;
  525. IF count = 0 THEN
  526. rslt = 1
  527. ELSE
  528. FOR ll_j = 1 To count
  529. IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN
  530. cmpl_qty = f_option232_qty((arg_qty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS)
  531. ELSE
  532. cmpl_qty = 0
  533. END IF
  534. rslt = uof_cmpl_rqmtrl_change(arg_scid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty,ls_s_pfmx[ll_j].wrkGrpid,arg_s_mtrl,arg_msg)
  535. IF rslt = 0 THEN
  536. EXIT
  537. END IF
  538. NEXT
  539. END IF
  540. END IF
  541. END IF
  542. ext:
  543. RETURN rslt
  544. end function
  545. public function integer uof_add_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);
  546. Integer rslt = 1
  547. Long ll_i
  548. Integer li_ordertype
  549. String ls_mtrlcode
  550. Long cnt
  551. Integer li_ifselforder
  552. Long ll_mxpkid
  553. /////////
  554. Decimal ld_consignedqty,ld_inqty
  555. SELECT sum(consignedqty),
  556. sum(inqty)
  557. INTO :ld_consignedqty,
  558. :ld_inqty
  559. FROM u_orderRqMtrl
  560. WHERE taskid = :arg_s_mtrl.taskid[1]
  561. AND scid = :arg_s_mtrl.scid[1]
  562. AND printid = :arg_s_mtrl.printid[1]
  563. AND plantype = 2 USING sqlca;
  564. IF sqlca.SQLCode = -1 THEN
  565. arg_msg = "查询原用料信息失败," + sqlca.SQLErrText
  566. rslt = 0
  567. END IF
  568. IF ld_consignedqty > 0 THEN
  569. arg_msg = "原用料已有采购已订货数,不能删除"
  570. rslt = 0
  571. ELSEIF ld_inqty > 0 THEN
  572. arg_msg = "原用料已有采购已订货数,不能删除"
  573. rslt = 0
  574. END IF
  575. ld_consignedqty = 0
  576. ld_inqty = 0
  577. SELECT sum(consignedqty), sum(inqty)
  578. INTO :ld_consignedqty, :ld_inqty
  579. FROM u_orderRqMtrl
  580. WHERE taskid = :arg_s_mtrl.taskid[1]
  581. AND scid = :arg_s_mtrl.scid[1]
  582. AND printid = :arg_s_mtrl.printid[1]
  583. AND plantype = 3 USING sqlca;
  584. IF sqlca.SQLCode = -1 THEN
  585. arg_msg = "查询原用料信息失败," + sqlca.SQLErrText
  586. rslt = 0
  587. END IF
  588. IF ld_consignedqty > 0 THEN
  589. arg_msg = "原用料已有外协已订货数,不能删除"
  590. rslt = 0
  591. ELSEIF ld_inqty > 0 THEN
  592. arg_msg = "原用料已有外协已订货数,不能删除"
  593. rslt = 0
  594. END IF
  595. /////////////////////
  596. DELETE FROM u_orderRqMtrl
  597. WHERE taskid = :arg_s_mtrl.taskid[1]
  598. AND scid = :arg_s_mtrl.scid[1]
  599. AND printid = :arg_s_mtrl.printid[1] USING sqlca;
  600. IF sqlca.SQLCode <> 0 THEN
  601. arg_msg = "删除原用料失败," + sqlca.SQLErrText
  602. rslt = 0
  603. goto ext
  604. END IF
  605. FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid)
  606. SELECT u_mtrldef.dftsptid,
  607. u_mtrldef.mrp_unit,
  608. u_mtrldef.rate_buy,
  609. u_mtrldef.rate_scll,
  610. u_mtrldef.rate_sale
  611. INTO :arg_s_mtrl.sptid[ll_i],
  612. :arg_s_mtrl.mrp_unit[ll_i],
  613. :arg_s_mtrl.rate_buy[ll_i],
  614. :arg_s_mtrl.rate_scll[ll_i],
  615. :arg_s_mtrl.rate_sale[ll_i]
  616. FROM u_mtrldef
  617. Where mtrlid = :arg_s_mtrl.mtrlid[ll_i];
  618. IF sqlca.SQLCode <> 0 THEN arg_s_mtrl.sptid[ll_i] = 0
  619. CHOOSE CASE arg_s_mtrl.mrp_unit[ll_i]
  620. CASE 1
  621. IF arg_s_mtrl.rate_buy[ll_i] > 0 THEN
  622. arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_buy[ll_i]) * arg_s_mtrl.rate_buy[ll_i]
  623. END IF
  624. CASE 2
  625. IF arg_s_mtrl.rate_scll[ll_i] > 0 THEN
  626. arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_scll[ll_i]) * arg_s_mtrl.rate_scll[ll_i]
  627. END IF
  628. CASE 3
  629. IF arg_s_mtrl.rate_sale[ll_i] > 0 THEN
  630. arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_sale[ll_i]) * arg_s_mtrl.rate_sale[ll_i]
  631. END IF
  632. END CHOOSE
  633. UPDATE u_orderRqMtrl
  634. SET RqQty = RqQty + :arg_s_mtrl.qty[ll_i] ,
  635. truerqqty = truerqqty + :arg_s_mtrl.cmplqty[ll_i]
  636. WHERE scid = :arg_s_mtrl.scid[ll_i] AND
  637. taskID = :arg_s_mtrl.taskid[ll_i] AND
  638. printid = :arg_s_mtrl.printid[ll_i] AND
  639. MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND
  640. wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND
  641. status = :arg_s_mtrl.status[ll_i] AND
  642. woodcode = :arg_s_mtrl.woodcode[ll_i] AND
  643. pcode = :arg_s_mtrl.pcode[ll_i] AND
  644. plantype = :arg_s_mtrl.plantype[ll_i] USING sqlca;
  645. IF sqlca.SQLCode = 0 THEN
  646. IF sqlca.SQLNRows = 0 THEN
  647. ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,FALSE,sqlca)
  648. IF ll_mxpkid <= 0 THEN
  649. arg_msg = "行:" + String(ll_i) + ",取id失败," + arg_msg
  650. rslt = 0
  651. EXIT
  652. END IF
  653. INSERT INTO u_orderRqMtrl ( scid ,
  654. taskID ,
  655. printid,
  656. mtrlid ,
  657. rqqty ,
  658. truerqqty ,
  659. plantype ,
  660. mqty ,
  661. bqty ,
  662. wqty ,
  663. pqty,
  664. otherrqqty,
  665. minqty,
  666. wrkgrpid ,
  667. status ,
  668. woodcode ,
  669. pcode ,
  670. mxpkid ,
  671. sptid) VALUES (
  672. :arg_s_mtrl.scid[ll_i],
  673. :arg_s_mtrl.taskid[ll_i],
  674. :arg_s_mtrl.printid[ll_i],
  675. :arg_s_mtrl.mtrlid[ll_i],
  676. :arg_s_mtrl.qty[ll_i],
  677. :arg_s_mtrl.cmplqty[ll_i],
  678. :arg_s_mtrl.plantype[ll_i],
  679. :arg_s_mtrl.mqty[ll_i],
  680. :arg_s_mtrl.bqty[ll_i],
  681. :arg_s_mtrl.wqty[ll_i],
  682. :arg_s_mtrl.pqty[ll_i],
  683. :arg_s_mtrl.otherrqqty[ll_i],
  684. :arg_s_mtrl.minqty[ll_i],
  685. :arg_s_mtrl.wrkgrpid_scll[ll_i] ,
  686. :arg_s_mtrl.status[ll_i],
  687. :arg_s_mtrl.woodcode[ll_i],
  688. :arg_s_mtrl.pcode[ll_i] ,
  689. :ll_mxpkid ,
  690. :arg_s_mtrl.sptid[ll_i]) USING sqlca;
  691. IF sqlca.SQLCode <> 0 THEN
  692. arg_msg = "行:" + String(ll_i) + ",建立物料需求表失败," + sqlca.SQLErrText
  693. rslt = 0
  694. EXIT
  695. END IF
  696. END IF
  697. ELSE
  698. arg_msg = "行:" + String(ll_i) + ",更新物料需求表失败," + sqlca.SQLErrText
  699. rslt = 0
  700. EXIT
  701. END IF
  702. NEXT
  703. ext:
  704. IF rslt = 0 THEN
  705. ROLLBACK USING sqlca;
  706. ELSEIF rslt = 1 AND arg_ifcommit THEN
  707. COMMIT USING sqlca;
  708. END IF
  709. RETURN rslt
  710. end function
  711. public function integer uof_add_rqmtrl_tree (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//运算保存
  712. Integer rslt = 1
  713. Long ll_i
  714. DELETE FROM u_orderRqMtrl_tree
  715. WHERE taskid = :arg_s_mtrl.taskid[1]
  716. AND scid = :arg_s_mtrl.scid[1]
  717. AND printid = :arg_s_mtrl.printid[1]
  718. Using sqlca;
  719. IF sqlca.SQLCode <> 0 THEN
  720. arg_msg = "删除物料需求结构失败," + sqlca.SQLErrText
  721. rslt = 0
  722. GOTO ext
  723. END IF
  724. FOR ll_i = 1 To UpperBound(arg_s_mtrl.mtrlid)
  725. IF arg_s_mtrl.ifchanged[ll_i] = 0 THEN
  726. IF arg_s_mtrl.qty[ll_i] = 0 And arg_s_mtrl.cmplqty[ll_i] <> 0 THEN
  727. arg_msg = "行:" + String( ll_i ) + ",物料有需求数,无领料数,请检查"
  728. rslt = 0
  729. GOTO ext
  730. END IF
  731. END IF
  732. INSERT INTO u_orderRqMtrl_tree ( scid ,
  733. taskid ,
  734. mtrlid ,
  735. rqqty ,
  736. truerqqty ,
  737. plantype ,
  738. mqty ,
  739. bqty ,
  740. wqty ,
  741. pqty ,
  742. otherrqqty,
  743. samerqqty,
  744. minqty,
  745. maxqty,
  746. ckwareqty,
  747. wrkgrpid ,
  748. lp ,
  749. printid ,
  750. status ,
  751. woodcode ,
  752. pcode ,
  753. ifmainmtrlid ,
  754. ifchanged ,
  755. pmtrlid ,
  756. pfgroup,
  757. mxpkid,
  758. promode,
  759. pfgroupmode,
  760. pfklmode,
  761. pfgroupqty
  762. ) VALUES
  763. (
  764. :arg_s_mtrl.scid[ll_i],
  765. :arg_s_mtrl.taskid[ll_i],
  766. :arg_s_mtrl.mtrlid[ll_i],
  767. :arg_s_mtrl.qty[ll_i],
  768. :arg_s_mtrl.cmplqty[ll_i],
  769. :arg_s_mtrl.plantype[ll_i],
  770. :arg_s_mtrl.mqty[ll_i],
  771. :arg_s_mtrl.bqty[ll_i],
  772. :arg_s_mtrl.wqty[ll_i],
  773. :arg_s_mtrl.pqty[ll_i] ,
  774. :arg_s_mtrl.otherrqqty[ll_i] ,
  775. :arg_s_mtrl.samerqqty[ll_i] ,
  776. :arg_s_mtrl.minqty[ll_i] ,
  777. :arg_s_mtrl.maxqty[ll_i] ,
  778. :arg_s_mtrl.ckwareqty[ll_i] ,
  779. :arg_s_mtrl.produce_wrkgrpid[ll_i] ,
  780. :arg_s_mtrl.lp[ll_i],
  781. :arg_s_mtrl.printid[ll_i],
  782. :arg_s_mtrl.status[ll_i],
  783. :arg_s_mtrl.woodcode[ll_i],
  784. :arg_s_mtrl.pcode[ll_i],
  785. :arg_s_mtrl.ifmainmtrlid[ll_i] ,
  786. :arg_s_mtrl.ifchanged[ll_i] ,
  787. :arg_s_mtrl.pmtrlid[ll_i],
  788. :arg_s_mtrl.pfgroup[ll_i],
  789. :arg_s_mtrl.mxpkid[ll_i],
  790. :arg_s_mtrl.promode[ll_i],
  791. :arg_s_mtrl.pfgroupmode[ll_i],
  792. :arg_s_mtrl.pfklmode[ll_i],
  793. :arg_s_mtrl.pfgroupqty[ll_i]) Using sqlca;
  794. IF sqlca.SQLCode <> 0 THEN
  795. arg_msg = "行:" + String(ll_i) + ",建立物料需求结构表失败," + sqlca.SQLErrText
  796. rslt = 0
  797. GOTO ext
  798. END IF
  799. NEXT
  800. ext:
  801. IF rslt = 0 THEN
  802. ROLLBACK Using sqlca;
  803. ELSEIF rslt = 1 And arg_ifcommit THEN
  804. COMMIT Using sqlca;
  805. END IF
  806. RETURN rslt
  807. end function
  808. public function integer uof_del_rqmtrl_scll (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg);
  809. Integer rslt = 1
  810. DELETE FROM u_saleRqMtrl_scll
  811. WHERE taskid = :arg_taskid
  812. AND scid = :arg_scid
  813. And printid = :arg_printid Using sqlca;
  814. IF sqlca.SQLCode <> 0 THEN
  815. arg_msg = "删除原领料明细失败," + sqlca.SQLErrText
  816. rslt = 0
  817. END IF
  818. IF rslt = 0 THEN
  819. ROLLBACK Using sqlca;
  820. ELSEIF rslt = 1 And arg_ifcommit THEN
  821. COMMIT Using sqlca;
  822. END IF
  823. RETURN rslt
  824. end function
  825. public function integer uof_add_rqmtrl_scll (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  826. Long i,ls_newid
  827. DELETE FROM u_saleRqMtrl_scll
  828. WHERE u_saleRqMtrl_scll.scid = :arg_s_mtrl.scid[1] AND
  829. u_saleRqMtrl_scll.taskID = :arg_s_mtrl.taskid[1] AND
  830. u_saleRqMtrl_scll.printid = :arg_s_mtrl.printid[1] USING sqlca;
  831. IF sqlca.SQLCode <> 0 THEN
  832. rslt = 0
  833. arg_msg = '删除订单明细的物料领料明细失败'
  834. GOTO ext
  835. END IF
  836. //messagebox("",UpperBound(arg_s_mtrl.taskID))
  837. FOR i = 1 TO UpperBound(arg_s_mtrl.taskID)
  838. if arg_s_mtrl.ifmainmtrlid[i] = 1 then continue
  839. if arg_s_mtrl.qty[i] = 0 then continue
  840. ls_newid = f_sys_scidentity(arg_s_mtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,sqlca)
  841. IF ls_newid <= 0 THEN
  842. rslt = 0
  843. GOTO ext
  844. END IF
  845. INSERT INTO u_saleRqMtrl_scll
  846. ( rqmtrlid,
  847. scid,
  848. taskID,
  849. MtrlID,
  850. printid,
  851. trueRqqty,
  852. costamt,
  853. status,
  854. woodcode,
  855. pcode,
  856. ifchanged )
  857. VALUES ( :ls_newid,
  858. :arg_s_mtrl.scid[i],
  859. :arg_s_mtrl.taskID[i],
  860. :arg_s_mtrl.MtrlID[i],
  861. :arg_s_mtrl.printid[i],
  862. :arg_s_mtrl.qty[i],
  863. 0,
  864. :arg_s_mtrl.status[i],
  865. :arg_s_mtrl.woodcode[i],
  866. :arg_s_mtrl.pcode[i],
  867. :arg_s_mtrl.ifchanged[i] ) USING sqlca;
  868. IF sqlca.SQLCode <> 0 THEN
  869. rslt = 0
  870. arg_msg = '插入订单明细的物料领料明细失败'
  871. GOTO ext
  872. END IF
  873. NEXT
  874. ext:
  875. IF rslt = 0 THEN
  876. ROLLBACK USING sqlca;
  877. ELSEIF arg_ifcommit THEN
  878. COMMIT USING sqlca;
  879. END IF
  880. RETURN rslt
  881. end function
  882. public function integer uof_cmpl_rqmtrl_change (long arg_scid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg);
  883. Integer rslt = 1
  884. Integer li_pfflag
  885. Long li_mxt
  886. Long ll_i
  887. String ls_mtrlcode
  888. String ls_mtrlname
  889. String ls_mtrlmode
  890. String ls_unit
  891. String ls_mtrltype
  892. Integer li_mtrlorigin
  893. Long count
  894. Long ll_j
  895. Decimal cmpl_qty
  896. s_pfmx ls_s_pfmx[]
  897. DECLARE pf_cur CURSOR FOR
  898. SELECT u_PrdPF.Sonscale ,
  899. u_PrdPF.SonLoss ,
  900. u_PrdPF.SonDECLosS ,
  901. u_PrdPF.SonMtrlid ,
  902. u_PrdPF.status ,
  903. u_PrdPF.woodcode ,
  904. u_PrdPF.pcode ,
  905. u_PrdPF.wrkGrpid ,
  906. u_PrdPF.dscrp
  907. FROM u_PrdPF
  908. Where ( u_PrdPF.mtrlid = :arg_mtrlid ) ;
  909. deep ++
  910. IF deep > 2000 THEN
  911. arg_msg = "递归太深" + String(deep)
  912. rslt = 0
  913. ELSE
  914. SELECT mtrlcode ,
  915. mtrlname ,
  916. mtrlmode ,
  917. mtrltype ,
  918. unit ,
  919. Mtrlorigin
  920. INTO :ls_mtrlcode,
  921. :ls_mtrlname,
  922. :ls_mtrlmode,
  923. :ls_mtrltype,
  924. :ls_unit,
  925. :li_mtrlorigin
  926. FROM u_mtrldef
  927. Where mtrlid = :arg_mtrlid USING sqlca;
  928. IF sqlca.SQLCode <> 0 THEN
  929. arg_msg = "查询物料资失败," + sqlca.SQLErrText
  930. rslt = 0
  931. ELSE
  932. IF deep > 1 THEN
  933. li_mxt = UpperBound(arg_s_mtrl.mtrlid)
  934. li_mxt ++
  935. arg_s_mtrl.mtrlid[li_mxt] = arg_mtrlid
  936. arg_s_mtrl.qty[li_mxt] = arg_qty
  937. arg_s_mtrl.status[li_mxt] = arg_status
  938. arg_s_mtrl.woodcode[li_mxt] = arg_woodcode
  939. arg_s_mtrl.pcode[li_mxt] = arg_pcode
  940. arg_s_mtrl.cmplqty[li_mxt] = arg_qty
  941. arg_s_mtrl.plantype[li_mxt] = li_mtrlorigin
  942. arg_s_mtrl.mtrlcode[li_mxt] = ls_mtrlcode
  943. arg_s_mtrl.mtrlname[li_mxt] = ls_mtrlname
  944. arg_s_mtrl.mtrlmode[li_mxt] = ls_mtrlmode
  945. arg_s_mtrl.mtrltype[li_mxt] = ls_mtrltype
  946. arg_s_mtrl.unit[li_mxt] = ls_unit
  947. arg_s_mtrl.Mtrlorigin[li_mxt] = li_mtrlorigin
  948. arg_s_mtrl.pmtrlid[li_mxt] = arg_pmtrlid
  949. END IF
  950. CHOOSE CASE li_mtrlorigin
  951. CASE 2, 6
  952. rslt = 1
  953. GOTO ext
  954. END CHOOSE
  955. count = 0
  956. OPEN pf_cur;
  957. count = 1
  958. FETCH pf_cur INTO :ls_s_pfmx[count].sonscale,
  959. :ls_s_pfmx[count].sonloss,
  960. :ls_s_pfmx[count].sondecloss,
  961. :ls_s_pfmx[count].sonmtrlid,
  962. :ls_s_pfmx[count].status,
  963. :ls_s_pfmx[count].woodcode,
  964. :ls_s_pfmx[count].pcode,
  965. :ls_s_pfmx[count].wrkgrpid,
  966. :ls_s_pfmx[count].dscrp;
  967. DO WHILE sqlca.SQLCode = 0
  968. count ++
  969. FETCH pf_cur INTO :ls_s_pfmx[count].sonscale,
  970. :ls_s_pfmx[count].sonloss,
  971. :ls_s_pfmx[count].sondecloss,
  972. :ls_s_pfmx[count].sonmtrlid,
  973. :ls_s_pfmx[count].status,
  974. :ls_s_pfmx[count].woodcode,
  975. :ls_s_pfmx[count].pcode,
  976. :ls_s_pfmx[count].wrkgrpid,
  977. :ls_s_pfmx[count].dscrp;
  978. LOOP
  979. count = count - 1
  980. CLOSE pf_cur;
  981. IF count = 0 THEN
  982. rslt = 1
  983. ELSE
  984. FOR ll_j = 1 TO count
  985. IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN
  986. cmpl_qty = f_option232_qty((arg_qty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS)
  987. ELSE
  988. cmpl_qty = 0
  989. END IF
  990. rslt = uof_cmpl_rqmtrl_change(arg_scid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty, arg_s_mtrl,arg_msg)
  991. IF rslt = 0 THEN
  992. EXIT
  993. END IF
  994. NEXT
  995. END IF
  996. END IF
  997. END IF
  998. ext:
  999. RETURN rslt
  1000. end function
  1001. public function integer uof_del_rqmtrl_scll_other (long arg_scid, long arg_taskid, long arg_printid, boolean arg_ifcommit, ref string arg_msg);
  1002. integer rslt = 1
  1003. DELETE FROM u_saleRqMtrl_scll
  1004. WHERE taskid =:arg_taskid AND scid =:arg_scid
  1005. and dstrqty = 0
  1006. and printid = :arg_printid using sqlca;
  1007. if sqlca.sqlcode <> 0 then
  1008. arg_msg = "删除原领料明细失败," + sqlca.sqlerrtext
  1009. rslt = 0
  1010. end if
  1011. if rslt = 0 then
  1012. rollback using sqlca;
  1013. else
  1014. if rslt = 1 and arg_ifcommit then
  1015. commit using sqlca;
  1016. end if
  1017. end if
  1018. return rslt
  1019. end function
  1020. public function integer uof_add_rqmtrl_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);
  1021. Integer rslt = 1
  1022. Long ll_i
  1023. Integer li_ordertype
  1024. String ls_mtrlcode
  1025. Long cnt
  1026. Integer li_ifselforder
  1027. Long ll_mxpkid
  1028. /////////////////// //
  1029. FOR ll_i = 1 To UpperBound(arg_s_mtrl.mtrlid)
  1030. SELECT u_mtrldef.dftsptid,
  1031. u_mtrldef.mrp_unit,
  1032. u_mtrldef.rate_buy,
  1033. u_mtrldef.rate_scll,
  1034. u_mtrldef.rate_sale
  1035. INTO :arg_s_mtrl.sptid[ll_i],
  1036. :arg_s_mtrl.mrp_unit[ll_i],
  1037. :arg_s_mtrl.rate_buy[ll_i],
  1038. :arg_s_mtrl.rate_scll[ll_i],
  1039. :arg_s_mtrl.rate_sale[ll_i]
  1040. FROM u_mtrldef
  1041. Where mtrlid = :arg_s_mtrl.mtrlid[ll_i];
  1042. IF sqlca.SQLCode <> 0 THEN
  1043. arg_msg = "行:" + String(ll_i) + ",查询物料定义失败," + sqlca.SQLErrText
  1044. rslt = 0
  1045. GOTO ext
  1046. END IF
  1047. CHOOSE CASE arg_s_mtrl.mrp_unit[ll_i]
  1048. CASE 1
  1049. IF arg_s_mtrl.rate_buy[ll_i] > 0 THEN
  1050. arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_buy[ll_i]) * arg_s_mtrl.rate_buy[ll_i]
  1051. END IF
  1052. CASE 2
  1053. IF arg_s_mtrl.rate_scll[ll_i] > 0 THEN
  1054. arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_scll[ll_i]) * arg_s_mtrl.rate_scll[ll_i]
  1055. END IF
  1056. CASE 3
  1057. IF arg_s_mtrl.rate_sale[ll_i] > 0 THEN
  1058. arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_sale[ll_i]) * arg_s_mtrl.rate_sale[ll_i]
  1059. END IF
  1060. END CHOOSE
  1061. UPDATE u_orderRqMtrl
  1062. SET RqQty = RqQty + :arg_s_mtrl.qty[ll_i] ,
  1063. truerqqty = truerqqty + :arg_s_mtrl.cmplqty[ll_i]
  1064. WHERE scid = :arg_s_mtrl.scid[ll_i] AND
  1065. taskID = :arg_s_mtrl.taskid[ll_i] AND
  1066. printid = :arg_s_mtrl.printid[ll_i] AND
  1067. MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND
  1068. wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND
  1069. status = :arg_s_mtrl.status[ll_i] AND
  1070. woodcode = :arg_s_mtrl.woodcode[ll_i] AND
  1071. pcode = :arg_s_mtrl.pcode[ll_i] AND
  1072. plantype = :arg_s_mtrl.plantype[ll_i] AND
  1073. plancode = :arg_s_mtrl.plancode[ll_i]Using sqlca;
  1074. IF sqlca.SQLCode <> 0 THEN
  1075. arg_msg = "行:" + String(ll_i) + ",更新物料需求表失败," + sqlca.SQLErrText
  1076. rslt = 0
  1077. GOTO ext
  1078. END IF
  1079. IF sqlca.SQLNRows = 0 THEN
  1080. ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,False,sqlca)
  1081. IF ll_mxpkid <= 0 THEN
  1082. arg_msg = "行:" + String(ll_i) + ",取id失败," + arg_msg
  1083. rslt = 0
  1084. GOTO ext
  1085. END IF
  1086. INSERT INTO u_orderRqMtrl ( scid ,
  1087. taskID ,
  1088. printid,
  1089. mtrlid ,
  1090. rqqty ,
  1091. truerqqty ,
  1092. plantype ,
  1093. mqty ,
  1094. bqty ,
  1095. wqty ,
  1096. pqty ,
  1097. wrkgrpid ,
  1098. status ,
  1099. woodcode ,
  1100. pcode ,
  1101. mxpkid ,
  1102. sptid,
  1103. plancode) VALUES (
  1104. :arg_s_mtrl.scid[ll_i],
  1105. :arg_s_mtrl.taskid[ll_i],
  1106. :arg_s_mtrl.printid[ll_i],
  1107. :arg_s_mtrl.mtrlid[ll_i],
  1108. :arg_s_mtrl.qty[ll_i],
  1109. :arg_s_mtrl.cmplqty[ll_i],
  1110. :arg_s_mtrl.plantype[ll_i],
  1111. :arg_s_mtrl.mqty[ll_i],
  1112. :arg_s_mtrl.bqty[ll_i],
  1113. :arg_s_mtrl.wqty[ll_i],
  1114. :arg_s_mtrl.pqty[ll_i],
  1115. :arg_s_mtrl.wrkgrpid_scll[ll_i] ,
  1116. :arg_s_mtrl.status[ll_i],
  1117. :arg_s_mtrl.woodcode[ll_i],
  1118. :arg_s_mtrl.pcode[ll_i] ,
  1119. :ll_mxpkid ,
  1120. :arg_s_mtrl.sptid[ll_i],
  1121. :arg_s_mtrl.plancode[ll_i]) Using sqlca;
  1122. IF sqlca.SQLCode <> 0 THEN
  1123. arg_msg = "行:" + String(ll_i) + ",建立物料需求表失败," + sqlca.SQLErrText
  1124. rslt = 0
  1125. GOTO ext
  1126. END IF
  1127. END IF
  1128. NEXT
  1129. ext:
  1130. IF rslt = 0 THEN
  1131. ROLLBACK Using sqlca;
  1132. ELSEIF rslt = 1 And arg_ifcommit THEN
  1133. COMMIT Using sqlca;
  1134. END IF
  1135. RETURN rslt
  1136. end function
  1137. public function integer uof_add_rqmtrl_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);
  1138. Integer rslt = 1
  1139. Long ll_i
  1140. Integer li_ordertype
  1141. String ls_mtrlcode
  1142. Long cnt
  1143. Integer li_ifselforder
  1144. Long ll_mxpkid
  1145. Long ll_sptid
  1146. /////////////////// //
  1147. //查找已定义的供应商
  1148. FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid)
  1149. SELECT sptid, mxpkid
  1150. INTO :ll_sptid, :ll_mxpkid
  1151. FROM u_orderRqMtrl
  1152. WHERE scid = :arg_s_mtrl.scid[ll_i] AND
  1153. taskID = :arg_s_mtrl.taskid[ll_i] AND
  1154. printid = :arg_s_mtrl.printid[ll_i] AND
  1155. MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND
  1156. wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND
  1157. status = :arg_s_mtrl.status[ll_i] AND
  1158. woodcode = :arg_s_mtrl.woodcode[ll_i] AND
  1159. pcode = :arg_s_mtrl.pcode[ll_i] AND
  1160. plantype = :arg_s_mtrl.plantype[ll_i];
  1161. IF sqlca.SQLCode <> 0 THEN
  1162. ll_sptid = 0
  1163. ll_mxpkid = 0
  1164. END IF
  1165. IF IsNull(ll_sptid) THEN ll_sptid = 0
  1166. IF IsNull(ll_mxpkid) THEN ll_mxpkid = 0
  1167. arg_s_mtrl.sptid[ll_i] = ll_sptid
  1168. arg_s_mtrl.mxpkid[ll_i] = ll_mxpkid
  1169. NEXT
  1170. DELETE FROM u_orderRqMtrl
  1171. WHERE scid = :arg_s_mtrl.scid[1]
  1172. AND taskid = :arg_s_mtrl.taskid[1]
  1173. AND printid = :arg_s_mtrl.printid[1]
  1174. USING sqlca;
  1175. IF sqlca.SQLCode <> 0 THEN
  1176. arg_msg = "删除原用料失败," + sqlca.SQLErrText
  1177. rslt = 0
  1178. GOTO ext
  1179. END IF
  1180. FOR ll_i = 1 TO UpperBound(arg_s_mtrl.mtrlid)
  1181. SELECT u_mtrldef.dftsptid,
  1182. u_mtrldef.mrp_unit,
  1183. u_mtrldef.rate_buy,
  1184. u_mtrldef.rate_scll,
  1185. u_mtrldef.rate_sale
  1186. INTO :ll_sptid,
  1187. :arg_s_mtrl.mrp_unit[ll_i],
  1188. :arg_s_mtrl.rate_buy[ll_i],
  1189. :arg_s_mtrl.rate_scll[ll_i],
  1190. :arg_s_mtrl.rate_sale[ll_i]
  1191. FROM u_mtrldef
  1192. Where mtrlid = :arg_s_mtrl.mtrlid[ll_i];
  1193. IF sqlca.SQLCode <> 0 THEN
  1194. ll_sptid = 0
  1195. END IF
  1196. CHOOSE CASE arg_s_mtrl.mrp_unit[ll_i]
  1197. CASE 1
  1198. IF arg_s_mtrl.rate_buy[ll_i] > 0 THEN
  1199. arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_buy[ll_i]) * arg_s_mtrl.rate_buy[ll_i]
  1200. END IF
  1201. CASE 2
  1202. IF arg_s_mtrl.rate_scll[ll_i] > 0 THEN
  1203. arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_scll[ll_i]) * arg_s_mtrl.rate_scll[ll_i]
  1204. END IF
  1205. CASE 3
  1206. IF arg_s_mtrl.rate_sale[ll_i] > 0 THEN
  1207. arg_s_mtrl.cmplqty[ll_i] = Ceiling(arg_s_mtrl.cmplqty[ll_i]/arg_s_mtrl.rate_sale[ll_i]) * arg_s_mtrl.rate_sale[ll_i]
  1208. END IF
  1209. END CHOOSE
  1210. IF arg_s_mtrl.sptid[ll_i] = 0 THEN
  1211. arg_s_mtrl.sptid[ll_i] = ll_sptid
  1212. END IF
  1213. UPDATE u_orderRqMtrl
  1214. SET RqQty = RqQty + :arg_s_mtrl.qty[ll_i] ,
  1215. truerqqty = truerqqty + :arg_s_mtrl.cmplqty[ll_i],
  1216. mxdscrp = :arg_s_mtrl.mxdscrp[ll_i]
  1217. WHERE scid = :arg_s_mtrl.scid[ll_i] AND
  1218. taskID = :arg_s_mtrl.taskid[ll_i] AND
  1219. printid = :arg_s_mtrl.printid[ll_i] AND
  1220. MtrlID = :arg_s_mtrl.mtrlid[ll_i] AND
  1221. wrkGrpid = :arg_s_mtrl.wrkgrpid_scll[ll_i] AND
  1222. status = :arg_s_mtrl.status[ll_i] AND
  1223. woodcode = :arg_s_mtrl.woodcode[ll_i] AND
  1224. pcode = :arg_s_mtrl.pcode[ll_i] AND
  1225. plantype = :arg_s_mtrl.plantype[ll_i] AND
  1226. plancode = :arg_s_mtrl.plancode[ll_i] USING sqlca;
  1227. IF sqlca.SQLCode = 0 THEN
  1228. IF sqlca.SQLNRows = 0 THEN
  1229. if arg_s_mtrl.mxpkid[ll_i] = 0 then
  1230. ll_mxpkid = f_sys_scidentity(arg_s_mtrl.scid[ll_i],"u_OrderRqMtrl","mxpkid",arg_msg,FALSE,sqlca)
  1231. IF ll_mxpkid <= 0 THEN
  1232. arg_msg = "行:" + String(ll_i) + ",取id失败," + arg_msg
  1233. rslt = 0
  1234. EXIT
  1235. END IF
  1236. else
  1237. ll_mxpkid = arg_s_mtrl.mxpkid[ll_i]
  1238. end if
  1239. INSERT INTO u_orderRqMtrl ( scid ,
  1240. taskID ,
  1241. printid,
  1242. mtrlid ,
  1243. rqqty ,
  1244. truerqqty ,
  1245. plantype ,
  1246. mqty ,
  1247. bqty ,
  1248. wqty ,
  1249. pqty ,
  1250. wrkgrpid ,
  1251. status ,
  1252. woodcode ,
  1253. pcode ,
  1254. mxpkid ,
  1255. sptid,
  1256. plancode,
  1257. mxdscrp) VALUES (
  1258. :arg_s_mtrl.scid[ll_i],
  1259. :arg_s_mtrl.taskid[ll_i],
  1260. :arg_s_mtrl.printid[ll_i],
  1261. :arg_s_mtrl.mtrlid[ll_i],
  1262. :arg_s_mtrl.qty[ll_i],
  1263. :arg_s_mtrl.cmplqty[ll_i],
  1264. :arg_s_mtrl.plantype[ll_i],
  1265. :arg_s_mtrl.mqty[ll_i],
  1266. :arg_s_mtrl.bqty[ll_i],
  1267. :arg_s_mtrl.wqty[ll_i],
  1268. :arg_s_mtrl.pqty[ll_i],
  1269. :arg_s_mtrl.wrkgrpid_scll[ll_i] ,
  1270. :arg_s_mtrl.status[ll_i],
  1271. :arg_s_mtrl.woodcode[ll_i],
  1272. :arg_s_mtrl.pcode[ll_i] ,
  1273. :ll_mxpkid ,
  1274. :arg_s_mtrl.sptid[ll_i],
  1275. :arg_s_mtrl.plancode[ll_i],
  1276. :arg_s_mtrl.mxdscrp[ll_i]) USING sqlca;
  1277. IF sqlca.SQLCode <> 0 THEN
  1278. arg_msg = "行:" + String(ll_i) + ",建立物料需求表失败," + sqlca.SQLErrText
  1279. rslt = 0
  1280. EXIT
  1281. END IF
  1282. END IF
  1283. ELSE
  1284. arg_msg = "行:" + String(ll_i) + ",更新物料需求表失败," + sqlca.SQLErrText
  1285. rslt = 0
  1286. EXIT
  1287. END IF
  1288. NEXT
  1289. ext:
  1290. IF rslt = 0 THEN
  1291. ROLLBACK USING sqlca;
  1292. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1293. COMMIT USING sqlca;
  1294. END IF
  1295. RETURN rslt
  1296. end function
  1297. public function integer uof_add_rqmtrl_scll_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  1298. Long i,ls_newid
  1299. FOR i = 1 TO UpperBound(arg_s_mtrl.taskID)
  1300. ls_newid = f_sys_scidentity(arg_s_mtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,sqlca)
  1301. IF ls_newid <= 0 THEN
  1302. rslt = 0
  1303. GOTO ext
  1304. END IF
  1305. INSERT INTO u_saleRqMtrl_scll
  1306. ( rqmtrlid,
  1307. scid,
  1308. taskID,
  1309. MtrlID,
  1310. printid,
  1311. trueRqqty,
  1312. costamt,
  1313. status,
  1314. woodcode,
  1315. pcode,
  1316. ifchanged,
  1317. plancode)
  1318. VALUES ( :ls_newid,
  1319. :arg_s_mtrl.scid[i],
  1320. :arg_s_mtrl.taskID[i],
  1321. :arg_s_mtrl.MtrlID[i],
  1322. :arg_s_mtrl.printid[i],
  1323. :arg_s_mtrl.qty[i],
  1324. 0,
  1325. :arg_s_mtrl.status[i],
  1326. :arg_s_mtrl.woodcode[i],
  1327. :arg_s_mtrl.pcode[i],
  1328. :arg_s_mtrl.ifchanged[i] ,
  1329. :arg_s_mtrl.plancode[i] ) USING sqlca;
  1330. IF sqlca.SQLCode <> 0 THEN
  1331. rslt = 0
  1332. arg_msg = '插入订单明细的物料领料明细失败'
  1333. GOTO ext
  1334. END IF
  1335. NEXT
  1336. ext:
  1337. IF rslt = 0 THEN
  1338. ROLLBACK USING sqlca;
  1339. ELSEIF arg_ifcommit THEN
  1340. COMMIT USING sqlca;
  1341. END IF
  1342. RETURN rslt
  1343. end function
  1344. public function integer uof_add_rqmtrl_scll_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  1345. Long i,ls_newid
  1346. DELETE FROM u_saleRqMtrl_scll
  1347. WHERE u_saleRqMtrl_scll.scid = :arg_s_mtrl.scid[1] AND
  1348. u_saleRqMtrl_scll.taskID = :arg_s_mtrl.taskid[1] AND
  1349. u_saleRqMtrl_scll.printid = :arg_s_mtrl.printid[1]
  1350. USING sqlca;
  1351. IF sqlca.SQLCode <> 0 THEN
  1352. rslt = 0
  1353. arg_msg = '删除订单明细的物料领料明细失败'
  1354. GOTO ext
  1355. END IF
  1356. FOR i = 1 TO UpperBound(arg_s_mtrl.taskID)
  1357. ls_newid = f_sys_scidentity(arg_s_mtrl.scid[i],"u_saleRqMtrl_scll","rqmtrlid",arg_msg,TRUE,sqlca)
  1358. IF ls_newid <= 0 THEN
  1359. rslt = 0
  1360. GOTO ext
  1361. END IF
  1362. INSERT INTO u_saleRqMtrl_scll
  1363. ( rqmtrlid,
  1364. scid,
  1365. taskID,
  1366. MtrlID,
  1367. printid,
  1368. trueRqqty,
  1369. costamt,
  1370. status,
  1371. woodcode,
  1372. pcode,
  1373. ifchanged,
  1374. plancode,
  1375. mxdscrp)
  1376. VALUES ( :ls_newid,
  1377. :arg_s_mtrl.scid[i],
  1378. :arg_s_mtrl.taskID[i],
  1379. :arg_s_mtrl.MtrlID[i],
  1380. :arg_s_mtrl.printid[i],
  1381. :arg_s_mtrl.qty[i],
  1382. 0,
  1383. :arg_s_mtrl.status[i],
  1384. :arg_s_mtrl.woodcode[i],
  1385. :arg_s_mtrl.pcode[i],
  1386. :arg_s_mtrl.ifchanged[i],
  1387. :arg_s_mtrl.plancode[i],
  1388. :arg_s_mtrl.mxdscrp[i]) USING sqlca;
  1389. IF sqlca.SQLCode <> 0 THEN
  1390. rslt = 0
  1391. arg_msg = '插入订单明细的物料领料明细失败'
  1392. GOTO ext
  1393. END IF
  1394. NEXT
  1395. ext:
  1396. IF rslt = 0 THEN
  1397. ROLLBACK USING sqlca;
  1398. ELSEIF arg_ifcommit THEN
  1399. COMMIT USING sqlca;
  1400. END IF
  1401. RETURN rslt
  1402. end function
  1403. public function integer uof_add_rqmtrl_tree_more (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//批增料
  1404. Integer rslt = 1
  1405. Long ll_i
  1406. FOR ll_i = 1 To UpperBound(arg_s_mtrl.MtrlID)
  1407. IF arg_s_mtrl.qty[ll_i] = 0 And arg_s_mtrl.cmplqty[ll_i] <> 0 THEN
  1408. arg_msg = "行:" + String( ll_i ) + ",物料有需求数,无领料数,请检查"
  1409. rslt = 0
  1410. goto ext
  1411. END IF
  1412. INSERT INTO u_orderRqMtrl_tree ( scid ,
  1413. taskid ,
  1414. mtrlid ,
  1415. rqqty ,
  1416. truerqqty ,
  1417. plantype ,
  1418. mqty ,
  1419. bqty ,
  1420. wqty ,
  1421. pqty ,
  1422. wrkgrpid ,
  1423. lp ,
  1424. printid ,
  1425. status ,
  1426. woodcode ,
  1427. pcode ,
  1428. ifmainmtrlid ,
  1429. ifchanged ,
  1430. pmtrlid ,
  1431. pfgroup ,
  1432. plancode) VALUES
  1433. (
  1434. :arg_s_mtrl.scid[ll_i],
  1435. :arg_s_mtrl.taskid[ll_i],
  1436. :arg_s_mtrl.mtrlid[ll_i],
  1437. :arg_s_mtrl.qty[ll_i],
  1438. :arg_s_mtrl.cmplqty[ll_i],
  1439. :arg_s_mtrl.plantype[ll_i],
  1440. :arg_s_mtrl.mqty[ll_i],
  1441. :arg_s_mtrl.bqty[ll_i],
  1442. :arg_s_mtrl.wqty[ll_i],
  1443. :arg_s_mtrl.pqty[ll_i] ,
  1444. :arg_s_mtrl.wrkgrpid_scll[ll_i] ,
  1445. :arg_s_mtrl.lp[ll_i],
  1446. :arg_s_mtrl.printid[ll_i],
  1447. :arg_s_mtrl.status[ll_i],
  1448. :arg_s_mtrl.woodcode[ll_i],
  1449. :arg_s_mtrl.pcode[ll_i],
  1450. :arg_s_mtrl.ifmainmtrlid[ll_i] ,
  1451. :arg_s_mtrl.ifchanged[ll_i] ,
  1452. :arg_s_mtrl.pmtrlid[ll_i],
  1453. :arg_s_mtrl.pfgroup[ll_i],
  1454. :arg_s_mtrl.plancode[ll_i]
  1455. ) Using sqlca;
  1456. IF sqlca.SQLCode <> 0 THEN
  1457. arg_msg = "行:" + String(ll_i) + ",建立物料需求结构表失败," + sqlca.SQLErrText
  1458. rslt = 0
  1459. goto ext
  1460. END IF
  1461. NEXT
  1462. ext:
  1463. IF rslt = 0 THEN
  1464. ROLLBACK Using sqlca;
  1465. ELSEIF rslt = 1 And arg_ifcommit THEN
  1466. COMMIT Using sqlca;
  1467. END IF
  1468. RETURN rslt
  1469. end function
  1470. public function integer uof_add_rqmtrl_tree_other (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);//修改运算结果
  1471. Integer rslt = 1
  1472. Long ll_i
  1473. DELETE FROM u_orderRqMtrl_tree
  1474. WHERE u_orderRqMtrl_tree.taskid = :arg_s_mtrl.taskid[1]
  1475. AND u_orderRqMtrl_tree.scid = :arg_s_mtrl.scid[1]
  1476. AND u_orderRqMtrl_tree.printid = :arg_s_mtrl.printid[1]
  1477. USING sqlca;
  1478. IF sqlca.SQLCode <> 0 THEN
  1479. arg_msg = "删除物料需求结构失败," + sqlca.SQLErrText
  1480. rslt = 0
  1481. goto ext
  1482. END IF
  1483. FOR ll_i = 1 TO UpperBound(arg_s_mtrl.MtrlID)
  1484. IF arg_s_mtrl.qty[ll_i] = 0 AND arg_s_mtrl.cmplqty[ll_i] <> 0 THEN
  1485. arg_msg = "行:" + String( ll_i ) + ",物料有需求数,无领料数,请检查"
  1486. rslt = 0
  1487. EXIT
  1488. END IF
  1489. INSERT INTO u_orderRqMtrl_tree ( scid ,
  1490. taskid ,
  1491. mtrlid ,
  1492. rqqty ,
  1493. truerqqty ,
  1494. plantype ,
  1495. mqty ,
  1496. bqty ,
  1497. wqty ,
  1498. pqty ,
  1499. wrkgrpid ,
  1500. lp ,
  1501. printid ,
  1502. status ,
  1503. woodcode ,
  1504. pcode ,
  1505. ifmainmtrlid ,
  1506. ifchanged ,
  1507. pmtrlid ,
  1508. pfgroup,
  1509. plancode,
  1510. mxdscrp,
  1511. promode,
  1512. pfgroupmode,
  1513. pfklmode,
  1514. pfgroupqty) VALUES
  1515. (
  1516. :arg_s_mtrl.scid[ll_i],
  1517. :arg_s_mtrl.taskid[ll_i],
  1518. :arg_s_mtrl.mtrlid[ll_i],
  1519. :arg_s_mtrl.qty[ll_i],
  1520. :arg_s_mtrl.cmplqty[ll_i],
  1521. :arg_s_mtrl.plantype[ll_i],
  1522. :arg_s_mtrl.mqty[ll_i],
  1523. :arg_s_mtrl.bqty[ll_i],
  1524. :arg_s_mtrl.wqty[ll_i],
  1525. :arg_s_mtrl.pqty[ll_i] ,
  1526. :arg_s_mtrl.wrkgrpid_scll[ll_i] ,
  1527. :arg_s_mtrl.lp[ll_i],
  1528. :arg_s_mtrl.printid[ll_i],
  1529. :arg_s_mtrl.status[ll_i],
  1530. :arg_s_mtrl.woodcode[ll_i],
  1531. :arg_s_mtrl.pcode[ll_i],
  1532. :arg_s_mtrl.ifmainmtrlid[ll_i] ,
  1533. :arg_s_mtrl.ifchanged[ll_i] ,
  1534. :arg_s_mtrl.pmtrlid[ll_i],
  1535. :arg_s_mtrl.pfgroup[ll_i],
  1536. :arg_s_mtrl.plancode[ll_i],
  1537. :arg_s_mtrl.mxdscrp[ll_i],
  1538. :arg_s_mtrl.promode[ll_i],
  1539. :arg_s_mtrl.pfgroupmode[ll_i],
  1540. :arg_s_mtrl.pfklmode[ll_i],
  1541. :arg_s_mtrl.pfgroupqty[ll_i]
  1542. ) USING sqlca;
  1543. IF sqlca.SQLCode <> 0 THEN
  1544. arg_msg = "行:" + String(ll_i) + ",建立物料需求结构表失败," + sqlca.SQLErrText
  1545. rslt = 0
  1546. EXIT
  1547. END IF
  1548. NEXT
  1549. ext:
  1550. IF rslt = 0 THEN
  1551. ROLLBACK USING sqlca;
  1552. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1553. COMMIT USING sqlca;
  1554. END IF
  1555. RETURN rslt
  1556. end function
  1557. public function integer uof_cmpl_rqmtrl (long arg_scid, long arg_taskid, long arg_printid, long arg_pmtrlid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_qty, long arg_lp, integer arg_if_allowuse, ref s_order_ml_rqmtrl arg_s_mtrl, ref string arg_msg, long arg_wrkgrpid, string arg_pfgroup);
  1558. Integer rslt = 1
  1559. Integer li_pfflag
  1560. Long ll_mtrlid_order
  1561. Integer li_ifmainmtrlid
  1562. Long arr_mxt
  1563. Long ll_i
  1564. Boolean if_special_notuse = False
  1565. String ls_mtrlcode
  1566. String ls_mtrlname
  1567. String ls_mtrlmode
  1568. String ls_unit
  1569. String ls_mtrltype
  1570. Integer li_mtrlorigin
  1571. Integer li_ifselforder
  1572. Integer li_mtrlprp
  1573. Integer li_statusflag
  1574. Long ll_scid_mtrl
  1575. Long ll_wrkgrpid_mtrl
  1576. Integer li_ordertype
  1577. Decimal ld_cmplqty
  1578. Decimal ld_mqty
  1579. Decimal ld_bqty
  1580. Decimal ld_wqty
  1581. Decimal ld_pqty
  1582. Decimal ld_otherrqqty
  1583. Decimal ld_samerqqty
  1584. Decimal ld_minqty, ld_maxqty
  1585. Long count
  1586. Long ll_j
  1587. Long li_dftsptid
  1588. string ls_promode
  1589. string ls_pfgroupmode
  1590. string ls_pfklmode
  1591. Decimal ld_pfgroupqty
  1592. Decimal cmpl_qty
  1593. s_pfmx ls_s_pfmx[]
  1594. s_mtrlcfg_expr s_mtrlcfg[]
  1595. Long ll_cfg
  1596. Long ll_cnt_s_mtrlcfg
  1597. DECLARE pf_cur CURSOR FOR
  1598. SELECT u_PrdPF.Sonscale ,
  1599. u_PrdPF.SonLoss ,
  1600. u_PrdPF.SonDECLosS ,
  1601. u_PrdPF.SonMtrlid ,
  1602. u_PrdPF.status ,
  1603. u_PrdPF.woodcode ,
  1604. u_PrdPF.pcode ,
  1605. u_PrdPF.wrkGrpid ,
  1606. u_PrdPF.dscrp ,
  1607. u_PrdPF.pfgroup ,
  1608. u_mtrldef.mrp_unit,
  1609. u_mtrldef.rate_buy,
  1610. u_mtrldef.rate_scll,
  1611. u_mtrldef.rate_sale,
  1612. u_PrdPF.promode,
  1613. u_PrdPF.pfgroupmode,
  1614. u_PrdPF.pfklmode,
  1615. u_PrdPF.pfgroupqty
  1616. FROM u_PrdPF ,u_mtrldef
  1617. WHERE ( u_PrdPF.pfcode = '组装' ) AND ( u_PrdPF.mtrlid = :arg_mtrlid ) AND
  1618. u_mtrldef.mtrlid = u_PrdPF.SonMtrlid;
  1619. deep ++
  1620. IF deep > 1000 THEN
  1621. arg_msg = "递归太深" + String(deep)
  1622. rslt = 0
  1623. GOTO ext
  1624. END IF
  1625. IF arg_taskid <> -1 THEN
  1626. SELECT u_saletaskmx.mtrlid
  1627. INTO :ll_mtrlid_order
  1628. FROM u_saletaskmx
  1629. WHERE u_saletaskmx.taskid = :arg_taskid
  1630. AND u_saletaskmx.scid = :arg_scid
  1631. And u_saletaskmx.printid = :arg_printid Using sqlca;
  1632. IF sqlca.SQLCode <> 0 THEN
  1633. arg_msg = "查询订单明细物料操作失败," + sqlca.SQLErrText
  1634. rslt = 0
  1635. GOTO ext
  1636. END IF
  1637. ELSE
  1638. IF deep = 1 THEN
  1639. ll_mtrlid_order = arg_mtrlid
  1640. ELSE
  1641. ll_mtrlid_order = -1
  1642. END IF
  1643. END IF
  1644. SELECT mtrlcode ,
  1645. mtrlname ,
  1646. mtrlmode ,
  1647. mtrltype ,
  1648. unit ,
  1649. Mtrlorigin ,
  1650. mtrlprp ,
  1651. statusflag,
  1652. dftsptid
  1653. INTO :ls_mtrlcode,
  1654. :ls_mtrlname,
  1655. :ls_mtrlmode,
  1656. :ls_mtrltype,
  1657. :ls_unit,
  1658. :li_mtrlorigin,
  1659. :li_mtrlprp,
  1660. :li_statusflag,
  1661. :li_dftsptid
  1662. From u_mtrldef Where mtrlid = :arg_mtrlid Using sqlca;
  1663. IF sqlca.SQLCode <> 0 THEN
  1664. arg_msg = "查询物料资失败," + sqlca.SQLErrText
  1665. rslt = 0
  1666. GOTO ext
  1667. END IF
  1668. IF arg_pmtrlid > 0 AND arg_mtrlid > 0 THEN
  1669. SELECT u_PrdPF.promode
  1670. ,u_PrdPF.pfgroupmode
  1671. ,u_PrdPF.pfklmode
  1672. ,u_PrdPF.pfgroupqty
  1673. INTO :ls_promode
  1674. ,:ls_pfgroupmode
  1675. ,:ls_pfklmode
  1676. ,:ld_pfgroupqty
  1677. FROM u_PrdPF
  1678. WHERE u_PrdPF.pfcode = '组装'
  1679. AND u_PrdPF.mtrlid = :arg_pmtrlid
  1680. AND u_PrdPF.SonMtrlid = :arg_mtrlid;
  1681. IF SQLCA.SQLCODE <> 0 THEN
  1682. ls_promode = ""
  1683. ls_pfgroupmode = ""
  1684. ls_pfklmode = ""
  1685. ld_pfgroupqty = 0
  1686. END IF
  1687. END IF
  1688. SELECT u_mtrldef_maxminqty.minqty,
  1689. u_mtrldef_maxminqty.maxqty
  1690. INTO :ld_minqty,
  1691. :ld_maxqty
  1692. FROM u_mtrldef_maxminqty
  1693. WHERE mtrlid = :arg_mtrlid
  1694. AND status = :arg_status
  1695. AND woodcode = :arg_woodcode
  1696. And pcode = :arg_pcode Using sqlca;
  1697. IF sqlca.SQLCode = -1 THEN
  1698. arg_msg = "查询物料库存上下限资料失败," + sqlca.SQLErrText
  1699. rslt = 0
  1700. GOTO ext
  1701. ELSEIF sqlca.SQLCode = 100 THEN
  1702. ld_minqty = 0
  1703. ld_maxqty = 99999
  1704. END IF
  1705. IF IsNull(ld_minqty) THEN ld_minqty = 0
  1706. IF IsNull(ld_maxqty) THEN ld_maxqty = 99999
  1707. arr_mxt = UpperBound(arg_s_mtrl.mtrlid)
  1708. IF arg_mtrlid = ll_mtrlid_order THEN
  1709. ld_cmplqty = arg_qty
  1710. li_ifmainmtrlid = 1
  1711. ELSE
  1712. IF arg_if_allowuse = 1 THEN
  1713. IF uof_get_qty(1,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_bqty,arg_msg) = 0 THEN
  1714. rslt = 0
  1715. GOTO ext
  1716. END IF
  1717. IF uof_get_qty(3,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_wqty,arg_msg) = 0 THEN
  1718. rslt = 0
  1719. GOTO ext
  1720. END IF
  1721. IF uof_get_qty(4,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_mqty,arg_msg) = 0 THEN
  1722. rslt = 0
  1723. GOTO ext
  1724. END IF
  1725. IF uof_get_qty(5,arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode,ld_otherrqqty,arg_msg) = 0 THEN
  1726. rslt = 0
  1727. GOTO ext
  1728. END IF
  1729. END IF
  1730. //找本次运算之前的应用
  1731. IF arr_mxt = 0 THEN
  1732. ld_samerqqty = 0
  1733. ELSE
  1734. FOR ll_i = 1 To arr_mxt
  1735. IF arg_s_mtrl.scid[ll_i] = arg_scid &
  1736. And arg_s_mtrl.taskid[ll_i] = arg_taskid &
  1737. And arg_s_mtrl.printid[ll_i] = arg_printid &
  1738. And arg_s_mtrl.mtrlid[ll_i] = arg_mtrlid &
  1739. And arg_s_mtrl.status[ll_i] = arg_status &
  1740. And arg_s_mtrl.woodcode[ll_i] = arg_woodcode &
  1741. And arg_s_mtrl.pcode[ll_i] = arg_pcode THEN
  1742. ld_samerqqty = ld_samerqqty + arg_s_mtrl.cmplqty[ll_i]
  1743. END IF
  1744. NEXT
  1745. END IF
  1746. IF arg_if_allowuse = 1 THEN
  1747. IF li_mtrlorigin = 2 And ifbuy_mtrl_not_useqty THEN
  1748. ld_cmplqty = arg_qty
  1749. ELSEIF li_mtrlorigin = 3 And ifwx_mtrl_not_useqty THEN
  1750. ld_cmplqty = arg_qty
  1751. ELSE
  1752. IF ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty > 0 THEN //有可用
  1753. ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty)
  1754. ELSE
  1755. ld_cmplqty = arg_qty
  1756. END IF
  1757. END IF
  1758. // If ((ifbuy_mtrl_not_useqty) Or (ifwx_mtrl_not_useqty)) THEN
  1759. //
  1760. // IF li_mtrlorigin = 2 THEN
  1761. // IF ifbuy_mtrl_not_useqty THEN
  1762. // ld_cmplqty = arg_qty
  1763. // if_special_notuse = True
  1764. // END IF
  1765. // END IF
  1766. //
  1767. // IF li_mtrlorigin = 3 THEN
  1768. // IF ifwx_mtrl_not_useqty THEN
  1769. // ld_cmplqty = arg_qty
  1770. // if_special_notuse = True
  1771. // END IF
  1772. // END IF
  1773. //
  1774. // END IF
  1775. //
  1776. // IF Not if_special_notuse THEN
  1777. //
  1778. // if ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty > 0 then //有可用
  1779. // ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty)
  1780. // else
  1781. // ld_cmplqty = arg_qty
  1782. // end if
  1783. //
  1784. //// IF ld_samerqqty > 0 THEN
  1785. //// ld_cmplqty = arg_qty
  1786. //// ELSE
  1787. ////
  1788. //// IF arg_qty > ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty THEN
  1789. //// ld_cmplqty = arg_qty - (ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty)
  1790. //// ELSE
  1791. //// ld_cmplqty = 0
  1792. //// END IF
  1793. ////
  1794. //// END IF
  1795. //
  1796. // END IF
  1797. ELSE
  1798. ld_cmplqty = arg_qty
  1799. END IF
  1800. END IF
  1801. arr_mxt ++
  1802. arg_s_mtrl.scid[arr_mxt] = arg_scid
  1803. arg_s_mtrl.taskid[arr_mxt] = arg_taskid
  1804. arg_s_mtrl.printid[arr_mxt] = arg_printid
  1805. arg_s_mtrl.mxpkid[arr_mxt] = arr_mxt
  1806. arg_s_mtrl.mtrlid[arr_mxt] = arg_mtrlid
  1807. arg_s_mtrl.status[arr_mxt] = arg_status
  1808. arg_s_mtrl.woodcode[arr_mxt] = arg_woodcode
  1809. arg_s_mtrl.pcode[arr_mxt] = arg_pcode
  1810. arg_s_mtrl.qty[arr_mxt] = arg_qty
  1811. arg_s_mtrl.cmplqty[arr_mxt] = ld_cmplqty
  1812. arg_s_mtrl.plantype[arr_mxt] = li_mtrlorigin
  1813. arg_s_mtrl.mqty[arr_mxt] = ld_mqty
  1814. arg_s_mtrl.bqty[arr_mxt] = ld_bqty
  1815. arg_s_mtrl.wqty[arr_mxt] = ld_wqty
  1816. arg_s_mtrl.pqty[arr_mxt] = ld_pqty
  1817. arg_s_mtrl.otherrqqty[arr_mxt] = ld_otherrqqty
  1818. arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty
  1819. arg_s_mtrl.minqty[arr_mxt] = ld_minqty
  1820. arg_s_mtrl.maxqty[arr_mxt] = ld_maxqty
  1821. arg_s_mtrl.ckwareqty[arr_mxt] = ld_mqty + ld_bqty + ld_wqty + ld_pqty - ld_otherrqqty - ld_samerqqty - ld_minqty
  1822. arg_s_mtrl.mtrlcode[arr_mxt] = ls_mtrlcode
  1823. arg_s_mtrl.mtrlname[arr_mxt] = ls_mtrlname
  1824. arg_s_mtrl.mtrlmode[arr_mxt] = ls_mtrlmode
  1825. arg_s_mtrl.mtrltype[arr_mxt] = ls_mtrltype
  1826. arg_s_mtrl.unit[arr_mxt] = ls_unit
  1827. arg_s_mtrl.Mtrlorigin[arr_mxt] = li_mtrlorigin
  1828. arg_s_mtrl.mtrlprp[arr_mxt] = li_mtrlprp
  1829. arg_s_mtrl.mtrlordertype[arr_mxt] = li_ordertype
  1830. arg_s_mtrl.produce_wrkgrpid[arr_mxt] = arg_wrkgrpid
  1831. arg_s_mtrl.lp[arr_mxt] = arg_lp
  1832. //arg_s_mtrl.samerqqty[arr_mxt] = ld_samerqqty
  1833. arg_s_mtrl.ifmainmtrlid[arr_mxt] = li_ifmainmtrlid
  1834. arg_s_mtrl.pmtrlid[arr_mxt] = arg_pmtrlid
  1835. arg_s_mtrl.ifchanged[arr_mxt] = 0
  1836. arg_s_mtrl.pfgroup[arr_mxt] = arg_pfgroup
  1837. arg_s_mtrl.promode[arr_mxt] = ls_promode
  1838. arg_s_mtrl.pfgroupmode[arr_mxt] = ls_pfgroupmode
  1839. arg_s_mtrl.pfklmode[arr_mxt] = ls_pfklmode
  1840. arg_s_mtrl.pfgroupqty[arr_mxt] = ld_pfgroupqty
  1841. arg_s_mtrl.sptid[arr_mxt] = li_dftsptid
  1842. //如果没有要生产的,不需要再计算下一级
  1843. IF ld_cmplqty <= 0 THEN
  1844. rslt = 1
  1845. ELSE
  1846. CHOOSE CASE li_mtrlorigin
  1847. CASE 2, 6 //采购,
  1848. rslt = 1
  1849. GOTO ext
  1850. CASE 0 //自制
  1851. // IF ll_scid_mtrl <> arg_scid THEN
  1852. // rslt = 1
  1853. // GOTO ext
  1854. // ELSE
  1855. //不排产且不是主计划
  1856. IF li_ifselforder = 1 And li_ifmainmtrlid = 0 THEN
  1857. rslt = 1
  1858. GOTO ext
  1859. END IF
  1860. // END IF
  1861. END CHOOSE
  1862. count = 0
  1863. OPEN pf_cur;
  1864. count = 1
  1865. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale ,
  1866. :ls_s_pfmx[count].SonLoss ,
  1867. :ls_s_pfmx[count].SonDECLosS ,
  1868. :ls_s_pfmx[count].SonMtrlid ,
  1869. :ls_s_pfmx[count].status ,
  1870. :ls_s_pfmx[count].woodcode ,
  1871. :ls_s_pfmx[count].pcode ,
  1872. :ls_s_pfmx[count].wrkGrpid ,
  1873. :ls_s_pfmx[count].dscrp ,
  1874. :ls_s_pfmx[count].pfgroup ,
  1875. :ls_s_pfmx[count].mrp_unit,
  1876. :ls_s_pfmx[count].rate_buy,
  1877. :ls_s_pfmx[count].rate_scll,
  1878. :ls_s_pfmx[count].rate_sale,
  1879. :ls_s_pfmx[count].promode,
  1880. :ls_s_pfmx[count].pfgroupmode,
  1881. :ls_s_pfmx[count].pfklmode,
  1882. :ls_s_pfmx[count].pfgroupqty;
  1883. DO WHILE sqlca.SQLCode = 0
  1884. count ++
  1885. FETCH pf_cur INTO :ls_s_pfmx[count].Sonscale ,
  1886. :ls_s_pfmx[count].SonLoss ,
  1887. :ls_s_pfmx[count].SonDECLosS ,
  1888. :ls_s_pfmx[count].SonMtrlid ,
  1889. :ls_s_pfmx[count].status ,
  1890. :ls_s_pfmx[count].woodcode ,
  1891. :ls_s_pfmx[count].pcode ,
  1892. :ls_s_pfmx[count].wrkGrpid ,
  1893. :ls_s_pfmx[count].dscrp ,
  1894. :ls_s_pfmx[count].pfgroup ,
  1895. :ls_s_pfmx[count].mrp_unit,
  1896. :ls_s_pfmx[count].rate_buy,
  1897. :ls_s_pfmx[count].rate_scll,
  1898. :ls_s_pfmx[count].rate_sale,
  1899. :ls_s_pfmx[count].promode,
  1900. :ls_s_pfmx[count].pfgroupmode,
  1901. :ls_s_pfmx[count].pfklmode,
  1902. :ls_s_pfmx[count].pfgroupqty;
  1903. LOOP
  1904. count = count - 1
  1905. CLOSE pf_cur;
  1906. IF count = 0 THEN
  1907. rslt = 1
  1908. GOTO ext
  1909. END IF
  1910. FOR ll_j = 1 To count
  1911. IF ls_s_pfmx[ll_j].SonLoss <> 1 THEN
  1912. IF sys_option_sale_order_formula = 0 THEN //销售订单物料运算损耗率计算公式
  1913. cmpl_qty = f_option232_qty((ld_cmplqty * ls_s_pfmx[ll_j].Sonscale) / (1 - ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS)
  1914. ELSE
  1915. cmpl_qty = f_option232_qty((ld_cmplqty * ls_s_pfmx[ll_j].Sonscale) * (1 + ls_s_pfmx[ll_j].SonLoss) + ls_s_pfmx[ll_j].SonDECLosS)
  1916. END IF
  1917. ELSE
  1918. cmpl_qty = 0
  1919. END IF
  1920. ////////////// //
  1921. //按辅助单位补数, ?
  1922. CHOOSE CASE ls_s_pfmx[ll_j].mrp_unit
  1923. CASE 1
  1924. IF ls_s_pfmx[ll_j].rate_buy > 0 THEN
  1925. cmpl_qty = Ceiling(cmpl_qty/ls_s_pfmx[ll_j].rate_buy) * ls_s_pfmx[ll_j].rate_buy
  1926. END IF
  1927. CASE 2
  1928. IF ls_s_pfmx[ll_j].rate_scll > 0 THEN
  1929. cmpl_qty = Ceiling(cmpl_qty/ls_s_pfmx[ll_j].rate_scll) * ls_s_pfmx[ll_j].rate_scll
  1930. END IF
  1931. CASE 3
  1932. IF ls_s_pfmx[ll_j].rate_sale > 0 THEN
  1933. cmpl_qty = Ceiling(cmpl_qty/ls_s_pfmx[ll_j].rate_sale) * ls_s_pfmx[ll_j].rate_sale
  1934. END IF
  1935. END CHOOSE
  1936. rslt = uof_cmpl_rqmtrl(arg_scid,arg_taskid,arg_printid,arg_mtrlid,ls_s_pfmx[ll_j].SonMtrlid,ls_s_pfmx[ll_j].status,ls_s_pfmx[ll_j].woodcode,ls_s_pfmx[ll_j].pcode,cmpl_qty,arg_lp + 1,arg_if_allowuse,arg_s_mtrl,arg_msg,ls_s_pfmx[ll_j].wrkGrpid,ls_s_pfmx[ll_j].pfgroup )
  1937. IF rslt = 0 THEN
  1938. EXIT
  1939. END IF
  1940. NEXT
  1941. END IF
  1942. ext:
  1943. RETURN rslt
  1944. end function
  1945. public function integer uof_add_rqmtrl_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  1946. Long i, ll_rowcnt
  1947. String ls_relbuytaskcode, ls_relbuytaskrelcode
  1948. Int li_scllflag
  1949. String ls_taskcode
  1950. Decimal lde_price
  1951. SELECT u_saletaskmx.scllflag, u_saletask.taskcode
  1952. INTO :li_scllflag, :ls_taskcode
  1953. FROM u_saletaskmx INNER join
  1954. u_saletask on u_saletaskmx.scid = u_saletask.scid
  1955. AND u_saletaskmx.taskid = u_saletask.taskid
  1956. WHERE u_saletaskmx.scid = :arg_scid
  1957. AND u_saletaskmx.taskid = :arg_relid
  1958. AND u_saletaskmx.printid = :arg_relprintid;
  1959. IF sqlca.SQLCode <> 0 THEN
  1960. rslt = 0
  1961. ARG_MSG = "查询销售订单明细信息操作失败"+"~n"+sqlca.SQLErrText
  1962. GOTO ext
  1963. END IF
  1964. IF li_scllflag = 0 THEN
  1965. rslt = 0
  1966. ARG_MSG = "销售订单["+ls_taskcode+"],相关明细还未用料审,不能操作"
  1967. GOTO ext
  1968. END IF
  1969. //查找单号
  1970. if arg_plantype <> 3 then
  1971. datastore ds
  1972. ds = CREATE datastore
  1973. ds.DataObject = "ds_orderrqmtrl_buytask"
  1974. ds.SetTransObject(sqlca)
  1975. ll_rowcnt = ds.Retrieve(arg_mxpkid)
  1976. FOR i = 1 TO ll_rowcnt
  1977. ls_relbuytaskcode = ds.Object.u_buytask_taskcode[i] + ","
  1978. ls_relbuytaskrelcode = ds.Object.u_buytask_relcode[i] + ","
  1979. NEXT
  1980. IF ls_relbuytaskcode <> "" THEN
  1981. ls_relbuytaskcode = Left(ls_relbuytaskcode, Len(ls_relbuytaskcode) - 1)
  1982. END IF
  1983. IF ls_relbuytaskrelcode <> "" THEN
  1984. ls_relbuytaskrelcode = Left(ls_relbuytaskrelcode, Len(ls_relbuytaskrelcode) - 1)
  1985. END IF
  1986. else //获取外协单号
  1987. select taskcode into :ls_relbuytaskcode
  1988. from u_order_wfjg inner join
  1989. u_order_wfjgmx on u_order_wfjgmx.wfjgID = u_order_wfjg.wfjgID
  1990. AND u_order_wfjgmx.scid = u_order_wfjg.scid
  1991. WHERE u_order_wfjgmx.scid = :arg_scid
  1992. AND u_order_wfjgmx.wfjgID = :arg_relid
  1993. AND u_order_wfjgmx.printid = :arg_relprintid;
  1994. IF sqlca.SQLCode <> 0 THEN
  1995. ls_relbuytaskcode = ''
  1996. END IF
  1997. end if
  1998. IF arg_plantype = 2 THEN
  1999. //查第一张采购订单的单价;
  2000. SELECT top 1 isnull(uprice,0)
  2001. INTO :lde_price
  2002. FROM u_buytaskmx INNER join
  2003. u_buytask on u_buytaskmx.scid = u_buytask.scid
  2004. AND u_buytaskmx.taskid = u_buytask.taskid
  2005. WHERE u_buytaskmx.relid = :arg_relid
  2006. AND u_buytaskmx.relprintid = :arg_relprintid
  2007. AND u_buytaskmx.relid2 = :arg_mxpkid
  2008. AND u_buytask.status <> 0
  2009. Order By u_buytaskmx.taskid ;
  2010. IF sqlca.SQLCode <> 0 THEN
  2011. lde_price = 0
  2012. END IF
  2013. ELSEIF arg_plantype = 3 THEN
  2014. //查外协
  2015. END IF
  2016. UPDATE u_OrderRqMtrl
  2017. SET consignedqty = consignedqty + :arg_addqty,
  2018. relbytskcode = :ls_relbuytaskcode,
  2019. relbytskrelcode = :ls_relbuytaskrelcode,
  2020. relbytskprice = :lde_price
  2021. WHERE mxpkid = :arg_mxpkid
  2022. AND scid = :arg_scid
  2023. AND taskID = :arg_relid
  2024. AND printid = :arg_relprintid
  2025. AND plantype = :arg_plantype
  2026. USING sqlca;
  2027. IF sqlca.SQLCode <> 0 THEN
  2028. rslt = 0
  2029. ARG_MSG = "更新销售订单明细的已订货数操作失败"+"~n"+sqlca.SQLErrText
  2030. GOTO ext
  2031. ELSEIF sqlca.SQLNRows = 0 THEN
  2032. rslt = 0
  2033. ARG_MSG = "销售订单明细的已订货数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
  2034. GOTO ext
  2035. END IF
  2036. ext:
  2037. IF rslt = 0 THEN
  2038. ROLLBACK USING sqlca;
  2039. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2040. COMMIT USING sqlca;
  2041. END IF
  2042. RETURN rslt
  2043. end function
  2044. public function integer uof_del_rqmtrl_relcode (long arg_scid, long arg_relid, long arg_relprintid, long arg_mxpkid, integer arg_plantype, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  2045. Long i, ll_rowcnt
  2046. String ls_relbuytaskcode, ls_relbuytaskrelcode
  2047. //查找单号
  2048. datastore ds
  2049. ds = CREATE datastore
  2050. ds.DataObject = "ds_orderrqmtrl_buytask"
  2051. ds.settransobject(sqlca)
  2052. ll_rowcnt = ds.Retrieve(arg_mxpkid)
  2053. FOR i = 1 TO ll_rowcnt
  2054. ls_relbuytaskcode = ds.Object.u_buytask_taskcode[i] + ","
  2055. ls_relbuytaskrelcode = ds.Object.u_buytask_relcode[i] + ","
  2056. NEXT
  2057. IF ls_relbuytaskcode <> "" THEN
  2058. ls_relbuytaskcode = Left(ls_relbuytaskcode, Len(ls_relbuytaskcode) - 1)
  2059. END IF
  2060. IF ls_relbuytaskrelcode <> "" THEN
  2061. ls_relbuytaskrelcode = Left(ls_relbuytaskrelcode, Len(ls_relbuytaskrelcode) - 1)
  2062. END IF
  2063. UPDATE u_OrderRqMtrl
  2064. SET relbytskcode = :ls_relbuytaskcode,
  2065. relbytskrelcode = :ls_relbuytaskrelcode
  2066. WHERE mxpkid = :arg_mxpkid
  2067. and scid = :arg_scid
  2068. and taskID = :arg_relid
  2069. and printid = :arg_relprintid
  2070. and plantype = :arg_plantype
  2071. USING sqlca;
  2072. IF sqlca.SQLCode <> 0 THEN
  2073. rslt = 0
  2074. ARG_MSG = "因网络或其它原因导致更新销售订单明细的订货单号操作失败"+"~n"+sqlca.SQLErrText
  2075. GOTO ext
  2076. elseIF sqlca.SQLNrows = 0 THEN
  2077. rslt = 0
  2078. arg_msg = "销售订单明细的订货单号正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
  2079. GOTO ext
  2080. END IF
  2081. ext:
  2082. IF rslt = 0 THEN
  2083. ROLLBACK USING sqlca;
  2084. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2085. COMMIT USING sqlca;
  2086. END IF
  2087. RETURN rslt
  2088. end function
  2089. public function integer uof_add_rqmtrl_scll_consignedqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_rqmtrlid, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  2090. Long ll_MtrlID
  2091. String ls_status, ls_woodcode, ls_pcode
  2092. Decimal lde_Dstrqty, lde_truerqqty
  2093. Decimal lde_upscllrate, lde_upscllqty
  2094. SELECT MtrlID,
  2095. status,
  2096. woodcode,
  2097. pcode,
  2098. DstrQty,
  2099. truerqqty
  2100. INTO :ll_MtrlID,
  2101. :ls_status,
  2102. :ls_woodcode,
  2103. :ls_pcode,
  2104. :lde_Dstrqty,
  2105. :lde_truerqqty
  2106. FROM u_saleRqMtrl_scll
  2107. WHERE scid = :arg_scid
  2108. AND taskid = :arg_relid
  2109. AND printid = :arg_relprintid
  2110. AND rqmtrlid = :arg_rqmtrlid
  2111. Using sqlca;
  2112. IF sqlca.SQLCode <> 0 THEN
  2113. rslt = 0
  2114. arg_msg = '查询销售订单明细的已领用数失败,'+sqlca.SQLErrText
  2115. GOTO ext
  2116. END IF
  2117. SELECT upscllrate, upscllqty
  2118. INTO :lde_upscllrate, :lde_upscllqty
  2119. FROM u_mtrldef
  2120. WHERE mtrlid = :ll_mtrlid
  2121. Using sqlca;
  2122. IF sqlca.SQLCode <> 0 THEN
  2123. rslt = 0
  2124. arg_msg = '查询物料明细资料失败,'+sqlca.SQLErrText
  2125. GOTO ext
  2126. END IF
  2127. IF arg_addqty > 0 THEN //增加
  2128. IF lde_truerqqty * (1 + lde_upscllrate) + lde_upscllqty < lde_Dstrqty + arg_addqty THEN
  2129. rslt = 0
  2130. arg_msg = "销售订单需求明细的未领用数不足够更新。"
  2131. GOTO ext
  2132. END IF
  2133. ELSE
  2134. IF lde_Dstrqty < Abs(arg_addqty) THEN
  2135. rslt = 0
  2136. arg_msg = "销售订单需求明细的已领用数不足够更新。"
  2137. GOTO ext
  2138. END IF
  2139. END IF
  2140. UPDATE u_saleRqMtrl_scll
  2141. SET DstrQty = dstrqty + :arg_addqty
  2142. WHERE scid = :arg_scid
  2143. AND taskid = :arg_relid
  2144. AND printid = :arg_relprintid
  2145. AND rqmtrlid = :arg_rqmtrlid
  2146. Using sqlca;
  2147. IF sqlca.SQLCode <> 0 THEN
  2148. rslt = 0
  2149. arg_msg = '更新销售订单明细的已领用数失败,'+sqlca.SQLErrText
  2150. GOTO ext
  2151. ELSEIF sqlca.SQLNRows = 0 THEN
  2152. rslt = 0
  2153. arg_msg = "销售订单明细的已领用数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
  2154. GOTO ext
  2155. END IF
  2156. //更新uof_add_rqmtrl_dstrqty
  2157. IF uof_add_rqmtrl_dstrqty(arg_scid, arg_relid, arg_relprintid, ll_MtrlID, ls_status, ls_woodcode, ls_pcode, arg_addqty, False, arg_msg) = 0 THEN
  2158. rslt = 0
  2159. GOTO ext
  2160. END IF
  2161. ext:
  2162. IF rslt = 0 THEN
  2163. ROLLBACK Using sqlca;
  2164. ELSEIF rslt = 1 And arg_ifcommit THEN
  2165. COMMIT Using sqlca;
  2166. END IF
  2167. RETURN rslt
  2168. end function
  2169. public function integer uof_add_rqmtrl_dstrqty (long arg_scid, long arg_relid, long arg_relprintid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_addqty, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  2170. Long i, ll_rowcnt
  2171. Decimal lde_addqty, lde_restqty, lde_qty
  2172. Long ll_mxpkid
  2173. IF arg_addqty = 0 THEN
  2174. rslt = 1
  2175. GOTO ext
  2176. END IF
  2177. lde_qty = arg_addqty
  2178. //查找单号
  2179. datastore ds
  2180. ds = CREATE datastore
  2181. ds.DataObject = "ds_orderrqmtrl_scll"
  2182. ds.SetTransObject(sqlca)
  2183. ll_rowcnt = ds.Retrieve(arg_scid, arg_relid, arg_relprintid, arg_mtrlid, arg_status, arg_woodcode, arg_pcode)
  2184. IF lde_qty > 0 THEN
  2185. FOR i = 1 TO ll_rowcnt
  2186. lde_addqty = Min(ds.Object.rqqty[i] - ds.Object.dstrqty[i], lde_qty)
  2187. lde_qty -= lde_addqty
  2188. ll_mxpkid = ds.Object.mxpkid[i]
  2189. UPDATE u_OrderRqMtrl
  2190. SET DstrQty = dstrqty + :lde_addqty
  2191. WHERE scid = :arg_scid
  2192. AND taskid = :arg_relid
  2193. AND printid = :arg_relprintid
  2194. AND mxpkid = :ll_mxpkid
  2195. USING sqlca;
  2196. IF sqlca.SQLCode <> 0 THEN
  2197. rslt = 0
  2198. arg_msg = '更新销售订单需求明细的已领用数失败,'+sqlca.SQLErrText
  2199. GOTO ext
  2200. ELSEIF sqlca.SQLNRows = 0 THEN
  2201. rslt = 0
  2202. arg_msg = "销售订单需求明细的已领用数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
  2203. GOTO ext
  2204. END IF
  2205. IF lde_qty <= 0 THEN EXIT
  2206. NEXT
  2207. ELSE
  2208. lde_qty = Abs(lde_qty)
  2209. FOR i = 1 TO ll_rowcnt
  2210. IF ds.Object.dstrqty[i] > 0 THEN
  2211. lde_addqty = Min(ds.Object.dstrqty[i], lde_qty)
  2212. lde_qty -= lde_addqty
  2213. ll_mxpkid = ds.Object.mxpkid[i]
  2214. UPDATE u_OrderRqMtrl
  2215. SET DstrQty = dstrqty - :lde_addqty
  2216. WHERE scid = :arg_scid
  2217. AND taskid = :arg_relid
  2218. AND printid = :arg_relprintid
  2219. AND mxpkid = :ll_mxpkid
  2220. USING sqlca;
  2221. IF sqlca.SQLCode <> 0 THEN
  2222. rslt = 0
  2223. arg_msg = '更新销售订单需求明细的已领用数失败,'+sqlca.SQLErrText
  2224. GOTO ext
  2225. ELSEIF sqlca.SQLNRows = 0 THEN
  2226. rslt = 0
  2227. arg_msg = "销售订单需求明细的已领用数正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
  2228. GOTO ext
  2229. END IF
  2230. IF lde_qty <= 0 THEN EXIT
  2231. END IF
  2232. NEXT
  2233. END IF
  2234. //IF lde_qty > 0 THEN
  2235. // rslt = 0
  2236. // arg_msg = "销售订单需求明细的已领用数不足够更新。"
  2237. // GOTO ext
  2238. //END IF
  2239. ext:
  2240. IF rslt = 0 THEN
  2241. ROLLBACK USING sqlca;
  2242. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2243. COMMIT USING sqlca;
  2244. END IF
  2245. DESTROY ds
  2246. RETURN rslt
  2247. end function
  2248. public function integer uof_edit_rqmtrl (s_order_ml_rqmtrl arg_s_mtrl, boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1
  2249. Long ll_i
  2250. String ls_mtrlcode
  2251. Long cnt
  2252. Long ll_mxpkid
  2253. Decimal ld_consignedqty,ld_inqty
  2254. IF arg_s_mtrl.plantype[1] = 2 THEN //检查采购订单;
  2255. SELECT count(*)
  2256. INTO :cnt
  2257. FROM u_buytask INNER join
  2258. u_buytaskmx on u_buytask.scid = u_buytaskmx.scid
  2259. AND u_buytask.taskid = u_buytaskmx.taskid
  2260. Where u_buytaskmx.relid2 = :arg_s_mtrl.mxpkid[1];
  2261. IF sqlca.SQLCode <> 0 THEN
  2262. arg_msg = "查询原用料采购订单信息失败," + sqlca.SQLErrText
  2263. rslt = 0
  2264. GOTO ext
  2265. END IF
  2266. IF cnt > 0 THEN
  2267. arg_msg = "原用料已建立采购订单,不能操作"
  2268. rslt = 0
  2269. GOTO ext
  2270. END IF
  2271. ELSEIF arg_s_mtrl.plantype[1] = 3 THEN //检查外协订单
  2272. END IF
  2273. ld_consignedqty = 0
  2274. ld_inqty = 0
  2275. SELECT consignedqty,
  2276. inqty
  2277. INTO :ld_consignedqty,
  2278. :ld_inqty
  2279. FROM u_orderRqMtrl
  2280. WHERE mxpkid = :arg_s_mtrl.mxpkid[1]
  2281. AND scid = :arg_s_mtrl.scid[1]
  2282. AND taskid = :arg_s_mtrl.taskid[1]
  2283. AND printid = :arg_s_mtrl.printid[1]
  2284. AND plantype = :arg_s_mtrl.plantype[1] USING sqlca;
  2285. IF sqlca.SQLCode <> 0 THEN
  2286. arg_msg = "查询原用料信息失败," + sqlca.SQLErrText
  2287. rslt = 0
  2288. GOTO ext
  2289. END IF
  2290. IF arg_s_mtrl.plantype[1] = 2 THEN
  2291. IF ld_consignedqty > 0 THEN
  2292. arg_msg = "原用料已有采购已订货数,不能操作"
  2293. rslt = 0
  2294. GOTO ext
  2295. ELSEIF ld_inqty > 0 THEN
  2296. arg_msg = "原用料已有采购已进仓数,不能操作"
  2297. rslt = 0
  2298. GOTO ext
  2299. END IF
  2300. ELSEIF arg_s_mtrl.plantype[1] = 3 THEN
  2301. IF ld_consignedqty > 0 THEN
  2302. arg_msg = "原用料已有外协已订货数,不能操作"
  2303. rslt = 0
  2304. GOTO ext
  2305. ELSEIF ld_inqty > 0 THEN
  2306. arg_msg = "原用料已有外协已进仓数,不能操作"
  2307. rslt = 0
  2308. GOTO ext
  2309. END IF
  2310. END IF
  2311. UPDATE u_orderRqMtrl
  2312. SET RqQty = :arg_s_mtrl.qty[1] ,
  2313. truerqqty = :arg_s_mtrl.cmplqty[1]
  2314. WHERE mxpkid = :arg_s_mtrl.mxpkid[1] AND
  2315. scid = :arg_s_mtrl.scid[1] AND
  2316. taskID = :arg_s_mtrl.taskid[1] AND
  2317. printid = :arg_s_mtrl.printid[1] AND
  2318. plantype = :arg_s_mtrl.plantype[1] USING sqlca;
  2319. IF sqlca.SQLCode <> 0 THEN
  2320. rslt = 0
  2321. arg_msg = "更新销售订单明细的运算结果操作失败"+"~n"+sqlca.SQLErrText
  2322. GOTO ext
  2323. ELSEIF sqlca.SQLNRows = 0 THEN
  2324. rslt = 0
  2325. arg_msg = "销售订单明细的运算结果正在更新,请稍后查询。"+"~n"+sqlca.SQLErrText
  2326. GOTO ext
  2327. END IF
  2328. ext:
  2329. IF rslt = 0 THEN
  2330. ROLLBACK USING sqlca;
  2331. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2332. COMMIT USING sqlca;
  2333. END IF
  2334. RETURN rslt
  2335. end function
  2336. on uo_order_ml_mrp.create
  2337. call super::create
  2338. TriggerEvent( this, "constructor" )
  2339. end on
  2340. on uo_order_ml_mrp.destroy
  2341. TriggerEvent( this, "destructor" )
  2342. call super::destroy
  2343. end on