uo_mtrl_price_change.sru 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074
  1. $PBExportHeader$uo_mtrl_price_change.sru
  2. forward
  3. global type uo_mtrl_price_change from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_mtrl_price_change from nonvisualobject
  7. end type
  8. global uo_mtrl_price_change uo_mtrl_price_change
  9. type variables
  10. Long uo_billid
  11. String uo_billcode
  12. end variables
  13. forward prototypes
  14. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg)
  15. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  16. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer updatebegin (long arg_billid, ref string arg_msg)
  18. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer getinfo (long arg_billid, ref s_mtrl_price_changemx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  20. public function integer getinfo2 (long arg_billid, ref s_mtrl_price_changemx2 arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg)
  21. public function integer save (s_mtrl_price_change arg_mpc, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  22. public function integer uf_update_task (long arg_scid, long arg_billid, decimal arg_newprice, ref string arg_msg, boolean arg_ifcommit)
  23. public function integer uf_update_in (long arg_scid, long arg_billid, decimal arg_newprice, ref string arg_msg, boolean arg_ifcommit)
  24. end prototypes
  25. public function integer p_getflag (long arg_billid, ref integer arg_flag, ref string arg_msg);Int rslt = 1
  26. SELECT flag
  27. INTO :arg_flag
  28. FROM u_mtrl_price_change
  29. WHERE billid = :arg_billid;
  30. IF sqlca.SQLCode <> 0 THEN
  31. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  32. rslt = 0
  33. GOTO ext
  34. END IF
  35. ext:
  36. RETURN rslt
  37. end function
  38. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  39. Int li_flag
  40. IF arg_billid <= 0 THEN
  41. rslt = 0
  42. arg_msg = '错误单据唯一码'
  43. GOTO ext
  44. END IF
  45. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  46. rslt = 0
  47. GOTO ext
  48. END IF
  49. IF li_flag = 1 THEN
  50. rslt = 0
  51. arg_msg = '单据不是在待审状态,不可以删除'
  52. GOTO ext
  53. END IF
  54. DELETE FROM u_mtrl_price_change
  55. WHERE billid = :arg_billid;
  56. IF sqlca.SQLCode <> 0 THEN
  57. rslt = 0
  58. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  59. GOTO ext
  60. END IF
  61. DELETE FROM u_mtrl_price_changemx
  62. WHERE billid = :arg_billid;
  63. IF sqlca.SQLCode <> 0 THEN
  64. rslt = 0
  65. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  66. GOTO ext
  67. END IF
  68. DELETE FROM u_mtrl_price_changemx2
  69. WHERE billid = :arg_billid;
  70. IF sqlca.SQLCode <> 0 THEN
  71. rslt = 0
  72. arg_msg = "删除单据明细2操作失败"+"~n"+sqlca.SQLErrText
  73. GOTO ext
  74. END IF
  75. ext:
  76. IF rslt = 0 THEN
  77. ROLLBACK;
  78. ELSEIF rslt = 1 AND arg_ifcommit THEN
  79. COMMIT;
  80. END IF
  81. RETURN rslt
  82. end function
  83. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  84. Int li_flag
  85. IF arg_newdescppart = '' THEN
  86. rslt = 0
  87. arG_MSG = "要添加内容为空,操作取消"
  88. GOTO ext
  89. END IF
  90. IF p_getflag(arg_billid,li_flag,arG_MSG) = 0 THEN
  91. rslt = 0
  92. GOTO ext
  93. END IF
  94. IF li_flag = 0 THEN
  95. rslt = 0
  96. arG_MSG = "待审核状态下不可用"
  97. GOTO ext
  98. END IF
  99. UPDATE u_mtrl_price_change
  100. SET DSCRP = DSCRP+' '+:arg_newdescppart
  101. WHERE u_mtrl_price_change.billid = :arg_billid;
  102. IF SQLCA.SQLCode <> 0 THEN
  103. rslt = 0
  104. arG_MSG = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  105. GOTO ext
  106. END IF
  107. ext:
  108. IF rslt = 0 THEN
  109. ROLLBACK;
  110. ELSEIF rslt = 1 AND arg_ifcommit THEN
  111. COMMIT;
  112. END IF
  113. Return (rslt)
  114. end function
  115. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  116. Int li_flag
  117. Long cnt
  118. IF arg_billid <= 0 THEN
  119. rslt = 0
  120. arg_msg = '错误单据唯一码'
  121. GOTO ext
  122. END IF
  123. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  124. rslt = 0
  125. GOTO ext
  126. END IF
  127. IF li_flag = 1 THEN
  128. rslt = 0
  129. arg_msg = '单据已经审核,不可以再修改'
  130. GOTO ext
  131. END IF
  132. ext:
  133. RETURN rslt
  134. end function
  135. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  136. Int li_flag
  137. Long ll_scid
  138. Decimal lde_newprice
  139. Long ll_sptid , ll_mtrlid
  140. String ls_status, ls_woodcode, ls_pcode
  141. String ls_mtrlcode, ls_unit
  142. Long ll_moneyid
  143. datetime ldt_billdate
  144. dec lde_rate
  145. uo_spt_price_change uo_price
  146. uo_price = Create uo_spt_price_change
  147. uo_price.commit_transaction = sqlca
  148. IF arg_billid <= 0 THEN
  149. rslt = 0
  150. arg_msg = '错误单据唯一码'
  151. GOTO ext
  152. END IF
  153. IF p_getflag(arg_billid,li_flag,arg_msg) = 0 THEN
  154. rslt = 0
  155. GOTO ext
  156. END IF
  157. IF li_flag <> 0 THEN
  158. rslt = 0
  159. arg_msg = '单据不是在待审核状态,不可以审核'
  160. GOTO ext
  161. END IF
  162. SELECT scid, newprice, sptid, mtrlid, status, woodcode, pcode, moneyid, billdate, unit, rate
  163. INTO :ll_scid, :lde_newprice, :ll_sptid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ll_moneyid, :ldt_billdate, :ls_unit, :lde_rate
  164. FROM u_mtrl_price_change
  165. Where billid = :arg_billid;
  166. IF sqlca.SQLCode <> 0 THEN
  167. rslt = 0
  168. arg_msg = "查询单据信息失败"+"~n"+sqlca.SQLErrText
  169. GOTO ext
  170. END IF
  171. SELECT mtrlcode
  172. INTO :ls_mtrlcode
  173. FROM u_mtrldef
  174. Where mtrlid = :ll_mtrlid;
  175. IF sqlca.SQLCode <> 0 THEN
  176. rslt = 0
  177. arg_msg = "查询单据物料信息失败"+"~n"+sqlca.SQLErrText
  178. GOTO ext
  179. END IF
  180. //生成询价单creage_
  181. IF uo_price.newbegin() = 0 THEN
  182. rslt = 0
  183. GOTO ext
  184. END IF
  185. //uo_price.billdate = DateTime(Today()) // 发生时间
  186. //uo_price.sptid = ll_sptid
  187. //uo_price.dscrp = "物价单价变更的审核自动生成" //备注
  188. //uo_price.billtype = 1 //调价单
  189. //uo_price.inrep = publ_operator
  190. //uo_price.moneyid = ll_moneyid
  191. //
  192. //IF uo_price.acceptmx(1,&
  193. // ll_mtrlid,&
  194. // ls_mtrlcode,&
  195. // ls_unit,&
  196. // lde_newprice,&
  197. // lde_rate,&
  198. // ls_status,&
  199. // ls_woodcode,&
  200. // ls_pcode,&
  201. // '',&
  202. // '',&
  203. // '',&
  204. // ldt_billdate,&
  205. // 0,&
  206. // 0,&
  207. // arg_msg) = 0 THEN
  208. // rslt = 0
  209. // GOTO ext
  210. //END IF
  211. //
  212. //IF uo_price.Save(arg_msg,False) = 0 THEN
  213. // rslt = 0
  214. // GOTO ext
  215. //END IF
  216. //IF uo_price.first_audit(uo_price.billid,False,arg_msg) = 0 THEN
  217. // rslt = 0
  218. // GOTO ext
  219. //END IF
  220. //
  221. //IF uo_price.auditing(uo_price.billid,False,arg_msg) = 0 THEN
  222. // rslt = 0
  223. // GOTO ext
  224. //END IF
  225. //生成询价单creage_
  226. //更新审核标记
  227. UPDATE u_mtrl_price_change
  228. SET auditemp = :arg_opemp,
  229. auditdate = getdate(),
  230. flag = 1,
  231. relid = :uo_price.billid,
  232. relcode = :uo_price.billcode
  233. WHERE billid = :arg_billid
  234. And flag = 0;
  235. IF sqlca.SQLCode <> 0 THEN
  236. rslt = 0
  237. arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  238. GOTO ext
  239. ELSEIF sqlca.SQLNRows = 0 THEN
  240. rslt = 0
  241. arg_msg = "单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  242. GOTO ext
  243. END IF
  244. IF uf_update_task(ll_scid , arg_billid, lde_newprice, arg_msg, False) = 0 THEN
  245. rslt = 0
  246. GOTO ext
  247. END IF
  248. IF uf_update_in(ll_scid , arg_billid, lde_newprice, arg_msg, False) = 0 THEN
  249. rslt = 0
  250. GOTO ext
  251. END IF
  252. ext:
  253. Destroy uo_price
  254. IF rslt = 0 THEN
  255. ROLLBACK;
  256. ELSEIF rslt = 1 And arg_ifcommit THEN
  257. COMMIT;
  258. END IF
  259. RETURN rslt
  260. end function
  261. public function integer getinfo (long arg_billid, ref s_mtrl_price_changemx arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  262. Long i = 1,no_mxcheck = 0
  263. IF arg_billid <= 0 THEN
  264. rslt = 0
  265. arg_msg = '错误单据唯一码'
  266. GOTO ext
  267. END IF
  268. //用游标读取明细
  269. DECLARE cur_mx CURSOR FOR
  270. SELECT u_mtrl_price_changemx.billid,
  271. u_mtrl_price_changemx.printid,
  272. u_mtrl_price_changemx.relid,
  273. u_mtrl_price_changemx.price,
  274. u_mtrl_price_changemx.rate,
  275. u_mtrl_price_changemx.scid,
  276. u_mtrl_price_changemx.relprintid,
  277. u_mtrl_price_changemx.mxtype,
  278. u_mtrl_price_changemx.unit
  279. FROM u_mtrl_price_changemx
  280. WHERE u_mtrl_price_changemx.billid = :arg_billid
  281. Order By u_mtrl_price_changemx.printid;
  282. OPEN cur_mx;
  283. FETCH cur_mx INTO :arg_ref_mx[i].billid,
  284. :arg_ref_mx[i].printid,:arg_ref_mx[i].relid,
  285. :arg_ref_mx[i].price,:arg_ref_mx[i].rate,
  286. :arg_ref_mx[i].scid,:arg_ref_mx[i].relprintid,
  287. :arg_ref_mx[i].mxtype,:arg_ref_mx[i].unit;
  288. DO WHILE sqlca.SQLCode = 0
  289. i++
  290. FETCH cur_mx INTO :arg_ref_mx[i].billid,
  291. :arg_ref_mx[i].printid,:arg_ref_mx[i].relid,
  292. :arg_ref_mx[i].price,:arg_ref_mx[i].rate,
  293. :arg_ref_mx[i].scid,:arg_ref_mx[i].relprintid,
  294. :arg_ref_mx[i].mxtype,:arg_ref_mx[i].unit;
  295. LOOP
  296. CLOSE cur_mx;
  297. //检验明细是否读入完整
  298. SELECT count(*) INTO :no_mxcheck
  299. FROM u_mtrl_price_changemx
  300. Where billid = :arg_billid;
  301. IF sqlca.SQLCode <> 0 THEN
  302. rslt = 0
  303. arg_msg = "查询操作失败,单据明细数量"
  304. GOTO ext
  305. END IF
  306. IF i <> (no_mxcheck + 1) THEN
  307. rslt = 0
  308. arg_msg = "查询操作失败,单据明细"
  309. GOTO ext
  310. END IF
  311. arg_arr_cnt = i - 1
  312. ext:
  313. RETURN rslt
  314. end function
  315. public function integer getinfo2 (long arg_billid, ref s_mtrl_price_changemx2 arg_ref_mx[], ref long arg_arr_cnt, ref string arg_msg);Int rslt = 1
  316. Long i = 1,no_mxcheck = 0
  317. IF arg_billid <= 0 THEN
  318. rslt = 0
  319. arg_msg = '错误单据唯一码'
  320. GOTO ext
  321. END IF
  322. //用游标读取明细
  323. DECLARE cur_mx CURSOR FOR
  324. SELECT u_mtrl_price_changemx2.billid,
  325. u_mtrl_price_changemx2.printid,
  326. u_mtrl_price_changemx2.relid,
  327. u_mtrl_price_changemx2.price,
  328. u_mtrl_price_changemx2.rate,
  329. u_mtrl_price_changemx2.scid,
  330. u_mtrl_price_changemx2.relprintid,
  331. u_mtrl_price_changemx2.mxtype,
  332. u_mtrl_price_changemx2.unit
  333. FROM u_mtrl_price_changemx2
  334. where u_mtrl_price_changemx2.billid = :arg_billid
  335. Order By u_mtrl_price_changemx2.printid;
  336. OPEN cur_mx;
  337. FETCH cur_mx INTO :arg_ref_mx[i].billid,
  338. :arg_ref_mx[i].printid,:arg_ref_mx[i].relid,
  339. :arg_ref_mx[i].price,:arg_ref_mx[i].rate,
  340. :arg_ref_mx[i].scid,:arg_ref_mx[i].relprintid,
  341. :arg_ref_mx[i].mxtype,:arg_ref_mx[i].unit;
  342. DO WHILE sqlca.SQLCode = 0
  343. i++
  344. FETCH cur_mx INTO :arg_ref_mx[i].billid,
  345. :arg_ref_mx[i].printid,:arg_ref_mx[i].relid,
  346. :arg_ref_mx[i].price,:arg_ref_mx[i].rate,
  347. :arg_ref_mx[i].scid,:arg_ref_mx[i].relprintid,
  348. :arg_ref_mx[i].mxtype,:arg_ref_mx[i].unit;
  349. LOOP
  350. CLOSE cur_mx;
  351. //检验明细是否读入完整
  352. SELECT count(*) INTO :no_mxcheck
  353. FROM u_mtrl_price_changemx2
  354. Where billid = :arg_billid;
  355. IF sqlca.SQLCode <> 0 THEN
  356. rslt = 0
  357. arg_msg = "查询操作失败,单据明细数量"
  358. GOTO ext
  359. END IF
  360. IF i <> (no_mxcheck + 1) THEN
  361. rslt = 0
  362. arg_msg = "查询操作失败,单据明细"
  363. GOTO ext
  364. END IF
  365. arg_arr_cnt = i - 1
  366. ext:
  367. RETURN rslt
  368. end function
  369. public function integer save (s_mtrl_price_change arg_mpc, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1
  370. Long cnt = 0
  371. DateTime server_dt
  372. Long ll_billid
  373. String ls_sccode,ls_billcode
  374. Long ll_Mtrlorigin
  375. Long it_mxbt,i, it_mxbt2
  376. IF IsNull(arg_mpc.scid) THEN arg_mpc.scid = 0
  377. IF IsNull(arg_mpc.billid) THEN arg_mpc.billid = 0
  378. IF IsNull(arg_mpc.billemp) THEN arg_mpc.billemp = ''
  379. IF IsNull(arg_mpc.relcode) THEN arg_mpc.relcode = ''
  380. IF IsNull(arg_mpc.dscrp) THEN arg_mpc.dscrp = ''
  381. IF IsNull(arg_mpc.relid) THEN arg_mpc.relid = 0
  382. IF IsNull(arg_mpc.mtrlid) THEN arg_mpc.mtrlid = 0
  383. IF IsNull(arg_mpc.status) THEN arg_mpc.status = ''
  384. IF IsNull(arg_mpc.woodcode) THEN arg_mpc.woodcode = ''
  385. IF IsNull(arg_mpc.pcode) THEN arg_mpc.pcode = ''
  386. IF IsNull(arg_mpc.price) THEN arg_mpc.price = 0
  387. IF IsNull(arg_mpc.newprice) THEN arg_mpc.newprice = 0
  388. IF IsNull(arg_mpc.billtype) THEN arg_mpc.billtype = 0
  389. IF IsNull(arg_mpc.sptid) THEN arg_mpc.sptid = 0
  390. IF IsNull(arg_mpc.moneyid) THEN arg_mpc.moneyid = 0
  391. IF IsNull(arg_mpc.mrate) THEN arg_mpc.mrate = 0
  392. IF IsNull(arg_mpc.unit) THEN arg_mpc.unit = ''
  393. IF IsNull(arg_mpc.rate) THEN arg_mpc.rate = 0
  394. IF arg_mpc.mtrlid = 0 THEN
  395. arg_msg = '请选择目标物料'
  396. rslt = 0
  397. GOTO ext
  398. END IF
  399. cnt = 0
  400. SELECT count(*) INTO :cnt
  401. FROM u_mtrldef
  402. Where mtrlid = :arg_mpc.mtrlid;
  403. IF sqlca.SQLCode <> 0 THEN
  404. arg_msg = '查询目标物料失败,'+sqlca.SQLErrText
  405. rslt = 0
  406. GOTO ext
  407. END IF
  408. IF cnt <> 1 THEN
  409. arg_msg = '目标物料资料不存在或重复,请检查'
  410. rslt = 0
  411. GOTO ext
  412. END IF
  413. IF arg_mpc.billemp = '' THEN
  414. arg_msg = '请输入经手人'
  415. rslt = 0
  416. GOTO ext
  417. END IF
  418. SELECT Top 1 getdate() Into :server_dt From u_user;
  419. IF sqlca.SQLCode <> 0 THEN
  420. rslt = 0
  421. arg_msg = "查询操作失败,日期 "
  422. GOTO ext
  423. END IF
  424. it_mxbt = UpperBound(arg_mpc.arg_s_mx)
  425. it_mxbt2 = UpperBound(arg_mpc.arg_s_mx2)
  426. IF it_mxbt <= 0 And it_mxbt2 <= 0 THEN
  427. rslt = 0
  428. arg_msg = "没有正确订单明细内容和收货明细内容"
  429. GOTO ext
  430. END IF
  431. IF arg_mpc.billid = 0 THEN
  432. ll_billid = f_sys_scidentity(0,"u_mtrl_price_change","billid",arg_msg,True,id_sqlca)
  433. IF ll_billid <= 0 THEN
  434. rslt = 0
  435. GOTO ext
  436. END IF
  437. IF f_get_sccode(arg_mpc.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  438. rslt = 0
  439. GOTO ext
  440. END IF
  441. ls_billcode = getid(arg_mpc.scid,ls_sccode + 'PM',Date(server_dt),False,sqlca)
  442. IF ls_billcode = "err" THEN
  443. rslt = 0
  444. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  445. GOTO ext
  446. END IF
  447. INSERT INTO u_mtrl_price_change
  448. (scid,
  449. billid,
  450. billcode,
  451. billdate,
  452. billemp,
  453. opdate,
  454. opemp,
  455. flag,
  456. relcode,
  457. dscrp,
  458. relid,
  459. mtrlid,
  460. status,
  461. woodcode,
  462. pcode,
  463. price,
  464. newprice,
  465. sptid,
  466. moneyid,
  467. mrate,
  468. unit,
  469. rate)
  470. VALUES (
  471. :arg_mpc.scid,
  472. :ll_billid,
  473. :ls_billcode,
  474. :arg_mpc.billdate,
  475. :arg_mpc.billemp,
  476. getdate(),
  477. :arg_opemp,
  478. 0,
  479. :arg_mpc.relcode,
  480. :arg_mpc.dscrp,
  481. :arg_mpc.relid,
  482. :arg_mpc.mtrlid,
  483. :arg_mpc.status,
  484. :arg_mpc.woodcode,
  485. :arg_mpc.pcode,
  486. :arg_mpc.price,
  487. :arg_mpc.newprice,
  488. :arg_mpc.sptid,
  489. :arg_mpc.moneyid,
  490. :arg_mpc.mrate,
  491. :arg_mpc.unit,
  492. :arg_mpc.rate) ;
  493. IF sqlca.SQLCode <> 0 THEN
  494. rslt = 0
  495. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  496. GOTO ext
  497. END IF
  498. uo_billid = ll_billid
  499. uo_billcode = ls_billcode
  500. ELSE
  501. UPDATE u_mtrl_price_change
  502. SET
  503. billdate = :arg_mpc.billdate,
  504. billemp = :arg_mpc.billemp,
  505. moddate = getdate(),
  506. modemp = :arg_opemp,
  507. relid = :arg_mpc.relid,
  508. relcode = :arg_mpc.relcode,
  509. dscrp = :arg_mpc.dscrp,
  510. mtrlid = :arg_mpc.mtrlid,
  511. status = :arg_mpc.status,
  512. woodcode = :arg_mpc.woodcode,
  513. pcode = :arg_mpc.pcode,
  514. price = :arg_mpc.price,
  515. newprice = :arg_mpc.newprice,
  516. sptid = :arg_mpc.sptid,
  517. moneyid = :arg_mpc.moneyid,
  518. mrate = :arg_mpc.mrate,
  519. unit = :arg_mpc.unit,
  520. rate = :arg_mpc.rate
  521. WHERE billid = :arg_mpc.billid
  522. And flag = 0;
  523. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  524. rslt = 0
  525. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  526. GOTO ext
  527. END IF
  528. DELETE FROM u_mtrl_price_changemx
  529. Where billid = :arg_mpc.billid;
  530. IF sqlca.SQLCode <> 0 THEN
  531. rslt = 0
  532. arg_msg = '删除旧有明细操作失败'+"~n"+sqlca.SQLErrText
  533. GOTO ext
  534. END IF
  535. DELETE FROM u_mtrl_price_changemx2
  536. Where billid = :arg_mpc.billid;
  537. IF sqlca.SQLCode <> 0 THEN
  538. rslt = 0
  539. arg_msg = '删除旧有明细操作失败'+"~n"+sqlca.SQLErrText
  540. GOTO ext
  541. END IF
  542. uo_billid = arg_mpc.billid
  543. END IF
  544. FOR i = 1 To it_mxbt
  545. INSERT INTO u_mtrl_price_changemx
  546. (billid,
  547. printid,
  548. relid,
  549. relprintid,
  550. relcode,
  551. price,
  552. rate,
  553. unit,
  554. mxtype,
  555. dscrp,
  556. scid)
  557. VALUES (
  558. :uo_billid,
  559. :arg_mpc.arg_s_mx[i].printid,
  560. :arg_mpc.arg_s_mx[i].relid,
  561. :arg_mpc.arg_s_mx[i].relprintid,
  562. :arg_mpc.arg_s_mx[i].relcode,
  563. :arg_mpc.arg_s_mx[i].price,
  564. :arg_mpc.arg_s_mx[i].rate,
  565. :arg_mpc.arg_s_mx[i].unit,
  566. :arg_mpc.arg_s_mx[i].mxtype,
  567. :arg_mpc.arg_s_mx[i].dscrp,
  568. :arg_mpc.scid);
  569. IF sqlca.SQLCode <> 0 THEN
  570. uo_billid = arg_mpc.billid
  571. rslt = 0
  572. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  573. GOTO ext
  574. END IF
  575. NEXT
  576. FOR i = 1 To it_mxbt2
  577. INSERT INTO u_mtrl_price_changemx2
  578. (billid,
  579. printid,
  580. relid,
  581. relprintid,
  582. relcode,
  583. price,
  584. rate,
  585. unit,
  586. mxtype,
  587. dscrp,
  588. scid)
  589. VALUES (
  590. :uo_billid,
  591. :arg_mpc.arg_s_mx2[i].printid,
  592. :arg_mpc.arg_s_mx2[i].relid,
  593. :arg_mpc.arg_s_mx2[i].relprintid,
  594. :arg_mpc.arg_s_mx2[i].relcode,
  595. :arg_mpc.arg_s_mx2[i].price,
  596. :arg_mpc.arg_s_mx2[i].rate,
  597. :arg_mpc.arg_s_mx2[i].unit,
  598. :arg_mpc.arg_s_mx2[i].mxtype,
  599. :arg_mpc.arg_s_mx2[i].dscrp,
  600. :arg_mpc.scid);
  601. IF sqlca.SQLCode <> 0 THEN
  602. uo_billid = arg_mpc.billid
  603. rslt = 0
  604. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  605. GOTO ext
  606. END IF
  607. NEXT
  608. ext:
  609. IF rslt = 0 THEN
  610. ROLLBACK;
  611. ELSEIF arg_ifcommit And rslt = 1 THEN
  612. COMMIT;
  613. END IF
  614. RETURN rslt
  615. end function
  616. public function integer uf_update_task (long arg_scid, long arg_billid, decimal arg_newprice, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  617. s_mtrl_price_changemx s_mx[]
  618. Decimal lde_newprice
  619. lde_newprice = arg_newprice
  620. Long ll_arr_cnt, i
  621. IF getinfo(arg_billid,s_mx,ll_arr_cnt,arg_msg) = 0 THEN
  622. rslt = 0
  623. GOTO ext
  624. END IF
  625. IF ll_arr_cnt = 0 THEN RETURN 1 //没有的, 不提交事物, 成功返回
  626. Int li_status, li_secflag, li_balcflag
  627. Decimal lde_fprice, lde_price, lde_uprice, lde_enprice, lde_jgprice, lde_enprice_tax, lde_enprice_notax, lde_cost
  628. Decimal lde_uqty, lde_rate, lde_rebate, lde_mrate
  629. FOR i = 1 To ll_arr_cnt //订单明细
  630. IF s_mx[i].mxtype = 2 THEN //采购
  631. SELECT u_buytaskmx.uqty,
  632. u_buytaskmx.rate,
  633. u_buytaskmx.rebate,
  634. u_buytask.mrate
  635. INTO
  636. :lde_uqty,
  637. :lde_rate,
  638. :lde_rebate,
  639. :lde_mrate
  640. FROM u_buytaskmx INNER join u_buytask
  641. On u_buytask.scid = u_buytaskmx.scid
  642. AND u_buytask.taskid = u_buytaskmx.taskid
  643. WHERE u_buytaskmx.scid = :arg_scid
  644. AND u_buytaskmx.taskid = :s_mx[i].relid
  645. AND u_buytaskmx.printid = :s_mx[i].relprintid
  646. Using sqlca;
  647. IF sqlca.SQLCode <> 0 THEN
  648. rslt = 0
  649. arg_msg = "订单明细行:["+String(i)+"],查询采购订单明细内容失败"+sqlca.SQLErrText
  650. GOTO ext
  651. END IF
  652. lde_enprice = lde_newprice
  653. lde_uprice = Round(lde_enprice * lde_mrate,10)
  654. lde_fprice = Round((lde_uprice * lde_uqty)/(Round(lde_uqty * lde_rate,sys_option_unit_dec)),10)
  655. lde_price = lde_fprice * lde_rebate
  656. UPDATE u_buyTaskMx
  657. SET fprice = :lde_fprice,
  658. Price = :lde_price,
  659. uprice = :lde_uprice,
  660. enprice = :lde_enprice
  661. WHERE scid = :arg_scid
  662. AND taskid = :s_mx[i].relid
  663. And printid = :s_mx[i].relprintid;
  664. IF sqlca.SQLCode <> 0 THEN
  665. rslt = 0
  666. arg_msg = "订单明细行:["+String(i)+"],更新采购订单单价失败"+"~n"+sqlca.SQLErrText
  667. GOTO ext
  668. ELSEIF sqlca.SQLNRows = 0 THEN
  669. rslt = 0
  670. arg_msg = "订单明细行:["+String(i)+"],采购订单对应明细不存在"+"~n"+sqlca.SQLErrText
  671. GOTO ext
  672. END IF
  673. ELSEIF s_mx[i].mxtype = 3 THEN
  674. lde_price = lde_newprice
  675. UPDATE u_order_wfjgMx
  676. SET price = :lde_price
  677. WHERE scid = :arg_scid
  678. AND wfjgid = :s_mx[i].relid
  679. And printid = :s_mx[i].relprintid;
  680. IF sqlca.SQLCode <> 0 THEN
  681. rslt = 0
  682. arg_msg = "订单明细行:["+String(i)+"],更新外协订单单价失败"+"~n"+sqlca.SQLErrText
  683. GOTO ext
  684. ELSEIF sqlca.SQLNRows = 0 THEN
  685. rslt = 0
  686. arg_msg = "订单明细行:["+String(i)+"],外协订单对应明细不存在"+"~n"+sqlca.SQLErrText
  687. GOTO ext
  688. END IF
  689. END IF
  690. NEXT
  691. ext:
  692. IF rslt = 0 THEN
  693. ROLLBACK;
  694. ELSEIF arg_ifcommit THEN
  695. COMMIT;
  696. END IF
  697. RETURN rslt
  698. end function
  699. public function integer uf_update_in (long arg_scid, long arg_billid, decimal arg_newprice, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  700. Decimal lde_newprice
  701. lde_newprice = arg_newprice
  702. s_mtrl_price_changemx2 s_mx2[]
  703. Long ll_arr_cnt2, i
  704. uo_inware uo_in_buy
  705. uo_in_buy = Create uo_inware
  706. uo_in_buy.commit_transaction = sqlca
  707. uo_inware_wfjg uo_in_wfjg
  708. uo_in_wfjg = Create uo_inware_wfjg
  709. uo_in_wfjg.commit_transaction = sqlca
  710. IF getinfo2(arg_billid,s_mx2,ll_arr_cnt2,arg_msg) = 0 THEN
  711. rslt = 0
  712. GOTO ext
  713. END IF
  714. IF ll_arr_cnt2 = 0 THEN RETURN 1 //没有的, 不提交事物, 成功返回
  715. Int li_flag, li_secflag, li_balcflag
  716. Decimal lde_fprice, lde_price, lde_uprice, lde_enprice, lde_jgprice, lde_enprice_tax, lde_enprice_notax, lde_cost
  717. Decimal lde_uqty, lde_rate, lde_rebate, lde_mrate, lde_qty
  718. Int li_thflag
  719. FOR i = 1 To ll_arr_cnt2 //收货明细
  720. IF s_mx2[i].mxtype = 2 THEN //采购
  721. SELECT flag, secflag, balcflag
  722. INTO :li_flag, :li_secflag, :li_balcflag
  723. FROM u_inware
  724. WHERE scid = :arg_scid
  725. And inwareid = :s_mx2[i].relid;
  726. IF sqlca.SQLCode <> 0 THEN
  727. rslt = 0
  728. arg_msg = "收货单明细行:["+String(i)+"],查询采购收货单信息失败"+"~n"+sqlca.SQLErrText
  729. GOTO ext
  730. END IF
  731. IF li_secflag = 1 THEN
  732. rslt = 0
  733. arg_msg = "收货单明细行:["+String(i)+"],对应采购收货单已经财审,不能更改单价"
  734. GOTO ext
  735. END IF
  736. IF li_balcflag = 1 THEN
  737. rslt = 0
  738. arg_msg = "收货单明细行:["+String(i)+"],对应采购收货单已经结存,不能更改单价"
  739. GOTO ext
  740. END IF
  741. IF li_flag = 1 THEN
  742. IF uo_in_buy.mod_price(arg_scid,s_mx2[i].relid,s_mx2[i].relprintid,lde_newprice,0,-1,-1,arg_msg,False) = 0 THEN
  743. rslt = 0
  744. arg_msg = "收货单明细行:["+String(i)+"],"+arg_msg
  745. GOTO ext
  746. END IF
  747. ELSE
  748. SELECT u_inwaremx.uqty,
  749. u_inwaremx.rate,
  750. u_inwaremx.rebate,
  751. u_inware.mrate,
  752. u_inware.thflag
  753. INTO :lde_uqty,
  754. :lde_rate,
  755. :lde_rebate,
  756. :lde_mrate,
  757. :li_thflag
  758. FROM u_inwaremx INNER JOIN
  759. u_inware ON u_inwaremx.scid = u_inware.scid
  760. AND u_inwaremx.inwareid = u_inware.inwareid
  761. WHERE u_inwaremx.scid = :arg_scid
  762. AND u_inwaremx.inwareid = :s_mx2[i].relid
  763. And u_inwaremx.printid = :s_mx2[i].relprintid Using sqlca;
  764. IF sqlca.SQLCode <> 0 THEN
  765. rslt = 0
  766. arg_msg = '查询进仓单明细内容失败'+sqlca.SQLErrText
  767. GOTO ext
  768. END IF
  769. lde_enprice = lde_newprice
  770. lde_uprice = Round(lde_enprice * lde_mrate,10)
  771. lde_fprice = Round((lde_uprice * lde_uqty)/(Round(lde_uqty * lde_rate,sys_option_unit_dec)),10)
  772. lde_price = lde_fprice * lde_rebate
  773. IF li_thflag = 0 THEN
  774. lde_cost = lde_price * lde_rebate
  775. END IF
  776. UPDATE u_inwaremx
  777. SET enprice = :lde_enprice,
  778. uprice = :lde_uprice,
  779. fprice = :lde_fprice,
  780. price = :lde_price,
  781. cost = :lde_cost,
  782. deliprice_notax = :lde_enprice / (1 + tax)
  783. WHERE scid = :arg_scid
  784. AND inwareid = :s_mx2[i].relid
  785. And printid = :s_mx2[i].relprintid Using sqlca;
  786. IF sqlca.SQLCode <> 0 THEN
  787. rslt = 0
  788. arg_msg = "收货单明细行:["+String(i)+"],更新外协收货单价失败"+"~n"+sqlca.SQLErrText
  789. GOTO ext
  790. ELSEIF sqlca.SQLNRows = 0 THEN
  791. rslt = 0
  792. arg_msg = "收货单明细行:["+String(i)+"],外协收货单对应明细不存在或已财审/结存"+"~n"+sqlca.SQLErrText
  793. GOTO ext
  794. END IF
  795. END IF
  796. ELSEIF s_mx2[i].mxtype = 3 THEN
  797. SELECT flag, secflag, balcflag
  798. INTO :li_flag, :li_secflag, :li_balcflag
  799. FROM ow_wfjg_in
  800. WHERE scid = :arg_scid
  801. And inwareid = :s_mx2[i].relid;
  802. IF sqlca.SQLCode <> 0 THEN
  803. rslt = 0
  804. arg_msg = "收货单明细行:["+String(i)+"],查询外协收货单信息失败"+"~n"+sqlca.SQLErrText
  805. GOTO ext
  806. END IF
  807. IF li_secflag = 1 THEN
  808. rslt = 0
  809. arg_msg = "收货单明细行:["+String(i)+"],对应外协收货单已经财审,不能更改单价"
  810. GOTO ext
  811. END IF
  812. IF li_balcflag = 1 THEN
  813. rslt = 0
  814. arg_msg = "收货单明细行:["+String(i)+"],对应外协收货单已经结存,不能更改单价"
  815. GOTO ext
  816. END IF
  817. IF li_flag = 1 THEN
  818. IF uo_in_wfjg.mod_price(arg_scid,s_mx2[i].relid,s_mx2[i].relprintid,lde_fprice,lde_newprice,-1,-1,arg_msg,False) = 0 THEN
  819. rslt = 0
  820. arg_msg = "收货单明细行:["+String(i)+"],"+arg_msg
  821. GOTO ext
  822. END IF
  823. ELSE
  824. SELECT
  825. fprice,
  826. uqty,
  827. qty,
  828. rebate
  829. INTO
  830. :lde_fprice,
  831. :lde_uqty,
  832. :lde_qty,
  833. :lde_rebate
  834. FROM ow_wfjgmx_in_aft
  835. WHERE scid = :arg_scid
  836. AND inwareid = :s_mx2[i].relid
  837. AND printid = :s_mx2[i].relprintid
  838. Using sqlca;
  839. IF sqlca.SQLCode <> 0 THEN
  840. rslt = 0
  841. arg_msg = '查询单据明细内容失败'+sqlca.SQLErrText
  842. GOTO ext
  843. END IF
  844. lde_jgprice = lde_newprice
  845. IF lde_qty <> 0 THEN
  846. lde_uprice = Round(lde_newprice * lde_uqty/lde_qty,5)
  847. ELSE
  848. lde_uprice = 0
  849. END IF
  850. lde_cost = lde_uprice * lde_rebate + lde_fprice
  851. lde_price = lde_uprice * lde_rebate + lde_fprice
  852. UPDATE ow_wfjgmx_in_aft
  853. SET jgprice = :lde_jgprice,
  854. fprice = :lde_fprice,
  855. uprice = :lde_uprice,
  856. price = :lde_price,
  857. cost = :lde_cost
  858. WHERE scid = :arg_scid
  859. AND inwareid = :s_mx2[i].relid
  860. And printid = :s_mx2[i].relprintid Using sqlca;
  861. IF sqlca.SQLCode <> 0 THEN
  862. rslt = 0
  863. arg_msg = "收货单明细行:["+String(i)+"],更新外协收货单价失败"+"~n"+sqlca.SQLErrText
  864. GOTO ext
  865. ELSEIF sqlca.SQLNRows = 0 THEN
  866. rslt = 0
  867. arg_msg = "收货单明细行:["+String(i)+"],外协收货单对应明细不存在或已财审/结存"+"~n"+sqlca.SQLErrText
  868. GOTO ext
  869. END IF
  870. END IF
  871. END IF
  872. NEXT
  873. ext:
  874. destroy uo_in_buy
  875. destroy uo_in_wfjg
  876. IF rslt = 0 THEN
  877. ROLLBACK;
  878. ELSEIF arg_ifcommit THEN
  879. COMMIT;
  880. END IF
  881. RETURN rslt
  882. end function
  883. on uo_mtrl_price_change.create
  884. call super::create
  885. TriggerEvent( this, "constructor" )
  886. end on
  887. on uo_mtrl_price_change.destroy
  888. TriggerEvent( this, "destructor" )
  889. call super::destroy
  890. end on