uo_inware_cp.sru 65 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365
  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. long it_mxbt_pf //生产进仓按清单反扣数组
  11. end variables
  12. forward prototypes
  13. public function integer uf_get_pfmtrlmx (long arg_mtrlid, decimal arg_qty, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg)
  14. public function integer uf_get_mtrlware (long arg_storageid, long arg_mtrlid, decimal arg_qty, string arg_mtrlcode, string arg_storagename, ref s_mtrlware_fk s_fk, ref string arg_msg)
  15. public function integer uf_cmpl_rqmtrl (long arg_mtrlid, decimal arg_qty, long arg_lp, long arg_flag, string arg_mtrlcode, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg)
  16. public function integer uf_update_inprice (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer uf_destroy_scll (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer auditing_end (ref string arg_msg)
  19. public function integer c_auditing_end (ref string arg_msg)
  20. public function integer uf_create_scll (long arg_scid, long arg_billid, string arg_billcode, ref string arg_msg)
  21. public function integer auditing_chk (ref string arg_msg)
  22. public function integer uf_update_inware_cost (ref string arg_msg, boolean arg_ifcommit)
  23. public function integer acceptmx (s_inwaremx s_mx, ref string arg_msg)
  24. public function integer save (boolean arg_ifcommit, ref string arg_msg)
  25. end prototypes
  26. public function integer uf_get_pfmtrlmx (long arg_mtrlid, decimal arg_qty, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg);Long rslt = 1
  27. Long ll_ifautoscll,ll_fklevel,ll_sauditflag
  28. String ls_mtrlcode
  29. SELECT ifautoscll,fklevel,mtrlcode,sauditflag
  30. INTO :ll_ifautoscll,:ll_fklevel,:ls_mtrlcode,:ll_sauditflag
  31. FROM u_mtrldef
  32. Where mtrlid = :arg_mtrlid Using commit_transaction;
  33. IF commit_transaction.SQLCode <> 0 THEN
  34. rslt = 0
  35. arg_msg = '查询产品资料失败,产品唯一码错误'
  36. GOTO ext
  37. END IF
  38. IF ll_ifautoscll = 0 THEN
  39. rslt = 1
  40. GOTO ext
  41. END IF
  42. IF ll_sauditflag = 0 THEN
  43. rslt = 0
  44. arg_msg = '产品['+ls_mtrlcode+']清单还没审核,请先审核'
  45. GOTO ext
  46. END IF
  47. Dec lde_Sonscale,lde_sonloss,lde_sondecloss
  48. Long ll_SonMtrlid,ll_storageid,k,ll_dft,cnt,ll_wrkgrpid
  49. String ls_mtrlcode_pf
  50. IF ll_fklevel = 0 THEN // //清单反扣直接下级物料
  51. datastore ds_pfmx
  52. ds_pfmx = Create datastore
  53. ds_pfmx.DataObject = 'ds_mtrl_pfmx'
  54. ds_pfmx.SetTransObject(commit_transaction)
  55. ds_pfmx.Retrieve(arg_mtrlid)
  56. IF ds_pfmx.RowCount() = 0 THEN
  57. rslt = 1
  58. GOTO ext
  59. END IF
  60. FOR k = 1 To ds_pfmx.RowCount()
  61. IF ll_SonMtrlid <> ds_pfmx.Object.u_prdpf_sonmtrlid[k] THEN
  62. ll_SonMtrlid = ds_pfmx.Object.u_prdpf_sonmtrlid[k]
  63. ll_storageid = ds_pfmx.Object.u_mtrl_storage_storageid[k]
  64. lde_Sonscale = ds_pfmx.Object.u_prdpf_sonscale[k]
  65. lde_sonloss = ds_pfmx.Object.u_prdpf_sonloss[k]
  66. lde_sondecloss = ds_pfmx.Object.u_prdpf_sondecloss[k]
  67. ls_mtrlcode_pf = ds_pfmx.Object.u_mtrldef_mtrlcode[k]
  68. ll_wrkgrpid = ds_pfmx.Object.u_prdpf_wrkgrpid[k]
  69. IF ll_wrkgrpid <= 0 THEN
  70. rslt = 0
  71. arg_msg = '产品['+ls_mtrlcode+']清单中物料['+ls_mtrlcode_pf+']还没设定领料组,请先设定'
  72. GOTO ext
  73. END IF
  74. IF ds_pfmx.Object.u_mtrl_storage_dft[k] <> 1 THEN
  75. rslt = 0
  76. arg_msg = '物料['+ls_mtrlcode_pf+']还没设定默认反扣仓库,请先设定'
  77. GOTO ext
  78. END IF
  79. cnt++
  80. arg_s_fkmx.storageid[cnt] = ll_storageid
  81. arg_s_fkmx.mtrlid[cnt] = ll_SonMtrlid
  82. arg_s_fkmx.wrkgrpid[cnt] = ll_wrkgrpid
  83. arg_s_fkmx.qty[cnt] = arg_qty * lde_Sonscale / (1 - lde_sonloss) + lde_sondecloss
  84. END IF
  85. NEXT
  86. ELSEIF ll_fklevel = 1 THEN // //清单反扣最底层物料
  87. IF uf_cmpl_rqmtrl(arg_mtrlid,arg_qty,0,ll_sauditflag,ls_mtrlcode,arg_s_fkmx,arg_msg) = 0 THEN
  88. rslt = 0
  89. GOTO ext
  90. END IF
  91. END IF
  92. ext:
  93. RETURN rslt
  94. end function
  95. public function integer uf_get_mtrlware (long arg_storageid, long arg_mtrlid, decimal arg_qty, string arg_mtrlcode, string arg_storagename, ref s_mtrlware_fk s_fk, ref string arg_msg);//uf_get_mtrlware(arg_storageid,arg_mtrlid,arg_qty,arg_mtrlcode,arg_storagename,s_fk,arg_msg)
  96. Long rslt = 1
  97. Dec ll_sumqty
  98. Long plancnt
  99. SELECT isnull(sum(noallocqty),0)
  100. INTO :ll_sumqty
  101. FROM u_mtrlware
  102. WHERE ( mtrlid = :arg_mtrlid) AND
  103. (storageid = :arg_storageid) USING commit_transaction;
  104. IF commit_transaction.SQLCode <> 0 THEN
  105. rslt = 0
  106. arg_msg = '查询物料['+arg_mtrlcode+']库存失败'
  107. GOTO ext
  108. END IF
  109. IF ll_sumqty < arg_qty THEN
  110. rslt = 0
  111. arg_msg = '物料['+arg_mtrlcode+']在仓库['+arg_storagename+']库存为:'+String(ll_sumqty,'#,##0.#####')+',少于需领数:'+String(arg_qty,'#,##0.#####')
  112. GOTO ext
  113. END IF
  114. SELECT count(*)
  115. INTO :plancnt
  116. FROM u_mtrlware
  117. WHERE ( u_mtrlware.mtrlid = :arg_mtrlid ) AND
  118. ( u_mtrlware.storageid = :arg_storageid ) AND
  119. ( u_mtrlware.noallocqty > 0 ) USING commit_transaction;
  120. IF commit_transaction.SQLCode <> 0 THEN
  121. rslt = 0
  122. arg_msg = '查询物料['+arg_mtrlcode+']库存资料失败'
  123. GOTO ext
  124. END IF
  125. Long ins_mtrlwareid
  126. Dec ins_qty,ins_addqty,ins_cost
  127. Long count,i
  128. Dec sumqty,noallocqty,allocqty,i_qty
  129. noallocqty = arg_qty
  130. DECLARE pf_cur CURSOR FOR
  131. SELECT u_mtrlware.mtrlwareid,
  132. u_mtrlware.noallocqty,
  133. u_mtrlware.noallocaddqty,
  134. u_mtrlware.cost
  135. FROM u_mtrlware
  136. WHERE ( u_mtrlware.mtrlid = :arg_mtrlid ) AND
  137. ( u_mtrlware.storageid = :arg_storageid ) AND
  138. ( u_mtrlware.noallocqty > 0 )
  139. Order By u_mtrlware.noallocqty Asc USING commit_transaction;
  140. OPEN pf_cur;
  141. count = 1
  142. FETCH pf_cur INTO :ins_mtrlwareid, &
  143. :ins_qty,:ins_addqty,:ins_cost ;
  144. DO WHILE sqlca.SQLCode = 0 AND sumqty < arg_qty
  145. count++
  146. sumqty = sumqty+ins_qty
  147. IF ins_qty > noallocqty THEN
  148. i_qty = noallocqty
  149. allocqty = allocqty+i_qty
  150. noallocqty = 0
  151. ins_addqty = Int(ins_addqty * noallocqty / ins_qty)
  152. ELSEIF ins_qty = noallocqty THEN
  153. i_qty = noallocqty
  154. allocqty = allocqty+i_qty
  155. noallocqty = 0 //noallocqty - ins_qty
  156. ELSE
  157. IF plancnt > 1 THEN
  158. i_qty = sumqty - allocqty
  159. allocqty = allocqty+i_qty
  160. noallocqty = arg_qty - allocqty
  161. ELSE
  162. i_qty = arg_qty
  163. noallocqty = 0
  164. END IF
  165. END IF
  166. i++
  167. s_fk.mtrlwareid[i] = ins_mtrlwareid
  168. s_fk.addqty[i] = ins_addqty
  169. s_fk.qty[i] = i_qty
  170. s_fk.cost[i] = ins_cost
  171. FETCH pf_cur INTO :ins_mtrlwareid,&
  172. :ins_qty,:ins_addqty,:ins_cost ;
  173. LOOP
  174. count = count - 1
  175. CLOSE pf_cur;
  176. ext:
  177. RETURN rslt
  178. end function
  179. public function integer uf_cmpl_rqmtrl (long arg_mtrlid, decimal arg_qty, long arg_lp, long arg_flag, string arg_mtrlcode, ref s_inware_cp_fkmx arg_s_fkmx, ref string arg_msg);Long rslt = 1
  180. Long ll_cnt,ll_lp,ll_rft,k,i
  181. Dec lde_Sonscale,lde_sonloss,lde_sondecloss,lde_qty
  182. Long ll_SonMtrlid,ll_storageid,ll_dft,ll_flag,ll_wrkgrpid
  183. String ls_mtrlcode_pf,ls_mtrlcode
  184. Long ll_SonMtrlid_arr[],ll_storageid_arr[],ll_flag_arr[],ll_wrkgrpid_arr[]
  185. Dec ll_qty_arr[]
  186. String ls_mtrlcode_arr[]
  187. SELECT count(*)
  188. INTO :ll_cnt
  189. FROM u_PrdPF
  190. Where u_PrdPF.mtrlid = :arg_mtrlid USING commit_transaction;
  191. IF commit_transaction.SQLCode <> 0 THEN
  192. rslt = 0
  193. arg_msg = '查询产品['+arg_mtrlcode+']清单失败'
  194. GOTO ext
  195. END IF
  196. IF arg_lp = 0 THEN
  197. IF ll_cnt = 0 THEN
  198. rslt = 0
  199. arg_msg = '产品['+arg_mtrlcode+']还没设定清单,请先设定'
  200. GOTO ext
  201. END IF
  202. IF arg_flag = 0 THEN
  203. rslt = 0
  204. arg_msg = '产品['+arg_mtrlcode+']清单还没审核,请先审核'
  205. GOTO ext
  206. END IF
  207. ELSE
  208. IF ll_cnt = 0 THEN
  209. rslt = 2
  210. GOTO ext
  211. ELSEIF ll_cnt > 0 AND arg_flag = 0 THEN
  212. rslt = 0
  213. arg_msg = '物料['+arg_mtrlcode+']清单还没审核,请先审核'
  214. GOTO ext
  215. END IF
  216. END IF
  217. ll_cnt = 0
  218. DECLARE cur_pf CURSOR FOR
  219. SELECT u_PrdPF.Sonscale,
  220. u_PrdPF.sonloss,
  221. u_PrdPF.sondecloss,
  222. u_PrdPF.SonMtrlid,
  223. u_mtrldef.mtrlcode,
  224. u_mtrldef.sauditflag,
  225. u_PrdPF.wrkgrpid
  226. FROM u_PrdPF INNER JOIN
  227. u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid
  228. Where ( u_PrdPF.mtrlid = :arg_mtrlid ) USING commit_transaction;
  229. OPEN cur_pf;
  230. FETCH cur_pf INTO :lde_Sonscale,:lde_sonloss,:lde_sondecloss,:ll_SonMtrlid,:ls_mtrlcode_pf,:ll_flag,:ll_wrkgrpid;
  231. DO WHILE commit_transaction.SQLCode = 0
  232. lde_qty = arg_qty * lde_Sonscale / (1 - lde_sonloss) + lde_sondecloss
  233. k++
  234. ll_SonMtrlid_arr[k] = ll_SonMtrlid
  235. ll_qty_arr[k] = lde_qty
  236. ll_flag_arr[k] = ll_flag
  237. ls_mtrlcode_arr[k] = ls_mtrlcode_pf
  238. ll_wrkgrpid_arr[k] = ll_wrkgrpid
  239. FETCH cur_pf INTO :lde_Sonscale,:lde_sonloss,:lde_sondecloss,:ll_SonMtrlid,:ls_mtrlcode_pf,:ll_flag,:ll_wrkgrpid;
  240. LOOP
  241. CLOSE cur_pf;
  242. FOR i = 1 TO UpperBound(ll_SonMtrlid_arr)
  243. ll_lp = arg_lp + 1
  244. IF ll_wrkgrpid_arr[i] <= 0 THEN
  245. rslt = 0
  246. arg_msg = '产品['+arg_mtrlcode+']清单中物料['+ls_mtrlcode_arr[i]+']领料组还没设定,请先设定'
  247. GOTO ext
  248. END IF
  249. ll_rft = uf_cmpl_rqmtrl(ll_SonMtrlid_arr[i],ll_qty_arr[i],ll_lp,ll_flag_arr[i],ls_mtrlcode_arr[i],arg_s_fkmx,arg_msg)
  250. IF ll_rft = 0 THEN
  251. rslt = 0
  252. GOTO ext
  253. ELSEIF ll_rft = 1 THEN
  254. CONTINUE
  255. END IF
  256. IF ll_SonMtrlid_arr[i] > 0 THEN
  257. SELECT count(*)
  258. INTO :ll_cnt
  259. FROM u_mtrldef LEFT OUTER JOIN
  260. u_mtrl_storage ON u_mtrldef.mtrlid = u_mtrl_storage.mtrlid
  261. WHERE u_mtrldef.mtrlid = :ll_SonMtrlid_arr[i] AND
  262. IsNull(u_mtrl_storage.dft,0) = 1 USING commit_transaction;
  263. IF commit_transaction.SQLCode <> 0 THEN
  264. rslt = 0
  265. arg_msg = '查询物料['+ls_mtrlcode_arr[i]+']默认反扣仓库失败'
  266. GOTO ext
  267. END IF
  268. IF ll_cnt = 0 THEN
  269. rslt = 0
  270. arg_msg = '物料['+ls_mtrlcode_arr[i]+']还没设定默认反扣仓库,请先设定'
  271. GOTO ext
  272. ELSEIF ll_cnt > 1 THEN
  273. rslt = 0
  274. arg_msg = '物料['+ls_mtrlcode_arr[i]+']设定了多个默认反扣仓库,只能设置一个'
  275. GOTO ext
  276. END IF
  277. SELECT u_mtrl_storage.storageid
  278. INTO :ll_storageid
  279. FROM u_mtrldef LEFT OUTER JOIN
  280. u_mtrl_storage ON u_mtrldef.mtrlid = u_mtrl_storage.mtrlid
  281. WHERE u_mtrldef.mtrlid = :ll_SonMtrlid_arr[i] AND
  282. IsNull(u_mtrl_storage.dft,0) = 1 USING commit_transaction;
  283. IF commit_transaction.SQLCode <> 0 THEN
  284. rslt = 0
  285. arg_msg = '查询物料['+ls_mtrlcode_arr[i]+']默认反扣仓库失败'
  286. GOTO ext
  287. END IF
  288. END IF
  289. it_mxbt_pf++
  290. arg_s_fkmx.storageid[it_mxbt_pf] = ll_storageid
  291. arg_s_fkmx.mtrlid[it_mxbt_pf] = ll_SonMtrlid_arr[i]
  292. arg_s_fkmx.wrkgrpid[it_mxbt_pf] = ll_wrkgrpid_arr[i]
  293. arg_s_fkmx.qty[it_mxbt_pf] = ll_qty_arr[i]
  294. NEXT
  295. ext:
  296. RETURN rslt
  297. end function
  298. public function integer uf_update_inprice (long arg_scid, long arg_inwareid, long arg_printid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  299. Long ll_mtrlid, ll_relid, ll_relprintid
  300. Decimal ld_qty
  301. String ls_status, ls_woodcode, ls_pcode
  302. Long ll_inprice_mode
  303. Decimal ld_planprice
  304. Decimal wfjgprice, jgprice,outcost
  305. Decimal ld_outamt
  306. Decimal ld_inamt
  307. Decimal ld_cost_price
  308. Decimal ld_fprice
  309. SELECT mtrlid, relid, relprintid, qty, status, woodcode, pcode
  310. INTO :ll_mtrlid, :ll_relid, :ll_relprintid, :ld_qty, :ls_status, :ls_woodcode, :ls_pcode
  311. FROM u_inwaremx
  312. WHERE scid = :arg_scid
  313. AND inwareid = :arg_inwareid
  314. And printid = :arg_printid;
  315. IF sqlca.SQLCode <> 0 THEN
  316. rslt = 0
  317. arg_msg = '查询生产进仓单明细信息失败,' + sqlca.SQLErrText
  318. GOTO ext
  319. END IF
  320. SELECT inprice_mode, planprice
  321. INTO :ll_inprice_mode, :ld_planprice
  322. FROM u_mtrldef
  323. Where mtrlid = :ll_mtrlid;
  324. IF sqlca.SQLCode <> 0 THEN
  325. rslt = 0
  326. arg_msg = '查询物料生产进仓取价模式失败,' + sqlca.SQLErrText
  327. GOTO ext
  328. END IF
  329. IF ll_inprice_mode = 0 or ll_relid > 0 THEN
  330. // UPDATE u_inwaremx SET fprice = :ld_planprice
  331. // WHERE scid = :arg_scid
  332. // AND inwareid = :arg_inwareid
  333. // And printid = :arg_printid;
  334. // IF sqlca.SQLCode <> 0 THEN
  335. // rslt = 0
  336. // arg_msg = '更新生产进仓明细单价为计划价失败,' + sqlca.SQLErrText
  337. // GOTO ext
  338. // END IF
  339. ELSE
  340. SELECT TOP 1 u_mtrlprice_sum.wfjgprice, u_mtrlprice_sum.jgprice, u_mtrlprice_sum.outcost
  341. INTO :wfjgprice,:jgprice,:outcost
  342. FROM u_mtrldef INNER JOIN
  343. u_mtrlprice_sum ON u_mtrldef.mtrlid = u_mtrlprice_sum.mtrlid INNER JOIN
  344. (SELECT MAX(sumdate) AS sumdate, mtrlid, pfcode, status, woodcode, pcode
  345. FROM u_mtrlprice_sum AS u_mtrlprice_sum_1
  346. GROUP BY mtrlid, pfcode, status, woodcode, pcode) AS v_mtrlid_sumdate ON u_mtrlprice_sum.pcode = v_mtrlid_sumdate.pcode AND
  347. u_mtrlprice_sum.woodcode = v_mtrlid_sumdate.woodcode AND u_mtrlprice_sum.status = v_mtrlid_sumdate.status AND
  348. u_mtrlprice_sum.mtrlid = v_mtrlid_sumdate.mtrlid AND u_mtrlprice_sum.pfcode = v_mtrlid_sumdate.pfcode AND
  349. u_mtrlprice_sum.sumdate = v_mtrlid_sumdate.sumdate
  350. WHERE (u_mtrlprice_sum.mtrlid = :ll_mtrlid)
  351. AND (u_mtrlprice_sum.status = :ls_status)
  352. AND (u_mtrlprice_sum.woodcode = :ls_woodcode)
  353. And (u_mtrlprice_sum.pcode = :ls_pcode);
  354. IF sqlca.SQLCode < 0 THEN
  355. rslt = 0
  356. arg_msg = '查询物料标准外协成+标准人工+标准费用分摊失败,' + sqlca.SQLErrText
  357. GOTO ext
  358. END IF
  359. IF sqlca.SQLCode = 100 THEN
  360. wfjgprice = 0
  361. jgprice = 0
  362. outcost = 0
  363. END IF
  364. IF ll_inprice_mode = 1 THEN
  365. SELECT ISNULL(SUM(u_outwaremx.qty * v_maxprice_sptprice.price),0)
  366. INTO :ld_outamt
  367. FROM u_outwaremx INNER JOIN
  368. u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid INNER JOIN
  369. v_maxprice_sptprice ON u_outwaremx.mtrlid = v_maxprice_sptprice.mtrlid AND u_outwaremx.status = v_maxprice_sptprice.status AND
  370. u_outwaremx.woodcode = v_maxprice_sptprice.woodcode AND u_outwaremx.pcode = v_maxprice_sptprice.pcode
  371. WHERE (u_outware.billtype = 3)
  372. AND (u_outwaremx.scid = :arg_scid)
  373. AND (u_outwaremx.relid = :ll_relid)
  374. AND (u_outwaremx.relprintid = :ll_relprintid)
  375. And (u_outware.flag = 1);
  376. IF sqlca.SQLCode <> 0 THEN
  377. rslt = 0
  378. arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + sqlca.SQLErrText
  379. GOTO ext
  380. END IF
  381. SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0)
  382. INTO :ld_inamt
  383. FROM u_inwaremx INNER JOIN
  384. u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid
  385. WHERE (u_inware.billtype = 3)
  386. AND (u_inwaremx.scid = :arg_scid)
  387. AND (u_inwaremx.relid = :ll_relid)
  388. AND (u_inwaremx.relprintid = :ll_relprintid)
  389. AND (u_inwaremx.inwareid <> :arg_inwareid OR u_inwaremx.printid <> :arg_printid)
  390. And (u_inware.flag = 1);
  391. IF sqlca.SQLCode <> 0 THEN
  392. rslt = 0
  393. arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + sqlca.SQLErrText
  394. GOTO ext
  395. END IF
  396. ld_cost_price = (ld_outamt - ld_inamt) / ld_qty
  397. ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost
  398. UPDATE u_inwaremx SET cost_price = :ld_cost_price, fprice = :ld_fprice
  399. WHERE scid = :arg_scid
  400. AND inwareid = :arg_inwareid
  401. And printid = :arg_printid;
  402. IF sqlca.SQLCode <> 0 THEN
  403. rslt = 0
  404. arg_msg = '按材料领用成本更新生产进仓明细单价失败,' + sqlca.SQLErrText
  405. GOTO ext
  406. END IF
  407. ELSEIF ll_inprice_mode = 2 THEN
  408. SELECT ISNULL(SUM(u_outwaremx.qty * u_outwaremx.fprice),0)
  409. INTO :ld_outamt
  410. FROM u_outwaremx INNER JOIN
  411. u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid
  412. WHERE (u_outware.billtype = 3)
  413. AND (u_outwaremx.scid = :arg_scid)
  414. AND (u_outwaremx.relid = :ll_relid)
  415. AND (u_outwaremx.relprintid = :ll_relprintid)
  416. And (u_outware.flag = 1);
  417. IF sqlca.SQLCode <> 0 THEN
  418. rslt = 0
  419. arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + sqlca.SQLErrText
  420. GOTO ext
  421. END IF
  422. SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0)
  423. INTO :ld_inamt
  424. FROM u_inwaremx INNER JOIN
  425. u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid
  426. WHERE (u_inware.billtype = 3)
  427. AND (u_inwaremx.scid = :arg_scid)
  428. AND (u_inwaremx.relid = :ll_relid)
  429. AND (u_inwaremx.relprintid = :ll_relprintid)
  430. AND (u_inwaremx.inwareid <> :arg_inwareid OR u_inwaremx.printid <> :arg_printid)
  431. And (u_inware.flag = 1);
  432. IF sqlca.SQLCode <> 0 THEN
  433. rslt = 0
  434. arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + sqlca.SQLErrText
  435. GOTO ext
  436. END IF
  437. ld_cost_price = (ld_outamt - ld_inamt) / ld_qty
  438. ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost
  439. UPDATE u_inwaremx SET cost_price = :ld_cost_price, fprice = :ld_fprice
  440. WHERE scid = :arg_scid
  441. AND inwareid = :arg_inwareid
  442. And printid = :arg_printid;
  443. IF sqlca.SQLCode <> 0 THEN
  444. rslt = 0
  445. arg_msg = '按材料领用成本更新生产进仓明细单价失败,' + sqlca.SQLErrText
  446. GOTO ext
  447. END IF
  448. END IF
  449. END IF
  450. ext:
  451. IF arg_ifcommit THEN
  452. IF rslt = 1 THEN
  453. COMMIT;
  454. ELSE
  455. ROLLBACK;
  456. END IF
  457. END IF
  458. RETURN rslt
  459. end function
  460. public function integer uf_destroy_scll (long arg_scid, long arg_inwareid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1
  461. Long i,ch
  462. Long ll_outwareid_arr[],ll_outwareid
  463. Int li_flag_arr[], li_flag
  464. String ls_outwarecode_arr[], ls_outwarecode
  465. uo_outware_scll uo_ware
  466. uo_ware = Create uo_outware_scll
  467. uo_ware.commit_transaction = commit_transaction
  468. uo_ware.if_getid_ture = False
  469. //读取单据
  470. DECLARE getoutware CURSOR FOR
  471. SELECT outwareid , flag, outwarecode
  472. FROM u_outware
  473. WHERE billtype = 3
  474. AND relint_1 = :arg_inwareid
  475. AND dscrp = '生产进仓单自动生成领料'
  476. Using commit_transaction;
  477. OPEN getoutware;
  478. DO WHILE commit_transaction.SQLCode = 0
  479. FETCH getoutware Into :ll_outwareid, :li_flag, :ls_outwarecode;
  480. IF commit_transaction.SQLCode <> 0 THEN EXIT
  481. ch++
  482. ll_outwareid_arr[ch] = ll_outwareid
  483. li_flag_arr[ch] = li_flag
  484. ls_outwarecode_arr[ch] = ls_outwarecode
  485. LOOP
  486. CLOSE getoutware;
  487. //检查审核
  488. IF sys_option_inware_cp_autocreatescll = 0 THEN
  489. FOR i = 1 To ch
  490. IF li_flag_arr[i] = 1 THEN
  491. rslt = 0
  492. arg_msg = "系统选项[082]限制,相关领料单["+ls_outwarecode_arr[i]+"]已审核,请手动撤审后再处理生产进仓单"
  493. GOTO ext
  494. END IF
  495. NEXT
  496. END IF
  497. //删除单据
  498. String ls_msg
  499. FOR i = 1 To ch
  500. IF sys_option_inware_cp_autocreatescll = 1 THEN //自动撤审
  501. IF uo_ware.getinfo(arg_scid,ll_outwareid_arr[i],arg_msg) = 0 THEN
  502. rslt = 0
  503. GOTO ext
  504. END IF
  505. IF uo_ware.c_auditing(False,arg_msg) = 0 THEN
  506. rslt = 0
  507. GOTO ext
  508. END IF
  509. END IF
  510. IF uo_ware.del(arg_scid,ll_outwareid_arr[i],arg_msg,False) = 0 THEN
  511. rslt = 0
  512. GOTO ext
  513. END IF
  514. IF sys_option_inware_cp_autocreatescll = 1 THEN
  515. ls_msg = "生产进仓单撤审自动撤审、删除相关领料单"
  516. ELSE
  517. ls_msg = "生产进仓单撤审自动删除相关领料单"
  518. END IF
  519. if f_setsysoplog('领料单',ls_msg+',id:'+String(ll_outwareid_arr[i])+',code:'+ls_outwarecode_arr[i],arg_msg,False) = 0 then
  520. rslt = 0
  521. goto ext
  522. end if
  523. NEXT
  524. ext:
  525. Destroy uo_ware
  526. IF rslt = 0 THEN
  527. ROLLBACK Using commit_transaction;
  528. ELSE
  529. COMMIT Using commit_transaction;
  530. END IF
  531. RETURN rslt
  532. end function
  533. public function integer auditing_end (ref string arg_msg);Long rslt = 1,cnt = 0
  534. Long i,j,k,l
  535. //Dec new_noallocqty = 0
  536. //Long ls_newid
  537. Long ll_storageid_arr[],ll_mtrlid_arr[],ll_storageid_bill[]
  538. Long ll_wrkgrpid_arr[],ll_wrkgrpid_bill[]
  539. Long ll_rqmtrlid_arr[], ll_rqmtrlid
  540. Dec lde_qty_arr[]
  541. uo_saletask uo_task
  542. uo_task = Create uo_saletask
  543. uo_task.commit_transaction = sqlca
  544. //Long ll_mtrlwareid
  545. FOR i = 1 To it_mxbt
  546. //更新已进仓数
  547. IF inwaremx[i].relid > 0 THEN
  548. IF inwaremx[i].ifrel = 1 THEN //引入订单运算的ifrel=0,不需要更新销售订单完成数。
  549. IF uo_task.addmxcmpl_assign(scid, inwaremx[i].relid, inwaremx[i].relprintid, &
  550. inwaremx[i].mtrlid, 0, inwaremx[i].qty, False, arg_msg) = 0 THEN
  551. rslt = 0
  552. GOTO ext
  553. END IF
  554. END IF
  555. // 更新运算单的进仓数
  556. UPDATE u_orderrqmtrl
  557. SET inqty = inqty + :inwaremx[i].qty
  558. WHERE ( scid = :scid ) AND
  559. ( mtrlid = :inwaremx[i].mtrlid ) AND
  560. ( printid = :inwaremx[i].relprintid) AND
  561. (taskid = :inwaremx[i].relid) Using commit_transaction ;
  562. END IF
  563. //自动插计划价
  564. IF sys_option_planprice_configure = 1 THEN //计划价按配置
  565. cnt = 0
  566. SELECT count(*) INTO :cnt
  567. FROM u_mtrl_planprice
  568. WHERE mtrlid = :inwaremx[i].mtrlid
  569. AND status = :inwaremx[i].status
  570. AND woodcode = :inwaremx[i].woodcode
  571. AND pcode = :inwaremx[i].pcode
  572. Using commit_transaction;
  573. IF commit_transaction.SQLCode <> 0 THEN
  574. arg_msg = '行:'+String(i)+',查询是否有计划价失败,'+commit_transaction.SQLErrText
  575. rslt = 0
  576. GOTO ext
  577. END IF
  578. IF cnt = 0 THEN
  579. INSERT INTO u_mtrl_planprice
  580. (mtrlid, status, woodcode, pcode, planprice)
  581. VALUES
  582. (:inwaremx[i].mtrlid, :inwaremx[i].status, :inwaremx[i].woodcode, :inwaremx[i].pcode, :inwaremx[i].cost)
  583. Using commit_transaction;
  584. IF commit_transaction.SQLCode <> 0 THEN
  585. arg_msg = '行:'+String(i)+',插入计划价失败,'+commit_transaction.SQLErrText
  586. rslt = 0
  587. GOTO ext
  588. END IF
  589. END IF
  590. END IF
  591. NEXT
  592. ext:
  593. it_mxbt_pf = 0
  594. Destroy uo_task
  595. RETURN rslt
  596. end function
  597. public function integer c_auditing_end (ref string arg_msg);//====================================================================
  598. // Function: c_auditing(arg_ifcommit,arg_msg)
  599. //--------------------------------------------------------------------
  600. // Description: 撤审
  601. //--------------------------------------------------------------------
  602. // Arguments:
  603. // value boolean arg_ifcommit
  604. // reference string arg_msg
  605. //--------------------------------------------------------------------
  606. // Returns: integer
  607. //--------------------------------------------------------------------
  608. // Author: yyx Date: 2003.11.19
  609. //--------------------------------------------------------------------
  610. // Modify History:
  611. //
  612. //====================================================================
  613. Long rslt = 1,cnt = 0,i
  614. uo_saletask uo_task
  615. uo_task = Create uo_saletask
  616. uo_task.commit_transaction = sqlca
  617. FOR i = 1 To it_mxbt
  618. //更新已进仓数
  619. IF inwaremx[i].relid > 0 THEN
  620. IF inwaremx[i].ifrel = 1 THEN //引入订单运算的ifrel=0,不需要更新销售订单完成数。
  621. IF uo_task.addmxcmpl_assign(scid, inwaremx[i].relid, inwaremx[i].relprintid, &
  622. inwaremx[i].mtrlid, 0, 0 - inwaremx[i].qty, False, arg_msg) = 0 THEN
  623. rslt = 0
  624. GOTO ext
  625. END IF
  626. END IF
  627. // IF uo_task.updateassignqty(scid,inwaremx[i].relid,inwaremx[i].relprintid,0 - inwaremx[i].qty,arg_msg,False) = 0 THEN
  628. // rslt = 0
  629. // GOTO ext
  630. // END IF
  631. // 更新运算单的进仓数
  632. UPDATE u_orderrqmtrl
  633. SET inqty = inqty - :inwaremx[i].qty
  634. WHERE ( scid = :scid ) AND
  635. ( mtrlid = :inwaremx[i].mtrlid ) AND
  636. ( printid = :inwaremx[i].relprintid) AND
  637. (taskid = :inwaremx[i].relid) Using commit_transaction ;
  638. END IF
  639. NEXT
  640. /// //删除自动生成领料单
  641. IF uf_destroy_scll(scid, inwareid, arg_msg, False) = 0 THEN
  642. rslt = 0
  643. GOTO ext
  644. END IF
  645. ext:
  646. Destroy uo_task
  647. RETURN rslt
  648. end function
  649. public function integer uf_create_scll (long arg_scid, long arg_billid, string arg_billcode, ref string arg_msg);//uf_create_scll(arg_scid,arg_billid,arg_billcode,arg_storageid,arg_storageid_arr,arg_mtrlid_arr,arg_qty_arr,arg_msg)
  650. Long rslt = 1
  651. Long i, j,k,l,pid, ll_cnt, ll_cnt_2
  652. String ls_mtrlcode,ls_storagename,ls_unit
  653. Long ll_rqmtrlid
  654. Long ll_taskid, ll_printid, ll_ifrel
  655. Long ll_outwareid
  656. Long ll_storageid_arr[], ll_wrkgrpid_arr[], ll_mtrlid_arr[],ll_rqmtrlid_arr[],ll_storageid_bill[], ll_wrkgrpid_bill[]
  657. Decimal lde_qty_arr[], lde_add_DstrQty, lde_trueRqqty, lde_DstrQty
  658. uo_outware_scll uo_ware
  659. uo_ware = Create uo_outware_scll
  660. uo_ware.commit_transaction = commit_transaction
  661. s_mtrlware_fk s_fk, s_fk_null
  662. s_inware_cp_fkmx s_fpmx,s_null
  663. FOR i = 1 To it_mxbt
  664. //// //获取产品反扣物料资料
  665. s_fpmx = s_null
  666. IF uf_get_pfmtrlmx(inwaremx[i].mtrlid,inwaremx[i].qty,s_fpmx,arg_msg) = 0 THEN
  667. rslt = 0
  668. GOTO ext
  669. END IF
  670. //汇总需领料的物料
  671. FOR j = 1 To UpperBound(s_fpmx.storageid)
  672. ll_rqmtrlid = 0
  673. IF inwaremx[i].relid > 0 THEN
  674. SELECT rqmtrlid
  675. INTO :ll_rqmtrlid
  676. FROM u_saleRqMtrl_scll
  677. WHERE taskID = :inwaremx[i].relid
  678. AND printid = :inwaremx[i].relprintid
  679. And mtrlid = :s_fpmx.mtrlid[j];
  680. IF sqlca.SQLCode <> 0 THEN
  681. ll_rqmtrlid = 0
  682. END IF
  683. END IF
  684. //统计物料
  685. FOR k = 1 To UpperBound(ll_storageid_arr)
  686. IF ll_storageid_arr[k] = s_fpmx.storageid[j] And &
  687. ll_mtrlid_arr[k] = s_fpmx.mtrlid[j] And &
  688. ll_wrkgrpid_arr[k] = s_fpmx.wrkgrpid[j] And &
  689. ll_rqmtrlid_arr[k] = ll_rqmtrlid THEN
  690. lde_qty_arr[k] = lde_qty_arr[k] + s_fpmx.qty[j]
  691. GOTO nxt
  692. END IF
  693. NEXT
  694. ll_cnt++
  695. ll_storageid_arr[ll_cnt] = s_fpmx.storageid[j]
  696. ll_wrkgrpid_arr[ll_cnt] = s_fpmx.wrkgrpid[j]
  697. ll_mtrlid_arr[ll_cnt] = s_fpmx.mtrlid[j]
  698. ll_rqmtrlid_arr[ll_cnt] = ll_rqmtrlid
  699. lde_qty_arr[ll_cnt] = s_fpmx.qty[j]
  700. nxt:
  701. //统计仓库
  702. FOR k = 1 To UpperBound(ll_storageid_bill)
  703. IF ll_storageid_bill[k] = s_fpmx.storageid[j] And ll_wrkgrpid_bill[k] = s_fpmx.wrkgrpid[j] THEN
  704. GOTO nxt2
  705. END IF
  706. NEXT
  707. ll_cnt_2++
  708. ll_storageid_bill[ll_cnt_2] = s_fpmx.storageid[j]
  709. ll_wrkgrpid_bill[ll_cnt_2] = s_fpmx.wrkgrpid[j]
  710. nxt2:
  711. NEXT
  712. NEXT
  713. //按仓库, 工作中心 生成领料单
  714. FOR i = 1 To UpperBound(ll_storageid_bill)
  715. pid = 0
  716. IF uo_ware.newbegin(arg_scid,3,arg_msg) = 0 THEN
  717. rslt = 0
  718. GOTO ext
  719. END IF
  720. uo_ware.outdate = DateTime(Today(),Now())
  721. uo_ware.outrep = publ_operator
  722. uo_ware.dscrp = '生产进仓单自动生成领料'
  723. uo_ware.storageid = ll_storageid_bill[i]
  724. uo_ware.relid = ll_wrkgrpid_bill[i] /// //领料组、工作中心ID
  725. uo_ware.relint_1 = arg_billid
  726. uo_ware.part = arg_billcode
  727. SELECT storagename
  728. INTO :ls_storagename
  729. FROM u_storage
  730. WHERE storageid = :ll_storageid_bill[i]
  731. Using commit_transaction;
  732. IF commit_transaction.SQLCode <> 0 THEN
  733. rslt = 0
  734. arg_msg = '查询仓库资料失败'
  735. GOTO ext
  736. END IF
  737. FOR j = 1 To UpperBound(ll_storageid_arr)
  738. IF ll_storageid_arr[j] = ll_storageid_bill[i] And ll_wrkgrpid_arr[j] = ll_wrkgrpid_bill[i] THEN
  739. s_fk = s_fk_null
  740. ll_rqmtrlid = 0
  741. ll_taskid = 0
  742. ll_printid = 0
  743. ll_ifrel = 0
  744. IF ll_rqmtrlid_arr[j] > 0 THEN
  745. SELECT taskID, printid,trueRqqty , DstrQty
  746. INTO :ll_taskid, :ll_printid, :lde_trueRqqty, :lde_DstrQty
  747. FROM u_saleRqMtrl_scll
  748. Where rqmtrlid = :ll_rqmtrlid_arr[j] Using commit_transaction;
  749. IF commit_transaction.SQLCode = 0 THEN
  750. ll_rqmtrlid = ll_rqmtrlid_arr[j]
  751. ll_ifrel = 1
  752. END IF
  753. END IF
  754. SELECT mtrlcode,unit
  755. INTO :ls_mtrlcode,:ls_unit
  756. FROM u_mtrldef
  757. Where mtrlid = :ll_mtrlid_arr[j] Using commit_transaction;
  758. IF commit_transaction.SQLCode <> 0 THEN
  759. rslt = 0
  760. arg_msg = '查询物料资料失败'
  761. GOTO ext
  762. END IF
  763. lde_add_DstrQty = lde_qty_arr[j]
  764. IF ll_ifrel = 1 THEN
  765. IF lde_add_DstrQty > lde_trueRqqty - lde_DstrQty THEN
  766. lde_add_DstrQty = lde_trueRqqty - lde_DstrQty
  767. END IF
  768. END IF
  769. IF lde_add_DstrQty > 0 THEN
  770. IF uf_get_mtrlware( ll_storageid_bill[i],ll_mtrlid_arr[j],lde_add_DstrQty,ls_mtrlcode,ls_storagename,s_fk,arg_msg) = 0 THEN
  771. rslt = 0
  772. GOTO ext
  773. END IF
  774. FOR k = 1 To UpperBound(s_fk.mtrlwareid)
  775. pid++
  776. IF uo_ware.acceptmx(s_fk.mtrlwareid[k],&
  777. s_fk.qty[k], s_fk.addqty[k], s_fk.cost[k],1,&
  778. '',pid,arg_msg,ll_ifrel,ll_taskid,ll_printid,ll_rqmtrlid,&
  779. 0,0,0,&
  780. ls_unit,1,'','') = 0 THEN
  781. rslt = 0
  782. GOTO ext
  783. END IF
  784. NEXT
  785. END IF
  786. END IF
  787. NEXT
  788. IF uo_ware.Save(False,arg_msg) = 0 THEN
  789. rslt = 0
  790. GOTO ext
  791. END IF
  792. IF sys_option_inware_cp_autocreatescll = 1 THEN
  793. ll_outwareid = uo_ware.outwareid
  794. IF uo_ware.getinfo(arg_scid,ll_outwareid,arg_msg) = 0 THEN
  795. rslt = 0
  796. GOTO ext
  797. END IF
  798. IF uo_ware.auditing(False,arg_msg) = 0 THEN
  799. rslt = 0
  800. GOTO ext
  801. END IF
  802. END IF
  803. NEXT
  804. ////// //建立自动反扣领料单
  805. //IF UpperBound(ll_storageid_bill) > 0 THEN
  806. // FOR i = 1 To UpperBound(ll_storageid_bill)
  807. // IF uf_create_scll(scid,inwareid,inwarecode,ll_storageid_bill[i],ll_wrkgrpid_bill[i],ll_storageid_arr,ll_wrkgrpid_arr,ll_mtrlid_arr,lde_qty_arr,arg_msg,ll_rqmtrlid_arr) = 0 THEN
  808. // rslt = 0
  809. // GOTO ext
  810. // END IF
  811. // NEXT
  812. //END IF
  813. //
  814. //FOR i = 1 To it_mxbt
  815. // IF uf_update_inprice (scid, inwareid, inwaremx[i].printid, arg_msg, False) <> 1 THEN
  816. // rslt = 0
  817. // GOTO ext
  818. // END IF
  819. //NEXT
  820. //IF uo_ware.newbegin(arg_scid,3,arg_msg) = 0 THEN
  821. // rslt = 0
  822. // GOTO ext
  823. //END IF
  824. //
  825. //uo_ware.outdate = DateTime(Today(),Now())
  826. //uo_ware.outrep = publ_operator
  827. //uo_ware.dscrp = '生产进仓单自动生成领料'
  828. //uo_ware.storageid = arg_storageid
  829. //uo_ware.relid = arg_wrkgrpid /// //领料组、工作中心ID
  830. //uo_ware.relint_1 = arg_billid
  831. //uo_ware.part = arg_billcode
  832. //
  833. //FOR i = 1 To UpperBound(arg_storageid_arr)
  834. // IF arg_storageid_arr[i] = arg_storageid And arg_wrkgrpid_arr[i] = arg_wrkgrpid THEN
  835. // ll_rqmtrlid = 0
  836. // ll_taskid = 0
  837. // ll_printid = 0
  838. // ll_ifrel = 0
  839. //
  840. // IF arg_rqmtrlid_arr[i] > 0 THEN
  841. // SELECT taskID, printid
  842. // INTO :ll_taskid, :ll_printid
  843. // FROM u_saleRqMtrl_scll
  844. // Where rqmtrlid = :arg_rqmtrlid_arr[i];
  845. // IF sqlca.SQLCode = 0 THEN
  846. // ll_rqmtrlid = arg_rqmtrlid_arr[i]
  847. // ll_ifrel = 1
  848. // END IF
  849. //
  850. // END IF
  851. //
  852. // SELECT mtrlcode,unit
  853. // INTO :arg_mtrlcode,:arg_unit
  854. // FROM u_mtrldef
  855. // Where mtrlid = :arg_mtrlid_arr[i] Using commit_transaction;
  856. // IF commit_transaction.SQLCode <> 0 THEN
  857. // rslt = 0
  858. // arg_msg = '查询物料资料失败'
  859. // GOTO ext
  860. // END IF
  861. //
  862. // SELECT storagename
  863. // INTO :arg_storagename
  864. // FROM u_storage
  865. // Where storageid = :arg_storageid;
  866. // IF commit_transaction.SQLCode <> 0 THEN
  867. // rslt = 0
  868. // arg_msg = '查询仓库资料失败'
  869. // GOTO ext
  870. // END IF
  871. //
  872. // IF uf_get_mtrlware(arg_storageid,arg_mtrlid_arr[i],arg_qty_arr[i],arg_mtrlcode,arg_storagename,s_fk,arg_msg) = 0 THEN
  873. // rslt = 0
  874. // GOTO ext
  875. // END IF
  876. //
  877. // IF UpperBound(s_fk.mtrlwareid) > 0 THEN
  878. // FOR k = 1 To UpperBound(s_fk.mtrlwareid)
  879. // pid++
  880. // IF uo_ware.acceptmx(s_fk.mtrlwareid[k],&
  881. // s_fk.qty[k], s_fk.addqty[k], s_fk.cost[k],1,&
  882. // '',pid,arg_msg,ll_ifrel,ll_taskid,ll_printid,ll_rqmtrlid,0,0,0,&
  883. // arg_unit,1,'','') = 0 THEN
  884. // rslt = 0
  885. // GOTO ext
  886. // END IF
  887. // NEXT
  888. // END IF
  889. //
  890. // END IF
  891. //NEXT
  892. //
  893. //IF uo_ware.Save(False,arg_msg) = 0 THEN
  894. // rslt = 0
  895. // GOTO ext
  896. //END IF
  897. //
  898. //
  899. //
  900. //IF sys_option_inware_cp_autocreatescll = 1 THEN
  901. // ll_outwareid = uo_ware.outwareid
  902. //
  903. // IF uo_ware.getinfo(arg_scid,ll_outwareid,arg_msg) = 0 THEN
  904. // rslt = 0
  905. // GOTO ext
  906. // END IF
  907. //
  908. // IF uo_ware.auditing(False,arg_msg) = 0 THEN
  909. // rslt = 0
  910. // GOTO ext
  911. // END IF
  912. //END IF
  913. ext:
  914. Destroy uo_ware
  915. RETURN rslt
  916. end function
  917. public function integer auditing_chk (ref string arg_msg);Long rslt = 1
  918. Long i
  919. IF sys_option_hide_ware = 0 THEN
  920. IF billtype <> 9 THEN
  921. IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  922. rslt = 0
  923. GOTO ext
  924. END IF
  925. ELSE
  926. IF Not sysautobuild THEN
  927. IF dscrp = '盘点表审核自动生成盘盈单' THEN
  928. arg_msg = '系统自动生成的单据不能手动审核'
  929. rslt = 0
  930. GOTO ext
  931. END IF
  932. END IF
  933. END IF
  934. END IF
  935. //// //建立自动反扣领料单
  936. IF uf_create_scll(scid,inwareid,inwarecode,arg_msg) = 0 THEN
  937. rslt = 0
  938. GOTO ext
  939. END IF
  940. IF uf_update_inware_cost ( arg_msg, False) <> 1 THEN
  941. rslt = 0
  942. GOTO ext
  943. END IF
  944. ext:
  945. RETURN rslt
  946. end function
  947. public function integer uf_update_inware_cost (ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  948. long i
  949. Long ll_inprice_mode
  950. Decimal ld_planprice
  951. Decimal wfjgprice, jgprice,outcost
  952. Decimal ld_outamt
  953. Decimal ld_inamt
  954. Decimal ld_cost_price
  955. Decimal ld_fprice
  956. FOR i = 1 To it_mxbt
  957. SELECT inprice_mode, planprice
  958. INTO :ll_inprice_mode, :ld_planprice
  959. FROM u_mtrldef
  960. Where mtrlid = :inwaremx[i].mtrlid
  961. using commit_transaction;
  962. IF commit_transaction.SQLCode <> 0 THEN
  963. rslt = 0
  964. arg_msg = '查询物料生产进仓取价模式失败,' + commit_transaction.SQLErrText
  965. GOTO ext
  966. END IF
  967. // ll_inprice_mode 进仓成本模式; 0-取计划价; 1-按领用材料最新采购价; 2-按领用材料出仓成本价
  968. //MEI:
  969. //1/ 当取计划价时都跳过
  970. //2/选项为0时,都更新
  971. //3/选项为1时只有不选订单才更新
  972. IF ll_inprice_mode = 0 THEN //取计划价
  973. CONTINUE
  974. END IF
  975. IF sys_option_inwarecp_saleprice = 1 AND inwaremx[i].ifrel = 1 THEN //选项选比率,且有订单,不更新
  976. CONTINUE
  977. END IF
  978. SELECT TOP 1 u_mtrlprice_sum.wfjgprice, u_mtrlprice_sum.jgprice, u_mtrlprice_sum.outcost
  979. INTO :wfjgprice,:jgprice,:outcost
  980. FROM u_mtrldef INNER JOIN
  981. u_mtrlprice_sum ON u_mtrldef.mtrlid = u_mtrlprice_sum.mtrlid INNER JOIN
  982. (SELECT MAX(sumdate) AS sumdate, mtrlid, pfcode, status, woodcode, pcode
  983. FROM u_mtrlprice_sum AS u_mtrlprice_sum_1
  984. GROUP BY mtrlid, pfcode, status, woodcode, pcode) AS v_mtrlid_sumdate ON
  985. u_mtrlprice_sum.status = v_mtrlid_sumdate.status AND
  986. u_mtrlprice_sum.woodcode = v_mtrlid_sumdate.woodcode AND
  987. u_mtrlprice_sum.pcode = v_mtrlid_sumdate.pcode AND
  988. u_mtrlprice_sum.mtrlid = v_mtrlid_sumdate.mtrlid AND
  989. u_mtrlprice_sum.pfcode = v_mtrlid_sumdate.pfcode AND
  990. u_mtrlprice_sum.sumdate = v_mtrlid_sumdate.sumdate
  991. WHERE (u_mtrlprice_sum.mtrlid = :inwaremx[i].mtrlid)
  992. AND (u_mtrlprice_sum.status = :inwaremx[i].status)
  993. AND (u_mtrlprice_sum.woodcode = :inwaremx[i].woodcode)
  994. And (u_mtrlprice_sum.pcode = :inwaremx[i].pcode)
  995. using commit_transaction;
  996. IF commit_transaction.SQLCode <> 0 THEN //统计成本
  997. wfjgprice = 0
  998. jgprice = 0
  999. outcost = 0
  1000. END IF
  1001. IF IsNull(wfjgprice) THEN wfjgprice = 0
  1002. IF IsNull(jgprice) THEN jgprice = 0
  1003. IF IsNull(outcost) THEN outcost = 0
  1004. IF ll_inprice_mode = 1 THEN //按领用材料最新采购价
  1005. SELECT ISNULL(SUM(u_outwaremx.qty * v_maxprice_sptprice.price),0)
  1006. INTO :ld_outamt
  1007. FROM u_outwaremx INNER JOIN
  1008. u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid INNER JOIN
  1009. v_maxprice_sptprice ON u_outwaremx.mtrlid = v_maxprice_sptprice.mtrlid AND
  1010. u_outwaremx.status = v_maxprice_sptprice.status AND
  1011. u_outwaremx.woodcode = v_maxprice_sptprice.woodcode AND
  1012. u_outwaremx.pcode = v_maxprice_sptprice.pcode
  1013. WHERE (u_outware.billtype = 3)
  1014. AND (u_outwaremx.scid = :scid)
  1015. AND (u_outwaremx.relid = :inwaremx[i].relid)
  1016. AND (u_outwaremx.relprintid = :inwaremx[i].relprintid)
  1017. using commit_transaction;
  1018. IF commit_transaction.SQLCode <> 0 THEN
  1019. rslt = 0
  1020. arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + commit_transaction.SQLErrText
  1021. GOTO ext
  1022. END IF
  1023. SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0)
  1024. INTO :ld_inamt
  1025. FROM u_inwaremx INNER JOIN
  1026. u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid
  1027. WHERE (u_inware.billtype = 3)
  1028. AND (u_inwaremx.scid = :scid)
  1029. AND (u_inwaremx.relid = :inwaremx[i].relid)
  1030. AND (u_inwaremx.relprintid = :inwaremx[i].relprintid)
  1031. AND (u_inwaremx.inwareid <> :inwareid OR u_inwaremx.printid <> :inwaremx[i].printid)
  1032. And (u_inware.flag = 1)
  1033. using commit_transaction;
  1034. IF commit_transaction.SQLCode <> 0 THEN
  1035. rslt = 0
  1036. arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + commit_transaction.SQLErrText
  1037. GOTO ext
  1038. END IF
  1039. ld_cost_price = (ld_outamt - ld_inamt) / inwaremx[i].qty
  1040. ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost
  1041. ELSEIF ll_inprice_mode = 2 THEN //按领用材料出仓成本价
  1042. SELECT ISNULL(SUM(u_outwaremx.qty * u_outwaremx.fprice),0)
  1043. INTO :ld_outamt
  1044. FROM u_outwaremx INNER JOIN
  1045. u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid
  1046. WHERE (u_outware.billtype = 3)
  1047. AND (u_outwaremx.scid = :scid)
  1048. AND (u_outwaremx.relid = :inwaremx[i].relid)
  1049. AND (u_outwaremx.relprintid = :inwaremx[i].relprintid)
  1050. using commit_transaction;
  1051. IF commit_transaction.SQLCode <> 0 THEN
  1052. rslt = 0
  1053. arg_msg = '查询生产进仓明细的订单明细的出仓总金额失败,' + commit_transaction.SQLErrText
  1054. GOTO ext
  1055. END IF
  1056. SELECT ISNULL(SUM(u_inwaremx.cost_price * u_inwaremx.qty),0)
  1057. INTO :ld_inamt
  1058. FROM u_inwaremx INNER JOIN
  1059. u_inware ON u_inwaremx.scid = u_inware.scid AND u_inwaremx.inwareid = u_inware.inwareid
  1060. WHERE (u_inware.billtype = 3)
  1061. AND (u_inwaremx.scid = :scid)
  1062. AND (u_inwaremx.relid = :inwaremx[i].relid)
  1063. AND (u_inwaremx.relprintid = :inwaremx[i].relprintid)
  1064. AND (u_inwaremx.inwareid <> :inwareid OR u_inwaremx.printid <> :inwaremx[i].printid)
  1065. And (u_inware.flag = 1)
  1066. using commit_transaction;
  1067. IF commit_transaction.SQLCode <> 0 THEN
  1068. rslt = 0
  1069. arg_msg = '查询生产进仓明细的订单明细的其它明细进仓总金额失败,' + commit_transaction.SQLErrText
  1070. GOTO ext
  1071. END IF
  1072. ld_cost_price = (ld_outamt - ld_inamt) / inwaremx[i].qty
  1073. ld_fprice = ld_cost_price + wfjgprice + jgprice + outcost
  1074. END IF
  1075. inwaremx[i].fprice = ld_fprice
  1076. inwaremx[i].cost = ld_fprice
  1077. inwaremx[i].costamt = round(inwaremx[i].qty * ld_fprice, 2)
  1078. UPDATE u_inwaremx
  1079. SET cost_price = :ld_cost_price,
  1080. fprice = :ld_fprice,
  1081. cost = :ld_fprice,
  1082. costamt = round(qty * :ld_fprice,2)
  1083. WHERE scid = :scid
  1084. AND inwareid = :inwareid
  1085. And printid = :inwaremx[i].printid
  1086. using commit_transaction;
  1087. IF commit_transaction.SQLCode <> 0 THEN
  1088. rslt = 0
  1089. IF ll_inprice_mode = 1 THEN
  1090. arg_msg = '行:'+String(i)+',按领用材料最新采购价更新生产进仓明细单价失败,' + commit_transaction.SQLErrText
  1091. ELSEIF ll_inprice_mode = 2 THEN
  1092. arg_msg = '行:'+String(i)+',按领用材料出仓成本价更新生产进仓明细单价失败,' + commit_transaction.SQLErrText
  1093. ELSE
  1094. arg_msg = '行:'+String(i)+',更新生产进仓明细单价失败,' + commit_transaction.SQLErrText
  1095. END IF
  1096. GOTO ext
  1097. END IF
  1098. NEXT
  1099. ext:
  1100. IF rslt = 0 THEN
  1101. ROLLBACK Using commit_transaction;
  1102. ELSEIF arg_ifcommit THEN
  1103. COMMIT Using commit_transaction;
  1104. END IF
  1105. RETURN rslt
  1106. end function
  1107. public function integer acceptmx (s_inwaremx s_mx, ref string arg_msg);Long rslt = 1,cnt = 0,ls_i
  1108. Decimal ld_planprice,ld_cost,ld_dftsptprice
  1109. Decimal ld_noauditqty,ld_bootqty
  1110. String ls_relcode,ls_unit,ls_saletaskcode
  1111. Int li_iflimitprice
  1112. Long i
  1113. Dec ld_round = 100
  1114. uo_spt_price uo_sptprice
  1115. uo_sptprice = Create uo_spt_price
  1116. IF it_newbegin = False And it_updatebegin = False THEN
  1117. rslt = 0
  1118. arg_msg = "非编辑状态不可以使用,操作取消"
  1119. GOTO ext
  1120. END IF
  1121. //清除空值
  1122. IF IsNull(s_mx.printid) THEN s_mx.printid = 0
  1123. IF IsNull(s_mx.mtrlid) THEN s_mx.mtrlid = 0
  1124. IF IsNull(s_mx.mtrlcode) THEN s_mx.mtrlcode = ''
  1125. IF IsNull(s_mx.plancode) THEN s_mx.plancode = ''
  1126. IF IsNull(s_mx.status) THEN s_mx.status = ''
  1127. IF IsNull(s_mx.uqty) THEN s_mx.uqty = 0
  1128. IF IsNull(s_mx.addqty) THEN s_mx.addqty = 0
  1129. IF IsNull(s_mx.packqty) THEN s_mx.packqty = 0
  1130. IF IsNull(s_mx.uprice) THEN s_mx.uprice = 0
  1131. IF IsNull(s_mx.rebate) THEN s_mx.rebate = 0
  1132. IF IsNull(s_mx.mxdscrp) THEN s_mx.mxdscrp = ''
  1133. IF IsNull(s_mx.mxdscrp2) THEN s_mx.mxdscrp2 = ''
  1134. IF IsNull(s_mx.mxdscrp3) THEN s_mx.mxdscrp3 = ''
  1135. IF IsNull(s_mx.mxdscrp4) THEN s_mx.mxdscrp4 = ''
  1136. IF IsNull(s_mx.jgprice) THEN s_mx.jgprice = 0
  1137. IF IsNull(s_mx.ifrel) THEN s_mx.ifrel = 0
  1138. IF IsNull(s_mx.relid) THEN s_mx.relid = 0
  1139. IF IsNull(s_mx.relprintid) THEN s_mx.relprintid = 0
  1140. IF IsNull(s_mx.mxdscrp) THEN s_mx.woodcode = ''
  1141. IF IsNull(s_mx.pcode) THEN s_mx.pcode = ''
  1142. IF IsNull(s_mx.sptid) THEN s_mx.sptid = 0
  1143. IF IsNull(s_mx.mtrlcuscode) THEN s_mx.mtrlcuscode = ''
  1144. IF IsNull(s_mx.unit) THEN s_mx.unit = ''
  1145. IF IsNull(s_mx.rate) THEN s_mx.rate = 1
  1146. IF s_mx.rate = 0 THEN s_mx.rate = 1
  1147. IF IsNull(s_mx.formula) THEN s_mx.formula = ''
  1148. IF IsNull(s_mx.waredscrp) THEN s_mx.waredscrp = ''
  1149. IF mrate = 0 THEN mrate = 1
  1150. IF IsNull(s_mx.tax) THEN s_mx.tax = 0
  1151. IF IsNull(s_mx.buyqty) THEN s_mx.buyqty = 0
  1152. IF IsNull(s_mx.uprice_notax) THEN s_mx.uprice_notax = 0
  1153. IF s_mx.uprice_notax = 0 THEN
  1154. s_mx.uprice_notax = s_mx.uprice / (1 + s_mx.tax)
  1155. END IF
  1156. s_mx.uqty = Round(s_mx.uqty,5)
  1157. s_mx.addqty = Round(s_mx.addqty,5)
  1158. IF sys_option_outware_if_buyqty = 1 And billtype = 1 THEN //采购 , 采购数与进仓数分离
  1159. ELSE //不分离
  1160. s_mx.buyqty = s_mx.uqty
  1161. END IF
  1162. IF s_mx.mtrlid = 0 Or (s_mx.buyqty = 0 And s_mx.uqty = 0 And s_mx.addqty = 0) THEN
  1163. rslt = 1
  1164. GOTO ext
  1165. END IF
  1166. IF acceptmx_chk(s_mx, arg_msg) = 0 THEN
  1167. rslt = 0
  1168. GOTO ext
  1169. END IF
  1170. //检查物料id
  1171. SELECT unit,planprice,iflimitprice
  1172. INTO :ls_unit,:ld_planprice,:li_iflimitprice
  1173. FROM u_mtrldef
  1174. Where u_mtrldef.mtrlid = :s_mx.mtrlid Using commit_transaction ;
  1175. IF commit_transaction.SQLCode <> 0 THEN
  1176. rslt = 0
  1177. arg_msg = "第" + String(s_mx.printid) + "行,查询物料资料信息失败,编码:"+s_mx.mtrlcode
  1178. GOTO ext
  1179. END IF
  1180. //确实有=1的情况
  1181. //IF ls_unit <> s_mx.unit And s_mx.rate = 1 THEN
  1182. // arg_msg = "第" + String(s_mx.printid) + "行,库存单位与采购单位不同,但转换率为1,请检查!"
  1183. // rslt = 0
  1184. // GOTO ext
  1185. //END IF
  1186. IF ls_unit = s_mx.unit And s_mx.rate <> 1 THEN
  1187. arg_msg = "第" + String(s_mx.printid) + "行,库存单位与采购单位相同,但转换率不为1,请检查!"
  1188. rslt = 0
  1189. GOTO ext
  1190. END IF
  1191. //查询采购限价并检查进仓价
  1192. IF billtype = 1 Or billtype = 4 THEN
  1193. IF li_iflimitprice = 1 THEN
  1194. IF uo_sptprice.uf_check_price_save(thflag,sptid,s_mx.mtrlid,s_mx.mtrlcode,s_mx.unit,s_mx.status,s_mx.woodcode,s_mx.pcode,s_mx.uprice * s_mx.rebate,arg_msg) = 0 THEN
  1195. arg_msg = "第" + String(s_mx.printid) + "行," + arg_msg
  1196. rslt = 0
  1197. GOTO ext
  1198. END IF
  1199. END IF
  1200. END IF
  1201. Int li_if_cus_mtrlware, li_if_plancode, li_inwaretype
  1202. IF sys_option_hide_ware = 0 THEN
  1203. SELECT balctype , if_plancode, inwaretype
  1204. INTO :li_if_cus_mtrlware, :li_if_plancode, :li_inwaretype
  1205. FROM u_storage
  1206. Where storageid = :storageid;
  1207. IF sqlca.SQLCode <> 0 THEN
  1208. arg_msg = "第" + String(s_mx.printid) + "行,查询仓库是否使用客户库存失败"
  1209. rslt = 0
  1210. GOTO ext
  1211. END IF
  1212. END IF
  1213. //关于客户库存处理,sptid
  1214. Long ll_cusid
  1215. Int li_bhflag
  1216. IF dxflag = 0 THEN
  1217. IF li_if_cus_mtrlware = 1 THEN
  1218. IF billtype = 3 THEN
  1219. //特殊情况 20140104
  1220. //生产进仓单,按订单进仓的产品,如果订单的客户为 备货客户, 进仓时不按客户库存;
  1221. IF s_mx.ifrel > 0 THEN
  1222. IF s_mx.relid = 0 THEN
  1223. arg_msg = "第" + String(s_mx.printid) + '行,请先择相应的销售订单'
  1224. rslt = 0
  1225. GOTO ext
  1226. END IF
  1227. SELECT top 1 cusid INTO :ll_cusid
  1228. FROM u_saletaskmx,u_saletask
  1229. WHERE u_saletaskmx.scid = u_saletask.scid
  1230. AND u_saletaskmx.taskid = u_saletask.taskid
  1231. AND u_saletaskmx.scid = :scid
  1232. AND u_saletaskmx.taskid = :s_mx.relid
  1233. AND u_saletaskmx.printid = :s_mx.relprintid
  1234. AND u_saletaskmx.mtrlid = :s_mx.mtrlid
  1235. Using commit_transaction;
  1236. IF commit_transaction.SQLCode <> 0 THEN
  1237. arg_msg = "第" + String(s_mx.printid) + '行,查询销售订单客户资料失败,'+commit_transaction.SQLErrText
  1238. rslt = 0
  1239. GOTO ext
  1240. END IF
  1241. // s_mx.mtrlid 以后有可能是 下级的生产物料!!!!
  1242. IF IsNull(ll_cusid) THEN ll_cusid = 0
  1243. IF ll_cusid > 0 THEN
  1244. SELECT bhflag INTO :li_bhflag FROM u_cust WHERE cusid = :ll_cusid
  1245. Using commit_transaction;
  1246. IF commit_transaction.SQLCode <> 0 THEN
  1247. arg_msg = "第" + String(s_mx.printid) + '行,查询销售订单客户资料失败,'+commit_transaction.SQLErrText
  1248. rslt = 0
  1249. GOTO ext
  1250. END IF
  1251. ELSE
  1252. li_bhflag = 0
  1253. END IF
  1254. IF IsNull(li_bhflag) THEN li_bhflag = 0
  1255. IF li_bhflag = 1 THEN
  1256. s_mx.sptid = 0
  1257. ELSE
  1258. s_mx.sptid = s_mx.sptid
  1259. END IF
  1260. END IF
  1261. ELSE
  1262. s_mx.sptid = s_mx.sptid
  1263. END IF
  1264. ELSE
  1265. s_mx.sptid = 0
  1266. END IF
  1267. ELSE
  1268. IF li_if_cus_mtrlware <> 1 THEN
  1269. arg_msg = "仓库没有使用客户库存,不能建立代销单据"
  1270. rslt = 0
  1271. GOTO ext
  1272. END IF
  1273. s_mx.sptid = sptid
  1274. END IF
  1275. CHOOSE CASE billtype
  1276. CASE 1 //采购
  1277. IF s_mx.ifrel > 0 THEN
  1278. IF s_mx.relid = 0 THEN
  1279. arg_msg = "第" + String(s_mx.printid) + "行,请先择相应的订单!"
  1280. rslt = 0
  1281. GOTO ext
  1282. END IF
  1283. SELECT taskcode ,uqty - consignedqty,
  1284. CASE when u_buytask.billtype = 1 THEN u_buytaskmx.relcode ELSE '' END
  1285. INTO :ls_relcode,:ld_bootqty,:ls_saletaskcode
  1286. FROM u_buytaskmx,u_buytask
  1287. WHERE u_buytaskmx.taskid = u_buytask.taskid
  1288. AND u_buytaskmx.scid = u_buytask.scid
  1289. AND u_buytaskmx.scid = :scid
  1290. AND u_buytaskmx.taskid = :s_mx.relid
  1291. AND u_buytaskmx.printid = :s_mx.relprintid
  1292. Using commit_transaction;
  1293. IF commit_transaction.SQLCode <> 0 THEN
  1294. arg_msg = "第" + String(s_mx.printid) + "行,查询采购订单是否有订购:"+s_mx.mtrlcode+'失败!'+commit_transaction.SQLErrText
  1295. rslt = 0
  1296. GOTO ext
  1297. END IF
  1298. //查相关销售订单已开单数
  1299. ld_noauditqty = 0
  1300. SELECT sum(uqty) INTO :ld_noauditqty
  1301. FROM u_inwaremx
  1302. WHERE scid = :scid
  1303. AND relid = :s_mx.relid
  1304. AND relprintid = :s_mx.relprintid
  1305. And inwareid <> :inwareid;
  1306. IF sqlca.SQLCode <> 0 THEN
  1307. arg_msg = "第" + String(s_mx.printid) + "行,查询"+s_mx.mtrlcode+'相关订单单据已开单数失败!'
  1308. rslt = 0
  1309. GOTO ext
  1310. END IF
  1311. IF IsNull(ld_noauditqty) THEN ld_noauditqty = 0
  1312. ELSE
  1313. s_mx.relid = 0
  1314. s_mx.relprintid = 0
  1315. END IF
  1316. CASE 3 //生产
  1317. IF s_mx.ifrel > 0 THEN
  1318. IF s_mx.relid = 0 THEN
  1319. arg_msg = "第" + String(s_mx.printid) + '行,请先择相应的销售订单'
  1320. rslt = 0
  1321. GOTO ext
  1322. END IF
  1323. SELECT top 1 taskcode INTO :ls_relcode
  1324. FROM u_saletaskmx,u_saletask
  1325. WHERE u_saletaskmx.scid = u_saletask.scid
  1326. AND u_saletaskmx.taskid = u_saletask.taskid
  1327. AND u_saletaskmx.scid = :scid
  1328. AND u_saletaskmx.taskid = :s_mx.relid
  1329. AND u_saletaskmx.printid = :s_mx.relprintid
  1330. AND u_saletaskmx.mtrlid = :s_mx.mtrlid
  1331. Using commit_transaction;
  1332. IF commit_transaction.SQLCode <> 0 THEN
  1333. arg_msg = "第" + String(s_mx.printid) + '行,查询销售订单是否有排产:'+s_mx.mtrlcode+'失败,'+commit_transaction.SQLErrText
  1334. rslt = 0
  1335. GOTO ext
  1336. END IF
  1337. ELSE
  1338. // s_mx.relid = 0
  1339. // s_mx.relprintid = 0
  1340. END IF
  1341. IF s_mx.ifrel = 0 and s_mx.relid > 0 THEN
  1342. Decimal ld_noqty,ld_readyqty
  1343. SELECT u_orderrqmtrl.truerqqty - u_orderrqmtrl.inqty - ISNULL(notmp.noauditqty, 0) AS noqty
  1344. INTO :ld_noqty
  1345. FROM u_OrderRqMtrl
  1346. LEFT JOIN u_OrderRqMtrl_tree ON u_OrderRqMtrl.scid = u_OrderRqMtrl_tree.scid
  1347. AND u_OrderRqMtrl.taskid = u_OrderRqMtrl_tree.taskid
  1348. AND u_OrderRqMtrl.printid = u_OrderRqMtrl_tree.printid
  1349. AND u_OrderRqMtrl.mtrlid = u_OrderRqMtrl_tree.mtrlid
  1350. LEFT JOIN (
  1351. SELECT u_inwaremx.mtrlid
  1352. ,u_inwaremx.scid
  1353. ,u_inwaremx.relid
  1354. ,u_inwaremx.relprintid
  1355. ,SUM(u_inwaremx.qty) AS noauditqty
  1356. FROM u_inware
  1357. INNER JOIN u_inwaremx ON u_inwaremx.scid = u_inware.scid
  1358. AND u_inwaremx.inwareid = u_inware.inwareid
  1359. WHERE (u_inware.billtype = 3)
  1360. AND (u_inware.flag = 0)
  1361. AND (u_inware.scid = :scid)
  1362. AND (u_inware.inwareid <> :inwareid)
  1363. GROUP BY u_inwaremx.mtrlid
  1364. ,u_inwaremx.scid
  1365. ,u_inwaremx.relid
  1366. ,u_inwaremx.relprintid
  1367. ) AS notmp ON u_OrderRqMtrl.scid = notmp.scid
  1368. AND u_OrderRqMtrl.taskid = notmp.relid
  1369. AND u_OrderRqMtrl.printid = notmp.relprintid
  1370. AND u_OrderRqMtrl.mtrlid = notmp.mtrlid
  1371. WHERE u_orderrqmtrl_tree.lp <> 0
  1372. AND (u_OrderRqMtrl_tree.plantype = 4 OR u_OrderRqMtrl_tree.plantype = 0)
  1373. AND u_OrderRqMtrl.scid = :scid
  1374. AND u_OrderRqMtrl.taskid = :s_mx.relid
  1375. AND u_OrderRqMtrl.printid = :s_mx.relprintid
  1376. AND u_OrderRqMtrl.mtrlid = :s_mx.mtrlid Using commit_transaction;
  1377. IF SQLCA.SQLCODE <> 0 THEN
  1378. arg_msg = "第" + String(s_mx.printid) + '行,查询需求明细失败:'+s_mx.mtrlcode+'失败,'+commit_transaction.SQLErrText
  1379. rslt = 0
  1380. GOTO ext
  1381. END IF
  1382. ld_readyqty = s_mx.uqty
  1383. for i = 1 to it_mxbt
  1384. IF inwaremx[i].ifrel = 0 THEN
  1385. IF inwaremx[i].relid = s_mx.relid and inwaremx[i].relprintid = s_mx.relprintid and inwaremx[i].mtrlid = s_mx.mtrlid THEN
  1386. ld_readyqty +=inwaremx[i].uqty
  1387. END IF
  1388. END IF
  1389. next
  1390. IF ld_readyqty > ld_noqty THEN
  1391. arg_msg = "第" + String(s_mx.printid) + '行,本次开单数'+String(ld_readyqty,"#,##0.00##")+'不能大于未开单数'+String(ld_noqty,"#,##0.00##")
  1392. rslt = 0
  1393. GOTO ext
  1394. END IF
  1395. END IF
  1396. ///判断是否超数量
  1397. CASE 4 //外协
  1398. IF s_mx.ifrel > 0 THEN
  1399. IF s_mx.relid = 0 THEN
  1400. arg_msg = "第" + String(s_mx.printid) + '行,请先择相应的外协订单'
  1401. rslt = 0
  1402. GOTO ext
  1403. END IF
  1404. SELECT u_order_wfjg.taskcode,
  1405. CASE when u_order_wfjg.billtype = 1 THEN u_order_wfjgmx.relcode ELSE '' END
  1406. INTO :ls_relcode,:ls_saletaskcode
  1407. FROM u_order_wfjgmx,u_order_wfjg
  1408. WHERE u_order_wfjgmx.scid = u_order_wfjg.scid
  1409. AND u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid
  1410. AND u_order_wfjgmx.wfjgid = :s_mx.relid
  1411. AND u_order_wfjgmx.printid = :s_mx.relprintid
  1412. AND u_order_wfjgmx.mtrlid = :s_mx.mtrlid
  1413. AND u_order_wfjgmx.status = :s_mx.status
  1414. AND u_order_wfjgmx.woodcode = :s_mx.woodcode
  1415. AND u_order_wfjgmx.pcode = :s_mx.pcode
  1416. Using commit_transaction;
  1417. IF commit_transaction.SQLCode <> 0 THEN
  1418. arg_msg = "第" + String(s_mx.printid) + '行,查询外协订单是否有加工:'+s_mx.mtrlcode+'失败,'+commit_transaction.SQLErrText
  1419. rslt = 0
  1420. GOTO ext
  1421. END IF
  1422. END IF
  1423. END CHOOSE
  1424. //处理plancode
  1425. storage_plancode_flag = 0
  1426. IF li_if_plancode = 0 THEN //不使用
  1427. s_mx.plancode = ''
  1428. ELSE
  1429. IF thflag <> 1 THEN //退货不处理
  1430. IF li_inwaretype = 1 THEN //无(不变)
  1431. //inwaremx[it_mxbt].plancode = s_mx.plancode
  1432. ELSEIF li_inwaretype = 2 THEN //价格
  1433. s_mx.plancode = String(Round(s_mx.uprice * s_mx.rebate,5))
  1434. ELSEIF li_inwaretype = 3 THEN //订单
  1435. IF ls_relcode <> '' And billtype = 3 THEN
  1436. s_mx.plancode = ls_relcode
  1437. ELSEIF ls_saletaskcode <> '' And (billtype = 1 Or billtype = 4 ) THEN
  1438. s_mx.plancode = ls_saletaskcode
  1439. ELSE
  1440. s_mx.plancode = s_mx.plancode //(不变)
  1441. END IF
  1442. ELSEIF li_inwaretype = 5 THEN //进仓单号
  1443. storage_plancode_flag = 1 //仓库中是否设置了使用 “进仓单号” 作为批号
  1444. ELSEIF li_inwaretype = 6 THEN //数值
  1445. s_mx.plancode = String(s_mx.uqty,'#,##0.####')
  1446. ELSEIF li_inwaretype = 7 THEN //日期时间顺序
  1447. IF s_mx.plancode = '' THEN
  1448. s_mx.plancode = String(Today(), 'yymmddhhmm') + '-' + String(s_mx.printid)
  1449. END IF
  1450. END IF
  1451. END IF //退货不处理
  1452. END IF
  1453. //处理 sptmtrlname
  1454. String ls_sptmtrlname
  1455. IF billtype = 1 THEN
  1456. IF uo_sptprice.uf_getmtrlname(sptid,s_mx.mtrlid,ls_sptmtrlname,arg_msg) = 0 THEN
  1457. rslt = 0
  1458. GOTO ext
  1459. END IF
  1460. ELSE
  1461. ls_sptmtrlname = ""
  1462. END IF
  1463. //处理价格===============================
  1464. //取默认报价
  1465. IF billtype = 1 THEN
  1466. f_get_defsptprice(sptid,s_mx.mtrlid,s_mx.unit,s_mx.status,s_mx.pcode,s_mx.woodcode,ld_dftsptprice)
  1467. ELSE
  1468. ld_dftsptprice = 0
  1469. END IF
  1470. //不是自动的单价
  1471. IF sysautobuild = False THEN
  1472. IF s_mx.uprice * s_mx.rebate < 0 THEN //检查进仓价
  1473. rslt = 0
  1474. arg_msg = "第" + String(s_mx.printid) + '行,' + String(s_mx.mtrlcode)+" 单价错误"
  1475. GOTO ext
  1476. END IF
  1477. END IF
  1478. IF s_mx.tax < 0 THEN
  1479. rslt = 0
  1480. arg_msg = "税率不能为负数"
  1481. GOTO ext
  1482. END IF
  1483. //检查成本价调整单
  1484. Long ll_mtrlwareid
  1485. IF sys_option_hide_ware = 0 THEN
  1486. SELECT mtrlwareid
  1487. INTO :ll_mtrlwareid
  1488. FROM u_mtrlware
  1489. WHERE ( mtrlid = :s_mx.mtrlid ) AND
  1490. ( plancode = :s_mx.plancode ) AND
  1491. ( storageid = :storageid ) AND
  1492. ( scid = :scid ) AND
  1493. ( status = :s_mx.status ) AND
  1494. ( sptid = :s_mx.sptid) AND
  1495. ( dxflag = :dxflag) AND
  1496. ( woodcode = :s_mx.woodcode) AND
  1497. ( pcode = :s_mx.pcode) Using commit_transaction;
  1498. IF commit_transaction.SQLCode = -1 THEN
  1499. arg_msg = "第" + String(s_mx.printid) + "行,查询库存信息失败!"
  1500. rslt = 0
  1501. GOTO ext
  1502. END IF
  1503. IF IsNull(ll_mtrlwareid) THEN ll_mtrlwareid = 0
  1504. IF ll_mtrlwareid > 0 THEN
  1505. IF Not (billtype = 8 And sptname = '成本价调整单审核自动生成') THEN
  1506. cnt = 0
  1507. SELECT count(*)
  1508. INTO :cnt
  1509. FROM u_updatecost,u_updatecostmx
  1510. WHERE u_updatecost.wareid = u_updatecostmx.wareid AND
  1511. u_updatecost.flag = 0 AND
  1512. u_updatecostmx.mtrlwareid = :ll_mtrlwareid AND
  1513. u_updatecost.scid = :scid Using commit_transaction;
  1514. IF commit_transaction.SQLCode <> 0 THEN
  1515. rslt = 0
  1516. arg_msg = "第" + String(s_mx.printid) + "行,查询成本价调整单操作失败"
  1517. GOTO ext
  1518. END IF
  1519. IF cnt > 0 THEN
  1520. rslt = 0
  1521. arg_msg = "第" + String(s_mx.printid) + "行," + s_mx.mtrlcode + "已开成本价调整单,请先审核"
  1522. GOTO ext
  1523. END IF
  1524. END IF
  1525. //出仓的, 查询成本价
  1526. ELSE
  1527. END IF
  1528. END IF
  1529. //s_mx.price = Round(s_mx.enprice * mrate * s_mx.rebate,10) //进仓实价, 本位币,库存单位
  1530. s_mx.qty = Round(s_mx.uqty * s_mx.rate, sys_option_unit_dec) //库存单位,进仓数量
  1531. //写入内容
  1532. it_mxbt++
  1533. inwaremx[it_mxbt].mtrlwareid = ll_mtrlwareid
  1534. inwaremx[it_mxbt].printid = s_mx.printid
  1535. inwaremx[it_mxbt].mtrlid = s_mx.mtrlid
  1536. inwaremx[it_mxbt].mtrlcode = s_mx.mtrlcode
  1537. inwaremx[it_mxbt].unit = s_mx.unit
  1538. inwaremx[it_mxbt].rate = s_mx.rate
  1539. inwaremx[it_mxbt].noauditqty = ld_noauditqty
  1540. inwaremx[it_mxbt].bootqty = ld_bootqty
  1541. inwaremx[it_mxbt].addqty = s_mx.addqty
  1542. inwaremx[it_mxbt].uqty = s_mx.uqty
  1543. inwaremx[it_mxbt].qty = s_mx.qty
  1544. inwaremx[it_mxbt].buyqty = s_mx.buyqty
  1545. inwaremx[it_mxbt].packqty = s_mx.packqty
  1546. inwaremx[it_mxbt].uprice = s_mx.uprice //进仓价, 原币, 进仓单位
  1547. IF s_mx.buyqty <> 0 THEN
  1548. inwaremx[it_mxbt].fprice = Round((s_mx.uprice * s_mx.buyqty) /(Round(s_mx.buyqty * s_mx.rate,sys_option_unit_dec)) * mrate ,10) //进仓价, 本位币, 库存单位
  1549. ELSE
  1550. inwaremx[it_mxbt].fprice = Round(s_mx.uprice * s_mx.rate * mrate,10)
  1551. END IF
  1552. inwaremx[it_mxbt].price = Round(inwaremx[it_mxbt].fprice * s_mx.rebate,10) //进仓实价, 本位币,库存单位
  1553. inwaremx[it_mxbt].rebate = s_mx.rebate
  1554. inwaremx[it_mxbt].tax = s_mx.tax
  1555. IF billtype = 1 THEN
  1556. ld_round = 10.0 ^ (2 - sys_option_inware_buy_amt_round)
  1557. IF sys_option_inware_buy_amt_round = 5 THEN ld_round = 1000
  1558. END IF
  1559. inwaremx[it_mxbt].uamt = Round(s_mx.buyqty * s_mx.uprice * s_mx.rebate * ld_round, 0) / ld_round //原币,实价含税金额
  1560. inwaremx[it_mxbt].uamt_tax = Round((s_mx.buyqty * s_mx.uprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //原币, 税金
  1561. inwaremx[it_mxbt].bsamt = Round(s_mx.buyqty * s_mx.uprice * s_mx.rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额
  1562. inwaremx[it_mxbt].bsamt_tax = Round((s_mx.buyqty * s_mx.uprice * s_mx.rebate * mrate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //本位币, 税金
  1563. inwaremx[it_mxbt].planprice = ld_planprice
  1564. inwaremx[it_mxbt].jgprice = s_mx.jgprice
  1565. inwaremx[it_mxbt].mxdscrp = s_mx.mxdscrp
  1566. inwaremx[it_mxbt].mxdscrp2 = s_mx.mxdscrp2
  1567. inwaremx[it_mxbt].mxdscrp3 = s_mx.mxdscrp3
  1568. inwaremx[it_mxbt].mxdscrp4 = s_mx.mxdscrp4
  1569. inwaremx[it_mxbt].dxflag = dxflag
  1570. inwaremx[it_mxbt].relid = s_mx.relid
  1571. inwaremx[it_mxbt].relprintid = s_mx.relprintid
  1572. inwaremx[it_mxbt].ifrel = s_mx.ifrel
  1573. inwaremx[it_mxbt].status = s_mx.status
  1574. inwaremx[it_mxbt].woodcode = s_mx.woodcode
  1575. inwaremx[it_mxbt].pcode = s_mx.pcode
  1576. inwaremx[it_mxbt].relcode = ls_relcode
  1577. inwaremx[it_mxbt].mtrlcuscode = s_mx.mtrlcuscode
  1578. inwaremx[it_mxbt].dftsptprice = ld_dftsptprice
  1579. inwaremx[it_mxbt].formula = s_mx.formula
  1580. inwaremx[it_mxbt].waredscrp = s_mx.waredscrp
  1581. inwaremx[it_mxbt].inworkdate = s_mx.inworkdate
  1582. inwaremx[it_mxbt].plancode = s_mx.plancode
  1583. inwaremx[it_mxbt].sptid = s_mx.sptid
  1584. inwaremx[it_mxbt].sptmtrlname = ls_sptmtrlname //供应商别名
  1585. inwaremx[it_mxbt].uprice_notax = s_mx.uprice_notax //不含税单价
  1586. //IF sys_option_buyth_wareamt = 0 THEN
  1587. //
  1588. If (billtype = 1 And thflag = 1 And sys_option_buyth_wareamt = 0 ) &
  1589. Or (s_mx.uqty < 0 And billtype <> 3 And billtype <> 1) THEN //采购退货单 或者 非采购/生产进仓
  1590. SELECT cost
  1591. INTO :ld_cost
  1592. FROM u_mtrlware
  1593. WHERE scid = :scid
  1594. AND mtrlid = :s_mx.mtrlid
  1595. AND storageid = :storageid
  1596. AND status = :s_mx.status
  1597. AND plancode = :s_mx.plancode
  1598. AND woodcode = :s_mx.woodcode
  1599. AND pcode = :s_mx.pcode
  1600. AND dxflag = :dxflag
  1601. And sptid = :s_mx.sptid;
  1602. IF sqlca.SQLCode <> 0 Or IsNull(ld_cost) THEN ld_cost = 0
  1603. inwaremx[it_mxbt].cost = ld_cost
  1604. ELSE
  1605. inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * s_mx.rebate
  1606. END IF
  1607. inwaremx[it_mxbt].costamt = Round(inwaremx[it_mxbt].cost * inwaremx[it_mxbt].qty, 2) //成本金额,库存单位
  1608. ext:
  1609. Destroy uo_sptprice
  1610. IF rslt = 0 THEN
  1611. p_clearmx()
  1612. arg_msg = billname + ',' + arg_msg
  1613. END IF
  1614. Return(rslt)
  1615. end function
  1616. public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i
  1617. DateTime server_dt
  1618. Long ls_newid
  1619. String ls_sccode
  1620. IF IsNull(relid) THEN relid = 0
  1621. IF IsNull(storageid) THEN storageid = 0
  1622. IF IsNull(inrep) THEN inrep = ''
  1623. IF IsNull(dscrp) THEN dscrp = ''
  1624. IF IsNull(part) THEN part = ''
  1625. IF IsNull(sptid) THEN sptid = 0
  1626. IF IsNull(sptname) THEN sptname = ''
  1627. IF IsNull(dxflag) THEN dxflag = 0
  1628. IF IsNull(thflag) THEN thflag = 0
  1629. IF IsNull(relint_1) THEN relint_1 = 0
  1630. IF IsNull(relint_2) THEN relint_2 = 0
  1631. IF IsNull(relint_3) THEN relint_3 = 0
  1632. IF IsNull(relint_4) THEN relint_4 = 0
  1633. IF IsNull(relint_5) THEN relint_5 = 0
  1634. IF IsNull(relstr_1) THEN relstr_1 = ''
  1635. IF IsNull(relstr_2) THEN relstr_2 = ''
  1636. IF IsNull(relstr_3) THEN relstr_3 = ''
  1637. IF IsNull(mrate) THEN mrate = 0
  1638. IF mrate = 0 THEN mrate = 1
  1639. IF it_newbegin = False And it_updatebegin = False THEN
  1640. rslt = 0
  1641. arg_msg = "非编辑状态不可以提交"
  1642. GOTO ext
  1643. END IF
  1644. SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ;
  1645. //取得系统时间,借用操作员表
  1646. IF commit_transaction.SQLCode <> 0 THEN
  1647. rslt = 0
  1648. arg_msg = "查询操作失败,日期 "
  1649. GOTO ext
  1650. END IF
  1651. IF save_chk(arg_msg) = 0 THEN
  1652. rslt = 0
  1653. GOTO ext
  1654. END IF
  1655. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  1656. IF inwareid = 0 THEN //新建
  1657. ls_newid = f_sys_scidentity(scid,"u_inware","inwareid",arg_msg,if_getid_ture,commit_transaction)
  1658. IF ls_newid <= 0 THEN
  1659. rslt = 0
  1660. GOTO ext
  1661. END IF
  1662. //取分部代号
  1663. IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  1664. rslt = 0
  1665. GOTO ext
  1666. END IF
  1667. //取得新单据编号
  1668. CHOOSE CASE billtype
  1669. CASE 1,2
  1670. IF thflag = 0 THEN
  1671. inwarecode = getid(scid,ls_sccode + 'CG',Date(server_dt),if_getid_ture,commit_transaction)
  1672. ELSE
  1673. inwarecode = getid(scid,ls_sccode + 'CT',Date(server_dt),if_getid_ture,commit_transaction)
  1674. END IF
  1675. CASE 3
  1676. inwarecode = getid(scid,ls_sccode + 'CP',Date(server_dt),if_getid_ture,commit_transaction)
  1677. CASE 4
  1678. IF thflag = 0 THEN
  1679. inwarecode = getid(scid,ls_sccode + 'WN',Date(server_dt),if_getid_ture,commit_transaction)
  1680. ELSE
  1681. inwarecode = getid(scid,ls_sccode + 'WH',Date(server_dt),if_getid_ture,commit_transaction)
  1682. END IF
  1683. CASE 8
  1684. inwarecode = getid(scid,ls_sccode + 'JC',Date(server_dt),if_getid_ture,commit_transaction)
  1685. CASE 9
  1686. inwarecode = getid(scid,ls_sccode + 'PY',Date(server_dt),if_getid_ture,commit_transaction)
  1687. CASE 12
  1688. inwarecode = getid(scid,ls_sccode + 'IC',Date(server_dt),if_getid_ture,commit_transaction)
  1689. CASE 15
  1690. inwarecode = getid(scid,ls_sccode + 'DC',Date(server_dt),if_getid_ture,commit_transaction)
  1691. CASE 20
  1692. IF thflag = 0 THEN
  1693. inwarecode = getid(scid,ls_sccode + 'RI',Date(server_dt),if_getid_ture,commit_transaction)
  1694. ELSE
  1695. inwarecode = getid(scid,ls_sccode + 'RT',Date(server_dt),if_getid_ture,commit_transaction)
  1696. END IF
  1697. CASE 22
  1698. inwarecode = getid(scid,ls_sccode + 'TI',Date(server_dt),if_getid_ture,commit_transaction)
  1699. END CHOOSE
  1700. IF inwarecode = "err" THEN
  1701. inwarecode = ''
  1702. rslt = 0
  1703. arg_msg = "无法获取进仓单编号"+"~n"
  1704. GOTO ext
  1705. END IF
  1706. INSERT INTO u_inware (
  1707. scid,
  1708. inwareid,
  1709. inwarecode,
  1710. billtype,
  1711. relid,
  1712. storageid,
  1713. indate,
  1714. inrep,
  1715. part,
  1716. dscrp,
  1717. sptid,
  1718. sptname,
  1719. thflag,
  1720. dxflag,
  1721. otheramt,
  1722. opdate,
  1723. opemp,
  1724. relint_1,
  1725. relint_2,
  1726. relint_3,
  1727. relstr_1,
  1728. relstr_2,
  1729. relstr_3,
  1730. mrate,
  1731. relint_4,
  1732. relint_5)
  1733. VALUES (
  1734. :scid,
  1735. :ls_newid,
  1736. :inwarecode,
  1737. :billtype,
  1738. :relid,
  1739. :storageid,
  1740. :indate,
  1741. :inrep,
  1742. :part,
  1743. :dscrp,
  1744. :sptid,
  1745. :sptname,
  1746. :thflag,
  1747. :dxflag,
  1748. :otheramt,
  1749. :server_dt,
  1750. :publ_operator,
  1751. :relint_1,
  1752. :relint_2,
  1753. :relint_3,
  1754. :relstr_1,
  1755. :relstr_2,
  1756. :relstr_3,
  1757. :mrate,
  1758. :relint_4,
  1759. :relint_5) Using commit_transaction ;
  1760. IF commit_transaction.SQLCode <> 0 THEN
  1761. rslt = 0
  1762. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_inware') > 0 THEN
  1763. arg_msg = '插入单据资料失败,关键字ID重复'
  1764. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_inware') > 0 THEN
  1765. arg_msg = '插入单据资料失败,单据编号重复'
  1766. ELSE
  1767. arg_msg = '插入单据资料失败,'+commit_transaction.SQLErrText
  1768. END IF
  1769. //arg_msg = "插入操作失败"+"~n"+commit_transaction.SQLErrText
  1770. GOTO ext
  1771. END IF
  1772. //读取新inwareid
  1773. inwareid = ls_newid
  1774. ELSE //////////////////////////////////////////////// //更新
  1775. UPDATE u_inware
  1776. SET billtype = :billtype,
  1777. relid = :relid,
  1778. storageid = :storageid,
  1779. indate = :indate,
  1780. inrep = :inrep,
  1781. part = :part,
  1782. dscrp = :dscrp,
  1783. sptid = :sptid,
  1784. sptname = :sptname,
  1785. thflag = :thflag,
  1786. dxflag = :dxflag,
  1787. otheramt = :otheramt,
  1788. moddate = :server_dt,
  1789. modemp = :publ_operator,
  1790. relint_1 = :relint_1,
  1791. relint_2 = :relint_2,
  1792. relint_3 = :relint_3,
  1793. relstr_1 = :relstr_1,
  1794. relstr_2 = :relstr_2,
  1795. relstr_3 = :relstr_3,
  1796. mrate = :mrate,
  1797. relint_4 = :relint_4,
  1798. relint_5 = :relint_5
  1799. WHERE u_inware.inwareid = :inwareid
  1800. AND u_inware.scid = :scid
  1801. Using commit_transaction;
  1802. IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN
  1803. rslt = 0
  1804. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_inware') > 0 THEN
  1805. arg_msg = '更新单据资料失败,关键字ID重复'
  1806. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_inware') > 0 THEN
  1807. arg_msg = '更新单据资料失败,单据编号重复'
  1808. ELSE
  1809. arg_msg = '更新单据资料失败,'+commit_transaction.SQLErrText
  1810. END IF
  1811. arg_msg = "更新单据操作失败"+"~n"+commit_transaction.SQLErrText
  1812. GOTO ext
  1813. END IF
  1814. IF billtype > 1 Or billtype = 1 And flag = 0 THEN
  1815. //删除原有明细
  1816. DELETE FROM u_inwaremx
  1817. WHERE u_inwaremx.inwareid = :inwareid
  1818. And u_inwaremx.scid = :scid Using commit_transaction;
  1819. IF commit_transaction.SQLCode <> 0 THEN
  1820. rslt = 0
  1821. arg_msg = "删除旧有单据明细操作失败"+"~n"
  1822. GOTO ext
  1823. END IF
  1824. ELSE
  1825. END IF
  1826. END IF
  1827. IF billtype > 1 Or billtype = 1 And flag = 0 THEN
  1828. FOR i = 1 To it_mxbt
  1829. IF storage_plancode_flag = 1 THEN //仓库中是否设置了使用 “进仓单号” 作为批号
  1830. inwaremx[i].plancode = inwarecode
  1831. END IF
  1832. INSERT INTO u_inwaremx
  1833. (scid,
  1834. inwareid,
  1835. printid,
  1836. mtrlid,
  1837. plancode,
  1838. status,
  1839. qty,
  1840. addqty,
  1841. packqty,
  1842. fprice,
  1843. rebate,
  1844. price,
  1845. planprice,
  1846. mxdscrp,
  1847. mxdscrp2,
  1848. mxdscrp3,
  1849. mxdscrp4,
  1850. jgprice,
  1851. relid,
  1852. relprintid,
  1853. ifrel,
  1854. woodcode,
  1855. relcode,
  1856. pcode,
  1857. sptid_cusid,
  1858. cost,
  1859. sptmtrlname,
  1860. unit,
  1861. rate,
  1862. uprice,
  1863. uqty,
  1864. bootqty,
  1865. noauditqty,
  1866. mtrlcuscode,
  1867. dftsptprice,
  1868. formula,
  1869. waredscrp,
  1870. inworkdate,
  1871. tax,
  1872. buyqty,
  1873. uamt,
  1874. uamt_tax,
  1875. bsamt,
  1876. bsamt_tax,
  1877. costamt,
  1878. uprice_notax)
  1879. VALUES (
  1880. :scid,
  1881. :inwareid,
  1882. :inwaremx[i].printid,
  1883. :inwaremx[i].mtrlid,
  1884. :inwaremx[i].plancode,
  1885. :inwaremx[i].status,
  1886. :inwaremx[i].qty,
  1887. :inwaremx[i].addqty,
  1888. :inwaremx[i].packqty,
  1889. :inwaremx[i].fprice,
  1890. :inwaremx[i].rebate,
  1891. :inwaremx[i].price,
  1892. :inwaremx[i].planprice,
  1893. :inwaremx[i].mxdscrp,
  1894. :inwaremx[i].mxdscrp2,
  1895. :inwaremx[i].mxdscrp3,
  1896. :inwaremx[i].mxdscrp4,
  1897. :inwaremx[i].jgprice,
  1898. :inwaremx[i].relid,
  1899. :inwaremx[i].relprintid,
  1900. :inwaremx[i].ifrel,
  1901. :inwaremx[i].woodcode,
  1902. :inwaremx[i].relcode,
  1903. :inwaremx[i].pcode,
  1904. :inwaremx[i].sptid,
  1905. :inwaremx[i].cost,
  1906. :inwaremx[i].sptmtrlname,
  1907. :inwaremx[i].unit,
  1908. :inwaremx[i].rate,
  1909. :inwaremx[i].uprice,
  1910. :inwaremx[i].uqty,
  1911. :inwaremx[i].bootqty,
  1912. :inwaremx[i].noauditqty,
  1913. :inwaremx[i].mtrlcuscode,
  1914. :inwaremx[i].dftsptprice,
  1915. :inwaremx[i].formula,
  1916. :inwaremx[i].waredscrp,
  1917. :inwaremx[i].inworkdate,
  1918. :inwaremx[i].tax,
  1919. :inwaremx[i].buyqty,
  1920. :inwaremx[i].uamt,
  1921. :inwaremx[i].uamt_tax,
  1922. :inwaremx[i].bsamt,
  1923. :inwaremx[i].bsamt_tax,
  1924. :inwaremx[i].costamt,
  1925. :inwaremx[i].uprice_notax) Using commit_transaction;
  1926. IF commit_transaction.SQLCode <> 0 THEN
  1927. IF it_newbegin THEN inwareid = 0
  1928. rslt = 0
  1929. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_inwaremx') > 0 THEN
  1930. arg_msg = '插入单据明细内容失败,关键字ID重复'
  1931. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_inwaremx') > 0 THEN
  1932. arg_msg = '插入单据明细内容失败,三个属性字段重复'
  1933. ELSE
  1934. arg_msg = '插入单据明细内容失败,'+commit_transaction.SQLErrText
  1935. END IF
  1936. GOTO ext
  1937. END IF
  1938. NEXT
  1939. ELSE
  1940. FOR i = 1 To it_mxbt
  1941. UPDATE u_inWAREmx
  1942. SET uprice = :inWAREmx[i].uprice,
  1943. mxdscrp = :inwaremx[I].mxdscrp,
  1944. mxdscrp2 = :inwaremx[I].mxdscrp2,
  1945. mxdscrp3 = :inwaremx[I].mxdscrp3,
  1946. mxdscrp4 = :inwaremx[I].mxdscrp4,
  1947. fprice = :inwaremx[I].fprice,
  1948. rebate = :inwaremx[I].rebate,
  1949. price = :inwaremx[I].price,
  1950. tax = :inwaremx[i].tax,
  1951. uamt = :inwaremx[i].uamt,
  1952. uamt_tax = :inwaremx[i].uamt_tax,
  1953. bsamt = :inwaremx[i].bsamt,
  1954. bsamt_tax = :inwaremx[i].bsamt_tax,
  1955. uprice_notax =:inwaremx[i].uprice_notax
  1956. WHERE ( scid = :scid AND
  1957. inWAREid = :inwareid AND
  1958. printid = :inwaremx[i].printid);
  1959. IF commit_transaction.SQLCode <> 0 THEN
  1960. rslt = 0
  1961. arg_msg = "更新明细价格、备注操作失败"+"~n"
  1962. GOTO ext
  1963. END IF
  1964. NEXT
  1965. END IF
  1966. IF save_end(arg_msg) = 0 THEN
  1967. rslt = 0
  1968. GOTO ext
  1969. END IF
  1970. it_newbegin = False
  1971. it_updatebegin = False
  1972. ext:
  1973. IF rslt = 0 THEN
  1974. ROLLBACK Using commit_transaction;
  1975. p_clearmx()
  1976. arg_msg = billname + ',' + arg_msg
  1977. ELSEIF rslt = 1 And arg_ifcommit THEN
  1978. COMMIT Using commit_transaction;
  1979. END IF
  1980. RETURN rslt
  1981. end function
  1982. on uo_inware_cp.create
  1983. call super::create
  1984. end on
  1985. on uo_inware_cp.destroy
  1986. call super::destroy
  1987. end on