uo_dismantle_install.sru 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865
  1. $PBExportHeader$uo_dismantle_install.sru
  2. forward
  3. global type uo_dismantle_install from nonvisualobject
  4. end type
  5. type s_dismantle_install from structure within uo_dismantle_install
  6. end type
  7. end forward
  8. type s_dismantle_install from structure
  9. long printid
  10. long storageid
  11. long mtrlwareid
  12. long mtrlid
  13. decimal { 10 } qty
  14. decimal { 10 } price
  15. string status
  16. string plancode
  17. string woodcode
  18. string mxdscrp
  19. string mtrlcode
  20. string pcode
  21. integer dxflag
  22. long sptid
  23. long standardqty
  24. integer ifunit
  25. decimal { 5 } rate
  26. string uunit
  27. string unit
  28. string mtrlcuscode
  29. string location
  30. end type
  31. global type uo_dismantle_install from nonvisualobject
  32. end type
  33. global uo_dismantle_install uo_dismantle_install
  34. type variables
  35. PUBLIC PROTECTEDWRITE Long billid
  36. PUBLIC PROTECTEDWRITE String billcode
  37. PUBLIC PROTECTEDWRITE DateTime opdate
  38. PUBLIC PROTECTEDWRITE String opemp
  39. PUBLIC PROTECTEDWRITE DateTime moddate
  40. PUBLIC PROTECTEDWRITE String modemp
  41. PUBLIC PROTECTEDWRITE Int flag
  42. PUBLIC PROTECTEDWRITE DateTime auditingdate
  43. PUBLIC PROTECTEDWRITE String auditingrep
  44. PUBLIC PROTECTEDWRITE Int billtype
  45. DateTime billdate
  46. Long relid
  47. String reason
  48. Long storageid
  49. Long mtrlid
  50. Long mtrlwareid
  51. String status
  52. String pcode
  53. String plancode
  54. String woodcode
  55. String dscrp
  56. Decimal qty
  57. Int buildtype
  58. String rep
  59. Decimal price
  60. String mtrlcode
  61. Int dxflag
  62. Long sptid
  63. Int ifunit
  64. String uunit,unit
  65. Decimal rate
  66. String mtrlcuscode
  67. String location
  68. int kind
  69. PRIVATE:
  70. s_dismantle_install d_i[] //明细结构数组
  71. Long it_mxbt = 0 //明细结构数组末指针
  72. Boolean it_newbegin = FALSE //新建标志
  73. Boolean it_updatebegin = FALSE//修改标志
  74. end variables
  75. forward prototypes
  76. public function integer p_clearmx ()
  77. public function integer p_reset ()
  78. public function integer updatebegin (long arg_billid, ref string arg_msg)
  79. public function integer save (ref string arg_msg, boolean arg_ifcommit)
  80. public function integer del (long arg_billid, ref string arg_msg)
  81. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg)
  82. public function integer p_getinfo (long arg_billid, ref string arg_msg)
  83. public function integer getinfo (long arg_billid, ref string arg_msg)
  84. public function integer auditing (string arg_auditingrep, boolean arg_ifcommit, ref string arg_msg)
  85. public function integer newbegin (integer arg_billtype, ref string arg_msg)
  86. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg)
  87. public function integer acceptmx (long arg_printid, long arg_storageid, long arg_mtrlwareid, long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_status, string arg_plancode, string arg_woodcode, string arg_mxdscrp, string arg_mtrlcode, string arg_pcode, integer arg_dxflag, integer arg_sptid, ref string arg_msg, decimal arg_standardqty, string arg_mtrlcuscode, string arg_location)
  88. public function integer uof_update_waredate (boolean arg_ifcommit, ref string arg_msg)
  89. end prototypes
  90. public function integer p_clearmx ();//INT p_clearmx()
  91. //清除明细
  92. it_mxbt=0
  93. RETURN 1
  94. end function
  95. public function integer p_reset ();//INT p_RESET()
  96. //清除对象及其明细
  97. billid = 0
  98. billcode = ''
  99. opemp = ''
  100. auditingrep = ''
  101. flag = 0
  102. relid = 0
  103. reason = ''
  104. storageid = 0
  105. mtrlid = 0
  106. mtrlwareid = 0
  107. status = ''
  108. plancode = ''
  109. woodcode = ''
  110. dscrp = ''
  111. qty = 0
  112. mtrlcuscode =''
  113. location = ''
  114. kind = 0
  115. it_newbegin = FALSE
  116. it_updatebegin = FALSE
  117. //清除明细
  118. P_CLEARMX()
  119. RETURN 1
  120. end function
  121. public function integer updatebegin (long arg_billid, ref string arg_msg);int rslt = 1
  122. if arg_billid <= 0 then
  123. billid = 0
  124. goto ext
  125. end if
  126. if p_getinfo(arg_billid,arg_msg) = 0 then
  127. rslt = 0
  128. goto ext
  129. end if
  130. if flag = 1 then
  131. rslt = 0
  132. arg_msg = '单据已经审核,不可以修改'
  133. goto ext
  134. end if
  135. if buildtype = 1 then
  136. rslt = 0
  137. arg_msg = '单据为自动建立单据,不可以修改'
  138. goto ext
  139. end if
  140. billid = arg_billid
  141. p_clearmx()
  142. it_newbegin = false
  143. it_updatebegin = true
  144. ext:
  145. if rslt = 0 then p_reset()
  146. return rslt
  147. end function
  148. public function integer save (ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,i,cnt = 0
  149. DateTime server_dt
  150. Long ls_newid
  151. IF IsNull(reason) THEN reason = ''
  152. IF IsNull(dscrp) THEN dscrp = ''
  153. IF IsNull(plancode) THEN plancode = ''
  154. IF IsNull(relid) THEN relid = 0
  155. IF IsNull(status) THEN status = ''
  156. IF IsNull(woodcode) THEN woodcode = ''
  157. IF IsNull(pcode) THEN pcode = ''
  158. IF IsNull(mtrlcuscode) THEN mtrlcuscode = ''
  159. IF IsNull(location) THEN location = ''
  160. IF IsNull(kind) THEN kind = 0
  161. IF mtrlid = 0 THEN
  162. rslt = 0
  163. arg_msg = '非法物料!'
  164. GOTO ext
  165. END IF
  166. IF qty = 0 THEN
  167. rslt = 0
  168. arg_msg = '装或拆的物料数量不能为零!'
  169. GOTO ext
  170. END IF
  171. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  172. rslt = 0
  173. arg_msg = "非编辑状态不可以提交"
  174. GOTO ext
  175. END IF
  176. SELECT Top 1 getdate() INTO :server_dt FROM u_user;
  177. //取得系统时间,借用操作员表
  178. IF sqlca.SQLCode <> 0 THEN
  179. rslt = 0
  180. arg_msg = "查询操作失败,日期 "
  181. GOTO ext
  182. END IF
  183. IF f_check_inoutdate(storageid,billdate,TRUE,arg_msg) = 0 THEN
  184. rslt = 0
  185. GOTO ext
  186. END IF
  187. ////////////////////////////////////////////////开始区分:新建/更新 处理
  188. IF billid = 0 THEN //新建
  189. ls_newid = f_sys_scidentity(0,"u_dismantle_install","billid",arg_msg,TRUE,id_sqlca)
  190. IF ls_newid <= 0 THEN
  191. rslt = 0
  192. GOTO ext
  193. END IF
  194. billcode = getid(0,"CZ",Date(server_dt),TRUE,sqlca) //取得新单据编号
  195. IF billcode = "err" THEN
  196. billcode = ''
  197. rslt = 0
  198. arg_msg = "无法获取拆装单编号"
  199. GOTO ext
  200. END IF
  201. //
  202. INSERT INTO u_dismantle_install
  203. (billid,
  204. billtype,
  205. billcode,
  206. reason,
  207. billdate,
  208. relid,
  209. storageid,
  210. mtrlid,
  211. mtrlwareid,
  212. status,
  213. plancode,
  214. woodcode,
  215. qty,
  216. dscrp,
  217. buildtype,
  218. price,
  219. rep,
  220. opemp,
  221. pcode,
  222. dxflag,
  223. sptid,
  224. mtrlcuscode,
  225. location,
  226. kind)
  227. VALUES(
  228. :ls_newid,
  229. :billtype,
  230. :billcode,
  231. :reason,
  232. :billdate,
  233. :relid,
  234. :storageid,
  235. :mtrlid,
  236. :mtrlwareid,
  237. :status,
  238. :plancode,
  239. :woodcode,
  240. :qty,
  241. :dscrp,
  242. :buildtype,
  243. :price,
  244. :rep,
  245. :publ_operator,
  246. :pcode,
  247. :dxflag,
  248. :sptid,
  249. :mtrlcuscode,
  250. :location,
  251. :kind);
  252. IF sqlca.SQLCode <> 0 THEN
  253. rslt = 0
  254. arg_msg = "因网络或其它原因导致插入操作失败>>"+"~n"+sqlca.SQLErrText
  255. GOTO ext
  256. END IF
  257. billid = ls_newid
  258. FOR i = 1 TO it_mxbt
  259. INSERT INTO u_dismantle_installmx
  260. ( billid ,
  261. printid,
  262. storageid ,
  263. mtrlwareid ,
  264. mtrlid ,
  265. qty ,
  266. price,
  267. status ,
  268. plancode,
  269. woodcode ,
  270. mxdscrp,
  271. pcode,
  272. dxflag,
  273. sptid,
  274. standardqty,
  275. mtrlcuscode,
  276. location)
  277. VALUES (:ls_newid,
  278. :d_i[i].printid,
  279. :d_i[i].storageid,
  280. :d_i[i].mtrlwareid,
  281. :d_i[i].mtrlid,
  282. :d_i[i].qty,
  283. :d_i[i].price,
  284. :d_i[i].status,
  285. :d_i[i].plancode,
  286. :d_i[i].woodcode,
  287. :d_i[i].mxdscrp,
  288. :d_i[i].pcode,
  289. :d_i[i].dxflag,
  290. :d_i[i].sptid,
  291. :d_i[i].standardqty,
  292. :d_i[i].mtrlcuscode,
  293. :d_i[i].location);
  294. IF sqlca.SQLCode <> 0 THEN
  295. billid = 0 //还原billid
  296. rslt = 0
  297. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  298. ROLLBACK ;
  299. GOTO ext
  300. END IF
  301. NEXT
  302. //
  303. ELSE //////////////////////////////////////////////////更新
  304. UPDATE u_dismantle_install
  305. SET billtype = :billtype,
  306. reason = :reason,
  307. billdate = :billdate,
  308. relid = :relid,
  309. storageid = :storageid,
  310. mtrlid = :mtrlid,
  311. mtrlwareid = :mtrlwareid,
  312. status = :status,
  313. plancode = :plancode,
  314. woodcode = :woodcode,
  315. qty = :qty,
  316. dscrp = :dscrp,
  317. buildtype = :buildtype,
  318. moddate = getdate(),
  319. modemp = :publ_operator,
  320. price = :price,
  321. rep = :rep,
  322. pcode = :pcode,
  323. dxflag = :dxflag,
  324. sptid = :sptid,
  325. mtrlcuscode = :mtrlcuscode,
  326. location = :location,
  327. kind = :kind
  328. WHERE u_dismantle_install.billid = :billid
  329. AND Auditingflag = 0;
  330. IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN
  331. rslt = 0
  332. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  333. GOTO ext
  334. END IF
  335. //删除原有明细
  336. DELETE FROM u_dismantle_installmx
  337. Where u_dismantle_installmx.billid = :billid;
  338. IF sqlca.SQLCode <> 0 THEN
  339. rslt = 0
  340. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  341. GOTO ext
  342. END IF
  343. FOR i = 1 TO it_mxbt
  344. INSERT INTO u_dismantle_installmx
  345. ( billid ,
  346. printid,
  347. storageid ,
  348. mtrlwareid ,
  349. mtrlid ,
  350. qty ,
  351. price,
  352. status ,
  353. plancode,
  354. woodcode ,
  355. mxdscrp,
  356. pcode,
  357. dxflag,
  358. sptid ,
  359. standardqty,
  360. mtrlcuscode,
  361. location)
  362. VALUES (:billid,
  363. :d_i[i].printid,
  364. :d_i[i].storageid,
  365. :d_i[i].mtrlwareid,
  366. :d_i[i].mtrlid,
  367. :d_i[i].qty,
  368. :d_i[i].price,
  369. :d_i[i].status,
  370. :d_i[i].plancode,
  371. :d_i[i].woodcode,
  372. :d_i[i].mxdscrp,
  373. :d_i[i].pcode,
  374. :d_i[i].dxflag,
  375. :d_i[i].sptid,
  376. :d_i[i].standardqty,
  377. :d_i[i].mtrlcuscode,
  378. :d_i[i].location);
  379. IF sqlca.SQLCode <> 0 THEN
  380. billid = 0 //还原billid
  381. rslt = 0
  382. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  383. ROLLBACK ;
  384. GOTO ext
  385. END IF
  386. NEXT
  387. END IF
  388. it_newbegin = FALSE
  389. it_updatebegin = FALSE
  390. ext:
  391. IF rslt = 0 THEN
  392. ROLLBACK;
  393. p_clearmx()
  394. ELSEIF rslt = 1 AND arg_ifcommit THEN
  395. COMMIT;
  396. END IF
  397. Return(rslt)
  398. end function
  399. public function integer del (long arg_billid, ref string arg_msg);//====================================================================
  400. // Function: del(arg_billid,arg_msg)
  401. //--------------------------------------------------------------------
  402. // Description:
  403. //--------------------------------------------------------------------
  404. // Arguments:
  405. // value long arg_billid
  406. // reference string arg_msg
  407. //--------------------------------------------------------------------
  408. // Returns: integer
  409. //--------------------------------------------------------------------
  410. // Author: yyx Date: 2003.11.21
  411. //--------------------------------------------------------------------
  412. // Modify History:
  413. //
  414. //====================================================================
  415. int rslt = 1
  416. if arg_billid <= 0 then
  417. rslt = 0
  418. arg_msg = "没有删除对象,操作取消"
  419. goto ext
  420. end if
  421. if it_newbegin or it_updatebegin then
  422. rslt=0
  423. arg_msg="编辑状态下不可以执行,操作取消"
  424. goto ext
  425. end if
  426. select u_dismantle_install.auditingflag
  427. into :flag
  428. from u_dismantle_install
  429. where u_dismantle_install.billid = :arg_billid;
  430. if sqlca.sqlcode <> 0 then
  431. rslt = 0
  432. arg_msg = '查询拆装单操作失败'
  433. goto ext
  434. end if
  435. if flag = 1 then
  436. rslt = 0
  437. arg_msg = "单据已经审核,不可以删除"
  438. goto ext
  439. end if
  440. delete from u_dismantle_install where u_dismantle_install.billid = :arg_billid;
  441. if sqlca.sqlcode <> 0 then
  442. rslt = 0
  443. arg_msg = "删除拆装单操作失败"+"~n"+sqlca.sqlerrtext
  444. goto ext
  445. end if
  446. delete from u_dismantle_installmx where u_dismantle_installmx.billid = :arg_billid;
  447. if sqlca.sqlcode <> 0 then
  448. rslt = 0
  449. arg_msg = "删除拆装单明细操作失败"+"~n"+sqlca.sqlerrtext
  450. goto ext
  451. end if
  452. commit;
  453. it_newbegin = false
  454. it_updatebegin = false
  455. if rslt = 0 then
  456. rollback;
  457. p_reset()
  458. end if
  459. ext:
  460. return (rslt)
  461. end function
  462. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);//====================================================================
  463. // Function: add_dscrp(arg_billid,arg_newdescppart,arg_msg)
  464. //--------------------------------------------------------------------
  465. // Description:
  466. //--------------------------------------------------------------------
  467. // Arguments:
  468. // value long arg_billid
  469. // value string arg_newdescppart
  470. // reference string arg_msg
  471. //--------------------------------------------------------------------
  472. // Returns: integer
  473. //--------------------------------------------------------------------
  474. // Author: yyx Date: 2003.11.21
  475. //--------------------------------------------------------------------
  476. // Modify History:
  477. //
  478. //====================================================================
  479. int rslt = 1
  480. arg_newdescppart = trim(arg_newdescppart)
  481. if arg_billid <= 0 then
  482. rslt = 0
  483. arg_msg = "没有删除对象,操作取消"
  484. goto ext
  485. end if
  486. if it_newbegin or it_updatebegin then
  487. rslt=0
  488. arg_msg="编辑状态下不可以执行,操作取消"
  489. goto ext
  490. end if
  491. select u_dismantle_install.auditingflag
  492. into :flag
  493. from u_dismantle_install
  494. where u_dismantle_install.billid = :arg_billid;
  495. if sqlca.sqlcode <> 0 then
  496. rslt = 0
  497. arg_msg = '查询拆装件单操作失败'
  498. goto ext
  499. end if
  500. if flag = 0 then
  501. rslt = 0
  502. arg_msg = "非审核状态下不可用"
  503. goto ext
  504. end if
  505. update u_dismantle_install
  506. set dscrp = dscrp+' '+:arg_newdescppart
  507. where u_dismantle_install.billid = :billid;
  508. if sqlca.sqlcode <> 0 then
  509. rollback ;
  510. rslt = 0
  511. arg_msg = "因网络或其它原因导致添加单据备注操作失败"+"~n"+sqlca.sqlerrtext
  512. goto ext
  513. end if
  514. commit;
  515. dscrp = dscrp+' '+arg_newdescppart
  516. ext:
  517. return (rslt)
  518. end function
  519. public function integer p_getinfo (long arg_billid, ref string arg_msg);Int rslt = 1
  520. IF arg_billid <= 0 THEN
  521. rslt = 0
  522. arG_MSG = "非法单据唯一码"
  523. GOTO ext
  524. END IF
  525. SELECT
  526. u_dismantle_install.billtype,
  527. u_dismantle_install.Billcode,
  528. u_dismantle_install.reason,
  529. u_dismantle_install.relid,
  530. u_dismantle_install.storageid,
  531. u_dismantle_install.mtrlid,
  532. u_dismantle_install.mtrlwareid,
  533. u_dismantle_install.status,
  534. u_dismantle_install.plancode,
  535. u_dismantle_install.woodcode,
  536. u_dismantle_install.qty,
  537. u_dismantle_install.Dscrp,
  538. u_dismantle_install.Auditingflag,
  539. u_dismantle_install.buildtype,
  540. u_dismantle_install.price,
  541. u_dismantle_install.billdate,
  542. u_dismantle_install.rep,
  543. u_mtrldef.mtrlcode,
  544. u_dismantle_install.pcode,
  545. u_dismantle_install.dxflag,
  546. u_dismantle_install.sptid,
  547. u_mtrldef.ifunit,
  548. u_mtrldef.rate_buy,
  549. u_mtrldef.unit_buy,
  550. u_mtrldef.unit,
  551. u_dismantle_install.mtrlcuscode,
  552. u_dismantle_install.location,
  553. u_dismantle_install.kind
  554. INTO :billtype,
  555. :Billcode,
  556. :reason,
  557. :relid,
  558. :storageid,
  559. :mtrlid,
  560. :mtrlwareid,
  561. :status,
  562. :plancode,
  563. :woodcode,
  564. :qty,
  565. :Dscrp,
  566. :flag,
  567. :buildtype,
  568. :price,
  569. :billdate,
  570. :rep,
  571. :mtrlcode,
  572. :pcode,
  573. :dxflag,
  574. :sptid,
  575. :ifunit,
  576. :rate,
  577. :uunit,
  578. :unit,
  579. :mtrlcuscode,
  580. :location,
  581. :kind
  582. FROM u_dismantle_install,u_mtrldef
  583. Where u_mtrldef.mtrlid = u_dismantle_install.mtrlid
  584. and billid = :arg_billid;
  585. IF sqlca.SQLCode <> 0 THEN
  586. rslt = 0
  587. arG_MSG = "查询操作失败(错误单据唯一码)"+sqlca.SQLErrText
  588. GOTO ext
  589. END IF
  590. billid = arg_billid
  591. ext:
  592. IF rslt = 0 THEN p_reset()
  593. RETURN rslt
  594. end function
  595. public function integer getinfo (long arg_billid, ref string arg_msg);Int rslt = 1,i = 1,no_mxcheck = 0
  596. IF arg_billid <= 0 THEN
  597. rslt = 0
  598. arg_msg = "非法单据唯一码"
  599. GOTO ext
  600. END IF
  601. IF p_getinfo(arg_billid,arg_msg) = 0 THEN
  602. rslt = 0
  603. GOTO ext
  604. END IF
  605. //用游标读取明细
  606. DECLARE cur_d_i_mx CURSOR FOR
  607. SELECT u_dismantle_installmx.printid,
  608. u_dismantle_installmx.storageid,
  609. u_dismantle_installmx.mtrlwareid,
  610. u_dismantle_installmx.mtrlid,
  611. u_dismantle_installmx.qty,
  612. u_dismantle_installmx.price,
  613. u_dismantle_installmx.status,
  614. u_dismantle_installmx.plancode,
  615. u_dismantle_installmx.woodcode,
  616. u_dismantle_installmx.mxdscrp,
  617. u_mtrldef.mtrlcode,
  618. u_dismantle_installmx.pcode,
  619. u_dismantle_installmx.dxflag,
  620. u_dismantle_installmx.sptid,
  621. u_dismantle_installmx.standardqty,
  622. u_mtrldef.ifunit,
  623. u_mtrldef.rate_buy,
  624. u_mtrldef.unit_buy,
  625. u_mtrldef.unit,
  626. u_dismantle_installmx.mtrlcuscode,
  627. u_dismantle_installmx.location
  628. FROM u_dismantle_installmx,u_mtrldef
  629. WHERE u_dismantle_installmx.billid = :arg_billid AND
  630. u_dismantle_installmx.mtrlid = u_mtrldef.mtrlid;
  631. OPEN cur_d_i_mx;
  632. FETCH cur_d_i_mx INTO :d_i[i].printid,:d_i[i].storageid,
  633. :d_i[i].mtrlwareid,:d_i[i].mtrlid,:d_i[i].qty,
  634. :d_i[i].price,:d_i[i].status,:d_i[i].plancode,
  635. :d_i[i].woodcode,:d_i[i].mxdscrp,:d_i[i].mtrlcode,
  636. :d_i[i].pcode,:d_i[i].dxflag,:d_i[i].sptid,
  637. :d_i[i].standardqty,:d_i[i].ifunit,:d_i[i].rate,
  638. :d_i[i].uunit,:d_i[i].unit,:d_i[i].mtrlcuscode,:d_i[i].location;
  639. DO WHILE sqlca.SQLCode = 0
  640. i++
  641. FETCH cur_d_i_mx INTO :d_i[i].printid,:d_i[i].storageid,
  642. :d_i[i].mtrlwareid,:d_i[i].mtrlid,:d_i[i].qty,
  643. :d_i[i].price,:d_i[i].status,:d_i[i].plancode,
  644. :d_i[i].woodcode,:d_i[i].mxdscrp,:d_i[i].mtrlcode,
  645. :d_i[i].pcode,:d_i[i].dxflag,:d_i[i].sptid,
  646. :d_i[i].standardqty,:d_i[i].ifunit,:d_i[i].rate,
  647. :d_i[i].uunit,:d_i[i].unit,:d_i[i].mtrlcuscode,:d_i[i].location;
  648. LOOP
  649. CLOSE cur_d_i_mx;
  650. //检验明细是否读入完整
  651. SELECT count(*) INTO :no_mxcheck
  652. FROM u_dismantle_installmx
  653. Where u_dismantle_installmx.billid = :arg_billid;
  654. IF sqlca.SQLCode <> 0 THEN
  655. rslt = 0
  656. arg_msg = "查询操作失败,单据明细数量"
  657. GOTO ext
  658. END IF
  659. IF i <> (no_mxcheck+1) THEN
  660. rslt = 0
  661. arg_msg = "查询操作失败,单据明细"
  662. GOTO ext
  663. END IF
  664. billid = arg_billid
  665. it_mxbt = i - 1
  666. it_newbegin = FALSE
  667. it_updatebegin = FALSE
  668. ext:
  669. IF rslt = 0 THEN p_reset()
  670. RETURN rslt
  671. end function
  672. public function integer auditing (string arg_auditingrep, boolean arg_ifcommit, ref string arg_msg);Long cnt = 0,i
  673. Int rslt = 1
  674. Long chc
  675. Long rst_outwareid //拆装出仓id
  676. Long rst_inwareid //拆装进仓id
  677. Long s_scid
  678. Long o_scid
  679. Long lay_storageid[],ll_storageid
  680. s_dismantle_install s_di[]
  681. uo_inware uo_in
  682. uo_outware uo_out
  683. uo_in = CREATE uo_inware
  684. uo_in.commit_transaction = sqlca
  685. uo_in.if_getid_ture = FALSE
  686. uo_out = CREATE uo_outware
  687. uo_out.commit_transaction = sqlca
  688. uo_out.if_getid_ture = FALSE
  689. IF billid = 0 THEN
  690. rslt = 0
  691. arg_msg = "没有审核对象"
  692. GOTO ext
  693. END IF
  694. IF flag = 1 THEN
  695. rslt = 0
  696. arg_msg = "单据已经审核"
  697. GOTO ext
  698. END IF
  699. UPDATE u_dismantle_install
  700. SET Auditingemp = :arg_auditingrep,
  701. auditingdate = getdate(),
  702. Auditingflag = 1
  703. Where u_dismantle_install.billid = :billid AND Auditingflag = 0;
  704. IF sqlca.SQLCode <> 0 THEN
  705. rslt = 0
  706. arg_msg = "因网络或其它原因导致审核单据操作失败"+"~n"+sqlca.SQLErrText
  707. GOTO ext
  708. ELSEIF sqlca.SQLNRows = 0 THEN
  709. rslt = 0
  710. arg_msg = "拆装单据正在审核,请稍后查询。"+"~n"+sqlca.SQLErrText
  711. GOTO ext
  712. END IF
  713. Boolean lb_f = FALSE
  714. Long j,k,ch
  715. //统计仓库数量,确定进或出仓单数
  716. FOR i = 1 TO it_mxbt
  717. FOR j = 1 TO UpperBound(lay_storageid)
  718. IF lay_storageid[j] = d_i[i].storageid THEN lb_f = TRUE
  719. NEXT
  720. IF lb_f = FALSE THEN
  721. ch++
  722. lay_storageid[ch] = d_i[i].storageid
  723. END IF
  724. lb_f = FALSE
  725. NEXT
  726. String ls_uunit
  727. Decimal ld_rate,ld_uqty,ld_uprice
  728. IF billtype = 0 THEN //装单 //多张出仓单
  729. //1.原事务生成出仓单
  730. FOR k = 1 TO UpperBound(lay_storageid)
  731. ll_storageid = lay_storageid[k]
  732. SELECT scid INTO :s_scid
  733. FROM u_storage
  734. Where storageid = :ll_storageid;
  735. IF sqlca.SQLCode <> 0 THEN
  736. arg_msg = '查询调出仓库所属分部资料失败'
  737. rslt = 0
  738. GOTO ext
  739. END IF
  740. IF uo_out.newbegin(s_scid,15,arg_msg) = 0 THEN
  741. rslt = 0
  742. GOTO ext
  743. END IF
  744. uo_out.relid = billid
  745. uo_out.outdate = billdate
  746. uo_out.outrep = rep
  747. uo_out.part = billcode
  748. uo_out.dscrp = dscrp
  749. uo_out.cusname = '拆装出仓'
  750. uo_out.storageid = ll_storageid
  751. chc = 0
  752. FOR i = 1 TO it_mxbt
  753. IF d_i[i].storageid <> ll_storageid THEN CONTINUE
  754. chc++
  755. //转换
  756. ls_uunit = ''
  757. ld_rate = 0
  758. ld_uqty = 0
  759. ld_uprice = 0
  760. IF d_i[i].ifunit = 0 THEN
  761. ls_uunit = d_i[i].unit
  762. ld_rate = 1
  763. ld_uqty = d_i[i].qty
  764. ELSE
  765. IF d_i[i].rate = 0 THEN
  766. arg_msg = '明细行:'+String(i)+',资料设为双数量核算,但没有设置默认转换率,请检查'
  767. rslt = 0
  768. GOTO ext
  769. END IF
  770. ls_uunit = d_i[i].uunit
  771. ld_rate = d_i[i].rate
  772. ld_uqty = d_i[i].qty /d_i[i].rate
  773. END IF
  774. IF uo_out.acceptmx(d_i[i].mtrlwareid,&
  775. d_i[i].qty,d_i[i].price,1,&
  776. d_i[i].mxdscrp,chc,arg_msg,0,0,0,0,'',0,0,&
  777. ls_uunit,ld_uqty,ld_rate,'','',0,0,'',0,0,0,0,'','') = 0 THEN
  778. rslt = 0
  779. GOTO ext
  780. END IF
  781. NEXT
  782. IF uo_out.Save(FALSE,arg_msg) = 0 THEN
  783. rslt = 0
  784. GOTO ext
  785. END IF
  786. rst_outwareid = uo_out.outwareid
  787. //2.原事务审核出仓单
  788. IF uo_out.getinfo(s_scid,rst_outwareid,arg_msg) = 0 THEN
  789. rslt = 0
  790. GOTO ext
  791. END IF
  792. IF uo_out.auditing(FALSE,arg_msg) = 0 THEN
  793. rslt = 0
  794. GOTO ext
  795. END IF
  796. NEXT
  797. //3.目标事务建立进仓单
  798. DateTime server_datetime
  799. SELECT Top 1 getdate() INTO :server_datetime FROM u_user;
  800. //取得系统时间,借用操作员表
  801. IF sqlca.SQLCode <> 0 THEN
  802. rslt = 0
  803. arg_msg = "查询目标仓库日期失败"
  804. GOTO ext
  805. END IF
  806. SELECT scid INTO :o_scid
  807. FROM u_storage
  808. Where storageid = :storageid;
  809. IF sqlca.SQLCode <> 0 THEN
  810. arg_msg = '查询调进仓库所属分部资料失败'
  811. rslt = 0
  812. GOTO ext
  813. END IF
  814. IF uo_in.newbegin(o_scid,15,arg_msg) = 0 THEN
  815. rslt = 0
  816. GOTO ext
  817. END IF
  818. uo_in.relid = billid
  819. uo_in.indate = billdate
  820. uo_in.inrep = rep
  821. uo_in.part = billcode
  822. uo_in.dscrp = dscrp
  823. uo_in.storageid = storageid
  824. uo_in.sptname = '拆装进仓'
  825. //转换
  826. ls_uunit = ''
  827. ld_rate = 0
  828. ld_uqty = 0
  829. ld_uprice = 0
  830. IF ifunit = 0 THEN
  831. ls_uunit = unit
  832. ld_rate = 1
  833. ld_uqty = qty
  834. ld_uprice = price
  835. ELSE
  836. IF rate = 0 THEN
  837. arg_msg = '组装产品资料设为双数量核算,但没有设置默认转换率,请检查'
  838. rslt = 0
  839. GOTO ext
  840. END IF
  841. ls_uunit = uunit
  842. ld_rate = rate
  843. ld_uqty = qty /rate
  844. ld_uprice = price * rate
  845. END IF
  846. IF uo_in.acceptmx(1,&
  847. mtrlid,&
  848. mtrlcode,&
  849. plancode,&
  850. status,&
  851. ld_uqty,&
  852. ld_uprice,&
  853. 1,&
  854. dscrp,&
  855. arg_msg,&
  856. 0,0,0,woodcode,pcode,sptid,ls_uunit,ld_rate,qty,0,0,'','',0,0,&
  857. mtrlcuscode,Location,&
  858. ld_uqty,&
  859. 0) = 0 THEN
  860. rslt = 0
  861. GOTO ext
  862. END IF
  863. IF uo_in.Save(FALSE,arg_msg) = 0 THEN
  864. rslt = 0
  865. GOTO ext
  866. END IF
  867. rst_inwareid = uo_in.inwareid
  868. //4.原事务审核进仓单
  869. IF uo_in.getinfo(o_scid,rst_inwareid,arg_msg) = 0 THEN
  870. rslt = 0
  871. GOTO ext
  872. END IF
  873. IF uo_in.auditing(FALSE,arg_msg) = 0 THEN
  874. rslt = 0
  875. GOTO ext
  876. END IF
  877. ELSEIF billtype = 1 THEN //拆单 //多张进仓单
  878. //1.原事务生成出仓单
  879. SELECT scid INTO :s_scid
  880. FROM u_storage
  881. Where storageid = :storageid;
  882. IF sqlca.SQLCode <> 0 THEN
  883. arg_msg = '查询调出仓库所属分部资料失败'
  884. rslt = 0
  885. GOTO ext
  886. END IF
  887. IF uo_out.newbegin(s_scid,15,arg_msg) = 0 THEN
  888. rslt = 0
  889. GOTO ext
  890. END IF
  891. uo_out.relid = billid
  892. uo_out.outdate = billdate
  893. uo_out.outrep = rep
  894. uo_out.part = billcode
  895. uo_out.dscrp = dscrp
  896. uo_out.cusname = '拆装出仓'
  897. uo_out.storageid = storageid
  898. //转换
  899. ls_uunit = ''
  900. ld_rate = 0
  901. ld_uqty = 0
  902. IF ifunit = 0 THEN
  903. ls_uunit = unit
  904. ld_rate = 1
  905. ld_uqty = qty
  906. ELSE
  907. IF rate = 0 THEN
  908. arg_msg = '拆装产品资料设为双数量核算,但没有设置默认转换率,请检查'
  909. rslt = 0
  910. GOTO ext
  911. END IF
  912. ls_uunit = uunit
  913. ld_rate = rate
  914. ld_uqty = qty /rate
  915. END IF
  916. IF uo_out.acceptmx(mtrlwareid,&
  917. qty,price,1,&
  918. dscrp,1,arg_msg,0,0,0,0,'',0,0,&
  919. ls_uunit,ld_uqty,ld_rate,'','',0,0,'',0,0,0,0,'','') = 0 THEN
  920. rslt = 0
  921. GOTO ext
  922. END IF
  923. IF uo_out.Save(FALSE,arg_msg) = 0 THEN
  924. rslt = 0
  925. GOTO ext
  926. END IF
  927. rst_outwareid = uo_out.outwareid
  928. //2.原事务审核出仓单
  929. IF uo_out.getinfo(s_scid,rst_outwareid,arg_msg) = 0 THEN
  930. rslt = 0
  931. GOTO ext
  932. END IF
  933. IF uo_out.auditing(FALSE,arg_msg) = 0 THEN
  934. rslt = 0
  935. GOTO ext
  936. END IF
  937. FOR k = 1 TO UpperBound(lay_storageid)
  938. ll_storageid = lay_storageid[k]
  939. SELECT scid INTO :o_scid
  940. FROM u_storage
  941. Where storageid = :ll_storageid;
  942. IF sqlca.SQLCode <> 0 THEN
  943. arg_msg = '查询调进仓库所属分部资料失败'
  944. rslt = 0
  945. GOTO ext
  946. END IF
  947. IF uo_in.newbegin(o_scid,15,arg_msg) = 0 THEN
  948. rslt = 0
  949. GOTO ext
  950. END IF
  951. uo_in.relid = billid
  952. uo_in.indate = billdate
  953. uo_in.inrep = rep
  954. uo_in.part = billcode
  955. uo_in.dscrp = dscrp
  956. uo_in.storageid = ll_storageid
  957. uo_in.sptname = '拆装进仓'
  958. chc = 0
  959. FOR i = 1 TO it_mxbt
  960. IF d_i[i].storageid <> ll_storageid THEN CONTINUE
  961. chc++
  962. //转换
  963. ls_uunit = ''
  964. ld_rate = 0
  965. ld_uqty = 0
  966. ld_uprice = 0
  967. IF d_i[i].ifunit = 0 THEN
  968. ls_uunit = d_i[i].unit
  969. ld_rate = 1
  970. ld_uqty = d_i[i].qty
  971. ld_uprice = d_i[i].price
  972. ELSE
  973. IF d_i[i].rate = 0 THEN
  974. arg_msg = '明细行:'+String(i)+',资料设为双数量核算,但没有设置默认转换率,请检查'
  975. rslt = 0
  976. GOTO ext
  977. END IF
  978. ls_uunit = d_i[i].uunit
  979. ld_rate = d_i[i].rate
  980. ld_uqty = d_i[i].qty /d_i[i].rate
  981. ld_uprice = d_i[i].price * d_i[i].rate
  982. END IF
  983. IF uo_in.acceptmx(chc,&
  984. d_i[i].mtrlid,&
  985. d_i[i].mtrlcode,&
  986. d_i[i].plancode,&
  987. d_i[i].status,&
  988. ld_uqty,&
  989. ld_uprice,&
  990. 1,&
  991. d_i[i].mxdscrp,&
  992. arg_msg,&
  993. 0,0,0,d_i[i].woodcode,d_i[i].pcode,d_i[i].sptid,ls_uunit,ld_rate,&
  994. d_i[i].qty,0,0,'','',0,0,&
  995. d_i[i].mtrlcuscode,d_i[i].Location,&
  996. ld_uqty,&
  997. 0) = 0 THEN
  998. rslt = 0
  999. GOTO ext
  1000. END IF
  1001. NEXT
  1002. IF uo_in.Save(FALSE,arg_msg) = 0 THEN
  1003. rslt = 0
  1004. GOTO ext
  1005. END IF
  1006. rst_inwareid = uo_in.inwareid
  1007. //4.原事务审核进仓单
  1008. IF uo_in.getinfo(o_scid,rst_inwareid,arg_msg) = 0 THEN
  1009. rslt = 0
  1010. GOTO ext
  1011. END IF
  1012. IF uo_in.auditing(FALSE,arg_msg) = 0 THEN
  1013. rslt = 0
  1014. GOTO ext
  1015. END IF
  1016. NEXT
  1017. END IF
  1018. IF uof_update_waredate(FALSE,arg_msg) = 0 THEN
  1019. rslt = 0
  1020. GOTO ext
  1021. END IF
  1022. flag = 1
  1023. ext:
  1024. IF rslt = 0 THEN
  1025. ROLLBACK;
  1026. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1027. COMMIT;
  1028. END IF
  1029. DESTROY uo_in
  1030. DESTROY uo_out
  1031. RETURN rslt
  1032. end function
  1033. public function integer newbegin (integer arg_billtype, ref string arg_msg);Int rslt = 1
  1034. IF Not (arg_billtype = 0 OR arg_billtype = 1) THEN
  1035. rslt = 0
  1036. arg_msg = '此单据类型必须为:0-装仓,1-拆仓'
  1037. GOTO ext
  1038. END IF
  1039. p_reset()
  1040. billtype = arg_billtype
  1041. it_newbegin = TRUE
  1042. it_updatebegin = FALSE
  1043. ext:
  1044. IF rslt = 0 THEN p_reset()
  1045. RETURN rslt
  1046. end function
  1047. public function integer c_auditing (boolean arg_ifcommit, ref string arg_msg);Long cnt = 0,i
  1048. Int rslt = 1
  1049. Long chc
  1050. Long in_out
  1051. Long rst_outwareid[],out_i = 1 //拆装出仓id
  1052. String rst_outwarecode[]
  1053. Long rst_inwareid[],in_i = 1 //拆装进仓id
  1054. String rst_inwarecode[]
  1055. Long s_scid
  1056. Long o_scid
  1057. Long lay_storageid[],ll_storageid
  1058. s_dismantle_install s_di[]
  1059. DateTime null_dt
  1060. SetNull(null_dt)
  1061. uo_inware uo_in
  1062. uo_outware uo_out
  1063. uo_in = CREATE uo_inware
  1064. uo_in.commit_transaction = sqlca
  1065. uo_in.if_getid_ture = FALSE
  1066. uo_out = CREATE uo_outware
  1067. uo_out.commit_transaction = sqlca
  1068. uo_out.if_getid_ture = FALSE
  1069. IF billid = 0 THEN
  1070. rslt = 0
  1071. arg_msg = "没有撤审单据"
  1072. GOTO ext
  1073. END IF
  1074. IF flag = 0 THEN
  1075. rslt = 0
  1076. arg_msg = "单据未审核"
  1077. GOTO ext
  1078. END IF
  1079. UPDATE u_dismantle_install
  1080. SET Auditingemp = '',
  1081. auditingdate = :null_dt,
  1082. Auditingflag = 0
  1083. Where u_dismantle_install.billid = :billid AND Auditingflag = 1;
  1084. IF sqlca.SQLCode <> 0 THEN
  1085. rslt = 0
  1086. arg_msg = "因网络或其它原因导致撤审单据操作失败"+"~n"+sqlca.SQLErrText
  1087. GOTO ext
  1088. ELSEIF sqlca.SQLNRows = 0 THEN
  1089. rslt = 0
  1090. arg_msg = "单据正在撤审,请稍后查询。"+"~n"+sqlca.SQLErrText
  1091. GOTO ext
  1092. END IF
  1093. Boolean lb_f = FALSE
  1094. Long j,k,ch
  1095. //统计仓库数量,确定进或出仓单数
  1096. FOR i = 1 TO it_mxbt
  1097. FOR j = 1 TO UpperBound(lay_storageid)
  1098. IF lay_storageid[j] = d_i[i].storageid THEN lb_f = TRUE
  1099. NEXT
  1100. IF lb_f = FALSE THEN
  1101. ch++
  1102. lay_storageid[ch] = d_i[i].storageid
  1103. END IF
  1104. lb_f = FALSE
  1105. NEXT
  1106. IF billtype = 0 THEN //装单 //多张出仓单
  1107. //1.查询拆装单相关的出仓单,撤审,删除
  1108. FOR k = 1 TO UpperBound(lay_storageid)
  1109. ll_storageid = lay_storageid[k]
  1110. SELECT scid INTO :s_scid
  1111. FROM u_storage
  1112. Where storageid = :ll_storageid;
  1113. IF sqlca.SQLCode <> 0 THEN
  1114. arg_msg = '查询调出仓库所属分部资料失败'
  1115. rslt = 0
  1116. GOTO ext
  1117. END IF
  1118. DECLARE cur_out_1 CURSOR FOR
  1119. SELECT outwareid,outwarecode
  1120. FROM u_outware
  1121. WHERE scid = :s_scid
  1122. AND relid = :billid
  1123. and storageid = :ll_storageid
  1124. AND billtype = 15
  1125. Order By outwareid;
  1126. OPEN cur_out_1;
  1127. FETCH cur_out_1 INTO :rst_outwareid[out_i],:rst_outwarecode[out_i];
  1128. DO WHILE sqlca.SQLCode = 0
  1129. out_i++
  1130. FETCH cur_out_1 INTO :rst_outwareid[out_i],:rst_outwarecode[out_i];
  1131. LOOP
  1132. out_i = out_i - 1
  1133. CLOSE cur_out_1;
  1134. IF out_i = 0 THEN
  1135. arg_msg = '查询该拆装单相关出仓单失败,'+sqlca.SQLErrText
  1136. rslt = 0
  1137. GOTO ext
  1138. END IF
  1139. FOR in_out = 1 TO out_i
  1140. //撤审出仓单,再删除
  1141. IF uo_out.getinfo(s_scid,rst_outwareid[in_out],arg_msg) = 0 THEN
  1142. arg_msg = String(in_out)+',相关出仓单:'+rst_outwarecode[in_out]+','+arg_msg
  1143. rslt = 0
  1144. GOTO ext
  1145. END IF
  1146. IF uo_out.c_auditing(FALSE,arg_msg) = 0 THEN
  1147. arg_msg = String(in_out)+',相关出仓单:'+rst_outwarecode[in_out]+','+arg_msg
  1148. rslt = 0
  1149. GOTO ext
  1150. END IF
  1151. IF uo_out.del(s_scid,rst_outwareid[in_out],0,arg_msg,FALSE) = 0 THEN
  1152. arg_msg = String(in_out)+',相关出仓单:'+rst_outwarecode[in_out]+','+arg_msg
  1153. rslt = 0
  1154. GOTO ext
  1155. END IF
  1156. NEXT
  1157. NEXT
  1158. //2.查询拆装单相关的入仓单,撤审,删除
  1159. SELECT scid INTO :o_scid
  1160. FROM u_storage
  1161. Where storageid = :storageid;
  1162. IF sqlca.SQLCode <> 0 THEN
  1163. arg_msg = '查询调进仓库所属分部资料失败'
  1164. rslt = 0
  1165. GOTO ext
  1166. END IF
  1167. DECLARE cur_in_1 CURSOR FOR
  1168. SELECT inwareid,inwarecode
  1169. FROM u_inware
  1170. WHERE scid = :o_scid
  1171. AND relid = :billid
  1172. and storageid = :storageid
  1173. AND billtype = 15
  1174. Order By inwareid;
  1175. OPEN cur_in_1;
  1176. FETCH cur_in_1 INTO :rst_inwareid[in_i],:rst_inwarecode[in_i];
  1177. DO WHILE sqlca.SQLCode = 0
  1178. in_i++
  1179. FETCH cur_in_1 INTO :rst_inwareid[in_i],:rst_inwarecode[in_i];
  1180. LOOP
  1181. in_i = in_i - 1
  1182. CLOSE cur_in_1;
  1183. IF in_i = 0 THEN
  1184. arg_msg = '查询该拆装单相关入仓单失败,'+sqlca.SQLErrText
  1185. rslt = 0
  1186. GOTO ext
  1187. END IF
  1188. FOR in_out = 1 TO in_i
  1189. //撤审出仓单,再删除
  1190. IF uo_in.getinfo(o_scid,rst_inwareid[in_out],arg_msg) = 0 THEN
  1191. arg_msg = String(in_out)+',相关进仓单:'+rst_inwarecode[in_out]+','+arg_msg
  1192. rslt = 0
  1193. GOTO ext
  1194. END IF
  1195. IF uo_in.c_auditing(FALSE,arg_msg) = 0 THEN
  1196. arg_msg = String(in_out)+',相关进仓单:'+rst_inwarecode[in_out]+','+arg_msg
  1197. rslt = 0
  1198. GOTO ext
  1199. END IF
  1200. IF uo_in.del(o_scid,rst_inwareid[in_out],arg_msg,FALSE) = 0 THEN
  1201. arg_msg = String(in_out)+',相关进仓单:'+rst_inwarecode[in_out]+','+arg_msg
  1202. rslt = 0
  1203. GOTO ext
  1204. END IF
  1205. NEXT
  1206. ELSEIF billtype = 1 THEN //拆单 //多张进仓单
  1207. //1.查询拆装单相关的出仓单,撤审,删除
  1208. SELECT scid INTO :s_scid
  1209. FROM u_storage
  1210. Where storageid = :storageid;
  1211. IF sqlca.SQLCode <> 0 THEN
  1212. arg_msg = '查询调出仓库所属分部资料失败'
  1213. rslt = 0
  1214. GOTO ext
  1215. END IF
  1216. DECLARE cur_out_2 CURSOR FOR
  1217. SELECT outwareid,outwarecode
  1218. FROM u_outware
  1219. WHERE scid = :s_scid
  1220. AND relid = :billid
  1221. and storageid = :storageid
  1222. AND billtype = 15
  1223. Order By outwareid;
  1224. OPEN cur_out_2;
  1225. FETCH cur_out_2 INTO :rst_outwareid[out_i],:rst_outwarecode[out_i];
  1226. DO WHILE sqlca.SQLCode = 0
  1227. out_i++
  1228. FETCH cur_out_2 INTO :rst_outwareid[out_i],:rst_outwarecode[out_i];
  1229. LOOP
  1230. out_i = out_i - 1
  1231. CLOSE cur_out_2;
  1232. IF out_i = 0 THEN
  1233. arg_msg = '查询该拆装单相关出仓单失败,'+sqlca.SQLErrText
  1234. rslt = 0
  1235. GOTO ext
  1236. END IF
  1237. FOR in_out = 1 TO out_i
  1238. //撤审出仓单,再删除
  1239. IF uo_out.getinfo(s_scid,rst_outwareid[in_out],arg_msg) = 0 THEN
  1240. arg_msg = String(in_out)+',相关出仓单:'+rst_outwarecode[in_out]+','+arg_msg
  1241. rslt = 0
  1242. GOTO ext
  1243. END IF
  1244. IF uo_out.c_auditing(FALSE,arg_msg) = 0 THEN
  1245. arg_msg = String(in_out)+',相关出仓单:'+rst_outwarecode[in_out]+','+arg_msg
  1246. rslt = 0
  1247. GOTO ext
  1248. END IF
  1249. IF uo_out.del(s_scid,rst_outwareid[in_out],0,arg_msg,FALSE) = 0 THEN
  1250. arg_msg = String(in_out)+',相关出仓单:'+rst_outwarecode[in_out]+','+arg_msg
  1251. rslt = 0
  1252. GOTO ext
  1253. END IF
  1254. NEXT
  1255. //2.查询拆装单相关的入仓单,撤审,删除
  1256. FOR k = 1 TO UpperBound(lay_storageid)
  1257. ll_storageid = lay_storageid[k]
  1258. SELECT scid INTO :o_scid
  1259. FROM u_storage
  1260. Where storageid = :ll_storageid;
  1261. IF sqlca.SQLCode <> 0 THEN
  1262. arg_msg = '查询调出仓库所属分部资料失败'
  1263. rslt = 0
  1264. GOTO ext
  1265. END IF
  1266. DECLARE cur_in_2 CURSOR FOR
  1267. SELECT inwareid,inwarecode
  1268. FROM u_inware
  1269. WHERE scid = :o_scid
  1270. AND relid = :billid
  1271. and storageid = :ll_storageid
  1272. AND billtype = 15
  1273. Order By inwareid;
  1274. OPEN cur_in_2;
  1275. FETCH cur_in_2 INTO :rst_inwareid[in_i],:rst_inwarecode[in_i];
  1276. DO WHILE sqlca.SQLCode = 0
  1277. in_i++
  1278. FETCH cur_in_2 INTO :rst_inwareid[in_i],:rst_inwarecode[in_i];
  1279. LOOP
  1280. in_i = in_i - 1
  1281. CLOSE cur_in_2;
  1282. IF in_i = 0 THEN
  1283. arg_msg = '查询该拆装单相关入仓单失败,'+sqlca.SQLErrText
  1284. rslt = 0
  1285. GOTO ext
  1286. END IF
  1287. FOR in_out = 1 TO in_i
  1288. //撤审入仓单,再删除
  1289. IF uo_in.getinfo(o_scid,rst_inwareid[in_out],arg_msg) = 0 THEN
  1290. arg_msg = String(in_out)+',相关进仓单:'+rst_inwarecode[in_out]+','+arg_msg
  1291. rslt = 0
  1292. GOTO ext
  1293. END IF
  1294. IF uo_in.c_auditing(FALSE,arg_msg) = 0 THEN
  1295. arg_msg = String(in_out)+',相关进仓单:'+rst_inwarecode[in_out]+','+arg_msg
  1296. rslt = 0
  1297. GOTO ext
  1298. END IF
  1299. IF uo_in.del(o_scid,rst_inwareid[in_out],arg_msg,FALSE) = 0 THEN
  1300. arg_msg = String(in_out)+',相关进仓单:'+rst_inwarecode[in_out]+','+arg_msg
  1301. rslt = 0
  1302. GOTO ext
  1303. END IF
  1304. NEXT
  1305. NEXT
  1306. END IF
  1307. flag = 1
  1308. ext:
  1309. IF rslt = 0 THEN
  1310. ROLLBACK;
  1311. ELSEIF arg_ifcommit AND rslt = 1 THEN
  1312. COMMIT;
  1313. END IF
  1314. DESTROY uo_in
  1315. DESTROY uo_out
  1316. RETURN rslt
  1317. end function
  1318. public function integer acceptmx (long arg_printid, long arg_storageid, long arg_mtrlwareid, long arg_mtrlid, decimal arg_qty, decimal arg_price, string arg_status, string arg_plancode, string arg_woodcode, string arg_mxdscrp, string arg_mtrlcode, string arg_pcode, integer arg_dxflag, integer arg_sptid, ref string arg_msg, decimal arg_standardqty, string arg_mtrlcuscode, string arg_location);Int rslt = 1
  1319. Long cnt = 0,ls_i
  1320. IF it_newbegin = FALSE AND it_updatebegin = FALSE THEN
  1321. rslt = 0
  1322. arg_msg = "非编辑状态不可以使用,操作取消"
  1323. GOTO ext
  1324. END IF
  1325. IF IsNull(arg_printid) THEN arg_printid = 0
  1326. IF IsNull(arg_storageid) THEN arg_storageid = 0
  1327. IF IsNull(arg_mtrlwareid) THEN arg_mtrlwareid = 0
  1328. IF IsNull(arg_mtrlid) THEN arg_mtrlid = 0
  1329. IF IsNull(arg_qty) THEN arg_qty = 0
  1330. IF IsNull(arg_standardqty) THEN arg_standardqty = 0
  1331. IF IsNull(arg_price) THEN arg_price = 0
  1332. IF IsNull(arg_status) THEN arg_status = ''
  1333. IF IsNull(arg_mtrlcode) THEN arg_mtrlcode = ''
  1334. IF IsNull(arg_plancode) THEN arg_plancode = ''
  1335. IF IsNull(arg_woodcode) THEN arg_woodcode = ''
  1336. IF IsNull(arg_mxdscrp) THEN arg_mxdscrp = ''
  1337. IF IsNull(arg_mtrlcuscode) THEN arg_mtrlcuscode = ''
  1338. IF IsNull(arg_location) THEN arg_location = ''
  1339. IF IsNull(arg_pcode) THEN arg_pcode = ''
  1340. IF IsNull(arg_dxflag) THEN arg_dxflag = 0
  1341. IF IsNull(arg_sptid) THEN arg_sptid = 0
  1342. IF arg_qty = 0 THEN
  1343. rslt = 1
  1344. GOTO ext
  1345. END IF
  1346. IF arg_mtrlwareid > 0 AND billtype = 0 THEN
  1347. SELECT plancode,
  1348. woodcode,
  1349. status,
  1350. pcode,
  1351. dxflag,
  1352. sptid,
  1353. cost,
  1354. mtrlcuscode,
  1355. location
  1356. INTO :arg_plancode,
  1357. :arg_woodcode,
  1358. :arG_status,
  1359. :arg_pcode,
  1360. :arg_dxflag,
  1361. :arg_sptid,
  1362. :arg_price,
  1363. :arg_mtrlcuscode,
  1364. :arg_location
  1365. FROM u_mtrlware Where u_mtrlware.mtrlwareid = :arg_mtrlwareid;
  1366. IF sqlca.SQLCode <> 0 THEN
  1367. rslt = 0
  1368. arg_msg = '查询物料 '+arg_mtrlcode+' 库存失败!>>'+sqlca.SQLErrText
  1369. GOTO ext
  1370. END IF
  1371. END IF
  1372. //写入内容
  1373. it_mxbt++
  1374. d_i[it_mxbt].printid = arg_printid
  1375. d_i[it_mxbt].storageid = arg_storageid
  1376. d_i[it_mxbt].mtrlwareid = arg_mtrlwareid
  1377. d_i[it_mxbt].mtrlid = arg_mtrlid
  1378. d_i[it_mxbt].qty = arg_qty
  1379. d_i[it_mxbt].price = arg_price
  1380. d_i[it_mxbt].status = arg_status
  1381. d_i[it_mxbt].plancode = arg_plancode
  1382. d_i[it_mxbt].woodcode = arg_woodcode
  1383. d_i[it_mxbt].mxdscrp = arg_mxdscrp
  1384. d_i[it_mxbt].mtrlcode = arg_mtrlcode
  1385. d_i[it_mxbt].pcode = arg_pcode
  1386. d_i[it_mxbt].dxflag = arg_dxflag
  1387. d_i[it_mxbt].sptid = arg_sptid
  1388. d_i[it_mxbt].standardqty = arg_standardqty
  1389. d_i[it_mxbt].mtrlcuscode = arg_mtrlcuscode
  1390. d_i[it_mxbt].location = arg_location
  1391. ext:
  1392. IF rslt = 0 THEN p_clearmx()
  1393. RETURN(rslt)
  1394. end function
  1395. public function integer uof_update_waredate (boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
  1396. DateTime ld_waredate,ld_auditingdate,ld_waradate_mx
  1397. String ls_auditdate,ls_waredate
  1398. Long i
  1399. Long ll_mtrlid,ll_sptid,ll_mtrlwareid
  1400. String ls_status,ls_woodcode ,ls_pcode,ls_plancode
  1401. String ls_mtrlcuscode,ls_location
  1402. DateTime ld_waredate_max
  1403. Long o_scid,s_scid
  1404. Long ll_storageid_mx
  1405. SELECT auditingdate INTO :ld_auditingdate
  1406. FROM u_dismantle_install
  1407. Where billid = :billid;
  1408. IF sqlca.SQLCode <> 0 THEN
  1409. rslt = 0
  1410. arg_msg = '查询单据审核时间失败,'+sqlca.SQLErrText
  1411. GOTO ext
  1412. END IF
  1413. ls_auditdate = String(ld_auditingdate,'yyyy-mm-dd hh:mm')
  1414. SELECT scid INTO :o_scid
  1415. FROM u_storage
  1416. Where storageid = :storageid;
  1417. IF sqlca.SQLCode <> 0 THEN
  1418. arg_msg = '查询调进仓库所属分部资料失败'
  1419. rslt = 0
  1420. GOTO ext
  1421. END IF
  1422. IF billtype = 0 THEN //装
  1423. SELECT waredate INTO :ld_waredate
  1424. FROM u_mtrlware
  1425. WHERE storageid = :storageid
  1426. AND mtrlid = :mtrlid
  1427. AND sptid = :sptid
  1428. AND scid = :o_scid
  1429. AND status = :status
  1430. AND woodcode = :woodcode
  1431. AND pcode = :pcode
  1432. AND plancode = :plancode
  1433. AND mtrlcuscode = :mtrlcuscode
  1434. AND Location = :Location;
  1435. IF sqlca.SQLCode <> 0 THEN
  1436. rslt = 0
  1437. arg_msg = '查询库存最近进仓日期失败,'+sqlca.SQLErrText
  1438. GOTO ext
  1439. END IF
  1440. ls_waredate = String(ld_waredate,'yyyy-mm-dd hh:mm')
  1441. IF ls_auditdate = ls_waredate THEN
  1442. FOR i = 1 TO it_mxbt
  1443. ll_mtrlwareid = d_i[i].mtrlwareid
  1444. ll_storageid_mx = d_i[i].storageid
  1445. SELECT scid INTO :s_scid
  1446. FROM u_storage
  1447. Where storageid = :ll_storageid_mx;
  1448. IF sqlca.SQLCode <> 0 THEN
  1449. arg_msg = '查询调出仓库所属分部资料失败'
  1450. rslt = 0
  1451. GOTO ext
  1452. END IF
  1453. SELECT waredate INTO :ld_waradate_mx
  1454. FROM u_mtrlware
  1455. WHERE scid = :s_scid
  1456. AND mtrlwareid = :ll_mtrlwareid;
  1457. IF sqlca.SQLCode <> 0 THEN
  1458. rslt = 0
  1459. arg_msg = '查询明细库存最近进仓日期失败,'+sqlca.SQLErrText
  1460. GOTO ext
  1461. END IF
  1462. IF i = 1 THEN
  1463. ld_waredate_max = ld_waradate_mx
  1464. ELSE
  1465. IF ld_waradate_mx > ld_waredate_max THEN
  1466. ld_waredate_max = ld_waradate_mx
  1467. END IF
  1468. END IF
  1469. NEXT
  1470. UPDATE u_mtrlware
  1471. SET waredate = :ld_waredate_max
  1472. WHERE storageid = :storageid
  1473. AND mtrlid = :mtrlid
  1474. AND sptid = :relid
  1475. AND scid = :o_scid
  1476. AND status = :status
  1477. AND woodcode = :woodcode
  1478. AND pcode = :pcode
  1479. AND plancode = :plancode
  1480. AND mtrlcuscode = :mtrlcuscode
  1481. AND Location = :Location;
  1482. IF sqlca.SQLCode <> 0 THEN
  1483. rslt = 0
  1484. arg_msg = '更新库存最近进仓日期失败,'+sqlca.SQLErrText
  1485. GOTO ext
  1486. END IF
  1487. END IF
  1488. ELSEIF billtype = 1 THEN //拆
  1489. SELECT waredate INTO :ld_waredate
  1490. FROM u_mtrlware
  1491. WHERE mtrlwareid = :mtrlwareid
  1492. AND scid = :o_scid;
  1493. IF sqlca.SQLCode <> 0 THEN
  1494. rslt = 0
  1495. arg_msg = '查询库存最近进仓日期失败,'+sqlca.SQLErrText
  1496. GOTO ext
  1497. END IF
  1498. FOR i = 1 TO it_mxbt
  1499. ll_mtrlid = d_i[i].mtrlid
  1500. ll_sptid = d_i[i].sptid
  1501. ls_status = d_i[i].status
  1502. ls_woodcode = d_i[i].woodcode
  1503. ls_pcode = d_i[i].pcode
  1504. ls_plancode = d_i[i].plancode
  1505. ls_mtrlcuscode = d_i[i].mtrlcuscode
  1506. ls_location = d_i[i].Location
  1507. ll_storageid_mx = d_i[i].storageid
  1508. SELECT scid INTO :s_scid
  1509. FROM u_storage
  1510. Where storageid = :ll_storageid_mx;
  1511. IF sqlca.SQLCode <> 0 THEN
  1512. arg_msg = '查询调出仓库所属分部资料失败'
  1513. rslt = 0
  1514. GOTO ext
  1515. END IF
  1516. SELECT waredate INTO :ld_waradate_mx
  1517. FROM u_mtrlware
  1518. WHERE scid = :s_scid
  1519. AND storageid = :ll_storageid_mx
  1520. AND mtrlid = :ll_mtrlid
  1521. AND sptid = :ll_sptid
  1522. AND status = :ls_status
  1523. AND woodcode = :ls_woodcode
  1524. AND pcode = :ls_pcode
  1525. AND plancode = :ls_plancode
  1526. AND mtrlcuscode = :ls_mtrlcuscode
  1527. AND Location = :ls_location;
  1528. IF sqlca.SQLCode <> 0 THEN
  1529. rslt = 0
  1530. arg_msg = '查询明细库存最近进仓日期失败,'+sqlca.SQLErrText
  1531. GOTO ext
  1532. END IF
  1533. ls_waredate = String(ld_waradate_mx,'yyyy-mm-dd hh:mm')
  1534. IF ls_auditdate = ls_waredate THEN
  1535. UPDATE u_mtrlware
  1536. SET waredate = :ld_waredate
  1537. WHERE scid = :s_scid
  1538. AND storageid = :ll_storageid_mx
  1539. AND mtrlid = :ll_mtrlid
  1540. AND sptid = :ll_sptid
  1541. AND status = :ls_status
  1542. AND woodcode = :ls_woodcode
  1543. AND pcode = :ls_pcode
  1544. AND plancode = :ls_plancode
  1545. AND mtrlcuscode = :ls_mtrlcuscode
  1546. AND Location = :ls_location;
  1547. IF sqlca.SQLCode <> 0 THEN
  1548. rslt = 0
  1549. arg_msg = '更新明细库存最近进仓日期失败,'+sqlca.SQLErrText
  1550. GOTO ext
  1551. END IF
  1552. END IF
  1553. NEXT
  1554. END IF
  1555. ext:
  1556. IF rslt = 0 THEN
  1557. ROLLBACK;
  1558. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1559. COMMIT;
  1560. END IF
  1561. RETURN rslt
  1562. end function
  1563. on uo_dismantle_install.create
  1564. call super::create
  1565. TriggerEvent( this, "constructor" )
  1566. end on
  1567. on uo_dismantle_install.destroy
  1568. TriggerEvent( this, "destructor" )
  1569. call super::destroy
  1570. end on