uo_inware_buy.sru 90 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396
  1. $PBExportHeader$uo_inware_buy.sru
  2. forward
  3. global type uo_inware_buy from uo_inware
  4. end type
  5. end forward
  6. global type uo_inware_buy from uo_inware
  7. end type
  8. global uo_inware_buy uo_inware_buy
  9. type variables
  10. Int uo_option_buy_sptprice_sec,uo_option_check_buyin,uo_option_m_mstpay
  11. Int uo_option_buyth_use_price_update_wareamt
  12. end variables
  13. forward prototypes
  14. public function integer auditing (boolean arg_ifcommit, ref string arg_msg)
  15. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg)
  16. public function integer secauditing (boolean arg_ifcommit, ref string arg_msg)
  17. public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg)
  18. public function integer p_update_th_cost (long arg_printid, string arg_mtrlcode, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_dxflag, long arg_sptid, string arg_mtrlcuscode, string arg_location, ref decimal arg_ref_cost, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer uof_update_ptqty (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_ptqty, ref string arg_msg, boolean arg_ifcommit)
  20. public function integer uof_destroy_buytask (ref string arg_msg)
  21. public function integer uof_create_buytask (ref string arg_msg)
  22. public function integer uof_chk_audit (integer arg_type, long arg_scid, long arg_inwareid, long arg_printid, boolean arg_ifcommit, ref string arg_msg)
  23. public function integer uof_create_move (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg)
  24. public function integer uof_destroy_move (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg)
  25. public function integer uof_update_chkqty (long arg_scid, long arg_inwareid, long arg_printid, s_inwaremx s_mx, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer uf_cmp_mxmx (ref string arg_msg)
  27. end prototypes
  28. public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1
  29. Long cnt = 0,i,j,mx_barcode_cnt,k
  30. String ls_about,ls_dscrp
  31. Long ll_billtype
  32. Long ll_balctype
  33. Long ll_sptid,ll_mtrlwareid_ref
  34. Decimal ld_saletask_notfpqty,ld_fpqty
  35. String ls_mtrlcuscode
  36. String ls_storagename
  37. Decimal ld_fprice_notax
  38. Int li_outtype,li_storagetype,li_ifvqty
  39. s_inwaremx_barcode_fp arg_s_mxbarcode_fp
  40. Long rst_outwareid //
  41. Long rst_inwareid //
  42. s_inwaremx s_mx
  43. s_outwaremx s_mx_out
  44. uo_sqlpro uo_pro
  45. uo_pro = Create uo_sqlpro
  46. uo_pro.commit_transaction = commit_transaction
  47. IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN
  48. rslt = 0
  49. GOTO ext
  50. END IF
  51. IF uo_option_inout_type = -1000 THEN
  52. rslt = 0
  53. arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!'
  54. GOTO ext
  55. END IF
  56. IF uo_option_barcode_inwarebuy_paudit = -1000 THEN
  57. rslt = 0
  58. arg_msg = '选项:[208]仓库使用条码流程,读取初始默认值失败,操作取消!'
  59. GOTO ext
  60. END IF
  61. IF uo_option_buy_sptprice_sec = -1000 THEN
  62. rslt = 0
  63. arg_msg = '选项:[168]采购收货单财审更新供应商最新价,读取初始默认值失败,操作取消!'
  64. GOTO ext
  65. END IF
  66. IF uo_option_check_buyin = -1000 THEN
  67. rslt = 0
  68. arg_msg = '选项:[130]采购先质检后进仓,读取初始默认值失败,操作取消!'
  69. GOTO ext
  70. END IF
  71. IF uo_option_buyth_use_price_update_wareamt = -1000 THEN
  72. rslt = 0
  73. arg_msg = '选项:[331]采购退货单用退货单价扣减库存金额,读取初始默认值失败,操作取消!'
  74. GOTO ext
  75. END IF
  76. uo_inware uo_in,uo_in_th
  77. uo_outware uo_out
  78. uo_in = Create uo_inware
  79. uo_in.commit_transaction = sqlca
  80. uo_in.if_getid_ture = False
  81. uo_in_th = Create uo_inware
  82. uo_in_th.commit_transaction = sqlca
  83. uo_in_th.if_getid_ture = False
  84. uo_out = Create uo_outware
  85. uo_out.commit_transaction = sqlca
  86. uo_out.if_getid_ture = False
  87. Long arg_s_arr,ll_relbillid,ll_relprintid,ll_orderid_buytask
  88. s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null
  89. uo_mtrlware_assign uo_ma
  90. uo_ma = Create uo_mtrlware_assign
  91. uo_ma.commit_transaction = commit_transaction
  92. uo_ma.ib_ifinware_audit_do = True
  93. uo_buytask uo_task
  94. uo_task = Create uo_buytask
  95. uo_task.commit_transaction = commit_transaction
  96. uo_sptcheck uo_sptch
  97. uo_sptch = Create uo_sptcheck
  98. uo_spt_price uo_sptprice
  99. uo_sptprice = Create uo_spt_price
  100. IF inwareid = 0 THEN
  101. rslt = 0
  102. arg_msg = "没有审核对象"
  103. GOTO ext
  104. END IF
  105. IF storageid = 0 THEN
  106. rslt = 0
  107. arg_msg = '没有正确的仓库'
  108. GOTO ext
  109. END IF
  110. IF billtype <> 9 THEN
  111. IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  112. rslt = 0
  113. GOTO ext
  114. END IF
  115. END IF
  116. SELECT storagename,outtype,storagetype
  117. INTO :ls_storagename,:li_outtype,:li_storagetype
  118. FROM u_storage
  119. Where storageid = :storageid Using commit_transaction ;
  120. IF commit_transaction.SQLCode <> 0 THEN
  121. rslt = 0
  122. arg_msg = "查询操作失败,仓库"
  123. GOTO ext
  124. END IF
  125. //检查是否有该仓库的建立权限
  126. IF sys_user_storagestr_audit <> '0' THEN
  127. IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN
  128. rslt = 0
  129. arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许审核该仓库的单据'
  130. GOTO ext
  131. END IF
  132. END IF
  133. //
  134. IF uo_option_inout_type = 2 And &
  135. uo_option_barcode_inwarebuy_paudit = 1 And &
  136. (li_outtype = 2 Or li_outtype = 3 ) THEN
  137. IF priceflag = 0 THEN
  138. rslt = 0
  139. arg_msg = "单据未确认"
  140. GOTO ext
  141. END IF
  142. END IF
  143. IF li_outtype = 1 THEN
  144. cnt = 0
  145. SELECT count(*) INTO :cnt
  146. FROM u_inwaremx_mx_barcode
  147. WHERE u_inwaremx_mx_barcode.inwareid = :inwareid
  148. AND u_inwaremx_mx_barcode.scid = :scid
  149. AND u_inwaremx_mx_barcode.billtype = 1
  150. Using commit_transaction;
  151. IF commit_transaction.SQLCode <> 0 THEN
  152. rslt = 0
  153. arg_msg = "查询操作失败,进仓单条码明细数量,"+commit_transaction.SQLErrText
  154. GOTO ext
  155. END IF
  156. IF cnt > 0 THEN
  157. arg_msg = '仓库设了包件出仓,但单据有条码明细,操作取消,请检查仓库的出仓模式是否设置正确'
  158. rslt = 0
  159. GOTO ext
  160. END IF
  161. END IF
  162. IF flag = 1 THEN
  163. rslt = 0
  164. arg_msg = "单据已经审核"
  165. GOTO ext
  166. END IF
  167. IF billtype = 1 And li_outtype > 0 THEN
  168. IF thflag = 0 THEN
  169. IF uo_out.newbegin(scid,23,arg_msg) = 0 THEN
  170. rslt = 0
  171. GOTO ext
  172. END IF
  173. uo_out.relid = inwareid
  174. uo_out.outdate = indate
  175. uo_out.outrep = inrep
  176. uo_out.part = inwarecode
  177. uo_out.dscrp = dscrp
  178. uo_out.cusname = '收货单明细自动出仓'
  179. uo_out.storageid = storageid
  180. ELSE
  181. IF uo_in.newbegin(scid,25,arg_msg) = 0 THEN
  182. rslt = 0
  183. GOTO ext
  184. END IF
  185. uo_in.relid = inwareid
  186. uo_in.indate = indate
  187. uo_in.inrep = inrep
  188. uo_in.part = inwarecode
  189. uo_in.dscrp = dscrp
  190. uo_in.sptname = '退货单退货明细自动进仓'
  191. uo_in.storageid = storageid
  192. END IF
  193. //检查条码数量是否匹配
  194. IF li_outtype = 2 Or li_outtype = 3 THEN
  195. IF uof_check_barcodeqty(arg_msg) = 0 THEN
  196. rslt = 0
  197. GOTO ext
  198. END IF
  199. END IF
  200. END IF
  201. UPDATE u_inware
  202. SET auditingrep = :publ_operator,
  203. auditingdate = getdate(),
  204. flag = 1
  205. WHERE u_inware.inwareid = :inwareid
  206. AND flag = 0
  207. AND secflag = 0
  208. And scid = :scid Using commit_transaction;
  209. IF commit_transaction.SQLCode <> 0 THEN
  210. rslt = 0
  211. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  212. GOTO ext
  213. ELSEIF commit_transaction.SQLNRows = 0 THEN
  214. rslt = 0
  215. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  216. GOTO ext
  217. END IF
  218. IF billtype = 1 And thflag = 1 And li_outtype > 0 THEN
  219. FOR i = 1 To it_mxbt
  220. s_mx.printid = inwaremx[i].printid
  221. s_mx.mtrlid = inwaremx[i].mtrlid
  222. s_mx.mtrlcode = inwaremx[i].mtrlcode
  223. s_mx.plancode = inwaremx[i].plancode
  224. s_mx.status = inwaremx[i].status
  225. s_mx.uqty = (0 - inwaremx[i].qty)
  226. s_mx.enprice = inwaremx[i].fprice
  227. s_mx.rebate = 1
  228. s_mx.mxdscrp = inwaremx[i].mxdscrp
  229. s_mx.jgprice = 0
  230. s_mx.relid = 0
  231. s_mx.ifrel = 0
  232. s_mx.woodcode = inwaremx[i].woodcode
  233. s_mx.pcode = inwaremx[i].pcode
  234. s_mx.sptid = inwaremx[i].sptid
  235. s_mx.unit = inwaremx[i].unit
  236. s_mx.rate = 1
  237. s_mx.qty = (0 - inwaremx[i].qty)
  238. s_mx.relprintid = 0
  239. s_mx.checkqty = 0
  240. s_mx.result = ''
  241. s_mx.waredscrp = ''
  242. s_mx.relbillid = 0
  243. s_mx.relbillprintid = 0
  244. s_mx.mtrlcuscode = inwaremx[i].mtrlcuscode
  245. s_mx.Location = inwaremx[i].Location
  246. s_mx.deliqty = Abs(inwaremx[i].qty)
  247. s_mx.tax = 0
  248. IF inwaremx[i].ifpackpro = 0 THEN
  249. s_mx.ifvqty = 1
  250. s_mx.ifnotinout = 1
  251. ELSE
  252. s_mx.ifvqty = 0
  253. s_mx.ifnotinout = 0
  254. END IF
  255. IF uo_in.acceptmx(s_mx, arg_msg) = 0 THEN
  256. arg_msg = '退货单退货明细自动进仓单,行:'+String(i)+','+arg_msg
  257. rslt = 0
  258. GOTO ext
  259. END IF
  260. // IF uo_in.acceptmx(inwaremx[i].printid,&
  261. // inwaremx[i].mtrlid,&
  262. // inwaremx[i].mtrlcode,&
  263. // inwaremx[i].plancode,&
  264. // inwaremx[i].status,&
  265. // (0 - inwaremx[i].qty),&
  266. // inwaremx[i].fprice,&
  267. // 1,&
  268. // inwaremx[i].mxdscrp,&
  269. // arg_msg,&
  270. // 0,0,0,inwaremx[i].woodcode,&
  271. // inwaremx[i].pcode,inwaremx[i].sptid,&
  272. // inwaremx[i].unit,1,&
  273. // (0 - inwaremx[i].qty),0,0,'','',0,0,&
  274. // inwaremx[i].mtrlcuscode,inwaremx[i].Location,&
  275. // Abs(inwaremx[i].qty),&
  276. // 0) = 0 THEN
  277. // arg_msg = '退货单退货明细自动进仓单,行:'+String(i)+','+arg_msg
  278. // rslt = 0
  279. // GOTO ext
  280. // END IF
  281. NEXT
  282. IF uo_in.Save(False,arg_msg) = 0 THEN
  283. rslt = 0
  284. GOTO ext
  285. END IF
  286. IF uo_in.getinfo(scid,uo_in.inwareid,arg_msg) = 0 THEN
  287. rslt = 0
  288. GOTO ext
  289. END IF
  290. IF uo_in.auditing(False,arg_msg) = 0 THEN
  291. rslt = 0
  292. GOTO ext
  293. END IF
  294. END IF
  295. FOR i = 1 To it_mxbt
  296. IF f_power_ind(2203,sys_msg_pow) And Not sys_power_issuper THEN
  297. IF inwaremx[i].cost = 0 THEN
  298. rslt = 0
  299. arg_msg = '采购收货单或采购退货单,行:'+String(i)+',物料编码:'+inwaremx[i].mtrlcode+',没有单价,请检查'
  300. GOTO ext
  301. END IF
  302. END IF
  303. //查询相关订单属于材料订单还是成品订单
  304. If ( billtype = 1 Or billtype = 27 ) And inwaremx[i].relid > 0 THEN
  305. SELECT u_buytask.billtype INTO :ll_billtype
  306. FROM u_buytask
  307. WHERE u_buytask.taskid = :inwaremx[i].relid
  308. And u_buytask.scid = :scid Using commit_transaction;
  309. IF commit_transaction.SQLCode <> 0 THEN
  310. rslt = 0
  311. arg_msg = '采购收货单或采购退货单,查询订单类型失败'+'~n'+commit_transaction.SQLErrText
  312. GOTO ext
  313. END IF
  314. ELSE
  315. ll_billtype = 0
  316. END IF
  317. inwaremx[i].mxbilltype = ll_billtype //用作判断收货单明细对应的订单明细是属于那种类型的订单; uof_create_buytask 有用
  318. //yyx20120206
  319. IF billtype = 1 THEN
  320. IF li_storagetype = 1 And inwaremx[i].ifpack <> 2 And inwaremx[i].ifpackpro <> 2 And inwaremx[i].ifpackpro <> 4 THEN
  321. ll_sptid = 0
  322. ls_mtrlcuscode = ''
  323. ELSE
  324. ll_sptid = inwaremx[i].sptid
  325. ls_mtrlcuscode = inwaremx[i].mtrlcuscode
  326. END IF
  327. //yyx20120206_end
  328. Decimal ld_cost
  329. //更新退货成本价
  330. IF thflag = 1 THEN
  331. IF uo_option_buyth_use_price_update_wareamt = 1 THEN
  332. UPDATE u_inwaremx
  333. SET cost = :inwaremx[i].price
  334. WHERE scid = :scid
  335. AND inwareid = :inwareid
  336. And printid = :inwaremx[i].printid Using commit_transaction;
  337. IF commit_transaction.SQLCode <> 0 THEN
  338. arg_msg = '收货明细行:'+String(i)+','+ '更新退货成本价失败,'+commit_transaction.SQLErrText
  339. rslt = 0
  340. GOTO ext
  341. END IF
  342. ld_cost = inwaremx[i].price
  343. ELSE
  344. IF p_update_th_cost(inwaremx[i].printid,&
  345. inwaremx[i].mtrlcode,&
  346. inwaremx[i].mtrlid,&
  347. inwaremx[i].status,&
  348. inwaremx[i].woodcode,&
  349. inwaremx[i].pcode,&
  350. inwaremx[i].plancode,&
  351. inwaremx[i].dxflag,&
  352. ll_sptid,&
  353. ls_mtrlcuscode,&
  354. inwaremx[i].Location,&
  355. ld_cost,arg_msg,False) = 0 THEN
  356. rslt = 0
  357. arg_msg = '收货明细行:'+String(i)+','+arg_msg
  358. GOTO ext
  359. END IF
  360. END IF
  361. ELSE
  362. ld_cost = inwaremx[i].cost
  363. END IF
  364. IF sys_option_inout_procedure = 0 THEN
  365. IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,&
  366. storageid,inwaremx[i].plancode,inwaremx[i].status,&
  367. inwaremx[i].qty,inwaremx[i].uqty,ld_cost,inwaremx[i].planprice,&
  368. ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,&
  369. inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,&
  370. inwaremx[i].mtrlwaredscrp,inwaremx[i].ifvqty,arg_msg) = 0 THEN
  371. arg_msg = '更新收货明细行:'+String(i)+','+arg_msg
  372. rslt = 0
  373. GOTO ext
  374. END IF
  375. ELSE
  376. IF uo_pro.p_inware_update_mtrlware(scid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,&
  377. inwaremx[i].mtrlcode,storageid,inwaremx[i].plancode,inwaremx[i].status,inwaremx[i].qty,&
  378. inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,ll_sptid,inwaremx[i].dxflag,&
  379. inwaremx[i].woodcode,inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN
  380. arg_msg = '更新收货明细行:'+String(i)+','+arg_msg
  381. rslt = 0
  382. GOTO ext
  383. END IF
  384. END IF
  385. END IF
  386. If ( billtype = 1 Or billtype = 27 ) And inwaremx[i].relid > 0 THEN
  387. IF thflag = 0 Or (thflag = 1 And inwaremx[i].Thptype = 1) THEN //正常收货, 或者 退货,更新订单
  388. IF uo_task.addmxcmpl(scid,inwaremx[i].relid,inwaremx[i].relprintid,&
  389. inwaremx[i].uqty,arg_msg,False) <> 1 THEN
  390. arg_msg = '更新收货明细行:'+String(i)+','+arg_msg
  391. rslt = 0
  392. GOTO ext
  393. END IF
  394. IF rslt = 1 And Trim(arg_msg) <> '' THEN
  395. f_setsysoplog('采购收货单','采购收货单审核,id:'+String(inwareid)+',单号:'+inwarecode+','+arg_msg,arg_msg,False)
  396. END IF
  397. // 在 addmxcmpl 中处理
  398. // IF uo_task.trycmplbuytask(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN
  399. // arg_msg = '更新收货明细行:'+String(i)+','+arg_msg
  400. // rslt = 0
  401. // GOTO ext
  402. // END IF
  403. ELSEIF inwaremx[i].Thptype = 0 THEN //不需处理
  404. // Nothing to Done
  405. ELSEIF inwaremx[i].Thptype = 2 THEN //新建订单
  406. //单独函数处理 uof_create_buytask
  407. END IF
  408. END IF
  409. IF uo_option_buy_sptprice_sec = 0 THEN
  410. ld_fprice_notax = inwaremx[i].fprice / ( 1 + inwaremx[i].tax)
  411. IF uo_sptprice.uof_update_sptprice(thflag,sptid,inwaremx[i].mtrlid,inwaremx[i].unit,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,'',inwareid,inwaremx[i].enprice,inwaremx[i].rebate,inwaremx[i].rate,inwaremx[i].fprice,ld_fprice_notax,indate,inwarecode,0,inwaremx[i].mxdscrp,inwaremx[i].printid,0,moneyid,indate,DateTime(9999-01-01),False,arg_msg) = 0 THEN
  412. arg_msg = '更新收货明细行:'+String(i)+','+arg_msg
  413. rslt = 0
  414. GOTO ext
  415. END IF
  416. END IF
  417. //更新质检已进仓数
  418. IF uo_option_check_buyin = 1 And billtype = 1 And inwaremx[i].relbillid > 0 THEN
  419. IF uo_sptch.uof_add_inqty(inwaremx[i].relbillid,inwaremx[i].relbillprintid,inwaremx[i].uqty,arg_msg,False) = 0 THEN
  420. arg_msg = '更新收货明细行:'+String(i)+','+arg_msg
  421. rslt = 0
  422. GOTO ext
  423. END IF
  424. END IF
  425. //取库存信息yyx2012-09-25
  426. ll_mtrlwareid_ref = 0
  427. IF uof_ref_mtrlwareid(scid,storageid,inwaremx[i].mtrlid,&
  428. inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].plancode,&
  429. inwaremx[i].Location,ll_sptid,ls_mtrlcuscode,ll_mtrlwareid_ref,arg_msg) = 0 THEN
  430. arg_msg = '取库存id,收货明细行:'+String(i)+','+arg_msg
  431. rslt = 0
  432. GOTO ext
  433. END IF
  434. IF p_update_mtrlwareid_inwaremx(ll_mtrlwareid_ref,inwareid,inwaremx[i].printid,arg_msg,False) = 0 THEN
  435. arg_msg = '更新明细库存id,收货明细行:'+String(i)+','+arg_msg
  436. rslt = 0
  437. GOTO ext
  438. END IF
  439. //yyx20100814
  440. //库存分配,仓库非包件或非条码出仓,用收货明细分配
  441. IF billtype = 1 And li_storagetype = 1 And thflag = 0 And li_outtype = 0 THEN
  442. //取分配计划
  443. arg_s_arr = 0
  444. arg_s_ap = arg_s_ap_null
  445. IF inwaremx[i].iffp = 0 THEN //旧模式
  446. IF billtype = 1 And ll_billtype = 1 THEN //成品采购订单模式
  447. SELECT u_buyTaskMx.orderid,
  448. u_buyTaskMx.taskmxprintid
  449. INTO :ll_relbillid,
  450. :ll_relprintid
  451. FROM u_buyTaskMx
  452. WHERE u_buyTaskMx.scid = :scid
  453. AND u_buyTaskMx.taskid = :inwaremx[i].relid
  454. AND u_buyTaskMx.printid = :inwaremx[i].relprintid
  455. And u_buyTaskMx.orderid > 0 Using commit_transaction;
  456. IF commit_transaction.SQLCode = -1 THEN
  457. arg_msg = '收货明细行:'+String(i)+'查询成品采购订单相关销售订单资料失败,'+commit_transaction.SQLErrText
  458. rslt = 0
  459. GOTO ext
  460. ELSEIF commit_transaction.SQLCode = 100 THEN
  461. ll_relbillid = 0
  462. ll_relprintid = 0
  463. END IF
  464. IF ll_relbillid > 0 THEN //成品申购单找到销售订单
  465. arg_s_arr++
  466. arg_s_ap.planid[arg_s_arr] = 0
  467. arg_s_ap.assigntype[arg_s_arr] = 1
  468. arg_s_ap.scid[arg_s_arr] = scid
  469. arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref
  470. arg_s_ap.relbillid[arg_s_arr] = ll_relbillid
  471. arg_s_ap.relprintid[arg_s_arr] = ll_relprintid
  472. arg_s_ap.fpgrade[arg_s_arr] = 2
  473. arg_s_ap.notassignqty[arg_s_arr] = inwaremx[i].qty
  474. ELSE
  475. IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  476. arg_msg = '收货明细行:'+String(i)+',取分配计划失败'+arg_msg
  477. rslt = 0
  478. GOTO ext
  479. END IF
  480. END IF
  481. ELSEIF billtype = 1 And ll_billtype = 0 THEN //材料采购订单模式
  482. SELECT u_buyTaskMx.orderid
  483. INTO :ll_orderid_buytask
  484. FROM u_buyTaskMx
  485. WHERE u_buyTaskMx.scid = :scid
  486. AND u_buyTaskMx.taskid = :inwaremx[i].relid
  487. AND u_buyTaskMx.printid = :inwaremx[i].relprintid
  488. And u_buyTaskMx.orderid > 0 Using commit_transaction;
  489. IF commit_transaction.SQLCode = -1 THEN
  490. arg_msg = '收货明细行:'+String(i)+'查询材料采购订单相关主生产计划资料失败,'+commit_transaction.SQLErrText
  491. rslt = 0
  492. GOTO ext
  493. ELSEIF commit_transaction.SQLCode = 100 THEN
  494. ll_orderid_buytask = 0
  495. END IF
  496. IF ll_orderid_buytask = 0 THEN
  497. ll_relbillid = 0
  498. ll_relprintid = 0
  499. ELSE
  500. SELECT u_order_ml.taskid,
  501. u_order_ml.taskmxid
  502. INTO :ll_relbillid,
  503. :ll_relprintid
  504. FROM u_order_ml
  505. WHERE u_order_ml.scid = :scid
  506. And u_order_ml.orderid = :ll_orderid_buytask Using commit_transaction;
  507. IF commit_transaction.SQLCode = -1 THEN
  508. arg_msg = '收货明细行:'+String(i)+'查询材料采购订单相关主生产计划销售订单资料失败,'+commit_transaction.SQLErrText
  509. rslt = 0
  510. GOTO ext
  511. ELSEIF commit_transaction.SQLCode = 100 THEN
  512. ll_relbillid = 0
  513. ll_relprintid = 0
  514. END IF
  515. END IF
  516. IF ll_relbillid > 0 THEN //找到销售订单
  517. arg_s_arr++
  518. arg_s_ap.planid[arg_s_arr] = 0
  519. arg_s_ap.assigntype[arg_s_arr] = 1
  520. arg_s_ap.scid[arg_s_arr] = scid
  521. arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref
  522. arg_s_ap.relbillid[arg_s_arr] = ll_relbillid
  523. arg_s_ap.relprintid[arg_s_arr] = ll_relprintid
  524. arg_s_ap.fpgrade[arg_s_arr] = 2
  525. arg_s_ap.notassignqty[arg_s_arr] = inwaremx[i].qty
  526. ELSE
  527. IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  528. arg_msg = '收货明细行:'+String(i)+',取分配计划失败'+arg_msg
  529. rslt = 0
  530. GOTO ext
  531. END IF
  532. END IF
  533. ELSE
  534. IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  535. arg_msg = '收货明细行:'+String(i)+',取分配计划失败'+arg_msg
  536. rslt = 0
  537. GOTO ext
  538. END IF
  539. END IF
  540. ELSE //新库存分配模式
  541. IF inwaremx[i].relid > 0 And inwaremx[i].relprintid > 0 THEN
  542. IF uof_ref_assign_plan_plankind(scid,ll_mtrlwareid_ref,2,inwaremx[i].relid,inwaremx[i].relprintid,&
  543. inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  544. arg_msg = '收货明细行:'+String(i)+',取分配计划失败'+arg_msg
  545. rslt = 0
  546. GOTO ext
  547. END IF
  548. END IF
  549. END IF
  550. FOR j = 1 To UpperBound(arg_s_ap.planid)
  551. //检查是否超数量yyx20120424
  552. ld_fpqty = 0
  553. IF arg_s_ap.assigntype[j] = 1 THEN
  554. ld_saletask_notfpqty = 0
  555. IF f_ref_saletask_notfpqty(scid,arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],inwaremx[i].mtrlid,inwaremx[i].status,ld_saletask_notfpqty,arg_msg) = 0 THEN
  556. arg_msg = '收货明细行:'+String(i)+','+arg_msg
  557. rslt = 0
  558. GOTO ext
  559. END IF
  560. IF arg_s_ap.notassignqty[j] > ld_saletask_notfpqty THEN
  561. ld_fpqty = ld_saletask_notfpqty
  562. ELSE
  563. ld_fpqty = arg_s_ap.notassignqty[j]
  564. END IF
  565. ELSE
  566. ld_fpqty = arg_s_ap.notassignqty[j]
  567. END IF
  568. ////////////////////////////// //
  569. IF ld_fpqty > 0 THEN
  570. IF uo_ma.uof_assign_add(arg_s_ap.scid[j],arg_s_ap.mtrlwareid[j],&
  571. arg_s_ap.assigntype[j],arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],&
  572. ld_fpqty,inwaremx[i].cost,ls_mtrlcuscode,inwaremx[i].mtrlwaredscrp,&
  573. inwarecode,inwaremx[i].printid,arg_s_ap.fpgrade[j],publ_operator,arg_msg,False) = 0 THEN
  574. arg_msg = '收货明细行:'+String(i)+',库存分配失败,'+arg_msg
  575. rslt = 0
  576. GOTO ext
  577. END IF
  578. END IF
  579. IF arg_s_ap.planid[j] > 0 THEN
  580. IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],arg_s_ap.notassignqty[j],&
  581. inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN
  582. arg_msg = '收货明细行:'+String(i)+',更新分配计划已分配数失败,'+arg_msg
  583. rslt = 0
  584. GOTO ext
  585. END IF
  586. END IF
  587. NEXT
  588. END IF
  589. //yyx20100814_end
  590. If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++
  591. //自动出仓
  592. IF billtype = 1 And li_outtype > 0 THEN
  593. IF thflag = 0 THEN
  594. //取库存信息
  595. ll_mtrlwareid_ref = 0
  596. IF uof_ref_mtrlwareid(scid,storageid,inwaremx[i].mtrlid,&
  597. inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].plancode,&
  598. inwaremx[i].Location,ll_sptid,ls_mtrlcuscode,ll_mtrlwareid_ref,arg_msg) = 0 THEN
  599. arg_msg = '收货单收货明细自动出仓单,取库存id,行:'+String(i)+','+arg_msg
  600. rslt = 0
  601. GOTO ext
  602. END IF
  603. s_mx_out.mtrlwareid = ll_mtrlwareid_ref
  604. s_mx_out.qty = inwaremx[i].qty
  605. s_mx_out.fprice = inwaremx[i].fprice
  606. s_mx_out.rebate = 1
  607. s_mx_out.mxdscrp = inwaremx[i].mxdscrp
  608. s_mx_out.printid = inwaremx[i].printid
  609. s_mx_out.ifrel = 0
  610. s_mx_out.relid = 0
  611. s_mx_out.olmtrlid = 0
  612. s_mx_out.packqty = 0
  613. s_mx_out.outtype = ''
  614. s_mx_out.planqty = 0
  615. s_mx_out.relprintid = 0
  616. s_mx_out.unit = inwaremx[i].unit
  617. s_mx_out.uqty = inwaremx[i].qty
  618. s_mx_out.rate = 1
  619. s_mx_out.pricetype = ''
  620. s_mx_out.formula = ''
  621. s_mx_out.saleoutid = 0
  622. s_mx_out.saleoutprintid = 0
  623. s_mx_out.mxdscrp2 = ''
  624. s_mx_out.net_weight = 0
  625. s_mx_out.gross_weight = 0
  626. s_mx_out.cubage = 0
  627. s_mx_out.taxrate = 0
  628. s_mx_out.priceformula = ''
  629. s_mx_out.qtyformula = ''
  630. IF inwaremx[i].ifpackpro = 0 THEN
  631. s_mx_out.ifvqty = 1
  632. s_mx_out.ifnotinout = 1
  633. ELSE
  634. s_mx_out.ifvqty = 0
  635. s_mx_out.ifnotinout = 0
  636. END IF
  637. IF uo_out.acceptmx(s_mx_out,arg_msg) = 0 THEN
  638. arg_msg = '收货单收货明细自动出仓单,行:'+String(i)+','+arg_msg
  639. rslt = 0
  640. GOTO ext
  641. END IF
  642. // IF uo_out.acceptmx(ll_mtrlwareid_ref,&
  643. // inwaremx[i].qty,inwaremx[i].fprice,1,&
  644. // inwaremx[i].mxdscrp,inwaremx[i].printid,arg_msg,0,0,0,0,'',0,0,&
  645. // inwaremx[i].unit,inwaremx[i].qty,1,'','',0,0,'',0,0,0,0,'','') = 0 THEN
  646. // arg_msg = '收货单收货明细自动出仓单,行:'+String(i)+','+arg_msg
  647. // rslt = 0
  648. // GOTO ext
  649. // END IF
  650. END IF
  651. END IF
  652. NEXT
  653. IF thflag = 1 THEN
  654. //退货处理 为新建订单的, 生成一张订单
  655. IF uof_create_buytask(arg_msg) = 0 THEN
  656. rslt = 0
  657. GOTO ext
  658. END IF
  659. END IF
  660. IF billtype = 1 And li_outtype > 0 THEN
  661. IF thflag = 0 THEN
  662. IF uo_out.Save(False,arg_msg) = 0 THEN
  663. arg_msg = '收货单明细自动出仓单,'+arg_msg
  664. rslt = 0
  665. GOTO ext
  666. END IF
  667. //2.原事务审核出仓单
  668. IF uo_out.getinfo(scid,uo_out.outwareid,arg_msg) = 0 THEN
  669. arg_msg = '收货单明细自动出仓单,'+arg_msg
  670. rslt = 0
  671. GOTO ext
  672. END IF
  673. IF uo_out.auditing(False,arg_msg) = 0 THEN
  674. arg_msg = '收货单明细自动出仓单,'+arg_msg
  675. rslt = 0
  676. GOTO ext
  677. END IF
  678. //进仓
  679. IF uo_in.newbegin(scid,25,arg_msg) = 0 THEN
  680. rslt = 0
  681. GOTO ext
  682. END IF
  683. uo_in.relid = inwareid
  684. uo_in.indate = indate
  685. uo_in.inrep = inrep
  686. uo_in.part = inwarecode
  687. uo_in.dscrp = dscrp
  688. uo_in.sptname = '收货单包件自动进仓'
  689. uo_in.storageid = storageid
  690. li_ifvqty = 0
  691. FOR i = 1 To it_mxbt_mx
  692. FOR k = 1 To it_mxbt
  693. IF inwaremx[k].printid = inwaremx_mx[i].printid THEN
  694. IF inwaremx[k].mtrlid = inwaremx_mx[i].mtrlid And &
  695. inwaremx[k].status = inwaremx_mx[i].status And &
  696. inwaremx[k].woodcode = inwaremx_mx[i].woodcode And &
  697. inwaremx[k].pcode = inwaremx_mx[i].pcode THEN
  698. li_ifvqty = 1
  699. ELSE
  700. li_ifvqty = 0
  701. END IF
  702. EXIT
  703. END IF
  704. NEXT
  705. s_mx.printid = inwaremx_mx[i].mxprintid
  706. s_mx.mtrlid = inwaremx_mx[i].mtrlid
  707. s_mx.mtrlcode = inwaremx_mx[i].mtrlcode
  708. s_mx.plancode = inwaremx_mx[i].plancode
  709. s_mx.status = inwaremx_mx[i].status
  710. s_mx.uqty = inwaremx_mx[i].qty
  711. s_mx.enprice = inwaremx_mx[i].fprice
  712. s_mx.rebate = 1
  713. s_mx.mxdscrp = inwaremx_mx[i].mxdscrp
  714. s_mx.jgprice = 0
  715. s_mx.relid = 0
  716. s_mx.ifrel = 0
  717. s_mx.woodcode = inwaremx_mx[i].woodcode
  718. s_mx.pcode = inwaremx_mx[i].pcode
  719. s_mx.sptid = inwaremx_mx[i].sptid
  720. s_mx.unit = inwaremx_mx[i].unit
  721. s_mx.rate = 1
  722. s_mx.qty = inwaremx_mx[i].qty
  723. s_mx.relprintid = 0
  724. s_mx.checkqty = 0
  725. s_mx.result = ''
  726. s_mx.waredscrp = ''
  727. s_mx.relbillid = 0
  728. s_mx.relbillprintid = 0
  729. s_mx.mtrlcuscode = inwaremx_mx[i].mtrlcuscode
  730. s_mx.Location = inwaremx_mx[i].Location
  731. s_mx.deliqty = inwaremx_mx[i].qty
  732. s_mx.tax = 0
  733. s_mx.ifvqty = li_ifvqty
  734. s_mx.ifnotinout = inwaremx_mx[i].ifnotinout
  735. IF uo_in.acceptmx(s_mx, arg_msg) = 0 THEN
  736. arg_msg = '收货单包件自动进仓单,行:'+String(i)+','+arg_msg
  737. rslt = 0
  738. GOTO ext
  739. END IF
  740. // IF uo_in.acceptmx(inwaremx_mx[i].mxprintid,&
  741. // inwaremx_mx[i].mtrlid,&
  742. // inwaremx_mx[i].mtrlcode,&
  743. // inwaremx_mx[i].plancode,&
  744. // inwaremx_mx[i].status,&
  745. // inwaremx_mx[i].qty,&
  746. // inwaremx_mx[i].fprice,&
  747. // 1,&
  748. // inwaremx_mx[i].mxdscrp,&
  749. // arg_msg,&
  750. // 0,0,0,inwaremx_mx[i].woodcode,&
  751. // inwaremx_mx[i].pcode,inwaremx_mx[i].sptid,&
  752. // inwaremx_mx[i].unit,1,&
  753. // inwaremx_mx[i].qty,0,0,'','',0,0,&
  754. // inwaremx_mx[i].mtrlcuscode,inwaremx_mx[i].Location,&
  755. // inwaremx_mx[i].qty,&
  756. // 0) = 0 THEN
  757. // arg_msg = '收货单包件自动进仓单,行:'+String(i)+','+arg_msg
  758. // rslt = 0
  759. // GOTO ext
  760. // END IF
  761. NEXT
  762. IF uo_in.Save(False,arg_msg) = 0 THEN
  763. arg_msg = '收货单包件自动进仓单,'+arg_msg
  764. rslt = 0
  765. GOTO ext
  766. END IF
  767. IF uo_in.getinfo(scid,uo_in.inwareid,arg_msg) = 0 THEN
  768. arg_msg = '收货单包件自动进仓单,'+arg_msg
  769. rslt = 0
  770. GOTO ext
  771. END IF
  772. IF uo_in.auditing(False,arg_msg) = 0 THEN
  773. arg_msg = '收货单包件自动进仓单,'+arg_msg
  774. rslt = 0
  775. GOTO ext
  776. END IF
  777. ELSE
  778. //进仓
  779. IF uo_in_th.newbegin(scid,25,arg_msg) = 0 THEN
  780. rslt = 0
  781. GOTO ext
  782. END IF
  783. uo_in_th.relid = inwareid
  784. uo_in_th.indate = indate
  785. uo_in_th.inrep = inrep
  786. uo_in_th.part = inwarecode
  787. uo_in_th.dscrp = dscrp
  788. uo_in_th.sptname = '退货单包件自动负数进仓'
  789. uo_in_th.storageid = storageid
  790. FOR i = 1 To it_mxbt_mx
  791. FOR k = 1 To it_mxbt
  792. IF inwaremx[k].printid = inwaremx_mx[i].printid THEN
  793. IF inwaremx[k].mtrlid = inwaremx_mx[i].mtrlid And &
  794. inwaremx[k].status = inwaremx_mx[i].status And &
  795. inwaremx[k].woodcode = inwaremx_mx[i].woodcode And &
  796. inwaremx[k].pcode = inwaremx_mx[i].pcode THEN
  797. li_ifvqty = 1
  798. ELSE
  799. li_ifvqty = 0
  800. END IF
  801. EXIT
  802. END IF
  803. NEXT
  804. s_mx.printid = inwaremx_mx[i].mxprintid
  805. s_mx.mtrlid = inwaremx_mx[i].mtrlid
  806. s_mx.mtrlcode = inwaremx_mx[i].mtrlcode
  807. s_mx.plancode = inwaremx_mx[i].plancode
  808. s_mx.status = inwaremx_mx[i].status
  809. s_mx.uqty = inwaremx_mx[i].qty
  810. s_mx.enprice = inwaremx_mx[i].fprice
  811. s_mx.rebate = 1
  812. s_mx.mxdscrp = inwaremx_mx[i].mxdscrp
  813. s_mx.jgprice = 0
  814. s_mx.relid = 0
  815. s_mx.ifrel = 0
  816. s_mx.woodcode = inwaremx_mx[i].woodcode
  817. s_mx.pcode = inwaremx_mx[i].pcode
  818. s_mx.sptid = inwaremx_mx[i].sptid
  819. s_mx.unit = inwaremx_mx[i].unit
  820. s_mx.rate = 1
  821. s_mx.qty = inwaremx_mx[i].qty
  822. s_mx.relprintid = 0
  823. s_mx.checkqty = 0
  824. s_mx.result = ''
  825. s_mx.waredscrp = ''
  826. s_mx.relbillid = 0
  827. s_mx.relbillprintid = 0
  828. s_mx.mtrlcuscode = inwaremx_mx[i].mtrlcuscode
  829. s_mx.Location = inwaremx_mx[i].Location
  830. s_mx.deliqty = inwaremx_mx[i].qty
  831. s_mx.ifnotinout = inwaremx_mx[i].ifnotinout
  832. s_mx.tax = 0
  833. s_mx.ifvqty = li_ifvqty
  834. IF uo_in_th.acceptmx(s_mx, arg_msg) = 0 THEN
  835. arg_msg = '退货单包件自动负数进仓单,行:'+String(i)+','+arg_msg
  836. rslt = 0
  837. GOTO ext
  838. END IF
  839. // IF uo_in_th.acceptmx(inwaremx_mx[i].mxprintid,&
  840. // inwaremx_mx[i].mtrlid,&
  841. // inwaremx_mx[i].mtrlcode,&
  842. // inwaremx_mx[i].plancode,&
  843. // inwaremx_mx[i].status,&
  844. // inwaremx_mx[i].qty,&
  845. // inwaremx_mx[i].fprice,&
  846. // 1,&
  847. // inwaremx_mx[i].mxdscrp,&
  848. // arg_msg,&
  849. // 0,0,0,inwaremx_mx[i].woodcode,&
  850. // inwaremx_mx[i].pcode,inwaremx_mx[i].sptid,&
  851. // inwaremx_mx[i].unit,1,&
  852. // inwaremx_mx[i].qty,0,0,'','',0,0,&
  853. // inwaremx_mx[i].mtrlcuscode,inwaremx_mx[i].Location,&
  854. // inwaremx_mx[i].qty,&
  855. // 0) = 0 THEN
  856. // arg_msg = '退货单包件自动负数进仓单,行:'+String(i)+','+arg_msg
  857. // rslt = 0
  858. // GOTO ext
  859. // END IF
  860. NEXT
  861. IF uo_in_th.Save(False,arg_msg) = 0 THEN
  862. arg_msg = '退货单包件自动负数进仓单,'+ arg_msg
  863. rslt = 0
  864. GOTO ext
  865. END IF
  866. IF uo_in_th.getinfo(scid,uo_in_th.inwareid,arg_msg) = 0 THEN
  867. arg_msg = '退货单包件自动负数进仓单,'+ arg_msg
  868. rslt = 0
  869. GOTO ext
  870. END IF
  871. IF uo_in_th.auditing(False,arg_msg) = 0 THEN
  872. arg_msg = '退货单包件自动负数进仓单,'+ arg_msg
  873. rslt = 0
  874. GOTO ext
  875. END IF
  876. END IF
  877. END IF
  878. IF billtype = 27 THEN
  879. FOR i = 1 To it_mxbt_mx
  880. IF uof_update_ptqty(scid,&
  881. inwaremx_mx[i].ptinwareid,&
  882. inwaremx_mx[i].ptprintid,&
  883. inwaremx_mx[i].qty,arg_msg,False) = 0 THEN
  884. arg_msg = '单据配套明细,行:'+String(i)+','+arg_msg
  885. rslt = 0
  886. GOTO ext
  887. END IF
  888. NEXT
  889. END IF
  890. //更新条码
  891. IF billtype = 1 And ( li_outtype = 2 Or li_outtype = 3 ) And mx_barcode_cnt > 0 THEN
  892. IF uof_p_barcode(1,arg_msg,arg_s_mxbarcode_fp) = 0 THEN
  893. rslt = 0
  894. GOTO ext
  895. END IF
  896. END IF
  897. //yyx20120215
  898. //库存分配,仓库包件或条码出仓,用包件明细分配
  899. Long ll_inwaremx_relid,ll_inwaremx_relprintid
  900. Long ll_orderid
  901. Decimal ld_mx_cost
  902. String ls_mx_mtrlwaredscrp
  903. IF billtype = 1 And li_storagetype = 1 And thflag = 0 And li_outtype > 0 THEN
  904. FOR i = 1 To it_mxbt_mx
  905. ll_inwaremx_relid = 0
  906. SELECT relid,relprintid,cost,waredscrp
  907. INTO :ll_inwaremx_relid,:ll_inwaremx_relprintid,:ld_mx_cost,:ls_mx_mtrlwaredscrp
  908. FROM u_inwaremx
  909. WHERE scid = :scid
  910. AND inwareid = :inwareid
  911. And printid = :inwaremx_mx[i].printid Using commit_transaction;
  912. IF commit_transaction.SQLCode <> 0 THEN
  913. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询对应采购订单明细失败,'+commit_transaction.SQLErrText
  914. rslt = 0
  915. GOTO ext
  916. END IF
  917. IF ll_inwaremx_relid > 0 THEN
  918. SELECT u_buytask.billtype INTO :ll_billtype
  919. FROM u_buytask
  920. WHERE u_buytask.taskid = :ll_inwaremx_relid
  921. And u_buytask.scid = :scid Using commit_transaction;
  922. IF commit_transaction.SQLCode <> 0 THEN
  923. rslt = 0
  924. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询对应采购订单的订单类型失败'+'~n'+commit_transaction.SQLErrText
  925. GOTO ext
  926. END IF
  927. ELSE
  928. ll_billtype = 0
  929. END IF
  930. //取库存信息
  931. ll_mtrlwareid_ref = 0
  932. IF inwaremx_mx[i].ifpack <> 2 And inwaremx_mx[i].ifpackpro <> 2 And inwaremx_mx[i].ifpackpro <> 4 THEN
  933. ll_sptid = 0
  934. ls_mtrlcuscode = ''
  935. ELSE
  936. ll_sptid = inwaremx_mx[i].sptid
  937. ls_mtrlcuscode = inwaremx_mx[i].mtrlcuscode
  938. END IF
  939. IF uof_ref_mtrlwareid(scid,storageid,inwaremx_mx[i].mtrlid,&
  940. inwaremx_mx[i].status,inwaremx_mx[i].woodcode,inwaremx_mx[i].pcode,inwaremx_mx[i].plancode,&
  941. inwaremx_mx[i].Location,ll_sptid,ls_mtrlcuscode,ll_mtrlwareid_ref,arg_msg) = 0 THEN
  942. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询库存id失败,'+arg_msg
  943. rslt = 0
  944. GOTO ext
  945. END IF
  946. //yyx2012-9-29返回计算可装数库存id数组
  947. // If ( inwaremx_mx[i].ifpack = 1 Or inwaremx_mx[i].ifpack = 2 Or inwaremx_mx[i].ifpackpro = 3 Or inwaremx_mx[i].ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN
  948. // IF uo_cmpl_p.uof_ref_mtrlwarid_array(inwaremx_mx[i].mtrlid,inwaremx_mx[i].plancode,ls_mtrlcuscode,storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  949. // rslt = 0
  950. // GOTO ext
  951. // END IF
  952. // END IF
  953. //
  954. //取分配计划
  955. arg_s_arr = 0
  956. arg_s_ap = arg_s_ap_null
  957. IF inwaremx_mx[i].iffp = 0 THEN //旧模式
  958. IF billtype = 1 And ll_billtype = 1 THEN
  959. SELECT u_buyTaskMx.orderid,
  960. u_buyTaskMx.taskmxprintid
  961. INTO :ll_relbillid,
  962. :ll_relprintid
  963. FROM u_buyTaskMx
  964. WHERE u_buyTaskMx.scid = :scid
  965. AND u_buyTaskMx.taskid = :ll_inwaremx_relid
  966. AND u_buyTaskMx.printid = :ll_inwaremx_relprintid
  967. And u_buyTaskMx.orderid > 0 Using commit_transaction;
  968. IF commit_transaction.SQLCode = -1 THEN
  969. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询成品订单相关销售订单资料失败,'+commit_transaction.SQLErrText
  970. rslt = 0
  971. GOTO ext
  972. ELSEIF commit_transaction.SQLCode = 100 THEN
  973. ll_relbillid = 0
  974. ll_relprintid = 0
  975. END IF
  976. IF ll_relbillid > 0 THEN //成品申购单找到销售订单
  977. arg_s_arr++
  978. arg_s_ap.planid[arg_s_arr] = 0
  979. arg_s_ap.assigntype[arg_s_arr] = 1
  980. arg_s_ap.scid[arg_s_arr] = scid
  981. arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref
  982. arg_s_ap.relbillid[arg_s_arr] = ll_relbillid
  983. arg_s_ap.relprintid[arg_s_arr] = ll_relprintid
  984. arg_s_ap.fpgrade[arg_s_arr] = 2
  985. arg_s_ap.notassignqty[arg_s_arr] = inwaremx_mx[i].qty
  986. ELSE
  987. IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx_mx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  988. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',取分配计划失败,'+arg_msg
  989. rslt = 0
  990. GOTO ext
  991. END IF
  992. END IF
  993. ELSEIF billtype = 1 And ll_inwaremx_relid > 0 And ll_billtype = 0 And inwaremx_mx[i].ifpack > 0 THEN //yyx2013-8-31 //材料采购订单采购包件
  994. SELECT u_buyTaskMx.orderid
  995. INTO :ll_orderid
  996. FROM u_buyTaskMx
  997. WHERE u_buyTaskMx.scid = :scid
  998. AND u_buyTaskMx.taskid = :ll_inwaremx_relid
  999. AND u_buyTaskMx.printid = :ll_inwaremx_relprintid
  1000. And u_buyTaskMx.orderid > 0 Using commit_transaction;
  1001. IF commit_transaction.SQLCode = -1 THEN
  1002. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询材料订单相关主生产计划资料失败,'+commit_transaction.SQLErrText
  1003. rslt = 0
  1004. GOTO ext
  1005. ELSEIF commit_transaction.SQLCode = 100 THEN
  1006. ll_orderid = 0
  1007. END IF
  1008. IF ll_orderid > 0 THEN
  1009. SELECT u_order_ml.taskid,
  1010. u_order_ml.taskmxid
  1011. INTO :ll_relbillid,
  1012. :ll_relprintid
  1013. FROM u_order_ml
  1014. WHERE u_order_ml.scid = :scid
  1015. And u_order_ml.orderid = :ll_orderid Using commit_transaction;
  1016. IF commit_transaction.SQLCode = -1 THEN
  1017. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',查询材料采购订单对应主生产计划相关销售订单资料失败,'+commit_transaction.SQLErrText
  1018. rslt = 0
  1019. GOTO ext
  1020. ELSEIF commit_transaction.SQLCode = 100 THEN
  1021. ll_relbillid = 0
  1022. ll_relprintid = 0
  1023. END IF
  1024. ELSE
  1025. ll_relbillid = 0
  1026. ll_relprintid = 0
  1027. END IF
  1028. IF ll_relbillid > 0 THEN //找到销售订单
  1029. arg_s_arr++
  1030. arg_s_ap.planid[arg_s_arr] = 0
  1031. arg_s_ap.assigntype[arg_s_arr] = 1
  1032. arg_s_ap.scid[arg_s_arr] = scid
  1033. arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref
  1034. arg_s_ap.relbillid[arg_s_arr] = ll_relbillid
  1035. arg_s_ap.relprintid[arg_s_arr] = ll_relprintid
  1036. arg_s_ap.fpgrade[arg_s_arr] = 2
  1037. arg_s_ap.notassignqty[arg_s_arr] = inwaremx_mx[i].qty
  1038. ELSE
  1039. IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx_mx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  1040. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',取分配计划失败,'+arg_msg
  1041. rslt = 0
  1042. GOTO ext
  1043. END IF
  1044. END IF
  1045. ELSE
  1046. IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx_mx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  1047. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',取分配计划失败'+arg_msg
  1048. rslt = 0
  1049. GOTO ext
  1050. END IF
  1051. END IF
  1052. ELSE //新库存分配模式
  1053. IF ll_inwaremx_relid > 0 And ll_inwaremx_relprintid > 0 THEN
  1054. IF uof_ref_assign_plan_plankind(scid,ll_mtrlwareid_ref,2,ll_inwaremx_relid,ll_inwaremx_relprintid,&
  1055. inwaremx_mx[i].mtrlid,inwaremx_mx[i].status,inwaremx_mx[i].woodcode,inwaremx_mx[i].pcode,inwaremx_mx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  1056. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',取分配计划失败'+arg_msg
  1057. rslt = 0
  1058. GOTO ext
  1059. END IF
  1060. END IF
  1061. END IF
  1062. FOR j = 1 To UpperBound(arg_s_ap.planid)
  1063. //检查是否超数量yyx20120424
  1064. ld_fpqty = 0
  1065. IF arg_s_ap.assigntype[j] = 1 THEN
  1066. ld_saletask_notfpqty = 0
  1067. IF f_ref_saletask_notfpqty(scid,arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],inwaremx_mx[i].mtrlid,inwaremx_mx[i].status,ld_saletask_notfpqty,arg_msg) = 0 THEN
  1068. arg_msg = '包件明细行:'+String(i)+','+arg_msg
  1069. rslt = 0
  1070. GOTO ext
  1071. END IF
  1072. IF arg_s_ap.notassignqty[j] > ld_saletask_notfpqty THEN
  1073. ld_fpqty = ld_saletask_notfpqty
  1074. ELSE
  1075. ld_fpqty = arg_s_ap.notassignqty[j]
  1076. END IF
  1077. ELSE
  1078. ld_fpqty = arg_s_ap.notassignqty[j]
  1079. END IF
  1080. ////////////////////////////// //
  1081. IF ld_fpqty > 0 THEN
  1082. IF uo_ma.uof_assign_add(arg_s_ap.scid[j],arg_s_ap.mtrlwareid[j],&
  1083. arg_s_ap.assigntype[j],arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],&
  1084. ld_fpqty,ld_mx_cost,ls_mx_mtrlwaredscrp,ls_mtrlcuscode,&
  1085. inwarecode,inwaremx_mx[i].printid,arg_s_ap.fpgrade[j],publ_operator,arg_msg,False) = 0 THEN
  1086. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',库存分配失败,'+arg_msg
  1087. rslt = 0
  1088. GOTO ext
  1089. END IF
  1090. END IF
  1091. IF arg_s_ap.planid[j] > 0 THEN
  1092. IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],arg_s_ap.notassignqty[j],&
  1093. inwarecode,inwaremx_mx[i].printid,arg_msg,False) = 0 THEN
  1094. arg_msg = '包件明细行:'+String(inwaremx_mx[i].mxprintid)+',对应收货明细行:'+String(inwaremx_mx[i].printid)+',更新分配计划已分配数失败,'+arg_msg
  1095. rslt = 0
  1096. GOTO ext
  1097. END IF
  1098. END IF
  1099. NEXT
  1100. NEXT
  1101. END IF
  1102. //yyx20120215_end
  1103. flag = 1
  1104. ext:
  1105. IF rslt = 0 THEN
  1106. ROLLBACK Using commit_transaction;
  1107. ELSEIF rslt = 1 And arg_ifcommit THEN
  1108. COMMIT Using commit_transaction;
  1109. END IF
  1110. Destroy uo_task
  1111. Destroy uo_sptch
  1112. Destroy uo_sptprice
  1113. Destroy uo_ma
  1114. Destroy uo_in
  1115. Destroy uo_in_th
  1116. Destroy uo_out
  1117. Destroy uo_pro
  1118. RETURN rslt
  1119. end function
  1120. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  1121. Long cnt = 0,i,j,mx_barcode_cnt
  1122. Long ll_billtype
  1123. Long ll_balctype
  1124. Long ll_sptid
  1125. String ls_mtrlcuscode
  1126. String ls_storagename
  1127. Int li_outtype,li_storagetype
  1128. Long ll_inwareid_rel,ll_outwareid_rel
  1129. String ls_inwarecode_rel,ls_outwarecode_rel
  1130. Decimal ld_cost
  1131. s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null
  1132. s_inwaremx_assign arg_s_a,arg_s_a_null
  1133. s_inwaremx_barcode_fp arg_s_mxbarcode_fp
  1134. uo_sqlpro uo_pro
  1135. uo_pro = Create uo_sqlpro
  1136. uo_pro.commit_transaction = commit_transaction
  1137. uo_mtrlware_assign uo_ma
  1138. uo_ma = Create uo_mtrlware_assign
  1139. uo_ma.commit_transaction = commit_transaction
  1140. uo_ma.ib_ifinware_audit_do = True
  1141. uo_cmpl_packpro uo_cmpl_p
  1142. uo_cmpl_p = Create uo_cmpl_packpro
  1143. uo_cmpl_p.commit_transaction = commit_transaction
  1144. DateTime null_dt
  1145. SetNull(null_dt)
  1146. String ls_mtrlname
  1147. IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN
  1148. rslt = 0
  1149. GOTO ext
  1150. END IF
  1151. IF uo_option_buy_sptprice_sec = -1000 THEN
  1152. rslt = 0
  1153. arg_msg = '选项:[168]采购收货单财审更新供应商最新价,读取初始默认值失败,操作取消!'
  1154. GOTO ext
  1155. END IF
  1156. IF uo_option_check_buyin = -1000 THEN
  1157. rslt = 0
  1158. arg_msg = '选项:[130]采购先质检后进仓,读取初始默认值失败,操作取消!'
  1159. GOTO ext
  1160. END IF
  1161. uo_buytask uo_task
  1162. uo_task = Create uo_buytask
  1163. uo_task.commit_transaction = commit_transaction
  1164. uo_sptcheck uo_sptch
  1165. uo_sptch = Create uo_sptcheck
  1166. uo_spt_price uo_sptprice
  1167. uo_sptprice = Create uo_spt_price
  1168. uo_inware uo_in
  1169. uo_outware uo_out
  1170. uo_in = Create uo_inware
  1171. uo_in.commit_transaction = sqlca
  1172. uo_in.if_getid_ture = False
  1173. uo_out = Create uo_outware
  1174. uo_out.commit_transaction = sqlca
  1175. uo_out.if_getid_ture = False
  1176. IF storageid = 0 THEN
  1177. rslt = 0
  1178. arg_msg = '没有正确的仓库'
  1179. GOTO ext
  1180. END IF
  1181. IF billtype <> 9 THEN
  1182. IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  1183. rslt = 0
  1184. GOTO ext
  1185. END IF
  1186. END IF
  1187. SELECT storagename,outtype,storagetype
  1188. INTO :ls_storagename,:li_outtype,:li_storagetype
  1189. FROM u_storage
  1190. Where storageid = :storageid Using commit_transaction ;
  1191. IF commit_transaction.SQLCode <> 0 THEN
  1192. rslt = 0
  1193. arg_msg = "查询操作失败,仓库"
  1194. GOTO ext
  1195. END IF
  1196. //检查是否有该仓库的建立权限
  1197. IF sys_user_storagestr_audit <> '0' THEN
  1198. IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN
  1199. rslt = 0
  1200. arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许撤审该仓库的单据'
  1201. GOTO ext
  1202. END IF
  1203. END IF
  1204. //
  1205. IF inwareid = 0 THEN
  1206. rslt = 0
  1207. arg_msg = "没有撤审对象"
  1208. GOTO ext
  1209. END IF
  1210. IF ctmint > 0 THEN
  1211. arg_msg = '单据已截数,不能操作'
  1212. rslt = 0
  1213. GOTO ext
  1214. END IF
  1215. IF balcflag = 1 THEN
  1216. rslt = 0
  1217. arg_msg = "单据已经结存,不能撤审"
  1218. GOTO ext
  1219. END IF
  1220. IF flag = 0 THEN
  1221. rslt = 0
  1222. arg_msg = "单据还未审核"
  1223. GOTO ext
  1224. END IF
  1225. IF secflag = 1 THEN
  1226. rslt = 0
  1227. arg_msg = "单据已经财务审核"
  1228. GOTO ext
  1229. END IF
  1230. IF li_outtype = 1 THEN
  1231. cnt = 0
  1232. SELECT count(*) INTO :cnt
  1233. FROM u_inwaremx_mx_barcode
  1234. WHERE u_inwaremx_mx_barcode.inwareid = :inwareid
  1235. AND u_inwaremx_mx_barcode.scid = :scid
  1236. AND u_inwaremx_mx_barcode.billtype = 1
  1237. Using commit_transaction;
  1238. IF commit_transaction.SQLCode <> 0 THEN
  1239. rslt = 0
  1240. arg_msg = "查询操作失败,进仓单条码明细数量,"+commit_transaction.SQLErrText
  1241. GOTO ext
  1242. END IF
  1243. IF cnt > 0 THEN
  1244. arg_msg = '仓库设了包件出仓,但单据有条码明细,操作取消,请检查仓库的出仓模式是否设置正确'
  1245. rslt = 0
  1246. GOTO ext
  1247. END IF
  1248. END IF
  1249. //撤审相关自动进出仓
  1250. IF billtype = 1 And li_outtype > 0 And thflag = 0 THEN
  1251. //yyx_2013-5-17 //取消包件明细分配
  1252. IF li_storagetype = 1 THEN
  1253. FOR i = 1 To it_mxbt_mx
  1254. //取消分配
  1255. arg_s_a = arg_s_a_null
  1256. IF uof_ref_assign_cancel(inwarecode,inwaremx_mx[i].printid,arg_s_a,arg_msg) = 0 THEN
  1257. arg_msg = '行:'+String(i)+','+arg_msg
  1258. rslt = 0
  1259. GOTO ext
  1260. END IF
  1261. FOR j = 1 To UpperBound(arg_s_a.assignid)
  1262. IF uo_ma.uof_assign_del(arg_s_a.assignid[j],arg_s_a.assignqty[j],&
  1263. arg_msg,False) = 0 THEN
  1264. arg_msg = '行:'+String(i)+','+arg_msg
  1265. rslt = 0
  1266. GOTO ext
  1267. END IF
  1268. NEXT
  1269. //取消分配计划
  1270. arg_s_ap = arg_s_ap_null
  1271. IF uof_ref_assign_plan_cancel(inwarecode,inwaremx_mx[i].printid,arg_s_ap,arg_msg) = 0 THEN
  1272. arg_msg = '行:'+String(i)+','+arg_msg
  1273. rslt = 0
  1274. GOTO ext
  1275. END IF
  1276. FOR j = 1 To UpperBound(arg_s_ap.planid)
  1277. IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],0 - arg_s_ap.notassignqty[j],&
  1278. inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN
  1279. arg_msg = '行:'+String(i)+','+arg_msg
  1280. rslt = 0
  1281. GOTO ext
  1282. END IF
  1283. NEXT
  1284. NEXT
  1285. END IF
  1286. //yyx_2013-5-17_end //取消包件明细分配
  1287. SELECT count(*)
  1288. INTO :cnt
  1289. FROM u_inware
  1290. WHERE scid = :scid
  1291. AND relid = :inwareid
  1292. And billtype = 25 Using commit_transaction;
  1293. IF commit_transaction.SQLCode <> 0 THEN
  1294. rslt = 0
  1295. arg_msg = "因网络或其它原因导致查询相关收货包件明细进仓单操作失败"+"~n"+commit_transaction.SQLErrText
  1296. GOTO ext
  1297. END IF
  1298. IF cnt > 0 THEN
  1299. SELECT inwareid,inwarecode
  1300. INTO :ll_inwareid_rel,:ls_inwarecode_rel
  1301. FROM u_inware
  1302. WHERE scid = :scid
  1303. AND relid = :inwareid
  1304. And billtype = 25 Using commit_transaction;
  1305. IF commit_transaction.SQLCode <> 0 THEN
  1306. rslt = 0
  1307. arg_msg = "因网络或其它原因导致查询相关包件进仓单操作失败"+"~n"+commit_transaction.SQLErrText
  1308. GOTO ext
  1309. END IF
  1310. IF uo_in.getinfo(scid,ll_inwareid_rel,arg_msg) = 0 THEN
  1311. arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg
  1312. rslt = 0
  1313. GOTO ext
  1314. END IF
  1315. IF uo_in.c_auditing(False,arg_msg) = 0 THEN
  1316. arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg
  1317. rslt = 0
  1318. GOTO ext
  1319. END IF
  1320. IF uo_in.del(scid,ll_inwareid_rel,arg_msg,False) = 0 THEN
  1321. arg_msg = '相关进仓单:'+ls_inwarecode_rel+','+arg_msg
  1322. rslt = 0
  1323. GOTO ext
  1324. END IF
  1325. END IF
  1326. //出仓
  1327. SELECT count(*)
  1328. INTO :cnt
  1329. FROM u_outware
  1330. WHERE scid = :scid
  1331. AND relid = :inwareid
  1332. And billtype = 23 Using commit_transaction;
  1333. IF commit_transaction.SQLCode <> 0 THEN
  1334. rslt = 0
  1335. arg_msg = "因网络或其它原因导致查询相关收货明细自动出仓单操作失败"+"~n"+commit_transaction.SQLErrText
  1336. GOTO ext
  1337. END IF
  1338. IF cnt > 0 THEN
  1339. SELECT outwareid,outwarecode
  1340. INTO :ll_outwareid_rel,:ls_outwarecode_rel
  1341. FROM u_outware
  1342. WHERE scid = :scid
  1343. AND relid = :inwareid
  1344. And billtype = 23 Using commit_transaction;
  1345. IF commit_transaction.SQLCode <> 0 THEN
  1346. rslt = 0
  1347. arg_msg = "因网络或其它原因导致查询相关收货明细自动出仓单操作失败"+"~n"+commit_transaction.SQLErrText
  1348. GOTO ext
  1349. END IF
  1350. IF uo_out.getinfo(scid,ll_outwareid_rel,arg_msg) = 0 THEN
  1351. arg_msg = '相关进仓单:'+ls_outwarecode_rel+','+arg_msg
  1352. rslt = 0
  1353. GOTO ext
  1354. END IF
  1355. IF uo_out.c_auditing(False,arg_msg) = 0 THEN
  1356. arg_msg = '相关进仓单:'+ls_outwarecode_rel+','+arg_msg
  1357. rslt = 0
  1358. GOTO ext
  1359. END IF
  1360. IF uo_out.del(scid,ll_outwareid_rel,0,arg_msg,False) = 0 THEN
  1361. arg_msg = '相关进仓单:'+ls_outwarecode_rel+','+arg_msg
  1362. rslt = 0
  1363. GOTO ext
  1364. END IF
  1365. END IF
  1366. END IF
  1367. UPDATE u_inware
  1368. SET auditingrep = '',
  1369. auditingdate = :null_dt,
  1370. flag = 0
  1371. WHERE u_inware.inwareid = :inwareid
  1372. AND flag = 1
  1373. AND secflag = 0
  1374. And scid = :scid Using commit_transaction;
  1375. IF commit_transaction.SQLCode <> 0 THEN
  1376. rslt = 0
  1377. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  1378. GOTO ext
  1379. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1380. rslt = 0
  1381. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1382. GOTO ext
  1383. END IF
  1384. FOR i = 1 To it_mxbt
  1385. //yyx20100814
  1386. IF billtype = 1 THEN
  1387. //yyx20100814
  1388. //库存分配
  1389. IF billtype = 1 And li_storagetype = 1 And li_outtype = 0 And thflag = 0 THEN
  1390. //取消分配
  1391. arg_s_a = arg_s_a_null
  1392. IF uof_ref_assign_cancel(inwarecode,inwaremx[i].printid,arg_s_a,arg_msg) = 0 THEN
  1393. arg_msg = '行:'+String(i)+','+arg_msg
  1394. rslt = 0
  1395. GOTO ext
  1396. END IF
  1397. FOR j = 1 To UpperBound(arg_s_a.assignid)
  1398. IF uo_ma.uof_assign_del(arg_s_a.assignid[j],arg_s_a.assignqty[j],&
  1399. arg_msg,False) = 0 THEN
  1400. arg_msg = '行:'+String(i)+','+arg_msg
  1401. rslt = 0
  1402. GOTO ext
  1403. END IF
  1404. NEXT
  1405. //取消分配计划
  1406. arg_s_ap = arg_s_ap_null
  1407. IF uof_ref_assign_plan_cancel(inwarecode,inwaremx[i].printid,arg_s_ap,arg_msg) = 0 THEN
  1408. arg_msg = '行:'+String(i)+','+arg_msg
  1409. rslt = 0
  1410. GOTO ext
  1411. END IF
  1412. FOR j = 1 To UpperBound(arg_s_ap.planid)
  1413. IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],0 - arg_s_ap.notassignqty[j],&
  1414. inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN
  1415. arg_msg = '行:'+String(i)+','+arg_msg
  1416. rslt = 0
  1417. GOTO ext
  1418. END IF
  1419. NEXT
  1420. END IF
  1421. //yyx20100814_end
  1422. IF li_storagetype = 1 And inwaremx[i].ifpack <> 2 And inwaremx[i].ifpackpro <> 2 And inwaremx[i].ifpackpro <> 4 THEN
  1423. ll_sptid = 0
  1424. ls_mtrlcuscode = ''
  1425. ELSE
  1426. ll_sptid = inwaremx[i].sptid
  1427. ls_mtrlcuscode = inwaremx[i].mtrlcuscode
  1428. END IF
  1429. //yyx20100814_end
  1430. IF sys_option_inout_procedure = 0 THEN
  1431. ld_cost = inwaremx[i].cost
  1432. IF thflag = 1 And uo_option_buyth_use_price_update_wareamt = 1 THEN
  1433. ld_cost = inwaremx[i].price
  1434. END IF
  1435. IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,&
  1436. storageid,inwaremx[i].plancode,inwaremx[i].status,&
  1437. 0 - inwaremx[i].qty,0 - inwaremx[i].uqty,ld_cost,inwaremx[i].planprice,&
  1438. ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,&
  1439. inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,&
  1440. inwaremx[i].mtrlwaredscrp,inwaremx[i].ifvqty,arg_msg) = 0 THEN
  1441. arg_msg = '更新行:'+String(i)+','+arg_msg
  1442. rslt = 0
  1443. GOTO ext
  1444. END IF
  1445. ELSE
  1446. IF uo_pro.p_inware_update_mtrlware(scid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,&
  1447. inwaremx[i].mtrlcode,storageid,inwaremx[i].plancode,inwaremx[i].status,0 - inwaremx[i].qty,&
  1448. 0 - inwaremx[i].uqty,inwaremx[i].cost,inwaremx[i].planprice,ll_sptid,inwaremx[i].dxflag,&
  1449. inwaremx[i].woodcode,inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,inwaremx[i].mtrlwaredscrp,arg_msg) = 0 THEN
  1450. arg_msg = '更新行:'+String(i)+','+arg_msg
  1451. rslt = 0
  1452. GOTO ext
  1453. END IF
  1454. END IF
  1455. END IF
  1456. IF thflag = 0 Or (thflag = 1 And inwaremx[i].Thptype = 1) THEN
  1457. //更新合同完成数量
  1458. If (billtype = 1 Or billtype = 27 ) And inwaremx[i].relid > 0 THEN
  1459. IF uo_task.addmxcmpl(scid,inwaremx[i].relid,inwaremx[i].relprintid,&
  1460. 0 - inwaremx[i].uqty,arg_msg,False) <> 1 THEN
  1461. arg_msg = '更新行:'+String(i)+','+arg_msg
  1462. rslt = 0
  1463. GOTO ext
  1464. END IF
  1465. // IF uo_task.trycmplbuytask(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN
  1466. // arg_msg = '更新行:'+String(i)+','+arg_msg
  1467. // rslt = 0
  1468. // GOTO ext
  1469. // END IF
  1470. END IF
  1471. ELSEIF inwaremx[i].Thptype = 0 THEN //不需处理
  1472. // Nothing to Done
  1473. ELSEIF inwaremx[i].Thptype = 2 THEN //新建订单
  1474. //单独函数处理 uof_destroy_buytask
  1475. END IF
  1476. //更新质检已进仓数
  1477. IF uo_option_check_buyin = 1 And billtype = 1 And inwaremx[i].relbillid > 0 THEN
  1478. IF uo_sptch.uof_add_inqty(inwaremx[i].relbillid,inwaremx[i].relbillprintid,0 - inwaremx[i].uqty,arg_msg,False) = 0 THEN
  1479. arg_msg = '更新行:'+String(i)+','+arg_msg
  1480. rslt = 0
  1481. GOTO ext
  1482. END IF
  1483. END IF
  1484. IF uo_option_buy_sptprice_sec = 0 THEN
  1485. IF thflag = 0 THEN
  1486. IF uo_sptprice.uof_del_sptprice_auto(sptid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,'',inwaremx[i].unit,moneyid,False,arg_msg) = 0 THEN
  1487. arg_msg = '更新行:'+String(i)+','+arg_msg
  1488. rslt = 0
  1489. GOTO ext
  1490. END IF
  1491. END IF
  1492. END IF
  1493. If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++
  1494. NEXT
  1495. IF thflag = 1 THEN
  1496. //退货处理 为新建订单的, 删除订单
  1497. IF uof_destroy_buytask(arg_msg) = 0 THEN
  1498. rslt = 0
  1499. GOTO ext
  1500. END IF
  1501. END IF
  1502. Long ll_inwareid_rel_arr[],ll_arr,ll_k
  1503. String ls_inwarecode_rel_arr[]
  1504. IF billtype = 1 And li_outtype > 0 And thflag = 1 THEN
  1505. SELECT count(*)
  1506. INTO :cnt
  1507. FROM u_inware
  1508. WHERE scid = :scid
  1509. AND relid = :inwareid
  1510. And billtype = 25 Using commit_transaction;
  1511. IF commit_transaction.SQLCode <> 0 THEN
  1512. rslt = 0
  1513. arg_msg = "因网络或其它原因导致查询相关收货包件明细进仓单操作失败"+"~n"+commit_transaction.SQLErrText
  1514. GOTO ext
  1515. END IF
  1516. IF cnt > 0 THEN
  1517. DECLARE cur_in CURSOR FOR
  1518. SELECT inwareid,inwarecode
  1519. FROM u_inware
  1520. WHERE scid = :scid
  1521. AND relid = :inwareid
  1522. And billtype = 25 Using commit_transaction;
  1523. OPEN cur_in;
  1524. FETCH cur_in Into :ll_inwareid_rel,:ls_inwarecode_rel;
  1525. DO WHILE commit_transaction.SQLCode = 0
  1526. ll_arr++
  1527. ll_inwareid_rel_arr[ll_arr] = ll_inwareid_rel
  1528. ls_inwarecode_rel_arr[ll_arr] = ls_inwarecode_rel
  1529. FETCH cur_in Into :ll_inwareid_rel,:ls_inwarecode_rel;
  1530. LOOP
  1531. CLOSE cur_in;
  1532. IF ll_arr = 0 THEN
  1533. arg_msg = '读取相关退货进仓单失败,操作取消'
  1534. rslt = 0
  1535. GOTO ext
  1536. END IF
  1537. FOR ll_k = 1 To ll_arr
  1538. IF uo_in.getinfo(scid,ll_inwareid_rel_arr[ll_k],arg_msg) = 0 THEN
  1539. arg_msg = '相关进仓单:'+ls_inwarecode_rel_arr[ll_k]+','+arg_msg
  1540. rslt = 0
  1541. GOTO ext
  1542. END IF
  1543. IF uo_in.c_auditing(False,arg_msg) = 0 THEN
  1544. arg_msg = '相关进仓单:'+ls_inwarecode_rel_arr[ll_k]+','+arg_msg
  1545. rslt = 0
  1546. GOTO ext
  1547. END IF
  1548. IF uo_in.del(scid,ll_inwareid_rel_arr[ll_k],arg_msg,False) = 0 THEN
  1549. arg_msg = '相关进仓单:'+ls_inwarecode_rel_arr[ll_k]+','+arg_msg
  1550. rslt = 0
  1551. GOTO ext
  1552. END IF
  1553. NEXT
  1554. END IF
  1555. END IF
  1556. IF billtype = 27 THEN
  1557. FOR i = 1 To it_mxbt_mx
  1558. IF uof_update_ptqty(scid,&
  1559. inwaremx_mx[i].ptinwareid,&
  1560. inwaremx_mx[i].ptprintid,&
  1561. 0 - inwaremx_mx[i].qty,arg_msg,False) = 0 THEN
  1562. arg_msg = '单据配套明细,行:'+String(i)+','+arg_msg
  1563. rslt = 0
  1564. GOTO ext
  1565. END IF
  1566. NEXT
  1567. END IF
  1568. IF billtype = 1 And ( li_outtype = 2 Or li_outtype = 3 ) And mx_barcode_cnt > 0 THEN
  1569. IF uof_p_barcode(0,arg_msg,arg_s_mxbarcode_fp) = 0 THEN
  1570. rslt = 0
  1571. GOTO ext
  1572. END IF
  1573. UPDATE u_inware_barcode_tmp
  1574. SET u_inware_barcode_tmp.inwareid = 0
  1575. WHERE u_inware_barcode_tmp.scid = :scid
  1576. And u_inware_barcode_tmp.inwareid = :inwareid Using commit_transaction;
  1577. IF commit_transaction.SQLCode <> 0 THEN
  1578. rslt = 0
  1579. arg_msg = "清除采购收货单相关临时条码匹配标记失败"+"~n"+commit_transaction.SQLErrText
  1580. GOTO ext
  1581. END IF
  1582. END IF
  1583. flag = 0
  1584. ext:
  1585. IF rslt = 0 THEN
  1586. ROLLBACK Using commit_transaction;
  1587. ELSEIF rslt = 1 And arg_ifcommit THEN
  1588. COMMIT Using commit_transaction;
  1589. END IF
  1590. Destroy uo_sptch
  1591. Destroy uo_buytask
  1592. Destroy uo_sptprice
  1593. Destroy uo_ma
  1594. Destroy uo_in
  1595. Destroy uo_out
  1596. Destroy uo_pro
  1597. RETURN rslt
  1598. end function
  1599. public function integer secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i,j
  1600. String ls_about,ls_dscrp
  1601. Long ll_moneyid_native,ll_moneyid
  1602. IF uo_option_buy_sptprice_sec = -1000 THEN
  1603. rslt = 0
  1604. arg_msg = '选项:[168]采购收货单财审更新供应商最新价,读取初始默认值失败,操作取消!'
  1605. GOTO ext
  1606. END IF
  1607. IF uo_option_m_mstpay = -1000 THEN
  1608. rslt = 0
  1609. arg_msg = '选项:[241]系统使用多币种应付帐,读取初始默认值失败,操作取消!'
  1610. GOTO ext
  1611. END IF
  1612. uo_mustpay uo_pay
  1613. uo_pay = Create uo_mustpay
  1614. uo_spt_price uo_sptprice
  1615. uo_sptprice = Create uo_spt_price
  1616. Decimal ld_payamt = 0,ld_mstpayamt = 0,ld_taxamt = 0
  1617. Long ll_dft_itemid,ll_dft_itemid_tax
  1618. Decimal ld_itemamt = 0
  1619. String ls_itemname
  1620. decimal ld_fprice_notax
  1621. s_bmstpaymx s_paymx_item
  1622. IF inwareid = 0 THEN
  1623. rslt = 0
  1624. arg_msg = "没有审核对象"
  1625. GOTO ext
  1626. END IF
  1627. IF flag = 0 THEN
  1628. rslt = 0
  1629. arg_msg = "单据还没有经过仓库审核"
  1630. GOTO ext
  1631. END IF
  1632. IF secflag = 1 THEN
  1633. rslt = 0
  1634. arg_msg = "单据已经过财务审核"
  1635. GOTO ext
  1636. END IF
  1637. Int li_btype
  1638. Long ll_accountsid
  1639. SELECT btype,accountsid INTO :li_btype,:ll_accountsid
  1640. FROM cw_banktype
  1641. Where banktypeid = :relint_1 Using commit_transaction;
  1642. IF commit_transaction.SQLCode <> 0 THEN
  1643. rslt = 0
  1644. arg_msg = '查询结算方式类型失败,'+ commit_transaction.SQLErrText
  1645. GOTO ext
  1646. END IF
  1647. SELECT count(*) INTO :cnt
  1648. FROM u_user
  1649. Where username = :publ_operator Using commit_transaction ;
  1650. IF commit_transaction.SQLCode <> 0 THEN
  1651. rslt = 0
  1652. arg_msg = "查询操作失败,操作员"
  1653. GOTO ext
  1654. END IF
  1655. IF cnt = 0 THEN
  1656. rslt = 0
  1657. arg_msg = "操作员姓名未登记或已取消"
  1658. GOTO ext
  1659. END IF
  1660. UPDATE u_inware
  1661. SET secauditingrep = :publ_operator,
  1662. secauditingdate = getdate(),
  1663. secflag = 1
  1664. WHERE u_inware.inwareid = :inwareid
  1665. And flag = 1 And secflag = 0 And scid = :scid Using commit_transaction;
  1666. IF commit_transaction.SQLCode <> 0 THEN
  1667. rslt = 0
  1668. arg_msg = "因网络或其它原因导致财务审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  1669. GOTO ext
  1670. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1671. rslt = 0
  1672. arg_msg = "单据正在财务审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1673. GOTO ext
  1674. END IF
  1675. IF uo_option_buy_sptprice_sec = 1 THEN
  1676. IF thflag = 0 THEN
  1677. FOR i = 1 To it_mxbt
  1678. ld_fprice_notax = inwaremx[i].fprice / ( 1 + inwaremx[i].tax)
  1679. IF uo_sptprice.uof_update_sptprice(thflag,sptid,inwaremx[i].mtrlid,inwaremx[i].unit,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].jgdscrp,inwareid,inwaremx[i].enprice,inwaremx[i].rebate,inwaremx[i].rate,inwaremx[i].fprice,ld_fprice_notax,indate,inwarecode,0,inwaremx[i].mxdscrp,inwaremx[i].printid,0,moneyid,indate,datetime(9999-01-01),False,arg_msg) = 0 THEN
  1680. arg_msg = '更新行:'+String(i)+','+arg_msg
  1681. rslt = 0
  1682. GOTO ext
  1683. END IF
  1684. NEXT
  1685. END IF
  1686. END IF
  1687. FOR j = 1 To it_mxbt_item
  1688. ld_itemamt = ld_itemamt + inware_itemmx[j].amt
  1689. NEXT
  1690. If (sum_amt <> 0 Or ld_itemamt <> 0) And dxflag = 0 THEN
  1691. IF thflag = 1 THEN
  1692. ls_about = inwarecode + "退货款,相关号:"+part
  1693. SELECT itemid INTO :ll_dft_itemid
  1694. FROM u_itemdef
  1695. Where dfttype = 5 Using commit_transaction;
  1696. IF commit_transaction.SQLCode <> 0 THEN
  1697. arg_msg = '查询默认采购外协退货项目资料失败,'+commit_transaction.SQLErrText
  1698. rslt = 0
  1699. GOTO ext
  1700. END IF
  1701. ELSE
  1702. ls_about = inwarecode + "应付款,相关号:"+part
  1703. SELECT itemid INTO :ll_dft_itemid
  1704. FROM u_itemdef
  1705. Where dfttype = 2 Using commit_transaction;
  1706. IF commit_transaction.SQLCode <> 0 THEN
  1707. arg_msg = '查询默认采购外协付款项目资料失败,'+commit_transaction.SQLErrText
  1708. rslt = 0
  1709. GOTO ext
  1710. END IF
  1711. END IF
  1712. ls_dscrp = ls_about
  1713. SELECT moneyid INTO :ll_moneyid_native
  1714. FROM cw_currency
  1715. Where native = 1 Using commit_transaction;
  1716. IF commit_transaction.SQLCode <> 0 THEN
  1717. arg_msg = '查询本位币资料失败'
  1718. rslt = 0
  1719. GOTO ext
  1720. END IF
  1721. IF uo_option_m_mstpay = 0 THEN
  1722. ld_mstpayamt = sum_amt - otheramt
  1723. ll_moneyid = ll_moneyid_native
  1724. ld_taxamt = sum_taxamt
  1725. ELSE
  1726. ld_mstpayamt = sum_amt_en - otheramt
  1727. ll_moneyid = moneyid
  1728. ld_taxamt = sum_taxamt_en
  1729. END IF
  1730. IF li_btype = 1 THEN
  1731. ld_payamt = ld_mstpayamt + ld_itemamt
  1732. ELSE
  1733. ld_payamt = 0
  1734. END IF
  1735. s_bmstpay s_pay
  1736. s_pay.scid = scid
  1737. s_pay.sptid = sptid
  1738. s_pay.paydate = indate
  1739. s_pay.inrep = inrep
  1740. s_pay.oriamt = ld_mstpayamt
  1741. s_pay.mstpayamt = ld_mstpayamt
  1742. s_pay.payamt = ld_payamt
  1743. s_pay.payamt_cn = ld_payamt
  1744. s_pay.dscrp = ls_about
  1745. s_pay.billcode = inwarecode
  1746. s_pay.relcode = part
  1747. s_pay.banktypeid = relint_1
  1748. s_pay.viewdate = plandate
  1749. s_pay.opemp = publ_operator
  1750. s_pay.buildtype = 1
  1751. s_pay.inwareid = inwareid
  1752. s_pay.accountsid = ll_accountsid
  1753. s_pay.itemid = ll_dft_itemid
  1754. s_pay.moneyid = ll_moneyid
  1755. s_pay.moneyid_cn = ll_moneyid
  1756. IF uo_pay.add_payrec (s_pay,arg_msg,False) = 0 THEN
  1757. rslt = 0
  1758. GOTO ext
  1759. END IF
  1760. IF ld_taxamt <> 0 THEN
  1761. ls_about = inwarecode + "税金,相关号:"+part
  1762. SELECT itemid INTO :ll_dft_itemid_tax
  1763. FROM u_itemdef
  1764. Where dfttype = 13 Using commit_transaction;
  1765. IF commit_transaction.SQLCode <> 0 THEN
  1766. arg_msg = '查询默认采购外协税金项目资料失败,'+commit_transaction.SQLErrText
  1767. rslt = 0
  1768. GOTO ext
  1769. END IF
  1770. s_bmstpaymx s_paymx_tax
  1771. s_paymx_tax.scid = scid
  1772. s_paymx_tax.payid = uo_pay.ref_payid
  1773. s_paymx_tax.sptid = sptid
  1774. s_paymx_tax.paydate = indate
  1775. s_paymx_tax.inrep = inrep
  1776. s_paymx_tax.mstpayamt = ld_taxamt
  1777. s_paymx_tax.payamt = 0
  1778. s_paymx_tax.dscrp = ls_about
  1779. s_paymx_tax.billcode = inwarecode
  1780. s_paymx_tax.relcode = part
  1781. s_paymx_tax.banktypeid = relint_1
  1782. s_paymx_tax.opemp = publ_operator
  1783. s_paymx_tax.buildtype = 3
  1784. s_paymx_tax.inwareid = inwareid
  1785. s_paymx_tax.itemid = ll_dft_itemid_tax
  1786. s_paymx_tax.moneyid = ll_moneyid
  1787. IF uo_pay.add_payrecmx (s_paymx_tax,arg_msg,False) = 0 THEN
  1788. rslt = 0
  1789. GOTO ext
  1790. END IF
  1791. END IF
  1792. FOR i = 1 To it_mxbt_item
  1793. IF inware_itemmx[i].amt <> 0 THEN
  1794. SELECT itemname
  1795. INTO :ls_itemname
  1796. FROM u_itemdef
  1797. Where itemid = :inware_itemmx[i].itemid Using commit_transaction;
  1798. IF commit_transaction.SQLCode <> 0 THEN
  1799. rslt = 0
  1800. arg_msg = '查询第'+String(i)+'行费用项目信息失败,'+ commit_transaction.SQLErrText
  1801. GOTO ext
  1802. END IF
  1803. ls_about = inwarecode + '费用项目:'+ls_itemname +",相关号:"+part
  1804. s_paymx_item.scid = scid
  1805. s_paymx_item.payid = uo_pay.ref_payid
  1806. s_paymx_item.sptid = sptid
  1807. s_paymx_item.paydate = indate
  1808. s_paymx_item.inrep = inrep
  1809. s_paymx_item.mstpayamt = inware_itemmx[i].amt
  1810. s_paymx_item.payamt = 0
  1811. s_paymx_item.dscrp = ls_about
  1812. s_paymx_item.billcode = inwarecode
  1813. s_paymx_item.relcode = part
  1814. s_paymx_item.banktypeid = relint_1
  1815. s_paymx_item.opemp = publ_operator
  1816. s_paymx_item.buildtype = 3
  1817. s_paymx_item.inwareid = inwareid
  1818. s_paymx_item.itemid = ll_dft_itemid_tax
  1819. s_paymx_item.moneyid = ll_moneyid
  1820. IF uo_pay.add_payrecmx (s_paymx_item,arg_msg,False) = 0 THEN
  1821. rslt = 0
  1822. GOTO ext
  1823. END IF
  1824. END IF
  1825. NEXT
  1826. UPDATE u_inware
  1827. SET relint_2 = :uo_pay.ref_payid
  1828. WHERE u_inware.inwareid = :inwareid
  1829. AND scid = :scid
  1830. And flag = 1 Using commit_transaction;
  1831. IF commit_transaction.SQLCode <> 0 THEN
  1832. arg_msg = '更新采购单相关应付帐ID失败'
  1833. rslt = 0
  1834. GOTO ext
  1835. END IF
  1836. END IF
  1837. secflag = 1
  1838. ext:
  1839. IF rslt = 0 THEN
  1840. ROLLBACK Using commit_transaction;
  1841. ELSEIF rslt = 1 And arg_ifcommit THEN
  1842. COMMIT Using commit_transaction;
  1843. END IF
  1844. Destroy uo_pay
  1845. Destroy uo_sptprice
  1846. RETURN rslt
  1847. end function
  1848. public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg);
  1849. Long rslt = 1,cnt = 0,i
  1850. DateTime null_dt
  1851. int li_StoreBalcType,li_AmtAuditFlag
  1852. IF uo_option_buy_sptprice_sec = -1000 THEN
  1853. rslt = 0
  1854. arg_msg = '选项:[168]采购收货单财审更新供应商最新价,读取初始默认值失败,操作取消!'
  1855. GOTO ext
  1856. END IF
  1857. uo_mustpay uo_pay
  1858. uo_pay = Create uo_mustpay
  1859. uo_spt_price uo_sptprice
  1860. uo_sptprice = Create uo_spt_price
  1861. String ls_mtrlname
  1862. SetNull(null_dt)
  1863. IF inwareid = 0 THEN
  1864. rslt = 0
  1865. arg_msg = "没有撤审对象"
  1866. GOTO ext
  1867. END IF
  1868. IF ctmint > 0 THEN
  1869. arg_msg = '单据已截数,不能操作'
  1870. rslt = 0
  1871. GOTO ext
  1872. END IF
  1873. //检查仓库是否分开结存
  1874. IF balcdateint <> 0 THEN
  1875. SELECT StoreBalcType
  1876. INTO :li_StoreBalcType
  1877. FROM u_storage
  1878. Where storageid = :storageid;
  1879. IF sqlca.SQLCode <> 0 THEN
  1880. li_StoreBalcType = 0
  1881. END IF
  1882. //如果分开结存,检查结存表是否已金额结存
  1883. IF li_StoreBalcType = 1 THEN
  1884. SELECT top 1 AmtAuditFlag
  1885. INTO :li_AmtAuditFlag
  1886. FROM u_warebalc
  1887. WHERE storageid = :storageid
  1888. And balcdateint = :balcdateint;
  1889. IF sqlca.SQLCode <> 0 THEN
  1890. li_AmtAuditFlag = 0
  1891. END IF
  1892. IF li_AmtAuditFlag = 1 THEN
  1893. rslt = 0
  1894. arg_msg = '仓库结存日期段已执行过金额结存,不能财撤单据'
  1895. GOTO ext
  1896. END IF
  1897. END IF
  1898. END IF
  1899. IF secflag = 0 THEN
  1900. rslt = 0
  1901. arg_msg = "该单据财务未审,不能进行财务撤审"
  1902. GOTO ext
  1903. END IF
  1904. SELECT count(*) INTO :cnt
  1905. FROM u_user
  1906. Where username = :publ_operator Using commit_transaction ;
  1907. IF commit_transaction.SQLCode <> 0 THEN
  1908. rslt = 0
  1909. arg_msg = "查询操作失败,操作员"
  1910. GOTO ext
  1911. END IF
  1912. IF cnt = 0 THEN
  1913. rslt = 0
  1914. arg_msg = "操作员姓名未登记或已取消"
  1915. GOTO ext
  1916. END IF
  1917. UPDATE u_inware
  1918. SET secauditingrep = '',
  1919. secauditingdate = :null_dt,
  1920. secflag = 0,relint_2 = 0
  1921. WHERE u_inware.inwareid = :inwareid
  1922. And secflag = 1 And scid = :scid Using commit_transaction;
  1923. IF commit_transaction.SQLCode <> 0 THEN
  1924. rslt = 0
  1925. arg_msg = "因网络或其它原因导致财务审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  1926. GOTO ext
  1927. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1928. rslt = 0
  1929. arg_msg = "单据正在财务审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1930. GOTO ext
  1931. END IF
  1932. IF billtype = 1 And sum_amt <> 0 And dxflag = 0 THEN
  1933. IF uo_pay.del_payrec(scid,1,relint_2,sptid,arg_msg,False) = 0 THEN
  1934. rslt = 0
  1935. GOTO ext
  1936. END IF
  1937. END IF
  1938. IF uo_option_buy_sptprice_sec = 1 THEN
  1939. IF thflag = 0 THEN
  1940. FOR i = 1 To it_mxbt
  1941. IF uo_sptprice.uof_del_sptprice_auto(sptid,inwareid,inwaremx[i].printid,inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].jgdscrp,inwaremx[i].unit,moneyid,False,arg_msg) = 0 THEN
  1942. arg_msg = '更新行:'+String(i)+','+arg_msg
  1943. rslt = 0
  1944. GOTO ext
  1945. END IF
  1946. NEXT
  1947. END IF
  1948. END IF
  1949. secflag = 0
  1950. ext:
  1951. IF rslt = 0 THEN
  1952. ROLLBACK Using commit_transaction;
  1953. ELSEIF rslt = 1 And arg_ifcommit THEN
  1954. COMMIT Using commit_transaction;
  1955. END IF
  1956. Destroy uo_pay
  1957. Destroy uo_sptprice
  1958. RETURN rslt
  1959. end function
  1960. public function integer p_update_th_cost (long arg_printid, string arg_mtrlcode, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_plancode, long arg_dxflag, long arg_sptid, string arg_mtrlcuscode, string arg_location, ref decimal arg_ref_cost, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1961. Decimal ld_cost
  1962. Long ll_storagescid
  1963. SELECT scid INTO :ll_storagescid
  1964. FROM u_storage
  1965. Where storageid = :storageid Using commit_transaction;
  1966. IF commit_transaction.SQLCode <> 0 THEN
  1967. rslt = 0
  1968. arg_msg = '查询仓库分部失败'+ commit_transaction.SQLErrText
  1969. GOTO ext
  1970. END IF
  1971. SELECT cost INTO :ld_cost
  1972. FROM u_mtrlware
  1973. WHERE storageid = :storageid
  1974. AND mtrlid = :arg_mtrlid
  1975. AND status = :arg_status
  1976. AND woodcode = :arg_woodcode
  1977. AND pcode = :arg_pcode
  1978. AND plancode = :arg_plancode
  1979. AND dxflag = :arg_dxflag
  1980. AND sptid = :arg_sptid
  1981. AND mtrlcuscode = :arg_mtrlcuscode
  1982. AND Location = :arg_location
  1983. And scid = :ll_storagescid Using commit_transaction;
  1984. IF commit_transaction.SQLCode = 100 THEN
  1985. arg_msg = '查询'+arg_mtrlcode+'库存记录失败,'+commit_transaction.SQLErrText
  1986. rslt = 0
  1987. GOTO ext
  1988. ELSEIF commit_transaction.SQLCode <> 0 THEN
  1989. arg_msg = '查询'+arg_mtrlcode+'库存成本价失败,'+commit_transaction.SQLErrText
  1990. rslt = 0
  1991. GOTO ext
  1992. END IF
  1993. UPDATE u_inwaremx
  1994. SET cost = :ld_cost
  1995. WHERE scid = :scid
  1996. AND inwareid = :inwareid
  1997. And printid = :arg_printid Using commit_transaction;
  1998. IF commit_transaction.SQLCode <> 0 THEN
  1999. arg_msg = '更新'+arg_mtrlcode+'退货成本价失败,'+commit_transaction.SQLErrText
  2000. rslt = 0
  2001. GOTO ext
  2002. END IF
  2003. arg_ref_cost = ld_cost
  2004. ext:
  2005. IF rslt = 0 THEN
  2006. ROLLBACK Using commit_transaction;
  2007. ELSEIF rslt = 1 And arg_ifcommit THEN
  2008. COMMIT Using commit_transaction;
  2009. END IF
  2010. RETURN rslt
  2011. end function
  2012. public function integer uof_update_ptqty (long arg_scid, long arg_inwareid, long arg_printid, decimal arg_ptqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2013. Decimal ld_qty,ld_ptqty
  2014. SELECT qty,ptqty INTO :ld_qty,:ld_ptqty
  2015. FROM u_inwaremx
  2016. WHERE scid = :arg_scid
  2017. AND inwareid = :arg_inwareid
  2018. AND printid = :arg_printid USING commit_transaction;
  2019. IF commit_transaction.SQLCode <> 0 THEN
  2020. arg_msg = '查询已配套数失败,'+commit_transaction.SQLErrText
  2021. rslt = 0
  2022. GOTO ext
  2023. END IF
  2024. IF arg_ptqty > 0 THEN
  2025. IF ld_qty > ld_ptqty + arg_ptqty THEN
  2026. arg_msg = '超配套数'
  2027. rslt = 0
  2028. GOTO ext
  2029. END IF
  2030. ELSE
  2031. IF ld_ptqty < Abs(arg_ptqty) THEN
  2032. arg_msg = '超返扣配套数'
  2033. rslt = 0
  2034. GOTO ext
  2035. END IF
  2036. END IF
  2037. UPDATE u_inwaremx
  2038. SET ptqty = ptqty + :arg_ptqty
  2039. WHERE scid = :arg_scid
  2040. AND inwareid = :arg_inwareid
  2041. AND printid = :arg_printid USING commit_transaction;
  2042. IF commit_transaction.SQLCode <> 0 THEN
  2043. arg_msg = '更新已配套数失败,'+commit_transaction.SQLErrText
  2044. rslt = 0
  2045. GOTO ext
  2046. END IF
  2047. ext:
  2048. IF rslt = 0 THEN
  2049. ROLLBACK USING commit_transaction;
  2050. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2051. COMMIT USING commit_transaction;
  2052. END IF
  2053. RETURN rslt
  2054. end function
  2055. public function integer uof_destroy_buytask (ref string arg_msg);Int rslt = 1
  2056. Long i, cnt
  2057. Long ll_taskid, ll_taskid_arr[]
  2058. String ls_taskcode, ls_taskcode_arr[]
  2059. uo_buytask uo_task
  2060. uo_task = Create uo_buytask
  2061. uo_task.commit_transaction = commit_transaction
  2062. cnt = 0
  2063. DECLARE cur_task CURSOR FOR
  2064. SELECT TaskID, taskcode
  2065. FROM u_buyTask
  2066. WHERE relcode = :inwarecode
  2067. AND sptid = :sptid
  2068. AND ltrim(rtrim(dscrp)) = "由退货单号"+:inwarecode+"生成" ;
  2069. OPEN cur_task ;
  2070. FETCH cur_task Into :ll_taskid, :ls_taskcode;
  2071. DO WHILE sqlca.SQLCode = 0
  2072. cnt++
  2073. ll_taskid_arr[cnt] = ll_taskid
  2074. ls_taskcode_arr[cnt] = ls_taskcode
  2075. FETCH cur_task Into :ll_taskid, :ls_taskcode;
  2076. LOOP
  2077. CLOSE cur_task;
  2078. IF cnt = 0 THEN
  2079. GOTO ext
  2080. END IF
  2081. FOR i = 1 To cnt
  2082. IF uo_task.Cancel(scid,ll_taskid_arr[i],arg_msg,False) = 0 THEN
  2083. arg_msg = "采购退货单撤审自动删除相关采购订单失败,采购订单:"+ls_taskcode_arr[i]+","+arg_msg
  2084. rslt = 0
  2085. GOTO ext
  2086. ELSE
  2087. //日志
  2088. f_setsysoplog('采购订单','采购退货单撤审自动删除相关采购订单,id:'+String(ll_taskid_arr[i])+',单号:'+ls_taskcode_arr[i],arg_msg,False)
  2089. END IF
  2090. NEXT
  2091. ext:
  2092. Destroy uo_task
  2093. RETURN rslt
  2094. end function
  2095. public function integer uof_create_buytask (ref string arg_msg);Int rslt = 1
  2096. Long i, j, mxcnt
  2097. Long ll_blltype
  2098. uo_buytask uo_task
  2099. uo_task = Create uo_buytask
  2100. uo_task.commit_transaction = commit_transaction
  2101. FOR j = 0 To 1
  2102. ll_blltype = j //0:材料采购; 1:成品采购
  2103. mxcnt = 0
  2104. IF uo_task.newbegin(scid,arg_msg) = 0 THEN //
  2105. rslt = 0
  2106. GOTO ext
  2107. END IF
  2108. uo_task.Requiredate = DateTime(Today()) //要求完成日期
  2109. uo_task.Assign_emp = inrep //订单负责人
  2110. uo_task.Kind = 0
  2111. uo_task.reason = ""
  2112. uo_task.sptid = sptid
  2113. uo_task.dscrp = "由退货单号"+inwarecode+"生成" //uof_destroy_buytask
  2114. uo_task.relcode = inwarecode
  2115. uo_task.banktypeid = relint_1
  2116. uo_task.train = ""
  2117. uo_task.billtype = ll_blltype
  2118. uo_task.moneyid = moneyid
  2119. uo_task.mrate = mrate
  2120. FOR i = 1 To it_mxbt
  2121. IF inwaremx[i].Thptype = 2 And inwaremx[i].mxbilltype = ll_blltype THEN
  2122. mxcnt++
  2123. IF uo_task.acceptmx(0,&
  2124. 0,&
  2125. '',&
  2126. inwaremx[i].mtrlid,&
  2127. 0 - inwaremx[i].uqty,&
  2128. inwaremx[i].enprice,&
  2129. inwaremx[i].rebate,&
  2130. 0,&
  2131. inwaremx[i].mxdscrp,&
  2132. inwaremx[i].mtrlcode,&
  2133. arg_msg,&
  2134. mxcnt,&
  2135. DateTime(Today()),&
  2136. storageid,&
  2137. inwaremx[i].status,&
  2138. inwaremx[i].unit,&
  2139. inwaremx[i].rate,&
  2140. inwaremx[i].woodcode,&
  2141. inwaremx[i].pcode,&
  2142. 0,&
  2143. 0,&
  2144. 0,&
  2145. 0,&
  2146. inwaremx[i].tax,&
  2147. inwaremx[i].plancode,'') = 0 THEN
  2148. arg_msg = "采购退货单自动建立相关采购订单失败,行:"+String(i)+","+arg_msg
  2149. rslt = 0
  2150. GOTO ext
  2151. END IF
  2152. END IF
  2153. NEXT
  2154. IF mxcnt > 0 THEN
  2155. IF uo_task.savesubmit(publ_operator,arg_msg,False) = 0 THEN
  2156. arg_msg = "采购退货单自动建立相关采购订单失败,"+arg_msg
  2157. rslt = 0
  2158. GOTO ext
  2159. END IF
  2160. END IF
  2161. NEXT
  2162. ext:
  2163. Destroy uo_task
  2164. RETURN rslt
  2165. end function
  2166. public function integer uof_chk_audit (integer arg_type, long arg_scid, long arg_inwareid, long arg_printid, boolean arg_ifcommit, ref string arg_msg);//arg_type : 0 审核; 1 撤审
  2167. Long rslt = 1,i
  2168. Int li_chkflag
  2169. String ls_msg
  2170. SELECT chkflag
  2171. INTO :li_chkflag
  2172. FROM u_inwaremx
  2173. WHERE scid = :arg_scid
  2174. AND inwareid = :arg_inwareid
  2175. And printid = :arg_printid;
  2176. IF sqlca.SQLCode <> 0 THEN
  2177. rslt = 0
  2178. arg_msg = "查询进仓单明细质检信息失败,"+sqlca.SQLErrText
  2179. GOTO ext
  2180. END IF
  2181. IF arg_type = 0 THEN
  2182. ls_msg = "质检审核"
  2183. IF li_chkflag = 1 THEN
  2184. rslt = 0
  2185. arg_msg = "单据明细已经质检审核"
  2186. GOTO ext
  2187. END IF
  2188. Dec lde_qty, lde_chkinqty, lde_chkinqty2
  2189. SELECT qty, chkinqty, chkinqty2
  2190. INTO :lde_qty, :lde_chkinqty, :lde_chkinqty2
  2191. FROM u_inwaremx
  2192. WHERE scid = :arg_scid
  2193. AND inwareid = :arg_inwareid
  2194. And printid = :arg_printid;
  2195. IF sqlca.SQLCode <> 0 THEN
  2196. arg_msg = "查询采购收货单明细信息失败,"+sqlca.SQLErrText
  2197. rslt = 0
  2198. GOTO ext
  2199. END IF
  2200. IF lde_qty <> lde_chkinqty + lde_chkinqty2 THEN //没有进仓, 成功返回
  2201. arg_msg = "合格收货数 + 不合格退货数 不等于 收货数,不能质检审核"
  2202. rslt = 0
  2203. GOTO ext
  2204. END IF
  2205. UPDATE u_inwaremx
  2206. SET chkflag = 1,
  2207. chkdate = getdate(),
  2208. chkemp = :publ_operator
  2209. WHERE scid = :arg_scid
  2210. AND inwareid = :arg_inwareid
  2211. AND printid = :arg_printid
  2212. And chkflag = 0 ;
  2213. ELSE
  2214. ls_msg = "质检撤审"
  2215. IF li_chkflag = 0 THEN
  2216. rslt = 0
  2217. arg_msg = "单据明细未质检审核"
  2218. GOTO ext
  2219. END IF
  2220. UPDATE u_inwaremx
  2221. SET chkflag = 0,
  2222. chkdate = NULL,
  2223. chkemp = ''
  2224. WHERE scid = :arg_scid
  2225. AND inwareid = :arg_inwareid
  2226. AND printid = :arg_printid
  2227. And chkflag = 1 ;
  2228. END IF
  2229. IF sqlca.SQLCode <> 0 THEN
  2230. rslt = 0
  2231. arg_msg = "单据明细"+ls_msg+"操作失败"+"~n"+sqlca.SQLErrText
  2232. GOTO ext
  2233. ELSEIF sqlca.SQLNRows = 0 THEN
  2234. rslt = 0
  2235. arg_msg = "单据明细"+ls_msg+"正在处理,请稍后查询。"+"~n"+sqlca.SQLErrText
  2236. GOTO ext
  2237. END IF
  2238. IF arg_type = 0 THEN
  2239. IF uof_create_move(arg_scid, arg_inwareid, arg_printid, arg_msg) = 0 THEN
  2240. rslt = 0
  2241. GOTO ext
  2242. END IF
  2243. ELSE
  2244. IF uof_destroy_move(arg_scid, arg_inwareid, arg_printid, arg_msg) = 0 THEN
  2245. rslt = 0
  2246. GOTO ext
  2247. END IF
  2248. END IF
  2249. ext:
  2250. IF rslt = 0 THEN
  2251. ROLLBACK Using sqlca;
  2252. ELSEIF rslt = 1 And arg_ifcommit THEN
  2253. COMMIT Using sqlca;
  2254. END IF
  2255. RETURN rslt
  2256. end function
  2257. public function integer uof_create_move (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg);//1.合格调仓; 2.不合格调仓
  2258. Int rslt = 1
  2259. Long i, mxcnt
  2260. Long ll_mxstorageid, ll_mxstorageid2
  2261. Long ll_mtrlwareid, ll_mtrlid
  2262. Dec lde_qty, lde_price, lde_uqty, lde_rate, lde_qty2
  2263. String ls_unit, ls_newlocation
  2264. String ls_inwarecode
  2265. Long ll_storageid
  2266. Long ll_outwareid
  2267. uo_outware_move uo_ware
  2268. uo_ware = Create uo_outware_move
  2269. uo_ware.if_getid_ture = false
  2270. SELECT mtrlwareid, storageid, chkinqty, storageid2, chkinqty2, price, location, mtrlid
  2271. INTO :ll_mtrlwareid, :ll_mxstorageid, :lde_qty, :ll_mxstorageid2, :lde_qty2, :lde_price, :ls_newlocation, :ll_mtrlid
  2272. FROM u_inwaremx
  2273. WHERE scid = :arg_scid
  2274. AND inwareid = :arg_inwareid
  2275. And printid = :arg_printid;
  2276. IF sqlca.SQLCode <> 0 THEN
  2277. arg_msg = "查询采购收货单明细信息失败,"+sqlca.SQLErrText
  2278. rslt = 0
  2279. GOTO ext
  2280. END IF
  2281. IF lde_qty = 0 And lde_qty2 = 0 THEN //没有进仓, 成功返回
  2282. GOTO ext
  2283. END IF
  2284. SELECT inwarecode , storageid
  2285. INTO :ls_inwarecode, :ll_storageid
  2286. FROM u_inware
  2287. WHERE scid = :arg_scid
  2288. And inwareid = :arg_inwareid;
  2289. IF sqlca.SQLCode <> 0 THEN
  2290. arg_msg = "查询采购收货单信息失败,"+sqlca.SQLErrText
  2291. rslt = 0
  2292. GOTO ext
  2293. END IF
  2294. SELECT unit
  2295. INTO :ls_unit
  2296. FROM u_mtrldef
  2297. Where mtrlid = :ll_mtrlid;
  2298. IF sqlca.SQLCode <> 0 THEN
  2299. arg_msg = "查询物料资料信息失败,"+sqlca.SQLErrText
  2300. rslt = 0
  2301. GOTO ext
  2302. END IF
  2303. //检查数据合法性
  2304. IF lde_qty <> 0 THEN
  2305. IF ll_mxstorageid = 0 THEN
  2306. arg_msg = "请选择质检合格调入仓库"
  2307. rslt = 0
  2308. GOTO ext
  2309. END IF
  2310. IF uo_ware.newbegin(arg_msg) = 0 THEN //
  2311. rslt = 0
  2312. GOTO ext
  2313. END IF
  2314. i = 1
  2315. uo_ware.outdate = DateTime(Today()) // 发生时间
  2316. uo_ware.indate = DateTime(Today()) // 发生时间
  2317. uo_ware.outrep = publ_operator // 经手人
  2318. uo_ware.dscrp = "采购收货明细质检合格调仓" //备注
  2319. uo_ware.sstorageid = ll_storageid
  2320. uo_ware.dstorageid = ll_mxstorageid
  2321. uo_ware.relcode = ls_inwarecode+"." + String(arg_printid)
  2322. uo_ware.ifauto = 1
  2323. mxcnt = 1
  2324. IF uo_ware.acceptmx(ll_mtrlwareid,&
  2325. lde_qty,&
  2326. lde_price,&
  2327. arg_msg,&
  2328. i,&
  2329. "",&
  2330. ls_unit,&
  2331. lde_qty,&
  2332. 1,&
  2333. ls_newlocation,0,0,0,'') = 0 THEN
  2334. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单失败,"+arg_msg
  2335. rslt = 0
  2336. GOTO ext
  2337. END IF
  2338. IF mxcnt > 0 THEN
  2339. IF uo_ware.Save(arg_msg,False) = 0 THEN
  2340. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单失败,"+arg_msg
  2341. rslt = 0
  2342. GOTO ext
  2343. END IF
  2344. ll_outwareid = uo_ware.outwareid
  2345. IF uo_ware.getinfo(ll_outwareid,arg_msg) = 0 THEN
  2346. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单查询信息失败,"+arg_msg
  2347. rslt = 0
  2348. GOTO ext
  2349. END IF
  2350. IF uo_ware.p_auditing(publ_operator,arg_msg,False) = 0 THEN
  2351. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,确认失败,"+arg_msg
  2352. rslt = 0
  2353. GOTO ext
  2354. END IF
  2355. IF uo_ware.ss_auditing(publ_operator,arg_msg,False) = 0 THEN
  2356. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调出审失败,"+arg_msg
  2357. rslt = 0
  2358. GOTO ext
  2359. END IF
  2360. IF uo_ware.ds_auditing(publ_operator,arg_msg,False) = 0 THEN
  2361. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调入审失败,"+arg_msg
  2362. rslt = 0
  2363. GOTO ext
  2364. END IF
  2365. END IF
  2366. END IF
  2367. IF lde_qty2 <> 0 THEN
  2368. IF ll_mxstorageid2 = 0 THEN
  2369. arg_msg = "请选择质检不合格调入仓库"
  2370. rslt = 0
  2371. GOTO ext
  2372. END IF
  2373. IF uo_ware.newbegin(arg_msg) = 0 THEN //
  2374. rslt = 0
  2375. GOTO ext
  2376. END IF
  2377. i = 1
  2378. uo_ware.outdate = DateTime(Today()) // 发生时间
  2379. uo_ware.indate = DateTime(Today()) // 发生时间
  2380. uo_ware.outrep = publ_operator // 经手人
  2381. uo_ware.dscrp = "采购收货明细质检不合格调仓" //备注
  2382. uo_ware.sstorageid = ll_storageid
  2383. uo_ware.dstorageid = ll_mxstorageid2
  2384. uo_ware.relcode = ls_inwarecode+"." + String(arg_printid)
  2385. uo_ware.ifauto = 1
  2386. mxcnt = 1
  2387. IF uo_ware.acceptmx(ll_mtrlwareid,&
  2388. lde_qty2,&
  2389. lde_price,&
  2390. arg_msg,&
  2391. i,&
  2392. "",&
  2393. ls_unit,&
  2394. lde_qty2,&
  2395. 1,&
  2396. ls_newlocation,0,0,0,'') = 0 THEN
  2397. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单失败,"+arg_msg
  2398. rslt = 0
  2399. GOTO ext
  2400. END IF
  2401. IF mxcnt > 0 THEN
  2402. IF uo_ware.Save(arg_msg,False) = 0 THEN
  2403. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单失败,"+arg_msg
  2404. rslt = 0
  2405. GOTO ext
  2406. END IF
  2407. ll_outwareid = uo_ware.outwareid
  2408. IF uo_ware.getinfo(ll_outwareid,arg_msg) = 0 THEN
  2409. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单查询信息失败,"+arg_msg
  2410. rslt = 0
  2411. GOTO ext
  2412. END IF
  2413. IF uo_ware.p_auditing(publ_operator,arg_msg,False) = 0 THEN
  2414. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,确认失败,"+arg_msg
  2415. rslt = 0
  2416. GOTO ext
  2417. END IF
  2418. IF uo_ware.ss_auditing(publ_operator,arg_msg,False) = 0 THEN
  2419. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调出审失败,"+arg_msg
  2420. rslt = 0
  2421. GOTO ext
  2422. END IF
  2423. IF uo_ware.ds_auditing(publ_operator,arg_msg,False) = 0 THEN
  2424. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调入审失败,"+arg_msg
  2425. rslt = 0
  2426. GOTO ext
  2427. END IF
  2428. END IF
  2429. END IF
  2430. ext:
  2431. Destroy uo_ware
  2432. RETURN rslt
  2433. end function
  2434. public function integer uof_destroy_move (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg);Int rslt = 1
  2435. Long i, cnt
  2436. Long ll_mxstorageid
  2437. Long ll_mtrlwareid
  2438. String ls_inwarecode, ls_outwarecode, ls_outwarecode_arr[]
  2439. Long ll_storageid, ll_mxstorageid2
  2440. Long ll_outwareid, ll_outwareid_arr[]
  2441. String ls_relcode
  2442. uo_outware_move uo_ware
  2443. uo_ware = Create uo_outware_move
  2444. uo_ware.if_getid_ture = False
  2445. SELECT inwarecode , storageid
  2446. INTO :ls_inwarecode, :ll_storageid
  2447. FROM u_inware
  2448. WHERE scid = :arg_scid
  2449. And inwareid = :arg_inwareid;
  2450. IF sqlca.SQLCode <> 0 THEN
  2451. arg_msg = "查询采购收货单信息失败,"+sqlca.SQLErrText
  2452. rslt = 0
  2453. GOTO ext
  2454. END IF
  2455. SELECT mtrlwareid, storageid, storageid2
  2456. INTO :ll_mtrlwareid, :ll_mxstorageid, :ll_mxstorageid2
  2457. FROM u_inwaremx
  2458. WHERE scid = :arg_scid
  2459. AND inwareid = :arg_inwareid
  2460. And printid = :arg_printid;
  2461. IF sqlca.SQLCode <> 0 THEN
  2462. arg_msg = "查询采购收货单明细信息失败,"+sqlca.SQLErrText
  2463. rslt = 0
  2464. GOTO ext
  2465. END IF
  2466. ls_relcode = ls_inwarecode +"." + String(arg_printid)
  2467. cnt = 0
  2468. DECLARE cur_move CURSOR FOR
  2469. SELECT OutWareID, outwarecode
  2470. FROM u_outware_move
  2471. WHERE relcode = :ls_relcode
  2472. And sstorageid = :ll_storageid;
  2473. OPEN cur_move ;
  2474. FETCH cur_move Into :ll_outwareid, :ls_outwarecode;
  2475. DO WHILE sqlca.SQLCode = 0
  2476. cnt++
  2477. ll_outwareid_arr[cnt] = ll_outwareid
  2478. ls_outwarecode_arr[cnt] = ls_outwarecode
  2479. FETCH cur_move Into :ll_outwareid, :ls_outwarecode;
  2480. LOOP
  2481. CLOSE cur_move;
  2482. IF cnt = 0 THEN
  2483. GOTO ext
  2484. END IF
  2485. FOR i = 1 To cnt
  2486. ll_outwareid = ll_outwareid_arr[i]
  2487. ls_outwarecode = ls_outwarecode_arr[i]
  2488. IF ll_outwareid > 0 THEN
  2489. IF uo_ware.getinfo(ll_outwareid,arg_msg) = 0 THEN
  2490. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单查询信息失败,"+arg_msg
  2491. rslt = 0
  2492. GOTO ext
  2493. END IF
  2494. IF uo_ware.c_ds_auditing(arg_msg,False) = 0 THEN
  2495. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调入撤审失败,"+arg_msg
  2496. rslt = 0
  2497. GOTO ext
  2498. END IF
  2499. IF uo_ware.c_ss_auditing(arg_msg,False) = 0 THEN
  2500. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调出撤审失败,"+arg_msg
  2501. rslt = 0
  2502. GOTO ext
  2503. END IF
  2504. IF uo_ware.c_p_auditing(arg_msg,False) = 0 THEN
  2505. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,反确认失败,"+arg_msg
  2506. rslt = 0
  2507. GOTO ext
  2508. END IF
  2509. IF uo_ware.Cancel(ll_outwareid,arg_msg,False) = 0 THEN
  2510. arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,删除失败,"+arg_msg
  2511. rslt = 0
  2512. GOTO ext
  2513. END IF
  2514. //日志
  2515. f_setsysoplog('仓库调拨单','采购收货单明细质检撤审自动删除相关仓库调拨单,id:'+String(ll_outwareid)+',单号:'+ls_outwarecode,arg_msg,False)
  2516. END IF
  2517. NEXT
  2518. //SELECT count(*)
  2519. // INTO :cnt
  2520. // FROM u_outware_move
  2521. // WHERE relcode = :ls_relcode
  2522. // AND sstorageid = :ll_storageid
  2523. // And dstorageid = :ll_mxstorageid Using sqlca;
  2524. //IF sqlca.SQLCode <> 0 THEN
  2525. // arg_msg = "查询采购收货单相关仓库调拨单失败,"+sqlca.SQLErrText
  2526. // rslt = 0
  2527. // GOTO ext
  2528. //END IF
  2529. //
  2530. //IF cnt > 1 THEN
  2531. // arg_msg = "采购收货单存在多张相关仓库调拨单,请手动删除"
  2532. // rslt = 0
  2533. // GOTO ext
  2534. //ELSEIF cnt = 1 THEN
  2535. //
  2536. // SELECT OutWareID, outwarecode
  2537. // INTO :ll_OutWareID, :ls_outwarecode
  2538. // FROM u_outware_move
  2539. // WHERE relcode = :ls_relcode
  2540. // AND sstorageid = :ll_storageid
  2541. // And dstorageid = :ll_mxstorageid Using sqlca;
  2542. // IF sqlca.SQLCode <> 0 THEN
  2543. // arg_msg = "查询采购收货单相关仓库调拨单失败,"+sqlca.SQLErrText
  2544. // rslt = 0
  2545. // GOTO ext
  2546. // END IF
  2547. //
  2548. // IF uo_ware.getinfo(ll_outwareid,arg_msg) = 0 THEN
  2549. // arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单查询信息失败,"+arg_msg
  2550. // rslt = 0
  2551. // GOTO ext
  2552. // END IF
  2553. // IF uo_ware.c_ds_auditing(arg_msg,False) = 0 THEN
  2554. // arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调入撤审失败,"+arg_msg
  2555. // rslt = 0
  2556. // GOTO ext
  2557. // END IF
  2558. // IF uo_ware.c_ss_auditing(arg_msg,False) = 0 THEN
  2559. // arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,调出撤审失败,"+arg_msg
  2560. // rslt = 0
  2561. // GOTO ext
  2562. // END IF
  2563. // IF uo_ware.c_p_auditing(arg_msg,False) = 0 THEN
  2564. // arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,反确认失败,"+arg_msg
  2565. // rslt = 0
  2566. // GOTO ext
  2567. // END IF
  2568. // IF uo_ware.Cancel(ll_outwareid,arg_msg,False) = 0 THEN
  2569. // arg_msg = "采购收货单明细质检审核自动建立相关仓库调拨单,删除失败,"+arg_msg
  2570. // rslt = 0
  2571. // GOTO ext
  2572. // END IF
  2573. //
  2574. // //日志
  2575. // f_setsysoplog('仓库调拨单','采购收货单明细质检撤审自动删除相关仓库调拨单,id:'+String(ll_outwareid)+',单号:'+ls_outwarecode,arg_msg,False)
  2576. //
  2577. //END IF
  2578. ext:
  2579. Destroy uo_ware
  2580. RETURN rslt
  2581. end function
  2582. public function integer uof_update_chkqty (long arg_scid, long arg_inwareid, long arg_printid, s_inwaremx s_mx, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2583. Decimal ld_qty,lde_chkqty, lde_badqty, lde_goodqty
  2584. Int li_chkflag
  2585. SELECT qty,chkqty,badqty, goodqty , chkflag
  2586. INTO :ld_qty,:lde_chkqty, :lde_badqty, :lde_goodqty, :li_chkflag
  2587. FROM u_inwaremx
  2588. WHERE scid = :arg_scid
  2589. AND inwareid = :arg_inwareid
  2590. And printid = :arg_printid Using sqlca;
  2591. IF sqlca.SQLCode <> 0 THEN
  2592. arg_msg = '查询采购收货单信息失败,'+sqlca.SQLErrText
  2593. rslt = 0
  2594. GOTO ext
  2595. END IF
  2596. IF li_chkflag = 1 THEN
  2597. arg_msg = '采购收货单已经明细质检审核,不能更新质检数量相关数据'
  2598. rslt = 0
  2599. GOTO ext
  2600. END IF
  2601. IF s_mx.chkqty > 0 THEN
  2602. IF ld_qty < lde_chkqty + s_mx.chkqty THEN
  2603. arg_msg = '采购收货单抽检数量大于进仓数量'
  2604. rslt = 0
  2605. GOTO ext
  2606. END IF
  2607. ELSE
  2608. IF lde_chkqty < Abs(s_mx.chkqty) THEN
  2609. arg_msg = '采购收货单已抽检数量少于本次减少数量'
  2610. rslt = 0
  2611. GOTO ext
  2612. END IF
  2613. END IF
  2614. UPDATE u_inwaremx
  2615. SET chkqty = chkqty + :s_mx.chkqty,
  2616. badqty = badqty + :s_mx.badqty,
  2617. goodqty = goodqty + :s_mx.goodqty,
  2618. chkinqty = chkinqty + :s_mx.chkinqty,
  2619. chkinqty2 = chkinqty2 + :s_mx.chkinqty2
  2620. WHERE scid = :arg_scid
  2621. AND inwareid = :arg_inwareid
  2622. And printid = :arg_printid Using sqlca;
  2623. IF sqlca.SQLCode <> 0 THEN
  2624. arg_msg = '更新质检数失败,'+sqlca.SQLErrText
  2625. rslt = 0
  2626. GOTO ext
  2627. END IF
  2628. ext:
  2629. IF rslt = 0 THEN
  2630. ROLLBACK Using sqlca;
  2631. ELSEIF rslt = 1 And arg_ifcommit THEN
  2632. COMMIT Using sqlca;
  2633. END IF
  2634. RETURN rslt
  2635. end function
  2636. public function integer uf_cmp_mxmx (ref string arg_msg);// DONE: 计算明细
  2637. //IF Not dw_edit_mode THEN
  2638. // arg_msg = '非编辑状态下不能生成包件明细'
  2639. // RETURN 0
  2640. //END IF
  2641. //
  2642. Long ll_i,ll_j,ll_k, i
  2643. Long ll_row
  2644. Long ll_mtrlid,ll_sptid,ll_storageid
  2645. String ls_mtrlcode,ls_unit
  2646. String ls_plancode,ls_status,ls_woodcode,ls_pcode,ls_mtrlcuscode,ls_location,ls_waredscrp
  2647. String ls_cuscode,ls_cusname,ls_mxdscrp
  2648. Long ll_printid
  2649. Decimal ld_qty,ld_fprice,ld_rebate,ld_planprice_p,ld_uprice,ld_rate
  2650. Int li_outtype,li_ifpackpro
  2651. String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[]
  2652. Int li_ifover[],li_dipztype[]
  2653. String ls_pf_mtrlcode[],ls_pf_mtrlname[],ls_pf_mtrlmode[],ls_pf_unit[]
  2654. Decimal ld_Sonscale[],ld_planprice_c[]
  2655. Long ll_SonMtrlid[]
  2656. Long it_mxt = 1
  2657. String ls_status_find,ls_woodcode_find,ls_pcode_find
  2658. Decimal ld_rqty,ld_enprice
  2659. Int li_outtype_storage
  2660. Long ll_ucrow
  2661. Decimal ld_mrate
  2662. ld_mrate = mrate
  2663. ll_storageid = storageid
  2664. IF f_rst_storage_outtype(ll_storageid,li_outtype_storage) = 0 THEN
  2665. arg_msg = '查询仓库出仓策略失败,请检查'
  2666. RETURN 0
  2667. END IF
  2668. //dw_mxmx.Reset()
  2669. IF li_outtype_storage = 0 THEN RETURN 1
  2670. FOR ll_i = 1 To UpperBound(inwaremx)
  2671. IF inwaremx[ll_i].mtrlid = 0 THEN CONTINUE
  2672. ll_mtrlid = inwaremx[ll_i].mtrlid
  2673. ll_sptid = 0 //dw_child.Object.u_inwaremx_sptid_cusid[ll_i]
  2674. ls_plancode = inwaremx[ll_i].plancode
  2675. ls_status = inwaremx[ll_i].status
  2676. ls_woodcode = inwaremx[ll_i].woodcode
  2677. ls_pcode = inwaremx[ll_i].pcode
  2678. ls_mtrlcuscode = inwaremx[ll_i].mtrlcuscode
  2679. ls_location = inwaremx[ll_i].Location
  2680. ld_qty = inwaremx[ll_i].qty
  2681. ld_enprice = inwaremx[ll_i].enprice
  2682. ld_uprice = ld_enprice * ld_mrate
  2683. ld_rebate = inwaremx[ll_i].rebate
  2684. ld_rate = 1 //dw_child.Object.u_inwaremx_rate[ll_i]
  2685. IF ld_rate = 0 THEN ld_rate = 1
  2686. ld_fprice = Round(ld_uprice/ld_rate,5)
  2687. ls_mxdscrp = inwaremx[ll_i].mxdscrp
  2688. ls_waredscrp = '' //dw_child.Object.u_inwaremx_waredscrp[ll_i]
  2689. ls_mtrlcode = inwaremx[ll_i].mtrlcode
  2690. // ls_mtrlname = dw_child.Object.mtrlname_my[ll_i]
  2691. // ls_mtrlmode = dw_child.Object.mtrlmode_my[ll_i]
  2692. ls_unit = inwaremx[ll_i].unit
  2693. ls_cuscode = '' //dw_child.Object.u_cust_cuscode[ll_i]
  2694. ls_cusname = '' //dw_child.Object.u_cust_name[ll_i]
  2695. ll_printid = ll_i
  2696. SELECT outtype,ifpackpro INTO :li_outtype,:li_ifpackpro
  2697. FROM u_mtrldef
  2698. Where mtrlid = :ll_mtrlid;
  2699. IF sqlca.SQLCode <> 0 THEN
  2700. arg_msg = '查询物料出仓类型失败'
  2701. RETURN 0
  2702. END IF
  2703. IF li_outtype_storage <> 0 THEN
  2704. // IF li_outtype = 0 OR li_ifpackpro = 0 THEN
  2705. IF Not ((li_outtype = 1 Or li_outtype = 2) And li_ifpackpro = 1) THEN
  2706. i = it_mxbt_mx + 1
  2707. IF acceptmx_mx(ll_printid,&
  2708. ll_mtrlid,&
  2709. ls_mtrlcode,&
  2710. ls_plancode,&
  2711. ls_status,&
  2712. ld_qty,&
  2713. ld_fprice,&
  2714. ld_rebate,&
  2715. ls_mxdscrp,&
  2716. arg_msg,&
  2717. ls_woodcode,&
  2718. ls_pcode,&
  2719. ll_sptid,i,'',&
  2720. ls_mtrlcuscode,&
  2721. ls_location,0,0,&
  2722. 1) = 0 THEN
  2723. RETURN 0
  2724. END IF
  2725. ELSE
  2726. ld_planprice_p = 0
  2727. it_mxt = 1
  2728. DECLARE cur_pf CURSOR FOR
  2729. SELECT u_PrdPF.SonMtrlid,
  2730. u_PrdPF.status,
  2731. u_PrdPF.woodcode,
  2732. u_PrdPF.pcode,
  2733. u_PrdPF.ifover,
  2734. u_prdpf.dipztype,
  2735. u_prdpf.Sonscale,
  2736. u_mtrldef.mtrlcode,
  2737. u_mtrldef.mtrlname,
  2738. u_mtrldef.mtrlmode,
  2739. u_mtrldef.unit,
  2740. u_mtrldef.planprice
  2741. FROM u_PrdPF,u_mtrl_pf,u_mtrldef
  2742. WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  2743. AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  2744. AND ( u_PrdPF.sonmtrlid = u_mtrldef.mtrlid )
  2745. AND ( u_PrdPF.mtrlid = :ll_mtrlid )
  2746. AND ( u_mtrl_pf.ifdi = 1 AND :li_ifpackpro = 0
  2747. OR u_mtrl_pf.ifdft = 1 AND :li_ifpackpro = 1 )
  2748. And ( u_mtrldef.ifpack > 0 );
  2749. OPEN cur_pf;
  2750. FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt],
  2751. :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],
  2752. :li_dipztype[it_mxt],:ld_Sonscale[it_mxt],
  2753. :ls_pf_mtrlcode[it_mxt],:ls_pf_mtrlname[it_mxt],
  2754. :ls_pf_mtrlmode[it_mxt],:ls_pf_unit[it_mxt],:ld_planprice_c[it_mxt];
  2755. DO WHILE sqlca.SQLCode = 0
  2756. ld_planprice_p += ld_planprice_c[it_mxt]
  2757. it_mxt++
  2758. FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ls_pf_status[it_mxt],
  2759. :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],
  2760. :li_dipztype[it_mxt],:ld_Sonscale[it_mxt],
  2761. :ls_pf_mtrlcode[it_mxt],:ls_pf_mtrlname[it_mxt],
  2762. :ls_pf_mtrlmode[it_mxt],:ls_pf_unit[it_mxt],:ld_planprice_c[it_mxt];
  2763. LOOP
  2764. it_mxt = it_mxt - 1
  2765. CLOSE cur_pf;
  2766. FOR ll_j = 1 To it_mxt
  2767. IF li_ifover[ll_j] = 1 THEN
  2768. CHOOSE CASE li_dipztype[ll_j]
  2769. CASE 0
  2770. ls_status_find = ls_status
  2771. ls_woodcode_find = ''
  2772. ls_pcode_find = ''
  2773. CASE 1
  2774. ls_status_find = ''
  2775. ls_woodcode_find = ls_woodcode
  2776. ls_pcode_find = ''
  2777. CASE 2
  2778. ls_status_find = ''
  2779. ls_woodcode_find = ''
  2780. ls_pcode_find = ls_pcode
  2781. CASE 3
  2782. ls_status_find = ls_status
  2783. ls_woodcode_find = ls_woodcode
  2784. ls_pcode_find = ''
  2785. CASE 4
  2786. ls_status_find = ''
  2787. ls_woodcode_find = ls_woodcode
  2788. ls_pcode_find = ls_pcode
  2789. CASE 5
  2790. ls_status_find = ls_status
  2791. ls_woodcode_find = ''
  2792. ls_pcode_find = ls_pcode
  2793. CASE 6
  2794. ls_status_find = ls_status
  2795. ls_woodcode_find = ls_woodcode
  2796. ls_pcode_find = ls_pcode
  2797. END CHOOSE
  2798. ELSE
  2799. ls_status_find = ls_pf_status[ll_j]
  2800. ls_woodcode_find = ls_pf_woodcode[ll_j]
  2801. ls_pcode_find = ls_pf_pcode[ll_j]
  2802. END IF
  2803. ls_status_find = Trim(ls_status_find)
  2804. ls_woodcode_find = Trim(ls_woodcode_find)
  2805. ls_pcode_find = Trim(ls_pcode_find)
  2806. ld_rqty = ld_Sonscale[ll_j] * ld_qty
  2807. IF it_mxt = 1 THEN
  2808. ld_fprice = ld_fprice
  2809. ELSE
  2810. IF ld_planprice_p = 0 THEN
  2811. ld_fprice = Round(ld_fprice/it_mxt,2)
  2812. ELSE
  2813. ld_fprice = Round(ld_fprice * ld_planprice_c[ll_j]/ld_planprice_p,2)
  2814. END IF
  2815. END IF
  2816. i = it_mxbt_mx + 1
  2817. IF acceptmx_mx(ll_printid,&
  2818. ll_SonMtrlid[ll_j],&
  2819. ls_pf_mtrlcode[ll_j],&
  2820. ls_plancode,&
  2821. ls_status_find,&
  2822. ld_rqty,&
  2823. ld_fprice,&
  2824. ld_rebate,&
  2825. ls_mxdscrp,&
  2826. arg_msg,&
  2827. ls_woodcode_find,&
  2828. ls_pcode_find,&
  2829. ll_sptid,i,'',&
  2830. ls_mtrlcuscode,&
  2831. ls_location,0,0,&
  2832. 0) = 0 THEN
  2833. RETURN 0
  2834. END IF
  2835. NEXT
  2836. END IF
  2837. END IF
  2838. NEXT
  2839. RETURN 1
  2840. end function
  2841. on uo_inware_buy.create
  2842. call super::create
  2843. end on
  2844. on uo_inware_buy.destroy
  2845. call super::destroy
  2846. end on
  2847. event constructor;call super::constructor;String str_optionvalue,arg_msg
  2848. f_get_sys_option_value('168',str_optionvalue,arg_msg)
  2849. uo_option_buy_sptprice_sec = Long(str_optionvalue)
  2850. f_get_sys_option_value('130',str_optionvalue,arg_msg)
  2851. uo_option_check_buyin = Long(str_optionvalue)
  2852. f_get_sys_option_value('241',str_optionvalue,arg_msg)
  2853. uo_option_m_mstpay = Long(str_optionvalue)
  2854. f_get_sys_option_value('331',str_optionvalue,arg_msg)
  2855. uo_option_buyth_use_price_update_wareamt = Long(str_optionvalue)
  2856. end event