uo_inware_buy.sru 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939
  1. $PBExportHeader$uo_inware_buy.sru
  2. forward
  3. global type uo_inware_buy from uo_inware
  4. end type
  5. end forward
  6. global type uo_inware_buy from uo_inware
  7. end type
  8. global uo_inware_buy uo_inware_buy
  9. type variables
  10. end variables
  11. forward prototypes
  12. public function integer secauditing (boolean arg_ifcommit, ref string arg_msg)
  13. public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg)
  14. public function integer uof_create_buytask (ref string arg_msg, boolean arg_ifcommit)
  15. public function integer auditing_end (ref string arg_msg)
  16. public function integer c_auditing_chk (ref string arg_msg)
  17. public function integer c_auditing_end (ref string arg_msg)
  18. public function integer uof_destroy_buytask (ref string arg_msg, boolean arg_ifcommit)
  19. public function integer uof_save_dytitle_inwarebuy (long arg_hang, string arg_name, string arg_dwtitlename, string arg_execltitlename, string arg_filtername, ref string arg_msg)
  20. public function integer acceptmx (s_inwaremx s_mx, ref string arg_msg)
  21. public function integer save (boolean arg_ifcommit, ref string arg_msg)
  22. public function integer priceaudit (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg)
  23. public function integer c_priceaudit (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg)
  24. end prototypes
  25. public function integer secauditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  26. String ls_about,ls_dscrp
  27. Long ll_moneyid
  28. uo_mustpay uo_pay
  29. uo_pay = Create uo_mustpay
  30. Decimal ld_payamt = 0,ld_mstpayamt = 0, ld_otheramt = 0,ld_taxamt,ld_payamt_tax
  31. IF inwareid = 0 THEN
  32. rslt = 0
  33. arg_msg = "没有审核对象"
  34. GOTO ext
  35. END IF
  36. IF flag = 0 THEN
  37. rslt = 0
  38. arg_msg = "单据还没有经过仓库审核"
  39. GOTO ext
  40. END IF
  41. IF secflag = 1 THEN
  42. rslt = 0
  43. arg_msg = "单据已经过财务审核"
  44. GOTO ext
  45. END IF
  46. Int li_btype
  47. Long ll_accountsid
  48. SELECT btype,accountsid INTO :li_btype,:ll_accountsid
  49. FROM cw_banktype
  50. Where banktypeid = :relint_1 Using commit_transaction;
  51. IF commit_transaction.SQLCode <> 0 THEN
  52. rslt = 0
  53. IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN
  54. arg_msg = '查询结算方式类型失败,查询数据返回值多于一个'
  55. ELSE
  56. arg_msg = '查询结算方式类型失败,'+ commit_transaction.SQLErrText
  57. END IF
  58. GOTO ext
  59. END IF
  60. SELECT count(*) INTO :cnt
  61. FROM u_user
  62. Where username = :publ_operator Using commit_transaction ;
  63. IF commit_transaction.SQLCode <> 0 THEN
  64. rslt = 0
  65. arg_msg = "查询操作失败,操作员"
  66. GOTO ext
  67. END IF
  68. IF cnt = 0 THEN
  69. rslt = 0
  70. arg_msg = "操作员姓名未登记或已取消"
  71. GOTO ext
  72. END IF
  73. UPDATE u_inware
  74. SET secauditingrep = :publ_operator,
  75. secauditingdate = getdate(),
  76. secflag = 1
  77. WHERE u_inware.inwareid = :inwareid
  78. And flag = 1 And secflag = 0 And scid = :scid Using commit_transaction;
  79. IF commit_transaction.SQLCode <> 0 THEN
  80. rslt = 0
  81. arg_msg = "因网络或其它原因导致财务审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  82. GOTO ext
  83. ELSEIF commit_transaction.SQLNRows = 0 THEN
  84. rslt = 0
  85. arg_msg = "单据正在财务审核,请稍后查询。"
  86. GOTO ext
  87. END IF
  88. IF sum_uamt <> 0 And dxflag = 0 THEN
  89. Long ll_dft_itemid_pay,ll_dft_itemid_yh, ll_dft_itemid_sj
  90. IF thflag = 1 THEN
  91. IF sys_option_buy_dscrp_sec = 0 THEN
  92. ls_about = inwarecode + "退货款"
  93. ELSE
  94. ls_about = inwarecode + "退货款,备注:" + Trim(dscrp)
  95. END IF
  96. IF f_get_itemid(5,ll_dft_itemid_pay, arg_msg) = 0 THEN // 采购外协退货项目
  97. rslt = 0
  98. GOTO ext
  99. END IF
  100. ELSE
  101. IF sys_option_buy_dscrp_sec = 0 THEN
  102. ls_about = inwarecode + "应付款"
  103. ELSE
  104. ls_about = inwarecode + "应付款,备注:" + Trim(dscrp)
  105. END IF
  106. IF f_get_itemid(2,ll_dft_itemid_pay, arg_msg) = 0 THEN //采购外协付款项目
  107. rslt = 0
  108. GOTO ext
  109. END IF
  110. END IF
  111. //财务支持多币种
  112. IF sys_option_msp_multimoney = 0 THEN
  113. SELECT moneyid Into :ll_moneyid From cw_currency Where native = 1;
  114. IF commit_transaction.SQLCode <> 0 THEN
  115. rslt = 0
  116. arg_msg = '查询本位币失败!'+commit_transaction.SQLErrText
  117. GOTO ext
  118. END IF
  119. sum_bsamt = Round(sum_bsamt , sys_buyamt_round)
  120. ld_mstpayamt = sum_bsamt - sum_bsamt_tax
  121. ld_otheramt = Round(otheramt * mrate, 2)
  122. ld_taxamt = sum_bsamt_tax
  123. ELSE
  124. ll_moneyid = relint_3
  125. sum_uamt = Round(sum_uamt , sys_buyamt_round)
  126. ld_mstpayamt = sum_uamt - sum_uamt_tax
  127. ld_otheramt = otheramt
  128. ld_taxamt = sum_uamt_tax
  129. END IF
  130. IF li_btype = 1 THEN
  131. ld_payamt = ld_mstpayamt - ld_otheramt + ld_taxamt
  132. //ld_payamt_tax = ld_taxamt
  133. ELSE
  134. ld_payamt = 0
  135. //ld_payamt_tax = 0
  136. END IF
  137. // DateTime plandate
  138. // SetNull(plandate)
  139. IF uo_pay.add_payrec (scid,sptid,indate,inrep,ld_mstpayamt,ld_mstpayamt,ld_payamt,ls_about,&
  140. inwarecode,relint_1,1,publ_operator,inwareid,0,arg_msg,False,viewdate,ll_accountsid,ll_dft_itemid_pay,ll_moneyid,part) = 0 THEN
  141. rslt = 0
  142. GOTO ext
  143. END IF
  144. IF ld_taxamt <> 0 THEN
  145. ls_about = inwarecode + "税金" //撤审有用, 应收明细增加有用
  146. IF f_get_itemid(7,ll_dft_itemid_sj, arg_msg) = 0 THEN //采购税金项目
  147. rslt = 0
  148. GOTO ext
  149. END IF
  150. IF uo_pay.add_payrecmx(scid,uo_pay.ref_payid,inwarecode,indate,relint_1,ld_taxamt,ld_payamt_tax,&
  151. publ_operator,ls_about,inrep,3,0,ll_dft_itemid_sj,sptid,arg_msg,False, ll_moneyid,part) = 0 THEN
  152. rslt = 0
  153. GOTO ext
  154. END IF
  155. END IF
  156. IF otheramt <> 0 THEN
  157. ls_about = inwarecode + sys_option_change_otheramt
  158. IF f_get_itemid(8,ll_dft_itemid_yh, arg_msg) = 0 THEN //采购税金项目
  159. rslt = 0
  160. GOTO ext
  161. END IF
  162. IF uo_pay.add_payrecmx(scid,uo_pay.ref_payid,inwarecode,indate,relint_1,0 - ld_otheramt,0,&
  163. publ_operator,ls_about,inrep,3,0,ll_dft_itemid_yh,sptid,arg_msg,False, ll_moneyid,part) = 0 THEN
  164. rslt = 0
  165. GOTO ext
  166. END IF
  167. END IF
  168. UPDATE u_inware
  169. SET relint_2 = :uo_pay.ref_payid
  170. WHERE u_inware.inwareid = :inwareid
  171. AND scid = :scid
  172. AND flag = 1
  173. And secflag = 1 Using commit_transaction;
  174. IF commit_transaction.SQLCode <> 0 THEN
  175. arg_msg = '更新相关应付帐ID失败'
  176. rslt = 0
  177. GOTO ext
  178. END IF
  179. END IF
  180. secflag = 1
  181. ext:
  182. IF rslt = 0 THEN
  183. ROLLBACK Using commit_transaction;
  184. ELSEIF rslt = 1 And arg_ifcommit THEN
  185. COMMIT Using commit_transaction;
  186. END IF
  187. Destroy uo_pay
  188. IF thflag = 0 THEN
  189. arg_msg = '采购进仓单,'+ arg_msg
  190. ELSE
  191. arg_msg = '采购退货单,'+ arg_msg
  192. END IF
  193. RETURN rslt
  194. end function
  195. public function integer c_secauditing (boolean arg_ifcommit, ref string arg_msg);
  196. Long rslt = 1,cnt = 0,i
  197. DateTime null_dt
  198. uo_mustpay uo_pay
  199. uo_pay = Create uo_mustpay
  200. String ls_mtrlname
  201. String ls_tmpcode
  202. SetNull(null_dt)
  203. IF inwareid = 0 THEN
  204. rslt = 0
  205. arg_msg = "没有撤审对象"
  206. GOTO ext
  207. END IF
  208. IF it_newbegin Or it_updatebegin THEN
  209. rslt = 0
  210. arg_msg = "编辑状态下不可以执行撤审"
  211. GOTO ext
  212. END IF
  213. IF cwauditingflag = 1 THEN
  214. rslt = 0
  215. arG_MSG = "该单据已经总账审核,不能进行财务撤审"
  216. GOTO ext
  217. END IF
  218. IF secflag = 0 THEN
  219. rslt = 0
  220. arg_msg = "该单据财务未审,不能进行财务撤审"
  221. GOTO ext
  222. END IF
  223. SELECT count(*) INTO :cnt
  224. FROM u_user
  225. Where username = :publ_operator Using commit_transaction ;
  226. IF commit_transaction.SQLCode <> 0 THEN
  227. rslt = 0
  228. arg_msg = "查询操作失败,操作员"
  229. GOTO ext
  230. END IF
  231. IF cnt = 0 THEN
  232. rslt = 0
  233. arg_msg = "操作员姓名未登记或已取消"
  234. GOTO ext
  235. END IF
  236. UPDATE u_inware
  237. SET secauditingrep = '',
  238. secauditingdate = :null_dt,
  239. secflag = 0,relint_2 = 0
  240. WHERE u_inware.inwareid = :inwareid
  241. And secflag = 1 And scid = :scid Using commit_transaction;
  242. IF commit_transaction.SQLCode <> 0 THEN
  243. rslt = 0
  244. arg_msg = "因网络或其它原因导致财务审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  245. GOTO ext
  246. ELSEIF commit_transaction.SQLNRows = 0 THEN
  247. rslt = 0
  248. arg_msg = "单据正在财务审核,请稍后查询。"
  249. GOTO ext
  250. END IF
  251. IF sum_uamt <> 0 And dxflag = 0 THEN
  252. Long ll_payid, ll_listno
  253. String ls_about
  254. Boolean lb_del
  255. ll_payid = relint_2
  256. //====================================================================
  257. // 修改: 检查是否已开供应商付款结算单
  258. //--------------------------------------------------------------------
  259. // 作者: lwl 日期: 2015年06月04日
  260. SELECT COUNT(0)
  261. INTO :cnt
  262. FROM u_Bmstamtmx INNER JOIN
  263. u_Bmstamt ON u_Bmstamtmx.Baid = u_Bmstamt.Baid
  264. WHERE (u_Bmstamt.billtype = 1)
  265. And (u_Bmstamtmx.takeid = :ll_payid);
  266. IF sqlca.SQLCode <> 0 THEN
  267. rslt = 0
  268. arg_msg = '查询是否已开供应商付款结算单失败,' + sqlca.SQLErrText
  269. GOTO ext
  270. END IF
  271. IF cnt > 0 THEN
  272. SELECT TOP 1 u_Bmstamt.BaCode
  273. INTO :ls_tmpcode
  274. FROM u_Bmstamtmx INNER JOIN
  275. u_Bmstamt ON u_Bmstamtmx.Baid = u_Bmstamt.Baid
  276. WHERE (u_Bmstamt.billtype = 1)
  277. And (u_Bmstamtmx.takeid = :ll_payid);
  278. IF sqlca.SQLCode <> 0 THEN
  279. rslt = 0
  280. arg_msg = '查询已开供应商付款结算单失败,' + sqlca.SQLErrText
  281. GOTO ext
  282. END IF
  283. rslt = 0
  284. arg_msg = '已开供应商付款结算单['+ls_tmpcode+'],不能撤审'
  285. GOTO ext
  286. END IF
  287. //====================================================================
  288. IF otheramt <> 0 THEN
  289. //删优惠
  290. ls_about = inwarecode + sys_option_change_otheramt
  291. SELECT listno
  292. INTO :ll_listno
  293. FROM u_bmstpaymx
  294. WHERE payid = :ll_payid
  295. AND dscrp = :ls_about
  296. And buildtype = 3;
  297. IF sqlca.SQLCode <> 0 THEN
  298. rslt = 0
  299. arg_msg = "查询应付帐"+sys_option_change_otheramt+"金额明细失败,"+sqlca.SQLErrText
  300. GOTO ext
  301. END IF
  302. IF uo_pay.del_payrecmx(3, ll_payid , ll_listno,arg_msg,False) = 0 THEN
  303. rslt = 0
  304. GOTO ext
  305. END IF
  306. END IF
  307. IF sum_uamt_tax <> 0 THEN
  308. //删税金
  309. ls_about = inwarecode + "税金"
  310. //删已收
  311. SELECT listno
  312. INTO :ll_listno
  313. FROM u_bmstpaymx
  314. WHERE payid = :ll_payid
  315. AND dscrp = :ls_about
  316. And buildtype = 3;
  317. IF sqlca.SQLCode <> 0 THEN
  318. rslt = 0
  319. arg_msg = "查询应付帐税金明细失败,"+sqlca.SQLErrText
  320. GOTO ext
  321. END IF
  322. IF uo_pay.del_payrecmx(3, ll_payid , ll_listno,arg_msg,False) = 0 THEN
  323. rslt = 0
  324. GOTO ext
  325. END IF
  326. END IF
  327. IF uo_pay.del_payrec(scid,1,relint_2,sptid,arg_msg,False) = 0 THEN
  328. rslt = 0
  329. GOTO ext
  330. END IF
  331. END IF
  332. secflag = 0
  333. ext:
  334. IF rslt = 0 THEN
  335. ROLLBACK Using commit_transaction;
  336. ELSEIF rslt = 1 And arg_ifcommit THEN
  337. COMMIT Using commit_transaction;
  338. END IF
  339. Destroy uo_pay
  340. IF thflag = 0 THEN
  341. arg_msg = '采购进仓单,'+ arg_msg
  342. ELSE
  343. arg_msg = '采购退货单,'+ arg_msg
  344. END IF
  345. RETURN rslt
  346. end function
  347. public function integer uof_create_buytask (ref string arg_msg, boolean arg_ifcommit);Long rslt = 1, i
  348. uo_buytask uo_task
  349. uo_task = Create uo_buytask
  350. uo_task.commit_transaction = commit_transaction
  351. IF thflag = 1 And relint_4 = 1 THEN
  352. IF uo_task.newbegin(scid,arg_msg) = 0 THEN //
  353. rslt = 0
  354. GOTO ext
  355. END IF
  356. uo_task.Requiredate = indate //要求完成日期
  357. uo_task.Assign_emp = inrep //订单负责人
  358. uo_task.Kind = 0
  359. uo_task.sptid = sptid
  360. uo_task.dscrp = dscrp
  361. uo_task.relcode = inwarecode
  362. uo_task.banktypeid = relint_1
  363. uo_task.billtype = 0
  364. uo_task.moneyid = relint_3
  365. uo_task.mrate = mrate
  366. FOR i = 1 To it_mxbt
  367. IF uo_task.acceptmx(0,&
  368. 0,&
  369. '',&
  370. inwaremx[i].mtrlid,&
  371. 0 - inwaremx[i].uqty,&
  372. 0 - inwaremx[i].addqty,&
  373. inwaremx[i].uprice,&
  374. inwaremx[i].rebate,&
  375. 0,&
  376. inwaremx[i].mxdscrp,&
  377. inwaremx[i].mtrlcode,&
  378. arg_msg,&
  379. i,&
  380. indate,&
  381. storageid,&
  382. inwaremx[i].status,&
  383. inwaremx[i].woodcode,&
  384. inwaremx[i].pcode,&
  385. inwaremx[i].unit,&
  386. inwaremx[i].rate,&
  387. 0,&
  388. 0,&
  389. '',&
  390. '',&
  391. 0,0,&
  392. inwaremx[i].plancode,&
  393. inwaremx[i].mxdscrp2,&
  394. inwaremx[i].mxdscrp3,&
  395. inwaremx[i].mxdscrp4) = 0 THEN //新加plancode
  396. rslt = 0
  397. GOTO ext
  398. END IF
  399. NEXT
  400. IF uo_task.savesubmit(publ_operator,arg_msg,False) = 0 THEN
  401. rslt = 0
  402. GOTO ext
  403. END IF
  404. Long ll_taskid
  405. Long ll_scid
  406. String ls_taskcode
  407. ll_taskid = uo_task.taskid
  408. ls_taskcode = uo_task.TaskCode
  409. ll_scid = uo_task.scid
  410. IF uo_task.firstpermit(ll_scid,ll_taskid,publ_operator,arg_msg,False) = 0 THEN
  411. rslt = 0
  412. GOTO ext
  413. END IF
  414. UPDATE u_inware
  415. SET relint_5 = :ll_taskid,
  416. part = :ls_taskcode
  417. WHERE u_inware.inwareid = :inwareid
  418. And scid = :scid Using commit_transaction;
  419. IF commit_transaction.SQLCode <> 0 THEN
  420. rslt = 0
  421. arg_msg = "因网络或其它原因导致生成采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  422. GOTO ext
  423. ELSEIF commit_transaction.SQLNRows = 0 THEN
  424. rslt = 0
  425. arg_msg = "单据正在生成采购订单,请稍后查询。"
  426. GOTO ext
  427. END IF
  428. END IF
  429. ext:
  430. Destroy uo_task
  431. IF rslt = 0 THEN
  432. ROLLBACK Using commit_transaction;
  433. ELSEIF arg_ifcommit THEN
  434. COMMIT Using commit_transaction;
  435. END IF
  436. RETURN rslt
  437. end function
  438. public function integer auditing_end (ref string arg_msg);//uo_inware_buy 重写
  439. Long rslt = 1
  440. Long i
  441. uo_buytask uo_task
  442. uo_task = Create uo_buytask
  443. uo_task.commit_transaction = commit_transaction
  444. uo_spt_price uo_sptprice
  445. uo_sptprice = Create uo_spt_price
  446. //Long ll_mxsptid = 0
  447. //Decimal ld_cost
  448. FOR i = 1 To it_mxbt
  449. //更新采购订单
  450. IF billtype = 1 And inwaremx[i].relid > 0 THEN
  451. IF uo_task.addmxcmpl(scid,inwaremx[i].relid,inwaremx[i].relprintid,inwaremx[i].buyqty,inwaremx[i].addqty,arg_msg,False) <> 1 THEN
  452. rslt = 0
  453. GOTO ext
  454. END IF
  455. IF uo_task.trycmplbuytask(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN
  456. rslt = 0
  457. GOTO ext
  458. END IF
  459. END IF
  460. //增加采购历史
  461. IF uo_sptprice.uf_update_sptprice(thflag,sptid,inwaremx[i].mtrlid,inwaremx[i].unit,&
  462. inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,inwareid,relint_3,&
  463. inwaremx[i].uprice,inwaremx[i].rebate,inwaremx[i].rate,inwaremx[i].price,&
  464. indate,inwarecode,0,inwaremx[i].mxdscrp,inwaremx[i].printid,0,False,arg_msg) = 0 THEN
  465. rslt = 0
  466. GOTO ext
  467. END IF
  468. NEXT
  469. //自动生成采购订单审核
  470. IF uof_create_buytask(arg_msg, False) = 0 THEN
  471. rslt = 0
  472. GOTO ext
  473. END IF
  474. ext:
  475. Destroy uo_buytask
  476. Destroy uo_sptprice
  477. RETURN rslt
  478. end function
  479. public function integer c_auditing_chk (ref string arg_msg);//uo_inware_buy 重写
  480. Long rslt = 1
  481. IF secflag = 1 THEN
  482. rslt = 0
  483. arg_msg = "单据已经财务审核"
  484. GOTO ext
  485. END IF
  486. IF sys_option_hide_ware = 0 THEN
  487. IF billtype = 8 And relid > 0 THEN
  488. rslt = 0
  489. arg_msg = "该进仓单是系统生成(如成本调整单),不能撤审!"
  490. GOTO ext
  491. END IF
  492. IF billtype <> 9 THEN
  493. IF uof_check_warepdb_audit(storageid,arg_msg) = 0 THEN
  494. rslt = 0
  495. GOTO ext
  496. END IF
  497. ELSE
  498. IF Not sysautobuild THEN
  499. IF dscrp = '盘点表审核自动生成盘盈单' THEN
  500. arg_msg = '系统自动生成的单据不能手动撤审'
  501. rslt = 0
  502. GOTO ext
  503. END IF
  504. END IF
  505. END IF
  506. END IF
  507. ext:
  508. RETURN rslt
  509. end function
  510. public function integer c_auditing_end (ref string arg_msg);Long rslt = 1
  511. Long i
  512. uo_buytask uo_task
  513. uo_task = Create uo_buytask
  514. uo_task.commit_transaction = commit_transaction
  515. uo_spt_price uo_sptprice
  516. uo_sptprice = Create uo_spt_price
  517. Long ll_mxsptid = 0
  518. Long ll_mtrlwareid
  519. FOR i = 1 To it_mxbt
  520. //更新合同完成数量
  521. IF billtype = 1 And inwaremx[i].relid > 0 THEN
  522. IF uo_task.addmxcmpl(scid,inwaremx[i].relid,inwaremx[i].relprintid,0 - inwaremx[i].buyqty,0 - inwaremx[i].addqty,arg_msg,False) <> 1 THEN
  523. rslt = 0
  524. GOTO ext
  525. END IF
  526. IF uo_task.trycmplbuytask(scid,inwaremx[i].relid,arg_msg,False) = 0 THEN
  527. rslt = 0
  528. GOTO ext
  529. END IF
  530. END IF
  531. //清除采购历史
  532. IF uo_sptprice.uf_del_sptprice(thflag,sptid,inwaremx[i].mtrlid,inwaremx[i].unit,inwaremx[i].status,inwaremx[i].woodcode,inwaremx[i].pcode,&
  533. inwareid,inwaremx[i].printid,relint_3,False,arg_msg) = 0 THEN
  534. rslt = 0
  535. GOTO ext
  536. END IF
  537. NEXT
  538. //自动删除采购订单审核
  539. IF uof_destroy_buytask(arg_msg, False) = 0 THEN
  540. rslt = 0
  541. GOTO ext
  542. END IF
  543. //IF thflag = 1 And relint_4 = 1 THEN
  544. // Long ll_status
  545. // SELECT status
  546. // INTO :ll_status
  547. // FROM u_buytask
  548. // Where taskid = :relint_5 And scid = :scid Using commit_transaction;
  549. // IF commit_transaction.SQLCode = -1 THEN
  550. // rslt = 0
  551. // arg_msg = "查询采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  552. // GOTO ext
  553. // ELSEIF commit_transaction.SQLCode = 0 THEN
  554. // IF ll_status = 1 Or ll_status = 0 THEN
  555. // IF ll_status = 1 THEN
  556. // IF uo_task.cancelpermit(scid,relint_5,arg_msg,False) = 0 THEN
  557. // rslt = 0
  558. // GOTO ext
  559. // END IF
  560. // END IF
  561. //
  562. // IF uo_task.Cancel(scid,relint_5,arg_msg,False) = 0 THEN
  563. // rslt = 0
  564. // GOTO ext
  565. // END IF
  566. //
  567. // ELSE
  568. // arg_msg = '无法删除该退货单生成的采购订单(' + part + '),请手动删除'
  569. // rslt = -1
  570. // END IF
  571. //
  572. // END IF
  573. //
  574. // UPDATE u_inware
  575. // SET relint_5 = 0,
  576. // part = ''
  577. // WHERE u_inware.inwareid = :inwareid
  578. // And scid = :scid Using commit_transaction;
  579. //
  580. // IF commit_transaction.SQLCode <> 0 THEN
  581. // rslt = 0
  582. // arg_msg = "删除采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  583. // GOTO ext
  584. // ELSEIF commit_transaction.SQLNRows = 0 THEN
  585. // rslt = 0
  586. // arg_msg = "单据正在删除采购订单,请稍后查询。"
  587. // GOTO ext
  588. // END IF
  589. //END IF
  590. ext:
  591. Destroy uo_task
  592. Destroy uo_sptprice
  593. RETURN rslt
  594. end function
  595. public function integer uof_destroy_buytask (ref string arg_msg, boolean arg_ifcommit);Long rslt = 1, i
  596. uo_buytask uo_task
  597. uo_task = Create uo_buytask
  598. uo_task.commit_transaction = commit_transaction
  599. IF thflag = 1 And relint_4 = 1 THEN
  600. Long ll_status
  601. SELECT status
  602. INTO :ll_status
  603. FROM u_buytask
  604. Where taskid = :relint_5 And scid = :scid Using commit_transaction;
  605. IF commit_transaction.SQLCode = -1 THEN
  606. rslt = 0
  607. arg_msg = "查询采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  608. GOTO ext
  609. ELSEIF commit_transaction.SQLCode = 0 THEN
  610. IF ll_status = 1 Or ll_status = 0 THEN
  611. IF ll_status = 1 THEN
  612. IF uo_task.cancelpermit(scid,relint_5,arg_msg,False) = 0 THEN
  613. rslt = 0
  614. GOTO ext
  615. END IF
  616. END IF
  617. IF uo_task.Cancel(scid,relint_5,arg_msg,False) = 0 THEN
  618. rslt = 0
  619. GOTO ext
  620. END IF
  621. ELSE
  622. arg_msg = '无法删除该退货单生成的采购订单(' + part + '),请手动删除'
  623. rslt = -1
  624. END IF
  625. END IF
  626. UPDATE u_inware
  627. SET relint_5 = 0,
  628. part = ''
  629. WHERE u_inware.inwareid = :inwareid
  630. And scid = :scid Using commit_transaction;
  631. IF commit_transaction.SQLCode <> 0 THEN
  632. rslt = 0
  633. arg_msg = "删除采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  634. GOTO ext
  635. ELSEIF commit_transaction.SQLNRows = 0 THEN
  636. rslt = 0
  637. arg_msg = "单据正在删除采购订单,请稍后查询。"
  638. GOTO ext
  639. END IF
  640. END IF
  641. ext:
  642. Destroy uo_task
  643. IF rslt = 0 THEN
  644. ROLLBACK Using commit_transaction;
  645. ELSEIF arg_ifcommit THEN
  646. COMMIT Using commit_transaction;
  647. END IF
  648. RETURN rslt
  649. end function
  650. public function integer uof_save_dytitle_inwarebuy (long arg_hang, string arg_name, string arg_dwtitlename, string arg_execltitlename, string arg_filtername, ref string arg_msg);Long rslt = 1, i
  651. if isnull(arg_filtername) then arg_filtername=''
  652. UPDATE u_dytitle_inwarebuy
  653. SET hang = :arg_hang,
  654. dwtitlename = :arg_dwtitlename,
  655. execltitlename = :arg_execltitlename,
  656. filtername=:arg_filtername
  657. WHERE name = :arg_name
  658. Using commit_transaction;
  659. IF commit_transaction.SQLCode <> 0 THEN
  660. rslt = 0
  661. arg_msg = "更新明细标题与execl标题对应关系表操作失败"+"~n"+commit_transaction.SQLErrText
  662. GOTO ext
  663. ELSEIF commit_transaction.SQLNRows = 0 THEN
  664. INSERT INTO u_dytitle_inwarebuy(hang,name,dwtitlename,execltitlename,filtername) VALUES (:arg_hang,:arg_name,:arg_dwtitlename,:arg_execltitlename,:arg_filtername)
  665. Using commit_transaction;
  666. END IF
  667. ext:
  668. IF rslt = 0 THEN
  669. ROLLBACK Using commit_transaction;
  670. ELSE
  671. COMMIT Using commit_transaction;
  672. END IF
  673. RETURN rslt
  674. end function
  675. public function integer acceptmx (s_inwaremx s_mx, ref string arg_msg);Long rslt = 1,cnt = 0,ls_i
  676. Decimal ld_planprice,ld_cost,ld_dftsptprice
  677. Decimal ld_noauditqty,ld_bootqty
  678. String ls_relcode,ls_unit,ls_saletaskcode
  679. Int li_iflimitprice
  680. Dec ld_round = 100
  681. uo_spt_price uo_sptprice
  682. uo_sptprice = Create uo_spt_price
  683. If it_newbegin = False And it_updatebegin = False Then
  684. rslt = 0
  685. arg_msg = "非编辑状态不可以使用,操作取消"
  686. Goto ext
  687. End If
  688. //清除空值
  689. If IsNull(s_mx.printid) Then s_mx.printid = 0
  690. If IsNull(s_mx.mtrlid) Then s_mx.mtrlid = 0
  691. If IsNull(s_mx.mtrlcode) Then s_mx.mtrlcode = ''
  692. If IsNull(s_mx.plancode) Then s_mx.plancode = ''
  693. If IsNull(s_mx.status) Then s_mx.status = ''
  694. If IsNull(s_mx.uqty) Then s_mx.uqty = 0
  695. If IsNull(s_mx.addqty) Then s_mx.addqty = 0
  696. If IsNull(s_mx.packqty) Then s_mx.packqty = 0
  697. If IsNull(s_mx.uprice) Then s_mx.uprice = 0
  698. If IsNull(s_mx.rebate) Then s_mx.rebate = 0
  699. If IsNull(s_mx.mxdscrp) Then s_mx.mxdscrp = ''
  700. If IsNull(s_mx.mxdscrp2) Then s_mx.mxdscrp2 = ''
  701. If IsNull(s_mx.mxdscrp3) Then s_mx.mxdscrp3 = ''
  702. If IsNull(s_mx.mxdscrp4) Then s_mx.mxdscrp4 = ''
  703. If IsNull(s_mx.jgprice) Then s_mx.jgprice = 0
  704. If IsNull(s_mx.ifrel) Then s_mx.ifrel = 0
  705. If IsNull(s_mx.relid) Then s_mx.relid = 0
  706. If IsNull(s_mx.relprintid) Then s_mx.relprintid = 0
  707. If IsNull(s_mx.mxdscrp) Then s_mx.woodcode = ''
  708. If IsNull(s_mx.pcode) Then s_mx.pcode = ''
  709. If IsNull(s_mx.sptid) Then s_mx.sptid = 0
  710. If IsNull(s_mx.mtrlcuscode) Then s_mx.mtrlcuscode = ''
  711. If IsNull(s_mx.unit) Then s_mx.unit = ''
  712. If IsNull(s_mx.rate) Then s_mx.rate = 1
  713. If s_mx.rate = 0 Then s_mx.rate = 1
  714. If IsNull(s_mx.formula) Then s_mx.formula = ''
  715. If IsNull(s_mx.waredscrp) Then s_mx.waredscrp = ''
  716. If mrate = 0 Then mrate = 1
  717. If IsNull(s_mx.tax) Then s_mx.tax = 0
  718. If IsNull(s_mx.uamt_tax) Then s_mx.uamt_tax = 0
  719. If IsNull(s_mx.buyqty) Then s_mx.buyqty = 0
  720. If IsNull(s_mx.uprice_notax) Then s_mx.uprice_notax = 0
  721. If s_mx.uprice_notax = 0 Then
  722. s_mx.uprice_notax = s_mx.uprice / (1 + s_mx.tax)
  723. End If
  724. s_mx.uqty = Round(s_mx.uqty,5)
  725. s_mx.addqty = Round(s_mx.addqty,5)
  726. If sys_option_outware_if_buyqty = 1 And billtype = 1 Then //采购 , 采购数与进仓数分离
  727. Else //不分离
  728. s_mx.buyqty = s_mx.uqty
  729. End If
  730. If s_mx.mtrlid = 0 Or (s_mx.buyqty = 0 And s_mx.uqty = 0 And s_mx.addqty = 0) Then
  731. rslt = 1
  732. Goto ext
  733. End If
  734. If acceptmx_chk(s_mx, arg_msg) = 0 Then
  735. rslt = 0
  736. Goto ext
  737. End If
  738. //检查物料id
  739. Select unit,planprice,iflimitprice
  740. Into :ls_unit,:ld_planprice,:li_iflimitprice
  741. From u_mtrldef
  742. Where u_mtrldef.mtrlid = :s_mx.mtrlid Using commit_transaction ;
  743. If commit_transaction.SQLCode <> 0 Then
  744. rslt = 0
  745. arg_msg = "第" + String(s_mx.printid) + "行,查询物料资料信息失败,编码:"+s_mx.mtrlcode
  746. Goto ext
  747. End If
  748. //确实有=1的情况
  749. //IF ls_unit <> s_mx.unit And s_mx.rate = 1 THEN
  750. // arg_msg = "第" + String(s_mx.printid) + "行,库存单位与采购单位不同,但转换率为1,请检查!"
  751. // rslt = 0
  752. // GOTO ext
  753. //END IF
  754. If ls_unit = s_mx.unit And s_mx.rate <> 1 Then
  755. arg_msg = "第" + String(s_mx.printid) + "行,库存单位与采购单位相同,但转换率不为1,请检查!"
  756. rslt = 0
  757. Goto ext
  758. End If
  759. //查询采购限价并检查进仓价
  760. If billtype = 1 Or billtype = 4 Then
  761. If li_iflimitprice = 1 Then
  762. 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
  763. arg_msg = "第" + String(s_mx.printid) + "行," + arg_msg
  764. rslt = 0
  765. Goto ext
  766. End If
  767. End If
  768. End If
  769. Int li_if_cus_mtrlware, li_if_plancode, li_inwaretype
  770. If sys_option_hide_ware = 0 Then
  771. Select balctype , if_plancode, inwaretype
  772. Into :li_if_cus_mtrlware, :li_if_plancode, :li_inwaretype
  773. From u_storage
  774. Where storageid = :storageid;
  775. If sqlca.SQLCode <> 0 Then
  776. arg_msg = "第" + String(s_mx.printid) + "行,查询仓库是否使用客户库存失败"
  777. rslt = 0
  778. Goto ext
  779. End If
  780. End If
  781. //关于客户库存处理,sptid
  782. Long ll_cusid
  783. Int li_bhflag
  784. If dxflag = 0 Then
  785. If li_if_cus_mtrlware = 1 Then
  786. If billtype = 3 Then
  787. //特殊情况 20140104
  788. //生产进仓单,按订单进仓的产品,如果订单的客户为 备货客户, 进仓时不按客户库存;
  789. If s_mx.ifrel > 0 Then
  790. If s_mx.relid = 0 Then
  791. arg_msg = "第" + String(s_mx.printid) + '行,请先择相应的销售订单'
  792. rslt = 0
  793. Goto ext
  794. End If
  795. Select top 1 cusid Into :ll_cusid
  796. From u_saletaskmx,u_saletask
  797. Where u_saletaskmx.scid = u_saletask.scid
  798. And u_saletaskmx.taskid = u_saletask.taskid
  799. And u_saletaskmx.scid = :scid
  800. And u_saletaskmx.taskid = :s_mx.relid
  801. And u_saletaskmx.printid = :s_mx.relprintid
  802. And u_saletaskmx.mtrlid = :s_mx.mtrlid
  803. Using commit_transaction;
  804. If commit_transaction.SQLCode <> 0 Then
  805. arg_msg = "第" + String(s_mx.printid) + '行,查询销售订单客户资料失败,'+commit_transaction.SQLErrText
  806. rslt = 0
  807. Goto ext
  808. End If
  809. // s_mx.mtrlid 以后有可能是 下级的生产物料!!!!
  810. If IsNull(ll_cusid) Then ll_cusid = 0
  811. If ll_cusid > 0 Then
  812. Select bhflag Into :li_bhflag From u_cust Where cusid = :ll_cusid
  813. Using commit_transaction;
  814. If commit_transaction.SQLCode <> 0 Then
  815. arg_msg = "第" + String(s_mx.printid) + '行,查询销售订单客户资料失败,'+commit_transaction.SQLErrText
  816. rslt = 0
  817. Goto ext
  818. End If
  819. Else
  820. li_bhflag = 0
  821. End If
  822. If IsNull(li_bhflag) Then li_bhflag = 0
  823. If li_bhflag = 1 Then
  824. s_mx.sptid = 0
  825. Else
  826. s_mx.sptid = s_mx.sptid
  827. End If
  828. End If
  829. Else
  830. s_mx.sptid = s_mx.sptid
  831. End If
  832. Else
  833. s_mx.sptid = 0
  834. End If
  835. Else
  836. If li_if_cus_mtrlware <> 1 Then
  837. arg_msg = "仓库没有使用客户库存,不能建立代销单据"
  838. rslt = 0
  839. Goto ext
  840. End If
  841. s_mx.sptid = sptid
  842. End If
  843. Choose Case billtype
  844. Case 1 //采购
  845. If s_mx.ifrel > 0 Then
  846. If s_mx.relid = 0 Then
  847. arg_msg = "第" + String(s_mx.printid) + "行,请先择相应的订单!"
  848. rslt = 0
  849. Goto ext
  850. End If
  851. Select taskcode ,uqty - consignedqty,
  852. CASE when u_buytask.billtype = 1 THEN u_buytaskmx.relcode ELSE '' End
  853. Into :ls_relcode,:ld_bootqty,:ls_saletaskcode
  854. From u_buytaskmx,u_buytask
  855. Where u_buytaskmx.taskid = u_buytask.taskid
  856. And u_buytaskmx.scid = u_buytask.scid
  857. And u_buytaskmx.scid = :scid
  858. And u_buytaskmx.taskid = :s_mx.relid
  859. And u_buytaskmx.printid = :s_mx.relprintid
  860. Using commit_transaction;
  861. If commit_transaction.SQLCode <> 0 Then
  862. arg_msg = "第" + String(s_mx.printid) + "行,查询采购订单是否有订购:"+s_mx.mtrlcode+'失败!'+commit_transaction.SQLErrText
  863. rslt = 0
  864. Goto ext
  865. End If
  866. //查相关销售订单已开单数
  867. ld_noauditqty = 0
  868. Select sum(uqty) Into :ld_noauditqty
  869. From u_inwaremx
  870. Where scid = :scid
  871. And relid = :s_mx.relid
  872. And relprintid = :s_mx.relprintid
  873. And inwareid <> :inwareid;
  874. If sqlca.SQLCode <> 0 Then
  875. arg_msg = "第" + String(s_mx.printid) + "行,查询"+s_mx.mtrlcode+'相关订单单据已开单数失败!'
  876. rslt = 0
  877. Goto ext
  878. End If
  879. If IsNull(ld_noauditqty) Then ld_noauditqty = 0
  880. Else
  881. s_mx.relid = 0
  882. s_mx.relprintid = 0
  883. End If
  884. Case 3 //生产
  885. If s_mx.ifrel > 0 Then
  886. If s_mx.relid = 0 Then
  887. arg_msg = "第" + String(s_mx.printid) + '行,请先择相应的销售订单'
  888. rslt = 0
  889. Goto ext
  890. End If
  891. Select top 1 taskcode Into :ls_relcode
  892. From u_saletaskmx,u_saletask
  893. Where u_saletaskmx.scid = u_saletask.scid
  894. And u_saletaskmx.taskid = u_saletask.taskid
  895. And u_saletaskmx.scid = :scid
  896. And u_saletaskmx.taskid = :s_mx.relid
  897. And u_saletaskmx.printid = :s_mx.relprintid
  898. And u_saletaskmx.mtrlid = :s_mx.mtrlid
  899. Using commit_transaction;
  900. If commit_transaction.SQLCode <> 0 Then
  901. arg_msg = "第" + String(s_mx.printid) + '行,查询销售订单是否有排产:'+s_mx.mtrlcode+'失败,'+commit_transaction.SQLErrText
  902. rslt = 0
  903. Goto ext
  904. End If
  905. Else
  906. s_mx.relid = 0
  907. s_mx.relprintid = 0
  908. End If
  909. Case 4 //外协
  910. If s_mx.ifrel > 0 Then
  911. If s_mx.relid = 0 Then
  912. arg_msg = "第" + String(s_mx.printid) + '行,请先择相应的外协订单'
  913. rslt = 0
  914. Goto ext
  915. End If
  916. Select u_order_wfjg.taskcode,
  917. CASE when u_order_wfjg.billtype = 1 THEN u_order_wfjgmx.relcode ELSE '' End
  918. Into :ls_relcode,:ls_saletaskcode
  919. From u_order_wfjgmx,u_order_wfjg
  920. Where u_order_wfjgmx.scid = u_order_wfjg.scid
  921. And u_order_wfjgmx.wfjgid = u_order_wfjg.wfjgid
  922. And u_order_wfjgmx.wfjgid = :s_mx.relid
  923. And u_order_wfjgmx.printid = :s_mx.relprintid
  924. And u_order_wfjgmx.mtrlid = :s_mx.mtrlid
  925. And u_order_wfjgmx.status = :s_mx.status
  926. And u_order_wfjgmx.woodcode = :s_mx.woodcode
  927. And u_order_wfjgmx.pcode = :s_mx.pcode
  928. Using commit_transaction;
  929. If commit_transaction.SQLCode <> 0 Then
  930. arg_msg = "第" + String(s_mx.printid) + '行,查询外协订单是否有加工:'+s_mx.mtrlcode+'失败,'+commit_transaction.SQLErrText
  931. rslt = 0
  932. Goto ext
  933. End If
  934. End If
  935. End Choose
  936. //处理plancode
  937. storage_plancode_flag = 0
  938. If li_if_plancode = 0 Then //不使用
  939. s_mx.plancode = ''
  940. Else
  941. If thflag <> 1 Then //退货不处理
  942. If li_inwaretype = 1 Then //无(不变)
  943. //inwaremx[it_mxbt].plancode = s_mx.plancode
  944. ElseIf li_inwaretype = 2 Then //价格
  945. s_mx.plancode = String(Round(s_mx.uprice * s_mx.rebate,5))
  946. ElseIf li_inwaretype = 3 Then //订单
  947. If ls_relcode <> '' And billtype = 3 Then
  948. s_mx.plancode = ls_relcode
  949. ElseIf ls_saletaskcode <> '' And (billtype = 1 Or billtype = 4 ) Then
  950. s_mx.plancode = ls_saletaskcode
  951. Else
  952. s_mx.plancode = s_mx.plancode //(不变)
  953. End If
  954. ElseIf li_inwaretype = 5 Then //进仓单号
  955. storage_plancode_flag = 1 //仓库中是否设置了使用 “进仓单号” 作为批号
  956. ElseIf li_inwaretype = 6 Then //数值
  957. s_mx.plancode = String(s_mx.uqty,'#,##0.####')
  958. ElseIf li_inwaretype = 7 Then //日期时间顺序
  959. If s_mx.plancode = '' Then
  960. s_mx.plancode = String(Today(), 'yymmddhhmm') + '-' + String(s_mx.printid)
  961. End If
  962. End If
  963. End If //退货不处理
  964. End If
  965. //处理 sptmtrlname
  966. String ls_sptmtrlname
  967. If billtype = 1 Then
  968. If uo_sptprice.uf_getmtrlname(sptid,s_mx.mtrlid,ls_sptmtrlname,arg_msg) = 0 Then
  969. rslt = 0
  970. Goto ext
  971. End If
  972. Else
  973. ls_sptmtrlname = ""
  974. End If
  975. //处理价格===============================
  976. //取默认报价
  977. If billtype = 1 Then
  978. f_get_defsptprice(sptid,s_mx.mtrlid,s_mx.unit,s_mx.status,s_mx.pcode,s_mx.woodcode,ld_dftsptprice)
  979. Else
  980. ld_dftsptprice = 0
  981. End If
  982. //不是自动的单价
  983. If sysautobuild = False Then
  984. If s_mx.uprice * s_mx.rebate < 0 Then //检查进仓价
  985. rslt = 0
  986. arg_msg = "第" + String(s_mx.printid) + '行,' + String(s_mx.mtrlcode)+" 单价错误"
  987. Goto ext
  988. End If
  989. End If
  990. If s_mx.tax < 0 Then
  991. rslt = 0
  992. arg_msg = "税率不能为负数"
  993. Goto ext
  994. End If
  995. //检查成本价调整单
  996. Long ll_mtrlwareid
  997. If sys_option_hide_ware = 0 Then
  998. Select mtrlwareid
  999. Into :ll_mtrlwareid
  1000. From u_mtrlware
  1001. Where ( mtrlid = :s_mx.mtrlid ) And
  1002. ( plancode = :s_mx.plancode ) And
  1003. ( storageid = :storageid ) And
  1004. ( scid = :scid ) And
  1005. ( status = :s_mx.status ) And
  1006. ( sptid = :s_mx.sptid) And
  1007. ( dxflag = :dxflag) And
  1008. ( woodcode = :s_mx.woodcode) And
  1009. ( pcode = :s_mx.pcode) Using commit_transaction;
  1010. If commit_transaction.SQLCode = -1 Then
  1011. arg_msg = "第" + String(s_mx.printid) + "行,查询库存信息失败!"
  1012. rslt = 0
  1013. Goto ext
  1014. End If
  1015. If IsNull(ll_mtrlwareid) Then ll_mtrlwareid = 0
  1016. If ll_mtrlwareid > 0 Then
  1017. If Not (billtype = 8 And sptname = '成本价调整单审核自动生成') Then
  1018. cnt = 0
  1019. Select count(*)
  1020. Into :cnt
  1021. From u_updatecost,u_updatecostmx
  1022. Where u_updatecost.wareid = u_updatecostmx.wareid And
  1023. u_updatecost.flag = 0 And
  1024. u_updatecostmx.mtrlwareid = :ll_mtrlwareid And
  1025. u_updatecost.scid = :scid Using commit_transaction;
  1026. If commit_transaction.SQLCode <> 0 Then
  1027. rslt = 0
  1028. arg_msg = "第" + String(s_mx.printid) + "行,查询成本价调整单操作失败"
  1029. Goto ext
  1030. End If
  1031. If cnt > 0 Then
  1032. rslt = 0
  1033. arg_msg = "第" + String(s_mx.printid) + "行," + s_mx.mtrlcode + "已开成本价调整单,请先审核"
  1034. Goto ext
  1035. End If
  1036. End If
  1037. //出仓的, 查询成本价
  1038. Else
  1039. End If
  1040. End If
  1041. //s_mx.price = Round(s_mx.enprice * mrate * s_mx.rebate,10) //进仓实价, 本位币,库存单位
  1042. s_mx.qty = Round(s_mx.uqty * s_mx.rate, sys_option_unit_dec) //库存单位,进仓数量
  1043. //写入内容
  1044. it_mxbt++
  1045. inwaremx[it_mxbt].mtrlwareid = ll_mtrlwareid
  1046. inwaremx[it_mxbt].printid = s_mx.printid
  1047. inwaremx[it_mxbt].mtrlid = s_mx.mtrlid
  1048. inwaremx[it_mxbt].mtrlcode = s_mx.mtrlcode
  1049. inwaremx[it_mxbt].unit = s_mx.unit
  1050. inwaremx[it_mxbt].rate = s_mx.rate
  1051. inwaremx[it_mxbt].noauditqty = ld_noauditqty
  1052. inwaremx[it_mxbt].bootqty = ld_bootqty
  1053. inwaremx[it_mxbt].addqty = s_mx.addqty
  1054. inwaremx[it_mxbt].uqty = s_mx.uqty
  1055. inwaremx[it_mxbt].qty = s_mx.qty
  1056. inwaremx[it_mxbt].buyqty = s_mx.buyqty
  1057. inwaremx[it_mxbt].packqty = s_mx.packqty
  1058. inwaremx[it_mxbt].uprice = s_mx.uprice //进仓价, 原币, 进仓单位
  1059. If s_mx.buyqty <> 0 Then
  1060. inwaremx[it_mxbt].fprice = Round((s_mx.uprice * s_mx.buyqty) /(Round(s_mx.buyqty * s_mx.rate,sys_option_unit_dec)) * mrate ,10) //进仓价, 本位币, 库存单位
  1061. Else
  1062. inwaremx[it_mxbt].fprice = Round(s_mx.uprice * s_mx.rate * mrate,10)
  1063. End If
  1064. inwaremx[it_mxbt].fprice_notax = inwaremx[it_mxbt].fprice / (1 + s_mx.tax) //不含税价
  1065. inwaremx[it_mxbt].price = Round(inwaremx[it_mxbt].fprice * s_mx.rebate,10) //进仓实价, 本位币,库存单位
  1066. inwaremx[it_mxbt].rebate = s_mx.rebate
  1067. inwaremx[it_mxbt].tax = s_mx.tax
  1068. If billtype = 1 Then
  1069. ld_round = 10.0 ^ (2 - sys_option_inware_buy_amt_round)
  1070. If sys_option_inware_buy_amt_round = 5 Then ld_round = 1000
  1071. End If
  1072. inwaremx[it_mxbt].uamt = Round(s_mx.buyqty * s_mx.uprice * s_mx.rebate * ld_round, 0) / ld_round //原币,实价含税金额
  1073. If s_mx.uamt_tax = 0 Then
  1074. 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 //原币, 税金
  1075. Else
  1076. inwaremx[it_mxbt].uamt_tax = s_mx.uamt_tax
  1077. End If
  1078. inwaremx[it_mxbt].bsamt = Round(s_mx.buyqty * s_mx.uprice * s_mx.rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额
  1079. 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 //本位币, 税金
  1080. inwaremx[it_mxbt].planprice = ld_planprice
  1081. inwaremx[it_mxbt].jgprice = s_mx.jgprice
  1082. inwaremx[it_mxbt].mxdscrp = s_mx.mxdscrp
  1083. inwaremx[it_mxbt].mxdscrp2 = s_mx.mxdscrp2
  1084. inwaremx[it_mxbt].mxdscrp3 = s_mx.mxdscrp3
  1085. inwaremx[it_mxbt].mxdscrp4 = s_mx.mxdscrp4
  1086. inwaremx[it_mxbt].dxflag = dxflag
  1087. inwaremx[it_mxbt].relid = s_mx.relid
  1088. inwaremx[it_mxbt].relprintid = s_mx.relprintid
  1089. inwaremx[it_mxbt].ifrel = s_mx.ifrel
  1090. inwaremx[it_mxbt].status = s_mx.status
  1091. inwaremx[it_mxbt].woodcode = s_mx.woodcode
  1092. inwaremx[it_mxbt].pcode = s_mx.pcode
  1093. inwaremx[it_mxbt].relcode = ls_relcode
  1094. inwaremx[it_mxbt].mtrlcuscode = s_mx.mtrlcuscode
  1095. inwaremx[it_mxbt].dftsptprice = ld_dftsptprice
  1096. inwaremx[it_mxbt].formula = s_mx.formula
  1097. inwaremx[it_mxbt].waredscrp = s_mx.waredscrp
  1098. inwaremx[it_mxbt].inworkdate = s_mx.inworkdate
  1099. inwaremx[it_mxbt].plancode = s_mx.plancode
  1100. inwaremx[it_mxbt].sptid = s_mx.sptid
  1101. inwaremx[it_mxbt].sptmtrlname = ls_sptmtrlname //供应商别名
  1102. inwaremx[it_mxbt].uprice_notax = s_mx.uprice_notax //不含税单价
  1103. //IF sys_option_buyth_wareamt = 0 THEN
  1104. //
  1105. Decimal ld_cost_notax
  1106. If (billtype = 1 And thflag = 1 And sys_option_buyth_wareamt = 0 ) &
  1107. Or (s_mx.uqty < 0 And billtype <> 3 And billtype <> 1) Then //采购退货单 或者 非采购/生产进仓
  1108. Select cost,cost_notax
  1109. Into :ld_cost,:ld_cost_notax
  1110. From u_mtrlware
  1111. Where scid = :scid
  1112. And mtrlid = :s_mx.mtrlid
  1113. And storageid = :storageid
  1114. And status = :s_mx.status
  1115. And plancode = :s_mx.plancode
  1116. And woodcode = :s_mx.woodcode
  1117. And pcode = :s_mx.pcode
  1118. And dxflag = :dxflag
  1119. And sptid = :s_mx.sptid;
  1120. If sqlca.SQLCode <> 0 Or IsNull(ld_cost) Then ld_cost = 0
  1121. If sqlca.SQLCode <> 0 Or IsNull(ld_cost_notax) Then ld_cost_notax = 0
  1122. inwaremx[it_mxbt].cost = ld_cost
  1123. inwaremx[it_mxbt].cost_notax = ld_cost_notax
  1124. Else
  1125. inwaremx[it_mxbt].cost = inwaremx[it_mxbt].fprice * s_mx.rebate
  1126. inwaremx[it_mxbt].cost_notax = inwaremx[it_mxbt].fprice_notax * s_mx.rebate
  1127. End If
  1128. inwaremx[it_mxbt].costamt = Round(inwaremx[it_mxbt].cost * inwaremx[it_mxbt].qty, 2) //成本金额,库存单位
  1129. ext:
  1130. Destroy uo_sptprice
  1131. If rslt = 0 Then
  1132. p_clearmx()
  1133. arg_msg = billname + ',' + arg_msg
  1134. End If
  1135. Return(rslt)
  1136. end function
  1137. public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i
  1138. DateTime server_dt
  1139. Long ls_newid
  1140. String ls_sccode
  1141. IF IsNull(relid) THEN relid = 0
  1142. IF IsNull(storageid) THEN storageid = 0
  1143. IF IsNull(inrep) THEN inrep = ''
  1144. IF IsNull(dscrp) THEN dscrp = ''
  1145. IF IsNull(part) THEN part = ''
  1146. IF IsNull(sptid) THEN sptid = 0
  1147. IF IsNull(sptname) THEN sptname = ''
  1148. IF IsNull(dxflag) THEN dxflag = 0
  1149. IF IsNull(thflag) THEN thflag = 0
  1150. IF IsNull(relint_1) THEN relint_1 = 0
  1151. IF IsNull(relint_2) THEN relint_2 = 0
  1152. IF IsNull(relint_3) THEN relint_3 = 0
  1153. IF IsNull(relint_4) THEN relint_4 = 0
  1154. IF IsNull(relint_5) THEN relint_5 = 0
  1155. IF IsNull(relstr_1) THEN relstr_1 = ''
  1156. IF IsNull(relstr_2) THEN relstr_2 = ''
  1157. IF IsNull(relstr_3) THEN relstr_3 = ''
  1158. IF IsNull(mrate) THEN mrate = 0
  1159. IF mrate = 0 THEN mrate = 1
  1160. IF it_newbegin = False And it_updatebegin = False THEN
  1161. rslt = 0
  1162. arg_msg = "非编辑状态不可以提交"
  1163. GOTO ext
  1164. END IF
  1165. SELECT Top 1 getdate() Into :server_dt From u_user Using commit_transaction ;
  1166. //取得系统时间,借用操作员表
  1167. IF commit_transaction.SQLCode <> 0 THEN
  1168. rslt = 0
  1169. arg_msg = "查询操作失败,日期 "
  1170. GOTO ext
  1171. END IF
  1172. IF save_chk(arg_msg) = 0 THEN
  1173. rslt = 0
  1174. GOTO ext
  1175. END IF
  1176. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  1177. IF inwareid = 0 THEN //新建
  1178. ls_newid = f_sys_scidentity(scid,"u_inware","inwareid",arg_msg,if_getid_ture,commit_transaction)
  1179. IF ls_newid <= 0 THEN
  1180. rslt = 0
  1181. GOTO ext
  1182. END IF
  1183. //取分部代号
  1184. IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  1185. rslt = 0
  1186. GOTO ext
  1187. END IF
  1188. //取得新单据编号
  1189. CHOOSE CASE billtype
  1190. CASE 1,2
  1191. IF thflag = 0 THEN
  1192. inwarecode = getid(scid,ls_sccode + 'CG',Date(server_dt),if_getid_ture,commit_transaction)
  1193. ELSE
  1194. inwarecode = getid(scid,ls_sccode + 'CT',Date(server_dt),if_getid_ture,commit_transaction)
  1195. END IF
  1196. CASE 3
  1197. inwarecode = getid(scid,ls_sccode + 'CP',Date(server_dt),if_getid_ture,commit_transaction)
  1198. CASE 4
  1199. IF thflag = 0 THEN
  1200. inwarecode = getid(scid,ls_sccode + 'WN',Date(server_dt),if_getid_ture,commit_transaction)
  1201. ELSE
  1202. inwarecode = getid(scid,ls_sccode + 'WH',Date(server_dt),if_getid_ture,commit_transaction)
  1203. END IF
  1204. CASE 8
  1205. inwarecode = getid(scid,ls_sccode + 'JC',Date(server_dt),if_getid_ture,commit_transaction)
  1206. CASE 9
  1207. inwarecode = getid(scid,ls_sccode + 'PY',Date(server_dt),if_getid_ture,commit_transaction)
  1208. CASE 12
  1209. inwarecode = getid(scid,ls_sccode + 'IC',Date(server_dt),if_getid_ture,commit_transaction)
  1210. CASE 15
  1211. inwarecode = getid(scid,ls_sccode + 'DC',Date(server_dt),if_getid_ture,commit_transaction)
  1212. CASE 20
  1213. IF thflag = 0 THEN
  1214. inwarecode = getid(scid,ls_sccode + 'RI',Date(server_dt),if_getid_ture,commit_transaction)
  1215. ELSE
  1216. inwarecode = getid(scid,ls_sccode + 'RT',Date(server_dt),if_getid_ture,commit_transaction)
  1217. END IF
  1218. CASE 22
  1219. inwarecode = getid(scid,ls_sccode + 'TI',Date(server_dt),if_getid_ture,commit_transaction)
  1220. END CHOOSE
  1221. IF inwarecode = "err" THEN
  1222. inwarecode = ''
  1223. rslt = 0
  1224. arg_msg = "无法获取进仓单编号"+"~n"
  1225. GOTO ext
  1226. END IF
  1227. INSERT INTO u_inware (
  1228. scid,
  1229. inwareid,
  1230. inwarecode,
  1231. billtype,
  1232. relid,
  1233. storageid,
  1234. indate,
  1235. inrep,
  1236. part,
  1237. dscrp,
  1238. sptid,
  1239. sptname,
  1240. thflag,
  1241. dxflag,
  1242. otheramt,
  1243. opdate,
  1244. opemp,
  1245. relint_1,
  1246. relint_2,
  1247. relint_3,
  1248. relstr_1,
  1249. relstr_2,
  1250. relstr_3,
  1251. mrate,
  1252. relint_4,
  1253. relint_5,
  1254. viewdate)
  1255. VALUES (
  1256. :scid,
  1257. :ls_newid,
  1258. :inwarecode,
  1259. :billtype,
  1260. :relid,
  1261. :storageid,
  1262. :indate,
  1263. :inrep,
  1264. :part,
  1265. :dscrp,
  1266. :sptid,
  1267. :sptname,
  1268. :thflag,
  1269. :dxflag,
  1270. :otheramt,
  1271. :server_dt,
  1272. :publ_operator,
  1273. :relint_1,
  1274. :relint_2,
  1275. :relint_3,
  1276. :relstr_1,
  1277. :relstr_2,
  1278. :relstr_3,
  1279. :mrate,
  1280. :relint_4,
  1281. :relint_5,
  1282. :viewdate) Using commit_transaction ;
  1283. IF commit_transaction.SQLCode <> 0 THEN
  1284. rslt = 0
  1285. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_inware') > 0 THEN
  1286. arg_msg = '插入单据资料失败,关键字ID重复'
  1287. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_inware') > 0 THEN
  1288. arg_msg = '插入单据资料失败,单据编号重复'
  1289. ELSE
  1290. arg_msg = '插入单据资料失败,'+commit_transaction.SQLErrText
  1291. END IF
  1292. //arg_msg = "插入操作失败"+"~n"+commit_transaction.SQLErrText
  1293. GOTO ext
  1294. END IF
  1295. //读取新inwareid
  1296. inwareid = ls_newid
  1297. ELSE //////////////////////////////////////////////// //更新
  1298. UPDATE u_inware
  1299. SET billtype = :billtype,
  1300. relid = :relid,
  1301. storageid = :storageid,
  1302. indate = :indate,
  1303. inrep = :inrep,
  1304. part = :part,
  1305. dscrp = :dscrp,
  1306. sptid = :sptid,
  1307. sptname = :sptname,
  1308. thflag = :thflag,
  1309. dxflag = :dxflag,
  1310. otheramt = :otheramt,
  1311. moddate = :server_dt,
  1312. modemp = :publ_operator,
  1313. relint_1 = :relint_1,
  1314. relint_2 = :relint_2,
  1315. relint_3 = :relint_3,
  1316. relstr_1 = :relstr_1,
  1317. relstr_2 = :relstr_2,
  1318. relstr_3 = :relstr_3,
  1319. mrate = :mrate,
  1320. relint_4 = :relint_4,
  1321. relint_5 = :relint_5,
  1322. viewdate = :viewdate
  1323. WHERE u_inware.inwareid = :inwareid
  1324. AND u_inware.scid = :scid
  1325. Using commit_transaction;
  1326. IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN
  1327. rslt = 0
  1328. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_inware') > 0 THEN
  1329. arg_msg = '更新单据资料失败,关键字ID重复'
  1330. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_inware') > 0 THEN
  1331. arg_msg = '更新单据资料失败,单据编号重复'
  1332. ELSE
  1333. arg_msg = '更新单据资料失败,'+commit_transaction.SQLErrText
  1334. END IF
  1335. arg_msg = "更新单据操作失败"+"~n"+commit_transaction.SQLErrText
  1336. GOTO ext
  1337. END IF
  1338. IF billtype > 1 Or billtype = 1 And flag = 0 THEN
  1339. //删除原有明细
  1340. DELETE FROM u_inwaremx
  1341. WHERE u_inwaremx.inwareid = :inwareid
  1342. And u_inwaremx.scid = :scid Using commit_transaction;
  1343. IF commit_transaction.SQLCode <> 0 THEN
  1344. rslt = 0
  1345. arg_msg = "删除旧有单据明细操作失败"+"~n"
  1346. GOTO ext
  1347. END IF
  1348. ELSE
  1349. END IF
  1350. END IF
  1351. IF billtype > 1 Or billtype = 1 And flag = 0 THEN
  1352. FOR i = 1 To it_mxbt
  1353. IF storage_plancode_flag = 1 THEN //仓库中是否设置了使用 “进仓单号” 作为批号
  1354. inwaremx[i].plancode = inwarecode
  1355. END IF
  1356. INSERT INTO u_inwaremx
  1357. (scid,
  1358. inwareid,
  1359. printid,
  1360. mtrlid,
  1361. plancode,
  1362. status,
  1363. qty,
  1364. addqty,
  1365. packqty,
  1366. fprice,
  1367. rebate,
  1368. price,
  1369. planprice,
  1370. mxdscrp,
  1371. jgprice,
  1372. relid,
  1373. relprintid,
  1374. ifrel,
  1375. woodcode,
  1376. relcode,
  1377. pcode,
  1378. sptid_cusid,
  1379. cost,
  1380. sptmtrlname,
  1381. unit,
  1382. rate,
  1383. uprice,
  1384. uqty,
  1385. bootqty,
  1386. noauditqty,
  1387. mtrlcuscode,
  1388. dftsptprice,
  1389. formula,
  1390. waredscrp,
  1391. inworkdate,
  1392. tax,
  1393. buyqty,
  1394. uamt,
  1395. uamt_tax,
  1396. bsamt,
  1397. bsamt_tax,
  1398. costamt,
  1399. uprice_notax,
  1400. mxdscrp2,
  1401. mxdscrp3,
  1402. mxdscrp4,
  1403. cost_notax)
  1404. VALUES (
  1405. :scid,
  1406. :inwareid,
  1407. :inwaremx[i].printid,
  1408. :inwaremx[i].mtrlid,
  1409. :inwaremx[i].plancode,
  1410. :inwaremx[i].status,
  1411. :inwaremx[i].qty,
  1412. :inwaremx[i].addqty,
  1413. :inwaremx[i].packqty,
  1414. :inwaremx[i].fprice,
  1415. :inwaremx[i].rebate,
  1416. :inwaremx[i].price,
  1417. :inwaremx[i].planprice,
  1418. :inwaremx[i].mxdscrp,
  1419. :inwaremx[i].jgprice,
  1420. :inwaremx[i].relid,
  1421. :inwaremx[i].relprintid,
  1422. :inwaremx[i].ifrel,
  1423. :inwaremx[i].woodcode,
  1424. :inwaremx[i].relcode,
  1425. :inwaremx[i].pcode,
  1426. :inwaremx[i].sptid,
  1427. :inwaremx[i].cost,
  1428. :inwaremx[i].sptmtrlname,
  1429. :inwaremx[i].unit,
  1430. :inwaremx[i].rate,
  1431. :inwaremx[i].uprice,
  1432. :inwaremx[i].uqty,
  1433. :inwaremx[i].bootqty,
  1434. :inwaremx[i].noauditqty,
  1435. :inwaremx[i].mtrlcuscode,
  1436. :inwaremx[i].dftsptprice,
  1437. :inwaremx[i].formula,
  1438. :inwaremx[i].waredscrp,
  1439. :inwaremx[i].inworkdate,
  1440. :inwaremx[i].tax,
  1441. :inwaremx[i].buyqty,
  1442. :inwaremx[i].uamt,
  1443. :inwaremx[i].uamt_tax,
  1444. :inwaremx[i].bsamt,
  1445. :inwaremx[i].bsamt_tax,
  1446. :inwaremx[i].costamt,
  1447. :inwaremx[i].uprice_notax,
  1448. :inwaremx[i].mxdscrp2,
  1449. :inwaremx[i].mxdscrp3,
  1450. :inwaremx[i].mxdscrp4,
  1451. :inwaremx[i].cost_notax) Using commit_transaction;
  1452. IF commit_transaction.SQLCode <> 0 THEN
  1453. IF it_newbegin THEN inwareid = 0
  1454. rslt = 0
  1455. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_inwaremx') > 0 THEN
  1456. arg_msg = '插入单据明细内容失败,关键字ID重复'
  1457. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_inwaremx') > 0 THEN
  1458. arg_msg = '插入单据明细内容失败,三个属性字段重复'
  1459. ELSE
  1460. arg_msg = '插入单据明细内容失败,'+commit_transaction.SQLErrText
  1461. END IF
  1462. GOTO ext
  1463. END IF
  1464. NEXT
  1465. ELSE
  1466. FOR i = 1 To it_mxbt
  1467. UPDATE u_inWAREmx
  1468. SET uprice = :inWAREmx[i].uprice,
  1469. mxdscrp = :inwaremx[I].mxdscrp,
  1470. fprice = :inwaremx[I].fprice,
  1471. rebate = :inwaremx[I].rebate,
  1472. price = :inwaremx[I].price,
  1473. tax = :inwaremx[i].tax,
  1474. uamt = :inwaremx[i].uamt,
  1475. uamt_tax = :inwaremx[i].uamt_tax,
  1476. bsamt = :inwaremx[i].bsamt,
  1477. bsamt_tax = :inwaremx[i].bsamt_tax,
  1478. uprice_notax =:inwaremx[i].uprice_notax
  1479. WHERE ( scid = :scid AND
  1480. inWAREid = :inwareid AND
  1481. printid = :inwaremx[i].printid);
  1482. IF commit_transaction.SQLCode <> 0 THEN
  1483. rslt = 0
  1484. arg_msg = "更新明细价格、备注操作失败"+"~n"
  1485. GOTO ext
  1486. END IF
  1487. NEXT
  1488. END IF
  1489. IF save_end(arg_msg) = 0 THEN
  1490. rslt = 0
  1491. GOTO ext
  1492. END IF
  1493. it_newbegin = False
  1494. it_updatebegin = False
  1495. ext:
  1496. IF rslt = 0 THEN
  1497. ROLLBACK Using commit_transaction;
  1498. p_clearmx()
  1499. arg_msg = billname + ',' + arg_msg
  1500. ELSEIF rslt = 1 And arg_ifcommit THEN
  1501. COMMIT Using commit_transaction;
  1502. END IF
  1503. RETURN rslt
  1504. end function
  1505. public function integer priceaudit (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i
  1506. IF arg_scid < 0 THEN
  1507. rslt = 0
  1508. arg_msg = "错误的分部ID"
  1509. GOTO ext
  1510. END IF
  1511. IF arg_inwareid <= 0 THEN
  1512. rslt = 0
  1513. arg_msg = "没有确认对象"
  1514. GOTO ext
  1515. END IF
  1516. if getinfo(arg_scid,arg_inwareid,arg_msg) = 0 then
  1517. rslt = 0
  1518. goto ext
  1519. end if
  1520. IF priceflag = 1 THEN
  1521. rslt = 0
  1522. arg_msg = "单据已经确认"
  1523. GOTO ext
  1524. END IF
  1525. UPDATE u_inware
  1526. SET priceemp = :publ_operator,
  1527. pricedate = getdate(),
  1528. priceflag = 1
  1529. WHERE u_inware.inwareid = :arg_inwareid
  1530. AND priceflag = 0
  1531. AND scid = :arg_scid USING commit_transaction;
  1532. IF commit_transaction.SQLCode <> 0 THEN
  1533. rslt = 0
  1534. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  1535. GOTO ext
  1536. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1537. rslt = 0
  1538. arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1539. GOTO ext
  1540. END IF
  1541. priceflag = 1
  1542. ext:
  1543. IF rslt = 0 THEN
  1544. ROLLBACK USING commit_transaction;
  1545. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1546. COMMIT USING commit_transaction;
  1547. END IF
  1548. RETURN rslt
  1549. end function
  1550. public function integer c_priceaudit (long arg_scid, long arg_inwareid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i
  1551. DateTime null_dt
  1552. SetNull(null_dt)
  1553. IF arg_scid < 0 THEN
  1554. rslt = 0
  1555. arg_msg = "错误的分部ID"
  1556. GOTO ext
  1557. END IF
  1558. IF arg_inwareid <= 0 THEN
  1559. rslt = 0
  1560. arg_msg = "没有确认对象"
  1561. GOTO ext
  1562. END IF
  1563. if getinfo(arg_scid,arg_inwareid,arg_msg) = 0 then
  1564. rslt = 0
  1565. goto ext
  1566. end if
  1567. IF priceflag = 0 THEN
  1568. rslt = 0
  1569. arg_msg = "单据未确认"
  1570. GOTO ext
  1571. END IF
  1572. UPDATE u_inware
  1573. SET priceemp = '',
  1574. pricedate = :null_dt,
  1575. priceflag = 0
  1576. WHERE u_inware.inwareid = :arg_inwareid
  1577. AND priceflag = 1
  1578. AND scid = :arg_scid USING commit_transaction;
  1579. IF commit_transaction.SQLCode <> 0 THEN
  1580. rslt = 0
  1581. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  1582. GOTO ext
  1583. ELSEIF commit_transaction.SQLNRows = 0 THEN
  1584. rslt = 0
  1585. arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  1586. GOTO ext
  1587. END IF
  1588. priceflag = 0
  1589. ext:
  1590. IF rslt = 0 THEN
  1591. ROLLBACK USING commit_transaction;
  1592. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1593. COMMIT USING commit_transaction;
  1594. END IF
  1595. RETURN rslt
  1596. end function
  1597. on uo_inware_buy.create
  1598. call super::create
  1599. end on
  1600. on uo_inware_buy.destroy
  1601. call super::destroy
  1602. end on