uo_inware_cp.sru 83 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108
  1. $PBExportHeader$uo_inware_cp.sru
  2. forward
  3. global type uo_inware_cp from uo_inware
  4. end type
  5. end forward
  6. global type uo_inware_cp from uo_inware
  7. end type
  8. global uo_inware_cp uo_inware_cp
  9. type variables
  10. Int uo_option_order_ml_cpfp_noreltask
  11. Int uo_option_wkpmtrlware
  12. Int uo_option_cpinware_update_planprice
  13. Int uo_option_inware_cp_autoreturnfp_audit
  14. Int uo_mtrlware_trans_fp_return_secaudit
  15. end variables
  16. forward prototypes
  17. public function integer auditing (boolean arg_ifcommit, ref string arg_msg)
  18. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg)
  19. public function integer uof_auto_scll (ref string arg_msg, boolean arg_ifcommit)
  20. public function integer uof_auto_scll_caudit (ref string arg_msg, boolean arg_ifcommit)
  21. public function integer uof_get_porder (ref long arg_orderid[], ref decimal arg_acmpqty[], ref string arg_msg)
  22. public function integer uof_auto_di_in (long arg_orderid[], decimal arg_acmpqty[], ref string arg_msg, boolean arg_ifcommit)
  23. public function integer uof_auto_di_out (long arg_orderid[], decimal arg_acmpqty[], ref string arg_msg, boolean arg_ifcommit)
  24. public function integer uof_auto_di_caudit (ref string arg_msg, boolean arg_ifcommit)
  25. public function integer priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer uof_update_planmx_fqty (long arg_scid, long arg_orderid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  27. public function integer uof_auto_return_fp (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_shareqty, long arg_mtrlwareid, ref string arg_msg, boolean arg_ifcommit)
  28. public function integer fkauditing (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg)
  29. public function integer c_fkauditing (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg)
  30. public function integer uof_auto_scll_p (ref string arg_msg)
  31. public function integer uof_add_relcode (long arg_scid, long arg_inwareid, string arg_relcode, ref string arg_msg, boolean arg_ifcommit)
  32. public function integer uof_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  33. public function integer uof_add_pack_fpqty (long arg_scid, long arg_orderid, long arg_mtrlwareid, long arg_mtrlid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit)
  34. end prototypes
  35. public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  36. Long i,j,k,l,mx_barcode_cnt,m,ll_find
  37. Long ll_sptid,ll_mtrlwareid_ref
  38. String ls_mtrlcuscode,ls_msg
  39. String ls_storagename
  40. Int li_outtype,li_storagetype
  41. Int li_ordertype
  42. Int li_ordertype_case,li_ordertype_p
  43. Long ll_orderid_retrieve,ll_orderid_p,ll_mtrlid_p
  44. Int li_mtrlid_p_ifpackpro
  45. String ls_status_p
  46. Long ll,ll_taskid,ll_printid,ll_if_saletaskmx_pf_change
  47. s_mtrlcfg_expr s_pz[]
  48. Decimal ld_sonscale_retrieve
  49. Long arg_s_arr,ll_relbillid,ll_relprintid
  50. Decimal ld_qty_tmp
  51. Decimal ld_minrate
  52. Long cnt,cnt_ck
  53. Decimal ld_orderqty,ld_acmpqty
  54. Decimal ld_uprate,ld_upqty
  55. s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst
  56. s_inwaremx_barcode_fp arg_s_mxbarcode_fp
  57. Long ll_array
  58. IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN
  59. rslt = 0
  60. GOTO ext
  61. END IF
  62. s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null
  63. IF uo_option_inout_type = -1000 THEN
  64. rslt = 0
  65. arg_msg = '选项:[142]进出仓高级选项,读取初始默认值失败,操作取消!'
  66. GOTO ext
  67. END IF
  68. IF uo_option_barcode_inwarecp_paudit = -1000 THEN
  69. rslt = 0
  70. arg_msg = '选项:[207]仓库使用条码流程,读取初始默认值失败,操作取消!'
  71. GOTO ext
  72. END IF
  73. IF uo_option_order_ml_cpfp_noreltask = -1000 THEN
  74. rslt = 0
  75. arg_msg = '选项:[224]生产进仓库存分配时不考虑计划相关订单,读取初始默认值失败,操作取消!'
  76. GOTO ext
  77. END IF
  78. IF uo_option_cp_inware_scll_rate = -1000 THEN
  79. rslt = 0
  80. arg_msg = '选项:[249]指令单生产进仓单审核时限制最大进仓数不能大于领料配套数量,读取初始默认值失败,操作取消!'
  81. GOTO ext
  82. END IF
  83. IF uo_option_cpinware_update_planprice = -1000 THEN
  84. rslt = 0
  85. arg_msg = '选项:[256]生产进仓单审核更新计划成本价,读取初始默认值失败,操作取消!'
  86. GOTO ext
  87. END IF
  88. IF uo_mtrlware_trans_fp_return_secaudit = -1000 THEN
  89. rslt = 0
  90. arg_msg = '选项:[346]库存分配还货单使用二级审核,读取初始默认值失败,操作取消!'
  91. GOTO ext
  92. END IF
  93. IF uo_option_inware_cp_autoreturnfp_audit = -1000 THEN
  94. rslt = 0
  95. arg_msg = '选项:[354]生产进仓单自动生成库存分配还货单审核选项,读取初始默认值失败,操作取消!'
  96. GOTO ext
  97. END IF
  98. IF uo_option_canpack_ifzanyong = -1000 THEN
  99. rslt = 0
  100. arg_msg = '选项:[417]通用包件产品可装数选项,读取初始默认值失败,操作取消!'
  101. GOTO ext
  102. END IF
  103. uo_mtrlware_assign uo_ma
  104. uo_ma = Create uo_mtrlware_assign
  105. uo_ma.commit_transaction = commit_transaction
  106. uo_ma.ib_ifinware_audit_do = True
  107. uo_cmpl_packpro uo_cmpl_p
  108. uo_cmpl_p = Create uo_cmpl_packpro
  109. uo_cmpl_p.commit_transaction = commit_transaction
  110. uo_order_ml uo_order
  111. uo_order = Create uo_order_ml
  112. datastore ds_order_replace
  113. ds_order_replace = Create datastore
  114. IF uo_option_order_ml_cpfp_noreltask = 0 THEN
  115. ds_order_replace.DataObject = 'ds_inwaremx_cp_order_mx_assign'
  116. ELSE
  117. ds_order_replace.DataObject = 'ds_inwaremx_cp_order_mx_assign2'
  118. END IF
  119. ds_order_replace.SetTransObject(commit_transaction)
  120. datastore ds_order_replace_pack
  121. ds_order_replace_pack = Create datastore
  122. datastore ds_order_fp
  123. ds_order_fp = Create datastore
  124. ds_order_fp.DataObject = 'ds_inwaremx_fp_assign'
  125. ds_order_fp.SetTransObject(commit_transaction)
  126. datastore ds_order_mx_find_taskmx
  127. ds_order_mx_find_taskmx = Create datastore
  128. ds_order_mx_find_taskmx.DataObject = 'ds_order_mx_find_salemx'
  129. ds_order_mx_find_taskmx.SetTransObject(commit_transaction)
  130. IF storageid = 0 THEN
  131. rslt = 0
  132. arg_msg = '没有正确的仓库'
  133. GOTO ext
  134. END IF
  135. IF billtype <> 9 THEN
  136. IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  137. rslt = 0
  138. GOTO ext
  139. END IF
  140. END IF
  141. SELECT storagename,outtype,storagetype
  142. INTO :ls_storagename,:li_outtype,:li_storagetype
  143. FROM u_storage
  144. Where storageid = :storageid Using commit_transaction ;
  145. IF commit_transaction.SQLCode <> 0 THEN
  146. rslt = 0
  147. arg_msg = "查询操作失败,仓库"
  148. GOTO ext
  149. END IF
  150. //检查是否有该仓库的建立权限
  151. IF sys_user_storagestr_audit <> '0' THEN
  152. IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN
  153. rslt = 0
  154. arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许审核该仓库的单据'
  155. GOTO ext
  156. END IF
  157. END IF
  158. //
  159. IF inwareid = 0 THEN
  160. rslt = 0
  161. arg_msg = "没有审核对象"
  162. GOTO ext
  163. END IF
  164. IF uo_option_inout_type = 2 And &
  165. uo_option_barcode_inwarecp_paudit = 1 And &
  166. ( li_outtype = 2 Or li_outtype = 3 ) THEN
  167. IF priceflag = 0 THEN
  168. rslt = 0
  169. arg_msg = "单据未确认"
  170. GOTO ext
  171. END IF
  172. END IF
  173. IF uo_option_barcode_inwarecp_paudit = 2 THEN
  174. IF priceflag = 0 THEN
  175. rslt = 0
  176. arg_msg = "单据未确认"
  177. GOTO ext
  178. END IF
  179. END IF
  180. IF flag = 1 THEN
  181. rslt = 0
  182. arg_msg = "单据已经审核"
  183. GOTO ext
  184. END IF
  185. //检查条码数量是否匹配
  186. If ( li_outtype = 2 Or li_outtype = 3 ) THEN
  187. IF uof_check_barcodeqty(arg_msg) = 0 THEN
  188. rslt = 0
  189. GOTO ext
  190. END IF
  191. END IF
  192. IF billtype = 3 THEN
  193. IF uo_option_cp_inware_scll_rate = 1 THEN
  194. FOR i = 1 To it_mxbt
  195. IF inwaremx[i].relid > 0 THEN
  196. IF uof_check_scll_rate(scid,inwareid,inwaremx[i].printid,inwaremx[i].relid,inwaremx[i].mtrlid,inwaremx[i].qty,1,arg_msg) = 0 THEN
  197. cnt_ck++
  198. ls_msg += '行:'+String(i)+',指令单号:'+inwaremx[i].relcode + ','+arg_msg+'~r~n'
  199. END IF
  200. END IF
  201. NEXT
  202. IF cnt_ck > 0 THEN
  203. arg_msg = ls_msg
  204. rslt = 0
  205. GOTO ext
  206. END IF
  207. END IF
  208. END IF
  209. UPDATE u_inware
  210. SET auditingrep = :publ_operator,
  211. auditingdate = getdate(),
  212. flag = 1
  213. WHERE u_inware.inwareid = :inwareid
  214. And flag = 0 And scid = :scid Using commit_transaction;
  215. IF commit_transaction.SQLCode <> 0 THEN
  216. rslt = 0
  217. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  218. GOTO ext
  219. ELSEIF commit_transaction.SQLNRows = 0 THEN
  220. rslt = 0
  221. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  222. GOTO ext
  223. END IF
  224. //IF uof_auto_scll(arg_msg,False) = 0 THEN
  225. // rslt = 0
  226. // GOTO ext
  227. //END IF
  228. Long ll_orderid_arr[]
  229. Decimal ld_acmpqty_arr[]
  230. IF uof_get_porder(ll_orderid_arr,ld_acmpqty_arr,arg_msg) = 0 THEN
  231. rslt = 0
  232. GOTO ext
  233. END IF
  234. FOR i = 1 To it_mxbt
  235. IF f_power_ind(2203,sys_msg_pow) And Not sys_power_issuper THEN
  236. IF inwaremx[i].price = 0 THEN
  237. rslt = 0
  238. arg_msg = '行:'+String(i)+',没有单价,请检查'
  239. GOTO ext
  240. END IF
  241. END IF
  242. //yyx20120206
  243. IF li_storagetype = 1 And inwaremx[i].ifpack <> 2 And inwaremx[i].ifpackpro <> 2 And inwaremx[i].ifpackpro <> 4 THEN
  244. ll_sptid = 0
  245. ls_mtrlcuscode = ''
  246. ELSE
  247. ll_sptid = inwaremx[i].sptid
  248. ls_mtrlcuscode = inwaremx[i].mtrlcuscode
  249. END IF
  250. //yyx20120206_end
  251. IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,&
  252. storageid,inwaremx[i].plancode,inwaremx[i].status,&
  253. inwaremx[i].qty,inwaremx[i].uqty,inwaremx[i].price,inwaremx[i].planprice,&
  254. ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,&
  255. inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,&
  256. inwaremx[i].mtrlwaredscrp,inwaremx[i].ifvqty,arg_msg) = 0 THEN
  257. arg_msg = '更新行:'+String(i)+','+arg_msg
  258. rslt = 0
  259. GOTO ext
  260. END IF
  261. IF uo_option_cpinware_update_planprice = 1 THEN
  262. IF f_update_planprice(inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,2,inwaremx[i].fprice,arg_msg,False,commit_transaction) = 0 THEN
  263. rslt = 0
  264. arg_msg = '更新行:'+String(i)+','+arg_msg
  265. GOTO ext
  266. END IF
  267. END IF
  268. IF inwaremx[i].relid > 0 THEN
  269. IF uo_order.addmxcmpl(scid,inwaremx[i].relid,inwaremx[i].qty,arg_msg,False) = 0 THEN
  270. arg_msg = '更新行:'+String(i)+','+arg_msg
  271. rslt = 0
  272. GOTO ext
  273. END IF
  274. //====================================================================
  275. // 检查计划是否可完成
  276. //====================================================================
  277. IF uo_order.tryfinishorder(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN
  278. arg_msg = '更新行:'+String(i)+','+arg_msg
  279. rslt = 0
  280. GOTO ext
  281. END IF
  282. //更新排程批(进仓计划) dyy20120809
  283. IF uof_update_planmx_fqty(scid,inwaremx[i].relid,inwaremx[i].qty,arg_msg,False) = 0 THEN
  284. arg_msg = '更新行:'+String(i)+','+arg_msg
  285. rslt = 0
  286. GOTO ext
  287. END IF
  288. END IF
  289. //取库存信息yyx2012-09-25
  290. ll_mtrlwareid_ref = 0
  291. IF uof_ref_mtrlwareid(scid,storageid,inwaremx[i].mtrlid,&
  292. inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].plancode,&
  293. inwaremx[i].Location,ll_sptid,ls_mtrlcuscode,ll_mtrlwareid_ref,arg_msg) = 0 THEN
  294. arg_msg = '行:'+String(i)+','+arg_msg
  295. rslt = 0
  296. GOTO ext
  297. END IF
  298. IF p_update_mtrlwareid_inwaremx(ll_mtrlwareid_ref,inwareid,inwaremx[i].printid,arg_msg,False) = 0 THEN
  299. arg_msg = '行:'+String(i)+','+arg_msg
  300. rslt = 0
  301. GOTO ext
  302. END IF
  303. //增加包件分配包件产品占用记录 dyy 20150306
  304. if inwaremx[i].ifpack = 1 and inwaremx[i].relid > 0 and uo_option_canpack_ifzanyong = 1 then
  305. //通用包件 并且 是按指令单的才执行
  306. if uof_add_pack_fpqty(scid,inwaremx[i].relid,ll_mtrlwareid_ref,inwaremx[i].mtrlid,inwaremx[i].qty,arg_msg,false) = 0 then
  307. rslt = 0
  308. goto ext
  309. end if
  310. end if
  311. //yyx20100814
  312. //库存分配
  313. IF li_storagetype = 1 THEN
  314. //取分配计划
  315. arg_s_arr = 0
  316. arg_s_ap = arg_s_ap_null
  317. //查询相关计划是否属于销售订单计划
  318. IF inwaremx[i].iffp = 0 THEN //旧模式
  319. IF billtype = 3 And inwaremx[i].relid > 0 THEN
  320. SELECT ordertype,porderid INTO :li_ordertype,:ll_orderid_p
  321. FROM u_order_ml
  322. WHERE orderid = :inwaremx[i].relid
  323. And scid = :scid Using commit_transaction;
  324. IF commit_transaction.SQLCode <> 0 THEN
  325. rslt = 0
  326. arg_msg = '行:'+String(i)+',查询计划类型失败,'+'~n'+commit_transaction.SQLErrText
  327. GOTO ext
  328. END IF
  329. IF ll_orderid_p > 0 THEN
  330. SELECT u_order_ml.mtrlid,u_order_ml.status_mode,u_mtrldef.ifpackpro,u_order_ml.ordertype
  331. INTO :ll_mtrlid_p,:ls_status_p,:li_mtrlid_p_ifpackpro,:li_ordertype_p
  332. FROM u_order_ml,u_mtrldef
  333. WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid
  334. AND u_order_ml.orderid = :ll_orderid_p
  335. And u_order_ml.scid = :scid Using commit_transaction;
  336. IF commit_transaction.SQLCode <> 0 THEN
  337. rslt = 0
  338. arg_msg = '行:'+String(i)+'查询分离指令单上级计划物料id,组合配置,包件产品类型失败'+'~n'+commit_transaction.SQLErrText
  339. GOTO ext
  340. END IF
  341. END IF
  342. CHOOSE CASE li_ordertype
  343. CASE 0
  344. li_ordertype_case = 0
  345. ll_orderid_retrieve = 0
  346. CASE 1
  347. li_ordertype_case = 1
  348. ll_orderid_retrieve = inwaremx[i].relid
  349. CASE 2
  350. li_ordertype_case = 0
  351. ll_orderid_retrieve = 0
  352. CASE 3
  353. li_ordertype_case = 0
  354. ll_orderid_retrieve = 0
  355. CASE 4
  356. IF li_ordertype_p = 1 THEN
  357. IF inwaremx[i].ifpackpro = 3 Or inwaremx[i].ifpackpro = 4 THEN //散排散进包件产品或整排散进包件产品
  358. li_ordertype_case = 2
  359. ll_orderid_retrieve = ll_orderid_p
  360. ld_sonscale_retrieve = 0
  361. f_checkpz(ls_status_p,s_pz[])
  362. FOR ll = 1 To UpperBound(s_pz)
  363. IF Trim(s_pz[ll].cfgname) = Trim(inwaremx[i].status) THEN
  364. ld_sonscale_retrieve = Dec(s_pz[ll].qty)
  365. END IF
  366. NEXT
  367. IF ld_sonscale_retrieve = 0 THEN
  368. rslt = 0
  369. arg_msg = '行:'+String(i)+'查询子件包件组成数失败,请检查相关主生产计划组合配置'
  370. GOTO ext
  371. END IF
  372. ELSEIF inwaremx[i].ifpack = 0 THEN //非包件产品
  373. IF inwaremx[i].u_mtrldef_ordertype = 1 THEN //分离排产
  374. IF ll_orderid_p = 0 THEN //非法
  375. li_ordertype_case = 0
  376. ll_orderid_retrieve = 0
  377. ELSE
  378. IF ll_mtrlid_p = inwaremx[i].mtrlid THEN
  379. li_ordertype_case = 1
  380. ll_orderid_retrieve = ll_orderid_p
  381. ELSE //
  382. li_ordertype = 0
  383. ll_orderid_retrieve = 0
  384. END IF
  385. END IF
  386. ELSE
  387. li_ordertype_case = 0
  388. ll_orderid_retrieve = 0
  389. END IF
  390. ELSEIF inwaremx[i].ifpack = 1 THEN //通用包件
  391. IF ll_mtrlid_p = inwaremx[i].mtrlid THEN
  392. li_ordertype_case = 1
  393. ll_orderid_retrieve = ll_orderid_p
  394. ELSE
  395. IF li_mtrlid_p_ifpackpro = 2 THEN
  396. li_ordertype_case = 5
  397. ll_orderid_retrieve = ll_orderid_p
  398. ELSE
  399. li_ordertype_case = 4
  400. ll_orderid_retrieve = inwaremx[i].relid
  401. END IF
  402. END IF
  403. ELSEIF inwaremx[i].ifpack = 2 THEN
  404. IF ll_mtrlid_p = inwaremx[i].mtrlid THEN
  405. li_ordertype_case = 1
  406. ll_orderid_retrieve = ll_orderid_p
  407. ELSE
  408. IF li_mtrlid_p_ifpackpro = 2 THEN
  409. li_ordertype_case = 5
  410. ll_orderid_retrieve = ll_orderid_p
  411. ELSE
  412. li_ordertype_case = 4
  413. ll_orderid_retrieve = inwaremx[i].relid
  414. END IF
  415. // li_ordertype_case = 3
  416. // ll_orderid_retrieve = ll_orderid_p
  417. END IF
  418. END IF
  419. ELSE
  420. li_ordertype_case = 0
  421. ll_orderid_retrieve = 0
  422. END IF
  423. END CHOOSE
  424. ELSE
  425. li_ordertype_case = 0
  426. ll_orderid_retrieve = 0
  427. END IF
  428. //li_ordertype_case
  429. //1-用上级主生产计划订单明细查询
  430. //2-组合配置包件产品子件包件进仓
  431. //3-个性包件产品的个性包件(取消这种yyx20120820)
  432. //4-通用包件产品通用包件进仓
  433. //5-个性包件产品包件(通用或个性)进仓
  434. CHOOSE CASE li_ordertype_case
  435. CASE 1 //非包件产品,指令单合并的按订单排产主生产计划
  436. IF uo_option_order_ml_cpfp_noreltask = 0 THEN
  437. ds_order_replace.Retrieve(scid,ll_orderid_retrieve)
  438. ELSE
  439. ds_order_replace.Retrieve(scid,inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode)
  440. END IF
  441. ds_order_replace.AcceptText()
  442. //找到相关订单就分配,没有则入公共库存 //成品
  443. IF ds_order_replace.RowCount() > 0 THEN
  444. ld_qty_tmp = inwaremx[i].qty
  445. FOR k = 1 To ds_order_replace.RowCount()
  446. arg_s_arr++
  447. arg_s_ap.planid[arg_s_arr] = 0
  448. arg_s_ap.assigntype[arg_s_arr] = 1
  449. arg_s_ap.scid[arg_s_arr] = scid
  450. arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref
  451. arg_s_ap.fpgrade[arg_s_arr] = 2
  452. IF uo_option_order_ml_cpfp_noreltask = 0 THEN
  453. arg_s_ap.relbillid[arg_s_arr] = ds_order_replace.Object.u_order_ml_mx_taskid[k]
  454. arg_s_ap.relprintid[arg_s_arr] = ds_order_replace.Object.u_order_ml_mx_taskmxid[k]
  455. ELSE
  456. arg_s_ap.relbillid[arg_s_arr] = ds_order_replace.Object.u_saletask_taskid[k]
  457. arg_s_ap.relprintid[arg_s_arr] = ds_order_replace.Object.u_saletaskmx_printid[k]
  458. END IF
  459. IF ld_qty_tmp <= ds_order_replace.Object.notassignqty[k] THEN
  460. arg_s_ap.notassignqty[arg_s_arr] = ld_qty_tmp
  461. arg_s_ap.shareqty[arg_s_arr] = 0
  462. EXIT
  463. ELSE
  464. arg_s_ap.notassignqty[arg_s_arr] = ds_order_replace.Object.notassignqty[k]
  465. ld_qty_tmp = ld_qty_tmp - ds_order_replace.Object.notassignqty[k]
  466. //yyx20120906
  467. //arg_s_ap.shareqty[arg_s_arr] = ds_order_replace.Object.sumqty[k] - ds_order_replace.Object.notassignqty[k]
  468. IF k = ds_order_replace.RowCount() THEN
  469. arg_s_ap.shareqty[arg_s_arr] = ld_qty_tmp
  470. ELSE
  471. arg_s_ap.shareqty[arg_s_arr] = 0
  472. END IF
  473. //
  474. END IF
  475. NEXT
  476. END IF
  477. CASE 2,3,4
  478. IF li_ordertype_case = 2 THEN
  479. ds_order_replace_pack.DataObject = 'ds_inwaremx_cp_order_mx_assign_pack_3_and_4'
  480. ds_order_replace_pack.SetTransObject(commit_transaction)
  481. ds_order_replace_pack.Retrieve(scid,ll_orderid_retrieve,inwaremx[i].mtrlid,inwaremx[i].status,ld_sonscale_retrieve)
  482. ELSEIF li_ordertype_case = 3 THEN
  483. ds_order_replace_pack.DataObject = 'ds_inwaremx_cp_order_mx_assign_pack_2'
  484. ds_order_replace_pack.SetTransObject(commit_transaction)
  485. ds_order_replace_pack.Retrieve(scid,ll_orderid_retrieve,inwaremx[i].mtrlid)
  486. ELSEIF li_ordertype_case = 4 THEN
  487. ds_order_replace_pack.DataObject = 'ds_inwaremx_cp_order_mx_assign_pack'
  488. ds_order_replace_pack.SetTransObject(commit_transaction)
  489. ds_order_replace_pack.Retrieve(scid,ll_orderid_retrieve,inwaremx[i].mtrlid)
  490. END IF
  491. ds_order_replace_pack.AcceptText()
  492. IF ds_order_replace_pack.RowCount() > 0 THEN
  493. ld_qty_tmp = inwaremx[i].qty
  494. FOR k = 1 To ds_order_replace_pack.RowCount()
  495. arg_s_arr++
  496. arg_s_ap.planid[arg_s_arr] = 0
  497. arg_s_ap.assigntype[arg_s_arr] = 1
  498. arg_s_ap.scid[arg_s_arr] = scid
  499. arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref
  500. arg_s_ap.relbillid[arg_s_arr] = ds_order_replace_pack.Object.u_order_ml_mx_taskid[k]
  501. arg_s_ap.relprintid[arg_s_arr] = ds_order_replace_pack.Object.u_order_ml_mx_taskmxid[k]
  502. arg_s_ap.fpgrade[arg_s_arr] = 2
  503. IF ld_qty_tmp <= ds_order_replace_pack.Object.notassignqty[k] THEN
  504. arg_s_ap.notassignqty[arg_s_arr] = ld_qty_tmp
  505. arg_s_ap.shareqty[arg_s_arr] = 0
  506. EXIT
  507. ELSE
  508. arg_s_ap.notassignqty[arg_s_arr] = ds_order_replace_pack.Object.notassignqty[k]
  509. ld_qty_tmp = ld_qty_tmp - ds_order_replace_pack.Object.notassignqty[k]
  510. //yyx20120906
  511. //arg_s_ap.shareqty[arg_s_arr] = ds_order_replace_pack.Object.sumqty[k] - ds_order_replace_pack.Object.notassignqty[k]
  512. IF k = ds_order_replace_pack.RowCount() THEN
  513. arg_s_ap.shareqty[arg_s_arr] = ld_qty_tmp
  514. ELSE
  515. arg_s_ap.shareqty[arg_s_arr] = 0
  516. END IF
  517. //
  518. END IF
  519. NEXT
  520. END IF
  521. CASE 5
  522. ds_order_mx_find_taskmx.Retrieve(scid,ll_orderid_retrieve)
  523. IF ds_order_mx_find_taskmx.RowCount() > 0 THEN
  524. ld_qty_tmp = inwaremx[i].qty
  525. FOR l = 1 To ds_order_mx_find_taskmx.RowCount()
  526. IF ld_qty_tmp <= 0 THEN EXIT
  527. ll_taskid = ds_order_mx_find_taskmx.Object.u_order_ml_mx_taskid[l]
  528. ll_printid = ds_order_mx_find_taskmx.Object.u_order_ml_mx_taskmxid[l]
  529. SELECT count(*)
  530. INTO :ll_if_saletaskmx_pf_change
  531. FROM u_saletaskmx_pf
  532. WHERE u_saletaskmx_pf.scid = :scid
  533. AND u_saletaskmx_pf.taskid = :ll_taskid
  534. And u_saletaskmx_pf.printid = :ll_printid Using commit_transaction ;
  535. IF commit_transaction.SQLCode <> 0 THEN
  536. rslt = 0
  537. arg_msg = '行:'+String(i)+'查询相关订单是否有换包件失败,'+commit_transaction.SQLErrText
  538. GOTO ext
  539. END IF
  540. IF ll_if_saletaskmx_pf_change > 0 THEN
  541. ds_order_replace_pack.DataObject = 'ds_inwaremx_cp_order_mx_assign_pack_5_1'
  542. ds_order_replace_pack.SetTransObject(commit_transaction)
  543. ds_order_replace_pack.Retrieve(scid,ll_taskid,ll_printid,inwaremx[i].mtrlid)
  544. ELSE
  545. ds_order_replace_pack.DataObject = 'ds_inwaremx_cp_order_mx_assign_pack_5_2'
  546. ds_order_replace_pack.SetTransObject(commit_transaction)
  547. ds_order_replace_pack.Retrieve(scid,ll_taskid,ll_printid,inwaremx[i].mtrlid)
  548. END IF
  549. ds_order_replace_pack.AcceptText()
  550. IF ds_order_replace_pack.RowCount() > 0 THEN
  551. FOR k = 1 To ds_order_replace_pack.RowCount()
  552. arg_s_arr++
  553. arg_s_ap.planid[arg_s_arr] = 0
  554. arg_s_ap.assigntype[arg_s_arr] = 1
  555. arg_s_ap.scid[arg_s_arr] = scid
  556. arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref
  557. arg_s_ap.relbillid[arg_s_arr] = ds_order_replace_pack.Object.u_saletaskmx_taskid[k]
  558. arg_s_ap.relprintid[arg_s_arr] = ds_order_replace_pack.Object.u_saletaskmx_printid[k]
  559. arg_s_ap.fpgrade[arg_s_arr] = 2
  560. IF ld_qty_tmp <= ds_order_replace_pack.Object.notassignqty[k] THEN
  561. arg_s_ap.notassignqty[arg_s_arr] = ld_qty_tmp
  562. ld_qty_tmp = 0
  563. arg_s_ap.shareqty[arg_s_arr] = 0
  564. EXIT
  565. ELSE
  566. arg_s_ap.notassignqty[arg_s_arr] = ds_order_replace_pack.Object.notassignqty[k]
  567. ld_qty_tmp = ld_qty_tmp - ds_order_replace_pack.Object.notassignqty[k]
  568. //yyx20120906
  569. //arg_s_ap.shareqty[arg_s_arr] = ds_order_replace_pack.Object.sumqty[k] - ds_order_replace_pack.Object.notassignqty[k]
  570. IF k = ds_order_replace_pack.RowCount() THEN
  571. arg_s_ap.shareqty[arg_s_arr] = ld_qty_tmp
  572. ELSE
  573. arg_s_ap.shareqty[arg_s_arr] = 0
  574. END IF
  575. //
  576. END IF
  577. NEXT
  578. END IF
  579. NEXT
  580. END IF
  581. CASE 0
  582. //指令查分配计划
  583. ds_order_fp.Retrieve(scid,inwaremx[i].relid,0,1)
  584. ds_order_fp.AcceptText()
  585. IF ds_order_fp.RowCount() > 0 THEN
  586. ld_qty_tmp = inwaremx[i].qty
  587. FOR k = 1 To ds_order_fp.RowCount()
  588. arg_s_arr++
  589. arg_s_ap.planid[arg_s_arr] = 0
  590. arg_s_ap.assigntype[arg_s_arr] = 0
  591. arg_s_ap.scid[arg_s_arr] = scid
  592. arg_s_ap.mtrlwareid[arg_s_arr] = ll_mtrlwareid_ref
  593. arg_s_ap.relbillid[arg_s_arr] = ds_order_fp.Object.relbillid[k]
  594. arg_s_ap.relprintid[arg_s_arr] = 0
  595. arg_s_ap.fpgrade[arg_s_arr] = 2
  596. IF ld_qty_tmp <= ds_order_fp.Object.notassignqty[k] THEN
  597. arg_s_ap.notassignqty[arg_s_arr] = ld_qty_tmp
  598. arg_s_ap.shareqty[arg_s_arr] = 0
  599. EXIT
  600. ELSE
  601. arg_s_ap.notassignqty[arg_s_arr] = ds_order_fp.Object.notassignqty[k]
  602. ld_qty_tmp = ld_qty_tmp - ds_order_fp.Object.notassignqty[k]
  603. arg_s_ap.shareqty[arg_s_arr] = 0
  604. END IF
  605. NEXT
  606. END IF
  607. CASE ELSE
  608. IF uof_ref_assign_plan(scid,ll_mtrlwareid_ref,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  609. arg_msg = '行:'+String(i)+','+arg_msg
  610. rslt = 0
  611. GOTO ext
  612. END IF
  613. END CHOOSE
  614. ELSE //新库存分配模式
  615. IF inwaremx[i].relid > 0 THEN
  616. IF uof_ref_assign_plan_plankind(scid,ll_mtrlwareid_ref,1,inwaremx[i].relid,inwaremx[i].relprintid,&
  617. inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwaremx[i].qty,arg_s_ap,arg_msg) = 0 THEN
  618. arg_msg = '进仓明细行:'+String(i)+',取分配计划失败'+arg_msg
  619. rslt = 0
  620. GOTO ext
  621. END IF
  622. END IF
  623. END IF
  624. FOR j = 1 To UpperBound(arg_s_ap.planid)
  625. IF arg_s_ap.notassignqty[j] > 0 THEN
  626. IF uo_ma.uof_assign_add(arg_s_ap.scid[j],arg_s_ap.mtrlwareid[j],&
  627. arg_s_ap.assigntype[j],arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],&
  628. arg_s_ap.notassignqty[j],inwaremx[i].cost,inwaremx[i].mtrlwaredscrp,ls_mtrlcuscode,&
  629. inwarecode,inwaremx[i].printid,arg_s_ap.fpgrade[j],publ_operator,arg_msg,False) = 0 THEN
  630. arg_msg = '行:'+String(i)+','+arg_msg
  631. rslt = 0
  632. GOTO ext
  633. END IF
  634. IF arg_s_ap.planid[j] > 0 THEN
  635. IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],arg_s_ap.notassignqty[j],&
  636. inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN
  637. arg_msg = '行:'+String(i)+','+arg_msg
  638. rslt = 0
  639. GOTO ext
  640. END IF
  641. END IF
  642. //yyx2013-5-24
  643. ll_find = 0
  644. FOR m = 1 To ll_array
  645. IF arg_s_mxbarcode_fp.mtrlwareid[m] = arg_s_ap.mtrlwareid[j] And &
  646. arg_s_mxbarcode_fp.relbillid[m] = arg_s_ap.relbillid[j] And &
  647. arg_s_mxbarcode_fp.relprintid[m] = arg_s_ap.relprintid[j] THEN
  648. ll_find = m
  649. EXIT
  650. END IF
  651. NEXT
  652. IF ll_find = 0 THEN
  653. ll_array++
  654. arg_s_mxbarcode_fp.mtrlwareid[ll_array] = arg_s_ap.mtrlwareid[j]
  655. arg_s_mxbarcode_fp.relbillid[ll_array] = arg_s_ap.relbillid[j]
  656. arg_s_mxbarcode_fp.relprintid[ll_array] = arg_s_ap.relprintid[j]
  657. arg_s_mxbarcode_fp.assignqty[ll_array] = arg_s_ap.notassignqty[j]
  658. arg_s_mxbarcode_fp.fpqty[ll_array] = 0
  659. ELSE
  660. arg_s_mxbarcode_fp.assignqty[ll_find] += arg_s_ap.notassignqty[j]
  661. END IF
  662. //yyx2013-5-24_end
  663. END IF
  664. //有公共库存,还货
  665. IF arg_s_ap.shareqty[j] > 0 And arg_s_ap.relbillid[j] > 0 And arg_s_ap.relprintid[j] > 0 THEN
  666. IF uof_auto_return_fp(arg_s_ap.scid[j],arg_s_ap.relbillid[j],arg_s_ap.relprintid[j],inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,arg_s_ap.shareqty[j],arg_s_ap.mtrlwareid[j],arg_msg,False) = 0 THEN
  667. arg_msg = '行:'+String(i)+','+arg_msg
  668. rslt = 0
  669. GOTO ext
  670. END IF
  671. END IF
  672. NEXT
  673. END IF
  674. //yyx20100814_end
  675. If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++
  676. //yyx2012-9-29返回计算可装数库存id数组
  677. If ( inwaremx[i].ifpack = 1 Or inwaremx[i].ifpack = 2 Or inwaremx[i].ifpackpro = 3 Or inwaremx[i].ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN
  678. IF uo_cmpl_p.uof_ref_mtrlwarid_array(inwaremx[i].mtrlid,inwaremx[i].plancode,ls_mtrlcuscode,storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  679. rslt = 0
  680. GOTO ext
  681. END IF
  682. END IF
  683. //
  684. NEXT
  685. //生成自动组装出仓单
  686. IF uof_auto_di_out(ll_orderid_arr,ld_acmpqty_arr,arg_msg,False) = 0 THEN
  687. rslt = 0
  688. GOTO ext
  689. END IF
  690. //生成自动组装进仓单
  691. IF uof_auto_di_in(ll_orderid_arr,ld_acmpqty_arr,arg_msg,False) = 0 THEN
  692. rslt = 0
  693. GOTO ext
  694. END IF
  695. //更新条码
  696. If ( li_outtype = 2 Or li_outtype = 3 ) And mx_barcode_cnt > 0 THEN
  697. IF uof_p_barcode(1,arg_msg,arg_s_mxbarcode_fp) = 0 THEN
  698. rslt = 0
  699. GOTO ext
  700. END IF
  701. END IF
  702. //yyx2012-9-29返回计算可装数库存id数组计算可装数
  703. IF UpperBound(s_mtrlwareid_array_rst.mtrlwareid) > 0 And uo_option_mtrlware_autocmp = 1 THEN
  704. IF uo_cmpl_p.uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  705. rslt = 0
  706. GOTO ext
  707. END IF
  708. END IF
  709. //
  710. flag = 1
  711. ext:
  712. IF rslt = 0 THEN
  713. ROLLBACK Using commit_transaction;
  714. ELSEIF rslt = 1 And arg_ifcommit THEN
  715. COMMIT Using commit_transaction;
  716. END IF
  717. Destroy uo_order
  718. Destroy ds_order_replace
  719. Destroy ds_order_replace_pack
  720. Destroy ds_order_fp
  721. Destroy ds_order_mx_find_taskmx
  722. Destroy uo_cmpl_p
  723. RETURN rslt
  724. end function
  725. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  726. Long cnt = 0,i,j,mx_barcode_cnt
  727. Long ll_sptid
  728. String ls_mtrlcuscode
  729. String ls_storagename
  730. Int li_outtype,li_storagetype
  731. DateTime null_dt
  732. IF uo_option_canpack_ifzanyong = -1000 THEN
  733. rslt = 0
  734. arg_msg = '选项:[417]通用包件产品可装数选项,读取初始默认值失败,操作取消!'
  735. GOTO ext
  736. END IF
  737. s_inwaremx_assign_plan arg_s_ap,arg_s_ap_null
  738. s_inwaremx_assign arg_s_a,arg_s_a_null
  739. s_inwaremx_barcode_fp arg_s_mxbarcode_fp
  740. s_cmplpackpro_ref_mtrlwareid_array s_mtrlwareid_array_rst
  741. IF f_aps_mrp_cklock(scid,arg_msg) = 0 THEN
  742. rslt = 0
  743. GOTO ext
  744. END IF
  745. uo_mtrlware_assign uo_ma
  746. uo_ma = Create uo_mtrlware_assign
  747. uo_ma.commit_transaction = commit_transaction
  748. uo_ma.li_if_assign_del_check_outware = 1
  749. uo_ma.ib_ifinware_audit_do = True
  750. uo_cmpl_packpro uo_cmpl_p
  751. uo_cmpl_p = Create uo_cmpl_packpro
  752. uo_cmpl_p.commit_transaction = commit_transaction
  753. uo_order_ml uo_order
  754. uo_order = Create uo_order_ml
  755. SetNull(null_dt)
  756. IF storageid = 0 THEN
  757. rslt = 0
  758. arg_msg = '没有正确的仓库'
  759. GOTO ext
  760. END IF
  761. IF billtype <> 9 THEN
  762. IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  763. rslt = 0
  764. GOTO ext
  765. END IF
  766. END IF
  767. SELECT storagename,outtype,storagetype
  768. INTO :ls_storagename,:li_outtype,:li_storagetype
  769. FROM u_storage
  770. Where storageid = :storageid Using commit_transaction ;
  771. IF commit_transaction.SQLCode <> 0 THEN
  772. rslt = 0
  773. arg_msg = "查询操作失败,仓库"
  774. GOTO ext
  775. END IF
  776. //检查是否有该仓库的建立权限
  777. IF sys_user_storagestr_audit <> '0' THEN
  778. IF Pos(sys_user_storagestr_audit,','+String(storageid)+',') <= 0 THEN
  779. rslt = 0
  780. arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许撤审该仓库的单据'
  781. GOTO ext
  782. END IF
  783. END IF
  784. //
  785. IF inwareid = 0 THEN
  786. rslt = 0
  787. arg_msg = "没有审核对象"
  788. GOTO ext
  789. END IF
  790. IF ctmint > 0 THEN
  791. arg_msg = '单据已截数,不能操作'
  792. rslt = 0
  793. GOTO ext
  794. END IF
  795. IF flag = 0 THEN
  796. rslt = 0
  797. arg_msg = "单据还未审核"
  798. GOTO ext
  799. END IF
  800. IF balcflag = 1 THEN
  801. rslt = 0
  802. arg_msg = "单据已经结存,不能撤审"
  803. GOTO ext
  804. END IF
  805. UPDATE u_inware
  806. SET auditingrep = '',
  807. auditingdate = :null_dt,
  808. flag = 0,
  809. fkemp = '',
  810. fkdate = :null_dt,
  811. fkflag = 0
  812. WHERE u_inware.inwareid = :inwareid
  813. And flag = 1 And scid = :scid Using commit_transaction;
  814. IF commit_transaction.SQLCode <> 0 THEN
  815. rslt = 0
  816. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  817. GOTO ext
  818. ELSEIF commit_transaction.SQLNRows = 0 THEN
  819. rslt = 0
  820. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  821. GOTO ext
  822. END IF
  823. IF uof_auto_scll_caudit(arg_msg,False) = 0 THEN
  824. rslt = 0
  825. GOTO ext
  826. END IF
  827. //撤审删除相关自动组装进出仓单
  828. IF uof_auto_di_caudit(arg_msg,False) = 0 THEN
  829. rslt = 0
  830. GOTO ext
  831. END IF
  832. FOR i = 1 To it_mxbt
  833. //yyx20100814
  834. IF li_storagetype = 1 And inwaremx[i].ifpack <> 2 And inwaremx[i].ifpackpro <> 2 And inwaremx[i].ifpackpro <> 4 THEN
  835. ll_sptid = 0
  836. ls_mtrlcuscode = ''
  837. ELSE
  838. ll_sptid = inwaremx[i].sptid
  839. ls_mtrlcuscode = inwaremx[i].mtrlcuscode
  840. END IF
  841. //yyx20100814_end
  842. //yyx20100814
  843. //库存分配
  844. IF li_storagetype = 1 THEN
  845. //取消分配
  846. arg_s_a = arg_s_a_null
  847. IF uof_ref_assign_cancel(inwarecode,inwaremx[i].printid,arg_s_a,arg_msg) = 0 THEN
  848. arg_msg = '行:'+String(i)+','+arg_msg
  849. rslt = 0
  850. GOTO ext
  851. END IF
  852. FOR j = 1 To UpperBound(arg_s_a.assignid)
  853. IF uo_ma.uof_assign_del(arg_s_a.assignid[j],arg_s_a.assignqty[j],&
  854. arg_msg,False) = 0 THEN
  855. arg_msg = '行:'+String(i)+','+arg_msg
  856. rslt = 0
  857. GOTO ext
  858. END IF
  859. NEXT
  860. //取消分配计划
  861. arg_s_ap = arg_s_ap_null
  862. IF uof_ref_assign_plan_cancel(inwarecode,inwaremx[i].printid,arg_s_ap,arg_msg) = 0 THEN
  863. arg_msg = '行:'+String(i)+','+arg_msg
  864. rslt = 0
  865. GOTO ext
  866. END IF
  867. FOR j = 1 To UpperBound(arg_s_ap.planid)
  868. IF uo_ma.uof_plan_addassignqty(arg_s_ap.planid[j],0 - arg_s_ap.notassignqty[j],&
  869. inwarecode,inwaremx[i].printid,arg_msg,False) = 0 THEN
  870. arg_msg = '行:'+String(i)+','+arg_msg
  871. rslt = 0
  872. GOTO ext
  873. END IF
  874. NEXT
  875. END IF
  876. //yyx20100814_end
  877. //增加包件分配包件产品占用记录 dyy 20150306
  878. if inwaremx[i].ifpack = 1 and inwaremx[i].relid > 0 and uo_option_canpack_ifzanyong = 1 then
  879. //通用包件 并且 是按指令单的才执行
  880. if uof_add_pack_fpqty(scid,inwaremx[i].relid,inwaremx[i].mtrlwareid,inwaremx[i].mtrlid,0 - inwaremx[i].qty,arg_msg,false) = 0 then
  881. rslt = 0
  882. goto ext
  883. end if
  884. end if
  885. IF p_update_mtrlware(inwaremx[i].mtrlid,inwaremx[i].mtrlcode,&
  886. storageid,inwaremx[i].plancode,inwaremx[i].status,&
  887. 0 - inwaremx[i].qty,0 - inwaremx[i].uqty,inwaremx[i].price,inwaremx[i].planprice,&
  888. ll_sptid,inwaremx[i].dxflag,inwaremx[i].woodcode,&
  889. inwaremx[i].pcode,ls_mtrlcuscode,inwaremx[i].Location,&
  890. inwaremx[i].mtrlwaredscrp,inwaremx[i].ifvqty,arg_msg) = 0 THEN
  891. arg_msg = '更新行:'+String(i)+','+arg_msg
  892. rslt = 0
  893. GOTO ext
  894. END IF
  895. IF inwaremx[i].relid > 0 THEN
  896. IF uo_order.addmxcmpl(scid,inwaremx[i].relid,0 - inwaremx[i].qty,arg_msg,False) = 0 THEN
  897. arg_msg = '更新行:'+String(i)+','+arg_msg
  898. rslt = 0
  899. GOTO ext
  900. END IF
  901. //====================================================================
  902. // 检查计划是否可完成
  903. //====================================================================
  904. IF uo_order.tryfinishorder(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN
  905. arg_msg = '更新行:'+String(i)+','+arg_msg
  906. rslt = 0
  907. GOTO ext
  908. END IF
  909. //更新排程批(进仓计划) dyy20120809
  910. IF uof_update_planmx_fqty(scid,inwaremx[i].relid,0 -inwaremx[i].qty,arg_msg,False) = 0 THEN
  911. arg_msg = '更新行:'+String(i)+','+arg_msg
  912. rslt = 0
  913. GOTO ext
  914. END IF
  915. END IF
  916. If ( li_outtype = 2 Or li_outtype = 3 ) And inwaremx[i].outtype = 2 THEN mx_barcode_cnt++
  917. //yyx2012-9-29返回计算可装数库存id数组
  918. If ( inwaremx[i].ifpack = 1 Or inwaremx[i].ifpack = 2 Or inwaremx[i].ifpackpro = 3 Or inwaremx[i].ifpackpro = 4 ) And uo_option_mtrlware_autocmp = 1 THEN
  919. IF uo_cmpl_p.uof_ref_mtrlwarid_array(inwaremx[i].mtrlid,inwaremx[i].plancode,ls_mtrlcuscode,storageid,s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  920. rslt = 0
  921. GOTO ext
  922. END IF
  923. END IF
  924. //
  925. NEXT
  926. If ( li_outtype = 2 Or li_outtype = 3 ) And mx_barcode_cnt > 0 THEN
  927. IF uof_p_barcode(0,arg_msg,arg_s_mxbarcode_fp) = 0 THEN
  928. rslt = 0
  929. GOTO ext
  930. END IF
  931. END IF
  932. //yyx2012-9-29返回计算可装数库存id数组计算可装数
  933. IF UpperBound(s_mtrlwareid_array_rst.mtrlwareid) > 0 And uo_option_mtrlware_autocmp = 1 THEN
  934. IF uo_cmpl_p.uof_cmpl_diqty(s_mtrlwareid_array_rst,arg_msg) = 0 THEN
  935. rslt = 0
  936. GOTO ext
  937. END IF
  938. END IF
  939. //
  940. flag = 0
  941. ext:
  942. IF rslt = 0 THEN
  943. ROLLBACK Using commit_transaction;
  944. ELSEIF rslt = 1 And arg_ifcommit THEN
  945. COMMIT Using commit_transaction;
  946. END IF
  947. Destroy uo_order
  948. Destroy uo_ma
  949. Destroy uo_cmpl_p
  950. RETURN rslt
  951. end function
  952. public function integer uof_auto_scll (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  953. IF uo_option_wkpmtrlware = -1000 THEN
  954. rslt = 0
  955. arg_msg = '选项:[057]核算车间库存,读取初始默认值失败,操作取消!'
  956. GOTO ext
  957. END IF
  958. uo_cp_auto_scll uo_mrp_scll
  959. uo_mrp_scll = Create uo_cp_auto_scll
  960. uo_order_ml uo_order_scll
  961. uo_order_scll = Create uo_order_ml
  962. uo_outware uo_out,uo_out_ws
  963. uo_out = Create uo_outware
  964. uo_out.commit_transaction = commit_transaction
  965. uo_out.if_getid_ture = False
  966. uo_out_ws = Create uo_outware
  967. uo_out_ws.commit_transaction = commit_transaction
  968. uo_out_ws.if_getid_ture = False
  969. //自动扣车间库存
  970. IF uo_option_wkpmtrlware = 0 THEN
  971. rslt = 1
  972. GOTO ext
  973. END IF
  974. s_cp_scll s_cs[],arg_s_cs[],tmp_s_cs[]
  975. Long i
  976. Long arg_itmxt,j,k,ll_itmxt
  977. Boolean if_f
  978. //1.取应车间库存物料
  979. FOR i = 1 To it_mxbt
  980. Long ll_wrkGrpid_p
  981. Int li_ifwkpmtrlware
  982. // IF inwaremx[i].relid = 0 THEN CONTINUE
  983. IF inwaremx[i].relid = 0 THEN
  984. SELECT dftwrkgrpid INTO :ll_wrkGrpid_p
  985. FROM u_mtrldef
  986. Where mtrlid = :inwaremx[i].mtrlid Using commit_transaction;
  987. IF commit_transaction.SQLCode <> 0 THEN
  988. arg_msg = '查询行:'+String(i)+'物料生产车间资料失败,原因:'+commit_transaction.SQLErrText
  989. rslt = 0
  990. GOTO ext
  991. END IF
  992. ELSE
  993. SELECT wrkGrpid INTO :ll_wrkGrpid_p
  994. FROM u_order_ml
  995. WHERE orderid = :inwaremx[i].relid
  996. And scid = :scid Using commit_transaction;
  997. IF commit_transaction.SQLCode <> 0 THEN
  998. arg_msg = '查询行:'+String(i)+'生产指令单生产车间资料失败,原因:'+commit_transaction.SQLErrText
  999. rslt = 0
  1000. GOTO ext
  1001. END IF
  1002. END IF
  1003. if ll_wrkGrpid_p = 0 THEN CONTINUE
  1004. SELECT ifwkpmtrlware INTO :li_ifwkpmtrlware
  1005. FROM u_sc_wkp
  1006. Where wrkGrpid = :ll_wrkGrpid_p Using commit_transaction;
  1007. IF commit_transaction.SQLCode <> 0 THEN
  1008. arg_msg = '查询行:'+String(i)+'指令单生产车间是否使用车间核算标记失败,原因:'+commit_transaction.SQLErrText
  1009. rslt = 0
  1010. GOTO ext
  1011. END IF
  1012. IF li_ifwkpmtrlware = 0 THEN CONTINUE
  1013. arg_itmxt = 0
  1014. arg_s_cs = tmp_s_cs
  1015. IF uo_mrp_scll.uof_cp_scll(scid,inwaremx[i].relid,inwaremx[i].mtrlid,&
  1016. inwaremx[i].qty,arg_s_cs,arg_itmxt,arg_msg) = 0 THEN
  1017. rslt = 0
  1018. GOTO ext
  1019. END IF
  1020. FOR k = 1 To arg_itmxt
  1021. IF inwaremx[i].relid > 0 THEN
  1022. IF uo_order_scll.f_add_dstrqty_ws(scid,inwaremx[i].relid,&
  1023. arg_s_cs[k].wrkGrpid,arg_s_cs[k].mtrlid,arg_s_cs[k].mtrlcode,&
  1024. arg_s_cs[k].status,arg_s_cs[k].woodcode,arg_s_cs[k].pcode,&
  1025. arg_s_cs[k].noallocqty,arg_s_cs[k].allocqty,arg_msg,False) = 0 THEN
  1026. rslt = 0
  1027. GOTO ext
  1028. END IF
  1029. END IF
  1030. // if_f = FALSE
  1031. //
  1032. // FOR j = 1 TO UpperBound(s_cs)
  1033. // IF s_cs[j].mtrlid = arg_s_cs[k].mtrlid &
  1034. // AND s_cs[j].wrkGrpid = arg_s_cs[k].wrkGrpid &
  1035. // AND s_cs[j].scid = arg_s_cs[k].scid &
  1036. // AND s_cs[j].orderid = arg_s_cs[k].orderid THEN
  1037. // s_cs[j].qty = s_cs[j].qty + arg_s_cs[k].qty
  1038. // s_cs[j].noallocqty = s_cs[j].noallocqty + arg_s_cs[k].noallocqty
  1039. // s_cs[j].allocqty = s_cs[j].allocqty + arg_s_cs[k].allocqty
  1040. // if_f = TRUE
  1041. // EXIT
  1042. // END IF
  1043. // NEXT
  1044. //
  1045. // IF NOT if_f THEN
  1046. SELECT u_sc_wkp.wrkGrpid
  1047. INTO :ll_wrkGrpid_p
  1048. FROM u_sc_workgroup,u_sc_wkp
  1049. WHERE u_sc_workgroup.wrkGrpid = :arg_s_cs[k].wrkGrpid
  1050. AND u_sc_wkp.wrkGrpid = u_sc_workgroup.storageid
  1051. Using commit_transaction;
  1052. IF commit_transaction.SQLCode <> 0 THEN
  1053. rslt = 0
  1054. arg_msg = '查询工组所属车间所属仓库失败'+"~n"+commit_transaction.SQLErrText
  1055. GOTO ext
  1056. END IF
  1057. ll_itmxt++
  1058. s_cs[ll_itmxt].scid = arg_s_cs[k].scid
  1059. s_cs[ll_itmxt].orderid = arg_s_cs[k].orderid
  1060. s_cs[ll_itmxt].mtrlid = arg_s_cs[k].mtrlid
  1061. s_cs[ll_itmxt].wrkGrpid = arg_s_cs[k].wrkGrpid
  1062. s_cs[ll_itmxt].qty = arg_s_cs[k].qty
  1063. s_cs[ll_itmxt].wrkgrpid_p = ll_wrkGrpid_p
  1064. s_cs[ll_itmxt].noallocqty = arg_s_cs[k].noallocqty
  1065. s_cs[ll_itmxt].allocqty = arg_s_cs[k].allocqty
  1066. s_cs[ll_itmxt].mtrlcode = arg_s_cs[k].mtrlcode
  1067. // END IF
  1068. NEXT
  1069. NEXT
  1070. //2.查重复车间ID
  1071. Boolean lb_f = False
  1072. Long ch,ll_scid,ll_storageid
  1073. Long lay_wrkgrpid[],ll_wrkgrpid
  1074. Int li_ifnoall,li_ifall
  1075. Long chc,ll_mtrlwareid,rst_outwareid
  1076. Decimal ld_price
  1077. String ls_unit
  1078. FOR k = 1 To UpperBound(s_cs)
  1079. FOR j = 1 To UpperBound(lay_wrkgrpid)
  1080. IF lay_wrkgrpid[j] = s_cs[k].wrkgrpid_p THEN lb_f = True
  1081. NEXT
  1082. IF lb_f = False THEN
  1083. ch++
  1084. lay_wrkgrpid[ch] = s_cs[k].wrkgrpid_p
  1085. END IF
  1086. lb_f = False
  1087. NEXT
  1088. //3.生成出仓单
  1089. FOR k = 1 To UpperBound(lay_wrkgrpid)
  1090. ll_wrkgrpid = lay_wrkgrpid[k]
  1091. SELECT u_storage.scid,
  1092. u_sc_wkp.storageid
  1093. INTO :ll_scid,:ll_storageid
  1094. FROM u_storage,u_sc_wkp
  1095. WHERE u_sc_wkp.wrkgrpid = :ll_wrkgrpid
  1096. AND u_sc_wkp.storageid = u_storage.storageid
  1097. Using commit_transaction;
  1098. IF commit_transaction.SQLCode <> 0 THEN
  1099. arg_msg = '查询车间对应仓库属性失败'
  1100. rslt = 0
  1101. GOTO ext
  1102. END IF
  1103. IF ll_storageid = 0 THEN
  1104. arg_msg = '自动领料物料领用车间对应仓库未指定,请检查'
  1105. rslt = 0
  1106. GOTO ext
  1107. END IF
  1108. li_ifnoall = 0
  1109. li_ifall = 0
  1110. FOR j = 1 To UpperBound(s_cs)
  1111. if s_cs[j].qty = 0 then continue
  1112. IF s_cs[j].wrkgrpid_p <> ll_wrkgrpid THEN CONTINUE
  1113. IF s_cs[j].noallocqty > 0 THEN
  1114. li_ifnoall = 1
  1115. END IF
  1116. IF s_cs[j].allocqty > 0 THEN
  1117. li_ifall = 1
  1118. END IF
  1119. IF li_ifnoall = 1 And li_ifall = 1 THEN EXIT
  1120. NEXT
  1121. IF li_ifnoall = 1 THEN
  1122. IF uo_out.newbegin(ll_scid,16,arg_msg) = 0 THEN
  1123. rslt = 0
  1124. GOTO ext
  1125. END IF
  1126. uo_out.relid = inwareid
  1127. uo_out.outdate = indate
  1128. uo_out.outrep = inrep
  1129. uo_out.part = inwarecode
  1130. uo_out.dscrp = dscrp
  1131. uo_out.cusname = '生产进仓车间自动出仓(未分配)'
  1132. uo_out.storageid = ll_storageid
  1133. uo_out.relint_1 = ll_wrkgrpid
  1134. chc = 0
  1135. FOR j = 1 To UpperBound(s_cs)
  1136. IF s_cs[j].wrkgrpid_p <> ll_wrkgrpid Or s_cs[j].noallocqty < 0 or s_cs[j].qty = 0 THEN CONTINUE
  1137. chc++
  1138. SELECT top 1 u_mtrlware.mtrlwareid,
  1139. u_mtrlware.cost ,
  1140. u_mtrldef.unit
  1141. INTO :ll_mtrlwareid,
  1142. :ld_price,
  1143. :ls_unit
  1144. FROM u_mtrlware,u_mtrldef
  1145. WHERE u_mtrlware.storageid = :ll_storageid
  1146. AND u_mtrlware.mtrlid = :s_cs[j].mtrlid
  1147. AND u_mtrlware.status = :s_cs[j].status
  1148. AND u_mtrlware.woodcode = :s_cs[j].woodcode
  1149. AND u_mtrlware.pcode = :s_cs[j].pcode
  1150. AND u_mtrlware.mtrlid = u_mtrldef.mtrlid
  1151. Using commit_transaction;
  1152. IF commit_transaction.SQLCode <> 0 THEN
  1153. ll_mtrlwareid = 0
  1154. ld_price = 0
  1155. SELECT unit INTO :ls_unit
  1156. FROM u_mtrldef
  1157. Where mtrlid = :s_cs[j].mtrlid Using commit_transaction;
  1158. IF commit_transaction.SQLCode <> 0 THEN
  1159. rslt = 0
  1160. arg_msg = '车间反扣用料>>查询物料'+s_cs[j].mtrlcode+'库存单位失败,'+commit_transaction.SQLErrText
  1161. GOTO ext
  1162. END IF
  1163. IF f_insert_0_mtrlware(ll_mtrlwareid,s_cs[j].mtrlid,s_cs[j].mtrlcode,ll_storageid,0,s_cs[j].status,s_cs[j].woodcode,s_cs[j].pcode,'','','',0,arg_msg) = 0 THEN
  1164. arg_msg = '车间反扣用料>>增加车间仓0库存失败,'+arg_msg
  1165. rslt = 0
  1166. GOTO ext
  1167. END IF
  1168. END IF
  1169. IF uo_out.acceptmx(ll_mtrlwareid,s_cs[j].noallocqty,&
  1170. ld_price,1,'',chc,arg_msg,&
  1171. 1,s_cs[j].orderid,0,0,'',0,s_cs[j].wrkGrpid,ls_unit,s_cs[j].noallocqty,1,'','',0,0,'',0,0,0,0,'','') = 0 THEN
  1172. arg_msg = '车间反扣用料>>物料'+s_cs[j].mtrlcode+','+arg_msg
  1173. rslt = 0
  1174. GOTO ext
  1175. END IF
  1176. NEXT
  1177. IF uo_out.Save(False,arg_msg) = 0 THEN
  1178. rslt = 0
  1179. GOTO ext
  1180. END IF
  1181. rst_outwareid = uo_out.outwareid
  1182. //2.原事务审核出仓单
  1183. IF uo_out.getinfo(ll_scid,rst_outwareid,arg_msg) = 0 THEN
  1184. rslt = 0
  1185. GOTO ext
  1186. END IF
  1187. IF uo_out.auditing(False,arg_msg) = 0 THEN
  1188. rslt = 0
  1189. GOTO ext
  1190. END IF
  1191. END IF
  1192. IF li_ifall = 1 THEN
  1193. IF uo_out_ws.newbegin(ll_scid,19,arg_msg) = 0 THEN
  1194. rslt = 0
  1195. GOTO ext
  1196. END IF
  1197. uo_out_ws.relid = inwareid
  1198. uo_out_ws.outdate = indate
  1199. uo_out_ws.outrep = inrep
  1200. uo_out_ws.part = inwarecode
  1201. uo_out_ws.dscrp = dscrp
  1202. uo_out_ws.cusname = '生产进仓车间自动出仓(已分配)'
  1203. uo_out_ws.storageid = ll_storageid
  1204. uo_out_ws.relint_1 = ll_wrkgrpid
  1205. chc = 0
  1206. FOR j = 1 To UpperBound(s_cs)
  1207. IF s_cs[j].wrkgrpid_p <> ll_wrkgrpid Or s_cs[j].allocqty < 0 or s_cs[j].qty = 0 THEN CONTINUE
  1208. chc++
  1209. SELECT top 1 u_mtrlware.mtrlwareid,
  1210. u_mtrlware.cost ,
  1211. u_mtrldef.unit
  1212. INTO :ll_mtrlwareid,
  1213. :ld_price,
  1214. :ls_unit
  1215. FROM u_mtrlware,u_mtrldef
  1216. WHERE u_mtrlware.storageid = :ll_storageid
  1217. AND u_mtrlware.mtrlid = :s_cs[j].mtrlid
  1218. AND u_mtrlware.status = :s_cs[j].status
  1219. AND u_mtrlware.woodcode = :s_cs[j].woodcode
  1220. AND u_mtrlware.pcode = :s_cs[j].pcode
  1221. AND u_mtrlware.mtrlid = u_mtrldef.mtrlid
  1222. Using commit_transaction;
  1223. IF commit_transaction.SQLCode <> 0 THEN
  1224. ll_mtrlwareid = 0
  1225. ld_price = 0
  1226. SELECT unit INTO :ls_unit
  1227. FROM u_mtrldef
  1228. Where mtrlid = :s_cs[j].mtrlid Using commit_transaction;
  1229. IF commit_transaction.SQLCode <> 0 THEN
  1230. rslt = 0
  1231. arg_msg = '车间反扣用料>>查询物料'+s_cs[j].mtrlcode+'库存单位失败,'+commit_transaction.SQLErrText
  1232. GOTO ext
  1233. END IF
  1234. IF f_insert_0_mtrlware(ll_mtrlwareid,s_cs[j].mtrlid,s_cs[j].mtrlcode,ll_storageid,0,s_cs[j].status,s_cs[j].woodcode,s_cs[j].pcode,'','','',0,arg_msg) = 0 THEN
  1235. arg_msg = '车间反扣用料>>增加车间仓0库存失败,'+arg_msg
  1236. rslt = 0
  1237. GOTO ext
  1238. END IF
  1239. END IF
  1240. //
  1241. // IF commit_transaction.SQLCode <> 0 THEN
  1242. // arg_msg = '车间反扣用料>>查询物料库存资料失败(已分配),查检是否已开领料单并进行二审'
  1243. // rslt = 0
  1244. // GOTO ext
  1245. // END IF
  1246. IF uo_out_ws.acceptmx(ll_mtrlwareid,s_cs[j].allocqty,&
  1247. ld_price,1,'',chc,arg_msg,&
  1248. 1,s_cs[j].orderid,0,0,'',0,s_cs[j].wrkGrpid,ls_unit,s_cs[j].allocqty,1,'','',0,0,'',0,0,0,0,'','') = 0 THEN
  1249. arg_msg = '车间反扣用料>>物料'+s_cs[j].mtrlcode+','+arg_msg
  1250. rslt = 0
  1251. GOTO ext
  1252. END IF
  1253. NEXT
  1254. IF uo_out_ws.Save(False,arg_msg) = 0 THEN
  1255. rslt = 0
  1256. GOTO ext
  1257. END IF
  1258. rst_outwareid = uo_out_ws.outwareid
  1259. //2.原事务审核出仓单
  1260. IF uo_out_ws.getinfo(ll_scid,rst_outwareid,arg_msg) = 0 THEN
  1261. rslt = 0
  1262. GOTO ext
  1263. END IF
  1264. IF uo_out_ws.auditing(False,arg_msg) = 0 THEN
  1265. rslt = 0
  1266. GOTO ext
  1267. END IF
  1268. END IF
  1269. NEXT
  1270. ext:
  1271. IF rslt = 0 THEN
  1272. ROLLBACK Using commit_transaction;
  1273. ELSEIF rslt = 1 And arg_ifcommit THEN
  1274. COMMIT Using commit_transaction;
  1275. END IF
  1276. Destroy uo_mrp_scll
  1277. Destroy uo_order_scll
  1278. Destroy uo_out
  1279. Destroy uo_out_ws
  1280. RETURN rslt
  1281. end function
  1282. public function integer uof_auto_scll_caudit (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1283. IF uo_option_wkpmtrlware = -1000 THEN
  1284. rslt = 0
  1285. arg_msg = '选项:[057]核算车间库存,读取初始默认值失败,操作取消!'
  1286. GOTO ext
  1287. END IF
  1288. IF uo_option_wkpmtrlware = 0 THEN
  1289. rslt = 1
  1290. GOTO ext
  1291. END IF
  1292. uo_order_ml uo_order_scll
  1293. uo_order_scll = Create uo_order_ml
  1294. uo_outware uo_out
  1295. uo_out = Create uo_outware
  1296. uo_out.commit_transaction = commit_transaction
  1297. uo_out.if_getid_ture = False
  1298. Long rst_scid[],rst_outwareid[],out_i = 1 //出仓id
  1299. String rst_outwarecode[]
  1300. Long k,l
  1301. Long ll_orderid_arr
  1302. Long ll_wrkgrpid,ll_orderid,ll_mtrlid
  1303. Long ll_wrkgrpid_array[],ll_orderid_array[],ll_mtrlid_array[]
  1304. String ls_mtrlcode,ls_status,ls_woodcode,ls_pcode
  1305. String ls_mtrlcode_array[],ls_status_array[],ls_woodcode_array[],ls_pcode_array[]
  1306. Decimal ld_qty,ld_noallocqty,ld_allocqty
  1307. decimal ld_noallocqty_array[],ld_allocqty_array[]
  1308. Long ll_billtype
  1309. DECLARE cur_out_1 CURSOR FOR
  1310. SELECT outwareid,scid,outwarecode
  1311. FROM u_outware
  1312. WHERE part = :inwarecode
  1313. And (billtype = 16 Or billtype = 19) Using commit_transaction;
  1314. OPEN cur_out_1;
  1315. FETCH cur_out_1 Into :rst_outwareid[out_i],:rst_scid[out_i],:rst_outwarecode[out_i];
  1316. DO WHILE sqlca.SQLCode = 0
  1317. out_i++
  1318. FETCH cur_out_1 Into :rst_outwareid[out_i],:rst_scid[out_i],:rst_outwarecode[out_i];
  1319. LOOP
  1320. out_i = out_i - 1
  1321. CLOSE cur_out_1;
  1322. IF out_i > 0 THEN
  1323. ll_orderid_arr = 0
  1324. FOR k = 1 To out_i
  1325. DECLARE cur_mx CURSOR FOR
  1326. SELECT u_outwaremx.relprintid,
  1327. u_outware.billtype,
  1328. u_outwaremx.relid,
  1329. u_outwaremx.mtrlid,
  1330. u_mtrldef.mtrlcode,
  1331. u_outwaremx.status,
  1332. u_outwaremx.woodcode,
  1333. u_outwaremx.pcode,
  1334. u_outwaremx.qty
  1335. FROM u_outwaremx INNER JOIN
  1336. u_outware ON u_outwaremx.scid = u_outware.scid AND
  1337. u_outwaremx.outwareid = u_outware.outwareid INNER JOIN
  1338. u_mtrldef ON u_outwaremx.mtrlid = u_mtrldef.mtrlid
  1339. WHERE u_outware.scid = :rst_scid[k]
  1340. AND u_outware.outwareid = :rst_outwareid[k]
  1341. Using commit_transaction;
  1342. OPEN cur_mx;
  1343. FETCH cur_mx INTO :ll_wrkgrpid,:ll_billtype,:ll_orderid,
  1344. :ll_mtrlid,:ls_mtrlcode,:ls_status,:ls_woodcode,:ls_pcode,:ld_qty;
  1345. DO WHILE commit_transaction.SQLCode = 0
  1346. IF ll_billtype = 16 THEN
  1347. ld_noallocqty = ld_qty
  1348. ld_allocqty = 0
  1349. ELSE
  1350. ld_allocqty = ld_qty
  1351. ld_noallocqty = 0
  1352. END IF
  1353. IF ll_orderid > 0 THEN
  1354. ll_orderid_arr++
  1355. ll_orderid_array[ll_orderid_arr] = ll_orderid
  1356. ld_noallocqty_array[ll_orderid_arr] = ld_noallocqty
  1357. ld_allocqty_array[ll_orderid_arr] = ld_allocqty
  1358. ll_wrkgrpid_array[ll_orderid_arr] = ll_wrkgrpid
  1359. ll_mtrlid_array[ll_orderid_arr] = ll_mtrlid
  1360. ls_mtrlcode_array[ll_orderid_arr] = ls_mtrlcode
  1361. ls_status_array[ll_orderid_arr] = ls_status
  1362. ls_woodcode_array[ll_orderid_arr] = ls_woodcode
  1363. ls_pcode_array[ll_orderid_arr] = ls_pcode
  1364. END IF
  1365. FETCH cur_mx INTO :ll_wrkgrpid,:ll_billtype,:ll_orderid,
  1366. :ll_mtrlid,:ls_mtrlcode,:ls_status,:ls_woodcode,:ls_pcode,:ld_qty;
  1367. LOOP
  1368. CLOSE cur_mx;
  1369. FOR l = 1 To ll_orderid_arr
  1370. IF uo_order_scll.f_add_dstrqty_ws(rst_scid[k],ll_orderid_array[l],&
  1371. ll_wrkgrpid_array[l],ll_mtrlid_array[l],ls_mtrlcode_array[l],&
  1372. ls_status_array[l],ls_woodcode_array[l],ls_pcode_array[l],&
  1373. 0 - ld_noallocqty_array[l],0 - ld_allocqty_array[l],arg_msg,False) = 0 THEN
  1374. arg_msg = '车间反扣用料>>'+rst_outwarecode[k]+','+arg_msg
  1375. rslt = 0
  1376. GOTO ext
  1377. END IF
  1378. NEXT
  1379. //撤审出仓单,再删除
  1380. IF uo_out.getinfo(rst_scid[k],rst_outwareid[k],arg_msg) = 0 THEN
  1381. arg_msg = '车间反扣用料>>撤审相关出仓单失败,:'+rst_outwarecode[k]+','+arg_msg
  1382. rslt = 0
  1383. GOTO ext
  1384. END IF
  1385. IF uo_out.c_auditing(False,arg_msg) = 0 THEN
  1386. arg_msg = '车间反扣用料>>撤审相关出仓单失败,:'+rst_outwarecode[k]+','+arg_msg
  1387. rslt = 0
  1388. GOTO ext
  1389. END IF
  1390. IF uo_out.del(rst_scid[k],rst_outwareid[k],0,arg_msg,False) = 0 THEN
  1391. arg_msg = '车间反扣用料>>删除相关出仓单失败,:'+rst_outwarecode[k]+','+arg_msg
  1392. rslt = 0
  1393. GOTO ext
  1394. END IF
  1395. NEXT
  1396. END IF
  1397. ext:
  1398. IF rslt = 0 THEN
  1399. ROLLBACK Using commit_transaction;
  1400. ELSEIF rslt = 1 And arg_ifcommit THEN
  1401. COMMIT Using commit_transaction;
  1402. END IF
  1403. Destroy uo_out
  1404. Destroy uo_order_scll
  1405. RETURN rslt
  1406. end function
  1407. public function integer uof_get_porder (ref long arg_orderid[], ref decimal arg_acmpqty[], ref string arg_msg);Int rslt = 1
  1408. Long ll_i,ll_j
  1409. Long ll_porderid
  1410. Long cnt = 0
  1411. Long ll_orderid_ref[]
  1412. Decimal ld_acmpqty
  1413. Decimal ld_acmpqty_ref[]
  1414. Long li_ifpackpro,li_autoinstall
  1415. Int li_ifpack
  1416. FOR ll_i = 1 TO it_mxbt
  1417. IF inwaremx[ll_i].relid = 0 THEN CONTINUE
  1418. SELECT u_order_ml.porderid,u_mtrldef.ifpack
  1419. INTO :ll_porderid,:li_ifpack
  1420. FROM u_mtrldef,u_order_ml
  1421. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  1422. AND u_order_ml.orderid = :inwaremx[ll_i].relid
  1423. AND u_order_ml.scid = :scid USING commit_transaction ;
  1424. IF commit_transaction.SQLCode <> 0 THEN
  1425. rslt = 0
  1426. arg_msg = '行'+String(ll_i)+',查询相关主生产计划失败'+commit_transaction.SQLErrText
  1427. GOTO ext
  1428. END IF
  1429. IF ll_porderid = 0 THEN CONTINUE
  1430. IF li_ifpack = 0 THEN CONTINUE
  1431. SELECT u_mtrldef.ifpackpro,u_mtrldef.autoinstall
  1432. INTO :li_ifpackpro,:li_autoinstall
  1433. FROM u_mtrldef,u_order_ml
  1434. WHERE u_mtrldef.mtrlid = u_order_ml.mtrlid
  1435. AND u_order_ml.orderid = :ll_porderid
  1436. AND u_order_ml.scid = :scid USING commit_transaction;
  1437. IF commit_transaction.SQLCode <> 0 THEN
  1438. rslt = 0
  1439. arg_msg = '行'+String(ll_i)+',查询相关主计划产品是否全包件产品及自动组装失败,'+commit_transaction.SQLErrText
  1440. GOTO ext
  1441. END IF
  1442. IF li_ifpackpro = 0 OR li_autoinstall = 0 THEN CONTINUE //不是全包件产品,退出函数,否则检查主计划相关指令单是否全部完成
  1443. FOR ll_j = 1 TO cnt
  1444. IF ll_porderid = ll_orderid_ref[ll_j] THEN
  1445. GOTO next_
  1446. END IF
  1447. NEXT
  1448. SELECT acmpqty INTO :ld_acmpqty
  1449. FROM u_order_ml
  1450. WHERE orderid = :ll_porderid
  1451. AND scid = :scid USING commit_transaction ;
  1452. IF commit_transaction.SQLCode <> 0 THEN
  1453. rslt = 0
  1454. arg_msg = '行'+String(ll_i)+',查询相关主生产计划已完成数失败'+commit_transaction.SQLErrText
  1455. GOTO ext
  1456. END IF
  1457. cnt++
  1458. ll_orderid_ref[cnt] = ll_porderid
  1459. ld_acmpqty_ref[cnt] = ld_acmpqty
  1460. next_:
  1461. NEXT
  1462. ext:
  1463. arg_orderid = ll_orderid_ref
  1464. arg_acmpqty = ld_acmpqty_ref
  1465. RETURN rslt
  1466. end function
  1467. public function integer uof_auto_di_in (long arg_orderid[], decimal arg_acmpqty[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1468. Long ll_i
  1469. Long ll_inwareid_in
  1470. IF UpperBound(arg_orderid) <= 0 THEN
  1471. rslt = 1
  1472. GOTO ext
  1473. END IF
  1474. Long ll_mtrlid
  1475. String ls_mtrlcode,ls_plancode,ls_status,ls_woodcode,ls_pcode
  1476. Long ll_cusid
  1477. Decimal ld_planprice,ld_acmpqty
  1478. Long cnt = 0
  1479. string ls_unit
  1480. //生成相关进仓单
  1481. uo_inware uo_in
  1482. uo_in = CREATE uo_inware
  1483. uo_in.commit_transaction = commit_transaction
  1484. uo_in.if_getid_ture = FALSE
  1485. IF uo_in.newbegin(scid,19,ARG_MSG) = 0 THEN
  1486. rslt = 0
  1487. GOTO ext
  1488. END IF
  1489. uo_in.relid = inwareid
  1490. uo_in.indate = indate
  1491. uo_in.inrep = opemp
  1492. uo_in.part = inwarecode
  1493. uo_in.dscrp = dscrp
  1494. uo_in.storageid = storageid
  1495. uo_in.sptname = '自动组装进仓单'
  1496. FOR ll_i = 1 TO UpperBound(arg_orderid)
  1497. SELECT u_Order_ml.mtrlid,
  1498. u_Order_ml.status_mode,
  1499. u_Order_ml.woodcode,
  1500. u_Order_ml.pcode,
  1501. u_Order_ml.taskrelcode,
  1502. u_Order_ml.cusid,
  1503. u_mtrldef.mtrlcode,
  1504. u_mtrldef.planprice,
  1505. u_Order_ml.acmpqty,
  1506. u_mtrldef.unit
  1507. INTO :ll_mtrlid,
  1508. :ls_status,
  1509. :ls_woodcode,
  1510. :ls_pcode,
  1511. :ls_plancode,
  1512. :ll_cusid,
  1513. :ls_mtrlcode,
  1514. :ld_planprice,
  1515. :ld_acmpqty,
  1516. :ls_unit
  1517. FROM u_Order_ml INNER JOIN
  1518. u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid
  1519. WHERE u_Order_ml.orderid = :arg_orderid[ll_i]
  1520. AND u_Order_ml.scid = :scid USING commit_transaction;
  1521. IF commit_transaction.SQLCode <> 0 THEN
  1522. rslt = 0
  1523. ARG_MSG = '查询主生产计划相关信息失败'+commit_transaction.SQLErrText
  1524. GOTO ext
  1525. END IF
  1526. IF ld_acmpqty - arg_acmpqty[ll_i] = 0 THEN CONTINUE
  1527. cnt++
  1528. IF uo_in.acceptmx(ll_i,&
  1529. ll_mtrlid,&
  1530. ls_mtrlcode,&
  1531. ls_plancode,&
  1532. ls_status,&
  1533. ld_acmpqty - arg_acmpqty[ll_i],&
  1534. ld_planprice,&
  1535. 1,&
  1536. '',&
  1537. ARG_MSG,&
  1538. 0,0,0,ls_woodcode,&
  1539. ls_pcode,&
  1540. ll_cusid,&
  1541. ls_unit,&
  1542. 1,ld_acmpqty - arg_acmpqty[ll_i],&
  1543. 0,0,'','',0,0,'','',&
  1544. ld_acmpqty - arg_acmpqty[ll_i],&
  1545. 0) = 0 THEN
  1546. rslt = 0
  1547. GOTO ext
  1548. END IF
  1549. NEXT
  1550. IF cnt > 0 THEN
  1551. IF uo_in.Save(FALSE,ARG_MSG) = 0 THEN
  1552. rslt = 0
  1553. GOTO ext
  1554. END IF
  1555. ll_inwareid_in = uo_in.inwareid
  1556. IF uo_in.getinfo(scid,ll_inwareid_in,ARG_MSG) = 0 THEN
  1557. rslt = 0
  1558. GOTO ext
  1559. END IF
  1560. IF uo_in.auditing(FALSE,ARG_MSG) = 0 THEN
  1561. rslt = 0
  1562. GOTO ext
  1563. END IF
  1564. END IF
  1565. ext:
  1566. IF rslt = 0 THEN
  1567. ROLLBACK;
  1568. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1569. COMMIT;
  1570. END IF
  1571. DESTROY uo_in
  1572. RETURN rslt
  1573. end function
  1574. public function integer uof_auto_di_out (long arg_orderid[], decimal arg_acmpqty[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1575. Long ll_i,ll_j
  1576. Long ll_outwareid_out
  1577. IF UpperBound(arg_orderid) <= 0 THEN
  1578. rslt = 1
  1579. GOTO ext
  1580. END IF
  1581. Long ll_mtrlid
  1582. String ls_mtrlcode,ls_plancode,ls_status,ls_woodcode,ls_pcode
  1583. Long ll_cusid
  1584. Decimal ld_planprice,ld_acmpqty
  1585. Long cnt = 0
  1586. Decimal ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro
  1587. String ls_msg
  1588. Long ll_SonMtrlid[],ll_storageid,ll_storageid_f
  1589. String ls_pf_status[],ls_pf_woodcode[],ls_pf_pcode[]
  1590. Int li_ifover[],li_dipztype[]
  1591. String ls_status_find,ls_woodcode_find,ls_pcode_find
  1592. Decimal ld_Sonscale[]
  1593. Decimal ld_mxqty
  1594. Long it_mxt = 1
  1595. Long ll_row
  1596. Long ll_mtrlwareid
  1597. Decimal ld_rqty
  1598. Decimal ld_noallocqty,ld_cost
  1599. Long i
  1600. //生成出仓单
  1601. uo_outware uo_out
  1602. uo_out = CREATE uo_outware
  1603. uo_out.commit_transaction = commit_transaction
  1604. uo_out.if_getid_ture = FALSE
  1605. IF uo_out.newbegin(scid,18,ARG_MSG) = 0 THEN
  1606. rslt = 0
  1607. GOTO ext
  1608. END IF
  1609. uo_out.relid = inwareid
  1610. uo_out.outdate = indate
  1611. uo_out.outrep = opemp
  1612. uo_out.part = inwarecode
  1613. uo_out.dscrp = dscrp
  1614. uo_out.cusname = '自动组装出仓单'
  1615. uo_out.storageid = storageid
  1616. FOR ll_i = 1 TO UpperBound(arg_orderid)
  1617. SELECT u_Order_ml.mtrlid,
  1618. u_Order_ml.status_mode,
  1619. u_Order_ml.woodcode,
  1620. u_Order_ml.pcode,
  1621. u_Order_ml.taskrelcode,
  1622. u_Order_ml.cusid,
  1623. u_mtrldef.mtrlcode,
  1624. u_Order_ml.acmpqty
  1625. INTO :ll_mtrlid,
  1626. :ls_status,
  1627. :ls_woodcode,
  1628. :ls_pcode,
  1629. :ls_plancode,
  1630. :ll_cusid,
  1631. :ls_mtrlcode,
  1632. :ld_acmpqty
  1633. FROM u_Order_ml INNER JOIN
  1634. u_mtrldef ON u_Order_ml.mtrlid = u_mtrldef.mtrlid
  1635. WHERE u_Order_ml.orderid = :arg_orderid[ll_i]
  1636. AND u_Order_ml.scid = :scid USING commit_transaction;
  1637. IF commit_transaction.SQLCode <> 0 THEN
  1638. rslt = 0
  1639. ARG_MSG = '查询主生产计划相关信息失败'+commit_transaction.SQLErrText
  1640. GOTO ext
  1641. END IF
  1642. IF ld_acmpqty - arg_acmpqty[ll_i] = 0 THEN CONTINUE
  1643. cnt++
  1644. IF f_cmp_di_qty(ll_mtrlid,storageid,ls_status,ls_woodcode,ls_pcode,ls_plancode,'',ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ls_msg,ARG_MSG) = 0 THEN
  1645. ARG_MSG = '计算可装数失败,'+ARG_MSG
  1646. rslt = 0
  1647. GOTO ext
  1648. END IF
  1649. IF ld_ref_qty < ld_acmpqty - arg_acmpqty[ll_i] THEN
  1650. rslt = 0
  1651. ARG_MSG = '物料:'+ls_mtrlcode+',可装数:'+String(ld_ref_qty,'#,##0.##########')+',少于此次进仓数:'+String(ld_acmpqty - arg_acmpqty[ll_i],'#,##0.##########')
  1652. GOTO ext
  1653. END IF
  1654. DECLARE cur_pf CURSOR FOR
  1655. SELECT u_PrdPF.SonMtrlid,
  1656. u_PrdPF.Sonscale,
  1657. u_PrdPF.status,
  1658. u_PrdPF.woodcode,
  1659. u_PrdPF.pcode,
  1660. u_PrdPF.ifover,
  1661. u_prdpf.dipztype
  1662. FROM u_PrdPF,u_mtrl_pf
  1663. WHERE ( u_PrdPF.mtrlid = u_mtrl_pf.mtrlid )
  1664. AND ( u_PrdPF.pfcode = u_mtrl_pf.pfcode )
  1665. AND ( u_PrdPF.mtrlid = :ll_mtrlid )
  1666. And ( u_mtrl_pf.ifdft = 1 );
  1667. OPEN cur_pf;
  1668. FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt],
  1669. :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt];
  1670. DO WHILE sqlca.SQLCode = 0
  1671. it_mxt++
  1672. FETCH cur_pf INTO :ll_SonMtrlid[it_mxt],:ld_Sonscale[it_mxt],:ls_pf_status[it_mxt],
  1673. :ls_pf_woodcode[it_mxt],:ls_pf_pcode[it_mxt],:li_ifover[it_mxt],:li_dipztype[it_mxt];
  1674. LOOP
  1675. it_mxt = it_mxt - 1
  1676. CLOSE cur_pf;
  1677. IF it_mxt = 0 THEN
  1678. rslt = 0
  1679. ARG_MSG = '产品:'+ls_mtrlcode+',没有建立默认结构,不能计算'
  1680. END IF
  1681. FOR ll_j = 1 TO it_mxt
  1682. IF li_ifover[ll_j] = 1 THEN
  1683. CHOOSE CASE li_dipztype[ll_j]
  1684. CASE 0
  1685. ls_status_find = ls_status
  1686. ls_woodcode_find = ''
  1687. ls_pcode_find = ''
  1688. CASE 1
  1689. ls_status_find = ''
  1690. ls_woodcode_find = ls_woodcode
  1691. ls_pcode_find = ''
  1692. CASE 2
  1693. ls_status_find = ''
  1694. ls_woodcode_find = ''
  1695. ls_pcode_find = ls_pcode
  1696. CASE 3
  1697. ls_status_find = ls_status
  1698. ls_woodcode_find = ls_woodcode
  1699. ls_pcode_find = ''
  1700. CASE 4
  1701. ls_status_find = ''
  1702. ls_woodcode_find = ls_woodcode
  1703. ls_pcode_find = ls_pcode
  1704. CASE 5
  1705. ls_status_find = ls_status
  1706. ls_woodcode_find = ''
  1707. ls_pcode_find = ls_pcode
  1708. CASE 6
  1709. ls_status_find = ls_status
  1710. ls_woodcode_find = ls_woodcode
  1711. ls_pcode_find = ls_pcode
  1712. END CHOOSE
  1713. ELSE
  1714. ls_status_find = ls_pf_status[ll_j]
  1715. ls_woodcode_find = ls_pf_woodcode[ll_j]
  1716. ls_pcode_find = ls_pf_pcode[ll_j]
  1717. END IF
  1718. ls_status_find = Trim(ls_status_find)
  1719. ls_woodcode_find = Trim(ls_woodcode_find)
  1720. ls_pcode_find = Trim(ls_pcode_find)
  1721. ld_rqty = ld_Sonscale[ll_j] * (ld_acmpqty - arg_acmpqty[ll_i])
  1722. DECLARE m_cur CURSOR FOR
  1723. SELECT mtrlwareid,
  1724. noallocqty,
  1725. cost
  1726. FROM u_mtrlware
  1727. WHERE mtrlid = :ll_SonMtrlid[ll_j]
  1728. AND storageid = :storageid
  1729. AND ( status = :ls_status_find )
  1730. AND ( woodcode = :ls_woodcode_find )
  1731. AND ( pcode = :ls_pcode_find )
  1732. ORDER BY noallocqty DESC
  1733. USING commit_transaction;
  1734. OPEN m_cur;
  1735. FETCH m_cur INTO
  1736. :ll_mtrlwareid,
  1737. :ld_noallocqty ,
  1738. :ld_cost;
  1739. DO WHILE commit_transaction.SQLCode = 0 AND ld_rqty > 0
  1740. i++
  1741. IF ld_noallocqty >= ld_rqty THEN
  1742. ld_mxqty = ld_rqty
  1743. ld_rqty = 0
  1744. ELSE
  1745. ld_mxqty = ld_noallocqty
  1746. ld_rqty = ld_rqty - ld_noallocqty
  1747. END IF
  1748. IF uo_out.acceptmx(ll_mtrlwareid,&
  1749. ld_mxqty,&
  1750. ld_cost,&
  1751. 1,'',i,ARG_MSG,0,0,0,0,'',0,0,'',0,0,'','',0,0,'',0,0,0,0,'','') = 0 THEN
  1752. rslt = 0
  1753. GOTO ext
  1754. END IF
  1755. FETCH m_cur INTO
  1756. :ll_mtrlwareid,
  1757. :ld_noallocqty,
  1758. :ld_cost;
  1759. LOOP
  1760. CLOSE m_cur;
  1761. NEXT
  1762. NEXT
  1763. IF cnt > 0 THEN
  1764. IF uo_out.Save(FALSE,ARG_MSG) = 0 THEN
  1765. rslt = 0
  1766. GOTO ext
  1767. END IF
  1768. ll_outwareid_out = uo_out.outwareid
  1769. IF uo_out.getinfo(scid,ll_outwareid_out,ARG_MSG) = 0 THEN
  1770. rslt = 0
  1771. GOTO ext
  1772. END IF
  1773. IF uo_out.auditing(FALSE,ARG_MSG) = 0 THEN
  1774. rslt = 0
  1775. GOTO ext
  1776. END IF
  1777. END IF
  1778. ext:
  1779. IF rslt = 0 THEN
  1780. ROLLBACK;
  1781. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1782. COMMIT;
  1783. END IF
  1784. DESTROY uo_out
  1785. RETURN rslt
  1786. end function
  1787. public function integer uof_auto_di_caudit (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1788. Long cnt
  1789. Long ll_inwareid ,ll_outwareid
  1790. cnt = 0
  1791. uo_inware uo_in
  1792. uo_in = CREATE uo_inware
  1793. uo_in.commit_transaction = commit_transaction
  1794. uo_in.if_getid_ture = FALSE
  1795. uo_outware uo_out
  1796. uo_out = CREATE uo_outware
  1797. uo_out.commit_transaction = commit_transaction
  1798. uo_out.if_getid_ture = FALSE
  1799. //撤审删除进仓
  1800. SELECT count(*) INTO :cnt
  1801. FROM u_inware
  1802. WHERE billtype = 19
  1803. AND relid = :inwareid USING commit_transaction;
  1804. IF commit_transaction.SQLCode <> 0 THEN
  1805. rslt = 0
  1806. arg_msg = '查询是否有相关自动组装进仓单失败'+commit_transaction.SQLErrText
  1807. GOTO ext
  1808. END IF
  1809. IF cnt > 0 THEN
  1810. SELECT inwareid INTO :ll_inwareid
  1811. FROM u_inware
  1812. WHERE billtype = 19
  1813. AND relid = :inwareid
  1814. AND scid = :scid
  1815. USING commit_transaction;
  1816. IF commit_transaction.SQLCode <> 0 THEN
  1817. rslt = 0
  1818. arg_msg = '查询是相关自动组装进仓单失败'+commit_transaction.SQLErrText
  1819. GOTO ext
  1820. END IF
  1821. IF uo_in.getinfo(scid,ll_inwareid,arg_msg) = 0 THEN
  1822. rslt = 0
  1823. GOTO ext
  1824. END IF
  1825. IF uo_in.c_auditing(FALSE,arg_msg) = 0 THEN
  1826. rslt = 0
  1827. GOTO ext
  1828. END IF
  1829. IF uo_in.del(scid,ll_inwareid,arg_msg,FALSE) = 0 THEN
  1830. rslt = 0
  1831. GOTO ext
  1832. END IF
  1833. END IF
  1834. //撤审删除出仓
  1835. cnt = 0
  1836. SELECT count(*) INTO :cnt
  1837. FROM u_outware
  1838. WHERE billtype = 18
  1839. AND relid = :inwareid USING commit_transaction;
  1840. IF commit_transaction.SQLCode <> 0 THEN
  1841. rslt = 0
  1842. arg_msg = '查询是否有相关自动组装出仓单失败'+commit_transaction.SQLErrText
  1843. GOTO ext
  1844. END IF
  1845. IF cnt > 0 THEN
  1846. SELECT outwareid INTO :ll_outwareid
  1847. FROM u_outware
  1848. WHERE billtype = 18
  1849. AND relid = :inwareid
  1850. AND scid = :scid
  1851. USING commit_transaction;
  1852. IF commit_transaction.SQLCode <> 0 THEN
  1853. rslt = 0
  1854. arg_msg = '查询是相关自动组装出仓单失败'+commit_transaction.SQLErrText
  1855. GOTO ext
  1856. END IF
  1857. IF uo_out.getinfo(scid,ll_outwareid,arg_msg) = 0 THEN
  1858. rslt = 0
  1859. GOTO ext
  1860. END IF
  1861. IF uo_out.c_auditing(FALSE,arg_msg) = 0 THEN
  1862. rslt = 0
  1863. GOTO ext
  1864. END IF
  1865. IF uo_out.del(scid,ll_outwareid,0,arg_msg,FALSE) = 0 THEN
  1866. rslt = 0
  1867. GOTO ext
  1868. END IF
  1869. END IF
  1870. ext:
  1871. IF rslt = 0 THEN
  1872. ROLLBACK;
  1873. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1874. COMMIT;
  1875. END IF
  1876. DESTROY uo_in
  1877. DESTROY uo_out
  1878. RETURN rslt
  1879. end function
  1880. public function integer priceaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  1881. Long ll_i
  1882. IF getinfo(arg_scid,arg_billid,arg_msg) = 0 THEN
  1883. rslt = 0
  1884. GOTO ext
  1885. END IF
  1886. IF priceflag = 1 THEN
  1887. rslt = 0
  1888. arg_msg = "单据已经确认,不能再确认"
  1889. GOTO ext
  1890. END IF
  1891. IF uo_option_cp_inware_scll_rate = 1 THEN
  1892. FOR ll_i = 1 To it_mxbt
  1893. IF uof_check_scll_rate(arg_scid,arg_billid,inwaremx[ll_i].printid,inwaremx[ll_i].relid,inwaremx[ll_i].mtrlid,inwaremx[ll_i].qty,1,arg_msg) = 0 THEN
  1894. rslt = 0
  1895. arg_msg = '行:'+String(ll_i)+','+arg_msg
  1896. GOTO ext
  1897. END IF
  1898. NEXT
  1899. END IF
  1900. UPDATE u_inware
  1901. SET priceflag = 1,
  1902. pricedate = getdate(),
  1903. pricerep = :publ_operator
  1904. WHERE inwareid = :arg_billid
  1905. AND scid = :arg_scid
  1906. And priceflag = 0 ;
  1907. IF commit_transaction.SQLCode <> 0 THEN
  1908. rslt = 0
  1909. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  1910. GOTO ext
  1911. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1912. rslt = 0
  1913. arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1914. GOTO ext
  1915. END IF
  1916. priceflag = 1
  1917. ext:
  1918. IF rslt = 0 THEN
  1919. ROLLBACK Using commit_transaction;
  1920. ELSEIF rslt = 1 And arg_ifcommit THEN
  1921. COMMIT Using commit_transaction;
  1922. END IF
  1923. RETURN rslt
  1924. end function
  1925. public function integer uof_update_planmx_fqty (long arg_scid, long arg_orderid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1926. Long ll_i
  1927. Decimal ld_nofqty,ld_update_qty,ld_qty_in,ld_fqty
  1928. String ls_aps_plancode
  1929. ld_qty_in = arg_qty
  1930. datastore ds_planmx
  1931. ds_planmx = Create datastore
  1932. ds_planmx.DataObject = 'dw_order_zl_planmx_index'
  1933. ds_planmx.SetTransObject(commit_transaction)
  1934. ds_planmx.Retrieve(arg_scid,arg_orderid)
  1935. IF arg_qty > 0 THEN
  1936. ds_planmx.SetSort('begindate A')
  1937. ELSE
  1938. ds_planmx.SetSort('begindate D')
  1939. END IF
  1940. ds_planmx.Sort()
  1941. FOR ll_i = 1 To ds_planmx.RowCount()
  1942. ls_aps_plancode = ds_planmx.Object.aps_plancode[ll_i]
  1943. IF ld_qty_in = 0 THEN EXIT
  1944. IF arg_qty > 0 THEN
  1945. ld_nofqty = ds_planmx.Object.orderqty[ll_i] - ds_planmx.Object.fqty[ll_i]
  1946. IF ld_nofqty > ld_qty_in THEN
  1947. ld_update_qty = ld_qty_in
  1948. ld_qty_in = 0
  1949. ELSE
  1950. ld_update_qty = ld_nofqty
  1951. ld_qty_in = ld_qty_in - ld_nofqty
  1952. END IF
  1953. ELSE
  1954. ld_fqty = ds_planmx.Object.fqty[ll_i]
  1955. IF ld_fqty + ld_qty_in > 0 THEN
  1956. ld_update_qty = ld_qty_in
  1957. ld_qty_in = 0
  1958. ELSE
  1959. ld_update_qty = 0 - ld_fqty
  1960. ld_qty_in = ld_qty_in + ld_fqty
  1961. END IF
  1962. END IF
  1963. UPDATE u_order_zl_planmx
  1964. SET fqty = fqty + :ld_update_qty
  1965. WHERE scid = :arg_scid
  1966. AND orderid = :arg_orderid
  1967. And aps_plancode = :ls_aps_plancode Using commit_transaction;
  1968. IF commit_transaction.SQLCode <> 0 THEN
  1969. rslt = 0
  1970. arg_msg = '更新进仓计划完成数失败,'+commit_transaction.SQLErrText
  1971. GOTO ext
  1972. END IF
  1973. NEXT
  1974. ext:
  1975. IF rslt = 0 THEN
  1976. ROLLBACK Using commit_transaction;
  1977. ELSEIF rslt = 1 And arg_ifcommit THEN
  1978. COMMIT Using commit_transaction;
  1979. END IF
  1980. Destroy ds_planmx
  1981. RETURN rslt
  1982. end function
  1983. public function integer uof_auto_return_fp (long arg_scid, long arg_taskid, long arg_printid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, decimal arg_shareqty, long arg_mtrlwareid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1984. Long ll_i,j
  1985. DateTime server_dt
  1986. Decimal ld_tmp_qty,ld_qty_return
  1987. Long ll_array,ll_array2,ll_if_mx_if_change,ll_cnt,ll_mtrlid_task
  1988. Long ll_taskid_return,ll_printid_return
  1989. Int li_ifpackpro,li_status_task
  1990. Decimal ld_assignqty,ld_sonscale,ld_sonscale_fm,ld_saleqty,ld_ok_returnqty
  1991. String ls_status_task
  1992. Boolean if_cf = False
  1993. s_mtrlcfg_expr s_pz[]
  1994. s_mtrlware_trans_fp s_fp_save
  1995. uo_mtrlware_trans_fp uo_return
  1996. uo_return = Create uo_mtrlware_trans_fp
  1997. datastore ds_lendmx
  1998. ds_lendmx = Create datastore
  1999. ds_lendmx.DataObject = 'ds_auto_return_pf'
  2000. ds_lendmx.SetTransObject(sqlca)
  2001. SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ;
  2002. //取得系统时间,借用操作员表
  2003. IF commit_transaction.SQLCode <> 0 THEN
  2004. rslt = 0
  2005. arg_msg = "查询操作失败,日期 "
  2006. GOTO ext
  2007. END IF
  2008. ds_lendmx.Retrieve(arg_scid,arg_taskid,arg_printid,arg_mtrlid,arg_status,arg_woodcode,arg_pcode)
  2009. IF ds_lendmx.RowCount() > 0 THEN
  2010. //yyx20130122
  2011. SELECT ifpackpro
  2012. INTO :li_ifpackpro
  2013. FROM u_mtrldef
  2014. Where mtrlid = :arg_mtrlid Using commit_transaction ;
  2015. IF commit_transaction.SQLCode <> 0 THEN
  2016. rslt = 0
  2017. arg_msg = "查询还货订单明细包件产品属性失败, "+commit_transaction.SQLErrText
  2018. GOTO ext
  2019. END IF
  2020. //yyx20130122_end
  2021. ld_tmp_qty = arg_shareqty
  2022. FOR ll_i = 1 To ds_lendmx.RowCount()
  2023. ld_assignqty = 0
  2024. ld_saleqty = 0
  2025. IF ld_tmp_qty <= 0 THEN EXIT
  2026. s_fp_save.scid = arg_scid
  2027. s_fp_save.billid = 0
  2028. s_fp_save.billdate = server_dt
  2029. s_fp_save.inrep = publ_operator
  2030. s_fp_save.part = inwarecode
  2031. s_fp_save.dscrp = '生产进仓单:'+inwarecode+'仓审自动生成'
  2032. s_fp_save.storageid = ds_lendmx.Object.storageid[ll_i]
  2033. s_fp_save.taskid = arg_taskid
  2034. s_fp_save.printid = arg_printid
  2035. s_fp_save.billtype = 2
  2036. s_fp_save.fpgrade = ds_lendmx.Object.fpgrade[ll_i]
  2037. ll_array = 0
  2038. ll_array2 = 0
  2039. IF ld_tmp_qty > 0 THEN
  2040. ll_taskid_return = ds_lendmx.Object.taskid[ll_i]
  2041. ll_printid_return = ds_lendmx.Object.taskprintid[ll_i]
  2042. SELECT status
  2043. INTO :li_status_task
  2044. FROM u_saletask
  2045. WHERE u_saletask.scid = :arg_scid
  2046. AND u_saletask.taskid = :ll_taskid_return
  2047. Using commit_transaction ;
  2048. IF commit_transaction.SQLCode <> 0 THEN
  2049. rslt = 0
  2050. arg_msg = "查询还货订单状态失败, "+commit_transaction.SQLErrText
  2051. GOTO ext
  2052. END IF
  2053. IF li_status_task = 1 THEN
  2054. //yyx20120122
  2055. SELECT u_saletaskmx.saleqty - u_saletaskmx.stopqty,
  2056. u_saletaskmx.status,
  2057. u_saletaskmx.mtrlid
  2058. INTO :ld_saleqty,:ls_status_task,:ll_mtrlid_task
  2059. FROM u_saletaskmx
  2060. WHERE u_saletaskmx.scid = :arg_scid
  2061. AND u_saletaskmx.taskid = :ll_taskid_return
  2062. AND u_saletaskmx.printid = :ll_printid_return
  2063. Using commit_transaction ;
  2064. IF commit_transaction.SQLCode <> 0 THEN
  2065. rslt = 0
  2066. arg_msg = "查询还货订单明细订货数量失败, "+commit_transaction.SQLErrText
  2067. GOTO ext
  2068. END IF
  2069. IF li_ifpackpro = 0 THEN
  2070. ld_sonscale = 1
  2071. ld_sonscale_fm = 1
  2072. ELSEIF li_ifpackpro = 1 Or li_ifpackpro = 2 THEN
  2073. IF li_ifpackpro = 2 THEN
  2074. SELECT count(*)
  2075. INTO :ll_cnt
  2076. FROM u_SaleTaskMx_pf
  2077. WHERE u_SaleTaskMx_pf.scid = :arg_scid
  2078. AND u_SaleTaskMx_pf.taskid = :ll_taskid_return
  2079. AND u_SaleTaskMx_pf.printid = :ll_printid_return
  2080. Using commit_transaction;
  2081. IF commit_transaction.SQLCode <> 0 THEN
  2082. ll_if_mx_if_change = 0
  2083. END IF
  2084. IF ll_cnt > 0 THEN
  2085. ll_if_mx_if_change = 1
  2086. ELSE
  2087. ll_if_mx_if_change = 0
  2088. END IF
  2089. ELSE
  2090. ll_if_mx_if_change = 0
  2091. END IF
  2092. IF ll_if_mx_if_change = 1 THEN
  2093. SELECT u_SaleTaskMx_pf.sonscale,
  2094. u_SaleTaskMx_pf.sonscale_fm
  2095. INTO :ld_sonscale,:ld_sonscale_fm
  2096. FROM u_SaleTaskMx_pf
  2097. WHERE u_SaleTaskMx_pf.scid = :arg_scid
  2098. AND u_SaleTaskMx_pf.taskid = :ll_taskid_return
  2099. AND u_SaleTaskMx_pf.printid = :ll_printid_return
  2100. AND u_SaleTaskMx_pf.sonmtrlid = :arg_mtrlid
  2101. Using commit_transaction ;
  2102. IF commit_transaction.SQLCode <> 0 THEN
  2103. rslt = 0
  2104. arg_msg = "查询还货订单明细个性清单组成数失败, "+commit_transaction.SQLErrText
  2105. GOTO ext
  2106. END IF
  2107. ELSE
  2108. SELECT u_prdpf.sonscale,1 INTO :ld_sonscale,:ld_sonscale_fm
  2109. FROM u_prdpf INNER join
  2110. u_mtrl_pf on ( u_prdpf.mtrlid = u_mtrl_pf.mtrlid AND u_mtrl_pf.ifdft = 1 )
  2111. WHERE u_prdpf.sonmtrlid = :arg_mtrlid
  2112. AND u_prdpf.mtrlid = :ll_mtrlid_task
  2113. Using commit_transaction ;
  2114. IF commit_transaction.SQLCode <> 0 THEN
  2115. rslt = 0
  2116. arg_msg = "查询还货订单明细默认清单组成数失败, "+commit_transaction.SQLErrText
  2117. GOTO ext
  2118. END IF
  2119. END IF
  2120. ELSEIF li_ifpackpro = 4 THEN
  2121. f_checkpz(ls_status_task,s_pz[])
  2122. FOR j = 1 To UpperBound(s_pz[])
  2123. IF s_pz[j].cfgname = arg_status THEN
  2124. ld_sonscale = Dec(s_pz[j].qty)
  2125. ld_sonscale_fm = 1
  2126. if_cf = True
  2127. END IF
  2128. NEXT
  2129. IF Not if_cf THEN
  2130. rslt = 0
  2131. arg_msg = "查询还货订单明细组合配置子件组成数失败,请检查组合配置信息 "
  2132. GOTO ext
  2133. END IF
  2134. END IF
  2135. IF li_ifpackpro = 4 THEN
  2136. SELECT isnull(SUM(u_mtrlware_assign.assignqty),0)
  2137. INTO :ld_assignqty
  2138. FROM u_mtrlware_assign,u_mtrlware
  2139. WHERE u_mtrlware_assign.scid = u_mtrlware.scid AND
  2140. u_mtrlware_assign.mtrlwareid = u_mtrlware.mtrlwareid AND
  2141. u_mtrlware_assign.assigntype = 1 AND
  2142. u_mtrlware_assign.scid = :arg_scid AND
  2143. u_mtrlware_assign.Relbillid = :ll_taskid_return AND
  2144. u_mtrlware_assign.Relprintid = :ll_printid_return AND
  2145. u_mtrlware_assign.mtrlid = :arg_mtrlid AND
  2146. u_mtrlware.status = :arg_status
  2147. Using commit_transaction ;
  2148. ELSE
  2149. SELECT isnull(SUM(u_mtrlware_assign.assignqty),0)
  2150. INTO :ld_assignqty
  2151. FROM u_mtrlware_assign
  2152. WHERE u_mtrlware_assign.assigntype = 1 AND
  2153. u_mtrlware_assign.scid = :arg_scid AND
  2154. u_mtrlware_assign.Relbillid = :ll_taskid_return AND
  2155. u_mtrlware_assign.Relprintid = :ll_printid_return AND
  2156. u_mtrlware_assign.mtrlid = :arg_mtrlid
  2157. Using commit_transaction ;
  2158. END IF
  2159. IF commit_transaction.SQLCode <> 0 THEN
  2160. rslt = 0
  2161. arg_msg = "查询还货订单明细已分配数量失败, "+commit_transaction.SQLErrText
  2162. GOTO ext
  2163. END IF
  2164. IF ld_saleqty * ld_sonscale/ld_sonscale_fm - ld_assignqty > 0 THEN
  2165. IF ds_lendmx.Object.noreturnqty[ll_i] > ld_saleqty * ld_sonscale/ld_sonscale_fm - ld_assignqty THEN
  2166. ld_ok_returnqty = ld_saleqty * ld_sonscale/ld_sonscale_fm - ld_assignqty
  2167. ELSE
  2168. ld_ok_returnqty = ds_lendmx.Object.noreturnqty[ll_i]
  2169. END IF
  2170. IF ld_tmp_qty > ld_ok_returnqty THEN
  2171. ld_qty_return = ld_ok_returnqty
  2172. ld_tmp_qty = ld_tmp_qty - ld_ok_returnqty
  2173. ELSE
  2174. ld_qty_return = ld_tmp_qty
  2175. ld_tmp_qty = 0
  2176. END IF
  2177. //
  2178. // IF ld_tmp_qty > ds_lendmx.Object.noreturnqty[ll_i] THEN
  2179. // ld_qty_return = ds_lendmx.Object.noreturnqty[ll_i]
  2180. // ld_tmp_qty = ld_tmp_qty - ds_lendmx.Object.noreturnqty[ll_i]
  2181. // ELSE
  2182. // ld_qty_return = ld_tmp_qty
  2183. // ld_tmp_qty = 0
  2184. // END IF
  2185. //调入
  2186. ll_array++
  2187. s_fp_save.arg_s_mx[ll_array].printid = ll_array
  2188. s_fp_save.arg_s_mx[ll_array].transtype = 1
  2189. s_fp_save.arg_s_mx[ll_array].qty = ld_qty_return
  2190. s_fp_save.arg_s_mx[ll_array].mxdscrp = ''
  2191. s_fp_save.arg_s_mx[ll_array].taskid = ds_lendmx.Object.taskid[ll_i]
  2192. s_fp_save.arg_s_mx[ll_array].taskprintid = ds_lendmx.Object.taskprintid[ll_i]
  2193. s_fp_save.arg_s_mx[ll_array].mxprintid = ds_lendmx.Object.mxprintid[ll_i]
  2194. s_fp_save.arg_s_mx[ll_array].mtrlwareid = arg_mtrlwareid //ds_lendmx.Object.mtrlwareid[ll_j]
  2195. s_fp_save.arg_s_mx[ll_array].relid = ds_lendmx.Object.relid[ll_i]
  2196. s_fp_save.arg_s_mx[ll_array].Relprintid = ds_lendmx.Object.Relprintid[ll_i]
  2197. //yyx20120906
  2198. //调出
  2199. ll_array2++
  2200. s_fp_save.arg_s_mx2[ll_array2].printid = ds_lendmx.Object.mxprintid[ll_i]
  2201. s_fp_save.arg_s_mx2[ll_array2].mtrlid = arg_mtrlid
  2202. s_fp_save.arg_s_mx2[ll_array2].status = arg_status
  2203. s_fp_save.arg_s_mx2[ll_array2].woodcode = arg_woodcode
  2204. s_fp_save.arg_s_mx2[ll_array2].pcode = arg_pcode
  2205. s_fp_save.arg_s_mx2[ll_array2].transqty = ld_qty_return
  2206. s_fp_save.arg_s_mx2[ll_array2].sonscale = ds_lendmx.Object.sonscale[ll_i]
  2207. s_fp_save.arg_s_mx2[ll_array2].assignid = 0
  2208. s_fp_save.arg_s_mx2[ll_array2].mtrlwareid = arg_mtrlwareid
  2209. s_fp_save.arg_s_mx2[ll_array2].taskid = arg_taskid
  2210. s_fp_save.arg_s_mx2[ll_array2].taskprintid = arg_printid
  2211. s_fp_save.arg_s_mx2[ll_array2].mxtype = 0
  2212. END IF
  2213. END IF
  2214. END IF
  2215. IF ll_array > 0 And ll_array2 > 0 THEN
  2216. IF uo_return.Save(s_fp_save,publ_operator,arg_msg,False) = 0 THEN
  2217. rslt = 0
  2218. arg_msg = '自动建立库存分配还货单失败,'+arg_msg
  2219. GOTO ext
  2220. END IF
  2221. IF uo_option_inware_cp_autoreturnfp_audit = 0 Or uo_option_inware_cp_autoreturnfp_audit = 2 THEN
  2222. IF uo_return.affirm(uo_return.uo_billid,publ_operator,arg_msg,False) = 0 THEN
  2223. rslt = 0
  2224. arg_msg = '审核自动建立库存分配还货单失败,'+arg_msg
  2225. GOTO ext
  2226. END IF
  2227. END IF
  2228. IF uo_option_inware_cp_autoreturnfp_audit = 0 Or uo_option_inware_cp_autoreturnfp_audit = 2 And uo_mtrlware_trans_fp_return_secaudit = 0 THEN
  2229. IF uo_return.audit(uo_return.uo_billid,publ_operator,arg_msg,False) = 0 THEN
  2230. rslt = 0
  2231. arg_msg = '审核自动建立库存分配还货单失败,'+arg_msg
  2232. GOTO ext
  2233. END IF
  2234. END IF
  2235. END IF
  2236. NEXT
  2237. END IF
  2238. ext:
  2239. IF rslt = 0 THEN
  2240. ROLLBACK;
  2241. ELSEIF rslt = 1 And arg_ifcommit THEN
  2242. COMMIT;
  2243. END IF
  2244. Destroy uo_return
  2245. Destroy ds_lendmx
  2246. RETURN rslt
  2247. end function
  2248. public function integer fkauditing (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  2249. IF getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN
  2250. rslt = 0
  2251. GOTO ext
  2252. END IF
  2253. IF flag = 0 THEN
  2254. rslt = 0
  2255. arg_msg = "单据未审核"
  2256. GOTO ext
  2257. END IF
  2258. IF fkflag = 1 THEN
  2259. rslt = 0
  2260. arg_msg = "单据已反扣"
  2261. GOTO ext
  2262. END IF
  2263. UPDATE u_inware
  2264. SET fkemp = :publ_operator,
  2265. fkdate = getdate(),
  2266. fkflag = 1
  2267. WHERE scid = :arg_scid
  2268. AND u_inware.inwareid = :arg_inwareid
  2269. AND flag = 1
  2270. And fkflag = 0 Using commit_transaction;
  2271. IF commit_transaction.SQLCode <> 0 THEN
  2272. rslt = 0
  2273. arg_msg = "反扣单据操作失败"+"~n"+commit_transaction.SQLErrText
  2274. GOTO ext
  2275. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2276. rslt = 0
  2277. arg_msg = "单据正在反扣"+"~n"+commit_transaction.SQLErrText
  2278. GOTO ext
  2279. END IF
  2280. IF uof_auto_scll(arg_msg,False) = 0 THEN
  2281. rslt = 0
  2282. GOTO ext
  2283. END IF
  2284. ext:
  2285. IF rslt = 0 THEN
  2286. ROLLBACK Using commit_transaction;
  2287. ELSEIF rslt = 1 And arg_ifcommit THEN
  2288. COMMIT Using commit_transaction;
  2289. END IF
  2290. RETURN rslt
  2291. end function
  2292. public function integer c_fkauditing (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  2293. IF getinfo(arg_scid,arg_inwareid,arg_msg) = 0 THEN
  2294. rslt = 0
  2295. GOTO ext
  2296. END IF
  2297. IF flag = 0 THEN
  2298. rslt = 0
  2299. arg_msg = "单据未审核"
  2300. GOTO ext
  2301. END IF
  2302. IF fkflag = 0 THEN
  2303. rslt = 0
  2304. arg_msg = "单据未反扣"
  2305. GOTO ext
  2306. END IF
  2307. UPDATE u_inware
  2308. SET fkemp = '',
  2309. fkdate = null,
  2310. fkflag = 0
  2311. WHERE scid = :arg_scid
  2312. AND u_inware.inwareid = :arg_inwareid
  2313. And fkflag = 1 Using commit_transaction;
  2314. IF commit_transaction.SQLCode <> 0 THEN
  2315. rslt = 0
  2316. arg_msg = "撤反扣单据操作失败"+"~n"+commit_transaction.SQLErrText
  2317. GOTO ext
  2318. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2319. rslt = 0
  2320. arg_msg = "单据正在撤反扣"+"~n"+commit_transaction.SQLErrText
  2321. GOTO ext
  2322. END IF
  2323. IF uof_auto_scll_caudit(arg_msg,False) = 0 THEN
  2324. rslt = 0
  2325. GOTO ext
  2326. END IF
  2327. ext:
  2328. IF rslt = 0 THEN
  2329. ROLLBACK Using commit_transaction;
  2330. ELSEIF rslt = 1 And arg_ifcommit THEN
  2331. COMMIT Using commit_transaction;
  2332. END IF
  2333. RETURN rslt
  2334. end function
  2335. public function integer uof_auto_scll_p (ref string arg_msg);Int rslt = 1
  2336. String ls_msg
  2337. String ls_inwarecode
  2338. Long ll_rowcnt, i
  2339. Long ll_scid, ll_inwareid
  2340. Long ll_suc, ll_fail
  2341. datastore ds
  2342. ds = Create datastore
  2343. ds.DataObject = "ds_inware_cp_not_fk"
  2344. ds.SetTransObject(commit_transaction)
  2345. ll_rowcnt = ds.Retrieve()
  2346. FOR i = 1 To ll_rowcnt
  2347. ll_scid = ds.Object.u_inware_scid[i]
  2348. ll_inwareid = ds.Object.inwareid[i]
  2349. ls_inwarecode = ds.Object.inwarecode[i]
  2350. IF fkauditing(ll_scid, ll_inwareid, True, ls_msg) = 0 THEN
  2351. ls_msg = "生产进仓单:"+ls_inwarecode + ","+ls_msg
  2352. arg_msg += ls_msg + "~r~n"
  2353. ll_fail++
  2354. f_setsysoplog('生产进仓单','自动反扣失败,'+ls_msg,ls_msg,True)
  2355. ELSE
  2356. ll_suc++
  2357. END IF
  2358. NEXT
  2359. f_setsysoplog('生产进仓单','自动批反扣,成功:'+String(ll_suc)+", 失败:"+String(ll_fail),ls_msg,True)
  2360. Destroy ds
  2361. if ll_fail > 0 then
  2362. rslt = 0
  2363. end if
  2364. RETURN rslt
  2365. end function
  2366. public function integer uof_add_relcode (long arg_scid, long arg_inwareid, string arg_relcode, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2367. arg_relcode = Trim(arg_relcode)
  2368. If it_updatebegin Or it_newbegin Then
  2369. rslt = 0
  2370. arg_msg = "编辑状态下不可用"
  2371. Goto ext
  2372. End If
  2373. If p_getinfo(arg_scid,arg_inwareid,arg_msg) = 0 Then
  2374. rslt = 0
  2375. Goto ext
  2376. End If
  2377. If flag = 0 Then
  2378. rslt = 0
  2379. arg_msg = "非审核状态下不可用"
  2380. Goto ext
  2381. End If
  2382. Update u_inware
  2383. Set part = :arg_relcode
  2384. Where scid = :arg_scid
  2385. And inwareid = :arg_inwareid;
  2386. If sqlca.SQLCode <> 0 Then
  2387. rslt = 0
  2388. arg_msg = "因网络或其它原因导致添加相关号操作失败"+"~n"+sqlca.SQLErrText
  2389. Goto ext
  2390. End If
  2391. part = arg_relcode
  2392. ext:
  2393. If rslt = 0 Then
  2394. Rollback;
  2395. ElseIf rslt = 1 And arg_ifcommit Then
  2396. Commit;
  2397. End If
  2398. Return (rslt)
  2399. end function
  2400. public function integer uof_secaudit (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i
  2401. If uo_option_cpinware_update_planprice = -1000 Then
  2402. rslt = 0
  2403. arg_msg = '选项:[256]生产进仓单审核更新计划成本价,读取初始默认值失败,操作取消!'
  2404. Goto ext
  2405. End If
  2406. If getinfo(arg_scid,arg_billid,arg_msg) = 0 Then
  2407. rslt = 0
  2408. Goto ext
  2409. End If
  2410. If secflag = 1 Then
  2411. rslt = 0
  2412. arg_msg = "单据已经财审,不能再财审"
  2413. Goto ext
  2414. End If
  2415. For i = 1 To it_mxbt
  2416. If uo_option_cpinware_update_planprice = 2 Then
  2417. If f_update_planprice(inwaremx[i].mtrlid,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,2,inwaremx[i].fprice,arg_msg,False,commit_transaction) = 0 Then
  2418. rslt = 0
  2419. arg_msg = '更新计划价失败,行:'+String(i)+','+arg_msg
  2420. Goto ext
  2421. End If
  2422. End If
  2423. Next
  2424. Update u_inware
  2425. Set secflag = 1,
  2426. secauditingdate = getdate(),
  2427. secauditingrep = :publ_operator
  2428. Where inwareid = :arg_billid
  2429. And scid = :arg_scid
  2430. And secflag = 0 ;
  2431. If commit_transaction.SQLCode <> 0 Then
  2432. rslt = 0
  2433. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  2434. Goto ext
  2435. ElseIf commit_transaction.SQLNRows = 0 Then
  2436. rslt = 0
  2437. arg_msg = "单据正在财审,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  2438. Goto ext
  2439. End If
  2440. secflag = 1
  2441. ext:
  2442. If rslt = 0 Then
  2443. Rollback Using commit_transaction;
  2444. ElseIf rslt = 1 And arg_ifcommit Then
  2445. Commit Using commit_transaction;
  2446. End If
  2447. Return rslt
  2448. end function
  2449. public function integer uof_add_pack_fpqty (long arg_scid, long arg_orderid, long arg_mtrlwareid, long arg_mtrlid, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  2450. Long ll_cpmtrlid,ll_porderid
  2451. Int li_ordertype,li_ifpackpro
  2452. String ls_taskrelcode,ls_status,ls_woodcode,ls_pcode
  2453. Long ll_storageid,ll_cusid,ll_cpmtrlwareid
  2454. Int li_storagetype,li_balctype
  2455. uo_cmpl_packpro uo_pack
  2456. uo_pack = Create uo_cmpl_packpro
  2457. uo_pack.commit_transaction = commit_transaction
  2458. Select u_Order_ml_p.mtrlid,
  2459. u_Order_ml.ordertype,
  2460. u_mtrldef.ifpackpro,
  2461. isnull(u_order_ml.porderid,0),
  2462. u_order_ml_p.taskrelcode,
  2463. u_order_ml_p.status_mode,
  2464. u_order_ml_p.woodcode,
  2465. u_order_ml_p.pcode,
  2466. u_mtrldef.storagetype
  2467. Into :ll_cpmtrlid,
  2468. :li_ordertype,
  2469. :li_ifpackpro,
  2470. :ll_porderid,
  2471. :ls_taskrelcode,
  2472. :ls_status,
  2473. :ls_woodcode,
  2474. :ls_pcode,
  2475. :li_storagetype
  2476. FROM u_Order_ml u_order_ml_p INNER JOIN
  2477. u_mtrldef ON u_order_ml_p.mtrlid = u_mtrldef.mtrlid RIGHT OUTER JOIN
  2478. u_Order_ml ON u_order_ml_p.OrderID = u_Order_ml.porderid AND
  2479. u_order_ml_p.scid = u_Order_ml.scid
  2480. Where u_order_ml.scid = :arg_scid
  2481. And u_Order_ml.OrderID = :arg_orderid Using commit_transaction;
  2482. If commit_transaction.SQLCode <> 0 Then
  2483. rslt = 0
  2484. arg_msg = '查询相关指令单信息失败,'+commit_transaction.SQLErrText
  2485. Goto ext
  2486. End If
  2487. If ll_porderid = 0 Then
  2488. rslt = 1
  2489. Goto ext
  2490. End If
  2491. //如果进仓的不是指令单,不执行
  2492. If li_ordertype <> 4 Then
  2493. rslt = 1
  2494. Goto ext
  2495. End If
  2496. //如果上级生产计划不是通用包件产品,不执行
  2497. If li_ifpackpro <> 1 Then
  2498. rslt = 1
  2499. Goto ext
  2500. End If
  2501. //找生产计划产品对应的库存ID
  2502. ll_storageid = storageid
  2503. select balctype
  2504. into :li_balctype
  2505. from u_storage
  2506. where storageid = :ll_storageid Using commit_transaction;
  2507. If commit_transaction.SQLCode <> 0 Then
  2508. rslt = 0
  2509. arg_msg = '查询进仓单仓库信息失败,'+commit_transaction.SQLErrText
  2510. Goto ext
  2511. End If
  2512. If li_balctype = 0 Then
  2513. ll_cusid = 0
  2514. Else
  2515. If li_storagetype = 1 Then ll_cusid = 0
  2516. End If
  2517. Select top 1 mtrlwareid Into :ll_cpmtrlwareid
  2518. From u_mtrlware
  2519. Where mtrlid = :ll_cpmtrlid
  2520. And status = :ls_status
  2521. And storageid = :ll_storageid
  2522. And woodcode = :ls_woodcode
  2523. And plancode = ''
  2524. And pcode = :ls_pcode
  2525. And sptid = :ll_cusid
  2526. And mtrlcuscode = '';
  2527. If commit_transaction.SQLCode = -1 Then
  2528. arg_msg = '查询产品库存失败,'+sqlca.SQLErrText
  2529. rslt = 0
  2530. Goto ext
  2531. ElseIf commit_transaction.SQLCode = 100 Then
  2532. ll_cpmtrlwareid = 0
  2533. ll_cpmtrlwareid = f_sys_scidentity(scid,"u_mtrlware","mtrlwareid",arg_msg,True,id_sqlca)
  2534. If ll_cpmtrlwareid <= 0 Then
  2535. rslt = 0
  2536. Goto ext
  2537. End If
  2538. Insert Into u_mtrlware(scid,mtrlwareid,mtrlid,storageid,noallocqty,status,plancode,woodcode,pcode,sptid,mtrlcuscode)
  2539. Values(:arg_scid,:ll_cpmtrlwareid,:ll_cpmtrlid,:ll_storageid,0,:ls_status,'',:ls_woodcode,:ls_pcode,:ll_cusid,'') Using commit_transaction;
  2540. If commit_transaction.SQLCode <> 0 Then
  2541. arg_msg = '主生产计划产品加0库存失败或物料已经有库存,请检查,'+commit_transaction.SQLErrText
  2542. rslt = 0
  2543. Goto ext
  2544. End If
  2545. End If
  2546. If uo_pack.uof_add_fpqty(arg_scid,arg_mtrlwareid,arg_mtrlid,ll_cpmtrlwareid,ll_cpmtrlid,arg_qty,arg_msg,False) = 0 Then
  2547. rslt = 0
  2548. Goto ext
  2549. End If
  2550. ext:
  2551. If rslt = 0 Then
  2552. Rollback Using commit_transaction;
  2553. ElseIf rslt = 1 And arg_ifcommit Then
  2554. Commit Using commit_transaction;
  2555. End If
  2556. Destroy uo_pack
  2557. Return rslt
  2558. end function
  2559. on uo_inware_cp.create
  2560. call super::create
  2561. end on
  2562. on uo_inware_cp.destroy
  2563. call super::destroy
  2564. end on
  2565. event constructor;call super::constructor;String str_optionvalue,arg_msg
  2566. f_get_sys_option_value('224',str_optionvalue,arg_msg)
  2567. uo_option_order_ml_cpfp_noreltask = Long(str_optionvalue)
  2568. f_get_sys_option_value('057',str_optionvalue,arg_msg)
  2569. uo_option_wkpmtrlware = Long(str_optionvalue)
  2570. f_get_sys_option_value('256',str_optionvalue,arg_msg)
  2571. uo_option_cpinware_update_planprice = long(str_optionvalue)
  2572. f_get_sys_option_value('112',str_optionvalue,arg_msg)
  2573. uo_option_ifovertask_cp = Long(str_optionvalue)
  2574. f_get_sys_option_value('346',str_optionvalue,arg_msg)
  2575. uo_mtrlware_trans_fp_return_secaudit = Long(str_optionvalue)
  2576. f_get_sys_option_value('354',str_optionvalue,arg_msg)
  2577. uo_option_inware_cp_autoreturnfp_audit = Long(str_optionvalue)
  2578. end event