uo_requestbuy.sru 89 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179
  1. $PBExportHeader$uo_requestbuy.sru
  2. forward
  3. global type uo_requestbuy from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_requestbuy from nonvisualobject
  7. end type
  8. global uo_requestbuy uo_requestbuy
  9. type variables
  10. Long uo_requestbuyid
  11. String uo_requestbuycode
  12. Int uo_option_requestbuy_hz
  13. Int uo_option_buytask_spt
  14. int uo_option_rqbuy_checkdate
  15. int uo_option_cl_cp_buy
  16. int uo_option_if_oa_requestbuy_dept
  17. int uo_option_request_dept_secaudit
  18. Long audit_buildtype
  19. end variables
  20. forward prototypes
  21. public function integer updatebegin (long arg_scid, long arg_requestbuyid, ref string arg_msg)
  22. public function integer save (s_requestbuy arg_rqbuy, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  23. public function integer finishorder (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  24. public function integer cfinishorder (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer add_dscrp (long arg_scid, long arg_requestbuyid, string arg_newdescppart, ref string arg_msg)
  26. public function integer tmpstoporder (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  27. public function integer p_getifauto (long arg_scid, long arg_requestbuyid, ref integer arg_ifauto, ref string arg_msg)
  28. public function integer del (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit)
  29. public function integer tryfinish (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit)
  30. public function integer audit (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  31. public function integer audit_2 (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  32. public function integer caudit (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit)
  33. public function integer p_getflag (long arg_scid, long arg_requestbuyid, ref integer arg_flag, ref integer arg_billtype, ref string arg_msg)
  34. public function integer addmxcmpl (long arg_scid, long arg_requestbuyid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  35. public function integer caudit_2 (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit)
  36. public function integer audit_mx (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  37. public function integer caudit_mx (long arg_scid, long arg_requestbuyid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  38. public function integer getinfo (long arg_scid, long arg_requestbuyid, ref s_requestbuymx arg_ref_rqmx[], ref long arg_arr_cnt, ref s_requestbuymx arg_ref_rqmxmx[], ref long arg_arr_cnt_mx, ref string arg_msg)
  39. public function integer stopmx (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit)
  40. public function integer stoporder (long arg_scid, long arg_requestbuyid, string arg_stopreason, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  41. public function integer stopqty (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_commit)
  42. public function integer uof_cmpl_cf (s_requestbuymx arg_s_rqbuymxmx[], long it_mxbt_mx, ref s_requestbuymx arg_s_rqbuymxmx_pqty[], ref long it_mxbt_mx_p, ref string arg_msg)
  43. public function integer uof_cmpl_hz (ref s_requestbuymx arg_s_rqbuymx[], boolean arg_ifhz, ref s_requestbuymx arg_s_rqbuymxmx[], ref long it_mxbt_mx, ref string arg_msg)
  44. public function integer uof_update_buy_flag (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit)
  45. public function integer stopordercancel (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit)
  46. end prototypes
  47. public function integer updatebegin (long arg_scid, long arg_requestbuyid, ref string arg_msg);Int rslt = 1
  48. Int li_flag,li_ifauto,li_billtype
  49. Long cnt
  50. IF arg_requestbuyid <= 0 THEN
  51. rslt = 0
  52. arg_msg = '错误单据唯一码'
  53. GOTO ext
  54. END IF
  55. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  56. rslt = 0
  57. GOTO ext
  58. END IF
  59. IF li_flag = 1 THEN
  60. rslt = 0
  61. arg_msg = '单据已经审核,不可以修改,要修改请先撤销审核'
  62. GOTO ext
  63. END IF
  64. IF p_getifauto(arg_scid,arg_requestbuyid,li_ifauto,arg_msg) = 0 THEN
  65. rslt = 0
  66. GOTO ext
  67. END IF
  68. IF li_ifauto = 1 THEN
  69. rslt = 0
  70. arg_msg = '单据为动建立的单据,不可以修改'
  71. GOTO ext
  72. END IF
  73. SELECT count(*) INTO :cnt
  74. FROM u_buytaskmx
  75. WHERE scid = :arg_scid
  76. AND requestbuyid = :arg_requestbuyid;
  77. IF sqlca.SQLCode <> 0 THEN
  78. arg_msg = '查询申购单明细是否已开采购订单失败,'+sqlca.SQLErrText
  79. rslt = 0
  80. GOTO ext
  81. END IF
  82. IF cnt > 0 THEN
  83. arg_msg = '申购单明细已开采购订单,不能修改'
  84. rslt = 0
  85. GOTO ext
  86. END IF
  87. ext:
  88. RETURN rslt
  89. end function
  90. public function integer save (s_requestbuy arg_rqbuy, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0
  91. DateTime server_dt
  92. Long ll_requestbuyid,it_mxbt,i,j
  93. String ls_sccode,ls_requestbuycode
  94. Long ll_mx_dftsptid
  95. Int li_mtrlkind
  96. String ls_ordercode
  97. Long ll_sptmode,ll_sptid
  98. String ls_relcode
  99. String ls_ordercodestr,ls_relcodestr
  100. Int li_ifsendlot
  101. Decimal ld_maxqty,ld_minqty,ld_maxdays,ld_mindays
  102. Decimal ld_qty
  103. DateTime ldt_rqdate
  104. Int li_buydec, li_flag
  105. String ls_unit
  106. Decimal ld_adddec
  107. Boolean lb_chk_mtrl = True //物料资料相关信息检查
  108. Boolean lb_chk_order = True //是否超计划相关信息检查
  109. String ls_msg, ls_msg2
  110. String ls_mtrlname, ls_mtrlmode
  111. IF uo_option_requestbuy_hz = -1000 THEN
  112. arg_msg = '选项:[111]申购单汇总采购,读取初始默认值失败,操作取消!'
  113. rslt = 0
  114. GOTO ext
  115. END IF
  116. IF uo_option_rqbuy_checkdate = -1000 THEN
  117. arg_msg = '选项:[314]申购单保存不检查交货日期,读取初始默认值失败,操作取消!'
  118. rslt = 0
  119. GOTO ext
  120. END IF
  121. IF uo_option_cl_cp_buy = -1000 THEN
  122. arg_msg = '选项:[319]材料采购与成品采购合并显示,读取初始默认值失败,操作取消!'
  123. rslt = 0
  124. GOTO ext
  125. END IF
  126. IF IsNull(arg_rqbuy.scid) THEN arg_rqbuy.scid = 0
  127. IF IsNull(arg_rqbuy.requestbuyid) THEN arg_rqbuy.requestbuyid = 0
  128. IF IsNull(arg_rqbuy.assign_emp) THEN arg_rqbuy.assign_emp = ''
  129. IF IsNull(arg_rqbuy.relcode) THEN arg_rqbuy.relcode = ''
  130. IF IsNull(arg_rqbuy.dscrp) THEN arg_rqbuy.dscrp = ''
  131. IF IsNull(arg_rqbuy.ifauto) THEN arg_rqbuy.ifauto = 0
  132. IF IsNull(arg_rqbuy.deptid) THEN arg_rqbuy.deptid = 0
  133. IF arg_rqbuy.assign_emp = '' THEN
  134. arg_msg = '请输入经手人'
  135. rslt = 0
  136. GOTO ext
  137. END IF
  138. SELECT Top 1 getdate() Into :server_dt From u_user;
  139. IF sqlca.SQLCode <> 0 THEN
  140. rslt = 0
  141. arg_msg = "查询操作失败,日期 "
  142. GOTO ext
  143. END IF
  144. IF f_check_inoutdate(-100,arg_rqbuy.requestbuydate,False,arg_msg) = 0 THEN
  145. rslt = 0
  146. GOTO ext
  147. END IF
  148. it_mxbt = UpperBound(arg_rqbuy.arg_s_rqbuymx)
  149. IF it_mxbt <= 0 THEN
  150. rslt = 0
  151. arg_msg = "没有正确明细内容"
  152. GOTO ext
  153. END IF
  154. FOR i = 1 To it_mxbt
  155. IF arg_rqbuy.arg_s_rqbuymx[i].rate = 0 THEN arg_rqbuy.arg_s_rqbuymx[i].rate = 1 //处理转换率
  156. SELECT mtrlkind,sptmode,dftsptid, unit,adddec, flag, mtrlname, mtrlmode
  157. INTO :li_mtrlkind,:ll_sptmode,:ll_sptid, :ls_unit,:ld_adddec, :li_flag, :ls_mtrlname, :ls_mtrlmode
  158. FROM u_mtrldef
  159. Where u_mtrldef.mtrlid = :arg_rqbuy.arg_s_rqbuymx[i].mtrlid;
  160. IF sqlca.SQLCode <> 0 THEN
  161. rslt = 0
  162. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',查询物料资料失败,'+sqlca.SQLErrText
  163. GOTO ext
  164. END IF
  165. IF sys_option_audit_mtrl <> 0 THEN
  166. IF li_flag <> 2 THEN
  167. lb_chk_mtrl = False //改成汇总提示
  168. ls_msg += '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',资料未审核~r~n'
  169. END IF
  170. END IF
  171. //判断日期
  172. IF uo_option_rqbuy_checkdate = 0 THEN
  173. IF Date(arg_rqbuy.arg_s_rqbuymx[i].rqdate) < Date(arg_rqbuy.requestbuydate) THEN
  174. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',需求日期小于申购日期'
  175. rslt = 0
  176. GOTO ext
  177. END IF
  178. END IF
  179. //判断单位
  180. IF arg_rqbuy.arg_s_rqbuymx[i].rate <> 1 THEN
  181. IF ls_unit = arg_rqbuy.arg_s_rqbuymx[i].unit THEN
  182. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',转换率不为1但单位与库存单位相同'
  183. rslt = 0
  184. GOTO ext
  185. END IF
  186. END IF
  187. //处理默认供应商
  188. IF ll_sptmode = 0 THEN //无默认供应商
  189. arg_rqbuy.arg_s_rqbuymx[i].sptid = 0
  190. ELSEIF ll_sptmode = 1 THEN //按主供应商
  191. arg_rqbuy.arg_s_rqbuymx[i].sptid = ll_sptid
  192. ELSEIF ll_sptmode = 2 THEN //自动带最低价供应商
  193. SELECT TOP 1 sptid INTO :ll_sptid
  194. FROM u_spt_price
  195. WHERE ( mtrlid = :arg_rqbuy.arg_s_rqbuymx[i].mtrlid )
  196. AND ( status = :arg_rqbuy.arg_s_rqbuymx[i].status )
  197. AND ( unit = :arg_rqbuy.arg_s_rqbuymx[i].unit )
  198. Order By fprice;
  199. IF sqlca.SQLCode <> 0 THEN
  200. ll_sptid = 0
  201. END IF
  202. arg_rqbuy.arg_s_rqbuymx[i].sptid = ll_sptid
  203. ELSEIF ll_sptmode = 3 THEN //自动带上次供应商
  204. SELECT TOP 1 sptid INTO :ll_sptid
  205. FROM u_spt_price
  206. WHERE ( mtrlid = :arg_rqbuy.arg_s_rqbuymx[i].mtrlid )
  207. AND ( status = :arg_rqbuy.arg_s_rqbuymx[i].status )
  208. AND ( unit = :arg_rqbuy.arg_s_rqbuymx[i].unit )
  209. Order By sys_changetime Desc;
  210. IF sqlca.SQLCode <> 0 THEN
  211. ll_sptid = 0
  212. END IF
  213. arg_rqbuy.arg_s_rqbuymx[i].sptid = ll_sptid
  214. END IF
  215. //计算库存数量
  216. IF arg_rqbuy.arg_s_rqbuymx[i].rate = 1 THEN
  217. arg_rqbuy.arg_s_rqbuymx[i].qty = arg_rqbuy.arg_s_rqbuymx[i].uqty
  218. ELSE
  219. arg_rqbuy.arg_s_rqbuymx[i].qty = Round(arg_rqbuy.arg_s_rqbuymx[i].uqty * arg_rqbuy.arg_s_rqbuymx[i].rate,10)
  220. END IF
  221. IF arg_rqbuy.billtype = 0 THEN
  222. IF li_mtrlkind = 1 And arg_rqbuy.arg_s_rqbuymx[i].ifrel = 1 THEN
  223. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',MRP属性设为不按计划,所以不能选择计划'
  224. rslt = 0
  225. GOTO ext
  226. END IF
  227. END IF
  228. //根据用户权限,[]严格按计划物料必须按计划建立申请单, 检查是否有不安计划的物料
  229. IF f_power_ind(3263,sys_msg_pow) And Not sys_power_issuper THEN
  230. IF arg_rqbuy.arg_s_rqbuymx[i].ifrel = 0 THEN //不按计划的
  231. IF li_mtrlkind = 0 THEN //领用属性 -- 严格按计划[0]
  232. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',物料领用属性为严格按计划,权限限制,请选择计划,'+sys_msg_pow
  233. rslt = 0
  234. GOTO ext
  235. END IF
  236. END IF
  237. END IF
  238. IF arg_rqbuy.arg_s_rqbuymx[i].ifrel = 1 THEN
  239. IF arg_rqbuy.arg_s_rqbuymx[i].orderid = 0 THEN
  240. IF arg_rqbuy.billtype = 0 THEN
  241. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',请选择计划'
  242. ELSE
  243. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',请选择销售订单'
  244. END IF
  245. rslt = 0
  246. GOTO ext
  247. ELSE
  248. ls_ordercode = ''
  249. IF arg_rqbuy.billtype = 0 THEN
  250. SELECT ordercode,relcode INTO :ls_ordercode,:ls_relcode
  251. FROM u_order_ml
  252. WHERE orderid = :arg_rqbuy.arg_s_rqbuymx[i].orderid
  253. And scid = :arg_rqbuy.scid;
  254. IF sqlca.SQLCode <> 0 THEN
  255. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',查询计划编号失败'
  256. rslt = 0
  257. GOTO ext
  258. END IF
  259. //检查申购数量 是否超过计划申购数量
  260. Dec ld_truerqqty, ld_consignedqty, ld_thisqty
  261. SELECT rqbuyqty, truerqqty
  262. INTO :ld_consignedqty, :ld_truerqqty
  263. FROM u_OrderRqMtrl
  264. WHERE orderid = :arg_rqbuy.arg_s_rqbuymx[i].orderid
  265. AND wrkGrpid = :arg_rqbuy.arg_s_rqbuymx[i].wrkGrpid
  266. AND mtrlid = :arg_rqbuy.arg_s_rqbuymx[i].mtrlid
  267. AND status = :arg_rqbuy.arg_s_rqbuymx[i].status
  268. AND woodcode = :arg_rqbuy.arg_s_rqbuymx[i].woodcode
  269. AND pcode = :arg_rqbuy.arg_s_rqbuymx[i].pcode
  270. AND scid = :arg_rqbuy.scid
  271. And plantype = 2;
  272. IF sqlca.SQLCode <> 0 THEN
  273. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',查询物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+'计划已申购数(申请)数失败,'+sqlca.SQLErrText
  274. rslt = 0
  275. GOTO ext
  276. END IF
  277. IF IsNull(ld_consignedqty) THEN ld_consignedqty = 0
  278. IF IsNull(ld_truerqqty) THEN ld_truerqqty = 0
  279. IF i > 1 THEN
  280. FOR j = 1 To i - 1
  281. IF arg_rqbuy.arg_s_rqbuymx[i].ifrel = arg_rqbuy.arg_s_rqbuymx[j].ifrel &
  282. And arg_rqbuy.arg_s_rqbuymx[i].orderid = arg_rqbuy.arg_s_rqbuymx[j].orderid &
  283. And arg_rqbuy.arg_s_rqbuymx[i].mtrlid = arg_rqbuy.arg_s_rqbuymx[j].mtrlid &
  284. And arg_rqbuy.arg_s_rqbuymx[i].status = arg_rqbuy.arg_s_rqbuymx[j].status &
  285. And arg_rqbuy.arg_s_rqbuymx[i].woodcode = arg_rqbuy.arg_s_rqbuymx[j].woodcode &
  286. And arg_rqbuy.arg_s_rqbuymx[i].pcode = arg_rqbuy.arg_s_rqbuymx[j].pcode &
  287. And arg_rqbuy.arg_s_rqbuymx[i].wrkGrpid = arg_rqbuy.arg_s_rqbuymx[j].wrkGrpid THEN
  288. ld_thisqty += arg_rqbuy.arg_s_rqbuymx[j].qty
  289. END IF
  290. NEXT
  291. END IF
  292. // //dyy 屏蔽于 2013-04-27
  293. // If arg_rqbuy.arg_s_rqbuymx[i].rate = 1 Then
  294. // ld_adddec = 0
  295. // End If
  296. IF ld_consignedqty + arg_rqbuy.arg_s_rqbuymx[i].qty + ld_thisqty > ld_truerqqty + ld_adddec THEN
  297. lb_chk_order = False //改成汇总提示
  298. ls_msg2 += '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料编码:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',物料名称:'+ls_mtrlname+',物料规格:'+ls_mtrlmode+',计划号:'+ls_ordercode
  299. ls_msg2 += ',已安排数:'+String(ld_consignedqty,'#,#0.0#########')+'未安排申购(申请):'+String(ld_truerqqty - ld_consignedqty,'#,#0.0#########')
  300. IF ld_thisqty <> 0 THEN
  301. ls_msg2 += ',本单已安排:'+String(ld_thisqty,'#,#0.0#########')
  302. END IF
  303. ls_msg2 += ',不能安排:'+String(arg_rqbuy.arg_s_rqbuymx[i].qty,'#,#0.0#########')+';~r~n'
  304. END IF
  305. ELSE
  306. SELECT u_saletask.taskcode,u_saletask.relcode INTO :ls_ordercode,:ls_relcode
  307. FROM u_saletask,u_saletaskmx
  308. WHERE u_saletask.taskid = u_saletaskmx.taskid
  309. AND u_saletask.scid = u_saletaskmx.scid
  310. AND u_saletaskmx.scid = :arg_rqbuy.scid
  311. AND u_saletaskmx.taskid = :arg_rqbuy.arg_s_rqbuymx[i].orderid
  312. And u_saletaskmx.printid = :arg_rqbuy.arg_s_rqbuymx[i].relprintid;
  313. IF sqlca.SQLCode <> 0 THEN
  314. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',查询订单编号失败'
  315. rslt = 0
  316. GOTO ext
  317. END IF
  318. END IF
  319. arg_rqbuy.arg_s_rqbuymx[i].ordercode = ls_ordercode
  320. arg_rqbuy.arg_s_rqbuymx[i].relcode = ls_relcode
  321. END IF
  322. ELSE
  323. IF arg_rqbuy.arg_s_rqbuymx[i].orderid > 0 THEN
  324. arg_msg = '行:'+String(arg_rqbuy.arg_s_rqbuymx[i].printid)+',物料:'+arg_rqbuy.arg_s_rqbuymx[i].mtrlcode+',不能选择计划'
  325. rslt = 0
  326. GOTO ext
  327. END IF
  328. arg_rqbuy.arg_s_rqbuymx[i].ordercode = ''
  329. arg_rqbuy.arg_s_rqbuymx[i].relcode = ''
  330. END IF
  331. NEXT
  332. IF sys_option_audit_mtrl <> 0 THEN
  333. IF Not lb_chk_mtrl THEN //用于汇总提示错误
  334. rslt = 0
  335. arg_msg = "系统选项[297]限制,~r~n" + ls_msg //物料资料未审核
  336. GOTO ext
  337. END IF
  338. END IF
  339. IF Not lb_chk_order THEN //用于汇总提示错误
  340. rslt = 0
  341. arg_msg = "超计划安排申购:~r~n" + ls_msg2 //物料资料未审核
  342. GOTO ext
  343. END IF
  344. //汇总明细
  345. Long ll_i,ll_j
  346. Long it_mxbt_mx,it_mxbt_mx_p
  347. Int li_buy_autoday
  348. Decimal lde_minbuyqty
  349. Boolean lb_hz = False, lb_cmpl_ifhz = False
  350. Long ll_days
  351. s_requestbuymx arg_s_rqbuymxmx[],arg_s_rqbuymxmx_pqty[]
  352. IF uo_option_requestbuy_hz = 1 And (arg_rqbuy.billtype = 0 Or uo_option_cl_cp_buy = 1 ) THEN
  353. lb_cmpl_ifhz = True
  354. ELSE
  355. lb_cmpl_ifhz = False
  356. END IF
  357. //汇总
  358. IF uof_cmpl_hz(arg_rqbuy.arg_s_rqbuymx, lb_cmpl_ifhz, arg_s_rqbuymxmx, it_mxbt_mx, arg_msg) = 0 THEN
  359. rslt = 0
  360. GOTO ext
  361. END IF
  362. //====================================================================
  363. // 修改:增加按最少采购量处理采购数量的代码,可能导致it_mxbt变化
  364. //--------------------------------------------------------------------
  365. // 作者: LHD 日期: 2013年08月23日
  366. //====================================================================
  367. it_mxbt = UpperBound(arg_rqbuy.arg_s_rqbuymx)
  368. //拆分
  369. IF uof_cmpl_cf( arg_s_rqbuymxmx, it_mxbt_mx, arg_s_rqbuymxmx_pqty, it_mxbt_mx_p, arg_msg) = 0 THEN
  370. rslt = 0
  371. GOTO ext
  372. END IF
  373. IF arg_rqbuy.requestbuyid = 0 THEN
  374. ll_requestbuyid = f_sys_scidentity(0,"u_requestbuy","requestbuyid",arg_msg,True,id_sqlca)
  375. IF ll_requestbuyid <= 0 THEN
  376. rslt = 0
  377. GOTO ext
  378. END IF
  379. IF f_get_sccode(arg_rqbuy.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  380. rslt = 0
  381. GOTO ext
  382. END IF
  383. IF arg_rqbuy.billtype = 0 THEN
  384. ls_requestbuycode = getid(arg_rqbuy.scid,ls_sccode + 'RQ',Date(server_dt),False,sqlca)
  385. ELSEIF arg_rqbuy.billtype = 1 THEN
  386. ls_requestbuycode = getid(arg_rqbuy.scid,ls_sccode + 'AQ',Date(server_dt),False,sqlca)
  387. ELSEIF arg_rqbuy.billtype = 2 THEN
  388. ls_requestbuycode = getid(arg_rqbuy.scid,ls_sccode + 'MQ',Date(server_dt),False,sqlca)
  389. END IF
  390. IF ls_requestbuycode = "err" THEN
  391. rslt = 0
  392. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  393. GOTO ext
  394. END IF
  395. INSERT INTO u_requestbuy
  396. (scid,
  397. requestbuyid,
  398. requestbuycode,
  399. requestbuydate,
  400. assign_emp,
  401. opdate,
  402. opemp,
  403. flag,
  404. relcode,
  405. dscrp,
  406. ifauto,
  407. billtype,
  408. deptid,
  409. billmtrltype)
  410. VALUES (
  411. :arg_rqbuy.scid,
  412. :ll_requestbuyid,
  413. :ls_requestbuycode,
  414. :arg_rqbuy.requestbuydate,
  415. :arg_rqbuy.assign_emp,
  416. getdate(),
  417. :arg_opemp,
  418. 0,
  419. :arg_rqbuy.relcode,
  420. :arg_rqbuy.dscrp,
  421. :arg_rqbuy.ifauto,
  422. :arg_rqbuy.billtype,
  423. :arg_rqbuy.deptid,
  424. :arg_rqbuy.billmtrltype) ;
  425. IF sqlca.SQLCode <> 0 THEN
  426. rslt = 0
  427. arg_msg = "建立单据操作失败"+"~n"+sqlca.SQLErrText
  428. GOTO ext
  429. END IF
  430. // uo_requestbuyid = ll_requestbuyid
  431. uo_requestbuycode = ls_requestbuycode
  432. ELSE
  433. UPDATE u_requestbuy
  434. SET
  435. requestbuydate = :arg_rqbuy.requestbuydate,
  436. assign_emp = :arg_rqbuy.assign_emp,
  437. moddate = getdate(),
  438. modemp = :arg_opemp,
  439. relcode = :arg_rqbuy.relcode,
  440. dscrp = :arg_rqbuy.dscrp,
  441. deptid = :arg_rqbuy.deptid
  442. WHERE requestbuyid = :arg_rqbuy.requestbuyid
  443. AND scid = :arg_rqbuy.scid
  444. And flag = 0;
  445. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  446. rslt = 0
  447. arg_msg = "更新单据操作失败"+"~n"+sqlca.SQLErrText
  448. GOTO ext
  449. END IF
  450. DELETE FROM u_requestbuymx
  451. WHERE requestbuyid = :arg_rqbuy.requestbuyid
  452. And scid = :arg_rqbuy.scid;
  453. IF sqlca.SQLCode <> 0 THEN
  454. rslt = 0
  455. arg_msg = "删除旧有汇总明细操作失败"+"~n"+sqlca.SQLErrText
  456. GOTO ext
  457. END IF
  458. DELETE FROM u_requestbuymxmx
  459. WHERE requestbuyid = :arg_rqbuy.requestbuyid
  460. And scid = :arg_rqbuy.scid;
  461. IF sqlca.SQLCode <> 0 THEN
  462. rslt = 0
  463. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  464. GOTO ext
  465. END IF
  466. ll_requestbuyid = arg_rqbuy.requestbuyid
  467. END IF
  468. FOR i = 1 To it_mxbt
  469. INSERT INTO u_requestbuymxmx
  470. (scid,
  471. requestbuyid,
  472. printid,
  473. orderid,
  474. mtrlid,
  475. status,
  476. woodcode,
  477. pcode,
  478. dftsptid,
  479. uqty,
  480. unit,
  481. rate,
  482. Qty,
  483. mxdscrp,
  484. ifrel,
  485. ordercode,
  486. rqdate,
  487. wrkGrpid,
  488. relprintid,
  489. storageid,
  490. sptid,
  491. plancode,
  492. relpid,
  493. price,
  494. mxdscrp2)
  495. VALUES (
  496. :arg_rqbuy.scid,
  497. :ll_requestbuyid,
  498. :arg_rqbuy.arg_s_rqbuymx[i].printid,
  499. :arg_rqbuy.arg_s_rqbuymx[i].orderid,
  500. :arg_rqbuy.arg_s_rqbuymx[i].mtrlid,
  501. :arg_rqbuy.arg_s_rqbuymx[i].status,
  502. :arg_rqbuy.arg_s_rqbuymx[i].woodcode,
  503. :arg_rqbuy.arg_s_rqbuymx[i].pcode,
  504. :arg_rqbuy.arg_s_rqbuymx[i].dftsptid,
  505. :arg_rqbuy.arg_s_rqbuymx[i].uqty,
  506. :arg_rqbuy.arg_s_rqbuymx[i].unit,
  507. :arg_rqbuy.arg_s_rqbuymx[i].rate,
  508. :arg_rqbuy.arg_s_rqbuymx[i].qty,
  509. :arg_rqbuy.arg_s_rqbuymx[i].mxdscrp,
  510. :arg_rqbuy.arg_s_rqbuymx[i].ifrel,
  511. :arg_rqbuy.arg_s_rqbuymx[i].ordercode,
  512. :arg_rqbuy.arg_s_rqbuymx[i].rqdate,
  513. :arg_rqbuy.arg_s_rqbuymx[i].wrkGrpid,
  514. :arg_rqbuy.arg_s_rqbuymx[i].relprintid,
  515. :arg_rqbuy.arg_s_rqbuymx[i].storageid,
  516. :arg_rqbuy.arg_s_rqbuymx[i].sptid,
  517. :arg_rqbuy.arg_s_rqbuymx[i].plancode,
  518. :arg_rqbuy.arg_s_rqbuymx[i].relpid,
  519. :arg_rqbuy.arg_s_rqbuymx[i].price,
  520. :arg_rqbuy.arg_s_rqbuymx[i].mxdscrp2);
  521. IF sqlca.SQLCode <> 0 THEN
  522. rslt = 0
  523. arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText
  524. GOTO ext
  525. END IF
  526. NEXT
  527. FOR i = 1 To it_mxbt_mx_p //汇总内容
  528. ls_ordercodestr = arg_s_rqbuymxmx_pqty[i].ordercodestr
  529. ls_relcodestr = arg_s_rqbuymxmx_pqty[i].relcodestr
  530. IF lena(ls_ordercodestr) > 255 THEN ls_ordercodestr = LeftA(ls_ordercodestr,255)
  531. IF lena(ls_relcodestr) > 255 THEN ls_relcodestr = LeftA(ls_relcodestr,255)
  532. IF lena(arg_s_rqbuymxmx_pqty[i].mxdscrp) > 200 THEN arg_s_rqbuymxmx_pqty[i].mxdscrp = LeftA(arg_s_rqbuymxmx_pqty[i].mxdscrp,200)
  533. INSERT INTO u_requestbuymx
  534. (scid,
  535. requestbuyid,
  536. printid,
  537. orderid,
  538. mtrlid,
  539. status,
  540. woodcode,
  541. pcode,
  542. dftsptid,
  543. uqty,
  544. unit,
  545. rate,
  546. Qty,
  547. mxdscrp,
  548. ifrel,
  549. ordercode,
  550. rqdate,
  551. wrkGrpid,
  552. relprintid,
  553. storageid,
  554. sptid,
  555. ordercodestr,
  556. relcodestr,
  557. plancode,
  558. relpid)
  559. VALUES (
  560. :arg_rqbuy.scid,
  561. :ll_requestbuyid,
  562. :arg_s_rqbuymxmx_pqty[i].printid,
  563. :arg_s_rqbuymxmx_pqty[i].orderid,
  564. :arg_s_rqbuymxmx_pqty[i].mtrlid,
  565. :arg_s_rqbuymxmx_pqty[i].status,
  566. :arg_s_rqbuymxmx_pqty[i].woodcode,
  567. :arg_s_rqbuymxmx_pqty[i].pcode,
  568. :arg_s_rqbuymxmx_pqty[i].dftsptid,
  569. :arg_s_rqbuymxmx_pqty[i].uqty,
  570. :arg_s_rqbuymxmx_pqty[i].unit,
  571. :arg_s_rqbuymxmx_pqty[i].rate,
  572. :arg_s_rqbuymxmx_pqty[i].qty,
  573. :arg_s_rqbuymxmx_pqty[i].mxdscrp,
  574. :arg_s_rqbuymxmx_pqty[i].ifrel,
  575. :arg_s_rqbuymxmx_pqty[i].ordercode,
  576. :arg_s_rqbuymxmx_pqty[i].rqdate,
  577. :arg_s_rqbuymxmx_pqty[i].wrkGrpid,
  578. :arg_s_rqbuymxmx_pqty[i].relprintid,
  579. :arg_s_rqbuymxmx_pqty[i].storageid,
  580. :arg_s_rqbuymxmx_pqty[i].sptid,
  581. :ls_ordercodestr,
  582. :ls_relcodestr,
  583. :arg_s_rqbuymxmx_pqty[i].plancode,
  584. :arg_s_rqbuymxmx_pqty[i].relpid);
  585. IF sqlca.SQLCode <> 0 THEN
  586. rslt = 0
  587. arg_msg = "插入汇总内容操作失败"+"~n"+sqlca.SQLErrText
  588. GOTO ext
  589. END IF
  590. NEXT
  591. uo_requestbuyid = ll_requestbuyid
  592. IF uof_update_buy_flag(arg_rqbuy.scid,uo_requestbuyid,arg_msg,False) = 0 THEN
  593. rslt = 0
  594. GOTO ext
  595. END IF
  596. ext:
  597. IF rslt = 0 THEN
  598. ROLLBACK;
  599. ELSEIF arg_ifcommit And rslt = 1 THEN
  600. COMMIT;
  601. END IF
  602. RETURN rslt
  603. end function
  604. public function integer finishorder (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  605. long cnt
  606. Int li_flag,li_billtype
  607. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  608. rslt = 0
  609. GOTO ext
  610. END IF
  611. IF li_flag <> 1 THEN
  612. rslt = 0
  613. arg_msg = "单据只有在进行状态才可以执行完成,请核对"
  614. GOTO ext
  615. END IF
  616. //检查是否有未审核采购订单,有则不能手动完成
  617. SELECT count(*)
  618. INTO :cnt
  619. FROM u_buyTaskMx INNER JOIN
  620. u_buyTask ON u_buyTaskMx.scid = u_buyTask.scid
  621. AND u_buyTaskMx.taskid = u_buyTask.taskid
  622. WHERE u_buyTask.scid = :arg_scid
  623. AND u_buyTaskMx.requestbuyid = :arg_requestbuyid
  624. And ( u_buyTask.status = 0 Or u_buyTask.status = 4)
  625. and (u_buytask.billtype = :li_billtype);
  626. IF sqlca.SQLCode <> 0 THEN
  627. rslt = 0
  628. arg_msg = "查询是否有未终审采购订单操作失败"+"~n"+sqlca.SQLErrText
  629. GOTO ext
  630. END IF
  631. IF cnt > 0 THEN
  632. rslt = 0
  633. arg_msg = "当前申购单明细有未终审采购订单,不能执行手动完成"
  634. GOTO ext
  635. END IF
  636. UPDATE u_requestbuy
  637. SET flag = 6,
  638. accomplishdate = getdate(),
  639. finishemp = :arg_opemp
  640. WHERE requestbuyid = :arg_requestbuyid
  641. And scid = :arg_scid;
  642. IF sqlca.SQLCode <> 0 THEN
  643. rslt = 0
  644. arg_msg = "因网络或其它原因导致完成单据操作失败"+"~n"+sqlca.SQLErrText
  645. GOTO ext
  646. END IF
  647. ext:
  648. IF rslt = 0 THEN
  649. ROLLBACK;
  650. ELSEIF arg_ifcommit And rslt = 1 THEN
  651. COMMIT;
  652. END IF
  653. RETURN rslt
  654. end function
  655. public function integer cfinishorder (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  656. Int li_flag,li_billtype
  657. DateTime null_dt
  658. SetNull(null_dt)
  659. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  660. rslt = 0
  661. GOTO ext
  662. END IF
  663. IF li_flag <> 6 THEN
  664. rslt = 0
  665. arg_msg = "单据只有在手动完成状态下才可以执行取消手动完成,请核对"
  666. GOTO ext
  667. END IF
  668. UPDATE u_requestbuy
  669. SET flag = 1,
  670. accomplishdate = :null_dt,
  671. finishemp = ''
  672. WHERE requestbuyid = :arg_requestbuyid
  673. AND scid = :arg_scid;
  674. IF sqlca.SQLCode <> 0 THEN
  675. rslt = 0
  676. arg_msg = "因网络或其它原因导致取消手动完成单据操作失败"+"~n"+sqlca.SQLErrText
  677. GOTO ext
  678. END IF
  679. ext:
  680. IF rslt = 0 THEN
  681. ROLLBACK;
  682. ELSEIF arg_ifcommit AND rslt = 1 THEN
  683. COMMIT;
  684. END IF
  685. RETURN rslt
  686. end function
  687. public function integer add_dscrp (long arg_scid, long arg_requestbuyid, string arg_newdescppart, ref string arg_msg);
  688. Int rslt = 1
  689. Int li_flag,li_billtype
  690. IF arg_newdescppart = '' THEN
  691. rslt = 0
  692. arG_MSG = "要添加内容为空,操作取消"
  693. GOTO ext
  694. END IF
  695. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  696. rslt = 0
  697. GOTO ext
  698. END IF
  699. IF li_flag = 0 THEN
  700. rslt = 0
  701. arG_MSG = "待审核状态下不可用"
  702. GOTO ext
  703. END IF
  704. UPDATE u_requestbuy
  705. SET DSCRP = DSCRP+' '+:arg_newdescppart
  706. WHERE u_requestbuy.requestbuyid = :arg_requestbuyid
  707. AND u_requestbuy.scid = :arg_scid;
  708. IF SQLCA.SQLCode <> 0 THEN
  709. rslt = 0
  710. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  711. GOTO ext
  712. END IF
  713. ext:
  714. IF rslt = 1 THEN
  715. COMMIT;
  716. ELSE
  717. ROLLBACK;
  718. END IF
  719. Return (rslt)
  720. end function
  721. public function integer tmpstoporder (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  722. Int li_flag,li_billtype
  723. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  724. rslt = 0
  725. GOTO ext
  726. END IF
  727. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  728. rslt = 0
  729. GOTO ext
  730. END IF
  731. IF li_flag <> 1 AND li_flag <> 2 THEN
  732. rslt = 0
  733. arg_msg = "单据只有在进行,暂停状态才可以执行暂停/取消暂停操作"
  734. GOTO ext
  735. END IF
  736. IF li_flag = 1 THEN
  737. UPDATE u_requestbuy
  738. SET flag = 2,
  739. stopemp = :arg_opemp
  740. WHERE requestbuyid = :arg_requestbuyid
  741. AND scid = :arg_scid;
  742. IF sqlca.SQLCode <> 0 THEN
  743. rslt = 0
  744. arg_msg = "因网络或其它原因导致暂停计划操作失败"+"~n"+sqlca.SQLErrText
  745. GOTO ext
  746. END IF
  747. ELSE
  748. UPDATE u_requestbuy
  749. SET flag = 1,
  750. stopemp = ''
  751. WHERE requestbuyid = :arg_requestbuyid
  752. AND scid = :arg_scid ;
  753. IF sqlca.SQLCode <> 0 THEN
  754. rslt = 0
  755. arg_msg = "因网络或其它原因导致取消暂停计划操作失败"+"~n"+sqlca.SQLErrText
  756. GOTO ext
  757. END IF
  758. END IF
  759. ext:
  760. IF rslt = 0 THEN
  761. ROLLBACK;
  762. ELSEIF arg_ifcommit AND rslt = 1 THEN
  763. COMMIT;
  764. END IF
  765. Return (rslt)
  766. end function
  767. public function integer p_getifauto (long arg_scid, long arg_requestbuyid, ref integer arg_ifauto, ref string arg_msg);Int rslt = 1
  768. SELECT ifauto
  769. INTO :arg_ifauto
  770. FROM u_requestbuy
  771. WHERE requestbuyid = :arg_requestbuyid
  772. AND scid = :arg_scid;
  773. IF sqlca.SQLCode <> 0 THEN
  774. ARG_MSG = '查询单据建立标记失败,'+sqlca.SQLErrText
  775. rslt = 0
  776. GOTO ext
  777. END IF
  778. ext:
  779. RETURN rslt
  780. end function
  781. public function integer del (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  782. Int li_flag,li_ifauto,li_billtype
  783. Long ll_orderid_arr[]
  784. Long cnt,ll_i
  785. cnt = 1
  786. IF arg_requestbuyid <= 0 THEN
  787. rslt = 0
  788. arg_msg = '错误单据唯一码'
  789. GOTO ext
  790. END IF
  791. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  792. rslt = 0
  793. GOTO ext
  794. END IF
  795. IF li_flag <> 0 THEN
  796. rslt = 0
  797. arg_msg = '单据不是在待一审状态,不可以删除'
  798. GOTO ext
  799. END IF
  800. IF arg_ifcheck_auto = 1 THEN
  801. IF p_getifauto(arg_scid,arg_requestbuyid,li_ifauto,arg_msg) = 0 THEN
  802. rslt = 0
  803. GOTO ext
  804. END IF
  805. IF li_ifauto = 1 THEN
  806. rslt = 0
  807. arg_msg = '单据为动建立的单据,不可以修改'
  808. GOTO ext
  809. END IF
  810. END IF
  811. IF uof_update_buy_flag(arg_scid,arg_requestbuyid,arg_msg,False) = 0 THEN
  812. rslt = 0
  813. GOTO ext
  814. END IF
  815. //DECLARE cur_mx CURSOR FOR
  816. // SELECT u_requestbuymxmx.orderid
  817. // FROM u_requestbuymxmx
  818. // WHERE u_requestbuymxmx.scid = :arg_scid
  819. // AND u_requestbuymxmx.requestbuyid = :arg_requestbuyid
  820. // And u_requestbuymxmx.orderid > 0;
  821. //
  822. //OPEN cur_mx;
  823. //
  824. //FETCH cur_mx Into :ll_orderid_arr[cnt];
  825. //
  826. //DO WHILE sqlca.SQLCode = 0
  827. // cnt++
  828. // FETCH cur_mx Into :ll_orderid_arr[cnt];
  829. //LOOP
  830. //
  831. //CLOSE cur_mx;
  832. //
  833. //cnt = cnt - 1
  834. DELETE FROM u_requestbuymxmx
  835. WHERE requestbuyid = :arg_requestbuyid
  836. And scid = :arg_scid;
  837. IF sqlca.SQLCode <> 0 THEN
  838. rslt = 0
  839. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  840. GOTO ext
  841. END IF
  842. DELETE FROM u_requestbuymx
  843. WHERE requestbuyid = :arg_requestbuyid
  844. And scid = :arg_scid;
  845. IF sqlca.SQLCode <> 0 THEN
  846. rslt = 0
  847. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  848. GOTO ext
  849. END IF
  850. DELETE FROM u_requestbuy
  851. WHERE requestbuyid = :arg_requestbuyid
  852. AND scid = :arg_scid
  853. And flag = 0;
  854. IF sqlca.SQLCode <> 0 THEN
  855. rslt = 0
  856. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  857. GOTO ext
  858. END IF
  859. //FOR ll_i = 1 To cnt
  860. // UPDATE u_order_ml
  861. // SET u_Order_ml.buy_flag = isnull(uv_order_request_buy_flag.flag, 0)
  862. // FROM u_Order_ml LEFT OUTER JOIN
  863. // uv_order_request_buy_flag ON
  864. // u_Order_ml.scid = uv_order_request_buy_flag.scid AND
  865. // u_Order_ml.OrderID = uv_order_request_buy_flag.OrderID
  866. // WHERE u_order_ml.scid = :arg_scid
  867. // And u_order_ml.orderid = :ll_orderid_arr[ll_i] ;
  868. // IF sqlca.SQLCode <> 0 THEN
  869. // rslt = 0
  870. // arg_msg = '更新相关生产计划申购单状态失败,'+sqlca.SQLErrText
  871. // GOTO ext
  872. // END IF
  873. //NEXT
  874. ext:
  875. IF rslt = 0 THEN
  876. ROLLBACK;
  877. ELSEIF rslt = 1 And arg_ifcommit THEN
  878. COMMIT;
  879. END IF
  880. RETURN rslt
  881. end function
  882. public function integer tryfinish (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit);
  883. Int rslt = 1,cnt = 0
  884. Int li_flag,li_billtype
  885. DateTime null_dt
  886. SetNull(null_dt)
  887. IF arg_requestbuyid <= 0 THEN
  888. rslt = 0
  889. arg_msg = '尝试完成申购单失败>错误申购单唯一码'
  890. GOTO ext
  891. END IF
  892. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  893. rslt = 0
  894. GOTO ext
  895. END IF
  896. IF li_flag <> 1 AND li_flag <> 5 THEN
  897. rslt = 0
  898. IF li_flag <> 1 THEN
  899. arg_msg = "申购单只有在进行状态下才可以执行设完成状态"
  900. ELSEIF li_flag <> 5 THEN
  901. arg_msg = "申购只有在完成状态下才可以执行撤消完成状态"
  902. END IF
  903. GOTO ext
  904. END IF
  905. Decimal ls_zerook
  906. Boolean if_finish
  907. if_finish = TRUE
  908. DECLARE zero_cur CURSOR FOR
  909. SELECT u_requestbuymx.uqty - u_requestbuymx.consignedqty - u_requestbuymx.stopqty
  910. FROM u_requestbuymx
  911. WHERE ( u_requestbuymx.requestbuyid = :arg_requestbuyid )
  912. And ( u_requestbuymx.scid = :arg_scid )
  913. and ( u_requestbuymx.stopflag = 0);
  914. OPEN zero_cur;
  915. FETCH zero_cur INTO :ls_zerook;
  916. DO WHILE sqlca.SQLCode = 0
  917. IF if_finish THEN
  918. IF ls_zerook > 0 THEN if_finish = FALSE
  919. END IF
  920. FETCH zero_cur INTO :ls_zerook;
  921. LOOP
  922. CLOSE zero_cur;
  923. IF li_flag = 1 AND if_finish THEN
  924. UPDATE u_requestbuy
  925. SET flag = 5,
  926. accomplishdate = getdate(),
  927. finishemp = :publ_operator
  928. WHERE ( u_requestbuy.requestbuyid = :arg_requestbuyid )
  929. AND u_requestbuy.scid = :arg_scid;
  930. IF sqlca.SQLCode <> 0 THEN
  931. rslt = 0
  932. arg_msg = "因网络或其他原因导致申购完成状态设置操作失败"+"~n"+sqlca.SQLErrText
  933. GOTO ext
  934. END IF
  935. END IF
  936. IF li_flag = 5 AND NOT if_finish THEN
  937. UPDATE u_requestbuy
  938. SET flag = 1,
  939. accomplishdate = :null_dt,
  940. finishemp = ''
  941. WHERE ( u_requestbuy.requestbuyid = :arg_requestbuyid )
  942. AND u_requestbuy.scid = :arg_scid;
  943. IF sqlca.SQLCode <> 0 THEN
  944. rslt = 0
  945. arg_msg = "因网络或其他原因导致申购单撤消完成状态设置操作失败"+"~n"+sqlca.SQLErrText
  946. GOTO ext
  947. END IF
  948. END IF
  949. ext:
  950. IF rslt = 0 THEN
  951. ROLLBACK;
  952. ELSEIF rslt = 1 AND arg_ifcommit THEN
  953. COMMIT;
  954. END IF
  955. Return (rslt)
  956. end function
  957. public function integer audit (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  958. Int li_flag,li_billtype
  959. String ls_requestbuycode,ls_relcode,ls_dscrp
  960. IF uo_option_if_oa_requestbuy_dept = -1000 THEN
  961. rslt = 0
  962. arg_msg = '选项:[425]非生产类物料申购单使用OA审批流程,读取初始默认值失败,操作取消!'
  963. GOTO ext
  964. END IF
  965. IF uo_option_request_dept_secaudit = -1000 THEN
  966. rslt = 0
  967. arg_msg = '选项:[426]非生产类物料申购单使用二级审核,读取初始默认值失败,操作取消!'
  968. GOTO ext
  969. END IF
  970. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  971. rslt = 0
  972. GOTO ext
  973. END IF
  974. IF arg_requestbuyid <= 0 THEN
  975. rslt = 0
  976. arg_msg = '错误单据唯一码'
  977. GOTO ext
  978. END IF
  979. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  980. rslt = 0
  981. GOTO ext
  982. END IF
  983. IF li_flag <> 0 THEN
  984. rslt = 0
  985. arg_msg = '单据不是在待一审状态,不可以再审'
  986. GOTO ext
  987. END IF
  988. SELECT requestbuycode,relcode,dscrp
  989. INTO :ls_requestbuycode,:ls_relcode,:ls_dscrp
  990. FROM u_requestbuy
  991. WHERE requestbuyid = :arg_requestbuyid
  992. And scid = :arg_scid;
  993. IF sqlca.SQLCode <> 0 THEN
  994. rslt = 0
  995. arg_msg = '查询单据信息失败,'+sqlca.SQLErrText
  996. GOTO ext
  997. END IF
  998. //更新审核标记
  999. UPDATE u_requestbuy
  1000. SET auditingrep = :arg_opemp,
  1001. auditingdate = getdate(),
  1002. flag = 4
  1003. WHERE requestbuyid = :arg_requestbuyid
  1004. AND scid = :arg_scid
  1005. And flag = 0;
  1006. IF sqlca.SQLCode <> 0 THEN
  1007. rslt = 0
  1008. arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  1009. GOTO ext
  1010. END IF
  1011. //非生产类物料申购单使用OA
  1012. IF uo_option_if_oa_requestbuy_dept = 1 And uo_option_request_dept_secaudit = 1 and li_billtype = 2 THEN
  1013. IF f_oa(sqlca,False,arg_msg,4174,arg_scid,arg_requestbuyid,ls_requestbuycode,ls_relcode,ls_dscrp) = 0 THEN
  1014. rslt = 0
  1015. GOTO ext
  1016. END IF
  1017. END IF
  1018. ext:
  1019. IF rslt = 0 THEN
  1020. ROLLBACK;
  1021. ELSEIF rslt = 1 And arg_ifcommit THEN
  1022. COMMIT;
  1023. END IF
  1024. RETURN rslt
  1025. end function
  1026. public function integer audit_2 (long arg_scid, long arg_requestbuyid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1027. Int li_flag,li_billtype
  1028. DateTime ldt_requestbuydate, ldt_opdate
  1029. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  1030. rslt = 0
  1031. GOTO ext
  1032. END IF
  1033. uo_order_ml uo_order
  1034. uo_order = Create uo_order_ml
  1035. uo_saletask uo_task
  1036. uo_task = Create uo_saletask
  1037. uo_task.commit_transaction = sqlca
  1038. IF arg_requestbuyid <= 0 THEN
  1039. rslt = 0
  1040. arg_msg = '错误单据唯一码'
  1041. GOTO ext
  1042. END IF
  1043. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  1044. rslt = 0
  1045. GOTO ext
  1046. END IF
  1047. IF li_flag <> 4 THEN
  1048. rslt = 0
  1049. arg_msg = '单据不是在一审状态,不可以再二审'
  1050. GOTO ext
  1051. END IF
  1052. SELECT requestbuydate, opdate
  1053. INTO :ldt_requestbuydate, :ldt_opdate
  1054. FROM u_requestbuy
  1055. WHERE requestbuyid = :arg_requestbuyid
  1056. And scid = :arg_scid;
  1057. IF sqlca.SQLCode <> 0 THEN
  1058. arg_msg = '查询单据日期标记失败,'+sqlca.SQLErrText
  1059. rslt = 0
  1060. GOTO ext
  1061. END IF
  1062. ldt_opdate = DateTime(Date(ldt_opdate))
  1063. s_requestbuymx s_rqbuy_mx[],s_rqbuy_mxmx[]
  1064. Long ll_arr_cnt,ll_i,ll_arr_cnt_mx
  1065. Long ll_scid
  1066. IF getinfo(arg_scid,arg_requestbuyid,s_rqbuy_mx,ll_arr_cnt,s_rqbuy_mxmx,ll_arr_cnt_mx,arg_msg) = 0 THEN
  1067. rslt = 0
  1068. GOTO ext
  1069. END IF
  1070. FOR ll_i = 1 To ll_arr_cnt
  1071. IF s_rqbuy_mx[ll_i].rqdate < ldt_opdate THEN
  1072. arg_msg = '汇总行:'+String(ll_i)+',需求日期早于单据建立日期'
  1073. rslt = 0
  1074. GOTO ext
  1075. END IF
  1076. NEXT
  1077. //增加计划已订货数
  1078. FOR ll_i = 1 To ll_arr_cnt_mx
  1079. IF s_rqbuy_mxmx[ll_i].orderid > 0 THEN
  1080. IF li_billtype = 0 THEN
  1081. IF uo_order.f_add_rqbuyqty(arg_scid,s_rqbuy_mxmx[ll_i].orderid,&
  1082. s_rqbuy_mxmx[ll_i].wrkGrpid,&
  1083. 2,&
  1084. s_rqbuy_mxmx[ll_i].mtrlid,&
  1085. s_rqbuy_mxmx[ll_i].mtrlcode,&
  1086. s_rqbuy_mxmx[ll_i].status,&
  1087. s_rqbuy_mxmx[ll_i].woodcode,&
  1088. s_rqbuy_mxmx[ll_i].pcode,&
  1089. s_rqbuy_mxmx[ll_i].qty,&
  1090. arg_msg,False) = 0 THEN
  1091. rslt = 0
  1092. GOTO ext
  1093. END IF
  1094. ELSE
  1095. SELECT scid INTO :ll_scid
  1096. FROM u_saletask
  1097. Where taskcode = :s_rqbuy_mxmx[ll_i].ordercode;
  1098. IF sqlca.SQLCode <> 0 THEN
  1099. rslt = 0
  1100. arg_msg = '查询相关销售订单分部失败,'+sqlca.SQLErrText
  1101. GOTO ext
  1102. END IF
  1103. IF uo_task.updatebqty(ll_scid,s_rqbuy_mxmx[ll_i].orderid,&
  1104. s_rqbuy_mxmx[ll_i].relprintid,&
  1105. s_rqbuy_mxmx[ll_i].relpid,&
  1106. s_rqbuy_mxmx[ll_i].qty,&
  1107. arg_msg,False) = 0 THEN
  1108. rslt = 0
  1109. GOTO ext
  1110. END IF
  1111. END IF
  1112. END IF
  1113. NEXT
  1114. //更新审核标记
  1115. UPDATE u_requestbuy
  1116. SET secauditingrep = :arg_opemp,
  1117. secauditingdate = getdate(),
  1118. flag = 1
  1119. WHERE requestbuyid = :arg_requestbuyid
  1120. AND scid = :arg_scid
  1121. And flag = 4;
  1122. IF sqlca.SQLCode <> 0 THEN
  1123. rslt = 0
  1124. arg_msg = "因网络或其它原因导致单据二审操作失败"+"~n"+sqlca.SQLErrText
  1125. GOTO ext
  1126. END IF
  1127. IF uof_update_buy_flag(arg_scid,arg_requestbuyid,arg_msg,False) = 0 THEN
  1128. rslt = 0
  1129. GOTO ext
  1130. END IF
  1131. ext:
  1132. IF rslt = 0 THEN
  1133. ROLLBACK;
  1134. ELSEIF rslt = 1 And arg_ifcommit THEN
  1135. COMMIT;
  1136. END IF
  1137. Destroy uo_order
  1138. RETURN rslt
  1139. end function
  1140. public function integer caudit (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1141. Int li_flag,li_ifauto,li_billtype
  1142. Long cnt
  1143. DateTime null_dt
  1144. IF uo_option_if_oa_requestbuy_dept = -1000 THEN
  1145. rslt = 0
  1146. arg_msg = '选项:[425]非生产类物料申购单使用OA审批流程,读取初始默认值失败,操作取消!'
  1147. GOTO ext
  1148. END IF
  1149. IF uo_option_request_dept_secaudit = -1000 THEN
  1150. rslt = 0
  1151. arg_msg = '选项:[426]非生产类物料申购单使用二级审核,读取初始默认值失败,操作取消!'
  1152. GOTO ext
  1153. END IF
  1154. IF uo_option_if_oa_requestbuy_dept = 1 And uo_option_request_dept_secaudit = 1 THEN
  1155. IF f_check_if_oaflow_caudit(arg_scid,arg_requestbuyid,4174,ARG_MSG ) = 0 THEN
  1156. rslt = 0
  1157. GOTO ext
  1158. END IF
  1159. END IF
  1160. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  1161. rslt = 0
  1162. GOTO ext
  1163. END IF
  1164. SetNull(null_dt)
  1165. IF arg_requestbuyid <= 0 THEN
  1166. rslt = 0
  1167. ARG_MSG = '错误单据唯一码'
  1168. GOTO ext
  1169. END IF
  1170. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,ARG_MSG) = 0 THEN
  1171. rslt = 0
  1172. GOTO ext
  1173. END IF
  1174. IF li_flag <> 4 THEN
  1175. rslt = 0
  1176. ARG_MSG = '单据不是在初审状态,不可以撤审'
  1177. GOTO ext
  1178. END IF
  1179. IF arg_ifcheck_auto = 1 THEN
  1180. IF p_getifauto(arg_scid,arg_requestbuyid,li_ifauto,ARG_MSG) = 0 THEN
  1181. rslt = 0
  1182. GOTO ext
  1183. END IF
  1184. IF li_ifauto = 1 THEN
  1185. rslt = 0
  1186. ARG_MSG = '单据为动建立的单据,不可以撤审'
  1187. GOTO ext
  1188. END IF
  1189. END IF
  1190. cnt = 0
  1191. SELECT count(*) INTO :cnt
  1192. FROM u_buytaskmx
  1193. WHERE scid = :arg_scid
  1194. AND requestbuyid = :arg_requestbuyid;
  1195. IF sqlca.SQLCode <> 0 THEN
  1196. ARG_MSG = '查询申购单是否已开订单失败,'+sqlca.SQLErrText
  1197. rslt = 0
  1198. GOTO ext
  1199. END IF
  1200. IF cnt > 0 THEN
  1201. ARG_MSG = '申购单已开订单,不能撤审'
  1202. rslt = 0
  1203. GOTO ext
  1204. END IF
  1205. //更新审核标记
  1206. UPDATE u_requestbuy
  1207. SET auditingrep = '',
  1208. auditingdate = :null_dt,
  1209. flag = 0
  1210. WHERE requestbuyid = :arg_requestbuyid
  1211. AND scid = :arg_scid
  1212. AND flag = 4;
  1213. IF sqlca.SQLCode <> 0 THEN
  1214. rslt = 0
  1215. ARG_MSG = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText
  1216. GOTO ext
  1217. END IF
  1218. ext:
  1219. IF rslt = 0 THEN
  1220. ROLLBACK;
  1221. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1222. COMMIT;
  1223. END IF
  1224. RETURN rslt
  1225. end function
  1226. public function integer p_getflag (long arg_scid, long arg_requestbuyid, ref integer arg_flag, ref integer arg_billtype, ref string arg_msg);Int rslt = 1
  1227. SELECT flag,billtype
  1228. INTO :arg_flag,:arg_billtype
  1229. FROM u_requestbuy
  1230. WHERE requestbuyid = :arg_requestbuyid
  1231. AND scid = :arg_scid;
  1232. IF sqlca.SQLCode <> 0 THEN
  1233. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  1234. rslt = 0
  1235. GOTO ext
  1236. END IF
  1237. ext:
  1238. RETURN rslt
  1239. end function
  1240. public function integer addmxcmpl (long arg_scid, long arg_requestbuyid, long arg_printid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1241. Dec ld_uqty,ld_consignedqty
  1242. String ls_mtrlname,ls_mtrlcode
  1243. Int li_flag,li_billtype
  1244. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  1245. rslt = 0
  1246. GOTO ext
  1247. END IF
  1248. IF li_flag <> 1 AND li_flag <> 5 THEN
  1249. rslt = 0
  1250. arg_msg = "申购单只有在进行或完成状态下才可以执行操作"
  1251. GOTO ext
  1252. END IF
  1253. IF arg_addqty = 0 THEN
  1254. arg_msg = '没有完成数量'
  1255. rslt = 0
  1256. GOTO ext
  1257. END IF
  1258. SELECT mtrlname,mtrlcode INTO :ls_mtrlname,:ls_mtrlcode
  1259. FROM u_mtrldef,u_requestbuymx
  1260. WHERE u_requestbuymx.printid = :arg_printid
  1261. AND u_requestbuymx.requestbuyid = :arg_requestbuyid
  1262. AND u_requestbuymx.scid = :arg_scid
  1263. AND u_mtrldef.mtrlid = u_requestbuymx.mtrlid;
  1264. IF sqlca.SQLCode <> 0 THEN
  1265. rslt = 0
  1266. arg_msg = "因网络或错误产品唯一码导致查询产品操作失败"
  1267. GOTO ext
  1268. END IF
  1269. Long ll_mtrlid
  1270. //检查是否完成
  1271. SELECT uqty,consignedqty,mtrlid INTO :ld_uqty,:ld_consignedqty,:ll_mtrlid
  1272. FROM u_requestbuymx
  1273. WHERE ( printid = :arg_printid )
  1274. AND ( requestbuyid = :arg_requestbuyid )
  1275. And ( scid = :arg_scid );
  1276. IF sqlca.SQLCode <> 0 THEN
  1277. rslt = 0
  1278. arg_msg = "因网络或错误查询产品唯一码或计划计划数和完成数量操作失败"
  1279. GOTO ext
  1280. END IF
  1281. Decimal ld_uprate,ld_upqty
  1282. SELECT upbuyrate , upbuyqty
  1283. INTO :ld_uprate,:ld_upqty
  1284. FROM u_mtrldef
  1285. Where mtrlid = :ll_mtrlid;
  1286. IF sqlca.SQLCode <> 0 THEN
  1287. arg_msg = '查询物料:'+Trim(ls_mtrlcode)+'超收货比例失败,'+sqlca.SQLErrText
  1288. rslt = 0
  1289. GOTO ext
  1290. END IF
  1291. IF NOT f_power_ind(1405,sys_msg_pow) OR sys_power_issuper THEN
  1292. IF ld_uqty * (1 + ld_uprate) + ld_upqty < arg_addqty + ld_consignedqty THEN
  1293. rslt = 0
  1294. arg_msg = '该申购单明细产品:'+ls_mtrlname+'未完成数量:'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',允许订货上限为:'+String(ld_uqty * (1 + ld_uprate) + ld_upqty - ld_consignedqty,'#,##0.00##')+',少于本次完成数量:'+String(arg_addqty,'#,##0.00##')
  1295. GOTO ext
  1296. END IF
  1297. ELSE
  1298. IF ld_uqty < arg_addqty + ld_consignedqty THEN
  1299. rslt = 0
  1300. arg_msg = '该申购单明细产品:'+ls_mtrlname+'未完成数量:'+String(ld_uqty - ld_consignedqty,'#,##0.00##' )+',少于本次完成数量:'+String(arg_addqty,'#,##0.00##')
  1301. GOTO ext
  1302. END IF
  1303. END IF
  1304. UPDATE u_requestbuymx
  1305. SET consignedqty = consignedqty + :arg_addqty
  1306. WHERE ( printid = :arg_printid )
  1307. AND ( requestbuyid = :arg_requestbuyid )
  1308. And ( scid = :arg_scid );
  1309. IF sqlca.SQLCode <> 0 THEN
  1310. rslt = 0
  1311. arg_msg = "因网络或错误产品唯一码导致更新申购单完成数量操作失败"+"~n"+sqlca.SQLErrText
  1312. GOTO ext
  1313. END IF
  1314. ext:
  1315. IF rslt = 0 THEN
  1316. ROLLBACK;
  1317. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1318. COMMIT;
  1319. END IF
  1320. Return (rslt)
  1321. end function
  1322. public function integer caudit_2 (long arg_scid, long arg_requestbuyid, integer arg_ifcheck_auto, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1323. Int li_flag,li_ifauto,li_billtype
  1324. DateTime null_dt
  1325. Long cnt
  1326. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  1327. rslt = 0
  1328. GOTO ext
  1329. END IF
  1330. SetNull(null_dt)
  1331. IF uo_option_buytask_spt = -1000 THEN
  1332. arg_msg = '选项:[109]采购订单供应商严格按申购单,读取初始默认值失败,操作取消!'
  1333. rslt = 0
  1334. GOTO ext
  1335. END IF
  1336. IF uo_option_if_oa_requestbuy_dept = -1000 THEN
  1337. rslt = 0
  1338. arg_msg = '选项:[425]非生产类物料申购单使用OA审批流程,读取初始默认值失败,操作取消!'
  1339. GOTO ext
  1340. END IF
  1341. IF uo_option_request_dept_secaudit = -1000 THEN
  1342. rslt = 0
  1343. arg_msg = '选项:[426]非生产类物料申购单使用二级审核,读取初始默认值失败,操作取消!'
  1344. GOTO ext
  1345. END IF
  1346. uo_order_ml uo_order
  1347. uo_order = CREATE uo_order_ml
  1348. uo_saletask uo_task
  1349. uo_task = CREATE uo_saletask
  1350. uo_task.commit_transaction = sqlca
  1351. IF arg_requestbuyid <= 0 THEN
  1352. rslt = 0
  1353. ARG_MSG = '错误单据唯一码'
  1354. GOTO ext
  1355. END IF
  1356. IF uo_option_if_oa_requestbuy_dept = 1 And uo_option_request_dept_secaudit = 1 and audit_buildtype = 0 THEN
  1357. IF f_check_if_oaflow(arg_scid,arg_requestbuyid,4174,ARG_MSG ) = 0 THEN
  1358. rslt = 0
  1359. GOTO ext
  1360. END IF
  1361. END IF
  1362. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,ARG_MSG) = 0 THEN
  1363. rslt = 0
  1364. GOTO ext
  1365. END IF
  1366. IF li_flag <> 1 THEN
  1367. rslt = 0
  1368. ARG_MSG = '单据不是在终审状态,不可以撤审'
  1369. GOTO ext
  1370. END IF
  1371. SELECT count(*)
  1372. INTO :cnt
  1373. FROM u_buytaskmx
  1374. WHERE ( u_buytaskmx.scid = :arg_scid ) AND
  1375. ( u_buytaskmx.requestbuyid = :arg_requestbuyid ) ;
  1376. IF sqlca.SQLCode <> 0 THEN
  1377. rslt = 0
  1378. ARG_MSG = "因网络或其它原因导致查询申购单数量操作失败"+"~n"+sqlca.SQLErrText
  1379. GOTO ext
  1380. END IF
  1381. IF cnt > 0 THEN
  1382. rslt = 0
  1383. ARG_MSG = "申购单已经有相关采购订单,不可以撤消审核"
  1384. GOTO ext
  1385. END IF
  1386. //检查明细是否已有审核内容
  1387. IF uo_option_buytask_spt = 1 THEN
  1388. cnt = 0
  1389. SELECT count(*) INTO :cnt
  1390. FROM u_requestbuymx
  1391. WHERE requestbuyid = :arg_requestbuyid
  1392. AND scid = :arg_scid
  1393. AND flag = 1;
  1394. IF sqlca.SQLCode <> 0 THEN
  1395. rslt = 0
  1396. ARG_MSG = '查询明细是否有已审核内容失败'+sqlca.SQLErrText
  1397. GOTO ext
  1398. END IF
  1399. IF cnt > 0 THEN
  1400. rslt = 0
  1401. ARG_MSG = '申购单存在已审核供应商的明细内容,不可以撤审单据'
  1402. GOTO ext
  1403. END IF
  1404. END IF
  1405. IF arg_ifcheck_auto = 1 THEN
  1406. IF p_getifauto(arg_scid,arg_requestbuyid,li_ifauto,ARG_MSG) = 0 THEN
  1407. rslt = 0
  1408. GOTO ext
  1409. END IF
  1410. IF li_ifauto = 1 THEN
  1411. rslt = 0
  1412. ARG_MSG = '单据为动建立的单据,不可以撤审'
  1413. GOTO ext
  1414. END IF
  1415. END IF
  1416. s_requestbuymx s_rqbuy_mx[],s_rqbuy_mxmx[]
  1417. Long ll_arr_cnt,ll_i,ll_arr_cnt_mx
  1418. long ll_scid
  1419. IF getinfo(arg_scid,arg_requestbuyid,s_rqbuy_mx,ll_arr_cnt,s_rqbuy_mxmx,ll_arr_cnt_mx,ARG_MSG) = 0 THEN
  1420. rslt = 0
  1421. GOTO ext
  1422. END IF
  1423. FOR ll_i = 1 TO ll_arr_cnt_mx
  1424. IF s_rqbuy_mxmx[ll_i].orderid > 0 THEN
  1425. IF li_billtype = 0 THEN
  1426. IF uo_order.f_add_rqbuyqty(arg_scid,s_rqbuy_mxmx[ll_i].orderid,&
  1427. s_rqbuy_mxmx[ll_i].wrkGrpid,&
  1428. 2,&
  1429. s_rqbuy_mxmx[ll_i].mtrlid,&
  1430. s_rqbuy_mxmx[ll_i].mtrlcode,&
  1431. s_rqbuy_mxmx[ll_i].status,&
  1432. s_rqbuy_mxmx[ll_i].woodcode,&
  1433. s_rqbuy_mxmx[ll_i].pcode,&
  1434. 0 - s_rqbuy_mxmx[ll_i].qty,&
  1435. ARG_MSG,FALSE) = 0 THEN
  1436. rslt = 0
  1437. GOTO ext
  1438. END IF
  1439. ELSE
  1440. select scid into :ll_scid
  1441. from u_saletask
  1442. where taskcode = :s_rqbuy_mxmx[ll_i].ordercode;
  1443. if sqlca.sqlcode <> 0 then
  1444. rslt = 0
  1445. arg_msg = '查询相关销售订单分部失败,'+sqlca.sqlerrtext
  1446. goto ext
  1447. end if
  1448. IF uo_task.updatebqty(ll_scid,s_rqbuy_mxmx[ll_i].orderid,&
  1449. s_rqbuy_mxmx[ll_i].relprintid,&
  1450. s_rqbuy_mxmx[ll_i].relpid,&
  1451. 0 - s_rqbuy_mxmx[ll_i].qty,&
  1452. ARG_MSG,FALSE) = 0 THEN
  1453. rslt = 0
  1454. GOTO ext
  1455. END IF
  1456. END IF
  1457. END IF
  1458. NEXT
  1459. //更新审核标记
  1460. UPDATE u_requestbuy
  1461. SET secauditingrep = '',
  1462. secauditingdate = :null_dt,
  1463. flag = 4
  1464. WHERE requestbuyid = :arg_requestbuyid
  1465. AND scid = :arg_scid
  1466. AND flag = 1;
  1467. IF sqlca.SQLCode <> 0 THEN
  1468. rslt = 0
  1469. ARG_MSG = "因网络或其它原因导致单据二级撤审操作失败"+"~n"+sqlca.SQLErrText
  1470. GOTO ext
  1471. END IF
  1472. IF uof_update_buy_flag(arg_scid,arg_requestbuyid,arG_MSG,False) = 0 THEN
  1473. rslt = 0
  1474. GOTO ext
  1475. END IF
  1476. ext:
  1477. IF rslt = 0 THEN
  1478. ROLLBACK;
  1479. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1480. COMMIT;
  1481. END IF
  1482. DESTROY uo_order
  1483. RETURN rslt
  1484. end function
  1485. public function integer audit_mx (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1486. Int li_flag,li_billtype
  1487. Long ll_sptid
  1488. Long ll_flagmx
  1489. IF arg_requestbuyid <= 0 THEN
  1490. rslt = 0
  1491. ARG_MSG = '错误单据唯一码'
  1492. GOTO ext
  1493. END IF
  1494. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,ARG_MSG) = 0 THEN
  1495. rslt = 0
  1496. GOTO ext
  1497. END IF
  1498. IF li_flag <> 1 THEN
  1499. rslt = 0
  1500. ARG_MSG = '单据不是在进行状态,不可以审核明细内容'
  1501. GOTO ext
  1502. END IF
  1503. SELECT sptid,flag INTO :ll_sptid,:ll_flagmx
  1504. FROM u_requestbuymx
  1505. WHERE scid = :arg_scid
  1506. AND requestbuyid = :arg_requestbuyid
  1507. AND printid = :arg_printid ;
  1508. IF sqlca.SQLCode <> 0 THEN
  1509. rslt = 0
  1510. ARG_MSG = '查询明细供应商内容失败'+sqlca.SQLErrText
  1511. GOTO ext
  1512. END IF
  1513. IF ll_flagmx = 1 THEN
  1514. rslt = 0
  1515. ARG_MSG = '只在在待供应商审核的状态下才能执行供应商审核'
  1516. GOTO ext
  1517. END IF
  1518. IF ll_sptid = 0 THEN
  1519. rslt = 0
  1520. ARG_MSG = '没有指定供应商,不能执行明细审核'
  1521. GOTO ext
  1522. END IF
  1523. //更新审核标记
  1524. UPDATE u_requestbuymx
  1525. SET auditrep = :arg_opemp,
  1526. auditdate = getdate(),
  1527. flag = 1
  1528. WHERE requestbuyid = :arg_requestbuyid
  1529. AND scid = :arg_scid
  1530. AND printid = :arg_printid
  1531. AND flag = 0;
  1532. IF sqlca.SQLCode <> 0 THEN
  1533. rslt = 0
  1534. ARG_MSG = "因网络或其它原因导致单据明细审核操作失败"+"~n"+sqlca.SQLErrText
  1535. GOTO ext
  1536. END IF
  1537. ext:
  1538. IF rslt = 0 THEN
  1539. ROLLBACK;
  1540. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1541. COMMIT;
  1542. END IF
  1543. RETURN rslt
  1544. end function
  1545. public function integer caudit_mx (long arg_scid, long arg_requestbuyid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1546. Int li_flag,li_ifauto,li_billtype
  1547. Long cnt
  1548. DateTime null_dt
  1549. SetNull(null_dt)
  1550. IF arg_requestbuyid <= 0 THEN
  1551. rslt = 0
  1552. ARG_MSG = '错误单据唯一码'
  1553. GOTO ext
  1554. END IF
  1555. SELECT flag INTO :li_flag
  1556. FROM u_requestbuymx
  1557. WHERE requestbuyid = :arg_requestbuyid
  1558. AND scid = :arg_scid
  1559. AND printid = :arg_printid;
  1560. IF sqlca.SQLCode <> 0 THEN
  1561. rslt = 0
  1562. ARG_MSG = '查询申购单明细审核状态失败'+sqlca.SQLErrText
  1563. GOTO ext
  1564. END IF
  1565. IF li_flag = 0 THEN
  1566. rslt = 0
  1567. ARG_MSG = '申购单明细只有在已审核状态下才能执行撤审'
  1568. GOTO ext
  1569. END IF
  1570. cnt = 0
  1571. SELECT count(*) INTO :cnt
  1572. FROM u_buytaskmx
  1573. WHERE scid = :arg_scid
  1574. AND requestbuyid = :arg_requestbuyid
  1575. AND rqmxprintid = :arg_printid
  1576. and uqty > rebuyqty;
  1577. IF sqlca.SQLCode <> 0 THEN
  1578. ARG_MSG = '查询申购单明细是否已开订单失败,'+sqlca.SQLErrText
  1579. rslt = 0
  1580. GOTO ext
  1581. END IF
  1582. IF cnt > 0 THEN
  1583. ARG_MSG = '该申购单明细已开订单,不能执行明细撤审'
  1584. rslt = 0
  1585. GOTO ext
  1586. END IF
  1587. //更新审核标记
  1588. UPDATE u_requestbuymx
  1589. SET auditrep = '',
  1590. auditdate = :null_dt,
  1591. flag = 0
  1592. WHERE requestbuyid = :arg_requestbuyid
  1593. AND scid = :arg_scid
  1594. AND printid = :arg_printid
  1595. AND flag = 1;
  1596. IF sqlca.SQLCode <> 0 THEN
  1597. rslt = 0
  1598. ARG_MSG = "因网络或其它原因导致单据明细撤审操作失败"+"~n"+sqlca.SQLErrText
  1599. GOTO ext
  1600. END IF
  1601. ext:
  1602. IF rslt = 0 THEN
  1603. ROLLBACK;
  1604. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1605. COMMIT;
  1606. END IF
  1607. RETURN rslt
  1608. end function
  1609. public function integer getinfo (long arg_scid, long arg_requestbuyid, ref s_requestbuymx arg_ref_rqmx[], ref long arg_arr_cnt, ref s_requestbuymx arg_ref_rqmxmx[], ref long arg_arr_cnt_mx, ref string arg_msg);Int rslt = 1
  1610. Long i = 1,no_mxcheck = 0
  1611. IF arg_requestbuyid <= 0 THEN
  1612. rslt = 0
  1613. arg_msg = '错误单据唯一码'
  1614. GOTO ext
  1615. END IF
  1616. //用游标读取明细
  1617. DECLARE cur_rqbuymx CURSOR FOR
  1618. SELECT u_requestbuymx.orderid,
  1619. u_requestbuymx.mtrlid,
  1620. u_requestbuymx.status,
  1621. u_requestbuymx.woodcode,
  1622. u_requestbuymx.pcode,
  1623. u_requestbuymx.Qty,
  1624. u_mtrldef.mtrlcode,
  1625. u_requestbuymx.wrkGrpid,
  1626. u_requestbuymx.relprintid,
  1627. u_requestbuymx.storageid,
  1628. u_requestbuymx.relpid,
  1629. u_requestbuymx.rqdate
  1630. FROM u_requestbuymx,u_mtrldef
  1631. WHERE u_requestbuymx.requestbuyid = :arg_requestbuyid
  1632. AND u_requestbuymx.scid = :arg_scid
  1633. AND u_requestbuymx.mtrlid = u_mtrldef.mtrlid
  1634. Order By u_requestbuymx.printid;
  1635. OPEN cur_rqbuymx;
  1636. FETCH cur_rqbuymx INTO :arg_ref_rqmx[i].orderid,
  1637. :arg_ref_rqmx[i].mtrlid,
  1638. :arg_ref_rqmx[i].status,:arg_ref_rqmx[i].woodcode,
  1639. :arg_ref_rqmx[i].pcode,:arg_ref_rqmx[i].Qty,
  1640. :arg_ref_rqmx[i].mtrlcode,:arg_ref_rqmx[i].wrkGrpid,
  1641. :arg_ref_rqmx[i].relprintid,:arg_ref_rqmx[i].storageid,
  1642. :arg_ref_rqmx[i].relpid,
  1643. :arg_ref_rqmx[i].rqdate;
  1644. DO WHILE sqlca.SQLCode = 0
  1645. i++
  1646. FETCH cur_rqbuymx INTO :arg_ref_rqmx[i].orderid,
  1647. :arg_ref_rqmx[i].mtrlid,
  1648. :arg_ref_rqmx[i].status,:arg_ref_rqmx[i].woodcode,
  1649. :arg_ref_rqmx[i].pcode,:arg_ref_rqmx[i].Qty,
  1650. :arg_ref_rqmx[i].mtrlcode,:arg_ref_rqmx[i].wrkGrpid,
  1651. :arg_ref_rqmx[i].relprintid,:arg_ref_rqmx[i].storageid,
  1652. :arg_ref_rqmx[i].relpid,
  1653. :arg_ref_rqmx[i].rqdate;
  1654. LOOP
  1655. CLOSE cur_rqbuymx;
  1656. //检验明细是否读入完整
  1657. SELECT count(*) INTO :no_mxcheck
  1658. FROM u_requestbuymx
  1659. WHERE scid = :arg_scid
  1660. And requestbuyid = :arg_requestbuyid;
  1661. IF sqlca.SQLCode <> 0 THEN
  1662. rslt = 0
  1663. arg_msg = "查询操作失败,单据汇总数量"
  1664. GOTO ext
  1665. END IF
  1666. IF i <> (no_mxcheck + 1) THEN
  1667. rslt = 0
  1668. arg_msg = "查询操作失败,单据汇总内容"
  1669. GOTO ext
  1670. END IF
  1671. arg_arr_cnt = i - 1
  1672. Long j
  1673. j = 1
  1674. //用游标读取明细
  1675. DECLARE cur_rqbuymxmx CURSOR FOR
  1676. SELECT u_requestbuymxmx.orderid,
  1677. u_requestbuymxmx.mtrlid,
  1678. u_requestbuymxmx.status,
  1679. u_requestbuymxmx.woodcode,
  1680. u_requestbuymxmx.pcode,
  1681. u_requestbuymxmx.Qty,
  1682. u_mtrldef.mtrlcode,
  1683. u_requestbuymxmx.wrkGrpid,
  1684. u_requestbuymxmx.relprintid,
  1685. u_requestbuymxmx.storageid,
  1686. u_requestbuymxmx.ordercode,
  1687. u_requestbuymxmx.relpid,
  1688. u_requestbuymxmx.price,
  1689. u_requestbuymxmx.mxdscrp2
  1690. FROM u_requestbuymxmx,u_mtrldef
  1691. WHERE u_requestbuymxmx.requestbuyid = :arg_requestbuyid
  1692. AND u_requestbuymxmx.scid = :arg_scid
  1693. AND u_requestbuymxmx.mtrlid = u_mtrldef.mtrlid
  1694. Order By u_requestbuymxmx.printid;
  1695. OPEN cur_rqbuymxmx;
  1696. FETCH cur_rqbuymxmx INTO :arg_ref_rqmxmx[j].orderid,
  1697. :arg_ref_rqmxmx[j].mtrlid,
  1698. :arg_ref_rqmxmx[j].status,:arg_ref_rqmxmx[j].woodcode,
  1699. :arg_ref_rqmxmx[j].pcode,:arg_ref_rqmxmx[j].Qty,
  1700. :arg_ref_rqmxmx[j].mtrlcode,:arg_ref_rqmxmx[j].wrkGrpid,
  1701. :arg_ref_rqmxmx[j].relprintid,:arg_ref_rqmxmx[j].storageid,
  1702. :arg_ref_rqmxmx[j].ordercode,:arg_ref_rqmxmx[j].relpid,
  1703. :arg_ref_rqmxmx[j].price,:arg_ref_rqmxmx[j].mxdscrp2;
  1704. DO WHILE sqlca.SQLCode = 0
  1705. j++
  1706. FETCH cur_rqbuymxmx INTO :arg_ref_rqmxmx[j].orderid,
  1707. :arg_ref_rqmxmx[j].mtrlid,
  1708. :arg_ref_rqmxmx[j].status,:arg_ref_rqmxmx[j].woodcode,
  1709. :arg_ref_rqmxmx[j].pcode,:arg_ref_rqmxmx[j].Qty,
  1710. :arg_ref_rqmxmx[j].mtrlcode,:arg_ref_rqmxmx[j].wrkGrpid,
  1711. :arg_ref_rqmxmx[j].relprintid,:arg_ref_rqmxmx[j].storageid,
  1712. :arg_ref_rqmxmx[j].ordercode,:arg_ref_rqmxmx[j].relpid,
  1713. :arg_ref_rqmxmx[j].price,:arg_ref_rqmxmx[j].mxdscrp2;
  1714. LOOP
  1715. CLOSE cur_rqbuymxmx;
  1716. //检验明细是否读入完整
  1717. SELECT count(*) INTO :no_mxcheck
  1718. FROM u_requestbuymxmx
  1719. WHERE scid = :arg_scid
  1720. And requestbuyid = :arg_requestbuyid;
  1721. IF sqlca.SQLCode <> 0 THEN
  1722. rslt = 0
  1723. arg_msg = "查询操作失败,单据明细数量"
  1724. GOTO ext
  1725. END IF
  1726. IF j <> (no_mxcheck + 1) THEN
  1727. rslt = 0
  1728. arg_msg = "查询操作失败,单据明细内容"
  1729. GOTO ext
  1730. END IF
  1731. arg_arr_cnt_mx = j - 1
  1732. ext:
  1733. RETURN rslt
  1734. end function
  1735. public function integer stopmx (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1736. Int li_stopflag
  1737. String ls_outtype
  1738. DateTime null_dt
  1739. Decimal ld_notconsignedqty
  1740. Int ll_flag,ll_billtype
  1741. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  1742. rslt = 0
  1743. GOTO ext
  1744. END IF
  1745. SetNull(null_dt)
  1746. IF p_getflag(arg_scid,arg_requestbuyid,ll_flag,ll_billtype,arg_msg) = 0 THEN
  1747. rslt = 0
  1748. GOTO ext
  1749. END IF
  1750. IF ll_flag <> 1 THEN
  1751. arg_msg = '申购单只能在进行状态下才能操作'
  1752. rslt = 0
  1753. GOTO ext
  1754. END IF
  1755. SELECT stopflag
  1756. INTO :li_stopflag
  1757. FROM u_requestbuymx
  1758. WHERE scid = :arg_scid
  1759. AND requestbuyid = :arg_requestbuyid
  1760. AND printid = :arg_printid;
  1761. IF sqlca.SQLCode <> 0 THEN
  1762. arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败'
  1763. rslt = 0
  1764. GOTO ext
  1765. END IF
  1766. IF arg_flag = 0 THEN
  1767. IF li_stopflag = 0 THEN
  1768. arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止'
  1769. rslt = 0
  1770. GOTO ext
  1771. END IF
  1772. ELSE
  1773. IF li_stopflag = 1 THEN
  1774. arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止'
  1775. rslt = 0
  1776. GOTO ext
  1777. END IF
  1778. END IF
  1779. IF arg_flag = 1 THEN
  1780. SELECT u_requestbuymx.uQty - u_requestbuymx.consignedqty
  1781. INTO :ld_notconsignedqty
  1782. FROM u_requestbuymx
  1783. WHERE scid = :arg_scid
  1784. AND requestbuyid = :arg_requestbuyid
  1785. AND printid = :arg_printid;
  1786. IF sqlca.SQLCode <> 0 THEN
  1787. arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败'
  1788. rslt = 0
  1789. GOTO ext
  1790. END IF
  1791. IF ld_notconsignedqty <= 0 THEN
  1792. arg_msg = '明细物料'+arg_mtrlcode+'已完成订货,不能中止'
  1793. rslt = 0
  1794. GOTO ext
  1795. END IF
  1796. END IF
  1797. IF arg_flag = 0 THEN
  1798. UPDATE u_requestbuymx
  1799. SET stopflag = 0,
  1800. stopemp = '',
  1801. stopdate = :null_dt,
  1802. stopreason = ''
  1803. WHERE scid = :arg_scid
  1804. AND requestbuyid = :arg_requestbuyid
  1805. AND printid = :arg_printid;
  1806. ELSE
  1807. UPDATE u_requestbuymx
  1808. SET stopflag = 1,
  1809. stopemp = :publ_operator,
  1810. stopdate = getdate(),
  1811. stopreason = :arg_stopreason
  1812. WHERE scid = :arg_scid
  1813. AND requestbuyid = :arg_requestbuyid
  1814. AND printid = :arg_printid;
  1815. END IF
  1816. IF sqlca.SQLCode <> 0 THEN
  1817. arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText
  1818. rslt = 0
  1819. GOTO ext
  1820. END IF
  1821. IF tryfinish(arg_scid,arg_requestbuyid,arg_msg,FALSE) = 0 THEN
  1822. rslt = 0
  1823. GOTO ext
  1824. END IF
  1825. ext:
  1826. IF rslt = 0 THEN
  1827. ROLLBACK;
  1828. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1829. COMMIT;
  1830. END IF
  1831. RETURN rslt
  1832. end function
  1833. public function integer stoporder (long arg_scid, long arg_requestbuyid, string arg_stopreason, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1834. Int li_flag,li_billtype
  1835. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  1836. rslt = 0
  1837. GOTO ext
  1838. END IF
  1839. IF li_flag <> 1 THEN
  1840. rslt = 0
  1841. arg_msg = "单据只有在进行状态才可以执行终止,请核对"
  1842. GOTO ext
  1843. END IF
  1844. arg_stopreason = Trim(arg_stopreason)
  1845. IF arg_stopreason = '' THEN
  1846. rslt = 0
  1847. ARG_MSG = "请输入终止原因"
  1848. GOTO ext
  1849. END IF
  1850. UPDATE u_requestbuy
  1851. SET flag = 3,
  1852. stopemp = :arg_opemp,
  1853. stopreason = :arg_stopreason,
  1854. accomplishdate = getdate(),
  1855. finishemp = :arg_opemp
  1856. WHERE requestbuyid = :arg_requestbuyid
  1857. AND scid = :arg_scid
  1858. AND flag = 1;
  1859. IF sqlca.SQLCode <> 0 THEN
  1860. rslt = 0
  1861. arg_msg = "因网络或其它原因导致终止单据操作失败"+"~n"+sqlca.SQLErrText
  1862. GOTO ext
  1863. ELSE
  1864. IF sqlca.SQLNRows = 0 THEN
  1865. arg_msg = '单据正在终止...'
  1866. rslt = 0
  1867. GOTO ext
  1868. END IF
  1869. END IF
  1870. ext:
  1871. IF rslt = 0 THEN
  1872. ROLLBACK;
  1873. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1874. COMMIT;
  1875. END IF
  1876. RETURN rslt
  1877. end function
  1878. public function integer stopqty (long arg_scid, long arg_requestbuyid, long arg_printid, string arg_mtrlcode, decimal arg_stopqty, string arg_stopreason, ref string arg_msg, boolean arg_commit);
  1879. Int rslt = 1
  1880. Int li_flag, li_billtype
  1881. DateTime null_dt
  1882. Decimal ld_notconsignedqty, lde_stopqty
  1883. DateTime server_datetime
  1884. String ls_stopemp
  1885. decimal ld_not_auditqty
  1886. SELECT Top 1 getdate() Into :server_datetime From u_user Using sqlca;
  1887. IF sqlca.SQLCode <> 0 THEN
  1888. rslt = 0
  1889. arg_msg = "查询操作失败,日期 "
  1890. GOTO ext
  1891. END IF
  1892. IF IsNull(arg_stopqty) THEN arg_stopqty = 0
  1893. IF arg_stopqty < 0 THEN
  1894. arg_msg = '订单终止数不能少于0,请检查'
  1895. rslt = 0
  1896. GOTO ext
  1897. END IF
  1898. IF arg_stopqty = 0 THEN
  1899. SetNull(server_datetime)
  1900. ls_stopemp = ''
  1901. arg_stopreason = ''
  1902. ELSE
  1903. ls_stopemp = publ_operator
  1904. END IF
  1905. SetNull(null_dt)
  1906. IF f_aps_mrp_cklock(arg_scid,arg_msg) = 0 THEN
  1907. rslt = 0
  1908. GOTO ext
  1909. END IF
  1910. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  1911. rslt = 0
  1912. GOTO ext
  1913. END IF
  1914. IF li_flag <> 1 And li_flag <> 5 THEN
  1915. arg_msg = '订单只能在进行状态或自动完成状态才能操作'
  1916. rslt = 0
  1917. GOTO ext
  1918. END IF
  1919. SELECT u_requestbuymx.uQty - u_requestbuymx.consignedqty,
  1920. u_requestbuymx.stopqty,
  1921. isnull(v_noaudit_qty.uqty,0) - isnull(v_noaudit_qty.rebuyqty,0) not_auditqty
  1922. INTO :ld_notconsignedqty,
  1923. :lde_stopqty,
  1924. :ld_not_auditqty
  1925. FROM u_requestbuymx LEFT OUTER JOIN
  1926. (SELECT u_buyTaskMx.requestbuyid, u_buyTaskMx.rqmxprintid,
  1927. u_buyTaskMx.scid, SUM(u_buyTaskMx.Qty) AS qty,
  1928. SUM(CASE WHEN dbo.u_buyTaskMx.unit = u_requestbuymx.unit THEN dbo.u_buyTaskMx.uqty
  1929. ELSE round(dbo.u_buyTaskMx.uqty * dbo.u_buyTaskMx.rate / dbo.u_requestbuymx.rate,
  1930. 5) END) AS uqty,
  1931. SUM(CASE WHEN dbo.u_buyTaskMx.unit = u_requestbuymx.unit THEN dbo.u_buyTaskMx.rebuyqty
  1932. ELSE round(dbo.u_buyTaskMx.rebuyqty * dbo.u_buyTaskMx.rate / dbo.u_requestbuymx.rate,
  1933. 5) END) AS rebuyqty
  1934. FROM u_buyTaskMx INNER JOIN
  1935. u_requestbuymx ON u_buyTaskMx.scid = u_requestbuymx.scid AND
  1936. u_buyTaskMx.requestbuyid = u_requestbuymx.requestbuyid AND
  1937. u_buyTaskMx.rqmxprintid = u_requestbuymx.printid INNER JOIN
  1938. u_buyTask ON u_buyTaskMx.scid = u_buyTask.scid AND
  1939. u_buyTaskMx.TaskID = u_buyTask.TaskID
  1940. WHERE (u_buyTaskMx.iforder = 1) AND (u_buyTaskMx.requestbuyid > 0) AND
  1941. (u_buyTask.Status = 0)
  1942. GROUP BY u_buyTaskMx.requestbuyid, u_buyTaskMx.rqmxprintid,
  1943. u_buyTaskMx.scid) v_noaudit_qty ON
  1944. u_requestbuymx.scid = v_noaudit_qty.scid AND
  1945. u_requestbuymx.requestbuyid = v_noaudit_qty.requestbuyid AND
  1946. u_requestbuymx.printid = v_noaudit_qty.rqmxprintid
  1947. WHERE u_requestbuymx.scid = :arg_scid
  1948. AND u_requestbuymx.requestbuyid = :arg_requestbuyid
  1949. And u_requestbuymx.printid = :arg_printid Using sqlca ;
  1950. IF sqlca.SQLCode <> 0 THEN
  1951. arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败'
  1952. rslt = 0
  1953. GOTO ext
  1954. END IF
  1955. IF arg_stopqty > ld_notconsignedqty - ld_not_auditqty THEN
  1956. arg_msg = '明细物料'+arg_mtrlcode+'可终止数只有:'+String(ld_notconsignedqty - ld_not_auditqty,'#,##0.##########') +'不能终止:'+String(arg_stopqty,'#,##0.##########')
  1957. rslt = 0
  1958. GOTO ext
  1959. END IF
  1960. UPDATE u_requestbuymx
  1961. SET stopqty = :arg_stopqty,
  1962. stopemp = :ls_stopemp,
  1963. stopdate = :server_datetime,
  1964. stopreason = :arg_stopreason
  1965. WHERE scid = :arg_scid
  1966. AND requestbuyid = :arg_requestbuyid
  1967. And printid = :arg_printid Using sqlca ;
  1968. IF sqlca.SQLCode <> 0 THEN
  1969. arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText
  1970. rslt = 0
  1971. GOTO ext
  1972. END IF
  1973. IF tryfinish(arg_scid,arg_requestbuyid,arg_msg,FALSE) = 0 THEN
  1974. rslt = 0
  1975. GOTO ext
  1976. END IF
  1977. ext:
  1978. IF rslt = 0 THEN
  1979. ROLLBACK Using sqlca ;
  1980. ELSEIF rslt = 1 And arg_commit THEN
  1981. COMMIT Using sqlca ;
  1982. END IF
  1983. //Destroy uo_rqbuy
  1984. //Destroy uo_order
  1985. //Destroy ds_tmp_update
  1986. RETURN rslt
  1987. end function
  1988. public function integer uof_cmpl_cf (s_requestbuymx arg_s_rqbuymxmx[], long it_mxbt_mx, ref s_requestbuymx arg_s_rqbuymxmx_pqty[], ref long it_mxbt_mx_p, ref string arg_msg);//arg_s_rqbuymxmx[it_mxbt_mx
  1989. //按需拆分 汇总明细
  1990. Long rslt = 1
  1991. //Long it_mxbt, it_mxbt_mx_tmp //it_mxbt_mx,
  1992. Long i,j
  1993. //Int li_buy_autoday
  1994. //Decimal lde_minbuyqty
  1995. //Boolean lb_hz = False
  1996. //Long ll_days
  1997. Decimal ld_minqty, ld_maxqty, ld_maxdays, ld_mindays, ld_qty
  1998. Int li_ifsendlot, li_buydec
  1999. it_mxbt_mx_p = 0
  2000. //s_requestbuymx arg_s_rqbuymxmx_pqty[]
  2001. //拆分汇总明细
  2002. //====================================================================
  2003. // 修改:只增加注释,没有修改
  2004. // 拆分条件
  2005. // 1.使用送货批量勾上;
  2006. // 2.拆分批量 = 报警上限-报警下限 > 0;
  2007. // 3.拆分天数 = 库存上限使用天数 - 库存下限使用天数 > 0
  2008. //--------------------------------------------------------------------
  2009. // 作者: LHD 日期: 2013年08月29日
  2010. //====================================================================
  2011. FOR i = 1 To it_mxbt_mx
  2012. SELECT ifsendlot,maxqty,minqty,maxdays,mindays,buydec
  2013. INTO :li_ifsendlot,:ld_maxqty,:ld_minqty,:ld_maxdays,:ld_mindays,:li_buydec
  2014. FROM u_mtrldef
  2015. Where mtrlid = :arg_s_rqbuymxmx[i].mtrlid;
  2016. IF sqlca.SQLCode <> 0 THEN
  2017. rslt = 0
  2018. arg_msg = '查询物料是否使用送货批量失败,'+sqlca.SQLErrText
  2019. GOTO ext
  2020. END IF
  2021. IF li_ifsendlot = 0 Or (ld_maxqty - ld_minqty = 0) THEN
  2022. it_mxbt_mx_p++
  2023. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].printid = it_mxbt_mx_p
  2024. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].orderid = arg_s_rqbuymxmx[i].orderid
  2025. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].mtrlid = arg_s_rqbuymxmx[i].mtrlid
  2026. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].status = arg_s_rqbuymxmx[i].status
  2027. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].woodcode = arg_s_rqbuymxmx[i].woodcode
  2028. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].pcode = arg_s_rqbuymxmx[i].pcode
  2029. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].dftsptid = arg_s_rqbuymxmx[i].dftsptid
  2030. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].uqty = arg_s_rqbuymxmx[i].uqty
  2031. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].unit = arg_s_rqbuymxmx[i].unit
  2032. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].rate = arg_s_rqbuymxmx[i].rate
  2033. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].qty = arg_s_rqbuymxmx[i].qty
  2034. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].mxdscrp = arg_s_rqbuymxmx[i].mxdscrp
  2035. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ifrel = arg_s_rqbuymxmx[i].ifrel
  2036. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ordercode = arg_s_rqbuymxmx[i].ordercode
  2037. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].rqdate = arg_s_rqbuymxmx[i].rqdate
  2038. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].wrkGrpid = arg_s_rqbuymxmx[i].wrkGrpid
  2039. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relprintid = arg_s_rqbuymxmx[i].relprintid
  2040. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].storageid = arg_s_rqbuymxmx[i].storageid
  2041. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].sptid = arg_s_rqbuymxmx[i].sptid
  2042. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ordercodestr = arg_s_rqbuymxmx[i].ordercodestr
  2043. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relcodestr = arg_s_rqbuymxmx[i].relcodestr
  2044. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].plancode = arg_s_rqbuymxmx[i].plancode
  2045. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relpid = arg_s_rqbuymxmx[i].relpid
  2046. ELSE
  2047. FOR j = 1 To Ceiling(Truncate(arg_s_rqbuymxmx[i].qty / (ld_maxqty - ld_minqty),10))
  2048. IF j = Ceiling(Truncate(arg_s_rqbuymxmx[i].qty / (ld_maxqty - ld_minqty),10)) THEN
  2049. ld_qty = arg_s_rqbuymxmx[i].qty - (ld_maxqty - ld_minqty) * (j - 1)
  2050. ELSE
  2051. ld_qty = (ld_maxqty - ld_minqty)
  2052. END IF
  2053. it_mxbt_mx_p++
  2054. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].printid = it_mxbt_mx_p
  2055. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].orderid = arg_s_rqbuymxmx[i].orderid
  2056. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].mtrlid = arg_s_rqbuymxmx[i].mtrlid
  2057. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].status = arg_s_rqbuymxmx[i].status
  2058. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].woodcode = arg_s_rqbuymxmx[i].woodcode
  2059. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].pcode = arg_s_rqbuymxmx[i].pcode
  2060. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].dftsptid = arg_s_rqbuymxmx[i].dftsptid
  2061. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].uqty = Round(ld_qty / arg_s_rqbuymxmx[i].rate,li_buydec)
  2062. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].unit = arg_s_rqbuymxmx[i].unit
  2063. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].rate = arg_s_rqbuymxmx[i].rate
  2064. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].qty = ld_qty
  2065. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].mxdscrp = arg_s_rqbuymxmx[i].mxdscrp
  2066. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ifrel = arg_s_rqbuymxmx[i].ifrel
  2067. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ordercode = arg_s_rqbuymxmx[i].ordercode
  2068. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].rqdate = DateTime(RelativeDate(Date(arg_s_rqbuymxmx[i].rqdate),(ld_maxdays - ld_mindays) * (j - 1) ),Time(arg_s_rqbuymxmx[i].rqdate))
  2069. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].wrkGrpid = arg_s_rqbuymxmx[i].wrkGrpid
  2070. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relprintid = arg_s_rqbuymxmx[i].relprintid
  2071. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].storageid = arg_s_rqbuymxmx[i].storageid
  2072. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].sptid = arg_s_rqbuymxmx[i].sptid
  2073. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].ordercodestr = arg_s_rqbuymxmx[i].ordercodestr
  2074. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relcodestr = arg_s_rqbuymxmx[i].relcodestr
  2075. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].plancode = arg_s_rqbuymxmx[i].plancode
  2076. arg_s_rqbuymxmx_pqty[it_mxbt_mx_p].relpid = arg_s_rqbuymxmx[i].relpid
  2077. NEXT
  2078. END IF
  2079. NEXT
  2080. ext:
  2081. RETURN rslt
  2082. end function
  2083. public function integer uof_cmpl_hz (ref s_requestbuymx arg_s_rqbuymx[], boolean arg_ifhz, ref s_requestbuymx arg_s_rqbuymxmx[], ref long it_mxbt_mx, ref string arg_msg);//arg_s_rqbuymxmx[it_mxbt_mx
  2084. //汇总明细
  2085. Long rslt = 1
  2086. Long it_mxbt, it_mxbt_mx_tmp //it_mxbt_mx,
  2087. Long it_mxbt_mx_p
  2088. Long ll_i,ll_j, ll_k, ll_m,ll_n, ll_row
  2089. Int li_buy_autoday, li_rebuytype
  2090. Decimal lde_minbuyqty, lde_total_qty, lde_restqty, lde_restuqty, lde_addqty, lde_adduqty, lde_rebuylot
  2091. Boolean lb_mx_hz = False //明细是否合并
  2092. Boolean lb_hz = False //是否合并
  2093. Boolean lb_NewHzType = False //是否按新的合并补足方式处理
  2094. Decimal lde_PBuyQty //采购批量;按li_rebuytype处理,2-申购批量,4-最少采购量
  2095. Long ll_days
  2096. Decimal ld_minqty, ld_maxqty, ld_maxdays, ld_mindays, lde_bz_qty //补足数量
  2097. Int li_ifsendlot, li_buydec
  2098. Int li_balctype, li_storagetype, li_ifpackpro
  2099. datastore ds_hz
  2100. ds_hz = Create datastore
  2101. ds_hz.DataObject = 'dw_uo_requestbuy_hz_cmpl'
  2102. it_mxbt_mx = 0
  2103. it_mxbt_mx_p = 0
  2104. s_requestbuymx arg_s_hz_tmp[] , arg_s_null[] //, arg_s_rqbuymxmx[],arg_s_rqbuymxmx_pqty[]
  2105. it_mxbt = UpperBound(arg_s_rqbuymx)
  2106. FOR ll_i = 1 To it_mxbt
  2107. //增加一种方式, 考虑仓库是否使用客户库存,且物料资料的<仓库属性>使用0-根据仓库属性, 满足条件的不合并 lhd20140813
  2108. IF arg_ifhz THEN
  2109. IF arg_s_rqbuymx[ll_i].ifrel = 0 THEN
  2110. lb_mx_hz = True
  2111. ELSE
  2112. IF arg_s_rqbuymx[ll_i].storageid = 0 THEN
  2113. li_balctype = 0
  2114. ELSE
  2115. SELECT u_storage.balctype
  2116. INTO :li_balctype
  2117. FROM u_storage
  2118. Where storageid = :arg_s_rqbuymx[ll_i].storageid;
  2119. IF sqlca.SQLCode <> 0 THEN
  2120. rslt = 0
  2121. arg_msg = '查询仓库属性失败,'+sqlca.SQLErrText
  2122. GOTO ext
  2123. END IF
  2124. END IF
  2125. SELECT storagetype, ifpackpro
  2126. INTO :li_storagetype, :li_ifpackpro
  2127. FROM u_mtrldef
  2128. Where mtrlid = :arg_s_rqbuymx[ll_i].mtrlid;
  2129. IF sqlca.SQLCode <> 0 THEN
  2130. rslt = 0
  2131. arg_msg = '查询物料资料库存属性失败,'+sqlca.SQLErrText
  2132. GOTO ext
  2133. END IF
  2134. IF li_balctype = 1 And li_storagetype = 0 and li_ifpackpro <> 0 THEN
  2135. lb_mx_hz = False
  2136. ELSE
  2137. lb_mx_hz = True
  2138. END IF
  2139. END IF
  2140. ELSE
  2141. lb_mx_hz = False
  2142. END IF
  2143. IF lb_mx_hz THEN
  2144. IF arg_s_rqbuymx[ll_i].ifcmpl = 1 THEN CONTINUE //已经处理过的,不再重复
  2145. it_mxbt_mx_tmp = 0
  2146. arg_s_hz_tmp = arg_s_null //当前处理的物料汇总结果
  2147. lde_total_qty = 0
  2148. //重置ds
  2149. ds_hz.Reset()
  2150. //先插入自己一行
  2151. ll_row = ds_hz.InsertRow(0)
  2152. ds_hz.Object.id[ll_row] = ll_i //对应的数组下标
  2153. ds_hz.Object.rqdate[ll_row] = arg_s_rqbuymx[ll_i].rqdate
  2154. lde_total_qty += arg_s_rqbuymx[ll_i].qty //采购总数量
  2155. //找相同的物料, 准备批量处理数据
  2156. IF ll_j < it_mxbt THEN
  2157. FOR ll_j = ll_i + 1 To it_mxbt
  2158. IF arg_s_rqbuymx[ll_j].mtrlid = arg_s_rqbuymx[ll_i].mtrlid And &
  2159. arg_s_rqbuymx[ll_j].status = arg_s_rqbuymx[ll_i].status And &
  2160. arg_s_rqbuymx[ll_j].woodcode = arg_s_rqbuymx[ll_i].woodcode And &
  2161. arg_s_rqbuymx[ll_j].pcode = arg_s_rqbuymx[ll_i].pcode And &
  2162. arg_s_rqbuymx[ll_j].unit = arg_s_rqbuymx[ll_i].unit And &
  2163. arg_s_rqbuymx[ll_j].plancode = arg_s_rqbuymx[ll_i].plancode And &
  2164. arg_s_rqbuymx[ll_j].storageid = arg_s_rqbuymx[ll_i].storageid THEN
  2165. ll_row = ds_hz.InsertRow(0)
  2166. ds_hz.Object.id[ll_row] = ll_j
  2167. ds_hz.Object.rqdate[ll_row] = arg_s_rqbuymx[ll_j].rqdate
  2168. lde_total_qty += arg_s_rqbuymx[ll_j].qty
  2169. END IF
  2170. NEXT
  2171. END IF
  2172. //排序 按时间
  2173. ds_hz.SetSort('rqdate')
  2174. ds_hz.Sort()
  2175. SELECT ifsendlot,maxqty,minqty,maxdays,mindays,buydec,buy_autoday, minbuyqty, rebuytype, rebuylot
  2176. INTO :li_ifsendlot,:ld_maxqty,:ld_minqty,:ld_maxdays,:ld_mindays,:li_buydec, :li_buy_autoday, :lde_minbuyqty, :li_rebuytype,:lde_rebuylot
  2177. FROM u_mtrldef
  2178. Where mtrlid = :arg_s_rqbuymx[ll_i].mtrlid;
  2179. IF sqlca.SQLCode <> 0 THEN
  2180. rslt = 0
  2181. arg_msg = '查询物料是否考虑合并天数失败,'+sqlca.SQLErrText
  2182. GOTO ext
  2183. END IF
  2184. ll_n = 1
  2185. //采购批量
  2186. IF li_rebuytype = 4 THEN
  2187. lde_PBuyQty = lde_minbuyqty
  2188. ELSEIF li_rebuytype = 2 THEN
  2189. lde_PBuyQty = lde_rebuylot
  2190. ELSE
  2191. lde_PBuyQty = lde_minbuyqty //暂时默认考虑最少采购量
  2192. END IF
  2193. If (li_rebuytype = 4 And lde_minbuyqty > 0) Or (li_rebuytype = 2 And lde_rebuylot > 0) THEN //采用新的汇总补足方式
  2194. lb_NewHzType = True
  2195. ELSE
  2196. lb_NewHzType = False
  2197. END IF
  2198. IF Not lb_NewHzType THEN //Not 按倍数补足且批量>0
  2199. //按最少采购量
  2200. //合并
  2201. FOR ll_k = 1 To ds_hz.RowCount()
  2202. ll_j = ds_hz.Object.id[ll_k]
  2203. lb_hz = False
  2204. FOR ll_m = ll_n To UpperBound(arg_s_hz_tmp) //检查物料是否有符号合并条件的
  2205. //20130829 新合并原则
  2206. //1.总数量 < 最少采购量的, 全部合并且按最少采购量补足
  2207. //2.总数量 >= 最少采购量的,只考虑合并天数合并
  2208. IF lde_total_qty < lde_PBuyQty THEN //考虑最少采购量
  2209. lb_hz = True
  2210. ELSE
  2211. //考虑合并天数
  2212. ll_days = DaysAfter(Date(arg_s_hz_tmp[ll_m].rqdate), Date(arg_s_rqbuymx[ll_j].rqdate))
  2213. IF ll_days >= 0 THEN
  2214. IF ll_days <= li_buy_autoday THEN
  2215. lb_hz = True
  2216. ELSE
  2217. lb_hz = False
  2218. END IF
  2219. ELSE
  2220. IF Abs(ll_days) <= li_buy_autoday THEN
  2221. lb_hz = True
  2222. ELSE
  2223. lb_hz = False
  2224. END IF
  2225. END IF
  2226. END IF
  2227. //合并的
  2228. IF lb_hz THEN
  2229. arg_s_hz_tmp[ll_m].qty += arg_s_rqbuymx[ll_j].qty
  2230. arg_s_hz_tmp[ll_m].uqty += arg_s_rqbuymx[ll_j].uqty
  2231. IF Trim(arg_s_rqbuymx[ll_j].ordercode) <> '' THEN
  2232. IF Trim(arg_s_hz_tmp[ll_m].ordercodestr) = '' THEN
  2233. arg_s_hz_tmp[ll_m].ordercodestr = arg_s_rqbuymx[ll_j].ordercode
  2234. ELSE
  2235. arg_s_hz_tmp[ll_m].ordercodestr = arg_s_hz_tmp[ll_m].ordercodestr + ','+ arg_s_rqbuymx[ll_j].ordercode
  2236. END IF
  2237. END IF
  2238. IF Trim(arg_s_rqbuymx[ll_j].relcode) <> '' THEN
  2239. IF Trim(arg_s_hz_tmp[ll_m].relcodestr) = '' THEN
  2240. arg_s_hz_tmp[ll_m].relcodestr = arg_s_rqbuymx[ll_j].relcode
  2241. ELSE
  2242. arg_s_hz_tmp[ll_m].relcodestr = arg_s_hz_tmp[ll_m].relcodestr + ','+ arg_s_rqbuymx[ll_j].relcode
  2243. END IF
  2244. END IF
  2245. arg_s_hz_tmp[ll_m].ifrel = 0
  2246. arg_s_hz_tmp[ll_m].ordercode = ''
  2247. arg_s_hz_tmp[ll_m].wrkGrpid = 0
  2248. arg_s_hz_tmp[ll_m].relprintid = 0
  2249. arg_s_hz_tmp[ll_m].orderid = 0
  2250. arg_s_hz_tmp[ll_m].relpid = 0
  2251. arg_s_rqbuymx[ll_j].ifcmpl = 1 //标记已处理
  2252. //ll_n = ll_m //下一条循环, 从这条开始计算合并
  2253. GOTO next_
  2254. END IF
  2255. NEXT
  2256. //不合并的, 新增一条记录
  2257. it_mxbt_mx_tmp++
  2258. arg_s_hz_tmp[it_mxbt_mx_tmp].printid = it_mxbt_mx_tmp
  2259. arg_s_hz_tmp[it_mxbt_mx_tmp].orderid = arg_s_rqbuymx[ll_j].orderid
  2260. arg_s_hz_tmp[it_mxbt_mx_tmp].mtrlid = arg_s_rqbuymx[ll_j].mtrlid
  2261. arg_s_hz_tmp[it_mxbt_mx_tmp].status = arg_s_rqbuymx[ll_j].status
  2262. arg_s_hz_tmp[it_mxbt_mx_tmp].woodcode = arg_s_rqbuymx[ll_j].woodcode
  2263. arg_s_hz_tmp[it_mxbt_mx_tmp].pcode = arg_s_rqbuymx[ll_j].pcode
  2264. arg_s_hz_tmp[it_mxbt_mx_tmp].dftsptid = arg_s_rqbuymx[ll_j].dftsptid
  2265. arg_s_hz_tmp[it_mxbt_mx_tmp].uqty = arg_s_rqbuymx[ll_j].uqty
  2266. arg_s_hz_tmp[it_mxbt_mx_tmp].unit = arg_s_rqbuymx[ll_j].unit
  2267. arg_s_hz_tmp[it_mxbt_mx_tmp].rate = arg_s_rqbuymx[ll_j].rate
  2268. arg_s_hz_tmp[it_mxbt_mx_tmp].qty = arg_s_rqbuymx[ll_j].qty
  2269. arg_s_hz_tmp[it_mxbt_mx_tmp].mxdscrp = arg_s_rqbuymx[ll_j].mxdscrp
  2270. arg_s_hz_tmp[it_mxbt_mx_tmp].ifrel = arg_s_rqbuymx[ll_j].ifrel
  2271. arg_s_hz_tmp[it_mxbt_mx_tmp].ordercode = arg_s_rqbuymx[ll_j].ordercode
  2272. arg_s_hz_tmp[it_mxbt_mx_tmp].rqdate = arg_s_rqbuymx[ll_j].rqdate
  2273. arg_s_hz_tmp[it_mxbt_mx_tmp].wrkGrpid = arg_s_rqbuymx[ll_j].wrkGrpid
  2274. arg_s_hz_tmp[it_mxbt_mx_tmp].relprintid = arg_s_rqbuymx[ll_j].relprintid
  2275. arg_s_hz_tmp[it_mxbt_mx_tmp].storageid = arg_s_rqbuymx[ll_j].storageid
  2276. arg_s_hz_tmp[it_mxbt_mx_tmp].sptid = arg_s_rqbuymx[ll_j].sptid
  2277. arg_s_hz_tmp[it_mxbt_mx_tmp].ordercodestr = arg_s_rqbuymx[ll_j].ordercode
  2278. arg_s_hz_tmp[it_mxbt_mx_tmp].relcodestr = arg_s_rqbuymx[ll_j].relcode
  2279. arg_s_hz_tmp[it_mxbt_mx_tmp].plancode = arg_s_rqbuymx[ll_j].plancode
  2280. arg_s_hz_tmp[it_mxbt_mx_tmp].relpid = arg_s_rqbuymx[ll_j].relpid
  2281. arg_s_rqbuymx[ll_j].ifcmpl = 1 //标记已处理
  2282. next_:
  2283. NEXT
  2284. //====================================================================
  2285. // 修改: 且补足至最少采购量
  2286. //--------------------------------------------------------------------
  2287. // 作者: LHD 日期: 2013年08月23日
  2288. //====================================================================
  2289. //如果只有一条采购信息,而且采购数量<最少采购数量, 则增加一条不按计划的采购记录
  2290. IF it_mxbt_mx_tmp = 1 THEN
  2291. IF arg_s_hz_tmp[1].qty < lde_PBuyQty THEN
  2292. //增加明细结构
  2293. it_mxbt++
  2294. arg_s_rqbuymx[it_mxbt].ifcmpl = 1 //标记已处理
  2295. arg_s_rqbuymx[it_mxbt].printid = it_mxbt
  2296. arg_s_rqbuymx[it_mxbt].orderid = 0
  2297. arg_s_rqbuymx[it_mxbt].mtrlid = arg_s_hz_tmp[1].mtrlid
  2298. arg_s_rqbuymx[it_mxbt].status = arg_s_hz_tmp[1].status
  2299. arg_s_rqbuymx[it_mxbt].woodcode = arg_s_hz_tmp[1].woodcode
  2300. arg_s_rqbuymx[it_mxbt].pcode = arg_s_hz_tmp[1].pcode
  2301. arg_s_rqbuymx[it_mxbt].dftsptid = arg_s_hz_tmp[1].dftsptid
  2302. arg_s_rqbuymx[it_mxbt].uqty = Round((lde_PBuyQty - arg_s_hz_tmp[1].qty) / arg_s_hz_tmp[1].rate, 10)
  2303. arg_s_rqbuymx[it_mxbt].unit = arg_s_hz_tmp[1].unit
  2304. arg_s_rqbuymx[it_mxbt].rate = arg_s_hz_tmp[1].rate
  2305. arg_s_rqbuymx[it_mxbt].qty = lde_PBuyQty - arg_s_hz_tmp[1].qty
  2306. arg_s_rqbuymx[it_mxbt].mxdscrp = '采购总量少于最少采购数,自动补足'
  2307. arg_s_rqbuymx[it_mxbt].ifrel = 0
  2308. arg_s_rqbuymx[it_mxbt].ordercode = ''
  2309. arg_s_rqbuymx[it_mxbt].rqdate = arg_s_hz_tmp[1].rqdate
  2310. arg_s_rqbuymx[it_mxbt].wrkGrpid = 0
  2311. arg_s_rqbuymx[it_mxbt].relprintid = 0
  2312. arg_s_rqbuymx[it_mxbt].storageid = arg_s_hz_tmp[1].storageid
  2313. arg_s_rqbuymx[it_mxbt].sptid = arg_s_hz_tmp[1].sptid
  2314. arg_s_rqbuymx[it_mxbt].plancode = arg_s_hz_tmp[1].plancode
  2315. arg_s_rqbuymx[it_mxbt].relpid = 0
  2316. //增加汇总结构
  2317. arg_s_hz_tmp[1].qty = lde_PBuyQty
  2318. arg_s_hz_tmp[1].uqty = Round(lde_PBuyQty / arg_s_rqbuymx[ll_j].rate, 10)
  2319. arg_s_hz_tmp[1].ifrel = 0
  2320. arg_s_hz_tmp[1].ordercode = ''
  2321. arg_s_hz_tmp[1].wrkGrpid = 0
  2322. arg_s_hz_tmp[1].relprintid = 0
  2323. arg_s_hz_tmp[1].orderid = 0
  2324. arg_s_hz_tmp[1].relpid = 0
  2325. END IF
  2326. END IF
  2327. ELSE //lb_NewHzType
  2328. Decimal lde_pulgrate
  2329. //判断是否补足
  2330. IF Mod(lde_total_qty, lde_PBuyQty) = 0 THEN
  2331. lde_bz_qty = 0
  2332. ELSE
  2333. lde_bz_qty = lde_PBuyQty - Mod(lde_total_qty, lde_PBuyQty)
  2334. END IF
  2335. //合并规则
  2336. //0.前提: 物料资料: 1)申购补足数量方式 设置为 4-按最少采购量补足; 2) 最少采购量 > 0
  2337. //1.按时间顺序, 每次收货批量 = 最少采购量 * N (N >= 1);
  2338. //2.如果合并后还有多条同一天收货的记录,继续合并成1条收货明细;
  2339. //3.如果最后记录不足够批量(最少采购量 * N), 按差额自动补足;
  2340. FOR ll_k = 1 To ds_hz.RowCount()
  2341. ll_j = ds_hz.Object.id[ll_k]
  2342. lb_hz = False
  2343. //特殊合并原则
  2344. //1.只考虑“采购批量”, 达到就分批
  2345. //2.如果系同一日的,也合并
  2346. //只取最后一行比较,如果最后一行达到的就分
  2347. //
  2348. ll_m = UpperBound(arg_s_hz_tmp)
  2349. IF ll_m > 0 THEN
  2350. IF Mod(arg_s_hz_tmp[ll_m].qty, lde_PBuyQty) = 0 THEN //足够整数倍的, 不合并
  2351. lb_hz = False
  2352. ELSE
  2353. lb_hz = True
  2354. END IF
  2355. //合并的, 只补足为批量, 多余的分行
  2356. IF lb_hz THEN
  2357. ll_days = DaysAfter(Date(arg_s_hz_tmp[ll_m].rqdate), Date(arg_s_rqbuymx[ll_j].rqdate))
  2358. //如果系同一天的,要将全部都合并进去
  2359. IF ll_days = 0 THEN //N倍采购批量
  2360. lde_pulgrate = Int((arg_s_hz_tmp[ll_m].qty + arg_s_rqbuymx[ll_j].qty) / lde_PBuyQty) + 1
  2361. ELSE
  2362. lde_pulgrate = Int(arg_s_hz_tmp[ll_m].qty / lde_PBuyQty) + 1
  2363. END IF
  2364. IF arg_s_hz_tmp[ll_m].qty + arg_s_rqbuymx[ll_j].qty <= lde_PBuyQty * lde_pulgrate THEN
  2365. lde_restqty = 0
  2366. lde_restuqty = 0
  2367. arg_s_hz_tmp[ll_m].qty += arg_s_rqbuymx[ll_j].qty
  2368. arg_s_hz_tmp[ll_m].uqty += arg_s_rqbuymx[ll_j].uqty
  2369. ELSE
  2370. lde_restqty = arg_s_hz_tmp[ll_m].qty + arg_s_rqbuymx[ll_j].qty - lde_PBuyQty * lde_pulgrate
  2371. lde_restuqty = Round(lde_restqty / arg_s_hz_tmp[ll_m].rate, 10)
  2372. arg_s_hz_tmp[ll_m].qty += arg_s_rqbuymx[ll_j].qty - lde_restqty
  2373. arg_s_hz_tmp[ll_m].uqty += arg_s_rqbuymx[ll_j].uqty - lde_restuqty
  2374. END IF
  2375. IF Trim(arg_s_rqbuymx[ll_j].ordercode) <> '' THEN
  2376. IF Trim(arg_s_hz_tmp[ll_m].ordercodestr) = '' THEN
  2377. arg_s_hz_tmp[ll_m].ordercodestr = arg_s_rqbuymx[ll_j].ordercode
  2378. ELSE
  2379. arg_s_hz_tmp[ll_m].ordercodestr = arg_s_hz_tmp[ll_m].ordercodestr + ','+ arg_s_rqbuymx[ll_j].ordercode
  2380. END IF
  2381. END IF
  2382. IF Trim(arg_s_rqbuymx[ll_j].relcode) <> '' THEN
  2383. IF Trim(arg_s_hz_tmp[ll_m].relcodestr) = '' THEN
  2384. arg_s_hz_tmp[ll_m].relcodestr = arg_s_rqbuymx[ll_j].relcode
  2385. ELSE
  2386. arg_s_hz_tmp[ll_m].relcodestr = arg_s_hz_tmp[ll_m].relcodestr + ','+ arg_s_rqbuymx[ll_j].relcode
  2387. END IF
  2388. END IF
  2389. arg_s_hz_tmp[ll_m].ifrel = 0
  2390. arg_s_hz_tmp[ll_m].ordercode = ''
  2391. arg_s_hz_tmp[ll_m].wrkGrpid = 0
  2392. arg_s_hz_tmp[ll_m].relprintid = 0
  2393. arg_s_hz_tmp[ll_m].orderid = 0
  2394. arg_s_hz_tmp[ll_m].relpid = 0
  2395. IF lde_restqty > 0 THEN //按批量分配
  2396. lde_addqty = lde_restqty
  2397. lde_restqty = 0
  2398. lde_adduqty = Round(lde_addqty / arg_s_rqbuymx[ll_j].rate, 10)
  2399. //不合并的, 新增一条记录
  2400. it_mxbt_mx_tmp++
  2401. arg_s_hz_tmp[it_mxbt_mx_tmp].printid = it_mxbt_mx_tmp
  2402. arg_s_hz_tmp[it_mxbt_mx_tmp].orderid = arg_s_rqbuymx[ll_j].orderid
  2403. arg_s_hz_tmp[it_mxbt_mx_tmp].mtrlid = arg_s_rqbuymx[ll_j].mtrlid
  2404. arg_s_hz_tmp[it_mxbt_mx_tmp].status = arg_s_rqbuymx[ll_j].status
  2405. arg_s_hz_tmp[it_mxbt_mx_tmp].woodcode = arg_s_rqbuymx[ll_j].woodcode
  2406. arg_s_hz_tmp[it_mxbt_mx_tmp].pcode = arg_s_rqbuymx[ll_j].pcode
  2407. arg_s_hz_tmp[it_mxbt_mx_tmp].dftsptid = arg_s_rqbuymx[ll_j].dftsptid
  2408. arg_s_hz_tmp[it_mxbt_mx_tmp].uqty = lde_adduqty //arg_s_rqbuymx[ll_j].uqty
  2409. arg_s_hz_tmp[it_mxbt_mx_tmp].unit = arg_s_rqbuymx[ll_j].unit
  2410. arg_s_hz_tmp[it_mxbt_mx_tmp].rate = arg_s_rqbuymx[ll_j].rate
  2411. arg_s_hz_tmp[it_mxbt_mx_tmp].qty = lde_addqty //arg_s_rqbuymx[ll_j].qty
  2412. arg_s_hz_tmp[it_mxbt_mx_tmp].mxdscrp = arg_s_rqbuymx[ll_j].mxdscrp
  2413. arg_s_hz_tmp[it_mxbt_mx_tmp].ifrel = arg_s_rqbuymx[ll_j].ifrel
  2414. arg_s_hz_tmp[it_mxbt_mx_tmp].ordercode = arg_s_rqbuymx[ll_j].ordercode
  2415. arg_s_hz_tmp[it_mxbt_mx_tmp].rqdate = arg_s_rqbuymx[ll_j].rqdate
  2416. arg_s_hz_tmp[it_mxbt_mx_tmp].wrkGrpid = arg_s_rqbuymx[ll_j].wrkGrpid
  2417. arg_s_hz_tmp[it_mxbt_mx_tmp].relprintid = arg_s_rqbuymx[ll_j].relprintid
  2418. arg_s_hz_tmp[it_mxbt_mx_tmp].storageid = arg_s_rqbuymx[ll_j].storageid
  2419. arg_s_hz_tmp[it_mxbt_mx_tmp].sptid = arg_s_rqbuymx[ll_j].sptid
  2420. arg_s_hz_tmp[it_mxbt_mx_tmp].ordercodestr = arg_s_rqbuymx[ll_j].ordercode
  2421. arg_s_hz_tmp[it_mxbt_mx_tmp].relcodestr = arg_s_rqbuymx[ll_j].relcode
  2422. arg_s_hz_tmp[it_mxbt_mx_tmp].plancode = arg_s_rqbuymx[ll_j].plancode
  2423. arg_s_hz_tmp[it_mxbt_mx_tmp].relpid = arg_s_rqbuymx[ll_j].relpid
  2424. END IF
  2425. arg_s_rqbuymx[ll_j].ifcmpl = 1 //标记已处理
  2426. //ll_n = ll_m //下一条循环, 从这条开始计算合并
  2427. GOTO next2_
  2428. END IF
  2429. END IF
  2430. //不合并
  2431. lde_restqty = arg_s_rqbuymx[ll_j].qty
  2432. IF lde_restqty > 0 THEN //循环按批量分配
  2433. lde_addqty = arg_s_rqbuymx[ll_j].qty
  2434. lde_restqty = 0
  2435. lde_adduqty = arg_s_rqbuymx[ll_j].uqty
  2436. //不合并的, 新增一条记录
  2437. it_mxbt_mx_tmp++
  2438. arg_s_hz_tmp[it_mxbt_mx_tmp].printid = it_mxbt_mx_tmp
  2439. arg_s_hz_tmp[it_mxbt_mx_tmp].orderid = arg_s_rqbuymx[ll_j].orderid
  2440. arg_s_hz_tmp[it_mxbt_mx_tmp].mtrlid = arg_s_rqbuymx[ll_j].mtrlid
  2441. arg_s_hz_tmp[it_mxbt_mx_tmp].status = arg_s_rqbuymx[ll_j].status
  2442. arg_s_hz_tmp[it_mxbt_mx_tmp].woodcode = arg_s_rqbuymx[ll_j].woodcode
  2443. arg_s_hz_tmp[it_mxbt_mx_tmp].pcode = arg_s_rqbuymx[ll_j].pcode
  2444. arg_s_hz_tmp[it_mxbt_mx_tmp].dftsptid = arg_s_rqbuymx[ll_j].dftsptid
  2445. arg_s_hz_tmp[it_mxbt_mx_tmp].uqty = lde_adduqty //arg_s_rqbuymx[ll_j].uqty
  2446. arg_s_hz_tmp[it_mxbt_mx_tmp].unit = arg_s_rqbuymx[ll_j].unit
  2447. arg_s_hz_tmp[it_mxbt_mx_tmp].rate = arg_s_rqbuymx[ll_j].rate
  2448. arg_s_hz_tmp[it_mxbt_mx_tmp].qty = lde_addqty //arg_s_rqbuymx[ll_j].qty
  2449. arg_s_hz_tmp[it_mxbt_mx_tmp].mxdscrp = arg_s_rqbuymx[ll_j].mxdscrp
  2450. arg_s_hz_tmp[it_mxbt_mx_tmp].ifrel = arg_s_rqbuymx[ll_j].ifrel
  2451. arg_s_hz_tmp[it_mxbt_mx_tmp].ordercode = arg_s_rqbuymx[ll_j].ordercode
  2452. arg_s_hz_tmp[it_mxbt_mx_tmp].rqdate = arg_s_rqbuymx[ll_j].rqdate
  2453. arg_s_hz_tmp[it_mxbt_mx_tmp].wrkGrpid = arg_s_rqbuymx[ll_j].wrkGrpid
  2454. arg_s_hz_tmp[it_mxbt_mx_tmp].relprintid = arg_s_rqbuymx[ll_j].relprintid
  2455. arg_s_hz_tmp[it_mxbt_mx_tmp].storageid = arg_s_rqbuymx[ll_j].storageid
  2456. arg_s_hz_tmp[it_mxbt_mx_tmp].sptid = arg_s_rqbuymx[ll_j].sptid
  2457. arg_s_hz_tmp[it_mxbt_mx_tmp].ordercodestr = arg_s_rqbuymx[ll_j].ordercode
  2458. arg_s_hz_tmp[it_mxbt_mx_tmp].relcodestr = arg_s_rqbuymx[ll_j].relcode
  2459. arg_s_hz_tmp[it_mxbt_mx_tmp].plancode = arg_s_rqbuymx[ll_j].plancode
  2460. arg_s_hz_tmp[it_mxbt_mx_tmp].relpid = arg_s_rqbuymx[ll_j].relpid
  2461. END IF
  2462. arg_s_rqbuymx[ll_j].ifcmpl = 1 //标记已处理
  2463. next2_:
  2464. NEXT
  2465. IF lde_bz_qty > 0 THEN
  2466. ll_m = UpperBound(arg_s_hz_tmp)
  2467. //增加明细结构
  2468. it_mxbt++
  2469. arg_s_rqbuymx[it_mxbt].ifcmpl = 1 //标记已处理
  2470. arg_s_rqbuymx[it_mxbt].printid = it_mxbt
  2471. arg_s_rqbuymx[it_mxbt].orderid = 0
  2472. arg_s_rqbuymx[it_mxbt].mtrlid = arg_s_hz_tmp[ll_m].mtrlid
  2473. arg_s_rqbuymx[it_mxbt].status = arg_s_hz_tmp[ll_m].status
  2474. arg_s_rqbuymx[it_mxbt].woodcode = arg_s_hz_tmp[ll_m].woodcode
  2475. arg_s_rqbuymx[it_mxbt].pcode = arg_s_hz_tmp[ll_m].pcode
  2476. arg_s_rqbuymx[it_mxbt].dftsptid = arg_s_hz_tmp[ll_m].dftsptid
  2477. arg_s_rqbuymx[it_mxbt].uqty = Round(lde_bz_qty / arg_s_hz_tmp[ll_m].rate, 10)
  2478. arg_s_rqbuymx[it_mxbt].unit = arg_s_hz_tmp[ll_m].unit
  2479. arg_s_rqbuymx[it_mxbt].rate = arg_s_hz_tmp[ll_m].rate
  2480. arg_s_rqbuymx[it_mxbt].qty = lde_bz_qty
  2481. arg_s_rqbuymx[it_mxbt].mxdscrp = '采购总量少于最少采购数,自动补足'
  2482. arg_s_rqbuymx[it_mxbt].ifrel = 0
  2483. arg_s_rqbuymx[it_mxbt].ordercode = ''
  2484. arg_s_rqbuymx[it_mxbt].rqdate = arg_s_hz_tmp[ll_m].rqdate //arg_s_hz_tmp[ll_m].rqdate
  2485. arg_s_rqbuymx[it_mxbt].wrkGrpid = 0
  2486. arg_s_rqbuymx[it_mxbt].relprintid = 0
  2487. arg_s_rqbuymx[it_mxbt].storageid = arg_s_hz_tmp[ll_m].storageid
  2488. arg_s_rqbuymx[it_mxbt].sptid = arg_s_hz_tmp[ll_m].sptid
  2489. arg_s_rqbuymx[it_mxbt].plancode = arg_s_hz_tmp[ll_m].plancode
  2490. arg_s_rqbuymx[it_mxbt].relpid = 0
  2491. arg_s_hz_tmp[ll_m].qty += lde_bz_qty
  2492. arg_s_hz_tmp[ll_m].uqty += Round(lde_bz_qty / arg_s_hz_tmp[ll_m].rate, 10)
  2493. arg_s_hz_tmp[ll_m].ifrel = 0
  2494. arg_s_hz_tmp[ll_m].ordercode = ''
  2495. arg_s_hz_tmp[ll_m].wrkGrpid = 0
  2496. arg_s_hz_tmp[ll_m].relprintid = 0
  2497. arg_s_hz_tmp[ll_m].orderid = 0
  2498. arg_s_hz_tmp[ll_m].relpid = 0
  2499. END IF
  2500. END IF
  2501. //汇总成 采购汇总明细
  2502. FOR ll_j = 1 To it_mxbt_mx_tmp
  2503. it_mxbt_mx++
  2504. arg_s_rqbuymxmx[it_mxbt_mx] = arg_s_hz_tmp[ll_j]
  2505. NEXT
  2506. ELSE //IF arg_ifhz THEN
  2507. //不汇总的
  2508. it_mxbt_mx++
  2509. arg_s_rqbuymxmx[it_mxbt_mx].printid = it_mxbt_mx
  2510. arg_s_rqbuymxmx[it_mxbt_mx].orderid = arg_s_rqbuymx[ll_i].orderid
  2511. arg_s_rqbuymxmx[it_mxbt_mx].mtrlid = arg_s_rqbuymx[ll_i].mtrlid
  2512. arg_s_rqbuymxmx[it_mxbt_mx].status = arg_s_rqbuymx[ll_i].status
  2513. arg_s_rqbuymxmx[it_mxbt_mx].woodcode = arg_s_rqbuymx[ll_i].woodcode
  2514. arg_s_rqbuymxmx[it_mxbt_mx].pcode = arg_s_rqbuymx[ll_i].pcode
  2515. arg_s_rqbuymxmx[it_mxbt_mx].dftsptid = arg_s_rqbuymx[ll_i].dftsptid
  2516. arg_s_rqbuymxmx[it_mxbt_mx].uqty = arg_s_rqbuymx[ll_i].uqty
  2517. arg_s_rqbuymxmx[it_mxbt_mx].unit = arg_s_rqbuymx[ll_i].unit
  2518. arg_s_rqbuymxmx[it_mxbt_mx].rate = arg_s_rqbuymx[ll_i].rate
  2519. arg_s_rqbuymxmx[it_mxbt_mx].qty = arg_s_rqbuymx[ll_i].qty
  2520. arg_s_rqbuymxmx[it_mxbt_mx].mxdscrp = arg_s_rqbuymx[ll_i].mxdscrp
  2521. arg_s_rqbuymxmx[it_mxbt_mx].ifrel = arg_s_rqbuymx[ll_i].ifrel
  2522. arg_s_rqbuymxmx[it_mxbt_mx].ordercode = arg_s_rqbuymx[ll_i].ordercode
  2523. arg_s_rqbuymxmx[it_mxbt_mx].rqdate = arg_s_rqbuymx[ll_i].rqdate
  2524. arg_s_rqbuymxmx[it_mxbt_mx].wrkGrpid = arg_s_rqbuymx[ll_i].wrkGrpid
  2525. arg_s_rqbuymxmx[it_mxbt_mx].relprintid = arg_s_rqbuymx[ll_i].relprintid
  2526. arg_s_rqbuymxmx[it_mxbt_mx].storageid = arg_s_rqbuymx[ll_i].storageid
  2527. arg_s_rqbuymxmx[it_mxbt_mx].sptid = arg_s_rqbuymx[ll_i].sptid
  2528. arg_s_rqbuymxmx[it_mxbt_mx].ordercodestr = arg_s_rqbuymx[ll_i].ordercode
  2529. arg_s_rqbuymxmx[it_mxbt_mx].relcodestr = arg_s_rqbuymx[ll_i].relcode
  2530. arg_s_rqbuymxmx[it_mxbt_mx].plancode = arg_s_rqbuymx[ll_i].plancode
  2531. arg_s_rqbuymxmx[it_mxbt_mx].relpid = arg_s_rqbuymx[ll_i].relpid
  2532. arg_s_rqbuymx[ll_i].ifcmpl = 1
  2533. END IF
  2534. NEXT
  2535. ext:
  2536. RETURN rslt
  2537. end function
  2538. public function integer uof_update_buy_flag (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2539. UPDATE u_Order_ml
  2540. SET u_Order_ml.buy_flag = isnull(uv_order_request_buy_flag.flag,0)
  2541. FROM u_requestbuymxmx INNER JOIN
  2542. uv_order_request_buy_flag ON
  2543. u_requestbuymxmx.scid = uv_order_request_buy_flag.scid AND
  2544. u_requestbuymxmx.orderid = uv_order_request_buy_flag.OrderID INNER JOIN
  2545. u_Order_ml ON uv_order_request_buy_flag.scid = u_Order_ml.scid AND
  2546. uv_order_request_buy_flag.OrderID = u_Order_ml.OrderID
  2547. WHERE u_requestbuymxmx.scid = :arg_scid
  2548. And u_requestbuymxmx.requestbuyid = :arg_requestbuyid ;
  2549. IF sqlca.SQLCode <> 0 THEN
  2550. rslt = 0
  2551. arg_msg = '更新相关生产计划申购单状态失败,'+sqlca.SQLErrText
  2552. GOTO ext
  2553. END IF
  2554. ext:
  2555. IF rslt = 0 THEN
  2556. ROLLBACK;
  2557. ELSEIF rslt = 1 And arg_ifcommit THEN
  2558. COMMIT ;
  2559. END IF
  2560. RETURN rslt
  2561. end function
  2562. public function integer stopordercancel (long arg_scid, long arg_requestbuyid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2563. Int li_flag,li_billtype
  2564. DateTime null_dt
  2565. SetNull(null_dt)
  2566. IF p_getflag(arg_scid,arg_requestbuyid,li_flag,li_billtype,arg_msg) = 0 THEN
  2567. rslt = 0
  2568. GOTO ext
  2569. END IF
  2570. IF li_flag <> 3 THEN
  2571. rslt = 0
  2572. arg_msg = "单据只有在终止状态下才可以执行取消终止,请核对"
  2573. GOTO ext
  2574. END IF
  2575. UPDATE u_requestbuy
  2576. SET flag = 1,
  2577. accomplishdate = :null_dt,
  2578. finishemp = '',
  2579. stopemp = '',
  2580. stopreason = ''
  2581. WHERE requestbuyid = :arg_requestbuyid
  2582. AND scid = :arg_scid;
  2583. IF sqlca.SQLCode <> 0 THEN
  2584. rslt = 0
  2585. arg_msg = "因网络或其它原因导致取消手动完成单据操作失败"+"~n"+sqlca.SQLErrText
  2586. GOTO ext
  2587. END IF
  2588. ext:
  2589. IF rslt = 0 THEN
  2590. ROLLBACK;
  2591. ELSEIF arg_ifcommit AND rslt = 1 THEN
  2592. COMMIT;
  2593. END IF
  2594. RETURN rslt
  2595. end function
  2596. on uo_requestbuy.create
  2597. call super::create
  2598. TriggerEvent( this, "constructor" )
  2599. end on
  2600. on uo_requestbuy.destroy
  2601. TriggerEvent( this, "destructor" )
  2602. call super::destroy
  2603. end on
  2604. event constructor;String arg_msg
  2605. String str_optionvalue
  2606. str_optionvalue = ''
  2607. f_get_sys_option_value('111',str_optionvalue,arg_msg)
  2608. uo_option_requestbuy_hz = Long(str_optionvalue)
  2609. str_optionvalue = ''
  2610. f_get_sys_option_value('109',str_optionvalue,arg_msg)
  2611. uo_option_buytask_spt = Long(str_optionvalue)
  2612. str_optionvalue = ''
  2613. f_get_sys_option_value('314',str_optionvalue,arg_msg)
  2614. uo_option_rqbuy_checkdate = Long(str_optionvalue)
  2615. str_optionvalue = ''
  2616. f_get_sys_option_value('319',str_optionvalue,arg_msg)
  2617. uo_option_cl_cp_buy = Long(str_optionvalue)
  2618. str_optionvalue = ''
  2619. f_get_sys_option_value('425',str_optionvalue,arg_msg)
  2620. uo_option_if_oa_requestbuy_dept = Long(str_optionvalue)
  2621. str_optionvalue = ''
  2622. f_get_sys_option_value('426',str_optionvalue,arg_msg)
  2623. uo_option_request_dept_secaudit = Long(str_optionvalue)
  2624. end event