uo_outware_ll.sru 56 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252
  1. $PBExportHeader$uo_outware_ll.sru
  2. forward
  3. global type uo_outware_ll from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_outware_ll from nonvisualobject
  7. end type
  8. global uo_outware_ll uo_outware_ll
  9. type variables
  10. Long uo_outwareid
  11. String uo_outwarecode
  12. Decimal uo_sumamt_native
  13. Decimal uo_sumamt_en
  14. int uo_option_confirmaudit_sale_ll
  15. int uo_option_m_msttake
  16. int uo_option_otheramt_msttake
  17. string uo_option_change_otheramt
  18. int uo_option_mtrlware_limit
  19. int uo_option_noauditingqty_mode
  20. end variables
  21. forward prototypes
  22. public function integer add_dscrp (long arg_outwareid, string arg_newdescppart, ref string arg_msg)
  23. public function integer del (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit)
  24. public function integer updatebegin (long arg_outwareid, ref string arg_msg)
  25. public function integer audit (long arg_outwareid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer audit_2 (long arg_outwareid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  27. public function integer caudit (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit)
  28. public function integer caudit_2 (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit)
  29. public function integer save (s_outware_ll arg_out_ll, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  30. public function integer audit_p (long arg_outwareid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  31. public function integer caudit_p (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit)
  32. private function integer p_getinfo (long arg_outwareid, ref s_outware_ll arg_ref_s_outware, ref string arg_msg)
  33. private function integer getinfo (long arg_outwareid, ref s_outware_ll arg_ref_s_outware_ll, ref string arg_msg)
  34. public function integer uof_noauditingqty_add (s_outwaremx_ll arg_s_mx[], ref string arg_msg)
  35. public function integer uof_noauditingqty_del (long arg_outwareid, ref string arg_msg)
  36. end prototypes
  37. public function integer add_dscrp (long arg_outwareid, string arg_newdescppart, ref string arg_msg);Int rslt = 1
  38. s_outware_ll arg_s_out_ll
  39. IF arg_newdescppart = '' THEN
  40. rslt = 0
  41. arg_msg = "要添加内容为空,操作取消"
  42. GOTO ext
  43. END IF
  44. IF p_getinfo(arg_outwareid,arg_s_out_ll,arg_msg) = 0 THEN
  45. rslt = 0
  46. GOTO ext
  47. END IF
  48. IF arg_s_out_ll.flag = 0 THEN
  49. rslt = 0
  50. arg_msg = "待审核状态下不可用"
  51. GOTO ext
  52. END IF
  53. UPDATE u_outware_ll
  54. SET dscrp = dscrp + ' ' + :arg_newdescppart
  55. Where u_outware_ll.outwareid = :arg_outwareid;
  56. IF sqlca.SQLCode <> 0 THEN
  57. rslt = 0
  58. arg_msg = "因网络或其它原因导致添加备注操作失败"+"~n"+sqlca.SQLErrText
  59. GOTO ext
  60. END IF
  61. ext:
  62. IF rslt = 1 THEN
  63. COMMIT;
  64. ELSE
  65. ROLLBACK;
  66. END IF
  67. RETURN rslt
  68. end function
  69. public function integer del (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  70. s_outware_ll arg_s_out_ll
  71. If arg_outwareid <= 0 Then
  72. rslt = 0
  73. arg_msg = '错误单据唯一码'
  74. Goto ext
  75. End If
  76. If p_getinfo(arg_outwareid,arg_s_out_ll,arg_msg) = 0 Then
  77. rslt = 0
  78. Goto ext
  79. End If
  80. If arg_s_out_ll.flag <> 0 Then
  81. rslt = 0
  82. arg_msg = '单据不是在待审状态,不可以删除'
  83. Goto ext
  84. End If
  85. //更新库存已开单数(减)
  86. If uof_noauditingqty_del(arg_outwareid,arg_msg) = 0 Then
  87. rslt = 0
  88. Goto ext
  89. End If
  90. Delete From u_outwaremx_ll
  91. Where outwareid = :arg_outwareid;
  92. If sqlca.SQLCode <> 0 Then
  93. rslt = 0
  94. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  95. Goto ext
  96. End If
  97. Delete From u_outware_ll
  98. Where outwareid = :arg_outwareid
  99. And flag = 0;
  100. If sqlca.SQLCode <> 0 Then
  101. rslt = 0
  102. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  103. Goto ext
  104. End If
  105. ext:
  106. If rslt = 0 Then
  107. Rollback;
  108. ElseIf rslt = 1 And arg_ifcommit Then
  109. Commit;
  110. End If
  111. Return rslt
  112. end function
  113. public function integer updatebegin (long arg_outwareid, ref string arg_msg);Int rslt = 1
  114. s_outware_ll arg_s_out_ll
  115. IF uo_option_confirmaudit_sale_ll = -1000 THEN
  116. rslt = 0
  117. arg_msg = '选项:[134]来料加工发货单先确认后审核,读取初始默认值失败,操作取消!'
  118. GOTO ext
  119. END IF
  120. IF arg_outwareid <= 0 THEN
  121. rslt = 0
  122. arg_msg = '错误单据唯一码'
  123. GOTO ext
  124. END IF
  125. IF p_getinfo(arg_outwareid,arg_s_out_ll,arg_msg) = 0 THEN
  126. rslt = 0
  127. GOTO ext
  128. END IF
  129. String ls_storagename
  130. SELECT storagename
  131. INTO :ls_storagename
  132. FROM u_storage
  133. Where storageid = :arg_s_out_ll.storageid;
  134. IF sqlca.SQLCode <> 0 THEN
  135. rslt = 0
  136. arg_msg = "查询操作失败,仓库"
  137. GOTO ext
  138. END IF
  139. //检查是否有该仓库的建立权限
  140. IF sys_user_storagestr_new <> '0' THEN
  141. IF Pos(sys_user_storagestr_new,','+String(arg_s_out_ll.storageid)+',') <= 0 THEN
  142. rslt = 0
  143. arg_msg = '没有仓库: '+ls_storagename+' 的建立权限,不允许修改该仓库的单据'
  144. GOTO ext
  145. END IF
  146. END IF
  147. //
  148. IF uo_option_confirmaudit_sale_ll = 1 THEN
  149. IF arg_s_out_ll.priceflag = 1 AND arg_s_out_ll.flag = 1 AND arg_s_out_ll.secflag = 1 THEN
  150. rslt = 0
  151. arg_msg = '单据已经过仓库及财务审核,不可以修改'
  152. GOTO ext
  153. END IF
  154. ELSE
  155. IF arg_s_out_ll.flag = 1 AND arg_s_out_ll.secflag = 1 THEN
  156. rslt = 0
  157. arg_msg = '单据已经过仓库及财务审核,不可以修改'
  158. GOTO ext
  159. ELSEIF arg_s_out_ll.priceflag = 1 AND arg_s_out_ll.flag = 0 AND arg_s_out_ll.secflag = 0 THEN
  160. rslt = 0
  161. arg_msg = '单据已经确认,仓审前不可以修改,不可以修改'
  162. GOTO ext
  163. END IF
  164. END IF
  165. ext:
  166. RETURN rslt
  167. end function
  168. public function integer audit (long arg_outwareid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt
  169. Long i,ll_ref_relid
  170. s_outware_ll arg_s_out_ll
  171. rslt = 1
  172. IF uo_option_confirmaudit_sale_ll = -1000 THEN
  173. rslt = 0
  174. arg_msg = '选项:[134]来料加工发货单先确认后审核,读取初始默认值失败,操作取消!'
  175. GOTO ext
  176. END IF
  177. uo_outware uo_out
  178. uo_out = CREATE uo_outware
  179. uo_out.commit_transaction = sqlca
  180. uo_out.if_getid_ture = FALSE
  181. uo_saletask_ll uo_t_ll
  182. uo_t_ll = CREATE uo_saletask_ll
  183. uo_t_ll.commit_transaction = sqlca
  184. IF arg_outwareid <= 0 THEN
  185. rslt = 0
  186. arg_msg = '错误单据唯一码'
  187. GOTO ext
  188. END IF
  189. IF getinfo(arg_outwareid,arg_s_out_ll,arg_msg) = 0 THEN
  190. rslt = 0
  191. GOTO ext
  192. END IF
  193. String ls_storagename
  194. Long ll_scid_storage
  195. SELECT storagename,scid
  196. INTO :ls_storagename,:ll_scid_storage
  197. FROM u_storage
  198. Where storageid = :arg_s_out_ll.storageid;
  199. IF sqlca.SQLCode <> 0 THEN
  200. rslt = 0
  201. arg_msg = "查询操作失败,仓库"
  202. GOTO ext
  203. END IF
  204. //检查是否有该仓库的建立权限
  205. IF sys_user_storagestr_audit <> '0' THEN
  206. IF Pos(sys_user_storagestr_audit,','+String(arg_s_out_ll.storageid)+',') <= 0 THEN
  207. rslt = 0
  208. arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许审核该仓库的单据'
  209. GOTO ext
  210. END IF
  211. END IF
  212. //
  213. IF arg_s_out_ll.flag = 1 THEN
  214. rslt = 0
  215. arg_msg = '单据已经审核,不可以再审'
  216. GOTO ext
  217. END IF
  218. IF uo_option_confirmaudit_sale_ll = 1 THEN
  219. IF arg_s_out_ll.priceflag = 0 THEN
  220. rslt = 0
  221. arg_msg = "单据需要确认后才能审核,请检查"
  222. GOTO ext
  223. END IF
  224. END IF
  225. //更新审核标记
  226. UPDATE u_outware_ll
  227. SET auditingrep = :arg_opemp,
  228. auditingdate = getdate(),
  229. flag = 1
  230. WHERE outwareid = :arg_outwareid
  231. AND flag = 0;
  232. IF sqlca.SQLCode <> 0 THEN
  233. rslt = 0
  234. arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  235. GOTO ext
  236. ELSEIF sqlca.SQLNRows = 0 THEN
  237. rslt = 0
  238. arg_msg = "单据正在审核,请稍后重试。"+"~n"+sqlca.SQLErrText
  239. GOTO ext
  240. END IF
  241. //更新订单完成数
  242. FOR i = 1 TO UpperBound(arg_s_out_ll.arg_s_mx) - 1
  243. IF arg_s_out_ll.arg_s_mx[i].relid = 0 THEN CONTINUE
  244. IF uo_t_ll.addmxcmpl(arg_s_out_ll.arg_s_mx[i].relid,&
  245. arg_s_out_ll.arg_s_mx[i].relprintid,arg_s_out_ll.arg_s_mx[i].uqty,arg_msg,FALSE) = 0 THEN
  246. arg_msg = '行:'+String(i)+','+arg_msg
  247. rslt = 0
  248. GOTO ext
  249. END IF
  250. IF uo_t_ll.trycmplsaletask(arg_s_out_ll.arg_s_mx[i].relid,arg_msg,FALSE) = 0 THEN
  251. arg_msg = '行:'+String(i)+','+arg_msg
  252. rslt = 0
  253. GOTO ext
  254. END IF
  255. NEXT
  256. //生成并审核出仓单
  257. IF uo_out.newbegin(ll_scid_storage,5,arg_msg) = 0 THEN
  258. rslt = 0
  259. GOTO ext
  260. END IF
  261. uo_out.relid = arg_s_out_ll.outwareid
  262. uo_out.outdate = arg_s_out_ll.outdate
  263. uo_out.outrep = arg_s_out_ll.outrep
  264. uo_out.part = arg_s_out_ll.outwarecode
  265. uo_out.dscrp = arg_s_out_ll.dscrp
  266. uo_out.cusname = '来料加工发货单出仓单'
  267. uo_out.storageid = arg_s_out_ll.storageid
  268. uo_out.cusid = arg_s_out_ll.cusid
  269. FOR i = 1 TO UpperBound(arg_s_out_ll.arg_s_mx) - 1
  270. IF uo_out.acceptmx(arg_s_out_ll.arg_s_mx[i].mtrlwareid,&
  271. arg_s_out_ll.arg_s_mx[i].qty,arg_s_out_ll.arg_s_mx[i].fprice,1,&
  272. arg_s_out_ll.arg_s_mx[i].mxdscrp,arg_s_out_ll.arg_s_mx[i].printid,&
  273. arg_msg,0,0,0,&
  274. arg_s_out_ll.arg_s_mx[i].packqty,arg_s_out_ll.arg_s_mx[i].outtypestr,0,&
  275. 0,arg_s_out_ll.arg_s_mx[i].u_mtrldef_unit,&
  276. arg_s_out_ll.arg_s_mx[i].qty,1,'','',0,0,'',0,0,0,0,'','') = 0 THEN
  277. rslt = 0
  278. GOTO ext
  279. END IF
  280. NEXT
  281. IF uo_out.Save(FALSE,arg_msg) = 0 THEN
  282. rslt = 0
  283. GOTO ext
  284. END IF
  285. ll_ref_relid = uo_out.outwareid
  286. //4.原事务审核出仓单
  287. IF uo_out.getinfo(ll_scid_storage,ll_ref_relid,arg_msg) = 0 THEN
  288. rslt = 0
  289. GOTO ext
  290. END IF
  291. IF uo_out.auditing(FALSE,arg_msg) = 0 THEN
  292. rslt = 0
  293. GOTO ext
  294. END IF
  295. UPDATE u_outware_ll
  296. SET relid = :ll_ref_relid
  297. Where outwareid = :arg_outwareid;
  298. IF sqlca.SQLCode <> 0 THEN
  299. arg_msg = '更新相关出仓单id失败,'+sqlca.SQLErrText
  300. rslt = 0
  301. GOTO ext
  302. END IF
  303. //更新库存已开单数(减)
  304. If uof_noauditingqty_del(arg_outwareid,arg_msg) = 0 Then
  305. rslt = 0
  306. Goto ext
  307. End If
  308. ext:
  309. IF rslt = 0 THEN
  310. ROLLBACK;
  311. ELSEIF rslt = 1 AND arg_ifcommit THEN
  312. COMMIT;
  313. END IF
  314. DESTROY uo_out
  315. DESTROY uo_t_ll
  316. RETURN rslt
  317. end function
  318. public function integer audit_2 (long arg_outwareid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  319. long i
  320. s_outware_ll arg_s_out_ll
  321. //uo_option_m_msttake
  322. //uo_option_otheramt_msttake
  323. //uo_option_change_otheramt
  324. IF uo_option_m_msttake = -1000 THEN
  325. rslt = 0
  326. arg_msg = '选项:[045]系统使用多币种应收帐,读取初始默认值失败,操作取消!'
  327. GOTO ext
  328. END IF
  329. IF uo_option_otheramt_msttake = -1000 THEN
  330. rslt = 0
  331. arg_msg = '选项:[052]优惠金额多币种,读取初始默认值失败,操作取消!'
  332. GOTO ext
  333. END IF
  334. IF uo_option_change_otheramt = '-1000' THEN
  335. rslt = 0
  336. arg_msg = '选项:[050]销售发货单优惠金额文本,读取初始默认值失败,操作取消!'
  337. GOTO ext
  338. END IF
  339. uo_musttake uo_t
  340. uo_t = create uo_musttake
  341. uo_cusprice uo_update_cusprice
  342. uo_update_cusprice = Create uo_cusprice
  343. IF arg_outwareid <= 0 THEN
  344. rslt = 0
  345. arg_msg = '错误单据唯一码'
  346. GOTO ext
  347. END IF
  348. IF getinfo(arg_outwareid,arg_s_out_ll,arg_msg) = 0 THEN
  349. rslt = 0
  350. GOTO ext
  351. END IF
  352. IF arg_s_out_ll.flag <> 1 THEN
  353. rslt = 0
  354. arg_msg = '单据不是在仓审状态,不可以财务审'
  355. GOTO ext
  356. END IF
  357. //更新审核标记
  358. UPDATE u_outware_ll
  359. SET secauditingrep = :arg_opemp,
  360. secauditingdate = getdate(),
  361. secflag = 1
  362. WHERE outwareid = :arg_outwareid
  363. AND flag = 1;
  364. IF sqlca.SQLCode <> 0 THEN
  365. rslt = 0
  366. arg_msg = "因网络或其它原因导致单据财务审操作失败"+"~n"+sqlca.SQLErrText
  367. GOTO ext
  368. ELSEIF sqlca.SQLNRows = 0 THEN
  369. rslt = 0
  370. arg_msg = "单据正在审核,请稍后重试。"+"~n"+sqlca.SQLErrText
  371. GOTO ext
  372. END IF
  373. FOR i = 1 To upperbound(arg_s_out_ll.arg_s_mx) - 1
  374. IF uo_update_cusprice.uof_update_custprice(0,0,arg_s_out_ll.cusid,&
  375. arg_s_out_ll.arg_s_mx[i].mtrlid,arg_s_out_ll.arg_s_mx[i].mtrlcode,arg_s_out_ll.arg_s_mx[i].status,&
  376. arg_s_out_ll.arg_s_mx[i].woodcode,arg_s_out_ll.arg_s_mx[i].pcode,&
  377. arg_s_out_ll.outwareid,arg_s_out_ll.outwarecode,arg_s_out_ll.outdate,arg_s_out_ll.arg_s_mx[i].enprice,&
  378. arg_s_out_ll.arg_s_mx[i].rebate,arg_s_out_ll.arg_s_mx[i].costamt,0,'',&
  379. arg_s_out_ll.arg_s_mx[i].printid,0,arg_s_out_ll.relint_2,0,0,False,arg_msg) = 0 THEN
  380. rslt = 0
  381. GOTO ext
  382. END IF
  383. NEXT
  384. //生成应收帐
  385. String ls_mtrlname
  386. String ls_about
  387. Decimal ld_takeamt = 0,ld_msttakeamt = 0
  388. Long ll_moneyid,ll_moneyid_yh,ll_moneyid_native
  389. decimal ld_mrate,ld_mrate_yh
  390. Int li_btype
  391. Long ll_accountsid
  392. SELECT btype,accountsid
  393. INTO :li_btype,:ll_accountsid
  394. FROM cw_banktype
  395. Where banktypeid = :arg_s_out_ll.relint_1;
  396. IF sqlca.SQLCode <> 0 THEN
  397. rslt = 0
  398. arg_msg = '查询结算方式类型失败,'+ sqlca.SQLErrText
  399. GOTO ext
  400. END IF
  401. IF uo_sumamt_en <> 0 THEN
  402. Long ll_dft_itemid_take,ll_dft_itemid_yh
  403. IF arg_s_out_ll.thflag = 1 THEN
  404. ls_about = arg_s_out_ll.outwarecode + "退货款,相关号:"+arg_s_out_ll.part
  405. SELECT itemid INTO :ll_dft_itemid_take
  406. FROM u_itemdef
  407. Where dfttype = 4;
  408. IF sqlca.SQLCode <> 0 THEN
  409. arg_msg = '查询默认销售退货项目资料失败,'+sqlca.sqlerrtext
  410. rslt = 0
  411. GOTO ext
  412. END IF
  413. ELSE
  414. ls_about = arg_s_out_ll.outwarecode + "应收款,相关号:"+arg_s_out_ll.part
  415. SELECT itemid INTO :ll_dft_itemid_take
  416. FROM u_itemdef
  417. Where dfttype = 1 using sqlca;
  418. IF sqlca.SQLCode <> 0 THEN
  419. arg_msg = '查询默认应收项目资料失败,'+sqlca.sqlerrtext
  420. rslt = 0
  421. GOTO ext
  422. END IF
  423. END IF
  424. SELECT moneyid INTO :ll_moneyid_native
  425. FROM cw_currency
  426. Where native = 1;
  427. IF sqlca.SQLCode <> 0 THEN
  428. arg_msg = '查询本位币资料失败'
  429. rslt = 0
  430. GOTO ext
  431. END IF
  432. IF uo_option_m_msttake = 0 THEN
  433. ld_msttakeamt = uo_sumamt_native
  434. ll_moneyid = ll_moneyid_native
  435. ld_mrate = 1
  436. ELSE
  437. ld_msttakeamt = uo_sumamt_en
  438. ll_moneyid = arg_s_out_ll.relint_2
  439. ld_mrate = arg_s_out_ll.mrate
  440. END IF
  441. Decimal ld_mrate_amt
  442. IF arg_s_out_ll.otheramt <> 0 THEN
  443. IF uo_option_otheramt_msttake = 1 THEN
  444. ld_mrate_amt = arg_s_out_ll.otheramt * arg_s_out_ll.mrate
  445. ll_moneyid_yh = arg_s_out_ll.relint_2
  446. ld_mrate_yh = arg_s_out_ll.mrate
  447. ELSE
  448. ld_mrate_amt = arg_s_out_ll.otheramt
  449. ll_moneyid_yh = ll_moneyid_native
  450. ld_mrate_yh = 1
  451. END IF
  452. END IF
  453. IF li_btype = 1 THEN
  454. ld_takeamt = ld_msttakeamt - ld_mrate_amt
  455. ELSE
  456. ld_takeamt = 0
  457. END IF
  458. String ls_taskdscrp
  459. Decimal ld_taskamt
  460. String ls_taskcode[]
  461. Decimal ld_saletaskamt[]
  462. Long ll_i,j,k
  463. ll_i = 0
  464. FOR i = 1 TO upperbound(arg_s_out_ll.arg_s_mx) - 1
  465. IF arg_s_out_ll.arg_s_mx[i].ifrel = 1 THEN
  466. IF uo_option_m_msttake = 0 THEN
  467. ld_taskamt = arg_s_out_ll.arg_s_mx[i].uqty * arg_s_out_ll.arg_s_mx[i].rebate * arg_s_out_ll.arg_s_mx[i].price //计算单据总金额
  468. ELSE
  469. ld_taskamt = arg_s_out_ll.arg_s_mx[i].uqty * arg_s_out_ll.arg_s_mx[i].rebate * arg_s_out_ll.arg_s_mx[i].enprice //计算单据总金额
  470. END IF
  471. FOR j = 1 TO ll_i
  472. IF ls_taskcode[j] = arg_s_out_ll.arg_s_mx[i].relcode THEN
  473. ld_saletaskamt[j] = ld_saletaskamt[j] + ld_taskamt
  474. GOTO exit_for
  475. END IF
  476. NEXT
  477. ll_i++
  478. ls_taskcode[ll_i] = arg_s_out_ll.arg_s_mx[i].relcode
  479. ld_saletaskamt[ll_i] = ld_taskamt
  480. END IF
  481. exit_for:
  482. NEXT
  483. FOR k = 1 TO ll_i
  484. ls_taskdscrp = ls_taskdscrp + '订单'+ls_taskcode[k]+'金额:'+String(ld_saletaskamt[k],'#,##0.00')+','
  485. NEXT
  486. s_bmsttake s_take
  487. s_take.scid = arg_s_out_ll.scid
  488. s_take.cusid = arg_s_out_ll.cusid
  489. s_take.takedate = arg_s_out_ll.outdate
  490. s_take.inrep = arg_s_out_ll.outrep
  491. s_take.oriamt = ld_msttakeamt
  492. s_take.msttakeamt = ld_msttakeamt
  493. s_take.takeamt = ld_takeamt
  494. s_take.takeamt_cn = ld_takeamt
  495. s_take.dscrp = ls_about
  496. s_take.billcode = arg_s_out_ll.outwarecode
  497. s_take.relcode = arg_s_out_ll.part
  498. s_take.banktypeid = arg_s_out_ll.relint_1
  499. s_take.opemp = publ_operator
  500. s_take.buildtype = 1
  501. s_take.outwareid = arg_s_out_ll.outwareid
  502. s_take.accountsid = ll_accountsid
  503. s_take.itemid = ll_dft_itemid_take
  504. s_take.moneyid = ll_moneyid
  505. s_take.moneyid_cn = ll_moneyid
  506. s_take.viewdate = arg_s_out_ll.viewdate
  507. s_take.taskdscrp = ls_taskdscrp
  508. s_take.mrate = ld_mrate
  509. IF uo_t.add_takerec(s_take,arg_msg,FALSE) = 0 THEN
  510. rslt = 0
  511. GOTO ext
  512. END IF
  513. IF arg_s_out_ll.otheramt <> 0 THEN
  514. ls_about = arg_s_out_ll.outwarecode + uo_option_change_otheramt +",相关号:"+arg_s_out_ll.part
  515. SELECT itemid INTO :ll_dft_itemid_yh
  516. FROM u_itemdef
  517. Where dfttype = 3;
  518. IF sqlca.SQLCode <> 0 THEN
  519. arg_msg = '查询默认优惠项目资料失败'
  520. rslt = 0
  521. GOTO ext
  522. END IF
  523. s_bmsttakemx s_takemx
  524. s_takemx.scid = arg_s_out_ll.scid
  525. s_takemx.takeid = uo_t.ref_takeid
  526. s_takemx.cusid = arg_s_out_ll.cusid
  527. s_takemx.takedate = arg_s_out_ll.outdate
  528. s_takemx.inrep = arg_s_out_ll.outrep
  529. s_takemx.msttakeamt = 0 - ld_mrate_amt
  530. s_takemx.takeamt = 0
  531. s_takemx.dscrp = ls_about
  532. s_takemx.billcode = arg_s_out_ll.outwarecode
  533. s_takemx.banktypeid = arg_s_out_ll.relint_1
  534. s_takemx.opemp = publ_operator
  535. s_takemx.buildtype = 3
  536. s_takemx.outwareid = arg_s_out_ll.outwareid
  537. s_takemx.salebillid = 0
  538. s_takemx.itemid = ll_dft_itemid_yh
  539. s_takemx.moneyid = ll_moneyid_yh
  540. s_takemx.mrate = ld_mrate_yh
  541. IF uo_t.add_takerecmx(s_takemx,arg_msg,FALSE) = 0 THEN
  542. rslt = 0
  543. GOTO ext
  544. END IF
  545. END IF
  546. UPDATE u_outware_ll
  547. SET relint_3 = :uo_t.ref_takeid
  548. WHERE u_outware_ll.outwareid = :arg_outwareid
  549. AND flag = 1
  550. AND secflag = 1;
  551. IF sqlca.SQLCode <> 0 THEN
  552. arg_msg = '更新相关应收帐id失败'
  553. rslt = 0
  554. GOTO ext
  555. END IF
  556. END IF
  557. ext:
  558. IF rslt = 0 THEN
  559. ROLLBACK;
  560. ELSEIF rslt = 1 AND arg_ifcommit THEN
  561. COMMIT;
  562. END IF
  563. Destroy uo_update_cusprice
  564. RETURN rslt
  565. end function
  566. public function integer caudit (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  567. Long i
  568. s_outware_ll arg_s_out_ll
  569. DateTime null_dt
  570. SetNull(null_dt)
  571. uo_outware uo_out
  572. uo_out = Create uo_outware
  573. uo_out.commit_transaction = sqlca
  574. uo_out.if_getid_ture = False
  575. uo_saletask_ll uo_t_ll
  576. uo_t_ll = Create uo_saletask_ll
  577. uo_t_ll.commit_transaction = sqlca
  578. If arg_outwareid <= 0 Then
  579. rslt = 0
  580. arg_msg = '错误单据唯一码'
  581. Goto ext
  582. End If
  583. If getinfo(arg_outwareid,arg_s_out_ll,arg_msg) = 0 Then
  584. rslt = 0
  585. Goto ext
  586. End If
  587. String ls_storagename
  588. Long ll_scid_storage
  589. Select storagename,scid
  590. Into :ls_storagename,:ll_scid_storage
  591. From u_storage
  592. Where storageid = :arg_s_out_ll.storageid;
  593. If sqlca.SQLCode <> 0 Then
  594. rslt = 0
  595. arg_msg = "查询操作失败,仓库"
  596. Goto ext
  597. End If
  598. //检查是否有该仓库的建立权限
  599. If sys_user_storagestr_audit <> '0' Then
  600. If Pos(sys_user_storagestr_audit,','+String(arg_s_out_ll.storageid)+',') <= 0 Then
  601. rslt = 0
  602. arg_msg = '没有仓库: '+ls_storagename+' 的审核权限,不允许撤审该仓库的单据'
  603. Goto ext
  604. End If
  605. End If
  606. //
  607. If arg_s_out_ll.ctmint > 0 Then
  608. arg_msg = '单据已截数,不能操作'
  609. rslt = 0
  610. Goto ext
  611. End If
  612. If arg_s_out_ll.secflag = 1 Then
  613. rslt = 0
  614. arg_msg = '单据已财务审,不可以撤审'
  615. Goto ext
  616. End If
  617. If arg_s_out_ll.flag = 0 Then
  618. rslt = 0
  619. arg_msg = '单据未仓审,不可以撤审'
  620. Goto ext
  621. End If
  622. //更新审核标记
  623. Update u_outware_ll
  624. Set auditingrep = '',
  625. auditingdate = :null_dt,
  626. flag = 0
  627. Where outwareid = :arg_outwareid
  628. And flag = 1
  629. And secflag = 0;
  630. If sqlca.SQLCode <> 0 Then
  631. rslt = 0
  632. arg_msg = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText
  633. Goto ext
  634. ElseIf sqlca.SQLNRows = 0 Then
  635. rslt = 0
  636. arg_msg = "单据正在撤审,请稍后重试。"+"~n"+sqlca.SQLErrText
  637. Goto ext
  638. End If
  639. //更新订单完成数
  640. For i = 1 To UpperBound(arg_s_out_ll.arg_s_mx) - 1
  641. If arg_s_out_ll.arg_s_mx[i].relid = 0 Then Continue
  642. If uo_t_ll.addmxcmpl(arg_s_out_ll.arg_s_mx[i].relid,&
  643. arg_s_out_ll.arg_s_mx[i].relprintid,0 - arg_s_out_ll.arg_s_mx[i].uqty,arg_msg,False) = 0 Then
  644. rslt = 0
  645. Goto ext
  646. End If
  647. If uo_t_ll.trycmplsaletask(arg_s_out_ll.arg_s_mx[i].relid,arg_msg,False) = 0 Then
  648. rslt = 0
  649. Goto ext
  650. End If
  651. Next
  652. //撤审并删除出仓单
  653. If uo_out.getinfo(ll_scid_storage,arg_s_out_ll.relid,arg_msg) = 0 Then
  654. rslt = 0
  655. Goto ext
  656. End If
  657. If uo_out.c_auditing(False,arg_msg) = 0 Then
  658. rslt = 0
  659. Goto ext
  660. End If
  661. If uo_out.del(ll_scid_storage,arg_s_out_ll.relid,0,arg_msg,False) = 0 Then
  662. rslt = 0
  663. Goto ext
  664. End If
  665. //更新库存已开单数
  666. If uof_noauditingqty_add(arg_s_out_ll.arg_s_mx,arg_msg) = 0 Then
  667. rslt = 0
  668. Goto ext
  669. End If
  670. ext:
  671. If rslt = 0 Then
  672. Rollback;
  673. ElseIf rslt = 1 And arg_ifcommit Then
  674. Commit;
  675. End If
  676. Destroy uo_out
  677. Destroy uo_t_ll
  678. Return rslt
  679. end function
  680. public function integer caudit_2 (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  681. Long i
  682. s_outware_ll arg_s_out_ll
  683. uo_musttake uo_t
  684. uo_t = Create uo_musttake
  685. uo_cusprice uo_update_cusprice
  686. uo_update_cusprice = Create uo_cusprice
  687. DateTime null_dt
  688. SetNull(null_dt)
  689. If arg_outwareid <= 0 Then
  690. rslt = 0
  691. arg_msg = '错误单据唯一码'
  692. Goto ext
  693. End If
  694. If p_getinfo(arg_outwareid,arg_s_out_ll,arg_msg) = 0 Then
  695. rslt = 0
  696. Goto ext
  697. End If
  698. If arg_s_out_ll.ctmint > 0 Then
  699. arg_msg = '单据已截数,不能操作'
  700. rslt = 0
  701. Goto ext
  702. End If
  703. If arg_s_out_ll.secflag = 0 Then
  704. rslt = 0
  705. arg_msg = '单据不是在财审状态,不可以撤审'
  706. Goto ext
  707. End If
  708. //更新审核标记
  709. Update u_outware_ll
  710. Set secauditingrep = '',
  711. secauditingdate = :null_dt,
  712. secflag = 0
  713. Where outwareid = :arg_outwareid
  714. And secflag = 1;
  715. If sqlca.SQLCode <> 0 Then
  716. rslt = 0
  717. arg_msg = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText
  718. Goto ext
  719. ElseIf sqlca.SQLNRows = 0 Then
  720. rslt = 0
  721. arg_msg = "单据正在撤审,请稍后重试。"+"~n"+sqlca.SQLErrText
  722. Goto ext
  723. End If
  724. For i = 1 To UpperBound(arg_s_out_ll.arg_s_mx)
  725. If uo_update_cusprice.uof_del_cusprice_auto(arg_s_out_ll.cusid,arg_s_out_ll.outwareid,&
  726. arg_s_out_ll.arg_s_mx[i].printid,arg_s_out_ll.arg_s_mx[i].mtrlid,arg_s_out_ll.arg_s_mx[i].status,&
  727. arg_s_out_ll.arg_s_mx[i].woodcode,arg_s_out_ll.arg_s_mx[i].pcode,&
  728. 0,arg_s_out_ll.relint_2,0,0,False,arg_msg) = 0 Then
  729. rslt = 0
  730. Goto ext
  731. End If
  732. Next
  733. //删除应收帐
  734. If arg_s_out_ll.relint_3 > 0 Then
  735. If uo_t.del_takerec(arg_s_out_ll.scid,1,arg_s_out_ll.relint_3,arg_s_out_ll.cusid,arg_msg,False) = 0 Then
  736. rslt = 0
  737. Goto ext
  738. End If
  739. End If
  740. ext:
  741. If rslt = 0 Then
  742. Rollback;
  743. ElseIf rslt = 1 And arg_ifcommit Then
  744. Commit;
  745. End If
  746. Destroy uo_t
  747. Return rslt
  748. end function
  749. public function integer save (s_outware_ll arg_out_ll, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1
  750. Long cnt = 0
  751. DateTime server_dt
  752. Long ll_outwareid,it_mxbt,i,ls_i
  753. String ls_sccode,ls_outwarecode
  754. Int li_flag,li_priceflag
  755. If uo_option_mtrlware_limit = -1000 Then
  756. rslt = 0
  757. arg_msg = '选项:[037]客户库存选择限制,读取初始默认值失败,操作取消!'
  758. Goto ext
  759. End If
  760. If IsNull(arg_out_ll.scid) Then arg_out_ll.scid = 0
  761. If IsNull(arg_out_ll.outwareid) Then arg_out_ll.outwareid = 0
  762. If IsNull(arg_out_ll.outrep) Then arg_out_ll.outrep = ''
  763. If IsNull(arg_out_ll.part) Then arg_out_ll.part = ''
  764. If IsNull(arg_out_ll.dscrp) Then arg_out_ll.dscrp = ''
  765. If IsNull(arg_out_ll.relid) Then arg_out_ll.relid = 0
  766. If IsNull(arg_out_ll.relid) Then arg_out_ll.relid = 0
  767. If IsNull(arg_out_ll.storageid) Then arg_out_ll.storageid = 0
  768. If IsNull(arg_out_ll.cusid) Then arg_out_ll.cusid = 0
  769. If IsNull(arg_out_ll.otheramt) Then arg_out_ll.otheramt = 0
  770. If IsNull(arg_out_ll.relstr_1) Then arg_out_ll.relstr_1 = ''
  771. If IsNull(arg_out_ll.relstr_2) Then arg_out_ll.relstr_2 = ''
  772. If IsNull(arg_out_ll.relstr_3) Then arg_out_ll.relstr_3 = ''
  773. If IsNull(arg_out_ll.relint_1) Then arg_out_ll.relint_1 = 0
  774. If IsNull(arg_out_ll.relint_2) Then arg_out_ll.relint_2 = 0
  775. If IsNull(arg_out_ll.relint_3) Then arg_out_ll.relint_3 = 0
  776. If IsNull(arg_out_ll.rel_address) Then arg_out_ll.rel_address = ''
  777. If IsNull(arg_out_ll.rel_tele) Then arg_out_ll.rel_tele = ''
  778. If IsNull(arg_out_ll.rel_fax) Then arg_out_ll.rel_fax = ''
  779. If IsNull(arg_out_ll.rel_rep) Then arg_out_ll.rel_rep = ''
  780. If IsNull(arg_out_ll.mrate) Then arg_out_ll.mrate = 0
  781. If IsNull(arg_out_ll.damt) Then arg_out_ll.damt = 0
  782. If IsNull(arg_out_ll.upname) Then arg_out_ll.upname = ''
  783. If IsNull(arg_out_ll.thflag) Then arg_out_ll.thflag = 0
  784. it_mxbt = UpperBound(arg_out_ll.arg_s_mx)
  785. If it_mxbt <= 0 Then
  786. rslt = 0
  787. arg_msg = "没有正确明细内容"
  788. Goto ext
  789. End If
  790. String ls_storagename
  791. Long ll_scid_storage
  792. Int li_if_cus_mtrlware
  793. Int ls_noallocflag
  794. Select storagename,scid,balctype,noallocflag
  795. Into :ls_storagename,:ll_scid_storage,:li_if_cus_mtrlware,:ls_noallocflag
  796. From u_storage
  797. Where storageid = :arg_out_ll.storageid;
  798. If sqlca.SQLCode <> 0 Then
  799. rslt = 0
  800. arg_msg = "查询仓库资料失败"
  801. Goto ext
  802. End If
  803. //检查是否有该仓库的建立权限
  804. If sys_user_storagestr_new <> '0' Then
  805. If Pos(sys_user_storagestr_new,','+String(arg_out_ll.storageid)+',') <= 0 Then
  806. rslt = 0
  807. arg_msg = '没有仓库: '+ls_storagename+' 的建立权限,不允许建立该仓库的单据'
  808. Goto ext
  809. End If
  810. End If
  811. //
  812. If arg_out_ll.outwareid = 0 Then
  813. If f_check_inoutdate(arg_out_ll.storageid,arg_out_ll.outdate,True,arg_msg) = 0 Then
  814. rslt = 0
  815. Goto ext
  816. End If
  817. Else
  818. Select flag,priceflag Into :li_flag,:li_priceflag
  819. From u_outware_ll
  820. Where outwareid = :arg_out_ll.outwareid;
  821. If sqlca.SQLCode <> 0 Then
  822. arg_msg = '查询单据状态失败,'+sqlca.SQLErrText
  823. rslt = 0
  824. Goto ext
  825. End If
  826. If li_flag = 0 Then
  827. If f_check_inoutdate(arg_out_ll.storageid,arg_out_ll.outdate,True,arg_msg) = 0 Then
  828. rslt = 0
  829. Goto ext
  830. End If
  831. End If
  832. End If
  833. If arg_out_ll.cusid = 0 Then
  834. arg_msg = '请选择客户资料'
  835. rslt = 0
  836. Goto ext
  837. End If
  838. cnt = 0
  839. Select count(*) Into :cnt
  840. From u_cust
  841. Where cusid = :arg_out_ll.cusid;
  842. If sqlca.SQLCode <> 0 Then
  843. rslt = 0
  844. arg_msg = "查询操作失败,客户资料"
  845. Goto ext
  846. End If
  847. If arg_out_ll.relint_1 = 0 Then
  848. arg_msg = '请选择结算方式'
  849. rslt = 0
  850. Goto ext
  851. End If
  852. cnt = 0
  853. Select count(*) Into :cnt
  854. From cw_currency
  855. Where moneyid = :arg_out_ll.relint_2;
  856. If sqlca.SQLCode <> 0 Then
  857. arg_msg = '查询币种失败'
  858. rslt = 0
  859. Goto ext
  860. End If
  861. If cnt = 0 Then
  862. arg_msg = '币种资料不存在'
  863. rslt = 0
  864. Goto ext
  865. End If
  866. If arg_out_ll.mrate = 0 Then
  867. arg_msg = '币种汇率错误'
  868. rslt = 0
  869. Goto ext
  870. End If
  871. If arg_out_ll.outrep = '' Then
  872. arg_msg = '请输入业务员'
  873. rslt = 0
  874. Goto ext
  875. End If
  876. Select Top 1 getdate() Into :server_dt From u_user;
  877. If sqlca.SQLCode <> 0 Then
  878. rslt = 0
  879. arg_msg = "查询操作失败,日期 "
  880. Goto ext
  881. End If
  882. Decimal i_notauditqty,i_allouseqty
  883. Decimal ol_mtrl_qty,ld_mx_qty,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro
  884. Int li_ifpackpro
  885. String ls_msg,ls_unit
  886. String ls_relcode
  887. Decimal lde_noconqty,lde_mx_qty,lde_notauditqty
  888. For i = 1 To it_mxbt
  889. If arg_out_ll.arg_s_mx[i].ifrel = 1 And arg_out_ll.arg_s_mx[i].relid = 0 Then
  890. arg_msg = '行:'+String(arg_out_ll.arg_s_mx[i].printid)+',物料:'+arg_out_ll.arg_s_mx[i].mtrlcode+',没有选订单,请检查'
  891. rslt = 0
  892. Goto ext
  893. End If
  894. If arg_out_ll.arg_s_mx[i].rebate <= 0 Then
  895. arg_msg = '行:'+String(arg_out_ll.arg_s_mx[i].printid)+',物料:'+arg_out_ll.arg_s_mx[i].mtrlcode+',折扣错误,请检查'
  896. rslt = 0
  897. Goto ext
  898. End If
  899. If arg_out_ll.arg_s_mx[i].enprice * arg_out_ll.arg_s_mx[i].rebate < 0 Then //检查单价
  900. rslt = 0
  901. arg_msg = '行:'+String(arg_out_ll.arg_s_mx[i].printid)+',物料:'+arg_out_ll.arg_s_mx[i].mtrlcode+',单价错误,请检查'
  902. Goto ext
  903. End If
  904. arg_out_ll.arg_s_mx[i].mtrlwarescid = ll_scid_storage
  905. i_notauditqty = 0
  906. i_allouseqty = 0
  907. ol_mtrl_qty = 0
  908. ld_mx_qty = 0
  909. ld_ref_qty = 0
  910. //检查物料库存ID
  911. Select u_mtrlware.mtrlid,
  912. u_mtrlware.storageid,
  913. u_mtrlware.plancode,
  914. u_mtrlware.status,
  915. u_mtrlware.cost,
  916. u_mtrldef.mtrlcode,
  917. u_mtrlware.sptid,
  918. u_mtrlware.dxflag,
  919. u_mtrlware.woodcode,
  920. u_mtrlware.pcode,
  921. u_mtrlware.noauditingqty,
  922. u_mtrlware.noallocqty,
  923. u_mtrlware.mtrlcuscode,
  924. u_mtrlware.location
  925. Into :arg_out_ll.arg_s_mx[i].mtrlid,
  926. :arg_out_ll.arg_s_mx[i].storageid,
  927. :arg_out_ll.arg_s_mx[i].plancode,
  928. :arg_out_ll.arg_s_mx[i].status,
  929. :arg_out_ll.arg_s_mx[i].cost,
  930. :arg_out_ll.arg_s_mx[i].mtrlcode,
  931. :arg_out_ll.arg_s_mx[i].sptid,
  932. :arg_out_ll.arg_s_mx[i].dxflag,
  933. :arg_out_ll.arg_s_mx[i].woodcode,
  934. :arg_out_ll.arg_s_mx[i].pcode,
  935. :i_notauditqty,
  936. :i_allouseqty,
  937. :arg_out_ll.arg_s_mx[i].mtrlcuscode,
  938. :arg_out_ll.arg_s_mx[i].location
  939. From u_mtrlware,u_mtrldef
  940. Where ( u_mtrlware.mtrlwareid = :arg_out_ll.arg_s_mx[i].mtrlwareid )
  941. And ( u_mtrlware.mtrlid = u_mtrldef.mtrlid )
  942. And ( u_mtrlware.scid = :arg_out_ll.arg_s_mx[i].mtrlwarescid );
  943. If sqlca.SQLCode <> 0 Then
  944. rslt = 0
  945. arg_msg = "行"+String(arg_out_ll.arg_s_mx[i].printid)+"物料,查询操作失败,库存编号(出仓单)错误,分部:"+String(arg_out_ll.arg_s_mx[i].mtrlwarescid)+'库存:'+String(arg_out_ll.arg_s_mx[i].mtrlwareid)+',~n'+sqlca.SQLErrText
  946. Goto ext
  947. End If
  948. If IsNull(i_allouseqty) Then i_allouseqty = 0
  949. If IsNull(i_notauditqty) Then i_notauditqty = 0
  950. If li_if_cus_mtrlware = 1 And uo_option_mtrlware_limit = 0 Then
  951. If arg_out_ll.cusid <> arg_out_ll.arg_s_mx[i].sptid Then
  952. rslt = 0
  953. arg_msg = "行"+String(arg_out_ll.arg_s_mx[i].printid)+"物料,查询操作失败,明细纪录对应的库存不是该客户的库存!"
  954. Goto ext
  955. End If
  956. End If
  957. //*****检查大于未开数不可以开单
  958. If li_flag = 0 Then
  959. If ls_noallocflag = 1 Then
  960. If arg_out_ll.outwareid > 0 Then
  961. Select sum(u_outwaremx.qty)
  962. Into :ol_mtrl_qty
  963. From u_outwaremx
  964. Where u_outwaremx.outwareid = :arg_out_ll.outwareid
  965. And u_outwaremx.mtrlwareid = :arg_out_ll.arg_s_mx[i].mtrlwareid;
  966. If sqlca.SQLCode = -1 Then
  967. rslt = 0
  968. arg_msg = "行"+String(arg_out_ll.arg_s_mx[i].printid)+"物料,查询原开单数量失败"
  969. Goto ext
  970. End If
  971. End If
  972. For ls_i = 1 To it_mxbt
  973. If arg_out_ll.arg_s_mx[i].mtrlwareid = arg_out_ll.arg_s_mx[ls_i].mtrlwareid Then
  974. ld_mx_qty = ld_mx_qty + arg_out_ll.arg_s_mx[ls_i].qty
  975. End If
  976. Next
  977. ld_mx_qty = ld_mx_qty + arg_out_ll.arg_s_mx[i].qty
  978. If IsNull(ol_mtrl_qty) Then ol_mtrl_qty = 0
  979. If IsNull(ld_mx_qty) Then ld_mx_qty = 0
  980. Select ifpackpro
  981. Into :li_ifpackpro
  982. From u_mtrldef
  983. Where mtrlid = :arg_out_ll.arg_s_mx[i].mtrlid ;
  984. If sqlca.SQLCode <> 0 Then
  985. arg_msg = "行"+String(arg_out_ll.arg_s_mx[i].printid)+"物料,查询物料是否包件产品失败,"+sqlca.SQLErrText
  986. rslt = 0
  987. Goto ext
  988. End If
  989. //查询可装数
  990. ld_ref_qty = 0
  991. If li_ifpackpro = 1 Then
  992. If f_cmp_di_qty(arg_out_ll.arg_s_mx[i].mtrlid,arg_out_ll.storageid,&
  993. arg_out_ll.arg_s_mx[i].status,arg_out_ll.arg_s_mx[i].woodcode,&
  994. arg_out_ll.arg_s_mx[i].pcode,arg_out_ll.arg_s_mx[i].plancode,&
  995. arg_out_ll.arg_s_mx[i].mtrlcuscode,ld_ref_qty,ld_ref_pack_min_nofpqty,ld_ref_noauditingqty_ifpackpro,ls_msg,arg_msg) = 0 Then
  996. ld_ref_qty = 0
  997. End If
  998. End If
  999. If ld_mx_qty > ( i_allouseqty - i_notauditqty + ol_mtrl_qty + ld_ref_qty ) Then
  1000. rslt = 0
  1001. arg_msg = "行"+String(arg_out_ll.arg_s_mx[i].printid)+"物料,库存未开单数不够,不能开单.未开单数{"+String(i_allouseqty - i_notauditqty + ol_mtrl_qty,'#####,0.00#######')+"}" + "可组装数{"+String(ld_ref_qty,'#####,0.00#######')+"}"
  1002. Goto ext
  1003. End If
  1004. End If
  1005. End If
  1006. //检查订单数
  1007. If arg_out_ll.arg_s_mx[i].relid > 0 And li_flag = 0 Then
  1008. Select u_saletask_ll.taskcode,
  1009. u_saletaskmx_ll.usaleqty - u_saletaskmx_ll.consignedqty
  1010. Into :ls_relcode,:lde_noconqty
  1011. From u_saletaskmx_ll,u_saletask_ll
  1012. Where u_saletaskmx_ll.taskid = :arg_out_ll.arg_s_mx[i].relid
  1013. And u_saletaskmx_ll.printid = :arg_out_ll.arg_s_mx[i].relprintid
  1014. And u_saletaskmx_ll.taskid = u_saletask_ll.taskid;
  1015. If sqlca.SQLCode <> 0 Then
  1016. arg_msg = "行"+String(arg_out_ll.arg_s_mx[i].printid)+'物料,查询销售订单是否有订购产品失败'
  1017. rslt = 0
  1018. Goto ext
  1019. End If
  1020. lde_mx_qty = 0
  1021. For ls_i = 1 To UpperBound(arg_out_ll.arg_s_mx) - 1
  1022. If arg_out_ll.arg_s_mx[i].relid = arg_out_ll.arg_s_mx[ls_i].relid And &
  1023. arg_out_ll.arg_s_mx[i].relprintid = arg_out_ll.arg_s_mx[ls_i].relprintid Then
  1024. lde_mx_qty = lde_mx_qty + arg_out_ll.arg_s_mx[ls_i].uqty
  1025. End If
  1026. Next
  1027. //查询相关订单已开发货单未审核数量
  1028. Select isnull(sum(u_outwaremx_ll.uqty),0) Into :lde_notauditqty
  1029. From u_outwaremx_ll,u_outware_ll
  1030. Where u_outwaremx_ll.relid = :arg_out_ll.arg_s_mx[i].relid
  1031. And u_outwaremx_ll.relprintid = :arg_out_ll.arg_s_mx[i].relprintid
  1032. And u_outware_ll.flag = 0
  1033. And u_outwaremx_ll.outwareid = u_outware_ll.outwareid
  1034. And u_outware_ll.outwareid <> :arg_out_ll.outwareid;
  1035. If sqlca.SQLCode <> 0 Then
  1036. arg_msg = "行"+String(arg_out_ll.arg_s_mx[i].printid)+'物料,查询销售订单:'+ls_relcode+',已开发货单未审核数量失败'
  1037. rslt = 0
  1038. Goto ext
  1039. End If
  1040. If lde_notauditqty + lde_mx_qty > lde_noconqty Then
  1041. arg_msg = "行"+String(arg_out_ll.arg_s_mx[i].printid)+'物料所属订单:'+ls_relcode+' 未发货数:'+String(lde_noconqty,'#,##0.##########')+',已开单未审核数:'+String(lde_notauditqty,'#,##0.##########')+'不能再开单:'+String(lde_mx_qty,'#,##0.##########')
  1042. rslt = 0
  1043. Goto ext
  1044. End If
  1045. arg_out_ll.arg_s_mx[i].relcode = ls_relcode
  1046. End If
  1047. If arg_out_ll.arg_s_mx[i].rate = 0 Then arg_out_ll.arg_s_mx[i].rate = 1
  1048. arg_out_ll.arg_s_mx[i].rate = arg_out_ll.arg_s_mx[i].qty / arg_out_ll.arg_s_mx[i].uqty
  1049. Select unit
  1050. Into :ls_unit
  1051. From u_mtrldef
  1052. Where mtrlid = :arg_out_ll.arg_s_mx[i].mtrlid ;
  1053. If sqlca.SQLCode <> 0 Then
  1054. arg_msg = "行"+String(arg_out_ll.arg_s_mx[i].printid)+"物料,查询物料库存单位失败,"+sqlca.SQLErrText
  1055. rslt = 0
  1056. Goto ext
  1057. End If
  1058. If Trim(ls_unit) <> Trim(arg_out_ll.arg_s_mx[i].unit) And arg_out_ll.arg_s_mx[i].rate = 1 Then
  1059. arg_msg = '单据,行:'+String(arg_out_ll.arg_s_mx[i].printid)+',物料库存单位:'+Trim(ls_unit)+'与计价单位:'+Trim(arg_out_ll.arg_s_mx[i].unit)+'不同,但转换率为1,请检查'
  1060. rslt = 0
  1061. Goto ext
  1062. End If
  1063. If Trim(ls_unit) = Trim(arg_out_ll.arg_s_mx[i].unit) And arg_out_ll.arg_s_mx[i].rate <> 1 Then
  1064. arg_msg = '进仓单,行:'+String(arg_out_ll.arg_s_mx[i].printid)+',物料库存单位:'+Trim(ls_unit)+'与采购单位:'+Trim(arg_out_ll.arg_s_mx[i].unit)+'相同,但转换率不为1,请检查'
  1065. rslt = 0
  1066. Goto ext
  1067. End If
  1068. arg_out_ll.arg_s_mx[i].price = arg_out_ll.arg_s_mx[i].enprice * arg_out_ll.mrate
  1069. arg_out_ll.arg_s_mx[i].fprice = arg_out_ll.arg_s_mx[i].price / arg_out_ll.arg_s_mx[i].rate
  1070. //取定价
  1071. f_get_defsaleprice(arg_out_ll.cusid,arg_out_ll.arg_s_mx[i].mtrlid,&
  1072. arg_out_ll.arg_s_mx[i].status,arg_out_ll.arg_s_mx[i].pcode,&
  1073. arg_out_ll.arg_s_mx[i].woodcode,arg_out_ll.relint_2,arg_out_ll.arg_s_mx[i].dftsaleprice)
  1074. Next
  1075. If arg_out_ll.outwareid = 0 Then
  1076. ll_outwareid = f_sys_scidentity(0,"u_outware_ll","outwareid",arg_msg,True,id_sqlca)
  1077. If ll_outwareid <= 0 Then
  1078. rslt = 0
  1079. Goto ext
  1080. End If
  1081. If f_get_sccode(arg_out_ll.scid,sqlca,ls_sccode,arg_msg) = 0 Then
  1082. rslt = 0
  1083. Goto ext
  1084. End If
  1085. If arg_out_ll.thflag = 0 Then
  1086. ls_outwarecode = getid(arg_out_ll.scid,ls_sccode + 'LX',Date(server_dt),False,sqlca)
  1087. Else
  1088. ls_outwarecode = getid(arg_out_ll.scid,ls_sccode + 'LH',Date(server_dt),False,sqlca)
  1089. End If
  1090. If ls_outwarecode = "err" Or ls_outwarecode = '' Then
  1091. rslt = 0
  1092. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  1093. Goto ext
  1094. End If
  1095. Insert Into u_outware_ll (
  1096. scid,
  1097. outwareid,
  1098. outwarecode,
  1099. relid,
  1100. storageid,
  1101. outdate,
  1102. outrep,
  1103. part,
  1104. dscrp,
  1105. cusid,
  1106. thflag,
  1107. opdate,
  1108. opemp,
  1109. relstr_1,
  1110. relstr_2,
  1111. relstr_3,
  1112. relint_1,
  1113. relint_2,
  1114. relint_3,
  1115. otheramt,
  1116. damt,
  1117. rel_address,
  1118. rel_tele,
  1119. rel_fax,
  1120. rel_rep,
  1121. mrate,
  1122. upname,
  1123. viewdate)
  1124. Values (
  1125. :arg_out_ll.scid,
  1126. :ll_outwareid,
  1127. :ls_outwarecode,
  1128. :arg_out_ll.relid,
  1129. :arg_out_ll.storageid,
  1130. :arg_out_ll.outdate,
  1131. :arg_out_ll.outrep,
  1132. :arg_out_ll.part,
  1133. :arg_out_ll.dscrp,
  1134. :arg_out_ll.cusid,
  1135. :arg_out_ll.thflag,
  1136. :server_dt,
  1137. :arg_opemp,
  1138. :arg_out_ll.relstr_1,
  1139. :arg_out_ll.relstr_2,
  1140. :arg_out_ll.relstr_3,
  1141. :arg_out_ll.relint_1,
  1142. :arg_out_ll.relint_2,
  1143. :arg_out_ll.relint_3,
  1144. :arg_out_ll.otheramt,
  1145. :arg_out_ll.damt,
  1146. :arg_out_ll.rel_address,
  1147. :arg_out_ll.rel_tele,
  1148. :arg_out_ll.rel_fax,
  1149. :arg_out_ll.rel_rep,
  1150. :arg_out_ll.mrate,
  1151. :arg_out_ll.upname,
  1152. :arg_out_ll.viewdate);
  1153. If sqlca.SQLCode <> 0 Then
  1154. rslt = 0
  1155. arg_msg = "因网络或其它原因导致新增单据操作失败"+"~n"+sqlca.SQLErrText
  1156. Goto ext
  1157. End If
  1158. For i = 1 To it_mxbt
  1159. Insert Into u_outwaremx_ll
  1160. (outwareid,
  1161. mtrlwarescid,
  1162. mtrlwareid,
  1163. printid,
  1164. mtrlid,
  1165. plancode,
  1166. status,
  1167. qty,
  1168. fprice,
  1169. rebate,
  1170. mxdscrp,
  1171. sptid,
  1172. dxflag,
  1173. costamt,
  1174. ifrel,
  1175. relid,
  1176. packqty,
  1177. woodcode,
  1178. relcode,
  1179. pcode,
  1180. enprice,
  1181. outtypestr,
  1182. dftsaleprice,
  1183. cost,
  1184. planqty,
  1185. relprintid,
  1186. unit,
  1187. rate,
  1188. uqty,
  1189. storageid,
  1190. scidprice,
  1191. price,
  1192. mtrlcuscode,
  1193. location)
  1194. Values (
  1195. :ll_outwareid,
  1196. :arg_out_ll.arg_s_mx[i].mtrlwarescid,
  1197. :arg_out_ll.arg_s_mx[i].mtrlwareid,
  1198. :arg_out_ll.arg_s_mx[i].printid,
  1199. :arg_out_ll.arg_s_mx[i].mtrlid,
  1200. :arg_out_ll.arg_s_mx[i].plancode,
  1201. :arg_out_ll.arg_s_mx[i].status,
  1202. :arg_out_ll.arg_s_mx[i].qty,
  1203. :arg_out_ll.arg_s_mx[i].fprice,
  1204. :arg_out_ll.arg_s_mx[i].rebate,
  1205. :arg_out_ll.arg_s_mx[i].mxdscrp,
  1206. :arg_out_ll.arg_s_mx[i].sptid,
  1207. :arg_out_ll.arg_s_mx[i].dxflag,
  1208. :arg_out_ll.arg_s_mx[i].costamt,
  1209. :arg_out_ll.arg_s_mx[i].ifrel,
  1210. :arg_out_ll.arg_s_mx[i].relid,
  1211. :arg_out_ll.arg_s_mx[i].packqty,
  1212. :arg_out_ll.arg_s_mx[i].woodcode,
  1213. :arg_out_ll.arg_s_mx[i].relcode,
  1214. :arg_out_ll.arg_s_mx[i].pcode,
  1215. :arg_out_ll.arg_s_mx[i].enprice,
  1216. :arg_out_ll.arg_s_mx[i].outtypestr,
  1217. :arg_out_ll.arg_s_mx[i].dftsaleprice,
  1218. :arg_out_ll.arg_s_mx[i].cost,
  1219. :arg_out_ll.arg_s_mx[i].planqty,
  1220. :arg_out_ll.arg_s_mx[i].relprintid,
  1221. :arg_out_ll.arg_s_mx[i].unit,
  1222. :arg_out_ll.arg_s_mx[i].rate,
  1223. :arg_out_ll.arg_s_mx[i].uqty,
  1224. :arg_out_ll.arg_s_mx[i].storageid,
  1225. :arg_out_ll.arg_s_mx[i].scidprice,
  1226. :arg_out_ll.arg_s_mx[i].price,
  1227. :arg_out_ll.arg_s_mx[i].mtrlcuscode,
  1228. :arg_out_ll.arg_s_mx[i].Location);
  1229. If sqlca.SQLCode <> 0 Then
  1230. rslt = 0
  1231. arg_msg = "因网络或其它原因导致新增单据明细操作失败"+"~n"+sqlca.SQLErrText
  1232. Goto ext
  1233. End If
  1234. Next
  1235. //更新库存已开单数
  1236. If uof_noauditingqty_add(arg_out_ll.arg_s_mx,arg_msg) = 0 Then
  1237. rslt = 0
  1238. Goto ext
  1239. End If
  1240. uo_outwareid = ll_outwareid
  1241. uo_outwarecode = ls_outwarecode
  1242. Else
  1243. If li_flag = 0 And li_priceflag = 0 Then
  1244. Update u_outware_ll
  1245. Set storageid = :arg_out_ll.storageid,
  1246. outdate = :arg_out_ll.outdate,
  1247. outrep = :arg_out_ll.outrep,
  1248. part = :arg_out_ll.part,
  1249. dscrp = :arg_out_ll.dscrp,
  1250. cusid = :arg_out_ll.cusid,
  1251. moddate = :server_dt,
  1252. modemp = :arg_opemp,
  1253. relstr_1 = :arg_out_ll.relstr_1,
  1254. relstr_2 = :arg_out_ll.relstr_2,
  1255. relstr_3 = :arg_out_ll.relstr_3,
  1256. relint_1 = :arg_out_ll.relint_1,
  1257. relint_2 = :arg_out_ll.relint_2,
  1258. otheramt = :arg_out_ll.otheramt,
  1259. damt = :arg_out_ll.damt,
  1260. rel_address = :arg_out_ll.rel_address,
  1261. rel_tele = :arg_out_ll.rel_tele,
  1262. rel_fax = :arg_out_ll.rel_fax,
  1263. rel_rep = :arg_out_ll.rel_rep,
  1264. mrate = :arg_out_ll.mrate,
  1265. upname = :arg_out_ll.upname,
  1266. viewdate = :arg_out_ll.viewdate
  1267. Where outwareid = :arg_out_ll.outwareid
  1268. And flag = 0;
  1269. If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then
  1270. rslt = 0
  1271. arg_msg = "因网络或其它原因导致更新单据操作失败(1)"+"~n"+sqlca.SQLErrText
  1272. Goto ext
  1273. End If
  1274. //更新库存已开单数(减)
  1275. If uof_noauditingqty_del(arg_out_ll.outwareid,arg_msg) = 0 Then
  1276. rslt = 0
  1277. Goto ext
  1278. End If
  1279. //删除原有明细
  1280. Delete From u_outwaremx_ll
  1281. Where outwareid = :arg_out_ll.outwareid;
  1282. If sqlca.SQLCode <> 0 Then
  1283. rslt = 0
  1284. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  1285. Goto ext
  1286. End If
  1287. For i = 1 To it_mxbt
  1288. Insert Into u_outwaremx_ll
  1289. (outwareid,
  1290. mtrlwarescid,
  1291. mtrlwareid,
  1292. printid,
  1293. mtrlid,
  1294. plancode,
  1295. status,
  1296. qty,
  1297. fprice,
  1298. rebate,
  1299. mxdscrp,
  1300. sptid,
  1301. dxflag,
  1302. costamt,
  1303. ifrel,
  1304. relid,
  1305. packqty,
  1306. woodcode,
  1307. relcode,
  1308. pcode,
  1309. enprice,
  1310. outtypestr,
  1311. dftsaleprice,
  1312. cost,
  1313. planqty,
  1314. relprintid,
  1315. unit,
  1316. rate,
  1317. uqty,
  1318. storageid,
  1319. scidprice,
  1320. price,
  1321. mtrlcuscode,
  1322. location)
  1323. Values (
  1324. :arg_out_ll.outwareid,
  1325. :arg_out_ll.arg_s_mx[i].mtrlwarescid,
  1326. :arg_out_ll.arg_s_mx[i].mtrlwareid,
  1327. :arg_out_ll.arg_s_mx[i].printid,
  1328. :arg_out_ll.arg_s_mx[i].mtrlid,
  1329. :arg_out_ll.arg_s_mx[i].plancode,
  1330. :arg_out_ll.arg_s_mx[i].status,
  1331. :arg_out_ll.arg_s_mx[i].qty,
  1332. :arg_out_ll.arg_s_mx[i].fprice,
  1333. :arg_out_ll.arg_s_mx[i].rebate,
  1334. :arg_out_ll.arg_s_mx[i].mxdscrp,
  1335. :arg_out_ll.arg_s_mx[i].sptid,
  1336. :arg_out_ll.arg_s_mx[i].dxflag,
  1337. :arg_out_ll.arg_s_mx[i].costamt,
  1338. :arg_out_ll.arg_s_mx[i].ifrel,
  1339. :arg_out_ll.arg_s_mx[i].relid,
  1340. :arg_out_ll.arg_s_mx[i].packqty,
  1341. :arg_out_ll.arg_s_mx[i].woodcode,
  1342. :arg_out_ll.arg_s_mx[i].relcode,
  1343. :arg_out_ll.arg_s_mx[i].pcode,
  1344. :arg_out_ll.arg_s_mx[i].enprice,
  1345. :arg_out_ll.arg_s_mx[i].outtypestr,
  1346. :arg_out_ll.arg_s_mx[i].dftsaleprice,
  1347. :arg_out_ll.arg_s_mx[i].cost,
  1348. :arg_out_ll.arg_s_mx[i].planqty,
  1349. :arg_out_ll.arg_s_mx[i].relprintid,
  1350. :arg_out_ll.arg_s_mx[i].unit,
  1351. :arg_out_ll.arg_s_mx[i].rate,
  1352. :arg_out_ll.arg_s_mx[i].uqty,
  1353. :arg_out_ll.arg_s_mx[i].storageid,
  1354. :arg_out_ll.arg_s_mx[i].scidprice,
  1355. :arg_out_ll.arg_s_mx[i].price,
  1356. :arg_out_ll.arg_s_mx[i].mtrlcuscode,
  1357. :arg_out_ll.arg_s_mx[i].Location);
  1358. If sqlca.SQLCode <> 0 Then
  1359. rslt = 0
  1360. arg_msg = "因网络或其它原因导致新增单据明细操作失败"+"~n"+sqlca.SQLErrText
  1361. Goto ext
  1362. End If
  1363. Next
  1364. //更新库存已开单数
  1365. If uof_noauditingqty_add(arg_out_ll.arg_s_mx,arg_msg) = 0 Then
  1366. rslt = 0
  1367. Goto ext
  1368. End If
  1369. ElseIf li_flag = 0 And li_priceflag = 1 Then
  1370. Update u_outware_ll
  1371. Set storageid = :arg_out_ll.storageid,
  1372. outdate = :arg_out_ll.outdate,
  1373. outrep = :arg_out_ll.outrep,
  1374. part = :arg_out_ll.part,
  1375. dscrp = :arg_out_ll.dscrp,
  1376. cusid = :arg_out_ll.cusid,
  1377. moddate = :server_dt,
  1378. modemp = :arg_opemp,
  1379. relstr_1 = :arg_out_ll.relstr_1,
  1380. relstr_2 = :arg_out_ll.relstr_2,
  1381. relstr_3 = :arg_out_ll.relstr_3,
  1382. relint_1 = :arg_out_ll.relint_1,
  1383. relint_2 = :arg_out_ll.relint_2,
  1384. otheramt = :arg_out_ll.otheramt,
  1385. damt = :arg_out_ll.damt,
  1386. rel_address = :arg_out_ll.rel_address,
  1387. rel_tele = :arg_out_ll.rel_tele,
  1388. rel_fax = :arg_out_ll.rel_fax,
  1389. rel_rep = :arg_out_ll.rel_rep,
  1390. mrate = :arg_out_ll.mrate,
  1391. upname = :arg_out_ll.upname,
  1392. viewdate = :arg_out_ll.viewdate
  1393. Where outwareid = :arg_out_ll.outwareid
  1394. And flag = 0
  1395. And secflag = 0
  1396. And priceflag = 1;
  1397. If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then
  1398. rslt = 0
  1399. arg_msg = "因网络或其它原因导致更新单据操作失败(2)"+"~n"+sqlca.SQLErrText
  1400. Goto ext
  1401. End If
  1402. //更新库存已开单数(减)
  1403. If uof_noauditingqty_del(arg_out_ll.outwareid,arg_msg) = 0 Then
  1404. rslt = 0
  1405. Goto ext
  1406. End If
  1407. For i = 1 To it_mxbt
  1408. Update u_outWAREmx_ll
  1409. Set qty = :arg_out_ll.arg_s_mx[i].qty,
  1410. mxdscrp = :arg_out_ll.arg_s_mx[i].mxdscrp,
  1411. price = :arg_out_ll.arg_s_mx[i].price,
  1412. fprice = :arg_out_ll.arg_s_mx[i].fprice,
  1413. rebate = :arg_out_ll.arg_s_mx[i].rebate,
  1414. enprice = :arg_out_ll.arg_s_mx[i].enprice,
  1415. packqty = :arg_out_ll.arg_s_mx[i].packqty,
  1416. outtypestr = :arg_out_ll.arg_s_mx[i].outtypestr
  1417. Where (outWAREid = :arg_out_ll.outwareid And
  1418. printid = :arg_out_ll.arg_s_mx[i].printid);
  1419. If sqlca.SQLCode <> 0 Then
  1420. rslt = 0
  1421. arg_msg = "因网络或其它原因导致更新明细实发数操作失败"+"~n"+sqlca.SQLErrText
  1422. Goto ext
  1423. End If
  1424. Next
  1425. //更新库存已开单数
  1426. If uof_noauditingqty_add(arg_out_ll.arg_s_mx,arg_msg) = 0 Then
  1427. rslt = 0
  1428. Goto ext
  1429. End If
  1430. Else
  1431. Update u_outware_ll
  1432. Set storageid = :arg_out_ll.storageid,
  1433. outdate = :arg_out_ll.outdate,
  1434. outrep = :arg_out_ll.outrep,
  1435. part = :arg_out_ll.part,
  1436. dscrp = :arg_out_ll.dscrp,
  1437. cusid = :arg_out_ll.cusid,
  1438. moddate = :server_dt,
  1439. modemp = :arg_opemp,
  1440. relstr_1 = :arg_out_ll.relstr_1,
  1441. relstr_2 = :arg_out_ll.relstr_2,
  1442. relstr_3 = :arg_out_ll.relstr_3,
  1443. relint_1 = :arg_out_ll.relint_1,
  1444. relint_2 = :arg_out_ll.relint_2,
  1445. otheramt = :arg_out_ll.otheramt,
  1446. damt = :arg_out_ll.damt,
  1447. rel_address = :arg_out_ll.rel_address,
  1448. rel_tele = :arg_out_ll.rel_tele,
  1449. rel_fax = :arg_out_ll.rel_fax,
  1450. rel_rep = :arg_out_ll.rel_rep,
  1451. mrate = :arg_out_ll.mrate,
  1452. upname = :arg_out_ll.upname,
  1453. viewdate = :arg_out_ll.viewdate
  1454. Where outwareid = :arg_out_ll.outwareid
  1455. And flag = 1
  1456. And secflag = 0;
  1457. If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then
  1458. rslt = 0
  1459. arg_msg = "因网络或其它原因导致更新单据操作失败(3)"+"~n"+sqlca.SQLErrText
  1460. Goto ext
  1461. End If
  1462. For i = 1 To it_mxbt
  1463. Update u_outWAREmx_ll
  1464. Set mxdscrp = :arg_out_ll.arg_s_mx[i].mxdscrp,
  1465. fprice = :arg_out_ll.arg_s_mx[i].fprice,
  1466. rebate = :arg_out_ll.arg_s_mx[i].rebate,
  1467. enprice = :arg_out_ll.arg_s_mx[i].enprice,
  1468. price = :arg_out_ll.arg_s_mx[i].price
  1469. Where (outWAREid = :arg_out_ll.outwareid And
  1470. printid = :arg_out_ll.arg_s_mx[i].printid);
  1471. If sqlca.SQLCode <> 0 Then
  1472. rslt = 0
  1473. arg_msg = "因网络或其它原因导致更新明细价格操作失败"+"~n"+sqlca.SQLErrText
  1474. Goto ext
  1475. End If
  1476. Next
  1477. End If
  1478. uo_outwareid = arg_out_ll.outwareid
  1479. End If
  1480. ext:
  1481. If rslt = 0 Then
  1482. Rollback;
  1483. ElseIf arg_ifcommit And rslt = 1 Then
  1484. Commit;
  1485. End If
  1486. Return rslt
  1487. end function
  1488. public function integer audit_p (long arg_outwareid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1489. s_outware_ll arg_s_out_ll
  1490. uo_cusprice uo_p
  1491. uo_p = create uo_cusprice
  1492. IF arg_outwareid <= 0 THEN
  1493. rslt = 0
  1494. arg_msg = '错误单据唯一码'
  1495. GOTO ext
  1496. END IF
  1497. IF getinfo(arg_outwareid,arg_s_out_ll,arg_msg) = 0 THEN
  1498. rslt = 0
  1499. GOTO ext
  1500. END IF
  1501. IF arg_s_out_ll.priceflag <> 0 THEN
  1502. rslt = 0
  1503. arg_msg = '单据单据已经确认,不可以再确认'
  1504. GOTO ext
  1505. END IF
  1506. //FOR i = 1 TO it_mxbt
  1507. // IF arg_s_out_ll.arg_s_mx[i].outtypestr <> '' THEN CONTINUE
  1508. //
  1509. // IF sys_option_checkprice_native = 1 THEN
  1510. // IF uo_p.uof_check_price (cusid,arg_s_out_ll.arg_s_mx[i].mtrlid,&
  1511. // arg_s_out_ll.arg_s_mx[i].mtrlcode,arg_s_out_ll.arg_s_mx[i].status,&
  1512. // arg_s_out_ll.arg_s_mx[i].pcode,arg_s_out_ll.arg_s_mx[i].woodcode,&
  1513. // arg_s_out_ll.relint_2,arg_s_out_ll.arg_s_mx[i].price,arg_msg) = 0 THEN
  1514. // rslt = 0
  1515. // GOTO ext
  1516. // END IF
  1517. // ELSE
  1518. // IF uo_price.uof_check_price (cusid,outwaremx[i].mtrlid,&
  1519. // outwaremx[i].mtrlcode,outwaremx[i].status,outwaremx[i].pcode,&
  1520. // outwaremx[i].woodcode,relint_2,outwaremx[i].enprice * outwaremx[i].enprice,arg_msg) = 0 THEN
  1521. // rslt = 0
  1522. // GOTO ext
  1523. // END IF
  1524. // END IF
  1525. //NEXT
  1526. //更新审核标记
  1527. UPDATE u_outware_ll
  1528. SET priceemp = :arg_opemp,
  1529. pricedate = getdate(),
  1530. priceflag = 1
  1531. WHERE outwareid = :arg_outwareid
  1532. AND priceflag = 0;
  1533. IF sqlca.SQLCode <> 0 THEN
  1534. rslt = 0
  1535. arg_msg = "因网络或其它原因导致单据确认操作失败"+"~n"+sqlca.SQLErrText
  1536. GOTO ext
  1537. ELSEIF sqlca.SQLNRows = 0 THEN
  1538. rslt = 0
  1539. arg_msg = "单据正在确认,请稍后重试。"+"~n"+sqlca.SQLErrText
  1540. GOTO ext
  1541. END IF
  1542. ext:
  1543. IF rslt = 0 THEN
  1544. ROLLBACK;
  1545. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1546. COMMIT;
  1547. END IF
  1548. RETURN rslt
  1549. end function
  1550. public function integer caudit_p (long arg_outwareid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1551. s_outware_ll arg_s_out_ll
  1552. IF uo_option_confirmaudit_sale_ll = -1000 THEN
  1553. rslt = 0
  1554. arg_msg = '选项:[134]来料加工发货单先确认后审核,读取初始默认值失败,操作取消!'
  1555. GOTO ext
  1556. END IF
  1557. DateTime null_dt
  1558. SetNull(null_dt)
  1559. IF arg_outwareid <= 0 THEN
  1560. rslt = 0
  1561. arg_msg = '错误单据唯一码'
  1562. GOTO ext
  1563. END IF
  1564. IF p_getinfo(arg_outwareid,arg_s_out_ll,arg_msg) = 0 THEN
  1565. rslt = 0
  1566. GOTO ext
  1567. END IF
  1568. IF arg_s_out_ll.priceflag = 0 THEN
  1569. rslt = 0
  1570. arg_msg = '单据还未确认,不能反确认'
  1571. GOTO ext
  1572. END IF
  1573. IF uo_option_confirmaudit_sale_ll = 1 THEN
  1574. IF arg_s_out_ll.flag = 1 THEN
  1575. rslt = 0
  1576. arg_msg = "销售单已仓审,不能反确认"
  1577. GOTO ext
  1578. END IF
  1579. END IF
  1580. //更新审核标记
  1581. UPDATE u_outware_ll
  1582. SET priceemp = '',
  1583. pricedate = :null_dt,
  1584. priceflag = 0
  1585. WHERE outwareid = :arg_outwareid
  1586. AND priceflag = 1;
  1587. IF sqlca.SQLCode <> 0 THEN
  1588. rslt = 0
  1589. arg_msg = "因网络或其它原因导致单据撤审操作失败"+"~n"+sqlca.SQLErrText
  1590. GOTO ext
  1591. ELSEIF sqlca.SQLNRows = 0 THEN
  1592. rslt = 0
  1593. arg_msg = "单据正在撤审,请稍后重试。"+"~n"+sqlca.SQLErrText
  1594. GOTO ext
  1595. END IF
  1596. ext:
  1597. IF rslt = 0 THEN
  1598. ROLLBACK;
  1599. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1600. COMMIT;
  1601. END IF
  1602. RETURN rslt
  1603. end function
  1604. private function integer p_getinfo (long arg_outwareid, ref s_outware_ll arg_ref_s_outware, ref string arg_msg);Int rslt = 1
  1605. SELECT relid,
  1606. flag,
  1607. priceflag,
  1608. secflag,
  1609. cusid,
  1610. scid,
  1611. relint_1,
  1612. relint_2,
  1613. relint_3,
  1614. ctmint,
  1615. outwarecode,
  1616. outdate,
  1617. part,
  1618. dscrp,
  1619. outrep,
  1620. storageid,
  1621. outwareid,
  1622. thflag,
  1623. otheramt,
  1624. viewdate,
  1625. mrate
  1626. INTO :arg_ref_s_outware.relid,
  1627. :arg_ref_s_outware.flag,
  1628. :arg_ref_s_outware.priceflag,
  1629. :arg_ref_s_outware.secflag,
  1630. :arg_ref_s_outware.cusid,
  1631. :arg_ref_s_outware.scid,
  1632. :arg_ref_s_outware.relint_1,
  1633. :arg_ref_s_outware.relint_2,
  1634. :arg_ref_s_outware.relint_3,
  1635. :arg_ref_s_outware.ctmint,
  1636. :arg_ref_s_outware.outwarecode,
  1637. :arg_ref_s_outware.outdate,
  1638. :arg_ref_s_outware.part,
  1639. :arg_ref_s_outware.dscrp,
  1640. :arg_ref_s_outware.outrep,
  1641. :arg_ref_s_outware.storageid,
  1642. :arg_ref_s_outware.outwareid,
  1643. :arg_ref_s_outware.thflag,
  1644. :arg_ref_s_outware.otheramt,
  1645. :arg_ref_s_outware.viewdate,
  1646. :arg_ref_s_outware.mrate
  1647. FROM u_outware_ll
  1648. Where outwareid = :arg_outwareid;
  1649. IF sqlca.SQLCode <> 0 THEN
  1650. ARG_MSG = '查询单据审核标记失败,'+sqlca.SQLErrText
  1651. rslt = 0
  1652. GOTO ext
  1653. END IF
  1654. ext:
  1655. RETURN rslt
  1656. end function
  1657. private function integer getinfo (long arg_outwareid, ref s_outware_ll arg_ref_s_outware_ll, ref string arg_msg);Int rslt = 1
  1658. Long i = 1,no_mxcheck = 0
  1659. uo_sumamt_native = 0
  1660. uo_sumamt_en = 0
  1661. IF arg_outwareid <= 0 THEN
  1662. rslt = 0
  1663. arg_msg = '错误单据唯一码'
  1664. GOTO ext
  1665. END IF
  1666. IF p_getinfo(arg_outwareid,arg_ref_s_outware_ll,arg_msg) = 0 THEN
  1667. rslt = 0
  1668. GOTO ext
  1669. END IF
  1670. //用游标读取明细
  1671. DECLARE cur_rqbuymx CURSOR FOR
  1672. SELECT u_outwaremx_ll.mtrlwareid,
  1673. u_outwaremx_ll.mtrlwarescid,
  1674. u_outwaremx_ll.mtrlid,
  1675. u_outwaremx_ll.storageid,
  1676. u_outwaremx_ll.plancode,
  1677. u_outwaremx_ll.status,
  1678. u_outwaremx_ll.woodcode,
  1679. u_outwaremx_ll.pcode,
  1680. u_outwaremx_ll.Qty,
  1681. u_mtrldef.mtrlcode,
  1682. u_outwaremx_ll.fprice,
  1683. u_outwaremx_ll.rebate,
  1684. u_outwaremx_ll.costamt,
  1685. u_outwaremx_ll.mxdscrp,
  1686. u_outwaremx_ll.sptid,
  1687. u_outwaremx_ll.dxflag,
  1688. u_outwaremx_ll.printid,
  1689. u_outwaremx_ll.ifrel,
  1690. u_outwaremx_ll.relid,
  1691. u_outwaremx_ll.relprintid,
  1692. u_outwaremx_ll.packqty,
  1693. u_outwaremx_ll.relcode,
  1694. u_outwaremx_ll.enprice,
  1695. u_outwaremx_ll.outtypestr,
  1696. u_outwaremx_ll.dftsaleprice,
  1697. u_outwaremx_ll.cost,
  1698. u_outwaremx_ll.planqty,
  1699. u_outwaremx_ll.uqty,
  1700. u_outwaremx_ll.rate,
  1701. u_outwaremx_ll.unit,
  1702. u_outwaremx_ll.scidprice,
  1703. u_outwaremx_ll.price,
  1704. u_mtrldef.unit,
  1705. u_outwaremx_ll.mtrlcuscode,
  1706. u_outwaremx_ll.location
  1707. FROM u_outwaremx_ll,u_mtrldef
  1708. WHERE u_outwaremx_ll.outwareid = :arg_outwareid
  1709. AND u_outwaremx_ll.mtrlid = u_mtrldef.mtrlid
  1710. Order By u_outwaremx_ll.printid;
  1711. OPEN cur_rqbuymx;
  1712. FETCH cur_rqbuymx INTO
  1713. :arg_ref_s_outware_ll.arg_s_mx[i].mtrlwareid,
  1714. :arg_ref_s_outware_ll.arg_s_mx[i].mtrlwarescid,
  1715. :arg_ref_s_outware_ll.arg_s_mx[i].mtrlid,
  1716. :arg_ref_s_outware_ll.arg_s_mx[i].storageid,
  1717. :arg_ref_s_outware_ll.arg_s_mx[i].plancode,
  1718. :arg_ref_s_outware_ll.arg_s_mx[i].status,
  1719. :arg_ref_s_outware_ll.arg_s_mx[i].woodcode,
  1720. :arg_ref_s_outware_ll.arg_s_mx[i].pcode,
  1721. :arg_ref_s_outware_ll.arg_s_mx[i].Qty,
  1722. :arg_ref_s_outware_ll.arg_s_mx[i].mtrlcode,
  1723. :arg_ref_s_outware_ll.arg_s_mx[i].fprice,
  1724. :arg_ref_s_outware_ll.arg_s_mx[i].rebate,
  1725. :arg_ref_s_outware_ll.arg_s_mx[i].costamt,
  1726. :arg_ref_s_outware_ll.arg_s_mx[i].mxdscrp,
  1727. :arg_ref_s_outware_ll.arg_s_mx[i].sptid,
  1728. :arg_ref_s_outware_ll.arg_s_mx[i].dxflag,
  1729. :arg_ref_s_outware_ll.arg_s_mx[i].printid,
  1730. :arg_ref_s_outware_ll.arg_s_mx[i].ifrel,
  1731. :arg_ref_s_outware_ll.arg_s_mx[i].relid,
  1732. :arg_ref_s_outware_ll.arg_s_mx[i].relprintid,
  1733. :arg_ref_s_outware_ll.arg_s_mx[i].packqty,
  1734. :arg_ref_s_outware_ll.arg_s_mx[i].relcode,
  1735. :arg_ref_s_outware_ll.arg_s_mx[i].enprice,
  1736. :arg_ref_s_outware_ll.arg_s_mx[i].outtypestr,
  1737. :arg_ref_s_outware_ll.arg_s_mx[i].dftsaleprice,
  1738. :arg_ref_s_outware_ll.arg_s_mx[i].cost,
  1739. :arg_ref_s_outware_ll.arg_s_mx[i].planqty,
  1740. :arg_ref_s_outware_ll.arg_s_mx[i].uqty,
  1741. :arg_ref_s_outware_ll.arg_s_mx[i].rate,
  1742. :arg_ref_s_outware_ll.arg_s_mx[i].unit,
  1743. :arg_ref_s_outware_ll.arg_s_mx[i].scidprice,
  1744. :arg_ref_s_outware_ll.arg_s_mx[i].price,
  1745. :arg_ref_s_outware_ll.arg_s_mx[i].u_mtrldef_unit,
  1746. :arg_ref_s_outware_ll.arg_s_mx[i].mtrlcuscode,
  1747. :arg_ref_s_outware_ll.arg_s_mx[i].location;
  1748. DO WHILE sqlca.SQLCode = 0
  1749. //计算单据总金额
  1750. uo_sumamt_native = uo_sumamt_native + arg_ref_s_outware_ll.arg_s_mx[i].uqty * arg_ref_s_outware_ll.arg_s_mx[i].rebate * arg_ref_s_outware_ll.arg_s_mx[i].price
  1751. uo_sumamt_en = uo_sumamt_en + arg_ref_s_outware_ll.arg_s_mx[i].uqty * arg_ref_s_outware_ll.arg_s_mx[i].rebate * arg_ref_s_outware_ll.arg_s_mx[i].enprice
  1752. i++
  1753. FETCH cur_rqbuymx INTO
  1754. :arg_ref_s_outware_ll.arg_s_mx[i].mtrlwareid,
  1755. :arg_ref_s_outware_ll.arg_s_mx[i].mtrlwarescid,
  1756. :arg_ref_s_outware_ll.arg_s_mx[i].mtrlid,
  1757. :arg_ref_s_outware_ll.arg_s_mx[i].storageid,
  1758. :arg_ref_s_outware_ll.arg_s_mx[i].plancode,
  1759. :arg_ref_s_outware_ll.arg_s_mx[i].status,
  1760. :arg_ref_s_outware_ll.arg_s_mx[i].woodcode,
  1761. :arg_ref_s_outware_ll.arg_s_mx[i].pcode,
  1762. :arg_ref_s_outware_ll.arg_s_mx[i].Qty,
  1763. :arg_ref_s_outware_ll.arg_s_mx[i].mtrlcode,
  1764. :arg_ref_s_outware_ll.arg_s_mx[i].fprice,
  1765. :arg_ref_s_outware_ll.arg_s_mx[i].rebate,
  1766. :arg_ref_s_outware_ll.arg_s_mx[i].costamt,
  1767. :arg_ref_s_outware_ll.arg_s_mx[i].mxdscrp,
  1768. :arg_ref_s_outware_ll.arg_s_mx[i].sptid,
  1769. :arg_ref_s_outware_ll.arg_s_mx[i].dxflag,
  1770. :arg_ref_s_outware_ll.arg_s_mx[i].printid,
  1771. :arg_ref_s_outware_ll.arg_s_mx[i].ifrel,
  1772. :arg_ref_s_outware_ll.arg_s_mx[i].relid,
  1773. :arg_ref_s_outware_ll.arg_s_mx[i].relprintid,
  1774. :arg_ref_s_outware_ll.arg_s_mx[i].packqty,
  1775. :arg_ref_s_outware_ll.arg_s_mx[i].relcode,
  1776. :arg_ref_s_outware_ll.arg_s_mx[i].enprice,
  1777. :arg_ref_s_outware_ll.arg_s_mx[i].outtypestr,
  1778. :arg_ref_s_outware_ll.arg_s_mx[i].dftsaleprice,
  1779. :arg_ref_s_outware_ll.arg_s_mx[i].cost,
  1780. :arg_ref_s_outware_ll.arg_s_mx[i].planqty,
  1781. :arg_ref_s_outware_ll.arg_s_mx[i].uqty,
  1782. :arg_ref_s_outware_ll.arg_s_mx[i].rate,
  1783. :arg_ref_s_outware_ll.arg_s_mx[i].unit,
  1784. :arg_ref_s_outware_ll.arg_s_mx[i].scidprice,
  1785. :arg_ref_s_outware_ll.arg_s_mx[i].price,
  1786. :arg_ref_s_outware_ll.arg_s_mx[i].u_mtrldef_unit,
  1787. :arg_ref_s_outware_ll.arg_s_mx[i].mtrlcuscode,
  1788. :arg_ref_s_outware_ll.arg_s_mx[i].location;
  1789. LOOP
  1790. CLOSE cur_rqbuymx;
  1791. //检验明细是否读入完整
  1792. SELECT count(*) INTO :no_mxcheck
  1793. FROM u_outwaremx_ll
  1794. WHERE outwareid = :arg_outwareid;
  1795. IF sqlca.SQLCode <> 0 THEN
  1796. rslt = 0
  1797. arg_msg = "查询操作失败,单据汇总数量"
  1798. GOTO ext
  1799. END IF
  1800. IF i <> (no_mxcheck + 1) THEN
  1801. rslt = 0
  1802. arg_msg = "查询操作失败,单据汇总内容"
  1803. GOTO ext
  1804. END IF
  1805. ext:
  1806. RETURN rslt
  1807. end function
  1808. public function integer uof_noauditingqty_add (s_outwaremx_ll arg_s_mx[], ref string arg_msg);If uo_option_noauditingqty_mode = 0 Then Return 1
  1809. Int rslt = 1
  1810. Long i
  1811. For i = 1 To UpperBound(arg_s_mx)
  1812. Update u_mtrlware
  1813. Set noauditingqty = noauditingqty + :arg_s_mx[i].qty,
  1814. noauditinguqty = noauditingqty + :arg_s_mx[i].qty
  1815. Where scid = :arg_s_mx[i].mtrlwarescid
  1816. And mtrlwareid = :arg_s_mx[i].mtrlwareid;
  1817. If sqlca.SQLCode <> 0 Then
  1818. rslt = 0
  1819. arg_msg = '更新明细库存已开单数失败 '+sqlca.SQLErrText
  1820. Goto ext
  1821. End If
  1822. Next
  1823. ext:
  1824. Return rslt
  1825. end function
  1826. public function integer uof_noauditingqty_del (long arg_outwareid, ref string arg_msg);If uo_option_noauditingqty_mode = 0 Then Return 1
  1827. Int rslt = 1
  1828. Long i,ll_i
  1829. i = 1
  1830. s_outwaremx_ll arg_s_mx[]
  1831. Declare cur_mx Cursor For
  1832. Select u_outwaremx_ll.mtrlwarescid,
  1833. u_outwaremx_ll.mtrlwareid,
  1834. u_outwaremx_ll.qty,
  1835. u_outwaremx_ll.uqty,
  1836. u_mtrldef.mtrlcode
  1837. From u_outwaremx_ll,u_mtrldef
  1838. Where u_outwaremx_ll.outwareid = :arg_outwareid
  1839. And u_outwaremx_ll.mtrlid = u_mtrldef.mtrlid
  1840. Order By u_owereturnmx.printid;
  1841. Open cur_mx;
  1842. Fetch cur_mx Into :arg_s_mx[i].mtrlwarescid,:arg_s_mx[i].mtrlwareid,:arg_s_mx[i].qty,:arg_s_mx[i].uqty,:arg_s_mx[i].mtrlcode;
  1843. Do While sqlca.SQLCode = 0
  1844. i++
  1845. Fetch cur_mx Into :arg_s_mx[i].mtrlwarescid,:arg_s_mx[i].mtrlwareid,:arg_s_mx[i].qty,:arg_s_mx[i].uqty,:arg_s_mx[i].mtrlcode;
  1846. Loop
  1847. Close cur_mx;
  1848. For ll_i = 1 To i - 1
  1849. Update u_mtrlware
  1850. Set noauditingqty = noauditingqty - :arg_s_mx[ll_i].qty,
  1851. noauditinguqty = noauditingqty - :arg_s_mx[ll_i].uqty
  1852. Where scid = :arg_s_mx[ll_i].mtrlwarescid
  1853. And mtrlwareid = :arg_s_mx[ll_i].mtrlwareid;
  1854. If sqlca.SQLCode <> 0 Then
  1855. rslt = 0
  1856. arg_msg = '物料'+string(arg_s_mx[ll_i].mtrlcode)+' 更新明细库存已开单数失败 '+sqlca.SQLErrText
  1857. Goto ext
  1858. End If
  1859. Next
  1860. ext:
  1861. Return rslt
  1862. end function
  1863. on uo_outware_ll.create
  1864. call super::create
  1865. TriggerEvent( this, "constructor" )
  1866. end on
  1867. on uo_outware_ll.destroy
  1868. TriggerEvent( this, "destructor" )
  1869. call super::destroy
  1870. end on
  1871. event constructor;String str_optionvalue,arg_msg
  1872. f_get_sys_option_value('134',str_optionvalue,arg_msg)
  1873. uo_option_confirmaudit_sale_ll = Long(str_optionvalue)
  1874. f_get_sys_option_value('045',str_optionvalue,arg_msg)
  1875. uo_option_m_msttake = Long(str_optionvalue)
  1876. f_get_sys_option_value('052',str_optionvalue,arg_msg)
  1877. uo_option_otheramt_msttake = Long(str_optionvalue)
  1878. f_get_sys_option_value('050',str_optionvalue,arg_msg)
  1879. uo_option_change_otheramt = trim(str_optionvalue)
  1880. f_get_sys_option_value('037',str_optionvalue,arg_msg)
  1881. uo_option_mtrlware_limit = Long(str_optionvalue)
  1882. f_get_sys_option_value('390',str_optionvalue,arg_msg)
  1883. uo_option_noauditingqty_mode = Long(str_optionvalue)
  1884. end event