uo_mtrlware_trans.sru 29 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295
  1. $PBExportHeader$uo_mtrlware_trans.sru
  2. forward
  3. global type uo_mtrlware_trans from nonvisualobject
  4. end type
  5. type s_transmx from structure within uo_mtrlware_trans
  6. end type
  7. end forward
  8. type s_transmx from structure
  9. long mtrlid
  10. string mtrlcode
  11. string plancode
  12. string status
  13. decimal { 5 } qty
  14. decimal { 10 } fprice
  15. string mxdscrp
  16. long printid
  17. long rel_cusid_sptid
  18. decimal { 5 } rebate
  19. decimal { 10 } price
  20. string woodcode
  21. string pcode
  22. decimal { 5 } addqty
  23. end type
  24. global type uo_mtrlware_trans from nonvisualobject
  25. end type
  26. global uo_mtrlware_trans uo_mtrlware_trans
  27. type variables
  28. public protectedwrite long scid
  29. public protectedwrite long billid
  30. public protectedwrite string billcode
  31. public protectedwrite datetime opdate
  32. public protectedwrite string opemp
  33. public protectedwrite datetime moddate
  34. public protectedwrite string modemp
  35. public protectedwrite int flag=0
  36. public protectedwrite datetime auditingdate
  37. public protectedwrite string auditingrep
  38. public protectedwrite decimal sum_transqty = 0
  39. long mtrlwareid
  40. long storageid
  41. long mtrlid
  42. long relid
  43. string plancode
  44. string status
  45. datetime billdate
  46. string inrep
  47. string part
  48. string dscrp
  49. decimal transqty
  50. decimal addqty
  51. decimal cost
  52. string woodcode
  53. string pcode
  54. boolean if_getid_ture=true
  55. transaction commit_transaction //数据commit事务
  56. private:
  57. s_transmx billmx[] //明细结构数组
  58. long it_mxbt=0 //明细结构数组末指针
  59. boolean it_newbegin=false //新建标志
  60. boolean it_updatebegin=false //修改标志
  61. end variables
  62. forward prototypes
  63. public function integer p_reset ()
  64. public function integer p_clearmx ()
  65. public function integer newbegin (long arg_scid, ref string arg_msg)
  66. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg)
  67. public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg)
  68. public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  69. public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg)
  70. public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg)
  71. public function integer save (boolean arg_ifcommit, ref string arg_msg)
  72. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg)
  73. public function integer auditing (boolean arg_ifcommit, ref string arg_msg)
  74. public function integer acceptmx (long arg_printid, long arg_mtrlid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_addqty, decimal arg_fprice, decimal arg_rebate, string arg_mxdscrp, long arg_rel_cusid_sptid, ref string arg_msg, string arg_woodcode, string arg_pcode)
  75. end prototypes
  76. public function integer p_reset ();//int p_reset()
  77. //清除对象及其明细
  78. scid = 0
  79. billid = 0
  80. billcode = ''
  81. opemp = ''
  82. modemp = ''
  83. auditingrep = ''
  84. flag = 0
  85. inrep = ''
  86. part = ''
  87. dscrp = ''
  88. relid = 0
  89. storageid = 0
  90. mtrlwareid = 0
  91. mtrlid = 0
  92. plancode = ''
  93. status = ''
  94. transqty = 0
  95. addqty = 0
  96. cost = 0
  97. sum_transqty = 0
  98. it_newbegin = false
  99. it_updatebegin = false
  100. //清除明细
  101. p_clearmx()
  102. return 1
  103. end function
  104. public function integer p_clearmx ();//int p_clearmx()
  105. //清除明细
  106. it_mxbt=0
  107. sum_transqty=0
  108. return 1
  109. end function
  110. public function integer newbegin (long arg_scid, ref string arg_msg);int rslt=1
  111. if arg_scid < 0 then
  112. arg_msg = '请选择分部'
  113. rslt = 0
  114. goto ext
  115. end if
  116. p_reset()
  117. scid=arg_scid
  118. it_newbegin=true
  119. it_updatebegin=false
  120. ext:
  121. if rslt=0 then p_reset()
  122. return rslt
  123. end function
  124. public function integer updatebegin (long arg_scid, long arg_billid, ref string arg_msg);int rslt=1
  125. if arg_scid < 0 then
  126. arg_msg = '请选择分部'
  127. rslt = 0
  128. goto ext
  129. end if
  130. if arg_billid <= 0 then
  131. rslt=0
  132. goto ext
  133. end if
  134. //if p_getinfo(arg_scid,arg_inwareid,arg_msg) = 0 then
  135. // rslt = 0
  136. // goto ext
  137. //end if
  138. if flag=1 then
  139. rslt=0
  140. arg_msg='单据已经审核,不可以修改'
  141. goto ext
  142. end if
  143. billid = arg_billid
  144. scid = arg_scid
  145. it_newbegin=false
  146. it_updatebegin=true
  147. p_clearmx() //清除明细
  148. ext:
  149. if rslt=0 then p_reset()
  150. return rslt
  151. end function
  152. public function integer p_getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1
  153. IF arg_billid <= 0 THEN
  154. rslt = 0
  155. arG_MSG = "非法单据唯一码"
  156. GOTO ext
  157. END IF
  158. SELECT u_mtrlware_trans.billcode,
  159. u_mtrlware_trans.mtrlwareid,
  160. u_mtrlware_trans.storageid,
  161. u_mtrlware_trans.mtrlid,
  162. u_mtrlware_trans.relid,
  163. u_mtrlware_trans.plancode,
  164. u_mtrlware_trans.status,
  165. u_mtrlware_trans.transqty,
  166. u_mtrlware_trans.addqty,
  167. u_mtrlware_trans.billdate,
  168. u_mtrlware_trans.inrep,
  169. u_mtrlware_trans.flag,
  170. u_mtrlware_trans.dscrp,
  171. u_mtrlware_trans.part,
  172. u_mtrlware_trans.cost,
  173. u_mtrlware_trans.woodcode,
  174. u_mtrlware_trans.pcode
  175. INTO :billcode,
  176. :mtrlwareid,
  177. :storageid,
  178. :mtrlid,
  179. :relid,
  180. :plancode,
  181. :status,
  182. :transqty,
  183. :addqty,
  184. :billdate,
  185. :inrep,
  186. :flag,
  187. :dscrp,
  188. :part,
  189. :cost,
  190. :woodcode,
  191. :pcode
  192. FROM u_mtrlware_trans
  193. WHERE u_mtrlware_trans.billid = :arg_billid
  194. AND scid = :arg_scid
  195. Using commit_transaction;
  196. IF commit_transaction.SQLCode <> 0 THEN
  197. rslt = 0
  198. arG_MSG = "查询操作失败(错误进仓单唯一码),进仓单"+commit_transaction.SQLErrText
  199. GOTO ext
  200. END IF
  201. billid = arg_billid
  202. scid = arg_scid
  203. ext:
  204. IF rslt = 0 THEN p_reset()
  205. RETURN rslt
  206. end function
  207. public function integer del (long arg_scid, long arg_billid, ref string arg_msg, boolean arg_ifcommit);int rslt = 1
  208. if arg_scid < 0 then
  209. arg_msg = '请选择分部'
  210. rslt = 0
  211. goto ext
  212. end if
  213. if arg_billid = 0 then
  214. rslt = 0
  215. arg_msg = "没有删除对象,操作取消"
  216. goto ext
  217. end if
  218. rslt = p_getinfo(arg_scid,arg_billid,arg_msg)
  219. if rslt = 0 then goto ext
  220. if flag = 1 then
  221. rslt = 0
  222. arg_msg = "单据已经审核,不可以删除"
  223. goto ext
  224. end if
  225. delete from u_mtrlware_transmx
  226. where u_mtrlware_transmx.billid = :arg_billid
  227. and scid = :arg_scid using commit_transaction;
  228. if commit_transaction.sqlcode <> 0 then
  229. rslt = 0
  230. arg_msg = "删除单据明细操作失败"+"~n"+commit_transaction.sqlerrtext
  231. goto ext
  232. end if
  233. delete from u_mtrlware_trans
  234. where u_mtrlware_trans.billid = :arg_billid
  235. and scid = :arg_scid using commit_transaction;
  236. if commit_transaction.sqlcode <> 0 then
  237. rslt = 0
  238. arg_msg = "删除单据操作失败"+"~n"+commit_transaction.sqlerrtext
  239. goto ext
  240. end if
  241. it_newbegin = false
  242. it_updatebegin = false
  243. ext:
  244. if rslt=0 then
  245. rollback using commit_transaction;
  246. elseif rslt=1 and arg_ifcommit then
  247. commit using commit_transaction;
  248. end if
  249. p_reset()
  250. return rslt
  251. end function
  252. public function integer add_dscrp (long arg_scid, long arg_billid, string arg_newdescppart, ref string arg_msg);Int rslt = 1
  253. arg_newdescppart = Trim(arg_newdescppart)
  254. IF it_updatebegin Or it_newbegin THEN
  255. rslt = 0
  256. arg_msg = "编辑状态下不可用"
  257. GOTO ext
  258. END IF
  259. IF arg_newdescppart = '' THEN
  260. rslt = 0
  261. arg_msg = "要添加内容为空,操作取消"
  262. GOTO ext
  263. END IF
  264. rslt = p_getinfo(arg_scid,arg_billid,arg_msg)
  265. IF rslt = 0 THEN GOTO ext
  266. IF flag = 0 THEN
  267. rslt = 0
  268. arg_msg = "非审核状态下不可用"
  269. GOTO ext
  270. END IF
  271. UPDATE u_mtrlware_trans
  272. SET dscrp = dscrp+' '+:arg_newdescppart
  273. WHERE u_mtrlware_trans.billid = :billid
  274. And scid = :scid Using commit_transaction;
  275. IF commit_transaction.SQLCode <> 0 THEN
  276. ROLLBACK Using commit_transaction;
  277. rslt = 0
  278. arg_msg = "添加单据备注操作失败"+"~n"+commit_transaction.SQLErrText
  279. GOTO ext
  280. END IF
  281. COMMIT Using commit_transaction;
  282. dscrp = dscrp+' '+arg_newdescppart
  283. ext: Return (rslt)
  284. end function
  285. public function integer getinfo (long arg_scid, long arg_billid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0
  286. sum_transqty = 0
  287. IF arg_billid <= 0 THEN
  288. rslt = 0
  289. arg_msg = "非法单据唯一码"
  290. GOTO ext
  291. END IF
  292. rslt = p_getinfo(arg_scid,arg_billid,arg_msg)
  293. IF rslt = 0 THEN GOTO ext
  294. //用游标读取明细
  295. DECLARE cur_transmx CURSOR FOR
  296. SELECT u_mtrlware_transmx.printid,
  297. u_mtrlware_transmx.mtrlid,
  298. u_mtrlware_transmx.plancode,
  299. u_mtrlware_transmx.status,
  300. u_mtrlware_transmx.qty,
  301. u_mtrlware_transmx.addqty,
  302. u_mtrlware_transmx.fprice,
  303. u_mtrlware_transmx.rebate,
  304. u_mtrlware_transmx.price,
  305. u_mtrlware_transmx.mxdscrp,
  306. u_mtrldef.mtrlcode,
  307. u_mtrlware_transmx.rel_cusid_sptid,
  308. u_mtrlware_transmx.woodcode,
  309. u_mtrlware_transmx.pcode
  310. FROM u_mtrlware_transmx,u_mtrldef
  311. WHERE u_mtrlware_transmx.billid = :arg_billid AND
  312. u_mtrlware_transmx.mtrlid = u_mtrldef.mtrlid AND
  313. u_mtrlware_transmx.scid = :arg_scid Using commit_transaction;
  314. OPEN cur_transmx;
  315. FETCH cur_transmx INTO :billmx[i].printid,:billmx[i].mtrlid,:billmx[i].plancode,
  316. :billmx[i].status,:billmx[i].qty,:billmx[i].addqty,:billmx[i].fprice,
  317. :billmx[i].rebate,:billmx[i].price,
  318. :billmx[i].mxdscrp,:billmx[i].mtrlcode,
  319. :billmx[i].rel_cusid_sptid,
  320. :billmx[i].woodcode,
  321. :billmx[i].pcode;
  322. DO WHILE commit_transaction.SQLCode = 0
  323. sum_transqty = sum_transqty + billmx[i].qty
  324. i++
  325. FETCH cur_transmx INTO :billmx[i].printid,:billmx[i].mtrlid,:billmx[i].plancode,
  326. :billmx[i].status,:billmx[i].qty,:billmx[i].addqty,:billmx[i].fprice,
  327. :billmx[i].rebate,:billmx[i].price,
  328. :billmx[i].mxdscrp,:billmx[i].mtrlcode,
  329. :billmx[i].rel_cusid_sptid,
  330. :billmx[i].woodcode,
  331. :billmx[i].pcode;
  332. LOOP
  333. CLOSE cur_transmx;
  334. //检验明细是否读入完整
  335. SELECT count(*) INTO :no_mxcheck
  336. FROM u_mtrlware_transmx
  337. WHERE u_mtrlware_transmx.billid = :arg_billid
  338. And scid = :arg_scid Using commit_transaction;
  339. IF commit_transaction.SQLCode <> 0 THEN
  340. rslt = 0
  341. arg_msg = "查询操作失败,进仓单明细数量"
  342. GOTO ext
  343. END IF
  344. IF i <> (no_mxcheck+1) THEN
  345. rslt = 0
  346. arg_msg = "查询操作失败,进仓单明细"
  347. GOTO ext
  348. END IF
  349. billid = arg_billid
  350. scid = arg_scid
  351. it_mxbt = i - 1
  352. it_newbegin = False
  353. it_updatebegin = False
  354. ext:
  355. IF rslt = 0 THEN p_reset()
  356. RETURN rslt
  357. end function
  358. public function integer save (boolean arg_ifcommit, ref string arg_msg);Integer rslt = 1,cnt = 0,i
  359. DateTime server_dt
  360. Long ls_newid
  361. String ls_sccode
  362. Long i_mtrlid
  363. Long i_relid
  364. String i_plancode
  365. String i_status
  366. Long i_storageid
  367. String i_woodcode
  368. String i_pcode
  369. IF IsNull(mtrlwareid) THEN mtrlwareid = 0
  370. IF IsNull(storageid) THEN storageid = 0
  371. IF IsNull(cost) THEN cost = 0
  372. IF IsNull(inrep) THEN inrep = ''
  373. IF IsNull(part) THEN part = ''
  374. IF IsNull(dscrp) THEN dscrp = ''
  375. IF IsNull(transqty) THEN transqty = 0
  376. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  377. rslt = 0
  378. arg_msg = "非编辑状态不可以提交"
  379. GOTO ext
  380. END IF
  381. SELECT Top 1 getdate() INTO :server_dt FROM u_user USING commit_transaction ;
  382. //取得系统时间,借用操作员表
  383. IF commit_transaction.SQLCode <> 0 THEN
  384. rslt = 0
  385. arg_msg = "查询操作失败,日期 "
  386. GOTO ext
  387. END IF
  388. IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空
  389. rslt = 0
  390. arg_msg = "没有正确进仓内容"
  391. GOTO ext
  392. END IF
  393. cnt = 0
  394. //检查仓库
  395. SELECT count(*)
  396. INTO :cnt
  397. FROM u_storage
  398. Where u_storage.storageid = :storageid USING commit_transaction ;
  399. IF commit_transaction.SQLCode <> 0 THEN
  400. rslt = 0
  401. arg_msg = "查询操作失败,仓库"
  402. GOTO ext
  403. END IF
  404. IF cnt = 0 THEN
  405. rslt = 0
  406. arg_msg = "错误的仓库编号: "+String(storageid)
  407. GOTO ext
  408. END IF
  409. IF Year(Date(billdate)) < 2000 OR IsNull(billdate) THEN
  410. rslt = 0
  411. arg_msg = "缺少进仓发生时间或不合理"
  412. GOTO ext
  413. END IF
  414. IF transqty <= 0 THEN
  415. arg_msg = '请输入正确的转换数量'
  416. rslt = 0
  417. GOTO ext
  418. END IF
  419. IF transqty <> sum_transqty THEN
  420. arg_msg = '转换与被转换数量不相等'
  421. rslt = 0
  422. GOTO ext
  423. END IF
  424. //====================================================================
  425. // Script - save ( boolean arg_ifcommit, ref string arg_msg )
  426. // Reason:
  427. //--------------------------------------------------------------------
  428. // Modified By: yyx Date: 2004.01.02
  429. //--------------------------------------------------------------------
  430. IF DaysAfter(Date(String(server_dt,'yyyy-mm-dd')),Date(String(billdate,'yyyy-mm-dd'))) > 30 THEN
  431. rslt = 0
  432. arg_msg = '进仓日期错误,日期不能超前系统日期'
  433. GOTO ext
  434. END IF
  435. IF DaysAfter(Date(String(billdate,'yyyy-mm-dd')),Date(String(server_dt,'yyyy-mm-dd'))) > 30 THEN
  436. rslt = 0
  437. arg_msg = '进仓日期错误,日期不能落后系统日期'
  438. GOTO ext
  439. END IF
  440. //====================================================================
  441. SELECT mtrlid,sptid,storageid,plancode,status,woodcode,pcode
  442. INTO :i_mtrlid,:i_relid,:i_storageid,:i_plancode,:i_status,
  443. :i_woodcode,:i_pcode
  444. FROM u_mtrlware
  445. WHERE scid = :scid
  446. AND mtrlwareid = :mtrlwareid
  447. USING commit_transaction;
  448. IF commit_transaction.SQLCode <> 0 THEN
  449. arg_msg = '查询相关转换库存失败>>' + commit_transaction.SQLErrText
  450. rslt = 0
  451. GOTO ext
  452. END IF
  453. //检查成本价调整单
  454. cnt = 0
  455. SELECT count(*)
  456. INTO :cnt
  457. FROM u_updatecost,u_updatecostmx
  458. WHERE u_updatecost.wareid = u_updatecostmx.wareid AND
  459. u_updatecost.flag = 0 AND
  460. u_updatecostmx.mtrlwareid = :mtrlwareid AND
  461. u_updatecost.scid = :scid USING commit_transaction;
  462. IF commit_transaction.SQLCode <> 0 THEN
  463. rslt = 0
  464. arg_msg = "查询成本价调整单操作失败"
  465. GOTO ext
  466. END IF
  467. if cnt>0 then
  468. rslt = 0
  469. arg_msg = "已开成本价调整单,请选审核"
  470. GOTO ext
  471. END IF
  472. IF IsNull(i_mtrlid) THEN i_mtrlid = 0
  473. IF IsNull(i_relid) THEN i_relid = 0
  474. IF IsNull(i_storageid) THEN i_storageid = 0
  475. IF IsNull(i_plancode) THEN i_plancode = ''
  476. IF IsNull(i_status) THEN i_status = ''
  477. IF IsNull(i_woodcode) THEN i_woodcode = ''
  478. IF IsNull(i_pcode) THEN i_pcode = ''
  479. IF i_storageid <> storageid THEN
  480. arg_msg = '仓库与库存不符'
  481. rslt = 0
  482. GOTO ext
  483. END IF
  484. mtrlid = i_mtrlid
  485. relid = i_relid
  486. storageid = i_storageid
  487. plancode = i_plancode
  488. status = i_status
  489. woodcode = i_woodcode
  490. pcode = i_pcode
  491. ////////////////////////////////////////////////开始区分:新建/更新 处理
  492. IF billid = 0 THEN //新建
  493. ls_newid = f_sys_scidentity(scid,"u_mtrlware_trans","billid",arg_msg,if_getid_ture,commit_transaction)
  494. IF ls_newid <= 0 THEN
  495. rslt = 0
  496. GOTO ext
  497. END IF
  498. //取分部代号
  499. IF f_get_sccode(scid,commit_transaction,ls_sccode,arg_msg) = 0 THEN
  500. rslt = 0
  501. GOTO ext
  502. END IF
  503. billcode = getid(scid,ls_sccode + 'MT',Date(server_dt),if_getid_ture,commit_transaction)
  504. IF billcode = "err" THEN
  505. billcode = ''
  506. rslt = 0
  507. arg_msg = "无法获取单据编号"+"~n"+commit_transaction.SQLErrText
  508. GOTO ext
  509. END IF
  510. INSERT INTO u_mtrlware_trans
  511. ( scid,
  512. billid,
  513. billcode,
  514. mtrlwareid,
  515. storageid,
  516. mtrlid,
  517. relid,
  518. plancode,
  519. status,
  520. transqty,
  521. addqty,
  522. billdate,
  523. inrep,
  524. part,
  525. dscrp,
  526. cost,
  527. opdate,
  528. opemp,
  529. woodcode,
  530. pcode)
  531. VALUES (:scid,
  532. :ls_newid,
  533. :billcode,
  534. :mtrlwareid,
  535. :storageid,
  536. :mtrlid,
  537. :relid,
  538. :plancode,
  539. :status,
  540. :transqty,
  541. :addqty,
  542. :billdate,
  543. :inrep,
  544. :part,
  545. :dscrp,
  546. :cost,
  547. :server_dt,
  548. :publ_operator,
  549. :woodcode,
  550. :pcode) USING commit_transaction ;
  551. IF commit_transaction.SQLCode <> 0 THEN
  552. rslt = 0
  553. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_mtrlware_trans') > 0 THEN
  554. arg_msg = '插入操作失败,关键字单据ID重复'
  555. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'IX_u_mtrlware_trans') > 0 THEN
  556. arg_msg = '插入操作失败,单据编号重复'
  557. ELSE
  558. arg_msg = "插入操作失败"+"~n"+commit_transaction.SQLErrText
  559. END IF
  560. GOTO ext
  561. END IF
  562. //读取新inwareid
  563. billid = ls_newid
  564. FOR i = 1 TO it_mxbt
  565. INSERT INTO u_mtrlware_transmx
  566. (scid,
  567. billid,
  568. printid,
  569. mtrlid,
  570. plancode,
  571. status,
  572. qty,
  573. addqty,
  574. fprice,
  575. rebate,
  576. price,
  577. mxdscrp,
  578. rel_cusid_sptid,
  579. woodcode,
  580. pcode)
  581. VALUES (
  582. :scid,
  583. :ls_newid,
  584. :billmx[i].printid,
  585. :billmx[i].mtrlid,
  586. :billmx[i].plancode,
  587. :billmx[i].status,
  588. :billmx[i].qty,
  589. :billmx[i].addqty,
  590. :billmx[i].fprice,
  591. :billmx[i].rebate,
  592. :billmx[i].price,
  593. :billmx[i].mxdscrp,
  594. :billmx[i].rel_cusid_sptid,
  595. :billmx[i].woodcode,
  596. :billmx[i].pcode
  597. ) USING commit_transaction;
  598. IF commit_transaction.SQLCode <> 0 THEN
  599. billid = 0 //还原billid
  600. rslt = 0
  601. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_mtrlware_transmx') > 0 THEN
  602. arg_msg = '插入明细操作失败,关键字单据ID,序号重复'
  603. ELSE
  604. arg_msg = "插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  605. END IF
  606. GOTO ext
  607. END IF
  608. NEXT
  609. ELSE //////////////////////////////////////////////////更新
  610. UPDATE u_mtrlware_trans
  611. SET mtrlwareid = :mtrlwareid,
  612. storageid = :storageid,
  613. mtrlid = :mtrlid,
  614. relid = :relid,
  615. plancode = :plancode,
  616. status = :status,
  617. transqty = :transqty,
  618. addqty = :addqty,
  619. billdate = :billdate,
  620. inrep = :inrep,
  621. part = :part,
  622. dscrp = :dscrp,
  623. cost = :cost,
  624. moddate = :server_dt,
  625. modemp = :publ_operator,
  626. woodcode = :woodcode,
  627. pcode = :pcode
  628. WHERE u_mtrlware_trans.billid = :billid
  629. AND u_mtrlware_trans.scid = :scid
  630. AND flag = 0 USING commit_transaction;
  631. IF commit_transaction.SQLCode <> 0 OR commit_transaction.SQLNRows <= 0 THEN
  632. rslt = 0
  633. arg_msg = "更新单据操作失败"+"~n"+commit_transaction.SQLErrText
  634. GOTO ext
  635. END IF
  636. //删除原有明细
  637. DELETE FROM u_mtrlware_transmx
  638. WHERE u_mtrlware_transmx.billid = :billid
  639. AND u_mtrlware_transmx.scid = :scid USING commit_transaction;
  640. IF commit_transaction.SQLCode <> 0 THEN
  641. rslt = 0
  642. arg_msg = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  643. GOTO ext
  644. END IF
  645. FOR i = 1 TO it_mxbt
  646. INSERT INTO u_mtrlware_transmx
  647. (scid,
  648. billid,
  649. printid,
  650. mtrlid,
  651. plancode,
  652. status,
  653. qty,
  654. addqty,
  655. fprice,
  656. rebate,
  657. price,
  658. mxdscrp,
  659. rel_cusid_sptid,
  660. woodcode,
  661. pcode)
  662. VALUES (
  663. :scid,
  664. :billid,
  665. :billmx[i].printid,
  666. :billmx[i].mtrlid,
  667. :billmx[i].plancode,
  668. :billmx[i].status,
  669. :billmx[i].qty,
  670. :billmx[i].addqty,
  671. :billmx[i].fprice,
  672. :billmx[i].rebate,
  673. :billmx[i].price,
  674. :billmx[i].mxdscrp,
  675. :billmx[i].rel_cusid_sptid,
  676. :billmx[i].woodcode,
  677. :billmx[i].pcode
  678. ) USING commit_transaction;
  679. IF commit_transaction.SQLCode <> 0 THEN
  680. rslt = 0
  681. IF Pos(Lower(commit_transaction.SQLErrText),'PK_u_mtrlware_transmx') > 0 THEN
  682. arg_msg = '插入明细操作失败,关键字单据ID,序号重复'
  683. ELSE
  684. arg_msg = "插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  685. END IF
  686. GOTO ext
  687. END IF
  688. NEXT
  689. END IF
  690. it_newbegin = FALSE
  691. it_updatebegin = FALSE
  692. ext:
  693. IF rslt = 0 THEN
  694. ROLLBACK USING commit_transaction;
  695. p_clearmx()
  696. ELSEIF rslt = 1 AND arg_ifcommit THEN
  697. COMMIT USING commit_transaction;
  698. END IF
  699. RETURN rslt
  700. end function
  701. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  702. DateTime null_dt
  703. String ls_mtrlcode
  704. Decimal ls_planprice
  705. Long ll_inware_in
  706. uo_inware uo_in
  707. uo_in = Create uo_inware
  708. uo_in.commit_transaction = commit_transaction
  709. uo_in.if_getid_ture = False
  710. uo_in.sysautobuild = True
  711. SetNull(null_dt)
  712. IF billid = 0 THEN
  713. rslt = 0
  714. arg_msg = "没有审核对象"
  715. GOTO ext
  716. END IF
  717. IF it_newbegin Or it_updatebegin THEN
  718. rslt = 0
  719. arg_msg = "编辑状态下不可以执行审核"
  720. GOTO ext
  721. END IF
  722. IF flag = 0 THEN
  723. rslt = 0
  724. arg_msg = "单据还未审核"
  725. GOTO ext
  726. END IF
  727. UPDATE u_mtrlware_trans
  728. SET auditingrep = '',
  729. auditingdate = :null_dt,
  730. flag = 0
  731. WHERE u_mtrlware_trans.billid = :billid
  732. And flag = 1 And scid = :scid Using commit_transaction;
  733. IF commit_transaction.SQLCode <> 0 THEN
  734. rslt = 0
  735. arg_msg = "审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  736. GOTO ext
  737. ELSEIF commit_transaction.SQLNRows = 0 THEN
  738. rslt = 0
  739. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  740. GOTO ext
  741. END IF
  742. SELECT mtrlcode,planprice INTO :ls_mtrlcode,:ls_planprice
  743. FROM u_mtrldef
  744. Where mtrlid = :mtrlid;
  745. IF sqlca.SQLCode <> 0 THEN
  746. arg_msg = '查询产品资料失败'
  747. rslt = 0
  748. GOTO ext
  749. END IF
  750. //改成撤审删除相关进仓单; 原来只是直接更新库存, 20131021 lhd
  751. SELECT count(*)
  752. INTO :cnt
  753. FROM u_inware
  754. WHERE scid = :scid
  755. AND relid = :billid
  756. AND part = :billcode
  757. AND billtype = 8
  758. And sptname = '客存调整单审核自动生成';
  759. IF sqlca.SQLCode <> 0 THEN
  760. arg_msg = '查询相关进仓单失败'+sqlca.SQLErrText
  761. rslt = 0
  762. GOTO ext
  763. END IF
  764. IF cnt > 0 THEN
  765. SELECT inwareid INTO :ll_inware_in
  766. FROM u_inware
  767. WHERE scid = :scid
  768. AND relid = :billid
  769. AND part = :billcode
  770. AND billtype = 8
  771. And sptname = '客存调整单审核自动生成';
  772. IF sqlca.SQLCode <> 0 THEN
  773. arg_msg = '查询相关进仓单失败'+sqlca.SQLErrText
  774. rslt = 0
  775. GOTO ext
  776. END IF
  777. IF uo_in.getinfo(scid,ll_inware_in,arg_msg) = 0 THEN
  778. rslt = 0
  779. GOTO ext
  780. END IF
  781. IF uo_in.c_auditing(False,arg_msg) = 0 THEN
  782. rslt = 0
  783. GOTO ext
  784. END IF
  785. IF uo_in.del(scid,ll_inware_in,arg_msg,False) = 0 THEN
  786. rslt = 0
  787. GOTO ext
  788. END IF
  789. ELSE //此段的意义在于兼容旧数据,以后需删掉
  790. //被转换减库存
  791. IF f_inware_update_mtrlware(scid,mtrlid,ls_mtrlcode,&
  792. storageid,plancode,status,transqty,addqty,cost,ls_planprice,&
  793. relid,0,woodcode,pcode,arg_msg,commit_transaction) = 0 THEN
  794. rslt = 0
  795. GOTO ext
  796. END IF
  797. //转换加库存
  798. FOR i = 1 To it_mxbt
  799. IF f_inware_update_mtrlware(scid,billmx[i].mtrlid,billmx[i].mtrlcode,&
  800. storageid,billmx[i].plancode,billmx[i].status,&
  801. 0 - billmx[i].qty,0 - billmx[i].addqty,billmx[i].price,ls_planprice,&
  802. billmx[i].rel_cusid_sptid,0,&
  803. billmx[i].woodcode,billmx[i].pcode,arg_msg,commit_transaction) = 0 THEN
  804. rslt = 0
  805. GOTO ext
  806. END IF
  807. NEXT
  808. END IF
  809. flag = 0
  810. ext:
  811. Destroy uo_in
  812. IF rslt = 0 THEN
  813. ROLLBACK Using commit_transaction;
  814. ELSEIF rslt = 1 And arg_ifcommit THEN
  815. COMMIT Using commit_transaction;
  816. END IF
  817. RETURN rslt
  818. end function
  819. public function integer auditing (boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt = 0,i
  820. String ls_mtrlcode
  821. Decimal ls_planprice
  822. Long ll_printid, ll_sptid
  823. String ls_unit
  824. uo_inware uo_in
  825. uo_in = Create uo_inware
  826. uo_in.if_getid_ture = False
  827. IF billid = 0 THEN
  828. rslt = 0
  829. arg_msg = "没有审核对象"
  830. GOTO ext
  831. END IF
  832. IF it_newbegin Or it_updatebegin THEN
  833. rslt = 0
  834. arg_msg = "编辑状态下不可以执行审核"
  835. GOTO ext
  836. END IF
  837. IF flag = 1 THEN
  838. rslt = 0
  839. arg_msg = "单据已经审核"
  840. GOTO ext
  841. END IF
  842. UPDATE u_mtrlware_trans
  843. SET auditingrep = :publ_operator,
  844. auditingdate = getdate(),
  845. flag = 1
  846. WHERE u_mtrlware_trans.billid = :billid
  847. And flag = 0 And scid = :scid Using commit_transaction;
  848. IF commit_transaction.SQLCode <> 0 THEN
  849. rslt = 0
  850. arg_msg = "审核单据操作失败"+"~n"+commit_transaction.SQLErrText
  851. GOTO ext
  852. ELSEIF commit_transaction.SQLNRows = 0 THEN
  853. rslt = 0
  854. arg_msg = "单据正在审核,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  855. GOTO ext
  856. END IF
  857. SELECT mtrlcode,planprice,unit
  858. INTO :ls_mtrlcode,:ls_planprice,:ls_unit
  859. FROM u_mtrldef
  860. Where mtrlid = :mtrlid;
  861. IF sqlca.SQLCode <> 0 THEN
  862. arg_msg = '查询产品资料失败,'+sqlca.SQLErrText
  863. rslt = 0
  864. GOTO ext
  865. END IF
  866. SELECT sptid
  867. INTO :ll_sptid
  868. FROM u_mtrlware
  869. Where mtrlwareid = :mtrlwareid;
  870. IF sqlca.SQLCode <> 0 THEN
  871. arg_msg = '查询库存信息失败,'+sqlca.SQLErrText
  872. rslt = 0
  873. GOTO ext
  874. END IF
  875. //改成生成一张相关进仓单; 原来只是直接更新库存, 20131021 lhd
  876. s_inwaremx s_mx
  877. IF uo_in.newbegin(scid,8,arg_msg) = 0 THEN //
  878. rslt = 0
  879. GOTO ext
  880. END IF
  881. uo_in.indate = billdate // DateTime(today(),time(0)) // 发生时间
  882. uo_in.inrep = publ_operator // 经手人
  883. uo_in.part = billcode //相关部门
  884. uo_in.dscrp = dscrp //备注
  885. uo_in.storageid = storageid
  886. uo_in.sptname = '客存调整单审核自动生成'
  887. uo_in.relid = billid
  888. uo_in.commit_transaction = commit_transaction
  889. uo_in.sysautobuild = True
  890. //生成进仓单 减库存
  891. ll_printid = 1
  892. s_mx.printid = ll_printid
  893. s_mx.mtrlid = mtrlid
  894. s_mx.mtrlcode = ls_mtrlcode
  895. s_mx.plancode = plancode
  896. s_mx.status = status
  897. s_mx.uqty = 0 - transqty
  898. s_mx.addqty = 0 - addqty
  899. s_mx.uprice = cost
  900. s_mx.rebate = 1
  901. s_mx.mxdscrp = ""
  902. s_mx.jgprice = 0
  903. s_mx.relid = 0
  904. s_mx.relprintid = 0
  905. s_mx.ifrel = 0
  906. s_mx.woodcode = woodcode
  907. s_mx.pcode = pcode
  908. s_mx.mtrlcuscode = ''
  909. s_mx.sptid = ll_sptid
  910. s_mx.unit = ls_unit
  911. s_mx.rate = 1
  912. s_mx.formula = ""
  913. s_mx.waredscrp = ""
  914. s_mx.inworkdate = billdate
  915. IF uo_in.acceptmx(s_mx ,arg_msg) = 0 THEN
  916. rslt = 0
  917. GOTO ext
  918. END IF
  919. //生成进仓单 增加库存
  920. FOR i = 1 To it_mxbt
  921. ll_printid++
  922. s_mx.printid = ll_printid
  923. s_mx.mtrlid = billmx[i].mtrlid
  924. s_mx.mtrlcode = billmx[i].mtrlcode
  925. s_mx.plancode = billmx[i].plancode
  926. s_mx.status = billmx[i].status
  927. s_mx.uqty = billmx[i].qty
  928. s_mx.addqty = billmx[i].addqty
  929. s_mx.uprice = billmx[i].price
  930. s_mx.rebate = 1
  931. s_mx.mxdscrp = ""
  932. s_mx.jgprice = 0
  933. s_mx.relid = 0
  934. s_mx.relprintid = 0
  935. s_mx.ifrel = 0
  936. s_mx.woodcode = billmx[i].woodcode
  937. s_mx.pcode = billmx[i].pcode
  938. s_mx.mtrlcuscode = ''
  939. s_mx.sptid = billmx[i].rel_cusid_sptid
  940. s_mx.unit = ls_unit
  941. s_mx.rate = 1
  942. s_mx.formula = ""
  943. s_mx.waredscrp = ""
  944. s_mx.inworkdate = billdate
  945. IF uo_in.acceptmx(s_mx ,arg_msg) = 0 THEN
  946. rslt = 0
  947. GOTO ext
  948. END IF
  949. NEXT
  950. IF uo_in.it_mxbt > 0 THEN
  951. IF uo_in.Save(False,arg_msg) = 0 THEN
  952. rslt = 0
  953. GOTO ext
  954. END IF
  955. IF uo_in.getinfo(scid,uo_in.inwareid,arg_msg) = 0 THEN
  956. rslt = 0
  957. GOTO ext
  958. END IF
  959. IF uo_in.auditing(False,arg_msg) = 0 THEN
  960. rslt = 0
  961. GOTO ext
  962. END IF
  963. END IF
  964. // //被转换减库存
  965. //IF f_inware_update_mtrlware(scid,mtrlid,ls_mtrlcode,&
  966. // storageid,plancode,status,0 - transqty,0 - addqty,cost,ls_planprice,&
  967. // relid,0,woodcode,pcode,arg_msg,commit_transaction) = 0 THEN
  968. // rslt = 0
  969. // GOTO ext
  970. //END IF
  971. //
  972. ////转换加库存
  973. //FOR i = 1 To it_mxbt
  974. // IF f_inware_update_mtrlware(scid,billmx[i].mtrlid,billmx[i].mtrlcode,&
  975. // storageid,billmx[i].plancode,billmx[i].status,&
  976. // billmx[i].qty,billmx[i].addqty,billmx[i].price,ls_planprice,&
  977. // billmx[i].rel_cusid_sptid,0,&
  978. // billmx[i].woodcode,billmx[i].pcode,arg_msg,commit_transaction) = 0 THEN
  979. // rslt = 0
  980. // GOTO ext
  981. // END IF
  982. //NEXT
  983. flag = 1
  984. ext:
  985. Destroy uo_in
  986. IF rslt = 0 THEN
  987. ROLLBACK Using commit_transaction;
  988. ELSEIF rslt = 1 And arg_ifcommit THEN
  989. COMMIT Using commit_transaction;
  990. END IF
  991. RETURN rslt
  992. end function
  993. public function integer acceptmx (long arg_printid, long arg_mtrlid, string arg_plancode, string arg_status, decimal arg_qty, decimal arg_addqty, decimal arg_fprice, decimal arg_rebate, string arg_mxdscrp, long arg_rel_cusid_sptid, ref string arg_msg, string arg_woodcode, string arg_pcode);Long rslt = 1,cnt = 0
  994. String i_mtrlcode
  995. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  996. rslt = 0
  997. arg_msg = "非编辑状态不可以使用,操作取消"
  998. GOTO ext
  999. END IF
  1000. //清除空值
  1001. IF IsNull(arg_printid) THEN arg_printid = 0
  1002. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  1003. IF IsNull(arg_plancode) THEN arg_plancode = ''
  1004. IF IsNull(arg_status) THEN arg_status = ''
  1005. IF IsNull(arg_qty) THEN arg_qty = 0
  1006. IF IsNull(arg_addqty) THEN arg_addqty = 0
  1007. IF IsNull(arg_fprice) THEN arg_fprice = 0
  1008. IF IsNull(arg_rebate) THEN arg_rebate = 0
  1009. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  1010. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  1011. IF IsNull(arg_pcode) THEN arg_pcode = ''
  1012. IF IsNull(arg_rel_cusid_sptid) THEN arg_rel_cusid_sptid = 0
  1013. // 如果进仓数量为 0,或物料编号为空,则不作任何处理
  1014. IF arg_mtrlid = 0 OR arg_qty = 0 THEN
  1015. rslt = 1
  1016. GOTO ext
  1017. END IF
  1018. //检查物料id
  1019. SELECT mtrlcode
  1020. INTO :i_mtrlcode
  1021. FROM u_mtrldef
  1022. Where u_mtrldef.mtrlid = :arg_mtrlid USING commit_transaction ;
  1023. IF commit_transaction.SQLCode <> 0 THEN
  1024. rslt = 0
  1025. arg_msg = "查询操作失败,物料或产品资料"
  1026. GOTO ext
  1027. END IF
  1028. cnt = 0
  1029. SELECT count(*) INTO :cnt
  1030. FROM u_cust
  1031. Where cusid = :arg_rel_cusid_sptid USING commit_transaction ;
  1032. IF commit_transaction.SQLCode <> 0 THEN
  1033. arg_msg = '查询客户资料失败'
  1034. rslt = 0
  1035. GOTO ext
  1036. END IF
  1037. IF arg_fprice * arg_rebate < 0 THEN //检查进仓价
  1038. rslt = 0
  1039. arg_msg = "物料或产品:" + String(i_mtrlcode)+" 单价错误"
  1040. GOTO ext
  1041. END IF
  1042. /////////////////////
  1043. //检查成本价调整单
  1044. Long ll_mtrlwareid
  1045. SELECT mtrlwareid
  1046. INTO :ll_mtrlwareid
  1047. FROM u_mtrlware
  1048. WHERE ( mtrlid = :arg_mtrlid ) AND
  1049. ( plancode = :arg_plancode ) AND
  1050. ( storageid = :storageid ) AND
  1051. ( scid = :scid ) AND
  1052. ( status = :arg_status ) AND
  1053. ( sptid = :arg_rel_cusid_sptid) AND
  1054. ( dxflag = 0) AND
  1055. ( woodcode = :arg_woodcode) AND
  1056. ( pcode = :arg_pcode) USING commit_transaction;
  1057. IF commit_transaction.SQLCode = -1 THEN
  1058. arg_msg = "第" + String(arg_printid) + "行,查询库存信息失败!"
  1059. rslt = 0
  1060. GOTO ext
  1061. ELSEIF ll_mtrlwareid > 0 THEN
  1062. cnt = 0
  1063. SELECT count(*)
  1064. INTO :cnt
  1065. FROM u_updatecost,u_updatecostmx
  1066. WHERE u_updatecost.wareid = u_updatecostmx.wareid AND
  1067. u_updatecost.flag = 0 AND
  1068. u_updatecostmx.mtrlwareid = :mtrlwareid AND
  1069. u_updatecost.scid = :scid USING commit_transaction;
  1070. IF commit_transaction.SQLCode <> 0 THEN
  1071. rslt = 0
  1072. arg_msg = "第" + String(arg_printid) + "行,查询成本价调整单操作失败"
  1073. GOTO ext
  1074. END IF
  1075. IF cnt > 0 THEN
  1076. rslt = 0
  1077. arg_msg = "第" + String(arg_printid) + "行," + i_mtrlcode + "已开成本价调整单,请先审核"
  1078. GOTO ext
  1079. END IF
  1080. END IF
  1081. //写入内容
  1082. it_mxbt++
  1083. billmx[it_mxbt].printid = arg_printid
  1084. billmx[it_mxbt].mtrlid = arg_mtrlid
  1085. billmx[it_mxbt].mtrlcode = i_mtrlcode
  1086. billmx[it_mxbt].plancode = arg_plancode
  1087. billmx[it_mxbt].status = arg_status
  1088. billmx[it_mxbt].qty = arg_qty
  1089. billmx[it_mxbt].addqty = arg_addqty
  1090. billmx[it_mxbt].fprice = arg_fprice
  1091. billmx[it_mxbt].rebate = arg_rebate
  1092. billmx[it_mxbt].price = arg_fprice * arg_rebate
  1093. billmx[it_mxbt].mxdscrp = arg_mxdscrp
  1094. billmx[it_mxbt].rel_cusid_sptid = arg_rel_cusid_sptid
  1095. billmx[it_mxbt].woodcode = arg_woodcode
  1096. billmx[it_mxbt].pcode = arg_pcode
  1097. sum_transqty = sum_transqty + arg_qty
  1098. ext:
  1099. IF rslt = 0 THEN
  1100. p_clearmx()
  1101. arg_msg = "第" + String(arg_printid) + "行," + arg_msg
  1102. END IF
  1103. Return(rslt)
  1104. end function
  1105. on uo_mtrlware_trans.create
  1106. call super::create
  1107. TriggerEvent( this, "constructor" )
  1108. end on
  1109. on uo_mtrlware_trans.destroy
  1110. TriggerEvent( this, "destructor" )
  1111. call super::destroy
  1112. end on