uo_buytask.sru 66 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627
  1. $PBExportHeader$uo_buytask.sru
  2. forward
  3. global type uo_buytask from nonvisualobject
  4. end type
  5. type s_buytaskmx from structure within uo_buytask
  6. end type
  7. end forward
  8. type s_buytaskmx from structure
  9. long orderid
  10. string ordercode
  11. long mtrlid
  12. decimal { 4 } qty
  13. decimal { 10 } plprice
  14. decimal { 10 } acprice
  15. string dscrp
  16. string mtrlcode
  17. long printid
  18. decimal { 10 } fprice
  19. decimal { 4 } rebate
  20. decimal { 10 } price
  21. datetime requiredate
  22. datetime accomplishdate
  23. long storageid
  24. string status
  25. string woodcode
  26. string pcode
  27. integer iforder
  28. string sptmtrlname
  29. string unit
  30. decimal { 5 } rate
  31. decimal { 5 } uqty
  32. decimal { 10 } uprice
  33. decimal { 5 } addqty
  34. decimal { 10 } dftsptprice
  35. long relid
  36. long relprintid
  37. string relcode
  38. string formula
  39. decimal { 5 } stopqty
  40. long relid2
  41. decimal { 5 } tax
  42. decimal { 5 } uamt
  43. decimal { 5 } uamt_tax
  44. decimal { 5 } bsamt
  45. decimal { 5 } bsamt_tax
  46. string plancode
  47. long scid
  48. long taskid
  49. decimal { 5 } assignqty
  50. datetime sys_changetime
  51. decimal { 5 } consignedqty
  52. long ctmint
  53. long stopflag
  54. string stopemp
  55. datetime stopdate
  56. string stopreason
  57. decimal { 5 } consignedaddqty
  58. datetime sptbackdate
  59. string delayreason
  60. string dscrp2
  61. string dscrp3
  62. string dscrp4
  63. decimal { 5 } planprice
  64. decimal { 10 } uprice_notax
  65. string formula2
  66. end type
  67. global type uo_buytask from nonvisualobject
  68. end type
  69. global uo_buytask uo_buytask
  70. type variables
  71. PUBLIC PROTECTEDWRITE Long scid = 0
  72. PUBLIC PROTECTEDWRITE Long TaskID = 0
  73. PUBLIC PROTECTEDWRITE DateTime opdate
  74. PUBLIC PROTECTEDWRITE String operator = ''
  75. PUBLIC PROTECTEDWRITE Int status = 0
  76. PUBLIC PROTECTEDWRITE DateTime Accomplishdate
  77. PUBLIC PROTECTEDWRITE String Permit_emp = ''
  78. Long orderid = 0
  79. String TaskCode = ''
  80. Int Kind = 0 //
  81. Long sptID = 0
  82. String Assign_emp
  83. DateTime Requiredate
  84. String dscrp
  85. string relcode
  86. string train
  87. long banktypeid
  88. long billtype
  89. Transaction commit_transaction
  90. decimal mrate
  91. long moneyid
  92. decimal mstpayamt,payamt
  93. Long priceflag
  94. PRIVATE:
  95. s_buytaskmx buytaskmx[] //明细结构数组
  96. Long it_MXBT = 0 //明细结构数组末指针
  97. Boolean IT_NEWBEGIN = FALSE //新建标志
  98. Boolean IT_UPDATEBEGIN = FALSE//修改标志
  99. end variables
  100. forward prototypes
  101. public function integer p_reset ()
  102. public function integer p_clearmx ()
  103. public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit)
  104. public function integer p_getinfo (long arg_scid, long arg_taskid, ref string arg_msg)
  105. public function integer updatebegin (long arg_scid, long arg_taskid, ref string arg_msg)
  106. public function integer getinfo (integer arg_scid, long arg_taskid, ref string arg_msg)
  107. public function integer cancelpermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  108. public function integer add_dscrp (long arg_scid, long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit)
  109. public function integer tempstoptask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  110. public function integer cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  111. public function integer firstpermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  112. public function integer lastpermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit)
  113. public function integer checkmxmpl (long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg)
  114. public function integer trycmplbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  115. public function integer finishtask (integer arg_finishtype, long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  116. public function integer newbegin (long arg_scid, ref string arg_msg)
  117. public function integer stopmx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, decimal arg_stopqty, ref string arg_msg, boolean arg_commit)
  118. public function integer addmxcmpl (long arg_scid, long arg_taskid, long arg_printid, decimal arg_qty, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit)
  119. public function integer cstopbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  120. public function integer stopbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit)
  121. public function integer acceptmx (s_buytask_mx s_mx, ref string arg_msg)
  122. public function integer acceptmx (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_uqty, decimal arg_addqty, decimal arg_uprice, decimal arg_rebate, decimal arg_planprice, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_unit, decimal arg_rate, long arg_relid, long arg_relprintid, string arg_relcode, string arg_formula, long arg_relid2, decimal arg_tax, string arg_plancode, string arg_dscrp2, string arg_dscrp3, string arg_dscrp4)
  123. public function integer wf_check_taskdamt (integer arg_scid, integer arg_taskid, ref string msg)
  124. public function integer priceaudit (long arg_scid, long arg_taskid, boolean arg_ifcommit, ref string arg_msg)
  125. public function integer c_priceaudit (long arg_scid, long arg_taskid, boolean arg_ifcommit, ref string arg_msg)
  126. end prototypes
  127. public function integer p_reset ();//INT p_RESET()
  128. //清除对象及其明细
  129. taskid = 0
  130. taskcode = ''
  131. operator = ''
  132. relcode = ''
  133. status = 0
  134. train = ''
  135. banktypeid = 0
  136. mstpayamt = 0
  137. it_newbegin = FALSE
  138. it_updatebegin = FALSE
  139. //清除明细
  140. P_CLEARMX()
  141. RETURN 1
  142. end function
  143. public function integer p_clearmx ();//INT p_clearmx()
  144. //清除明细
  145. it_mxbt=0
  146. mstpayamt = 0
  147. RETURN 1
  148. end function
  149. public function integer savesubmit (string arg_operator, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1,cnt = 0,i
  150. Long LS_NEWtaskID
  151. DateTime server_datetime
  152. String ls_sccode
  153. Long ll_taskid
  154. IF IsNull(dscrp) THEN dscrp = ''
  155. IF IsNull(assign_emp) THEN assign_emp = ''
  156. IF IsNull(train) THEN train = ''
  157. IF IsNull(banktypeid) THEN banktypeid = 0
  158. IF IsNull(arg_operator) THEN arg_operator = ''
  159. IF IsNull(billtype) THEN billtype = 0
  160. IF IsNull(moneyid) THEN moneyid = 0
  161. IF IsNull(mrate) THEN mrate = 0
  162. IF Len(dscrp) > 0 THEN dscrp = ' ' + dscrp
  163. operator = arg_operator
  164. IF it_newbegin = False And it_updatebegin = False THEN
  165. rslt = 0
  166. arG_MSG = "非编辑状态不可以提交"
  167. GOTO ext
  168. END IF
  169. //未注册限制
  170. IF sys_if_register = 0 THEN
  171. Long ll_bill_count
  172. SELECT count(*)
  173. INTO :ll_bill_count
  174. From u_buyTask Using commit_transaction;
  175. IF commit_transaction.SQLCode <> 0 THEN
  176. rslt = 0
  177. arG_MSG = "查询操作失败,采购订单数量 "
  178. GOTO ext
  179. END IF
  180. IF ll_bill_count > 30 THEN
  181. rslt = 0
  182. arG_MSG = "未注册版本,采购订单只能保存30张!"
  183. GOTO ext
  184. END IF
  185. END IF
  186. cnt = 0
  187. SELECT count(*) INTO :cnt
  188. FROM cw_currency
  189. Where moneyid = :moneyid Using commit_transaction;
  190. IF commit_transaction.SQLCode <> 0 THEN
  191. arG_MSG = '查询币种失败'
  192. rslt = 0
  193. GOTO ext
  194. END IF
  195. IF Trim(assign_emp) = '' THEN
  196. rslt = 0
  197. arG_MSG = "请输入订单负责人"
  198. GOTO ext
  199. END IF
  200. IF Kind = 0 THEN
  201. cnt = 0
  202. SELECT count(*) INTO :cnt
  203. FROM u_spt
  204. Where sptid = :sptid Using commit_transaction;
  205. IF commit_transaction.SQLCode <> 0 THEN
  206. rslt = 0
  207. arG_MSG = "查询操作失败,供应商资料"
  208. GOTO ext
  209. END IF
  210. IF cnt = 0 THEN
  211. rslt = 0
  212. arG_MSG = "供应商未定义或错误"
  213. GOTO ext
  214. END IF
  215. ELSE
  216. sptid = -1
  217. END IF
  218. cnt = 0
  219. SELECT count(*) INTO :cnt
  220. FROM cw_banktype
  221. Where banktypeid = :banktypeid;
  222. IF commit_transaction.SQLCode <> 0 THEN
  223. arG_MSG = '查询结算方式失败'
  224. rslt = 0
  225. GOTO ext
  226. END IF
  227. IF cnt = 0 THEN
  228. arG_MSG = '结算方式不存在'
  229. rslt = 0
  230. GOTO ext
  231. END IF
  232. SELECT Top 1 getdate() Into :server_datetime From u_user Using commit_transaction;
  233. //取得系统时间,借用操作员表
  234. IF commit_transaction.SQLCode <> 0 THEN
  235. rslt = 0
  236. arG_MSG = "查询操作失败,日期 "
  237. GOTO ext
  238. END IF
  239. IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空
  240. rslt = 0
  241. arG_MSG = "没有正确采购订单明细内容"
  242. GOTO ext
  243. END IF
  244. cnt = 0
  245. SELECT count(*) INTO :cnt
  246. FROM u_user
  247. Where username = :operator Using commit_transaction ;
  248. IF commit_transaction.SQLCode <> 0 THEN
  249. rslt = 0
  250. arG_MSG = "查询操作失败,操作员!"
  251. GOTO ext
  252. END IF
  253. IF cnt = 0 THEN
  254. rslt = 0
  255. arG_MSG = "操作员姓名未登记或已取消!"
  256. GOTO ext
  257. END IF
  258. opdate = server_datetime //填写单据建立时间(最近修改时间)
  259. ////////////////////////////////////////////// //开始区分:新建/更新 处理
  260. IF taskid = 0 THEN //新建
  261. ll_taskid = f_sys_scidentity(scid,"u_buytask","taskID",arG_MSG,True, commit_transaction) //数据commit事务)
  262. IF ll_taskid <= 0 THEN
  263. rslt = 0
  264. GOTO ext
  265. END IF
  266. IF f_get_sccode(scid,commit_transaction,ls_sccode,arG_MSG) = 0 THEN
  267. rslt = 0
  268. GOTO ext
  269. END IF
  270. taskcode = getid(scid,ls_sccode + 'BG',Date(server_datetime),False,commit_transaction)
  271. IF taskcode = "err" THEN
  272. taskcode = ''
  273. rslt = 0
  274. arG_MSG = "无法获取采购订单编号"+"~n"+commit_transaction.SQLErrText
  275. GOTO ext
  276. END IF
  277. INSERT INTO u_buyTask
  278. ( scid,
  279. taskid,
  280. TaskCode,
  281. kind,
  282. sptID,
  283. requiredate,
  284. Status,
  285. Opemp,
  286. Assign_Emp,
  287. Permit_Emp,
  288. Dscrp,
  289. opdate,
  290. orderid,
  291. relcode,
  292. train,
  293. banktypeid,
  294. billtype,
  295. moneyid,
  296. mrate,
  297. mstpayamt)
  298. VALUES ( :scid,
  299. :ll_taskid,
  300. :TaskCode,
  301. :Kind,
  302. :sptID,
  303. :requiredate,
  304. :Status,
  305. :Operator,
  306. :Assign_Emp,
  307. :Permit_Emp,
  308. :Dscrp,
  309. :opdate,
  310. :orderid,
  311. :relcode,
  312. :train,
  313. :banktypeid,
  314. :billtype,
  315. :moneyid,
  316. :mrate,
  317. :mstpayamt) Using commit_transaction ;
  318. IF commit_transaction.SQLCode <> 0 THEN
  319. rslt = 0
  320. IF Pos(Lower(commit_transaction.SQLErrText),'pk_u_buyTask') > 0 THEN
  321. arG_MSG = '插入采购订单操作失败,关键字分部ID、单据ID重复'
  322. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'ix_u_buyTask_1') > 0 THEN
  323. arG_MSG = '插入采购订单操作失败,单据编号重复'
  324. ELSE
  325. arG_MSG = "插入采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  326. END IF
  327. GOTO ext
  328. END IF
  329. //读取新taskid
  330. taskid = ll_taskid
  331. ELSE //////////////////////////////////////////////// //更新
  332. UPDATE u_buytask
  333. SET kind = :Kind,
  334. sptID = :sptID,
  335. requiredate = :requiredate,
  336. Assign_Emp = :Assign_Emp,
  337. Dscrp = :Dscrp,
  338. moddate = getdate(),
  339. Modemp = :publ_operator,
  340. orderid = :orderid,
  341. relcode = :relcode,
  342. train = :train,
  343. banktypeid = :banktypeid,
  344. billtype = :billtype,
  345. moneyid = :moneyid,
  346. mrate = :mrate,
  347. mstpayamt = :mstpayamt
  348. WHERE u_buytask.taskid = :taskid
  349. AND scid = :scid
  350. And Status = 0 Using commit_transaction;
  351. IF commit_transaction.SQLCode <> 0 Or commit_transaction.SQLNRows <= 0 THEN
  352. rslt = 0
  353. IF Pos(Lower(commit_transaction.SQLErrText),'pk_u_buyTask') > 0 THEN
  354. arG_MSG = '更新采购订单操作失败,关键字分部ID、单据ID重复'
  355. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'ix_u_buyTask_1') > 0 THEN
  356. arG_MSG = '更新采购订单操作失败,单据编号重复'
  357. ELSE
  358. arG_MSG = "更新采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  359. END IF
  360. GOTO ext
  361. END IF
  362. //删除原有明细
  363. DELETE FROM u_buytaskmx
  364. Where u_buytaskmx.taskid = :taskid And scid = :scid Using commit_transaction;
  365. IF commit_transaction.SQLCode <> 0 THEN
  366. rslt = 0
  367. arG_MSG = "删除旧有明细操作失败"+"~n"+commit_transaction.SQLErrText
  368. GOTO ext
  369. END IF
  370. END IF
  371. FOR i = 1 To it_mxbt
  372. INSERT INTO u_buytaskmx
  373. ( scid,
  374. taskid,
  375. mtrlid,
  376. qty,
  377. price,
  378. dscrp,
  379. printid,
  380. fprice,
  381. rebate,
  382. requiredate,
  383. orderid,
  384. storageid,
  385. status,
  386. iforder,
  387. sptmtrlname,
  388. unit,
  389. rate,
  390. uqty,
  391. addqty,
  392. uprice,
  393. woodcode,
  394. pcode,
  395. dftsptprice,
  396. relid,
  397. relprintid,
  398. relcode,
  399. formula,
  400. relid2,
  401. tax,
  402. uamt,
  403. uamt_tax,
  404. bsamt,
  405. bsamt_tax,
  406. plancode,
  407. dscrp2,
  408. dscrp3,
  409. dscrp4,
  410. uprice_notax,
  411. formula2)
  412. VALUES (:scid,
  413. :taskid,
  414. :buytaskmx[i].mtrlid,
  415. :buytaskmx[i].QTY,
  416. :buytaskmx[i].acprice,
  417. :buytaskmx[i].dscrp,
  418. :buytaskmx[i].printid,
  419. :buytaskmx[i].fprice ,
  420. :buytaskmx[i].rebate,
  421. :buytaskmx[i].requiredate,
  422. :buytaskmx[i].orderid,
  423. :buytaskmx[i].storageid,
  424. :buytaskmx[i].Status,
  425. :buytaskmx[i].iforder,
  426. :buytaskmx[i].sptmtrlname,
  427. :buytaskmx[i].unit,
  428. :buytaskmx[i].rate,
  429. :buytaskmx[i].uqty,
  430. :buytaskmx[i].addqty,
  431. :buytaskmx[i].uprice,
  432. :buytaskmx[i].woodcode,
  433. :buytaskmx[i].pcode,
  434. :buytaskmx[i].dftsptprice,
  435. :buytaskmx[i].relid,
  436. :buytaskmx[i].relprintid,
  437. :buytaskmx[i].relcode,
  438. :buytaskmx[i].formula,
  439. :buytaskmx[i].relid2,
  440. :buytaskmx[i].tax,
  441. :buytaskmx[i].uamt,
  442. :buytaskmx[i].uamt_tax,
  443. :buytaskmx[i].bsamt,
  444. :buytaskmx[i].bsamt_tax,
  445. :buytaskmx[i].plancode,
  446. :buytaskmx[i].dscrp2,
  447. :buytaskmx[i].dscrp3,
  448. :buytaskmx[i].dscrp4,
  449. :buytaskmx[i].uprice_notax,
  450. :buytaskmx[i].formula2) Using commit_transaction;
  451. IF commit_transaction.SQLCode <> 0 THEN
  452. IF it_newbegin THEN taskid = 0 //还原taskid
  453. rslt = 0
  454. IF Pos(Lower(commit_transaction.SQLErrText),'pk_u_buytaskmx') > 0 THEN
  455. arG_MSG = '插入明细表操作失败,关键字分部ID、单据ID、明细ID重复'
  456. ELSEIF Pos(Lower(commit_transaction.SQLErrText),'u_buytaskmx_x') > 0 THEN
  457. arG_MSG = '插入明细表操作失败,违反唯一约束'
  458. ELSE
  459. arG_MSG = "插入明细操作失败"+"~n"+commit_transaction.SQLErrText
  460. END IF
  461. GOTO ext
  462. END IF
  463. NEXT
  464. it_newbegin = False
  465. it_updatebegin = False
  466. ext:
  467. IF rslt = 0 THEN
  468. p_clearmx()
  469. ROLLBACK Using commit_transaction;
  470. ELSEIF arg_ifcommit And rslt = 1 THEN
  471. COMMIT Using commit_transaction;
  472. END IF
  473. arG_MSG = '采购订单,'+ arG_MSG
  474. Return(rslt)
  475. end function
  476. public function integer p_getinfo (long arg_scid, long arg_taskid, ref string arg_msg);Int rslt = 1
  477. SELECT taskid,
  478. TaskCode,
  479. kind,
  480. sptID,
  481. requiredate,
  482. accomplishdate,
  483. Status,
  484. Opemp,
  485. Assign_Emp,
  486. Permit_Emp,
  487. Dscrp,
  488. opdate,
  489. orderid ,
  490. relcode,
  491. banktypeid,
  492. train,
  493. billtype,
  494. moneyid,
  495. mrate,
  496. mstpayamt,
  497. payamt,
  498. priceflag
  499. INTO :taskid,
  500. :TaskCode,
  501. :Kind,
  502. :sptID,
  503. :requiredate,
  504. :accomplishdate,
  505. :Status,
  506. :Operator,
  507. :Assign_Emp,
  508. :Permit_Emp,
  509. :Dscrp,
  510. :opdate,
  511. :orderid,
  512. :relcode,
  513. :banktypeid,
  514. :train,
  515. :billtype,
  516. :moneyid,
  517. :mrate,
  518. :mstpayamt,
  519. :payamt,
  520. :priceflag
  521. FROM u_buyTask
  522. WHERE u_buyTask.TaskID = :arg_taskid AND
  523. u_buyTask.scid = :arg_scid USING commit_transaction;
  524. IF commit_transaction.SQLCode <> 0 THEN
  525. rslt = 0
  526. IF Pos(Lower(commit_transaction.SQLErrText),'more than') > 0 THEN
  527. arg_msg = '查询单据操作失败,查询数据返回值多于一个'
  528. ELSE
  529. arg_msg = '查询订单内容失败(错误订单唯一码)'
  530. END IF
  531. GOTO ext
  532. END IF
  533. scid = arg_scid
  534. ext:
  535. RETURN rslt
  536. end function
  537. public function integer updatebegin (long arg_scid, long arg_taskid, ref string arg_msg);//UPDATEbegin(long arg_taskid,ref string arg_msg)
  538. //从置对象,设定业务类型与关联ID,准备更新进仓单
  539. //0 fail 1 success
  540. long rslt=1,CNT=0
  541. if arg_scid < 0 then
  542. arg_msg = '请选择分部'
  543. rslt = 0
  544. goto ext
  545. end if
  546. IF arg_taskid<=0 THEN
  547. rslt=0
  548. ARG_MSG='错误采购订单唯一码'
  549. goto ext
  550. end if
  551. if p_getinfo(arg_scid,arg_taskid,arg_msg)=0 then
  552. rslt=0
  553. goto ext
  554. end if
  555. if Status<>0 then
  556. rslt=0
  557. ARG_MSG='已经处于审核或完成等状态,不可以修改,如果订单未完成并要修改请先撤销审核'
  558. goto ext
  559. end if
  560. it_newbegin=FALSE
  561. it_updatebegin=TRUE
  562. p_clearmx() //清除明细
  563. scid=arg_scid
  564. ext:
  565. if rslt=0 then p_reset()
  566. arg_msg = '采购订单,'+ arg_msg
  567. return rslt
  568. end function
  569. public function integer getinfo (integer arg_scid, long arg_taskid, ref string arg_msg);//getinfo(long arg_taskid,string arg_msg)
  570. //0 失败 1成功
  571. Int rslt = 1,I = 1,NO_MXCHECK = 0
  572. IF arg_taskid <= 0 THEN
  573. rslt = 0
  574. ARG_MSG = '错误采购订单唯一码'
  575. GOTO ext
  576. END IF
  577. IF p_getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  578. rslt = 0
  579. GOTO ext
  580. END IF
  581. //用游标读取明细
  582. DECLARE CUR_INWAERMX CURSOR FOR
  583. SELECT u_buytaskmx.mtrlid,
  584. u_buytaskmx.qty,
  585. u_buytaskmx.price,
  586. u_buytaskmx.dscrp,
  587. u_mtrldef.mtrlcode,
  588. u_buytaskmx.printid,
  589. u_buytaskmx.fprice,
  590. u_buytaskmx.rebate,
  591. u_buytaskmx.orderid,
  592. u_buytaskmx.storageid,
  593. u_buytaskmx.status,
  594. u_buytaskmx.sptmtrlname,
  595. u_buytaskmx.unit,
  596. u_buytaskmx.rate,
  597. u_buytaskmx.uqty,
  598. u_buytaskmx.addqty,
  599. u_buytaskmx.uprice,
  600. u_buytaskmx.woodcode,
  601. u_buytaskmx.pcode,
  602. u_buytaskmx.dftsptprice,
  603. u_buytaskmx.relid,
  604. u_buytaskmx.relprintid,
  605. u_buytaskmx.relcode,
  606. u_buytaskmx.stopqty,
  607. u_buytaskmx.relid2,
  608. u_buytaskmx.tax,
  609. u_buytaskmx.uamt,
  610. u_buytaskmx.uamt_tax,
  611. u_buytaskmx.bsamt,
  612. u_buytaskmx.bsamt_tax
  613. FROM u_buytaskmx,u_mtrldef
  614. WHERE u_buytaskmx.taskid = :arg_taskid AND
  615. u_buytaskmx.mtrlid = u_mtrldef.mtrlid AND
  616. u_buytaskmx.scid = :arg_scid Using commit_transaction;
  617. OPEN CUR_INWAERMX;
  618. FETCH CUR_INWAERMX INTO :buytaskmx[I].mtrlid,:buytaskmx[I].qty,:buytaskmx[I].price,
  619. :buytaskmx[I].dscrp,:buytaskmx[I].mtrlcode,
  620. :buytaskmx[I].printid,:buytaskmx[I].fprice,:buytaskmx[I].rebate,
  621. :buytaskmx[I].orderid,:buytaskmx[I].storageid,:buytaskmx[I].status,
  622. :buytaskmx[I].sptmtrlname,:buytaskmx[I].unit,:buytaskmx[I].rate,
  623. :buytaskmx[I].uqty,:buytaskmx[I].addqty,:buytaskmx[I].uprice,
  624. :buytaskmx[I].woodcode,:buytaskmx[I].pcode,:buytaskmx[I].dftsptprice,
  625. :buytaskmx[I].relid,:buytaskmx[I].relprintid,:buytaskmx[I].relcode,:buytaskmx[I].stopqty,
  626. :buytaskmx[I].relid2,
  627. :buytaskmx[I].tax,
  628. :buytaskmx[I].uamt,
  629. :buytaskmx[I].uamt_tax,
  630. :buytaskmx[I].bsamt,
  631. :buytaskmx[I].bsamt_tax;
  632. DO WHILE commit_transaction.SQLCode = 0
  633. I++
  634. FETCH CUR_INWAERMX INTO :buytaskmx[I].mtrlid,:buytaskmx[I].qty,:buytaskmx[I].price,
  635. :buytaskmx[I].dscrp,:buytaskmx[I].mtrlcode,
  636. :buytaskmx[I].printid,:buytaskmx[I].fprice,:buytaskmx[I].rebate,
  637. :buytaskmx[I].orderid,:buytaskmx[I].storageid,:buytaskmx[I].status,
  638. :buytaskmx[I].sptmtrlname,:buytaskmx[I].unit,:buytaskmx[I].rate,
  639. :buytaskmx[I].uqty,:buytaskmx[I].addqty,:buytaskmx[I].uprice,
  640. :buytaskmx[I].woodcode,:buytaskmx[I].pcode,:buytaskmx[I].dftsptprice,
  641. :buytaskmx[I].relid,:buytaskmx[I].relprintid,:buytaskmx[I].relcode,:buytaskmx[I].stopqty,
  642. :buytaskmx[I].relid2,
  643. :buytaskmx[I].tax,
  644. :buytaskmx[I].uamt,
  645. :buytaskmx[I].uamt_tax,
  646. :buytaskmx[I].bsamt,
  647. :buytaskmx[I].bsamt_tax;
  648. LOOP
  649. CLOSE CUR_INWAERMX;
  650. //检验明细是否读入完整
  651. SELECT COUNT(*) INTO :NO_MXCHECK
  652. FROM u_buytaskmx
  653. WHERE u_buytaskmx.taskid = :arg_taskid AND
  654. u_buytaskmx.scid = :arg_scid Using commit_transaction;
  655. IF commit_transaction.SQLCode <> 0 THEN
  656. rslt = 0
  657. ARG_MSG = "查询操作失败,采购订单明细数量"
  658. GOTO ext
  659. END IF
  660. IF I <> (NO_MXCHECK+1) THEN
  661. rslt = 0
  662. ARG_MSG = "查询操作失败,采购订单明细"
  663. GOTO ext
  664. END IF
  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 cancelpermit (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  673. DateTime null_dt
  674. uo_saletask uo_sale
  675. uo_sale = Create uo_saletask
  676. uo_sale.commit_transaction = commit_transaction
  677. uo_order_ml_mrp uo_mrp
  678. uo_mrp = Create uo_order_ml_mrp
  679. IF arg_taskid <= 0 THEN
  680. rslt = 0
  681. ARG_MSG = '错误采购订单唯一码'
  682. GOTO ext
  683. END IF
  684. SetNull(null_dt)
  685. IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  686. rslt = 0
  687. GOTO ext
  688. END IF
  689. IF Status <> 1 THEN
  690. rslt = 0
  691. ARG_MSG = "订单只有在已审核状态才可以执行撤消审核,请核对"
  692. GOTO ext
  693. END IF
  694. SELECT count(*)
  695. INTO :cnt
  696. FROM u_inwaremx,u_inware
  697. WHERE ( u_inware.scid = u_inwaremx.scid ) AND
  698. ( u_inware.inwareid = u_inwaremx.inwareid ) AND
  699. ( u_inware.billtype = 1) AND
  700. ( u_inwaremx.relid = :arg_taskid ) AND
  701. ( u_inwaremx.scid = :arg_scid) Using commit_transaction ;
  702. IF commit_transaction.SQLCode <> 0 THEN
  703. rslt = 0
  704. ARG_MSG = "查询采购订单收货数量操作失败"
  705. GOTO ext
  706. END IF
  707. IF cnt > 0 THEN
  708. rslt = 0
  709. ARG_MSG = "采购订单已经有相关进仓单据,不可以撤消审核"
  710. GOTO ext
  711. END IF
  712. Decimal lde_consignedqty
  713. SELECT sum(consignedqty) INTO :lde_consignedqty FROM u_buytaskmx WHERE
  714. u_buytaskmx.scid = :arg_scid AND u_buytaskmx.taskid = :arg_taskid
  715. Using commit_transaction ;
  716. IF commit_transaction.SQLCode <> 0 THEN
  717. rslt = 0
  718. ARG_MSG = "查询采购订单收货数量操作失败"
  719. GOTO ext
  720. END IF
  721. IF lde_consignedqty > 0 THEN
  722. rslt = 0
  723. ARG_MSG = "采购订单明细已经有已收货数,不可以撤消审核"
  724. GOTO ext
  725. END IF
  726. UPDATE u_buyTask
  727. SET Status = 0,
  728. permit_emp = '',
  729. permit_date = :null_dt
  730. WHERE scid = :arg_scid
  731. AND TaskID = :arg_taskid
  732. AND Status = 1
  733. Using commit_transaction ;
  734. IF commit_transaction.SQLCode <> 0 THEN
  735. rslt = 0
  736. IF Pos(Lower(commit_transaction.SQLErrText),'pk_u_buyTask') > 0 THEN
  737. ARG_MSG = '采购订单撤消审核操作失败,关键字分部ID、单据ID重复'
  738. ELSE
  739. ARG_MSG = "采购订单撤消审核操作失败"+"~n"+commit_transaction.SQLErrText
  740. END IF
  741. GOTO ext
  742. ELSEIF commit_transaction.SQLNRows = 0 THEN
  743. rslt = 0
  744. ARG_MSG = "订单正在更新,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  745. GOTO ext
  746. END IF
  747. //更新销售订单采购清单订购数
  748. Long ll_i,ll_status
  749. FOR ll_i = 1 To it_mxbt
  750. IF billtype = 1 THEN
  751. IF buytaskmx[ll_i].relid > 0 And buytaskmx[ll_i].relprintid > 0 THEN
  752. IF uo_sale.addmxcmpl_assign(scid, buytaskmx[ll_i].relid, buytaskmx[ll_i].relprintid, &
  753. buytaskmx[ll_i].mtrlid, 2, 0 - buytaskmx[ll_i].qty, False, ARG_MSG) = 0 THEN
  754. rslt = 0
  755. GOTO ext
  756. END IF
  757. END IF
  758. ELSEIF billtype = 2 THEN
  759. IF buytaskmx[ll_i].relid > 0 And buytaskmx[ll_i].relprintid > 0 And buytaskmx[ll_i].relid2 > 0 THEN
  760. IF uo_mrp.uof_add_rqmtrl_consignedqty(scid, buytaskmx[ll_i].relid, buytaskmx[ll_i].relprintid, buytaskmx[ll_i].relid2, 2, 0 - buytaskmx[ll_i].qty, False, ARG_MSG) = 0 THEN
  761. rslt = 0
  762. GOTO ext
  763. END IF
  764. END IF
  765. END IF
  766. NEXT
  767. it_newbegin = False
  768. it_updatebegin = False
  769. ext:
  770. IF rslt = 0 THEN
  771. ROLLBACK Using commit_transaction;
  772. ELSEIF arg_ifcommit THEN
  773. COMMIT Using commit_transaction;
  774. END IF
  775. p_reset()
  776. Destroy uo_sale
  777. Destroy uo_mrp
  778. ARG_MSG = '采购订单,'+ ARG_MSG
  779. Return (rslt)
  780. end function
  781. public function integer add_dscrp (long arg_scid, long arg_taskid, string arg_newdescppart, ref string arg_msg, boolean arg_ifcommit);//add_dscrp(string arg_newdescppart)
  782. //0 fail 1 SUCCESS
  783. Int rslt = 1
  784. arg_newdescppart = Trim(arg_newdescppart)
  785. IF it_updatebegin Or it_newbegin THEN
  786. rslt = 0
  787. arG_MSG = "编辑状态下不可用"
  788. GOTO ext
  789. END IF
  790. IF arg_newdescppart = '' THEN
  791. rslt = 0
  792. arG_MSG = "要添加内容为空,操作取消"
  793. GOTO ext
  794. END IF
  795. IF p_getinfo(arg_scid,arg_taskid,arG_MSG) = 0 THEN
  796. rslt = 0
  797. GOTO ext
  798. END IF
  799. IF status = 0 THEN
  800. rslt = 0
  801. arG_MSG = "待采购审核状态下不可用"
  802. GOTO ext
  803. END IF
  804. UPDATE u_buyTask
  805. SET DSCRP = DSCRP+' '+:arg_newdescppart
  806. Where u_buyTask.taskid = :arg_taskid Using commit_transaction;
  807. IF commit_transaction.SQLCode <> 0 THEN
  808. rslt = 0
  809. // IF Pos(Lower(commit_transaction.SQLErrText),'pk_u_buyTask') > 0 THEN
  810. // arG_MSG = '添加备注单操作失败,关键字分部ID、单据ID重复'
  811. // ELSE
  812. arG_MSG = "添加采购订单备注操作失败"+"~n"+commit_transaction.SQLErrText
  813. // END IF
  814. ROLLBACK Using commit_transaction;
  815. GOTO ext
  816. END IF
  817. DSCRP = DSCRP+' '+arg_newdescppart
  818. it_newbegin = False
  819. it_updatebegin = False
  820. ext:
  821. IF arg_ifcommit And rslt = 1 THEN
  822. COMMIT Using commit_transaction;
  823. END IF
  824. p_reset()
  825. arG_MSG = '采购订单,'+ arG_MSG
  826. Return (rslt)
  827. end function
  828. public function integer tempstoptask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0
  829. IF arg_taskid<=0 THEN
  830. rslt=0
  831. ARG_MSG='错误采购订单唯一码'
  832. goto ext
  833. end if
  834. if p_getinfo(arg_scid,arg_taskid,arg_msg)=0 then
  835. rslt=0
  836. goto ext
  837. end if
  838. IF Status<>1 and Status<>2 THEN
  839. rslt=0
  840. arG_MSG="订单只有在进行状态或暂停状态才可以执行暂停/取消暂停操作"
  841. goto ext
  842. END IF
  843. if Status=1 then
  844. UPDATE u_buyTask
  845. SET Status = 2 ,stopemp=:publ_operator
  846. WHERE TaskID = :arg_taskid and scid=:arg_scid using commit_transaction ;
  847. if commit_transaction.sqlcode<>0 then
  848. rslt=0
  849. arG_MSG="暂停采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  850. goto ext
  851. end if
  852. else
  853. UPDATE u_buyTask
  854. SET Status = 1,stopemp=''
  855. WHERE TaskID = :arg_taskid and scid=:arg_scid using commit_transaction;
  856. if commit_transaction.sqlcode<>0 then
  857. rslt=0
  858. arG_MSG="取消暂停采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  859. goto ext
  860. end if
  861. end if
  862. it_newbegin=FALSE
  863. it_updatebegin=FALSE
  864. EXT:
  865. if rslt=0 then
  866. rollback using commit_transaction;
  867. elseif arg_ifcommit then
  868. COMMIT using commit_transaction;
  869. end if
  870. p_reset()
  871. arg_msg = '采购订单,'+ arg_msg
  872. return (rslt)
  873. end function
  874. public function integer cancel (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//删除未审核的订单
  875. //0 FAIL, 1 SUCCESS
  876. Int rslt = 1
  877. uo_order_ml_mrp uo_mrp
  878. uo_mrp = CREATE uo_order_ml_mrp
  879. IF arg_taskid <= 0 THEN
  880. rslt = 0
  881. ARG_MSG = '错误采购订单唯一码'
  882. GOTO ext
  883. END IF
  884. IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  885. rslt = 0
  886. GOTO ext
  887. END IF
  888. IF Status <> 0 THEN
  889. rslt = 0
  890. ARG_MSG = "订单已经审核,不可以删除"
  891. GOTO ext
  892. END IF
  893. IF wf_check_taskdamt(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  894. rslt = 0
  895. GOTO ext
  896. END IF
  897. DELETE FROM u_buytask
  898. Where u_buytask.taskid = :arg_taskid AND scid = :arg_scid USING commit_transaction;
  899. IF commit_transaction.SQLCode <> 0 THEN
  900. rslt = 0
  901. ARG_MSG = "删除采购订单操作失败"
  902. // ROLLBACK USING commit_transaction;
  903. GOTO ext
  904. END IF
  905. DELETE FROM u_buytaskmx
  906. Where u_buytaskmx.taskid = :arg_taskid AND scid = :arg_scid USING commit_transaction;
  907. IF commit_transaction.SQLCode <> 0 THEN
  908. rslt = 0
  909. ARG_MSG = "删除采购订单明细操作失败"
  910. // ROLLBACK USING commit_transaction;
  911. GOTO ext
  912. END IF
  913. Long ll_i
  914. FOR ll_i = 1 TO it_MXBT
  915. IF billtype = 2 THEN
  916. IF buytaskmx[ll_i].relid > 0 AND buytaskmx[ll_i].relprintid > 0 AND buytaskmx[ll_i].relid2 > 0 THEN
  917. IF uo_mrp.uof_del_rqmtrl_relcode(scid, buytaskmx[ll_i].relid, buytaskmx[ll_i].relprintid, buytaskmx[ll_i].relid2, 2, FALSE, ARG_MSG) = 0 THEN
  918. rslt = 0
  919. GOTO ext
  920. END IF
  921. END IF
  922. END IF
  923. NEXT
  924. it_newbegin = FALSE
  925. it_updatebegin = FALSE
  926. ext:
  927. IF rslt = 0 THEN
  928. ROLLBACK USING commit_transaction;
  929. elseif arg_ifcommit AND rslt = 1 THEN
  930. COMMIT USING commit_transaction;
  931. END IF
  932. p_reset()
  933. ARG_MSG = '采购订单,'+ ARG_MSG
  934. DESTROY uo_mrp
  935. Return (rslt)
  936. end function
  937. public function integer firstpermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);//buypermit
  938. Int rslt = 1,cnt = 0
  939. uo_saletask uo_sale
  940. uo_sale = CREATE uo_saletask
  941. uo_sale.commit_transaction = commit_transaction
  942. uo_order_ml_mrp uo_mrp
  943. uo_mrp = CREATE uo_order_ml_mrp
  944. IF arg_taskid <= 0 THEN
  945. rslt = 0
  946. ARG_MSG = '错误采购订单唯一码'
  947. GOTO ext
  948. END IF
  949. IF getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  950. rslt = 0
  951. GOTO ext
  952. END IF
  953. IF Status <> 0 THEN
  954. rslt = 0
  955. ARG_MSG = "订单已经审核,操作取消"
  956. GOTO ext
  957. END IF
  958. cnt = 0
  959. SELECT count(*) INTO :cnt
  960. FROM u_user
  961. Where username = :arg_emp USING commit_transaction;
  962. IF commit_transaction.SQLCode <> 0 THEN
  963. rslt = 0
  964. ARG_MSG = "查询操作失败,操作员!"
  965. GOTO ext
  966. END IF
  967. IF cnt = 0 THEN
  968. rslt = 0
  969. ARG_MSG = "操作员姓名未登记或已取消!"
  970. GOTO ext
  971. END IF
  972. UPDATE u_buyTask
  973. SET Permit_Emp = :arg_emp,
  974. Permit_date = getdate(),
  975. Status = 1
  976. WHERE scid = :arg_scid
  977. AND TaskID = :arg_taskid
  978. AND Status = 0
  979. USING commit_transaction;
  980. IF commit_transaction.SQLCode <> 0 THEN
  981. rslt = 0
  982. ARG_MSG = "订单最终审核操作失败"+"~n"+commit_transaction.SQLErrText
  983. GOTO ext
  984. ELSEIF commit_transaction.SQLNRows = 0 THEN
  985. rslt = 0
  986. ARG_MSG = "订单正在更新,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  987. GOTO ext
  988. END IF
  989. //更新销售订单采购清单订购数
  990. Long ll_i
  991. Decimal ll_taskrate,ll_taskaddqty,ll_buytaskqty,ll_needbuyqty
  992. //int li_plantype
  993. //li_plantype = 2
  994. FOR ll_i = 1 TO it_mxbt
  995. IF billtype = 1 THEN
  996. IF uo_sale.addmxcmpl_assign(scid, buytaskmx[ll_i].relid, buytaskmx[ll_i].relprintid, &
  997. buytaskmx[ll_i].mtrlid, 2, buytaskmx[ll_i].qty, FALSE, ARG_MSG) = 0 THEN
  998. rslt = 0
  999. GOTO ext
  1000. END IF
  1001. ELSEIF billtype = 2 THEN
  1002. IF buytaskmx[ll_i].relid > 0 AND buytaskmx[ll_i].relprintid > 0 AND buytaskmx[ll_i].relid2 > 0 THEN
  1003. IF uo_mrp.uof_add_rqmtrl_consignedqty(scid, buytaskmx[ll_i].relid, buytaskmx[ll_i].relprintid, buytaskmx[ll_i].relid2, 2, buytaskmx[ll_i].qty, FALSE, ARG_MSG) = 0 THEN
  1004. rslt = 0
  1005. GOTO ext
  1006. END IF
  1007. END IF
  1008. END IF
  1009. NEXT
  1010. it_newbegin = FALSE
  1011. it_updatebegin = FALSE
  1012. ext:
  1013. IF rslt = 0 THEN
  1014. ROLLBACK USING commit_transaction;
  1015. ELSEIF arg_ifcommit THEN
  1016. COMMIT USING commit_transaction;
  1017. END IF
  1018. p_reset()
  1019. DESTROY uo_sale
  1020. DESTROY uo_mrp
  1021. ARG_MSG = '采购订单,'+ ARG_MSG
  1022. Return (rslt)
  1023. end function
  1024. public function integer lastpermit (long arg_scid, long arg_taskid, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1025. IF arg_taskid <= 0 THEN
  1026. rslt = 0
  1027. ARG_MSG = '错误采购订单唯一码'
  1028. GOTO ext
  1029. END IF
  1030. IF p_getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  1031. rslt = 0
  1032. GOTO ext
  1033. END IF
  1034. IF Status <> 4 THEN
  1035. rslt = 0
  1036. ARG_MSG = "订单只有在已采购审核状态才可以执行最终审核,请核对"
  1037. GOTO ext
  1038. END IF
  1039. cnt = 0
  1040. SELECT count(*) INTO :cnt
  1041. FROM u_user
  1042. Where username = :arg_emp ;
  1043. IF sqlca.SQLCode <> 0 THEN
  1044. rslt = 0
  1045. ARG_MSG = "查询操作失败,操作员!"
  1046. GOTO ext
  1047. END IF
  1048. IF cnt = 0 THEN
  1049. rslt = 0
  1050. ARG_MSG = "操作员姓名未登记或已取消!"
  1051. GOTO ext
  1052. END IF
  1053. UPDATE u_buyTask
  1054. SET Permit_emp = :arg_emp,
  1055. Status = 1
  1056. Where TaskID = :arg_taskid ;
  1057. IF sqlca.SQLCode <> 0 THEN
  1058. rslt = 0
  1059. ARG_MSG = "采购订单最终审核操作失败"+"~n"+sqlca.SQLErrText
  1060. GOTO ext
  1061. END IF
  1062. it_newbegin = FALSE
  1063. it_updatebegin = FALSE
  1064. ext:
  1065. IF rslt = 0 THEN
  1066. ROLLBACK;
  1067. ELSEIF arg_ifcommit THEN
  1068. COMMIT;
  1069. END IF
  1070. p_reset()
  1071. arg_msg = '采购订单,'+ arg_msg
  1072. RETURN (rslt)
  1073. end function
  1074. public function integer checkmxmpl (long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg);//checkmxcmpl(long arg_taskid,long arg_mtrlid,decimal arg_addqty,ref string arg_msg,boolean arg_ifcommit)
  1075. INT rslt=1,cnt=0
  1076. IF arg_taskid<=0 THEN
  1077. rslt=0
  1078. ARG_MSG='错误采购订单唯一码'
  1079. goto ext
  1080. end if
  1081. if arg_addqty=0 then
  1082. rslt=1
  1083. goto ext
  1084. end if
  1085. rslt=p_getinfo(arg_scid,arg_taskid,arg_msg)
  1086. if rslt=0 then goto ext
  1087. IF Status<>1 THEN
  1088. rslt=0
  1089. arG_MSG="采购订单只有在进行状态下才可以执行进仓"
  1090. goto ext
  1091. END IF
  1092. decimal ls_buyQty,ls_assignQty
  1093. string ls_mtrlcode
  1094. SELECT u_buyTaskMx.Qty,
  1095. u_buyTaskMx.assignQty,
  1096. u_mtrldef.mtrlcode
  1097. INTO :ls_buyQty,
  1098. :ls_assignQty,
  1099. :ls_mtrlcode
  1100. FROM u_buyTaskMx ,u_mtrldef
  1101. WHERE ( u_buyTaskMx.TaskID =:arg_taskid ) AND
  1102. ( u_buyTaskMx.MtrlID =:arg_mtrlid ) and
  1103. ( u_mtrldef.mtrlid=u_buyTaskMx.MtrlID ) and
  1104. ( u_buytaskmx.scid=:arg_scid) using commit_transaction;
  1105. if commit_transaction.sqlcode<>0 then
  1106. rslt=0
  1107. if pos(lower(sqlca.SQLErrText),'more than') > 0 then
  1108. arg_msg = "物料编码["+ls_mtrlcode+"],查询采购订单已完成数量操作失败,查询数据返回值多于一个"
  1109. else
  1110. arG_MSG="因网络或错误物料编码["+ls_mtrlcode+"]导致查询采购订单已完成数量操作失败"
  1111. end if
  1112. goto ext
  1113. end if
  1114. if ls_buyQty < ls_assignQty + arg_addqty then
  1115. rslt=0
  1116. arG_MSG="物料["+ls_mtrlcode+"]的订单未完成数量只有"+string(ls_buyQty - ls_assignQty,'#,##0.0#')+",不能入库"+string(arg_addqty,'#,##0.0#')
  1117. goto ext
  1118. end if
  1119. EXT:
  1120. p_reset()
  1121. arg_msg = '采购订单,'+ arg_msg
  1122. return (rslt)
  1123. end function
  1124. public function integer trycmplbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);//trycmplbuytask(arg_taskid,arg_msg,arg_ifcommit)
  1125. Int rslt = 1,cnt = 0
  1126. DateTime null_dt
  1127. SetNull(null_dt)
  1128. IF arg_taskid <= 0 THEN
  1129. rslt = 0
  1130. arg_msg = '错误采购订单唯一码'
  1131. GOTO ext
  1132. END IF
  1133. IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  1134. rslt = 0
  1135. GOTO ext
  1136. END IF
  1137. IF status <> 1 AND status <> 5 THEN
  1138. rslt =0
  1139. IF status <> 1 THEN
  1140. arg_msg = "采购订单只有在进行状态下才可以执行设完成状态"
  1141. ELSEIF status <> 5 THEN
  1142. arg_msg = "采购订单只有在完成状态下才可以执行撤消完成状态"
  1143. END IF
  1144. GOTO ext
  1145. END IF
  1146. Decimal ls_zerook
  1147. Boolean if_finish
  1148. if_finish = TRUE
  1149. DECLARE zero_cur CURSOR FOR
  1150. SELECT u_buytaskmx.uqty - u_buytaskmx.stopqty - u_buytaskmx.consignedqty
  1151. FROM u_buytaskmx
  1152. WHERE ( u_buytaskmx.taskid = :arg_taskid )
  1153. AND ( u_buytaskmx.scid = :arg_scid )
  1154. USING commit_transaction ;
  1155. OPEN zero_cur;
  1156. FETCH zero_cur INTO :ls_zerook;
  1157. DO WHILE commit_transaction.SQLCode = 0
  1158. IF if_finish THEN
  1159. IF ls_zerook > 0 THEN if_finish = FALSE
  1160. END IF
  1161. FETCH zero_cur INTO :ls_zerook;
  1162. LOOP
  1163. CLOSE zero_cur;
  1164. IF status = 1 AND if_finish THEN
  1165. UPDATE u_buytask
  1166. SET status = 5,
  1167. accomplishdate = getdate(),
  1168. finishemp = :publ_operator
  1169. WHERE ( u_buytask.taskid = :arg_taskid )
  1170. AND u_buytask.scid = :arg_scid USING commit_transaction;
  1171. IF commit_transaction.SQLCode <> 0 THEN
  1172. rslt = 0
  1173. arg_msg = "因网络或其他原因导致采购订单完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText
  1174. GOTO ext
  1175. END IF
  1176. END IF
  1177. IF status = 5 AND NOT if_finish THEN
  1178. UPDATE u_buytask
  1179. SET status = 1,
  1180. accomplishdate = :null_dt,
  1181. finishemp = ''
  1182. WHERE ( u_buytask.taskid = :arg_taskid )
  1183. AND u_buytask.scid = :arg_scid USING commit_transaction;
  1184. IF commit_transaction.SQLCode <> 0 THEN
  1185. rslt = 0
  1186. arg_msg = "因网络或其他原因导致采购订单撤消完成状态设置操作失败"+"~n"+commit_transaction.SQLErrText
  1187. GOTO ext
  1188. END IF
  1189. END IF
  1190. it_newbegin = FALSE
  1191. it_updatebegin = FALSE
  1192. ext:
  1193. IF rslt = 0 THEN
  1194. ROLLBACK USING commit_transaction;
  1195. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1196. COMMIT USING commit_transaction;
  1197. END IF
  1198. p_reset()
  1199. arg_msg = '采购订单,'+ arg_msg
  1200. RETURN (rslt)
  1201. end function
  1202. public function integer finishtask (integer arg_finishtype, long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,cnt = 0
  1203. DateTime null_dt
  1204. SetNull(null_dt)
  1205. IF arg_taskid <= 0 THEN
  1206. rslt = 0
  1207. ARG_MSG = '错误采购订单唯一码'
  1208. GOTO ext
  1209. END IF
  1210. IF p_getinfo(arg_scid,arg_taskid,ARG_MSG) = 0 THEN
  1211. rslt = 0
  1212. GOTO ext
  1213. END IF
  1214. IF arg_finishtype = 5 OR arg_finishtype = 6 THEN
  1215. IF Status <> 1 THEN
  1216. rslt = 0
  1217. ARG_MSG = "采购订单只有在进行状态才可以执行完成,请核对"
  1218. GOTO ext
  1219. END IF
  1220. ELSE
  1221. IF arg_finishtype = 1 THEN
  1222. IF Status <> 6 THEN
  1223. rslt = 0
  1224. ARG_MSG = "采购订单只有在手动完成状态下才可以执行取消手动完成,请核对"
  1225. GOTO ext
  1226. END IF
  1227. END IF
  1228. END IF
  1229. IF arg_finishtype = 5 OR arg_finishtype = 6 THEN
  1230. UPDATE u_buyTask
  1231. SET status = :arg_finishtype,accomplishdate = getdate(),finishemp = :publ_operator
  1232. WHERE ( u_buyTask.TaskID = :arg_taskid ) AND
  1233. ( u_buyTask.scid = :arg_scid) USING commit_transaction;
  1234. IF commit_transaction.SQLCode <> 0 THEN
  1235. rslt = 0
  1236. ARG_MSG = "完成采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  1237. ROLLBACK USING commit_transaction;
  1238. GOTO ext
  1239. END IF
  1240. ELSE
  1241. UPDATE u_buyTask
  1242. SET status = :arg_finishtype,accomplishdate = :null_dt,finishemp = ''
  1243. WHERE ( u_buyTask.TaskID = :arg_taskid ) AND
  1244. ( u_buyTask.scid = :arg_scid) USING commit_transaction;
  1245. IF commit_transaction.SQLCode <> 0 THEN
  1246. rslt = 0
  1247. ARG_MSG = "取消手动完成采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  1248. ROLLBACK USING commit_transaction;
  1249. GOTO ext
  1250. END IF
  1251. END IF
  1252. ext:
  1253. IF arg_ifcommit AND rslt = 1 THEN
  1254. COMMIT USING commit_transaction;
  1255. END IF
  1256. p_reset()
  1257. arg_msg = '采购订单,'+ arg_msg
  1258. Return (rslt)
  1259. end function
  1260. public function integer newbegin (long arg_scid, ref string arg_msg);//重置对象,设定业务类型与关联ID,准备建立新单
  1261. //0 fail 1 success
  1262. long rslt=1,CNT=0
  1263. if arg_scid < 0 then
  1264. arg_msg = '请选择分部'
  1265. rslt = 0
  1266. goto ext
  1267. end if
  1268. p_reset()
  1269. it_newbegin=TRUE
  1270. it_updatebegin=FALSE
  1271. scid=arg_scid
  1272. ext:
  1273. if rslt = 0 then p_reset()
  1274. arg_msg = '采购订单,'+ arg_msg
  1275. return rslt
  1276. end function
  1277. public function integer stopmx (long arg_scid, long arg_taskid, long arg_printid, string arg_mtrlcode, integer arg_flag, string arg_stopreason, decimal arg_stopqty, ref string arg_msg, boolean arg_commit);Int rslt = 1
  1278. Int li_flag
  1279. DateTime null_dt
  1280. Decimal ld_notconsignedqty
  1281. Decimal ld_notconsignedaddqty
  1282. SetNull(null_dt)
  1283. IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  1284. rslt = 0
  1285. GOTO ext
  1286. END IF
  1287. IF status <> 1 THEN
  1288. arg_msg = '订单只能在进行状态下才能操作'
  1289. rslt = 0
  1290. GOTO ext
  1291. END IF
  1292. SELECT stopflag INTO :li_flag
  1293. FROM u_buytaskmx
  1294. WHERE scid = :arg_scid
  1295. AND taskid = :arg_taskid
  1296. AND printid = :arg_printid;
  1297. IF sqlca.SQLCode <> 0 THEN
  1298. IF Pos(Lower(sqlca.SQLErrText),'more than') > 0 THEN
  1299. arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败,查询数据返回值多于一个'
  1300. ELSE
  1301. arg_msg = '查询明细物料'+arg_mtrlcode+'中止标记失败'
  1302. END IF
  1303. rslt = 0
  1304. GOTO ext
  1305. END IF
  1306. IF arg_flag = 0 THEN
  1307. IF li_flag = 0 THEN
  1308. arg_msg = '明细物料'+arg_mtrlcode+'还未中止,不能取消中止'
  1309. rslt = 0
  1310. GOTO ext
  1311. END IF
  1312. ELSE
  1313. IF li_flag = 1 THEN
  1314. arg_msg = '明细物料'+arg_mtrlcode+'已中止,不能重复中止'
  1315. rslt = 0
  1316. GOTO ext
  1317. END IF
  1318. END IF
  1319. IF arg_flag = 1 THEN
  1320. SELECT u_buyTaskMx.uQty - u_buyTaskMx.consignedqty,
  1321. u_buyTaskMx.addQty - u_buyTaskMx.consignedaddqty
  1322. INTO :ld_notconsignedqty,
  1323. :ld_notconsignedaddqty
  1324. FROM u_buytaskmx
  1325. WHERE scid = :arg_scid
  1326. AND taskid = :arg_taskid
  1327. AND printid = :arg_printid;
  1328. IF sqlca.SQLCode <> 0 THEN
  1329. IF Pos(Lower(sqlca.SQLErrText),'more than') > 0 THEN
  1330. arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败,查询数据返回值多于一个'
  1331. ELSE
  1332. arg_msg = '查询明细物料'+arg_mtrlcode+'未完成数失败'
  1333. END IF
  1334. rslt = 0
  1335. GOTO ext
  1336. END IF
  1337. IF ld_notconsignedqty <= 0 THEN
  1338. arg_msg = '明细物料'+arg_mtrlcode+'已完成收货,不能中止'
  1339. rslt = 0
  1340. GOTO ext
  1341. END IF
  1342. IF ld_notconsignedqty < arg_stopqty THEN
  1343. arg_msg = '明细物料'+arg_mtrlcode+'未完成数量只有:' + String(ld_notconsignedqty,'###,##0.#####') + ',不能中止:' + String(arg_stopqty,'###,##0.#####')
  1344. rslt = 0
  1345. GOTO ext
  1346. END IF
  1347. END IF
  1348. IF arg_flag = 0 THEN
  1349. UPDATE u_buytaskmx
  1350. SET stopflag = 0,
  1351. stopemp = '',
  1352. stopdate = :null_dt,
  1353. stopreason = '',
  1354. stopqty = 0
  1355. WHERE scid = :arg_scid
  1356. AND taskid = :arg_taskid
  1357. AND printid = :arg_printid;
  1358. ELSE
  1359. UPDATE u_buytaskmx
  1360. SET stopflag = 1,
  1361. stopemp = :publ_operator,
  1362. stopdate = getdate(),
  1363. stopreason = :arg_stopreason,
  1364. stopqty = :arg_stopqty
  1365. WHERE scid = :arg_scid
  1366. AND taskid = :arg_taskid
  1367. AND printid = :arg_printid;
  1368. END IF
  1369. IF sqlca.SQLCode <> 0 THEN
  1370. arg_msg = '更新明细'+arg_mtrlcode+'中止标记失败,'+sqlca.SQLErrText
  1371. rslt = 0
  1372. GOTO ext
  1373. END IF
  1374. ext:
  1375. IF rslt = 0 THEN
  1376. ROLLBACK;
  1377. ELSEIF rslt = 1 AND arg_commit THEN
  1378. COMMIT;
  1379. END IF
  1380. arg_msg = '采购订单,'+ arg_msg
  1381. RETURN rslt
  1382. end function
  1383. public function integer addmxcmpl (long arg_scid, long arg_taskid, long arg_printid, decimal arg_qty, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit);
  1384. Int rslt = 1,cnt = 0
  1385. uo_saletask uo_sale
  1386. uo_sale = Create uo_saletask
  1387. uo_sale.commit_transaction = commit_transaction
  1388. IF arg_taskid <= 0 THEN
  1389. rslt = 0
  1390. arg_msg = '错误采购订单唯一码'
  1391. GOTO ext
  1392. END IF
  1393. IF arg_qty = 0 THEN
  1394. rslt = 1
  1395. GOTO ext
  1396. END IF
  1397. IF p_getinfo(arg_scid,arg_taskid,arg_msg) = 0 THEN
  1398. rslt = 0
  1399. GOTO ext
  1400. END IF
  1401. IF status <> 1 And status <> 5 THEN
  1402. rslt = 0
  1403. IF status <> 1 THEN
  1404. arg_msg = "采购订单只有在进行状态下才可以执行进仓"
  1405. ELSEIF status <> 5 THEN
  1406. arg_msg = "采购订单只有在完成状态下才可以撤消进仓"
  1407. END IF
  1408. GOTO ext
  1409. END IF
  1410. //====================================================================
  1411. // Script - addmxcmpl ( long arg_scid, long arg_taskid, long arg_mtrlid, decimal arg_addqty, ref string arg_msg, boolean arg_ifcommit )
  1412. // Reason:检查数量限制
  1413. //--------------------------------------------------------------------
  1414. // Modified By: yyx Date: 2004.02.12
  1415. //--------------------------------------------------------------------
  1416. Decimal ls_buyqty,ls_consignedqty
  1417. Decimal ls_buyaddqty,ls_consignedaddqty,ld_stopqty
  1418. String ls_mtrlcode
  1419. Long ll_mtrlid, ll_relid2, ll_relid, ll_relprintid
  1420. Decimal ld_uprate,ld_upqty, lde_rate, ld_updatewareqty
  1421. Int li_billtype
  1422. SELECT billtype
  1423. INTO :li_billtype
  1424. FROM u_buytask
  1425. WHERE scid = :arg_scid
  1426. AND taskid = :arg_taskid
  1427. Using commit_transaction;
  1428. IF commit_transaction.SQLCode <> 0 THEN
  1429. rslt = 0
  1430. arg_msg = '查询采购订单信息失败,'+sqlca.SQLErrText
  1431. GOTO ext
  1432. END IF
  1433. SELECT mtrlid, relid2, relid, relprintid, rate
  1434. INTO :ll_mtrlid, :ll_relid2, :ll_relid, :ll_relprintid, :lde_rate
  1435. FROM u_buytaskmx
  1436. WHERE scid = :arg_scid
  1437. AND taskid = :arg_taskid
  1438. AND printid = :arg_printid
  1439. Using commit_transaction;
  1440. IF commit_transaction.SQLCode <> 0 THEN
  1441. rslt = 0
  1442. arg_msg = '查询采购订单,物料资料失败,'+sqlca.SQLErrText
  1443. GOTO ext
  1444. END IF
  1445. SELECT mtrlcode, uprate , upqty
  1446. INTO :ls_mtrlcode, :ld_uprate,:ld_upqty
  1447. FROM u_mtrldef
  1448. WHERE mtrlid = :ll_mtrlid
  1449. Using commit_transaction;
  1450. IF commit_transaction.SQLCode <> 0 THEN
  1451. rslt = 0
  1452. arg_msg = '查询物料资料失败'
  1453. GOTO ext
  1454. END IF
  1455. IF sys_option_ifovertask = 0 THEN
  1456. SELECT u_buytaskmx.uqty,
  1457. u_buytaskmx.consignedqty,
  1458. u_buytaskmx.addqty,
  1459. u_buytaskmx.consignedaddqty,
  1460. u_buytaskmx.stopqty
  1461. INTO :ls_buyqty,
  1462. :ls_consignedqty,
  1463. :ls_buyaddqty,
  1464. :ls_consignedaddqty,
  1465. :ld_stopqty
  1466. FROM u_buytaskmx
  1467. WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND
  1468. ( u_buytaskmx.printid = :arg_printid ) AND
  1469. ( u_buytaskmx.scid = :arg_scid) Using commit_transaction;
  1470. IF commit_transaction.SQLCode <> 0 THEN
  1471. rslt = 0
  1472. arg_msg = "查询编码["+ls_mtrlcode+"]采购订单已完成数量操作失败"
  1473. GOTO ext
  1474. END IF
  1475. IF ls_buyqty < ls_consignedqty + arg_qty THEN
  1476. rslt = 0
  1477. arg_msg = "["+ls_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty - ld_stopqty,'#,##0.0###')+",不能入库"+String(arg_qty,'#,##0.0#')
  1478. GOTO ext
  1479. END IF
  1480. IF ls_buyaddqty < ls_consignedaddqty + arg_addqty THEN
  1481. rslt = 0
  1482. arg_msg = "["+ls_mtrlcode+"]的未完成辅数量只有"+String(ls_buyaddqty - ls_consignedaddqty - ld_stopqty,'#,##0.0###')+",不能入库"+String(arg_addqty,'#,##0.0#')
  1483. GOTO ext
  1484. END IF
  1485. If (ls_buyqty = ls_consignedqty + arg_qty + ld_stopqty) And (ls_buyaddqty <> ls_consignedaddqty + arg_addqty) THEN
  1486. rslt = 0
  1487. arg_msg = "["+ls_mtrlcode+"]数量已全部到货时,辅数必须也全部到货."
  1488. GOTO ext
  1489. END IF
  1490. ELSEIF sys_option_ifovertask = 2 THEN
  1491. SELECT u_buytaskmx.uqty,
  1492. u_buytaskmx.consignedqty,
  1493. u_buytaskmx.addqty,
  1494. u_buytaskmx.consignedaddqty,
  1495. u_buytaskmx.stopqty
  1496. INTO :ls_buyqty,
  1497. :ls_consignedqty,
  1498. :ls_buyaddqty,
  1499. :ls_consignedaddqty,
  1500. :ld_stopqty
  1501. FROM u_buytaskmx
  1502. WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND
  1503. ( u_buytaskmx.printid = :arg_printid ) AND
  1504. ( u_buytaskmx.scid = :arg_scid) Using commit_transaction;
  1505. IF commit_transaction.SQLCode <> 0 THEN
  1506. rslt = 0
  1507. arg_msg = "查询编码["+ls_mtrlcode+"]采购订单已完成数量操作失败"
  1508. GOTO ext
  1509. END IF
  1510. IF ls_buyqty * (1 + ld_uprate) + ld_upqty < ls_consignedqty + arg_qty THEN
  1511. rslt = 0
  1512. arg_msg = "["+ls_mtrlcode+"]的未完成数量只有"+String(ls_buyqty - ls_consignedqty - ld_stopqty,'#,##0.0###')+",不能入库"+String(arg_qty,'#,##0.0#')
  1513. GOTO ext
  1514. END IF
  1515. IF ls_buyaddqty < ls_consignedaddqty + arg_addqty THEN
  1516. rslt = 0
  1517. arg_msg = "["+ls_mtrlcode+"]的未完成辅数量只有"+String(ls_buyaddqty - ls_consignedaddqty ,'#,##0.0###')+",不能入库"+String(arg_addqty,'#,##0.0#')
  1518. GOTO ext
  1519. END IF
  1520. If (ls_buyqty * (1 + ld_uprate) + ld_upqty = ls_consignedqty + arg_qty + ld_stopqty) And (ls_buyaddqty <> ls_consignedaddqty + arg_addqty) THEN
  1521. rslt = 0
  1522. arg_msg = "["+ls_mtrlcode+"]数量已全部到货时,辅数必须也全部到货."
  1523. GOTO ext
  1524. END IF
  1525. END IF
  1526. UPDATE u_buytaskmx
  1527. SET consignedqty = consignedqty + :arg_qty,
  1528. consignedaddqty = consignedaddqty + :arg_addqty
  1529. WHERE ( u_buytaskmx.taskid = :arg_taskid ) AND
  1530. ( u_buytaskmx.printid = :arg_printid ) AND
  1531. ( u_buytaskmx.scid = :arg_scid) Using commit_transaction;
  1532. IF commit_transaction.SQLCode <> 0 THEN
  1533. rslt = 0
  1534. arg_msg = "更新采购订单完成数量操作失败"+"~n"+commit_transaction.SQLErrText
  1535. GOTO ext
  1536. END IF
  1537. ld_updatewareqty = arg_qty * lde_rate //库存单位
  1538. IF ll_relid2 > 0 THEN
  1539. UPDATE u_OrderRqMtrl
  1540. SET inqty = inqty + :ld_updatewareqty
  1541. Where mxpkid = :ll_relid2 Using commit_transaction;
  1542. IF commit_transaction.SQLCode <> 0 THEN
  1543. rslt = 0
  1544. arg_msg = "更新销售订单明细的采购需求已订货数操作失败"+"~n"+commit_transaction.SQLErrText
  1545. GOTO ext
  1546. END IF
  1547. END IF
  1548. //更新销售订单已进仓数
  1549. IF li_billtype = 1 THEN
  1550. IF uo_sale.addmxcmpl_assign(scid, ll_relid, ll_relprintid, &
  1551. ll_mtrlid, 4, ld_updatewareqty, False, arg_msg) = 0 THEN
  1552. rslt = 0
  1553. GOTO ext
  1554. END IF
  1555. END IF
  1556. it_newbegin = False
  1557. it_updatebegin = False
  1558. ext:
  1559. Destroy uo_sale
  1560. IF rslt = 0 THEN
  1561. ROLLBACK Using commit_transaction;
  1562. ELSEIF arg_ifcommit THEN
  1563. COMMIT Using commit_transaction;
  1564. END IF
  1565. p_reset()
  1566. arg_msg = '采购订单,'+ arg_msg
  1567. Return (rslt)
  1568. end function
  1569. public function integer cstopbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0
  1570. IF arg_taskid<=0 THEN
  1571. rslt=0
  1572. ARG_MSG='错误采购订单唯一码'
  1573. goto ext
  1574. end if
  1575. if p_getinfo(arg_scid,arg_taskid,arg_msg)=0 then
  1576. rslt=0
  1577. goto ext
  1578. end if
  1579. IF Status<>3 THEN
  1580. rslt=0
  1581. arG_MSG="订单只有在终止状态才可以执行取消终止,请核对"
  1582. goto ext
  1583. END IF
  1584. UPDATE u_buyTask
  1585. SET Status = 1,accomplishdate=null,stopemp=''
  1586. WHERE TaskID = :arg_taskid and scid=:arg_scid using commit_transaction ;
  1587. if commit_transaction.sqlcode<>0 then
  1588. rslt=0
  1589. arG_MSG="取消终止采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  1590. rollback using commit_transaction;
  1591. goto ext
  1592. end if
  1593. it_newbegin=FALSE
  1594. it_updatebegin=FALSE
  1595. EXT:
  1596. if arg_ifcommit and rslt=1 then
  1597. COMMIT using commit_transaction;
  1598. end if
  1599. p_reset()
  1600. arg_msg = '采购订单,'+ arg_msg
  1601. return (rslt)
  1602. end function
  1603. public function integer stopbuytask (long arg_scid, long arg_taskid, ref string arg_msg, boolean arg_ifcommit);INT rslt=1,cnt=0
  1604. IF arg_taskid<=0 THEN
  1605. rslt=0
  1606. ARG_MSG='错误采购订单唯一码'
  1607. goto ext
  1608. end if
  1609. if p_getinfo(arg_scid,arg_taskid,arg_msg)=0 then
  1610. rslt=0
  1611. goto ext
  1612. end if
  1613. IF Status<>1 THEN
  1614. rslt=0
  1615. arG_MSG="订单只有在进行状态才可以执行终止,请核对"
  1616. goto ext
  1617. END IF
  1618. UPDATE u_buyTask
  1619. SET Status = 3,accomplishdate=getdate(),stopemp=:publ_operator
  1620. WHERE TaskID = :arg_taskid and scid=:arg_scid using commit_transaction ;
  1621. if commit_transaction.sqlcode<>0 then
  1622. rslt=0
  1623. arG_MSG="终止采购订单操作失败"+"~n"+commit_transaction.SQLErrText
  1624. rollback using commit_transaction;
  1625. goto ext
  1626. end if
  1627. it_newbegin=FALSE
  1628. it_updatebegin=FALSE
  1629. EXT:
  1630. if arg_ifcommit and rslt=1 then
  1631. COMMIT using commit_transaction;
  1632. end if
  1633. p_reset()
  1634. arg_msg = '采购订单,'+ arg_msg
  1635. return (rslt)
  1636. end function
  1637. public function integer acceptmx (s_buytask_mx s_mx, ref string arg_msg);Long rslt = 1,cnt = 0,LS_i
  1638. Dec ld_dftsptprice
  1639. Dec ld_round = 100
  1640. ld_round = 10.0 ^ (2 - sys_option_inware_buy_amt_round)
  1641. uo_spt_price uo_sptprice
  1642. uo_sptprice = Create uo_spt_price
  1643. String ls_sptmtrlname
  1644. //uo_spt_price uo_price
  1645. //uo_price = CREATE uo_spt_price
  1646. If it_newbegin = False And it_updatebegin = False Then
  1647. rslt = 0
  1648. arG_MSG = "非编辑状态不可以使用,操作取消"
  1649. Goto ext
  1650. End If
  1651. //清除空值
  1652. If IsNull(s_mx.iforder) Then s_mx.iforder = 1
  1653. If IsNull(s_mx.orderid) Then s_mx.orderid = 0
  1654. If IsNull(s_mx.ordercode) Then s_mx.ordercode = ''
  1655. If IsNull(s_mx.mtrlid) Then s_mx.mtrlid = 0
  1656. If IsNull(s_mx.uqty) Then s_mx.uqty = 0
  1657. If IsNull(s_mx.addqty) Then s_mx.addqty = 0
  1658. If IsNull(s_mx.uprice) Then s_mx.uprice = 0
  1659. If IsNull(s_mx.rebate) Then s_mx.rebate = 0
  1660. If IsNull(s_mx.planprice) Then s_mx.planprice = 0
  1661. If IsNull(s_mx.dscrp) Then s_mx.dscrp = ''
  1662. If IsNull(s_mx.mtrlCODE) Then s_mx.mtrlCODE = ''
  1663. If IsNull(s_mx.printid) Then s_mx.printid = 0
  1664. If IsNull(s_mx.storageid) Then s_mx.storageid = 0
  1665. If IsNull(s_mx.status) Then s_mx.status = ''
  1666. If IsNull(s_mx.woodcode) Then s_mx.woodcode = ''
  1667. If IsNull(s_mx.pcode) Then s_mx.pcode = ''
  1668. If IsNull(s_mx.unit) Then s_mx.unit = ''
  1669. If IsNull(s_mx.rate) Then s_mx.rate = 1
  1670. If s_mx.rate = 0 Then s_mx.rate = 1
  1671. If IsNull(s_mx.relid) Then s_mx.relid = 0
  1672. If IsNull(s_mx.relprintid) Then s_mx.relprintid = 0
  1673. If IsNull(s_mx.relid2) Then s_mx.relid2 = 0
  1674. If IsNull(s_mx.relcode) Then s_mx.relcode = ''
  1675. If IsNull(s_mx.formula) Then s_mx.formula = ''
  1676. If IsNull(s_mx.tax) Then s_mx.tax = 0
  1677. If IsNull(s_mx.plancode) Then s_mx.plancode = ''
  1678. If IsNull(s_mx.uprice_notax) Then s_mx.uprice_notax = 0 //不含税单价
  1679. If IsNull(s_mx.uamt_tax) Then s_mx.uamt_tax = 0 //税金
  1680. If IsNull(s_mx.dscrp2) Then s_mx.dscrp2 = ''
  1681. If IsNull(s_mx.dscrp3) Then s_mx.dscrp3 = ''
  1682. If IsNull(s_mx.dscrp4) Then s_mx.dscrp4 = ''
  1683. If s_mx.uprice_notax = 0 Then
  1684. s_mx.uprice_notax = s_mx.uprice / (1 + s_mx.tax)
  1685. End If
  1686. s_mx.uqty = Round(s_mx.uqty,4)
  1687. If s_mx.mtrlid = 0 Or s_mx.uqty = 0 Then // 如果进仓数量为 0,或物料编号为空,则不作任何处理
  1688. rslt = 1
  1689. Goto ext
  1690. End If
  1691. If f_check_status(1, s_mx.status) = 0 Then
  1692. rslt = 0
  1693. arG_MSG = "查询操作失败,可能颜色未定义,"+s_mx.mtrlCODE+",颜色:"+s_mx.status
  1694. Goto ext
  1695. End If
  1696. //检查销售订单单据ID
  1697. If s_mx.relid > 0 Then
  1698. Select count(*)
  1699. Into :cnt
  1700. From u_saletask
  1701. Where taskid = :s_mx.relid;
  1702. If sqlca.SQLCode <> 0 Then
  1703. rslt = 0
  1704. arG_MSG = "查询操作失败,销售订单"
  1705. Goto ext
  1706. End If
  1707. End If
  1708. //检查物料ID
  1709. Select COUNT(*)
  1710. Into :cnt
  1711. From u_mtrldef
  1712. Where u_mtrldef.mtrlid = :s_mx.mtrlid ;
  1713. If sqlca.SQLCode <> 0 Then
  1714. rslt = 0
  1715. arG_MSG = "查询操作失败,物料编号"
  1716. Goto ext
  1717. End If
  1718. If cnt = 0 Then
  1719. rslt = 0
  1720. arG_MSG = "错误的编码: "+String(s_mx.mtrlCODE)
  1721. Goto ext
  1722. End If
  1723. cnt = 0
  1724. Select COUNT(*)
  1725. Into :cnt
  1726. From u_storage
  1727. Where u_storage.storageid = :s_mx.storageid ;
  1728. If sqlca.SQLCode <> 0 Then
  1729. rslt = 0
  1730. arG_MSG = "查询操作失败,仓库编号"
  1731. Goto ext
  1732. End If
  1733. If cnt = 0 Then
  1734. rslt = 0
  1735. arG_MSG = "错误的仓库编号"
  1736. Goto ext
  1737. End If
  1738. If s_mx.tax < 0 Then
  1739. rslt = 0
  1740. arG_MSG = "税率不能为负数"
  1741. Goto ext
  1742. End If
  1743. If sys_option_buyprice_buytask_limit = 1 Then
  1744. Int li_iflimitprice
  1745. Select iflimitprice Into :li_iflimitprice
  1746. From u_mtrldef
  1747. Where mtrlid = :s_mx.mtrlid;
  1748. If sqlca.SQLCode <> 0 Then
  1749. arG_MSG = '查询'+s_mx.mtrlCODE+'收货限价属性失败 '
  1750. rslt = 0
  1751. Goto ext
  1752. End If
  1753. If li_iflimitprice = 1 Then
  1754. If uo_sptprice.uf_check_price_save(0,sptid,s_mx.mtrlid,s_mx.mtrlCODE,s_mx.unit,s_mx.status,s_mx.woodcode,s_mx.pcode,s_mx.uprice * s_mx.rebate,arG_MSG) = 0 Then
  1755. rslt = 0
  1756. Goto ext
  1757. End If
  1758. End If
  1759. End If
  1760. f_get_defsptprice(sptid,s_mx.mtrlid,s_mx.unit,s_mx.status,s_mx.pcode,s_mx.woodcode,ld_dftsptprice)
  1761. If sys_option_buytask_mxhb = 0 Then
  1762. For LS_i = 1 To it_mxbt //合并重复项
  1763. If buytaskmx[LS_i].mtrlid = s_mx.mtrlid And &
  1764. buytaskmx[LS_i].orderid = s_mx.orderid And &
  1765. buytaskmx[LS_i].status = s_mx.status And &
  1766. buytaskmx[LS_i].woodcode = s_mx.woodcode And &
  1767. buytaskmx[LS_i].pcode = s_mx.pcode And &
  1768. buytaskmx[LS_i].unit = s_mx.unit And &
  1769. buytaskmx[LS_i].relid = s_mx.relid And &
  1770. buytaskmx[LS_i].relprintid = s_mx.relprintid And &
  1771. buytaskmx[LS_i].relid2 = s_mx.relid2 And &
  1772. buytaskmx[LS_i].plancode = s_mx.plancode Then
  1773. if left(string(buytaskmx[LS_i].requiredate,'yyyy-mm-dd'),10) = left(string(s_mx.requiredate,'yyyy-mm-dd'),10) then
  1774. buytaskmx[LS_i].uqty += s_mx.uqty
  1775. buytaskmx[LS_i].addqty += s_mx.addqty
  1776. buytaskmx[LS_i].Qty += Round(s_mx.uqty * s_mx.rate,sys_option_unit_dec)
  1777. buytaskmx[LS_i].uamt += Round(s_mx.uqty * s_mx.uprice * s_mx.rebate * ld_round, 0) / ld_round //原币,实价含税金额
  1778. buytaskmx[LS_i].uamt_tax += Round((s_mx.uqty * s_mx.uprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //原币, 税金
  1779. buytaskmx[LS_i].bsamt += Round(s_mx.uqty * s_mx.uprice * s_mx.rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额
  1780. buytaskmx[LS_i].bsamt_tax += Round((s_mx.uqty * s_mx.uprice * s_mx.rebate * mrate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //本位币, 税金
  1781. rslt = 1
  1782. Goto ext
  1783. end if
  1784. End If
  1785. Next
  1786. End If
  1787. If uo_sptprice.uf_getmtrlname(sptid,s_mx.mtrlid,ls_sptmtrlname,arG_MSG) = 0 Then
  1788. rslt = 0
  1789. Goto ext
  1790. End If
  1791. //写入内容
  1792. it_mxbt++
  1793. buytaskmx[it_mxbt].printid = s_mx.printid
  1794. buytaskmx[it_mxbt].iforder = s_mx.iforder
  1795. buytaskmx[it_mxbt].orderid = s_mx.orderid
  1796. buytaskmx[it_mxbt].ordercode = s_mx.ordercode
  1797. buytaskmx[it_mxbt].mtrlid = s_mx.mtrlid
  1798. buytaskmx[it_mxbt].uqty = s_mx.uqty
  1799. buytaskmx[it_mxbt].addqty = s_mx.addqty
  1800. buytaskmx[it_mxbt].Qty = Round(s_mx.uqty * s_mx.rate,sys_option_unit_dec)
  1801. buytaskmx[it_mxbt].plprice = s_mx.planprice
  1802. buytaskmx[it_mxbt].dscrp = s_mx.dscrp
  1803. buytaskmx[it_mxbt].dscrp2 = s_mx.dscrp2
  1804. buytaskmx[it_mxbt].dscrp3 = s_mx.dscrp3
  1805. buytaskmx[it_mxbt].dscrp4 = s_mx.dscrp4
  1806. buytaskmx[it_mxbt].mtrlCODE = s_mx.mtrlCODE
  1807. buytaskmx[it_mxbt].unit = s_mx.unit
  1808. buytaskmx[it_mxbt].rate = s_mx.rate
  1809. buytaskmx[it_mxbt].rebate = s_mx.rebate
  1810. buytaskmx[it_mxbt].tax = s_mx.tax
  1811. buytaskmx[it_mxbt].uprice = s_mx.uprice
  1812. If Round(s_mx.uqty * s_mx.rate,sys_option_unit_dec) <> 0 Then //出现除数为0
  1813. buytaskmx[it_mxbt].fprice = Round((s_mx.uprice * s_mx.uqty)/(Round(s_mx.uqty * s_mx.rate,sys_option_unit_dec)),10)
  1814. Else
  1815. buytaskmx[it_mxbt].fprice = s_mx.uprice
  1816. End If
  1817. buytaskmx[it_mxbt].acprice = buytaskmx[it_mxbt].fprice * s_mx.rebate //对应数据库 price
  1818. buytaskmx[it_mxbt].uamt = Round(s_mx.uqty * s_mx.uprice * s_mx.rebate * ld_round, 0) / ld_round //原币,实价含税金额
  1819. If s_mx.uamt_tax = 0 Then
  1820. buytaskmx[it_mxbt].uamt_tax = Round((s_mx.uqty * s_mx.uprice * s_mx.rebate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //原币, 税金
  1821. Else
  1822. buytaskmx[it_mxbt].uamt_tax = s_mx.uamt_tax
  1823. End If
  1824. buytaskmx[it_mxbt].bsamt = Round(s_mx.uqty * s_mx.uprice * s_mx.rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额
  1825. buytaskmx[it_mxbt].bsamt_tax = Round((s_mx.uqty * s_mx.uprice * s_mx.rebate * mrate) * s_mx.tax / (1 + s_mx.tax) * ld_round, 0) / ld_round //本位币, 税金
  1826. If sys_option_msp_multimoney = 1 Then //使用多币种
  1827. mstpayamt += buytaskmx[it_mxbt].uamt
  1828. Else // 系统不使用多币种,转换为人民币
  1829. mstpayamt += buytaskmx[it_mxbt].bsamt
  1830. End If
  1831. buytaskmx[it_mxbt].requiredate = s_mx.requiredate
  1832. buytaskmx[it_mxbt].status = s_mx.status
  1833. buytaskmx[it_mxbt].woodcode = s_mx.woodcode
  1834. buytaskmx[it_mxbt].pcode = s_mx.pcode
  1835. buytaskmx[it_mxbt].storageid = s_mx.storageid
  1836. buytaskmx[it_mxbt].dftsptprice = ld_dftsptprice
  1837. buytaskmx[it_mxbt].relid = s_mx.relid
  1838. buytaskmx[it_mxbt].relprintid = s_mx.relprintid
  1839. buytaskmx[it_mxbt].relid2 = s_mx.relid2
  1840. buytaskmx[it_mxbt].relcode = s_mx.relcode
  1841. buytaskmx[it_mxbt].formula = s_mx.formula
  1842. buytaskmx[it_mxbt].formula2 = s_mx.formula2
  1843. buytaskmx[it_mxbt].sptmtrlname = ls_sptmtrlname
  1844. buytaskmx[it_mxbt].plancode = s_mx.plancode
  1845. buytaskmx[it_mxbt].uprice_notax = s_mx.uprice_notax
  1846. ext:
  1847. //DESTROY uo_price
  1848. Destroy uo_sptprice
  1849. If rslt = 0 Then
  1850. p_clearmx()
  1851. arG_MSG = '采购订单,'+ arG_MSG
  1852. End If
  1853. Return(rslt)
  1854. end function
  1855. public function integer acceptmx (integer arg_iforder, long arg_orderid, string arg_ordercode, long arg_mtrlid, decimal arg_uqty, decimal arg_addqty, decimal arg_uprice, decimal arg_rebate, decimal arg_planprice, string arg_dscrp, string arg_mtrlcode, ref string arg_msg, long arg_printid, datetime arg_requiredate, long arg_storageid, string arg_status, string arg_woodcode, string arg_pcode, string arg_unit, decimal arg_rate, long arg_relid, long arg_relprintid, string arg_relcode, string arg_formula, long arg_relid2, decimal arg_tax, string arg_plancode, string arg_dscrp2, string arg_dscrp3, string arg_dscrp4);s_buytask_mx s_mx
  1856. s_mx.mtrlid = arg_mtrlid
  1857. s_mx.uqty = arg_uqty
  1858. s_mx.addqty = arg_addqty
  1859. s_mx.uprice = arg_uprice
  1860. s_mx.rebate = arg_rebate
  1861. s_mx.dscrp = arg_dscrp
  1862. s_mx.mtrlcode = arg_mtrlcode
  1863. s_mx.printid = arg_printid
  1864. s_mx.requiredate = arg_requiredate
  1865. s_mx.storageid = arg_storageid
  1866. s_mx.status = arg_status
  1867. s_mx.woodcode = arg_woodcode
  1868. s_mx.pcode = arg_pcode
  1869. s_mx.unit = arg_unit
  1870. s_mx.rate = arg_rate
  1871. s_mx.relid = arg_relid
  1872. s_mx.relprintid = arg_relprintid
  1873. s_mx.relcode = arg_relcode
  1874. s_mx.formula = arg_formula
  1875. s_mx.relid2 = arg_relid2
  1876. s_mx.tax = arg_tax
  1877. s_mx.plancode = arg_plancode
  1878. s_mx.dscrp2 = arg_dscrp2
  1879. s_mx.dscrp3 = arg_dscrp3
  1880. s_mx.dscrp4 = arg_dscrp4
  1881. return acceptmx(s_mx, arg_msg)
  1882. //
  1883. //
  1884. //
  1885. //Long rslt = 1,cnt = 0,LS_i
  1886. //Dec ld_dftsptprice
  1887. //
  1888. //Dec ld_round = 100
  1889. //ld_round = 10.0 ^ (2 - sys_option_inware_buy_amt_round)
  1890. //
  1891. //uo_spt_price uo_sptprice
  1892. //uo_sptprice = Create uo_spt_price
  1893. //
  1894. //String ls_sptmtrlname
  1895. ////uo_spt_price uo_price
  1896. ////uo_price = CREATE uo_spt_price
  1897. //
  1898. //If it_newbegin = False And it_updatebegin = False Then
  1899. // rslt = 0
  1900. // arG_MSG = "非编辑状态不可以使用,操作取消"
  1901. // Goto ext
  1902. //End If
  1903. //
  1904. ////清除空值
  1905. //If IsNull(arg_iforder) Then arg_iforder = 1
  1906. //If IsNull(arg_orderid) Then arg_orderid = 0
  1907. //If IsNull(arg_ordercode) Then arg_ordercode = ''
  1908. //If IsNull(arg_mtrlid) Then arg_mtrlid = 0
  1909. //If IsNull(arg_uqty) Then arg_uqty = 0
  1910. //If IsNull(arg_addqty) Then arg_addqty = 0
  1911. //If IsNull(arg_uprice) Then arg_uprice = 0
  1912. //If IsNull(arg_rebate) Then arg_rebate = 0
  1913. //If IsNull(arg_planprice) Then arg_planprice = 0
  1914. //If IsNull(arg_dscrp) Then arg_dscrp = ''
  1915. //If IsNull(ARG_mtrlCODE) Then ARG_mtrlCODE = ''
  1916. //If IsNull(arg_printid) Then arg_printid = 0
  1917. //If IsNull(arg_storageid) Then arg_storageid = 0
  1918. //If IsNull(arg_status) Then arg_status = ''
  1919. //If IsNull(arg_woodcode) Then arg_woodcode = ''
  1920. //If IsNull(arg_pcode) Then arg_pcode = ''
  1921. //If IsNull(arg_unit) Then arg_unit = ''
  1922. //If IsNull(arg_rate) Then arg_rate = 1
  1923. //If arg_rate = 0 Then arg_rate = 1
  1924. //
  1925. //If IsNull(arg_relid) Then arg_relid = 0
  1926. //If IsNull(arg_relprintid) Then arg_relprintid = 0
  1927. //If IsNull(arg_relid2) Then arg_relid2 = 0
  1928. //
  1929. //If IsNull(arg_relcode) Then arg_relcode = ''
  1930. //If IsNull(arg_formula) Then arg_formula = ''
  1931. //If IsNull(arg_tax) Then arg_tax = 0
  1932. //
  1933. //If IsNull(arg_plancode) Then arg_plancode = ''
  1934. //
  1935. //
  1936. //arg_uqty = Round(arg_uqty,4)
  1937. //
  1938. //If arg_mtrlid = 0 Or arg_uqty = 0 Then // 如果进仓数量为 0,或物料编号为空,则不作任何处理
  1939. // rslt = 1
  1940. // Goto ext
  1941. //End If
  1942. //
  1943. //If f_check_status(1, arg_status) = 0 Then
  1944. // rslt = 0
  1945. // arG_MSG = "查询操作失败,可能颜色未定义,"+ARG_mtrlCODE+",颜色:"+arg_status
  1946. // Goto ext
  1947. //End If
  1948. //
  1949. ////检查销售订单单据ID
  1950. //If arg_relid > 0 Then
  1951. // Select count(*)
  1952. // Into :cnt
  1953. // From u_saletask
  1954. // Where taskid = :arg_relid;
  1955. // If sqlca.SQLCode <> 0 Then
  1956. // rslt = 0
  1957. // arG_MSG = "查询操作失败,销售订单"
  1958. // Goto ext
  1959. // End If
  1960. //End If
  1961. //
  1962. ////检查物料ID
  1963. //Select COUNT(*)
  1964. // Into :cnt
  1965. // From u_mtrldef
  1966. // Where u_mtrldef.mtrlid = :arg_mtrlid ;
  1967. //If sqlca.SQLCode <> 0 Then
  1968. // rslt = 0
  1969. // arG_MSG = "查询操作失败,物料编号"
  1970. // Goto ext
  1971. //End If
  1972. //
  1973. //If cnt = 0 Then
  1974. // rslt = 0
  1975. // arG_MSG = "错误的编码: "+String(ARG_mtrlCODE)
  1976. // Goto ext
  1977. //End If
  1978. //
  1979. //cnt = 0
  1980. //Select COUNT(*)
  1981. // Into :cnt
  1982. // From u_storage
  1983. // Where u_storage.storageid = :arg_storageid ;
  1984. //If sqlca.SQLCode <> 0 Then
  1985. // rslt = 0
  1986. // arG_MSG = "查询操作失败,仓库编号"
  1987. // Goto ext
  1988. //End If
  1989. //
  1990. //If cnt = 0 Then
  1991. // rslt = 0
  1992. // arG_MSG = "错误的仓库编号"
  1993. // Goto ext
  1994. //End If
  1995. //
  1996. //If arg_tax < 0 Then
  1997. // rslt = 0
  1998. // arG_MSG = "税率不能为负数"
  1999. // Goto ext
  2000. //End If
  2001. //
  2002. //
  2003. //If sys_option_buyprice_buytask_limit = 1 Then
  2004. // Int li_iflimitprice
  2005. // Select iflimitprice Into :li_iflimitprice
  2006. // From u_mtrldef
  2007. // Where mtrlid = :arg_mtrlid;
  2008. // If sqlca.SQLCode <> 0 Then
  2009. // arG_MSG = '查询'+ARG_mtrlCODE+'收货限价属性失败 '
  2010. // rslt = 0
  2011. // Goto ext
  2012. // End If
  2013. //
  2014. // If li_iflimitprice = 1 Then
  2015. // If uo_sptprice.uf_check_price_save(0,sptid,arg_mtrlid,ARG_mtrlCODE,arg_unit,arg_status,arg_woodcode,arg_pcode,arg_uprice * arg_rebate,arG_MSG) = 0 Then
  2016. // rslt = 0
  2017. // Goto ext
  2018. // End If
  2019. // End If
  2020. //End If
  2021. //
  2022. //f_get_defsptprice(sptid,arg_mtrlid,arg_unit,arg_status,arg_pcode,arg_woodcode,ld_dftsptprice)
  2023. //
  2024. //If sys_option_buytask_mxhb = 0 Then
  2025. // For LS_i = 1 To it_mxbt //合并重复项
  2026. // If buytaskmx[LS_i].mtrlid = arg_mtrlid And &
  2027. // buytaskmx[LS_i].orderid = arg_orderid And &
  2028. // buytaskmx[LS_i].requiredate = arg_requiredate And &
  2029. // buytaskmx[LS_i].status = arg_status And &
  2030. // buytaskmx[LS_i].woodcode = arg_woodcode And &
  2031. // buytaskmx[LS_i].pcode = arg_pcode And &
  2032. // buytaskmx[LS_i].unit = arg_unit And &
  2033. // buytaskmx[LS_i].relid = arg_relid And &
  2034. // buytaskmx[LS_i].relprintid = arg_relprintid And &
  2035. // buytaskmx[LS_i].relid2 = arg_relid2 Then
  2036. //
  2037. // buytaskmx[LS_i].uqty += arg_uqty
  2038. // buytaskmx[LS_i].addqty += arg_addqty
  2039. // buytaskmx[LS_i].Qty += Round(arg_uqty * arg_rate,sys_option_unit_dec)
  2040. //
  2041. // buytaskmx[LS_i].uamt += Round(arg_uqty * arg_uprice * arg_rebate * ld_round, 0) / ld_round //原币,实价含税金额
  2042. // buytaskmx[LS_i].uamt_tax += Round((arg_uqty * arg_uprice * arg_rebate) * arg_tax / (1 + arg_tax) * ld_round, 0) / ld_round //原币, 税金
  2043. // buytaskmx[LS_i].bsamt += Round(arg_uqty * arg_uprice * arg_rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额
  2044. // buytaskmx[LS_i].bsamt_tax += Round((arg_uqty * arg_uprice * arg_rebate * mrate) * arg_tax / (1 + arg_tax) * ld_round, 0) / ld_round //本位币, 税金
  2045. //
  2046. // rslt = 1
  2047. // Goto ext
  2048. // End If
  2049. // Next
  2050. //End If
  2051. //
  2052. //If uo_sptprice.uf_getmtrlname(sptid,arg_mtrlid,ls_sptmtrlname,arG_MSG) = 0 Then
  2053. // rslt = 0
  2054. // Goto ext
  2055. //End If
  2056. //
  2057. //
  2058. ////写入内容
  2059. //it_mxbt++
  2060. //buytaskmx[it_mxbt].printid = arg_printid
  2061. //
  2062. //buytaskmx[it_mxbt].iforder = arg_iforder
  2063. //buytaskmx[it_mxbt].orderid = arg_orderid
  2064. //buytaskmx[it_mxbt].ordercode = arg_ordercode
  2065. //buytaskmx[it_mxbt].mtrlid = arg_mtrlid
  2066. //
  2067. //buytaskmx[it_mxbt].uqty = arg_uqty
  2068. //buytaskmx[it_mxbt].addqty = arg_addqty
  2069. //buytaskmx[it_mxbt].Qty = Round(arg_uqty * arg_rate,sys_option_unit_dec)
  2070. //
  2071. //buytaskmx[it_mxbt].plprice = arg_planprice
  2072. //buytaskmx[it_mxbt].dscrp = arg_dscrp
  2073. //buytaskmx[it_mxbt].mtrlcode = ARG_mtrlCODE
  2074. //
  2075. //buytaskmx[it_mxbt].unit = arg_unit
  2076. //buytaskmx[it_mxbt].rate = arg_rate
  2077. //buytaskmx[it_mxbt].rebate = arg_rebate
  2078. //buytaskmx[it_mxbt].tax = arg_tax
  2079. //buytaskmx[it_mxbt].uprice = arg_uprice
  2080. //
  2081. //If Round(arg_uqty * arg_rate,sys_option_unit_dec) <> 0 Then //出现除数为0
  2082. // buytaskmx[it_mxbt].fprice = Round((arg_uprice * arg_uqty)/(Round(arg_uqty * arg_rate,sys_option_unit_dec)),10)
  2083. //Else
  2084. // buytaskmx[it_mxbt].fprice = arg_uprice
  2085. //End If
  2086. //
  2087. //buytaskmx[it_mxbt].acprice = buytaskmx[it_mxbt].fprice * arg_rebate //对应数据库 price
  2088. //
  2089. //buytaskmx[it_mxbt].uamt = Round(arg_uqty * arg_uprice * arg_rebate * ld_round, 0) / ld_round //原币,实价含税金额
  2090. //buytaskmx[it_mxbt].uamt_tax = Round((arg_uqty * arg_uprice * arg_rebate) * arg_tax / (1 + arg_tax) * ld_round, 0) / ld_round //原币, 税金
  2091. //buytaskmx[it_mxbt].bsamt = Round(arg_uqty * arg_uprice * arg_rebate * mrate * ld_round, 0) / ld_round //本位币, 实价含税金额
  2092. //buytaskmx[it_mxbt].bsamt_tax = Round((arg_uqty * arg_uprice * arg_rebate * mrate) * arg_tax / (1 + arg_tax) * ld_round, 0) / ld_round //本位币, 税金
  2093. //
  2094. //
  2095. //buytaskmx[it_mxbt].requiredate = arg_requiredate
  2096. //buytaskmx[it_mxbt].status = arg_status
  2097. //buytaskmx[it_mxbt].woodcode = arg_woodcode
  2098. //buytaskmx[it_mxbt].pcode = arg_pcode
  2099. //buytaskmx[it_mxbt].storageid = arg_storageid
  2100. //buytaskmx[it_mxbt].dftsptprice = ld_dftsptprice
  2101. //
  2102. //buytaskmx[it_mxbt].relid = arg_relid
  2103. //buytaskmx[it_mxbt].relprintid = arg_relprintid
  2104. //buytaskmx[it_mxbt].relid2 = arg_relid2
  2105. //buytaskmx[it_mxbt].relcode = arg_relcode
  2106. //buytaskmx[it_mxbt].formula = arg_formula
  2107. //
  2108. //
  2109. //buytaskmx[it_mxbt].sptmtrlname = ls_sptmtrlname
  2110. //buytaskmx[it_mxbt].plancode = arg_plancode
  2111. //
  2112. //
  2113. //ext:
  2114. ////DESTROY uo_price
  2115. //Destroy uo_sptprice
  2116. //If rslt = 0 Then
  2117. // p_clearmx()
  2118. // arG_MSG = '采购订单,'+ arG_MSG
  2119. //End If
  2120. //Return(rslt)
  2121. //
  2122. //
  2123. //
  2124. end function
  2125. public function integer wf_check_taskdamt (integer arg_scid, integer arg_taskid, ref string msg);//检查是否已开采购付款单 //0 失败 1成功
  2126. long i = 0 , rslt = 1
  2127. select COUNT(relid) into :i
  2128. FROM u_taskdamt_mx INNER JOIN
  2129. u_taskdamt ON u_taskdamt_mx.billid = u_taskdamt.billid
  2130. where u_taskdamt_mx.relid = :arg_TaskID and
  2131. u_taskdamt_mx.scid =:arg_scid and
  2132. u_taskdamt.billtype = 1
  2133. Using commit_transaction;
  2134. IF commit_transaction.SQLCode <> 0 THEN
  2135. rslt = 0
  2136. msg = "查询操作失败,采购付款单"
  2137. GOTO ext
  2138. END IF
  2139. if i > 0 then
  2140. msg= '已开采购付款单不允许删除'
  2141. rslt = 0
  2142. GOTO ext
  2143. end if
  2144. ext:
  2145. RETURN rslt
  2146. end function
  2147. public function integer priceaudit (long arg_scid, long arg_taskid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i
  2148. IF arg_scid < 0 THEN
  2149. rslt = 0
  2150. arg_msg = "错误的分部ID"
  2151. GOTO ext
  2152. END IF
  2153. IF arg_taskid <= 0 THEN
  2154. rslt = 0
  2155. arg_msg = "没有确认对象"
  2156. GOTO ext
  2157. END IF
  2158. if getinfo(arg_scid,arg_taskid,arg_msg) = 0 then
  2159. rslt = 0
  2160. goto ext
  2161. end if
  2162. IF priceflag = 1 THEN
  2163. rslt = 0
  2164. arg_msg = "单据已经确认"
  2165. GOTO ext
  2166. END IF
  2167. UPDATE u_buytask
  2168. SET priceemp = :publ_operator,
  2169. pricedate = getdate(),
  2170. priceflag = 1
  2171. WHERE u_buytask.taskid = :arg_taskid
  2172. AND priceflag = 0
  2173. AND scid = :arg_scid USING commit_transaction;
  2174. IF commit_transaction.SQLCode <> 0 THEN
  2175. rslt = 0
  2176. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  2177. GOTO ext
  2178. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2179. rslt = 0
  2180. arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  2181. GOTO ext
  2182. END IF
  2183. priceflag = 1
  2184. ext:
  2185. IF rslt = 0 THEN
  2186. ROLLBACK USING commit_transaction;
  2187. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2188. COMMIT USING commit_transaction;
  2189. END IF
  2190. RETURN rslt
  2191. end function
  2192. public function integer c_priceaudit (long arg_scid, long arg_taskid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,i
  2193. DateTime null_dt
  2194. SetNull(null_dt)
  2195. IF arg_scid < 0 THEN
  2196. rslt = 0
  2197. arg_msg = "错误的分部ID"
  2198. GOTO ext
  2199. END IF
  2200. IF arg_taskid <= 0 THEN
  2201. rslt = 0
  2202. arg_msg = "没有确认对象"
  2203. GOTO ext
  2204. END IF
  2205. if getinfo(arg_scid,arg_taskid,arg_msg) = 0 then
  2206. rslt = 0
  2207. goto ext
  2208. end if
  2209. IF priceflag = 0 THEN
  2210. rslt = 0
  2211. arg_msg = "单据未确认"
  2212. GOTO ext
  2213. END IF
  2214. UPDATE u_buytask
  2215. SET priceemp = '',
  2216. pricedate = :null_dt,
  2217. priceflag = 0
  2218. WHERE u_buytask.taskid = :arg_taskid
  2219. AND priceflag = 1
  2220. AND scid = :arg_scid USING commit_transaction;
  2221. IF commit_transaction.SQLCode <> 0 THEN
  2222. rslt = 0
  2223. arg_msg = "因网络或其它原因导致确认单据操作失败"+"~n"+commit_transaction.SQLErrText
  2224. GOTO ext
  2225. ELSEIF commit_transaction.SQLNRows = 0 THEN
  2226. rslt = 0
  2227. arg_msg = "单据正在确认,请稍后查询。"+"~n"+commit_transaction.SQLErrText
  2228. GOTO ext
  2229. END IF
  2230. priceflag = 0
  2231. ext:
  2232. IF rslt = 0 THEN
  2233. ROLLBACK USING commit_transaction;
  2234. ELSEIF rslt = 1 AND arg_ifcommit THEN
  2235. COMMIT USING commit_transaction;
  2236. END IF
  2237. RETURN rslt
  2238. end function
  2239. on uo_buytask.create
  2240. call super::create
  2241. TriggerEvent( this, "constructor" )
  2242. end on
  2243. on uo_buytask.destroy
  2244. TriggerEvent( this, "destructor" )
  2245. call super::destroy
  2246. end on