uo_sptcheck.sru 61 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447
  1. $PBExportHeader$uo_sptcheck.sru
  2. forward
  3. global type uo_sptcheck from nonvisualobject
  4. end type
  5. type s_saleplanmx from structure within uo_sptcheck
  6. end type
  7. end forward
  8. type s_saleplanmx from structure
  9. long mtrlid
  10. string mtrlcode
  11. long printid
  12. decimal { 10 } planqty
  13. string mxdscrp
  14. end type
  15. global type uo_sptcheck from nonvisualobject
  16. end type
  17. global uo_sptcheck uo_sptcheck
  18. type variables
  19. Long uo_billid
  20. Int uo_option_if_oa_sptcheck
  21. Int uo_option_sptcheck_secaudit
  22. Int uo_option_if_oa_sptcheck_wfjg
  23. Int uo_option_sptcheck_wfjg_secaudit
  24. Int uo_option_sptcheck_inware
  25. Int uo_option_sptcheck_wfjg_inware
  26. int uo_option_wfjg_price_cmp
  27. Long audit_buildtype
  28. end variables
  29. forward prototypes
  30. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  31. public function integer updatebegin (long arg_billid, ref string arg_msg)
  32. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  33. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  34. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg)
  35. public function integer p_getinfo (long arg_billid, ref s_sptcheck arg_s_check, ref string arg_msg)
  36. public function integer save (s_sptcheck arg_s_sptcheck, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  37. public function integer getinfo (long arg_billid, ref s_sptcheck arg_ref_s_ch, ref string arg_msg)
  38. public function integer uof_add_inqty (long arg_billid, long arg_printid, decimal arg_inqty, ref string arg_msg, boolean arg_ifcommit)
  39. public function integer first_audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  40. public function integer first_caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  41. public function integer uof_add_billemp (long arg_billid, string arg_billemp, ref string arg_msg)
  42. public function integer uof_create_inware_buy (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  43. public function integer uof_del_inware_buy (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  44. public function integer uof_create_inware_wfjg (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  45. public function integer uof_del_inware_wfjg (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  46. public function integer uof_create_inware_cp (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  47. public function integer uof_del_inware_cp (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  48. end prototypes
  49. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  50. s_sptcheck arg_s_check
  51. IF arg_billid <= 0 THEN
  52. rslt = 0
  53. ARG_MSG = '错误单据唯一码'
  54. GOTO ext
  55. END IF
  56. IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  57. rslt = 0
  58. GOTO ext
  59. END IF
  60. IF arg_s_check.flag = 1 THEN
  61. rslt = 0
  62. ARG_MSG = '单据已经审核,不可以删除'
  63. GOTO ext
  64. END IF
  65. DELETE FROM u_sptcheck Where billid = :arg_billid;
  66. IF sqlca.SQLCode <> 0 THEN
  67. rslt = 0
  68. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  69. GOTO ext
  70. END IF
  71. DELETE FROM u_sptcheck_mx Where billid = :arg_billid ;
  72. IF sqlca.SQLCode <> 0 THEN
  73. rslt = 0
  74. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  75. GOTO ext
  76. END IF
  77. ext:
  78. IF rslt = 0 THEN
  79. ROLLBACK;
  80. ELSEIF rslt = 1 AND arg_ifcommit THEN
  81. COMMIT;
  82. END IF
  83. RETURN rslt
  84. end function
  85. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  86. s_sptcheck arg_s_check
  87. IF arg_billid <= 0 THEN
  88. rslt = 0
  89. ARG_MSG = '错误单据唯一码'
  90. GOTO ext
  91. END IF
  92. IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  93. rslt = 0
  94. GOTO ext
  95. END IF
  96. IF arg_s_check.flag <> 0 THEN
  97. rslt = 0
  98. ARG_MSG = '单据已经审核,不可以修改,要修改请先撤销审核'
  99. GOTO ext
  100. END IF
  101. ext:
  102. RETURN rslt
  103. end function
  104. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  105. Long cnt,i
  106. DateTime null_dt
  107. SetNull(null_dt)
  108. IF uo_option_sptcheck_inware = -1000 THEN
  109. rslt = 0
  110. arg_msg = '选项:[271]采购质检单审核自动生成采购收货单,读取初始默认值失败,操作取消!'
  111. GOTO ext
  112. END IF
  113. IF uo_option_sptcheck_wfjg_inware = -1000 THEN
  114. rslt = 0
  115. arg_msg = '选项:[272]外协质检单审核自动生成外协收货单,读取初始默认值失败,操作取消!'
  116. GOTO ext
  117. END IF
  118. s_sptcheck arg_s_check
  119. uo_checkback uo_checkb
  120. uo_checkb = Create uo_checkback
  121. uo_buytask uo_task
  122. uo_task = Create uo_buytask
  123. uo_task.commit_transaction = sqlca
  124. uo_order_wfjg uo_wfjg
  125. uo_wfjg = Create uo_order_wfjg
  126. uo_wfjg.commit_transaction = sqlca
  127. uo_order_ml uo_zl
  128. uo_zl = Create uo_order_ml
  129. //uo_zl.commit_transaction = sqlca
  130. IF arg_billid <= 0 THEN
  131. rslt = 0
  132. arg_msg = '错误单据唯一码'
  133. GOTO ext
  134. END IF
  135. IF getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN
  136. rslt = 0
  137. GOTO ext
  138. END IF
  139. IF arg_s_check.flag <> 1 THEN
  140. rslt = 0
  141. arg_msg = '单据未审核,不可以撤审'
  142. GOTO ext
  143. END IF
  144. cnt = 0
  145. SELECT count(*) INTO :cnt
  146. FROM u_sptcheck_mx
  147. WHERE billid = :arg_billid
  148. And inqty > 0;
  149. IF sqlca.SQLCode <> 0 THEN
  150. arg_msg = '查询质检单明细是否已有进仓失败,'+sqlca.SQLErrText
  151. rslt = 0
  152. GOTO ext
  153. END IF
  154. IF cnt > 0 THEN
  155. arg_msg = '查询质检单明细已有进仓,不能撤审'
  156. rslt = 0
  157. GOTO ext
  158. END IF
  159. FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1
  160. IF arg_s_check.arg_s_mx[i].reltaskid > 0 THEN
  161. IF arg_s_check.billtype = 0 THEN
  162. IF uo_task.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid,arg_s_check.arg_s_mx[i].reltaskprintid, 0 - arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN
  163. rslt = 0
  164. arg_msg = '第'+String(i)+'行,'+arg_msg
  165. GOTO ext
  166. END IF
  167. ELSEIF arg_s_check.billtype = 1 THEN
  168. IF uo_wfjg.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid,arg_s_check.arg_s_mx[i].reltaskprintid, 0 - arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN
  169. rslt = 0
  170. arg_msg = '第'+String(i)+'行,'+arg_msg
  171. GOTO ext
  172. END IF
  173. ELSEIF arg_s_check.billtype = 2 THEN
  174. IF uo_zl.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid, 0 - arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN
  175. rslt = 0
  176. arg_msg = '第'+String(i)+'行,'+arg_msg
  177. GOTO ext
  178. END IF
  179. END IF
  180. END IF
  181. NEXT
  182. IF arg_s_check.billtype = 0 THEN
  183. IF uo_option_sptcheck_inware = 0 THEN
  184. cnt = 0
  185. SELECT count(*) INTO :cnt
  186. FROM u_inwaremx,u_inware
  187. WHERE u_inwaremx.inwareid = u_inware.inwareid
  188. AND u_inwaremx.scid = u_inware.scid
  189. AND u_inwaremx.relbillid = :arg_billid
  190. And u_inware.billtype = 1 ;
  191. IF sqlca.SQLCode <> 0 THEN
  192. arg_msg = '查询质检单明细是否已开采购收货单失败,'+sqlca.SQLErrText
  193. rslt = 0
  194. GOTO ext
  195. END IF
  196. IF cnt > 0 THEN
  197. arg_msg = '查询质检单明细已开采购收货单,不能撤审'
  198. rslt = 0
  199. GOTO ext
  200. END IF
  201. END IF
  202. ELSE
  203. IF uo_option_sptcheck_wfjg_inware = 0 THEN
  204. cnt = 0
  205. SELECT count(*) INTO :cnt
  206. FROM ow_wfjgmx_in_aft
  207. Where ow_wfjgmx_in_aft.relbillid = :arg_billid;
  208. IF sqlca.SQLCode <> 0 THEN
  209. arg_msg = '查询质检单明细是否已开外协收货单失败,'+sqlca.SQLErrText
  210. rslt = 0
  211. GOTO ext
  212. END IF
  213. IF cnt > 0 THEN
  214. arg_msg = '查询质检单明细已开外协收货单,不能撤审'
  215. rslt = 0
  216. GOTO ext
  217. END IF
  218. END IF
  219. END IF
  220. UPDATE u_sptcheck
  221. SET flag = 4,
  222. auditemp = '',
  223. auditdate = :null_dt
  224. WHERE billid = :arg_billid
  225. And flag = 1;
  226. IF sqlca.SQLCode <> 0 THEN
  227. rslt = 0
  228. arg_msg = "因网络或其它原因导致单据撤消审核操作失败"+"~n"+sqlca.SQLErrText
  229. GOTO ext
  230. END IF
  231. //删除验退单
  232. IF arg_s_check.relcheckbackid > 0 THEN
  233. IF uo_checkb.del( arg_s_check.relcheckbackid,0,arg_msg,False) = 0 THEN
  234. rslt = 0
  235. GOTO ext
  236. END IF
  237. END IF
  238. IF uo_option_sptcheck_inware = 1 And arg_s_check.billtype = 0 THEN
  239. IF uof_del_inware_buy(arg_billid,arg_msg,False) = 0 THEN
  240. rslt = 0
  241. GOTO ext
  242. END IF
  243. ELSEIF uo_option_sptcheck_wfjg_inware = 1 And arg_s_check.billtype = 1 THEN
  244. IF uof_del_inware_wfjg(arg_billid,arg_msg,False) = 0 THEN
  245. rslt = 0
  246. GOTO ext
  247. END IF
  248. ELSEIF sys_option_sptcheck_cp_inware = 1 And arg_s_check.billtype = 2 THEN
  249. IF uof_del_inware_cp(arg_billid,arg_msg,False) = 0 THEN
  250. rslt = 0
  251. GOTO ext
  252. END IF
  253. END IF
  254. ext:
  255. IF rslt = 0 THEN
  256. ROLLBACK;
  257. ELSEIF rslt = 1 And arg_ifcommit THEN
  258. COMMIT;
  259. END IF
  260. Destroy uo_checkb
  261. Destroy uo_task
  262. Destroy uo_wfjg
  263. Destroy uo_zl
  264. RETURN rslt
  265. end function
  266. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  267. Long i,j,ll_relcheckbackid,ll_backcnt,count
  268. IF uo_option_if_oa_sptcheck = -1000 THEN
  269. rslt = 0
  270. arg_msg = '选项:[265]供应商采购质检单使用OA审批流程,读取初始默认值失败,操作取消!'
  271. GOTO ext
  272. END IF
  273. IF uo_option_sptcheck_secaudit = -1000 THEN
  274. rslt = 0
  275. arg_msg = '选项:[267]供应商采购质检单使用二级审核,读取初始默认值失败,操作取消!'
  276. GOTO ext
  277. END IF
  278. IF uo_option_if_oa_sptcheck_wfjg = -1000 THEN
  279. rslt = 0
  280. arg_msg = '选项:[266]供应商外协质检单使用OA审批流程,读取初始默认值失败,操作取消!'
  281. GOTO ext
  282. END IF
  283. IF uo_option_sptcheck_wfjg_secaudit = -1000 THEN
  284. rslt = 0
  285. arg_msg = '选项:[268]供应商外协质检单使用二级审核,读取初始默认值失败,操作取消!'
  286. GOTO ext
  287. END IF
  288. IF uo_option_sptcheck_inware = -1000 THEN
  289. rslt = 0
  290. arg_msg = '选项:[271]采购质检单审核自动生成采购收货单,读取初始默认值失败,操作取消!'
  291. GOTO ext
  292. END IF
  293. IF uo_option_sptcheck_wfjg_inware = -1000 THEN
  294. rslt = 0
  295. arg_msg = '选项:[272]外协质检单审核自动生成外协收货单,读取初始默认值失败,操作取消!'
  296. GOTO ext
  297. END IF
  298. s_sptcheck arg_s_check
  299. s_CheckBack arg_s_CheckBack
  300. uo_checkback uo_checkb
  301. uo_checkb = Create uo_checkback
  302. uo_buytask uo_task
  303. uo_task = Create uo_buytask
  304. uo_task.commit_transaction = sqlca
  305. uo_order_wfjg uo_wfjg
  306. uo_wfjg = Create uo_order_wfjg
  307. uo_wfjg.commit_transaction = sqlca
  308. uo_order_ml uo_zl
  309. uo_zl = Create uo_order_ml
  310. IF arg_billid <= 0 THEN
  311. rslt = 0
  312. arg_msg = '错误单据唯一码'
  313. GOTO ext
  314. END IF
  315. IF getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN
  316. rslt = 0
  317. GOTO ext
  318. END IF
  319. IF arg_s_check.billtype = 0 THEN
  320. IF uo_option_if_oa_sptcheck = 1 And uo_option_sptcheck_secaudit = 1 And audit_buildtype = 0 THEN
  321. IF f_check_if_oaflow(arg_s_check.scid,arg_billid,1684,arg_msg ) = 0 THEN
  322. rslt = 0
  323. GOTO ext
  324. END IF
  325. END IF
  326. ELSEIF arg_s_check.billtype = 1 THEN
  327. IF uo_option_if_oa_sptcheck_wfjg = 1 And uo_option_sptcheck_wfjg_secaudit = 1 And audit_buildtype = 0 THEN
  328. IF f_check_if_oaflow(arg_s_check.scid,arg_billid,2234,arg_msg ) = 0 THEN
  329. rslt = 0
  330. GOTO ext
  331. END IF
  332. END IF
  333. END IF
  334. IF arg_s_check.flag = 1 THEN
  335. rslt = 0
  336. arg_msg = '单据已经审核,不可以再审'
  337. GOTO ext
  338. END IF
  339. //质检单 初审可以不填质检员,初审后终审前填质检员(2张质检单)lhd 20120419
  340. IF arg_s_check.billemp = '' THEN
  341. rslt = 0
  342. arg_msg = "请输入质检员"
  343. GOTO ext
  344. END IF
  345. FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1
  346. IF arg_s_check.arg_s_mx[i].reltaskid > 0 THEN
  347. IF arg_s_check.billtype = 0 THEN
  348. IF uo_task.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid,arg_s_check.arg_s_mx[i].reltaskprintid, arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN
  349. rslt = 0
  350. arg_msg = '第'+String(i)+'行,'+arg_msg
  351. GOTO ext
  352. END IF
  353. ELSEIF arg_s_check.billtype = 1 THEN
  354. IF uo_wfjg.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid,arg_s_check.arg_s_mx[i].reltaskprintid, arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN
  355. rslt = 0
  356. arg_msg = '第'+String(i)+'行,'+arg_msg
  357. GOTO ext
  358. END IF
  359. ELSEIF arg_s_check.billtype = 2 THEN
  360. IF uo_zl.addmx_sptcheckqty(arg_s_check.scid,arg_s_check.arg_s_mx[i].reltaskid, arg_s_check.arg_s_mx[i].goodqty * arg_s_check.arg_s_mx[i].rate,arg_msg ,False) = 0 THEN
  361. rslt = 0
  362. arg_msg = '第'+String(i)+'行,'+arg_msg
  363. GOTO ext
  364. END IF
  365. END IF
  366. END IF
  367. NEXT
  368. //更新审核标记
  369. UPDATE u_sptcheck
  370. SET auditemp = :arg_opemp,
  371. auditdate = getdate(),
  372. flag = 1
  373. WHERE billid = :arg_billid
  374. And flag = 4;
  375. IF sqlca.SQLCode <> 0 THEN
  376. rslt = 0
  377. arg_msg = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  378. GOTO ext
  379. END IF
  380. FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1
  381. IF arg_s_check.arg_s_mx[i].backqty > 0 THEN ll_backcnt++
  382. NEXT
  383. IF ll_backcnt = 0 THEN
  384. ll_relcheckbackid = 0
  385. ELSE
  386. arg_s_CheckBack.scid = arg_s_check.scid
  387. arg_s_CheckBack.billid = 0
  388. arg_s_CheckBack.billemp = publ_operator
  389. arg_s_CheckBack.relcode = arg_s_check.billcode
  390. arg_s_CheckBack.dscrp = "质检单审核自动生成"
  391. arg_s_CheckBack.sptid = arg_s_check.sptid
  392. arg_s_CheckBack.billdate = arg_s_check.billdate
  393. arg_s_CheckBack.billtype = arg_s_check.billtype
  394. arg_s_CheckBack.auto = 1
  395. arg_s_CheckBack.relid = arg_s_check.billid
  396. FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1
  397. IF arg_s_check.arg_s_mx[i].backqty > 0 THEN
  398. count++
  399. arg_s_CheckBack.arg_s_mx[count].printid = count
  400. arg_s_CheckBack.arg_s_mx[count].mtrlid = arg_s_check.arg_s_mx[i].mtrlid
  401. arg_s_CheckBack.arg_s_mx[count].checkqty = arg_s_check.arg_s_mx[i].checkqty
  402. arg_s_CheckBack.arg_s_mx[count].lackqty = arg_s_check.arg_s_mx[i].backqty
  403. arg_s_CheckBack.arg_s_mx[count].status = arg_s_check.arg_s_mx[i].status
  404. arg_s_CheckBack.arg_s_mx[count].woodcode = arg_s_check.arg_s_mx[i].woodcode
  405. arg_s_CheckBack.arg_s_mx[count].pcode = arg_s_check.arg_s_mx[i].pcode
  406. arg_s_CheckBack.arg_s_mx[count].relbillid = arg_s_check.arg_s_mx[i].reltaskid
  407. arg_s_CheckBack.arg_s_mx[count].ifrel = arg_s_check.arg_s_mx[i].iftask
  408. arg_s_CheckBack.arg_s_mx[count].relprintid = arg_s_check.arg_s_mx[i].reltaskprintid
  409. arg_s_CheckBack.arg_s_mx[count].unit = arg_s_check.arg_s_mx[i].unit
  410. arg_s_CheckBack.arg_s_mx[count].rate = arg_s_check.arg_s_mx[i].rate
  411. END IF
  412. NEXT
  413. IF uo_checkb.Save(arg_s_CheckBack,publ_operator,arg_msg,False) = 0 THEN
  414. rslt = 0
  415. GOTO ext
  416. END IF
  417. ll_relcheckbackid = uo_checkb.uo_billid
  418. IF ll_relcheckbackid <= 0 THEN
  419. arg_msg = '错误的验退单id,请检查'
  420. rslt = 0
  421. GOTO ext
  422. END IF
  423. END IF
  424. IF ll_relcheckbackid > 0 THEN
  425. UPDATE u_sptcheck
  426. SET relcheckbackid = :ll_relcheckbackid
  427. Where billid = :arg_billid;
  428. IF sqlca.SQLCode <> 0 THEN
  429. rslt = 0
  430. arg_msg = "更新相关验退单id失败,"+"~n"+sqlca.SQLErrText
  431. GOTO ext
  432. END IF
  433. END IF
  434. IF uo_option_sptcheck_inware = 1 And arg_s_check.billtype = 0 THEN
  435. IF uof_create_inware_buy(arg_billid,arg_msg,False) = 0 THEN
  436. rslt = 0
  437. GOTO ext
  438. END IF
  439. ELSEIF uo_option_sptcheck_wfjg_inware = 1 And arg_s_check.billtype = 1 THEN
  440. IF uof_create_inware_wfjg(arg_billid,arg_msg,False) = 0 THEN
  441. rslt = 0
  442. GOTO ext
  443. END IF
  444. ELSEIF sys_option_sptcheck_cp_inware = 1 And arg_s_check.billtype = 2 THEN
  445. IF uof_create_inware_cp(arg_billid,arg_msg,False) = 0 THEN
  446. rslt = 0
  447. GOTO ext
  448. END IF
  449. END IF
  450. ext:
  451. IF rslt = 0 THEN
  452. ROLLBACK;
  453. ELSEIF rslt = 1 And arg_ifcommit THEN
  454. COMMIT;
  455. END IF
  456. Destroy uo_checkb
  457. Destroy uo_task
  458. Destroy uo_wfjg
  459. Destroy uo_zl
  460. RETURN rslt
  461. end function
  462. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);Int rslt = 1
  463. s_sptcheck arg_s_check
  464. IF arg_billid <= 0 THEN
  465. rslt = 0
  466. arg_msg = '错误单据唯一码'
  467. GOTO ext
  468. END IF
  469. IF arg_newdescppart = '' THEN
  470. rslt = 0
  471. arg_msg = "要添加内容为空,操作取消"
  472. GOTO ext
  473. END IF
  474. IF p_getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN
  475. rslt = 0
  476. GOTO ext
  477. END IF
  478. IF arg_s_check.flag = 0 THEN
  479. rslt = 0
  480. arg_msg = '单据未审核,不可以增加备注'
  481. GOTO ext
  482. END IF
  483. UPDATE u_sptcheck
  484. SET DSCRP = DSCRP+' '+:arg_newdescppart
  485. WHERE u_sptcheck.billid = :arg_billid
  486. AND flag = 1;
  487. IF SQLCA.SQLCode <> 0 THEN
  488. rslt = 0
  489. arg_msg = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  490. GOTO ext
  491. END IF
  492. ext:
  493. IF rslt = 1 THEN
  494. COMMIT;
  495. ELSE
  496. ROLLBACK;
  497. END IF
  498. Return (rslt)
  499. end function
  500. public function integer p_getinfo (long arg_billid, ref s_sptcheck arg_s_check, ref string arg_msg);Int rslt = 1
  501. IF arg_billid <= 0 THEN
  502. rslt = 0
  503. ARG_MSG = '错误单据唯一码'
  504. GOTO ext
  505. END IF
  506. SELECT u_sptcheck.billcode,
  507. u_sptcheck.billemp,
  508. u_sptcheck.relcode,
  509. u_sptcheck.dscrp,
  510. u_sptcheck.flag,
  511. u_sptcheck.sptid,
  512. u_sptcheck.billdate,
  513. u_sptcheck.relcheckbackid,
  514. u_sptcheck.billtype,
  515. u_sptcheck.scid
  516. INTO
  517. :arg_s_check.billcode,
  518. :arg_s_check.billemp,
  519. :arg_s_check.relcode,
  520. :arg_s_check.dscrp,
  521. :arg_s_check.flag,
  522. :arg_s_check.sptid,
  523. :arg_s_check.billdate,
  524. :arg_s_check.relcheckbackid,
  525. :arg_s_check.billtype,
  526. :arg_s_check.scid
  527. FROM u_sptcheck
  528. Where u_sptcheck.billid = :arg_billid;
  529. IF sqlca.SQLCode <> 0 THEN
  530. rslt = 0
  531. ARG_MSG = '查询质检单内容失败(错误单据唯一码)'
  532. GOTO ext
  533. END IF
  534. ext:
  535. RETURN rslt
  536. end function
  537. public function integer save (s_sptcheck arg_s_sptcheck, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1
  538. Long cnt = 0
  539. DateTime server_dt
  540. Long ll_billid,it_mxbt,ll_i,i
  541. String ls_unit
  542. String ls_sccode,ls_billcode,ls_reltaskcode
  543. Int li_mustloca,li_iflocation
  544. integer li_ifcheck
  545. IF uo_option_sptcheck_inware = -1000 THEN
  546. rslt = 0
  547. arg_msg = '选项:[271]采购质检单审核自动生成采购收货单,读取初始默认值失败,操作取消!'
  548. GOTO ext
  549. END IF
  550. IF uo_option_sptcheck_wfjg_inware = -1000 THEN
  551. rslt = 0
  552. arg_msg = '选项:[272]外协质检单审核自动生成外协收货单,读取初始默认值失败,操作取消!'
  553. GOTO ext
  554. END IF
  555. IF IsNull(arg_s_sptcheck.scid) THEN arg_s_sptcheck.scid = 0
  556. IF IsNull(arg_s_sptcheck.billid) THEN arg_s_sptcheck.billid = 0
  557. IF IsNull(arg_s_sptcheck.billemp) THEN arg_s_sptcheck.billemp = ''
  558. IF IsNull(arg_s_sptcheck.relcode) THEN arg_s_sptcheck.relcode = ''
  559. IF IsNull(arg_s_sptcheck.dscrp) THEN arg_s_sptcheck.dscrp = ''
  560. IF IsNull(arg_s_sptcheck.sptid) THEN arg_s_sptcheck.sptid = 0
  561. IF IsNull(arg_s_sptcheck.billtype) THEN arg_s_sptcheck.billtype = 0
  562. cnt = 0
  563. SELECT count(*) INTO :cnt
  564. FROM u_spt
  565. Where sptid = :arg_s_sptcheck.sptid ;
  566. IF sqlca.SQLCode <> 0 THEN
  567. rslt = 0
  568. arg_msg = "查询操作失败,供应商资料"
  569. GOTO ext
  570. END IF
  571. IF cnt = 0 THEN
  572. rslt = 0
  573. arg_msg = "供应商未定义或错误"
  574. GOTO ext
  575. END IF
  576. SELECT Top 1 getdate() Into :server_dt From u_user;
  577. IF sqlca.SQLCode <> 0 THEN
  578. rslt = 0
  579. arg_msg = "查询操作失败,日期 "
  580. GOTO ext
  581. END IF
  582. it_mxbt = UpperBound(arg_s_sptcheck.arg_s_mx)
  583. IF it_mxbt <= 0 THEN
  584. rslt = 0
  585. arg_msg = "没有正确明细内容"
  586. GOTO ext
  587. END IF
  588. FOR ll_i = 1 To it_mxbt
  589. ls_unit = ''
  590. SELECT unit, ifcheck INTO :ls_unit, :li_ifcheck
  591. FROM u_mtrldef
  592. Where u_mtrldef.mtrlid = :arg_s_sptcheck.arg_s_mx[ll_i].mtrlid;
  593. IF sqlca.SQLCode <> 0 THEN
  594. arg_msg = '查询行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',物料资料失败,'+sqlca.SQLErrText
  595. rslt = 0
  596. GOTO ext
  597. END IF
  598. if li_ifcheck = 1 then
  599. arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',物料已设置不质检进仓,不能建立质检单'
  600. rslt = 0
  601. GOTO ext
  602. end if
  603. IF ls_unit = arg_s_sptcheck.arg_s_mx[ll_i].unit And arg_s_sptcheck.arg_s_mx[ll_i].rate <> 1 THEN
  604. arg_msg = '验退单,行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',物料资料采购单位与库存单位相同,但转换率不为1,请检查!'
  605. rslt = 0
  606. GOTO ext
  607. END IF
  608. IF ls_unit <> arg_s_sptcheck.arg_s_mx[ll_i].unit And arg_s_sptcheck.arg_s_mx[ll_i].rate = 1 THEN
  609. arg_msg = '验退单,行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',物料资料采购单位与库存单位不相同,但转换率为1,请检查!'
  610. rslt = 0
  611. GOTO ext
  612. END IF
  613. IF arg_s_sptcheck.arg_s_mx[ll_i].goodqty <> 0 Or arg_s_sptcheck.arg_s_mx[ll_i].backqty <> 0 Or arg_s_sptcheck.arg_s_mx[ll_i].notqty <> 0 THEN
  614. IF arg_s_sptcheck.arg_s_mx[ll_i].checkqty <> arg_s_sptcheck.arg_s_mx[ll_i].goodqty + arg_s_sptcheck.arg_s_mx[ll_i].backqty + arg_s_sptcheck.arg_s_mx[ll_i].notqty THEN
  615. arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',入库数与退回数、不足数的和必须等于来单质检数,请检查!'
  616. rslt = 0
  617. GOTO ext
  618. END IF
  619. END IF
  620. IF arg_s_sptcheck.arg_s_mx[ll_i].goodqty <> 0 And arg_s_sptcheck.arg_s_mx[ll_i].storageid = 0 And (arg_s_sptcheck.billtype = 0 And uo_option_sptcheck_inware = 1 Or arg_s_sptcheck.billtype = 1 And uo_option_sptcheck_wfjg_inware = 1) THEN
  621. arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',请选择仓库!'
  622. rslt = 0
  623. GOTO ext
  624. END IF
  625. IF arg_s_sptcheck.arg_s_mx[ll_i].iftask = 0 THEN
  626. ls_reltaskcode = ''
  627. ELSE
  628. IF arg_s_sptcheck.arg_s_mx[ll_i].reltaskid = 0 THEN
  629. arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',请选择订单!'
  630. rslt = 0
  631. GOTO ext
  632. END IF
  633. IF arg_s_sptcheck.billtype = 0 THEN
  634. SELECT taskcode INTO :ls_reltaskcode
  635. FROM u_buytask WHERE
  636. scid = :arg_s_sptcheck.scid AND
  637. taskid = :arg_s_sptcheck.arg_s_mx[ll_i].reltaskid;
  638. IF sqlca.SQLCode <> 0 THEN
  639. arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',查询订单失败,请检查!'
  640. rslt = 0
  641. GOTO ext
  642. END IF
  643. ELSEIF arg_s_sptcheck.billtype = 1 THEN
  644. SELECT taskcode INTO :ls_reltaskcode
  645. FROM u_order_wfjg WHERE
  646. scid = :arg_s_sptcheck.scid AND
  647. wfjgid = :arg_s_sptcheck.arg_s_mx[ll_i].reltaskid;
  648. IF sqlca.SQLCode <> 0 THEN
  649. arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',查询订单失败,请检查!'
  650. rslt = 0
  651. GOTO ext
  652. END IF
  653. ELSEIF arg_s_sptcheck.billtype = 2 THEN
  654. SELECT ordercode INTO :ls_reltaskcode
  655. FROM u_order_ml
  656. WHERE scid = :arg_s_sptcheck.scid AND
  657. orderid = :arg_s_sptcheck.arg_s_mx[ll_i].reltaskid;
  658. IF sqlca.SQLCode <> 0 THEN
  659. arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',查询指令单失败,请检查!'
  660. rslt = 0
  661. GOTO ext
  662. END IF
  663. END IF
  664. END IF
  665. arg_s_sptcheck.arg_s_mx[ll_i].reltaskcode = ls_reltaskcode
  666. //检查仓库仓位
  667. IF uo_option_sptcheck_inware = 1 THEN
  668. IF arg_s_sptcheck.arg_s_mx[ll_i].storageid = 0 THEN
  669. arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',未设置仓库,请检查!'
  670. rslt = 0
  671. GOTO ext
  672. END IF
  673. SELECT mustloca,iflocation Into :li_mustloca,:li_iflocation From u_storage Where storageid = :arg_s_sptcheck.arg_s_mx[ll_i].storageid;
  674. IF sqlca.SQLCode <> 0 THEN
  675. arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',查询仓库仓位属性,请检查!'
  676. rslt = 0
  677. GOTO ext
  678. END IF
  679. IF li_iflocation = 0 THEN
  680. arg_s_sptcheck.arg_s_mx[ll_i].Location = ''
  681. ELSE
  682. IF li_mustloca = 1 And arg_s_sptcheck.arg_s_mx[ll_i].Location = '' THEN
  683. arg_msg = '行:'+String(arg_s_sptcheck.arg_s_mx[ll_i].printid)+',仓库仓位必须填写,请检查!'
  684. rslt = 0
  685. GOTO ext
  686. END IF
  687. END IF
  688. END IF
  689. NEXT
  690. IF arg_s_sptcheck.billid = 0 THEN
  691. ll_billid = f_sys_scidentity(0,"u_sptcheck","billid",arg_msg,True,id_sqlca)
  692. IF ll_billid <= 0 THEN
  693. rslt = 0
  694. GOTO ext
  695. END IF
  696. IF f_get_sccode(arg_s_sptcheck.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  697. rslt = 0
  698. GOTO ext
  699. END IF
  700. IF arg_s_sptcheck.billtype = 0 THEN
  701. ls_billcode = getid(arg_s_sptcheck.scid,ls_sccode + 'GJ',Date(server_dt),False,sqlca)
  702. ELSE
  703. ls_billcode = getid(arg_s_sptcheck.scid,ls_sccode + 'AC',Date(server_dt),False,sqlca)
  704. END IF
  705. IF ls_billcode = "err" THEN
  706. rslt = 0
  707. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  708. GOTO ext
  709. END IF
  710. INSERT INTO u_sptcheck
  711. ( scid,
  712. billid,
  713. billcode,
  714. sptid,
  715. indate,
  716. billdate,
  717. billemp,
  718. relcode,
  719. dscrp,
  720. billtype,
  721. opdate,
  722. opemp)
  723. VALUES (
  724. :arg_s_sptcheck.scid,
  725. :ll_billid,
  726. :ls_billcode,
  727. :arg_s_sptcheck.sptid,
  728. :arg_s_sptcheck.indate,
  729. :arg_s_sptcheck.billdate,
  730. :arg_s_sptcheck.billemp,
  731. :arg_s_sptcheck.relcode,
  732. :arg_s_sptcheck.dscrp,
  733. :arg_s_sptcheck.billtype,
  734. getdate(),
  735. :arg_opemp) ;
  736. IF sqlca.SQLCode <> 0 THEN
  737. rslt = 0
  738. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  739. GOTO ext
  740. END IF
  741. uo_billid = ll_billid
  742. ELSE
  743. UPDATE u_sptcheck
  744. SET billemp = :arg_s_sptcheck.billemp,
  745. indate = :arg_s_sptcheck.indate,
  746. billdate = :arg_s_sptcheck.billdate,
  747. sptid = :arg_s_sptcheck.sptid,
  748. moddate = getdate(),
  749. modemp = :arg_opemp,
  750. relcode = :arg_s_sptcheck.relcode,
  751. dscrp = :arg_s_sptcheck.dscrp,
  752. billtype = :arg_s_sptcheck.billtype
  753. WHERE billid = :arg_s_sptcheck.billid
  754. And flag = 0;
  755. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  756. rslt = 0
  757. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  758. GOTO ext
  759. END IF
  760. DELETE FROM u_sptcheck_mx
  761. Where billid = :arg_s_sptcheck.billid;
  762. IF sqlca.SQLCode <> 0 THEN
  763. rslt = 0
  764. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  765. GOTO ext
  766. END IF
  767. // FOR i = 1 To it_mxbt
  768. // INSERT INTO u_sptcheck_mx
  769. // ( billid,
  770. // printid,
  771. // mtrlid,
  772. // checktype,
  773. // checkqty,
  774. // badqty,
  775. // goodqty,
  776. // reason,
  777. // mxdscrp,
  778. // iftask,
  779. // reltaskid,
  780. // reltaskprintid,
  781. // reltaskcode,
  782. // backqty,
  783. // notqty,
  784. // status,
  785. // woodcode,
  786. // pcode,
  787. // unit,
  788. // rate,
  789. // badinqty,
  790. // storageid,
  791. // location)
  792. // VALUES (:arg_s_sptcheck.billid,
  793. // :arg_s_sptcheck.arg_s_mx[i].printid,
  794. // :arg_s_sptcheck.arg_s_mx[i].mtrlid,
  795. // :arg_s_sptcheck.arg_s_mx[i].checktype,
  796. // :arg_s_sptcheck.arg_s_mx[i].checkqty,
  797. // :arg_s_sptcheck.arg_s_mx[i].badqty,
  798. // :arg_s_sptcheck.arg_s_mx[i].goodqty,
  799. // :arg_s_sptcheck.arg_s_mx[i].reason,
  800. // :arg_s_sptcheck.arg_s_mx[i].mxdscrp,
  801. // :arg_s_sptcheck.arg_s_mx[i].iftask,
  802. // :arg_s_sptcheck.arg_s_mx[i].reltaskid,
  803. // :arg_s_sptcheck.arg_s_mx[i].reltaskprintid,
  804. // :arg_s_sptcheck.arg_s_mx[i].reltaskcode,
  805. // :arg_s_sptcheck.arg_s_mx[i].backqty,
  806. // :arg_s_sptcheck.arg_s_mx[i].notqty,
  807. // :arg_s_sptcheck.arg_s_mx[i].status,
  808. // :arg_s_sptcheck.arg_s_mx[i].woodcode,
  809. // :arg_s_sptcheck.arg_s_mx[i].pcode,
  810. // :arg_s_sptcheck.arg_s_mx[i].unit,
  811. // :arg_s_sptcheck.arg_s_mx[i].rate,
  812. // :arg_s_sptcheck.arg_s_mx[i].badinqty,
  813. // :arg_s_sptcheck.arg_s_mx[i].storageid,
  814. // :arg_s_sptcheck.arg_s_mx[i].Location);
  815. // IF sqlca.SQLCode <> 0 THEN
  816. // rslt = 0
  817. // arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  818. // GOTO ext
  819. // END IF
  820. // NEXT
  821. uo_billid = arg_s_sptcheck.billid
  822. END IF
  823. FOR i = 1 To it_mxbt
  824. INSERT INTO u_sptcheck_mx
  825. ( billid,
  826. printid,
  827. mtrlid,
  828. checktype,
  829. checkqty,
  830. badqty,
  831. goodqty,
  832. reason,
  833. mxdscrp,
  834. iftask,
  835. reltaskid,
  836. reltaskprintid,
  837. reltaskcode,
  838. backqty,
  839. notqty,
  840. status,
  841. woodcode,
  842. pcode,
  843. unit,
  844. rate,
  845. badinqty,
  846. storageid,
  847. location)
  848. VALUES (:uo_billid,
  849. :arg_s_sptcheck.arg_s_mx[i].printid,
  850. :arg_s_sptcheck.arg_s_mx[i].mtrlid,
  851. :arg_s_sptcheck.arg_s_mx[i].checktype,
  852. :arg_s_sptcheck.arg_s_mx[i].checkqty,
  853. :arg_s_sptcheck.arg_s_mx[i].badqty,
  854. :arg_s_sptcheck.arg_s_mx[i].goodqty,
  855. :arg_s_sptcheck.arg_s_mx[i].reason,
  856. :arg_s_sptcheck.arg_s_mx[i].mxdscrp,
  857. :arg_s_sptcheck.arg_s_mx[i].iftask,
  858. :arg_s_sptcheck.arg_s_mx[i].reltaskid,
  859. :arg_s_sptcheck.arg_s_mx[i].reltaskprintid,
  860. :arg_s_sptcheck.arg_s_mx[i].reltaskcode,
  861. :arg_s_sptcheck.arg_s_mx[i].backqty,
  862. :arg_s_sptcheck.arg_s_mx[i].notqty,
  863. :arg_s_sptcheck.arg_s_mx[i].status,
  864. :arg_s_sptcheck.arg_s_mx[i].woodcode,
  865. :arg_s_sptcheck.arg_s_mx[i].pcode,
  866. :arg_s_sptcheck.arg_s_mx[i].unit,
  867. :arg_s_sptcheck.arg_s_mx[i].rate,
  868. :arg_s_sptcheck.arg_s_mx[i].badinqty,
  869. :arg_s_sptcheck.arg_s_mx[i].storageid,
  870. :arg_s_sptcheck.arg_s_mx[i].Location);
  871. IF sqlca.SQLCode <> 0 THEN
  872. rslt = 0
  873. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  874. GOTO ext
  875. END IF
  876. NEXT
  877. ext:
  878. IF rslt = 0 THEN
  879. ROLLBACK;
  880. ELSEIF arg_ifcommit And rslt = 1 THEN
  881. COMMIT;
  882. END IF
  883. RETURN rslt
  884. end function
  885. public function integer getinfo (long arg_billid, ref s_sptcheck arg_ref_s_ch, ref string arg_msg);Int rslt = 1
  886. Long i = 1,no_mxcheck = 0
  887. IF arg_billid <= 0 THEN
  888. rslt = 0
  889. arg_msg = '错误单据唯一码'
  890. GOTO ext
  891. END IF
  892. IF p_getinfo(arg_billid,arg_ref_s_ch,arg_msg) = 0 THEN
  893. rslt = 0
  894. GOTO ext
  895. END IF
  896. //用游标读取明细
  897. DECLARE cur_mx CURSOR FOR
  898. SELECT u_sptcheck_mx.printid,u_sptcheck_mx.mtrlid,u_sptcheck_mx.checktype,
  899. u_sptcheck_mx.checkqty,u_sptcheck_mx.badqty,u_sptcheck_mx.goodqty,
  900. u_sptcheck_mx.reason,u_sptcheck_mx.mxdscrp,u_sptcheck_mx.iftask,
  901. u_sptcheck_mx.reltaskid,u_sptcheck_mx.reltaskprintid,u_sptcheck_mx.reltaskcode,
  902. u_sptcheck_mx.backqty,u_sptcheck_mx.notqty,u_sptcheck_mx.status,
  903. u_sptcheck_mx.woodcode,u_sptcheck_mx.pcode,u_sptcheck_mx.unit,
  904. u_sptcheck_mx.rate,u_sptcheck_mx.badinqty,u_sptcheck_mx.storageid,
  905. u_mtrldef.mtrlcode,u_sptcheck_mx.location
  906. FROM u_sptcheck_mx LEFT OUTER JOIN
  907. u_mtrldef ON u_sptcheck_mx.mtrlid = u_mtrldef.mtrlid
  908. WHERE u_sptcheck_mx.billid = :arg_billid
  909. Order By u_sptcheck_mx.printid;
  910. OPEN cur_mx;
  911. FETCH cur_mx
  912. INTO :arg_ref_s_ch.arg_s_mx[i].printid,
  913. :arg_ref_s_ch.arg_s_mx[i].mtrlid,
  914. :arg_ref_s_ch.arg_s_mx[i].checktype,
  915. :arg_ref_s_ch.arg_s_mx[i].checkqty,
  916. :arg_ref_s_ch.arg_s_mx[i].badqty,
  917. :arg_ref_s_ch.arg_s_mx[i].goodqty,
  918. :arg_ref_s_ch.arg_s_mx[i].reason,
  919. :arg_ref_s_ch.arg_s_mx[i].mxdscrp,
  920. :arg_ref_s_ch.arg_s_mx[i].iftask,
  921. :arg_ref_s_ch.arg_s_mx[i].reltaskid,
  922. :arg_ref_s_ch.arg_s_mx[i].reltaskprintid,
  923. :arg_ref_s_ch.arg_s_mx[i].reltaskcode,
  924. :arg_ref_s_ch.arg_s_mx[i].backqty,
  925. :arg_ref_s_ch.arg_s_mx[i].notqty,
  926. :arg_ref_s_ch.arg_s_mx[i].status,
  927. :arg_ref_s_ch.arg_s_mx[i].woodcode,
  928. :arg_ref_s_ch.arg_s_mx[i].pcode,
  929. :arg_ref_s_ch.arg_s_mx[i].unit,
  930. :arg_ref_s_ch.arg_s_mx[i].rate,
  931. :arg_ref_s_ch.arg_s_mx[i].badinqty,
  932. :arg_ref_s_ch.arg_s_mx[i].storageid,
  933. :arg_ref_s_ch.arg_s_mx[i].mtrlcode,
  934. :arg_ref_s_ch.arg_s_mx[i].location;
  935. DO WHILE sqlca.SQLCode = 0
  936. i++
  937. FETCH cur_mx
  938. INTO :arg_ref_s_ch.arg_s_mx[i].printid,
  939. :arg_ref_s_ch.arg_s_mx[i].mtrlid,
  940. :arg_ref_s_ch.arg_s_mx[i].checktype,
  941. :arg_ref_s_ch.arg_s_mx[i].checkqty,
  942. :arg_ref_s_ch.arg_s_mx[i].badqty,
  943. :arg_ref_s_ch.arg_s_mx[i].goodqty,
  944. :arg_ref_s_ch.arg_s_mx[i].reason,
  945. :arg_ref_s_ch.arg_s_mx[i].mxdscrp,
  946. :arg_ref_s_ch.arg_s_mx[i].iftask,
  947. :arg_ref_s_ch.arg_s_mx[i].reltaskid,
  948. :arg_ref_s_ch.arg_s_mx[i].reltaskprintid,
  949. :arg_ref_s_ch.arg_s_mx[i].reltaskcode,
  950. :arg_ref_s_ch.arg_s_mx[i].backqty,
  951. :arg_ref_s_ch.arg_s_mx[i].notqty,
  952. :arg_ref_s_ch.arg_s_mx[i].status,
  953. :arg_ref_s_ch.arg_s_mx[i].woodcode,
  954. :arg_ref_s_ch.arg_s_mx[i].pcode,
  955. :arg_ref_s_ch.arg_s_mx[i].unit,
  956. :arg_ref_s_ch.arg_s_mx[i].rate,
  957. :arg_ref_s_ch.arg_s_mx[i].badinqty,
  958. :arg_ref_s_ch.arg_s_mx[i].storageid,
  959. :arg_ref_s_ch.arg_s_mx[i].mtrlcode,
  960. :arg_ref_s_ch.arg_s_mx[i].location;
  961. LOOP
  962. CLOSE cur_mx;
  963. //检验明细是否读入完整
  964. SELECT count(*) INTO :no_mxcheck
  965. FROM u_sptcheck_mx
  966. Where billid = :arg_billid;
  967. IF sqlca.SQLCode <> 0 THEN
  968. rslt = 0
  969. arg_msg = "查询质检单操作失败,单据明细数量"
  970. GOTO ext
  971. END IF
  972. IF i <> (no_mxcheck+1) THEN
  973. rslt = 0
  974. arg_msg = "查询质检单操作失败,单据明细"
  975. GOTO ext
  976. END IF
  977. ext:
  978. RETURN rslt
  979. end function
  980. public function integer uof_add_inqty (long arg_billid, long arg_printid, decimal arg_inqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  981. s_sptcheck arg_s_check
  982. IF arg_billid <= 0 THEN
  983. rslt = 0
  984. arg_msg = '错误送检单唯一码'
  985. GOTO ext
  986. END IF
  987. IF arg_inqty = 0 THEN
  988. rslt = 1
  989. GOTO ext
  990. END IF
  991. IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  992. rslt = 0
  993. GOTO ext
  994. END IF
  995. IF arg_s_check.flag <> 1 THEN
  996. rslt = 0
  997. ARG_MSG = '送检单只有在审核状态下才能操作'
  998. GOTO ext
  999. END IF
  1000. Decimal ld_goodqty,ld_inqty
  1001. SELECT u_sptcheck_mx.goodqty,
  1002. u_sptcheck_mx.inqty
  1003. INTO :ld_goodqty,
  1004. :ld_inqty
  1005. FROM u_sptcheck_mx
  1006. WHERE ( u_sptcheck_mx.billid = :arg_billid ) AND
  1007. ( u_sptcheck_mx.printid = :arg_printid );
  1008. IF sqlca.SQLCode <> 0 THEN
  1009. rslt = 0
  1010. arg_msg = "送检单,查询行"+string(arg_printid)+",资料失败"+"~n"+sqlca.SQLErrText
  1011. GOTO ext
  1012. END IF
  1013. IF ld_goodqty < ld_inqty + arg_inqty THEN
  1014. rslt = 0
  1015. arg_msg = '送检单,行:'+string(arg_printid)+",物料未完成数量只有,"+String(ld_goodqty - ld_inqty,'#,##0.0###')+",不能入仓"+String(arg_inqty,'#,##0.0#')
  1016. GOTO ext
  1017. END IF
  1018. UPDATE u_sptcheck_mx
  1019. SET inqty = inqty + :arg_inqty
  1020. WHERE ( u_sptcheck_mx.billid = :arg_billid ) AND
  1021. ( u_sptcheck_mx.printid = :arg_printid );
  1022. IF sqlca.SQLCode <> 0 THEN
  1023. rslt = 0
  1024. arg_msg = '送检单,行'+string(arg_printid)+",更新入仓数操作失败"+"~n 原因,"+sqlca.SQLErrText
  1025. GOTO ext
  1026. END IF
  1027. ext:
  1028. IF rslt = 0 THEN
  1029. ROLLBACK;
  1030. ELSEIF arg_ifcommit THEN
  1031. COMMIT;
  1032. END IF
  1033. RETURN rslt
  1034. end function
  1035. public function integer first_audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1036. Long i,ll_relcheckbackid,ll_backcnt,count
  1037. IF uo_option_if_oa_sptcheck = -1000 THEN
  1038. rslt = 0
  1039. arg_msg = '选项:[265]供应商采购质检单使用OA审批流程,读取初始默认值失败,操作取消!'
  1040. GOTO ext
  1041. END IF
  1042. IF uo_option_sptcheck_secaudit = -1000 THEN
  1043. rslt = 0
  1044. arg_msg = '选项:[267]供应商采购质检单使用二级审核,读取初始默认值失败,操作取消!'
  1045. GOTO ext
  1046. END IF
  1047. IF uo_option_if_oa_sptcheck_wfjg = -1000 THEN
  1048. rslt = 0
  1049. arg_msg = '选项:[266]供应商外协质检单使用OA审批流程,读取初始默认值失败,操作取消!'
  1050. GOTO ext
  1051. END IF
  1052. IF uo_option_sptcheck_wfjg_secaudit = -1000 THEN
  1053. rslt = 0
  1054. arg_msg = '选项:[268]供应商外协质检单使用二级审核,读取初始默认值失败,操作取消!'
  1055. GOTO ext
  1056. END IF
  1057. s_sptcheck arg_s_check
  1058. IF arg_billid <= 0 THEN
  1059. rslt = 0
  1060. ARG_MSG = '错误单据唯一码'
  1061. GOTO ext
  1062. END IF
  1063. IF getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  1064. rslt = 0
  1065. GOTO ext
  1066. END IF
  1067. IF arg_s_check.flag <> 0 THEN
  1068. rslt = 0
  1069. ARG_MSG = '单据已经审核,不可以再审'
  1070. GOTO ext
  1071. END IF
  1072. //质检单 初审可以不填质检员,初审后终审前填质检员(2张质检单)lhd 20120419
  1073. //IF arg_s_check.billemp = '' THEN
  1074. // rslt = 0
  1075. // ARG_MSG = "请输入质检员"
  1076. // GOTO ext
  1077. //END IF
  1078. //更新审核标记
  1079. UPDATE u_sptcheck
  1080. SET first_auditemp = :arg_opemp,
  1081. first_auditdate = getdate(),
  1082. flag = 4
  1083. WHERE billid = :arg_billid
  1084. And flag = 0;
  1085. IF sqlca.SQLCode <> 0 THEN
  1086. rslt = 0
  1087. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  1088. GOTO ext
  1089. END IF
  1090. IF arg_s_check.billtype = 0 THEN
  1091. IF sys_option_if_oa_sptcheck = 1 And sys_option_sptcheck_secaudit = 1 THEN
  1092. IF f_oa(sqlca,False,ARG_MSG,1684,arg_s_check.scid,arg_billid,arg_s_check.billcode,arg_s_check.relcode,arg_s_check.dscrp) = 0 THEN
  1093. rslt = 0
  1094. GOTO ext
  1095. END IF
  1096. END IF
  1097. ELSEIF arg_s_check.billtype = 1 THEN
  1098. IF sys_option_if_oa_sptcheck_wfjg = 1 And sys_option_sptcheck_wfjg_secaudit = 1 THEN
  1099. IF f_oa(sqlca,False,ARG_MSG,2234,arg_s_check.scid,arg_billid,arg_s_check.billcode,arg_s_check.relcode,arg_s_check.dscrp) = 0 THEN
  1100. rslt = 0
  1101. GOTO ext
  1102. END IF
  1103. END IF
  1104. END IF
  1105. ext:
  1106. IF rslt = 0 THEN
  1107. ROLLBACK;
  1108. ELSEIF rslt = 1 And arg_ifcommit THEN
  1109. COMMIT;
  1110. END IF
  1111. RETURN rslt
  1112. end function
  1113. public function integer first_caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1114. Long i,ll_relcheckbackid,ll_backcnt,count
  1115. DateTime null_dt
  1116. SetNull(null_dt)
  1117. IF uo_option_if_oa_sptcheck = -1000 THEN
  1118. rslt = 0
  1119. arg_msg = '选项:[265]供应商采购质检单使用OA审批流程,读取初始默认值失败,操作取消!'
  1120. GOTO ext
  1121. END IF
  1122. IF uo_option_sptcheck_secaudit = -1000 THEN
  1123. rslt = 0
  1124. arg_msg = '选项:[267]供应商采购质检单使用二级审核,读取初始默认值失败,操作取消!'
  1125. GOTO ext
  1126. END IF
  1127. IF uo_option_if_oa_sptcheck_wfjg = -1000 THEN
  1128. rslt = 0
  1129. arg_msg = '选项:[266]供应商外协质检单使用OA审批流程,读取初始默认值失败,操作取消!'
  1130. GOTO ext
  1131. END IF
  1132. IF uo_option_sptcheck_wfjg_secaudit = -1000 THEN
  1133. rslt = 0
  1134. arg_msg = '选项:[268]供应商外协质检单使用二级审核,读取初始默认值失败,操作取消!'
  1135. GOTO ext
  1136. END IF
  1137. s_sptcheck arg_s_check
  1138. IF arg_billid <= 0 THEN
  1139. rslt = 0
  1140. ARG_MSG = '错误单据唯一码'
  1141. GOTO ext
  1142. END IF
  1143. IF getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  1144. rslt = 0
  1145. GOTO ext
  1146. END IF
  1147. IF arg_s_check.flag <> 4 THEN
  1148. rslt = 0
  1149. ARG_MSG = '单据未审核,不可以撤审'
  1150. GOTO ext
  1151. END IF
  1152. IF arg_s_check.billtype = 0 THEN
  1153. IF uo_option_if_oa_sptcheck = 1 And uo_option_sptcheck_secaudit = 1 And audit_buildtype = 0 THEN
  1154. IF f_check_if_oaflow_caudit(arg_s_check.scid,arg_billid,1684,arg_msg ) = 0 THEN
  1155. rslt = 0
  1156. GOTO ext
  1157. END IF
  1158. END IF
  1159. ELSEIF arg_s_check.billtype = 1 THEN
  1160. IF uo_option_if_oa_sptcheck_wfjg = 1 And uo_option_sptcheck_wfjg_secaudit = 1 And audit_buildtype = 0 THEN
  1161. IF f_check_if_oaflow_caudit(arg_s_check.scid,arg_billid,2234,arg_msg ) = 0 THEN
  1162. rslt = 0
  1163. GOTO ext
  1164. END IF
  1165. END IF
  1166. END IF
  1167. //更新审核标记
  1168. UPDATE u_sptcheck
  1169. SET first_auditemp = '',
  1170. first_auditdate = :null_dt,
  1171. flag = 0
  1172. WHERE billid = :arg_billid
  1173. AND flag = 4;
  1174. IF sqlca.SQLCode <> 0 THEN
  1175. rslt = 0
  1176. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  1177. GOTO ext
  1178. END IF
  1179. ext:
  1180. IF rslt = 0 THEN
  1181. ROLLBACK;
  1182. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1183. COMMIT;
  1184. END IF
  1185. RETURN rslt
  1186. end function
  1187. public function integer uof_add_billemp (long arg_billid, string arg_billemp, ref string arg_msg);Int rslt = 1
  1188. s_sptcheck arg_s_check
  1189. IF arg_billid <= 0 THEN
  1190. rslt = 0
  1191. arg_msg = '错误单据唯一码'
  1192. GOTO ext
  1193. END IF
  1194. IF arg_billemp = '' THEN
  1195. rslt = 0
  1196. arg_msg = "质检员内容为空,操作取消"
  1197. GOTO ext
  1198. END IF
  1199. IF p_getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN
  1200. rslt = 0
  1201. GOTO ext
  1202. END IF
  1203. IF arg_s_check.flag <> 4 THEN
  1204. rslt = 0
  1205. arg_msg = '单据非待初审状态,不可以修改质检员'
  1206. GOTO ext
  1207. END IF
  1208. UPDATE u_sptcheck
  1209. SET billemp = :arg_billemp
  1210. WHERE u_sptcheck.billid = :arg_billid
  1211. AND flag = 4;
  1212. IF SQLCA.SQLCode <> 0 THEN
  1213. rslt = 0
  1214. arg_msg = "因网络或其它原因导致修改质检员操作失败"+"~n"+SQLCA.SQLErrText
  1215. GOTO ext
  1216. END IF
  1217. ext:
  1218. IF rslt = 1 THEN
  1219. COMMIT;
  1220. ELSE
  1221. ROLLBACK;
  1222. END IF
  1223. Return (rslt)
  1224. end function
  1225. public function integer uof_create_inware_buy (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1226. Long ll_storageid_arr[]
  1227. Long ll_mxbt,cnt
  1228. Long i,j
  1229. Long ll_moneyid,ll_moneyid_native,ll_banktypeid,ll_banktypeid_mxbuytask
  1230. Long ll_mx_buytaskmoneyid,ll_mx_buytaskmoneyid_cnt
  1231. Long ll_moneyid_check
  1232. Decimal ld_mrate,ld_mrate_native,ld_mrate_mxbuytask
  1233. Decimal ld_enprice,ld_rebate
  1234. Long ll_sptid
  1235. DateTime server_dt
  1236. decimal ld_tax
  1237. string ls_plancode
  1238. SELECT Top 1 getdate() Into :server_dt From u_user;
  1239. IF sqlca.SQLCode <> 0 THEN
  1240. rslt = 0
  1241. arg_msg = "查询操作失败,日期 "
  1242. GOTO ext
  1243. END IF
  1244. s_sptcheck arg_s_check
  1245. uo_inware_buy uo_ware
  1246. uo_ware = Create uo_inware_buy
  1247. uo_ware.commit_transaction = sqlca
  1248. IF getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN
  1249. rslt = 0
  1250. GOTO ext
  1251. END IF
  1252. SELECT moneyid,rate INTO :ll_moneyid_native,:ld_mrate_native
  1253. FROM cw_currency
  1254. Where native = 1;
  1255. IF sqlca.SQLCode <> 0 THEN
  1256. arg_msg = '查询本位币资料失败,'+sqlca.SQLErrText
  1257. rslt = 0
  1258. GOTO ext
  1259. END IF
  1260. FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1
  1261. IF arg_s_check.arg_s_mx[i].goodqty <> 0 And arg_s_check.arg_s_mx[i].storageid > 0 THEN
  1262. IF arg_s_check.arg_s_mx[i].reltaskid > 0 THEN
  1263. SELECT moneyid,mrate,banktypeid
  1264. INTO :ll_mx_buytaskmoneyid,:ld_mrate_mxbuytask,:ll_banktypeid_mxbuytask
  1265. FROM u_buytask
  1266. WHERE scid = :arg_s_check.scid
  1267. And taskid = :arg_s_check.arg_s_mx[i].reltaskid;
  1268. IF sqlca.SQLCode <> 0 THEN
  1269. rslt = 0
  1270. arg_msg = '查询明细行:'+String(i)+',对应采购订单币种失败,'+sqlca.SQLErrText
  1271. GOTO ext
  1272. END IF
  1273. ELSE
  1274. ll_mx_buytaskmoneyid = ll_moneyid_native
  1275. ld_mrate_mxbuytask = ld_mrate_native
  1276. END IF
  1277. IF ll_moneyid_check <> ll_mx_buytaskmoneyid THEN
  1278. ll_mx_buytaskmoneyid_cnt++
  1279. ll_moneyid_check = ll_mx_buytaskmoneyid
  1280. END IF
  1281. FOR j = 1 To ll_mxbt
  1282. IF arg_s_check.arg_s_mx[i].storageid = ll_storageid_arr[j] THEN
  1283. GOTO _next
  1284. END IF
  1285. NEXT
  1286. ll_mxbt++
  1287. ll_storageid_arr[ll_mxbt] = arg_s_check.arg_s_mx[i].storageid
  1288. END IF
  1289. _next:
  1290. NEXT
  1291. IF ll_mx_buytaskmoneyid_cnt > 1 THEN
  1292. arg_msg = '质检单明细对应订单币种多于1个,不能自动生成采购收货单'
  1293. rslt = 0
  1294. GOTO ext
  1295. END IF
  1296. SELECT banktypeid
  1297. INTO :ll_banktypeid
  1298. FROM u_spt
  1299. Where sptid = :arg_s_check.sptid;
  1300. IF sqlca.SQLCode <> 0 THEN
  1301. rslt = 0
  1302. arg_msg = '查询供应商默认结算方式失败,'+sqlca.SQLErrText
  1303. GOTO ext
  1304. END IF
  1305. //每个仓库建立一张收货单
  1306. FOR i = 1 To ll_mxbt
  1307. IF uo_ware.newbegin(arg_s_check.scid,1,arg_msg) = 0 THEN
  1308. rslt = 0
  1309. arg_msg = '第'+String(i)+'行,'+arg_msg
  1310. GOTO ext
  1311. END IF
  1312. uo_ware.indate = server_dt
  1313. uo_ware.inrep = publ_operator
  1314. uo_ware.part = arg_s_check.billcode
  1315. uo_ware.dscrp = arg_s_check.dscrp //'质检单:'+arg_s_check.billcode+'审核自动生成'
  1316. uo_ware.storageid = ll_storageid_arr[i]
  1317. uo_ware.sptid = arg_s_check.sptid
  1318. uo_ware.otheramt = 0
  1319. IF ll_banktypeid_mxbuytask > 0 THEN
  1320. uo_ware.relint_1 = ll_banktypeid_mxbuytask
  1321. ELSE
  1322. uo_ware.relint_1 = ll_banktypeid
  1323. END IF
  1324. uo_ware.relid = 0
  1325. uo_ware.thflag = 0
  1326. uo_ware.moneyid = ll_mx_buytaskmoneyid
  1327. uo_ware.mrate = ld_mrate_mxbuytask
  1328. cnt = 0
  1329. FOR j = 1 To UpperBound(arg_s_check.arg_s_mx) - 1
  1330. IF arg_s_check.arg_s_mx[j].goodqty <> 0 And arg_s_check.arg_s_mx[j].storageid = ll_storageid_arr[i] THEN
  1331. cnt++
  1332. SELECT u_buyTaskMx.enprice,
  1333. u_buyTaskMx.rebate,
  1334. u_SaleTask.CusID,
  1335. u_buyTaskMx.tax,
  1336. u_buyTaskMx.plancode
  1337. INTO :ld_enprice,:ld_rebate,:ll_sptid,:ld_tax, :ls_plancode
  1338. FROM u_SaleTaskMx INNER JOIN
  1339. u_SaleTask ON u_SaleTaskMx.scid = u_SaleTask.scid AND
  1340. u_SaleTaskMx.TaskID = u_SaleTask.TaskID RIGHT OUTER JOIN
  1341. u_buyTaskMx ON u_SaleTaskMx.printid = u_buyTaskMx.taskmxprintid AND
  1342. u_SaleTaskMx.TaskID = u_buyTaskMx.orderid AND
  1343. u_SaleTaskMx.scid = u_buyTaskMx.scid RIGHT OUTER JOIN
  1344. u_sptcheck_mx INNER JOIN
  1345. u_sptcheck ON u_sptcheck_mx.billid = u_sptcheck.billid ON
  1346. u_buyTaskMx.scid = u_sptcheck.scid AND
  1347. u_buyTaskMx.TaskID = u_sptcheck_mx.reltaskid AND
  1348. u_buyTaskMx.printid = u_sptcheck_mx.reltaskprintid
  1349. WHERE u_sptcheck_mx.billid = :arg_billid
  1350. And u_sptcheck_mx.printid = :arg_s_check.arg_s_mx[j].printid;
  1351. IF sqlca.SQLCode <> 0 THEN
  1352. ld_enprice = 0
  1353. ld_rebate = 1
  1354. ll_sptid = 0
  1355. ls_plancode = ''
  1356. END IF
  1357. IF IsNull(ld_enprice) THEN ld_enprice = 0
  1358. IF IsNull(ld_rebate) THEN ld_rebate = 1
  1359. IF IsNull(ll_sptid) THEN ll_sptid = 0
  1360. if isnull(ld_tax) then ld_tax = 0
  1361. if isnull(ls_plancode) then ls_plancode = ''
  1362. IF uo_ware.acceptmx(cnt,&
  1363. arg_s_check.arg_s_mx[j].mtrlid,&
  1364. arg_s_check.arg_s_mx[j].mtrlcode,&
  1365. ls_plancode,&
  1366. arg_s_check.arg_s_mx[j].status,&
  1367. arg_s_check.arg_s_mx[j].goodqty,&
  1368. ld_enprice,&
  1369. ld_rebate,&
  1370. arg_s_check.arg_s_mx[j].mxdscrp,&
  1371. arg_msg,0,&
  1372. arg_s_check.arg_s_mx[j].reltaskid,&
  1373. arg_s_check.arg_s_mx[j].iftask,&
  1374. arg_s_check.arg_s_mx[j].woodcode,&
  1375. arg_s_check.arg_s_mx[j].pcode,&
  1376. ll_sptid,&
  1377. arg_s_check.arg_s_mx[j].unit,&
  1378. arg_s_check.arg_s_mx[j].rate,&
  1379. arg_s_check.arg_s_mx[j].goodqty * arg_s_check.arg_s_mx[j].rate ,&
  1380. arg_s_check.arg_s_mx[j].reltaskprintid,&
  1381. arg_s_check.arg_s_mx[j].goodqty,&
  1382. '','',&
  1383. arg_billid,&
  1384. arg_s_check.arg_s_mx[j].printid,&
  1385. '',&
  1386. arg_s_check.arg_s_mx[j].location,&
  1387. arg_s_check.arg_s_mx[j].goodqty,&
  1388. ld_tax) = 0 THEN
  1389. rslt = 0
  1390. arg_msg = '第'+String(i)+'行,'+arg_msg
  1391. GOTO ext
  1392. END IF
  1393. END IF
  1394. NEXT
  1395. IF cnt > 0 THEN
  1396. IF uo_ware.Save(False,arg_msg) = 0 THEN
  1397. rslt = 0
  1398. GOTO ext
  1399. END IF
  1400. END IF
  1401. NEXT
  1402. ext:
  1403. IF rslt = 0 THEN
  1404. ROLLBACK;
  1405. ELSEIF rslt = 1 And arg_ifcommit THEN
  1406. COMMIT;
  1407. END IF
  1408. Destroy uo_ware
  1409. RETURN rslt
  1410. end function
  1411. public function integer uof_del_inware_buy (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1412. Long ll_scid,ll_cnt
  1413. Long ll_i
  1414. Long ll_inwareid_arr[]
  1415. String ls_inwarecode_arr[]
  1416. uo_inware_buy uo_ware
  1417. uo_ware = Create uo_inware_buy
  1418. uo_ware.commit_transaction = sqlca
  1419. SELECT scid
  1420. INTO :ll_scid
  1421. FROM u_sptcheck
  1422. Where billid = :arg_billid;
  1423. IF sqlca.SQLCode <> 0 THEN
  1424. rslt = 0
  1425. arg_msg = '查询质检单分部失败,'+sqlca.SQLErrText
  1426. GOTO ext
  1427. END IF
  1428. ll_cnt = 1
  1429. DECLARE cur_inware CURSOR FOR
  1430. SELECT distinct u_inware.inwareid, u_inware.inwarecode
  1431. FROM u_inwaremx INNER JOIN
  1432. u_inware ON u_inwaremx.scid = u_inware.scid AND
  1433. u_inwaremx.inwareid = u_inware.inwareid
  1434. WHERE u_inwaremx.relbillid = :arg_billid
  1435. And u_inwaremx.scid = :ll_scid
  1436. and u_inware.billtype = 1;
  1437. OPEN cur_inware;
  1438. FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt];
  1439. DO WHILE sqlca.SQLCode = 0
  1440. ll_cnt++
  1441. FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt];
  1442. LOOP
  1443. CLOSE cur_inware;
  1444. FOR ll_i = 1 To ll_cnt - 1
  1445. IF uo_ware.del(ll_scid,ll_inwareid_arr[ll_i],arg_msg,False) = 0 THEN
  1446. rslt = 0
  1447. arg_msg = '删除相关采购收货单:'+ls_inwarecode_arr[ll_i]+'失败,'+arg_msg
  1448. GOTO ext
  1449. END IF
  1450. //删除日志
  1451. if f_setsysoplog('采购收货单','送检单撤审自动删除,id:'+string(ll_inwareid_arr[ll_i])+',code:'+ls_inwarecode_arr[ll_i],arg_msg,false) = 0 then
  1452. rslt = 0
  1453. arg_msg = '删除相关采购收货单:'+ls_inwarecode_arr[ll_i]+',记录操作日志失败,'+arg_msg
  1454. GOTO ext
  1455. end if
  1456. NEXT
  1457. ext:
  1458. IF rslt = 0 THEN
  1459. ROLLBACK;
  1460. ELSEIF rslt = 1 And arg_ifcommit THEN
  1461. COMMIT;
  1462. END IF
  1463. Destroy uo_ware
  1464. RETURN rslt
  1465. end function
  1466. public function integer uof_create_inware_wfjg (long arg_billid, ref string arg_msg, boolean arg_ifcommit);
  1467. Int rslt = 1
  1468. IF uo_option_wfjg_price_cmp = -1000 THEN
  1469. rslt = 0
  1470. arg_msg = '选项:[284]外协收货单外协件成本价计算方法,读取初始默认值失败,操作取消!'
  1471. GOTO ext
  1472. END IF
  1473. s_mtrlprice_mx arg_s_mx[]
  1474. Long ll_storageid_arr[]
  1475. Long ll_mxbt,cnt,cnt_m,cnt_out
  1476. Long i,j,k,ll_i, ll_j
  1477. Long ll_moneyid,ll_banktypeid
  1478. Decimal ld_mrate,ld_enprice,ld_rebate,ld_jgprice
  1479. String ls_jgdscrp
  1480. Long ll_sptid
  1481. DateTime server_dt
  1482. String ls_pfcode
  1483. Int li_wfjgdec
  1484. Decimal ld_price,ld_mprice,ld_outcost,ld_wagecost,ld_eqprice
  1485. Decimal mtrlwaresum_qty,r_qty,i_qty,ins_planprice,ins_price,ld_qty_tmp
  1486. //,ins_mtrlwareid
  1487. Decimal ld_qty_out,ld_taxrate
  1488. Decimal ld_cost_this,ld_cost_tmp
  1489. Long ll_mxbt_cost
  1490. Long ll_tmp
  1491. Long ll_mtrlwareid[]
  1492. Decimal lde_noallocqty[]
  1493. Decimal lde_cost[]
  1494. Decimal lde_restqty
  1495. string ls_plancode
  1496. SELECT Top 1 getdate() Into :server_dt From u_user;
  1497. IF sqlca.SQLCode <> 0 THEN
  1498. rslt = 0
  1499. arg_msg = "查询操作失败,日期 "
  1500. GOTO ext
  1501. END IF
  1502. s_sptcheck arg_s_check
  1503. s_mtrldef_wfjg_array s_wfjg,s_empty
  1504. uo_inware_wfjg uo_ware
  1505. uo_ware = Create uo_inware_wfjg
  1506. uo_ware.commit_transaction = sqlca
  1507. uo_cmplcost uo_cmpl
  1508. uo_cmpl = Create uo_cmplcost
  1509. IF getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN
  1510. rslt = 0
  1511. GOTO ext
  1512. END IF
  1513. SELECT banktypeid
  1514. INTO :ll_banktypeid
  1515. FROM u_spt
  1516. Where sptid = :arg_s_check.sptid;
  1517. IF sqlca.SQLCode <> 0 THEN
  1518. rslt = 0
  1519. arg_msg = '查询供应商默认结算方式失败,'+sqlca.SQLErrText
  1520. GOTO ext
  1521. END IF
  1522. IF uo_ware.newbegin(arg_s_check.scid,4,arg_msg) = 0 THEN
  1523. rslt = 0
  1524. arg_msg = '第'+String(i)+'行,'+arg_msg
  1525. GOTO ext
  1526. END IF
  1527. uo_ware.indate = server_dt
  1528. uo_ware.inrep = publ_operator
  1529. uo_ware.part = arg_s_check.billcode
  1530. uo_ware.dscrp = arg_s_check.dscrp // '质检单:'+arg_s_check.billcode+'审核自动生成'
  1531. uo_ware.sptid = arg_s_check.sptid
  1532. uo_ware.relint_1 = ll_banktypeid
  1533. uo_ware.thflag = 0
  1534. cnt = 0
  1535. FOR j = 1 To UpperBound(arg_s_check.arg_s_mx) - 1
  1536. IF arg_s_check.arg_s_mx[j].goodqty <> 0 And arg_s_check.arg_s_mx[j].storageid > 0 THEN
  1537. cnt++
  1538. SELECT u_order_wfjgMx.price,
  1539. u_order_wfjgMx.jgdscrp,
  1540. u_order_wfjgMx.orderid,
  1541. u_order_wfjgMx.taxrate,
  1542. u_order_wfjgMx.plancode
  1543. INTO :ld_jgprice,
  1544. :ls_jgdscrp,
  1545. :ll_sptid,
  1546. :ld_taxrate,
  1547. :ls_plancode
  1548. FROM u_order_wfjgMx RIGHT OUTER JOIN
  1549. u_sptcheck_mx ON u_order_wfjgMx.wfjgID = u_sptcheck_mx.reltaskid AND
  1550. u_order_wfjgMx.printid = u_sptcheck_mx.reltaskprintid
  1551. WHERE u_sptcheck_mx.billid = :arg_billid
  1552. And u_sptcheck_mx.printid = :arg_s_check.arg_s_mx[j].printid;
  1553. IF sqlca.SQLCode <> 0 THEN
  1554. ld_jgprice = 0
  1555. ll_sptid = 0
  1556. ls_jgdscrp = ''
  1557. ls_plancode = ''
  1558. END IF
  1559. IF IsNull(ld_jgprice) THEN ld_jgprice = 0
  1560. IF IsNull(ll_sptid) THEN ll_sptid = 0
  1561. IF IsNull(ls_jgdscrp) THEN ls_jgdscrp = ''
  1562. IF IsNull(ls_plancode) THEN ls_plancode = ''
  1563. s_wfjg = s_empty
  1564. ls_pfcode = f_get_dft_pf(arg_s_check.arg_s_mx[j].mtrlid)
  1565. k = 1
  1566. IF arg_s_check.arg_s_mx[j].iftask = 0 THEN
  1567. DECLARE cur_inmx CURSOR FOR
  1568. SELECT u_PrdPF.SonMtrlid,
  1569. u_mtrldef.unit,
  1570. u_mtrldef.wfjgdec,
  1571. :arg_s_check.arg_s_mx[j].goodqty * :arg_s_check.arg_s_mx[j].rate * u_prdpf.Sonscale / (1 - u_PrdPF.sonloss) + u_PrdPF.SonDECLoss,
  1572. u_prdpf.Sonscale / (1 - u_PrdPF.sonloss) + u_PrdPF.SonDECLoss
  1573. FROM u_PrdPF INNER JOIN
  1574. u_mtrldef ON u_PrdPF.SonMtrlid = u_mtrldef.mtrlid
  1575. WHERE ( u_PrdPF.mtrlid = :arg_s_check.arg_s_mx[j].mtrlid )
  1576. And ( u_PrdPF.pfcode = :ls_pfcode ) ;
  1577. OPEN cur_inmx;
  1578. FETCH cur_inmx INTO :s_wfjg.mtrlid[k],:s_wfjg.unit[k],
  1579. :li_wfjgdec,:s_wfjg.qty[k],:s_wfjg.Sonscale[k];
  1580. s_wfjg.qty[k] = Round(s_wfjg.qty[k],li_wfjgdec)
  1581. s_wfjg.Sonscale[k] = Round(s_wfjg.Sonscale[k],li_wfjgdec)
  1582. DO WHILE sqlca.SQLCode = 0
  1583. k++
  1584. FETCH cur_inmx INTO :s_wfjg.mtrlid[k],:s_wfjg.unit[k],
  1585. :li_wfjgdec,:s_wfjg.qty[k],:s_wfjg.Sonscale[k];
  1586. s_wfjg.qty[k] = Round(s_wfjg.qty[k],li_wfjgdec)
  1587. s_wfjg.Sonscale[k] = Round(s_wfjg.Sonscale[k],li_wfjgdec)
  1588. LOOP
  1589. CLOSE cur_inmx;
  1590. ELSE
  1591. DECLARE cur_outmx CURSOR FOR
  1592. SELECT u_order_wfjgmx_out_mx.mtrlid,
  1593. u_mtrldef.unit,
  1594. u_mtrldef.wfjgdec,
  1595. :arg_s_check.arg_s_mx[j].goodqty * :arg_s_check.arg_s_mx[j].rate * (u_order_wfjgmx_out_mx.qty / u_order_wfjgMx.Qty ),
  1596. (u_order_wfjgmx_out_mx.qty / u_order_wfjgMx.Qty )
  1597. FROM u_order_wfjgmx_out_mx INNER JOIN
  1598. u_mtrldef ON u_order_wfjgmx_out_mx.mtrlid = u_mtrldef.mtrlid INNER JOIN
  1599. u_order_wfjgMx ON u_order_wfjgmx_out_mx.scid = u_order_wfjgMx.scid AND
  1600. u_order_wfjgmx_out_mx.wfjgid = u_order_wfjgMx.wfjgID AND
  1601. u_order_wfjgmx_out_mx.relprintid = u_order_wfjgMx.printid
  1602. WHERE u_order_wfjgmx_out_mx.scid = :arg_s_check.scid
  1603. AND u_order_wfjgmx_out_mx.wfjgid = :arg_s_check.arg_s_mx[j].reltaskid
  1604. AND u_order_wfjgmx_out_mx.relprintid = :arg_s_check.arg_s_mx[j].reltaskprintid
  1605. And u_order_wfjgMx.qty > 0 ;
  1606. OPEN cur_outmx;
  1607. FETCH cur_outmx INTO :s_wfjg.mtrlid[k],:s_wfjg.unit[k],
  1608. :li_wfjgdec,:s_wfjg.qty[k],:s_wfjg.Sonscale[k];
  1609. s_wfjg.qty[k] = Round(s_wfjg.qty[k],li_wfjgdec)
  1610. s_wfjg.Sonscale[k] = Round(s_wfjg.Sonscale[k],li_wfjgdec)
  1611. DO WHILE sqlca.SQLCode = 0
  1612. k++
  1613. FETCH cur_outmx INTO :s_wfjg.mtrlid[k],:s_wfjg.unit[k],
  1614. :li_wfjgdec,:s_wfjg.qty[k],:s_wfjg.Sonscale[k];
  1615. s_wfjg.qty[k] = Round(s_wfjg.qty[k],li_wfjgdec)
  1616. s_wfjg.Sonscale[k] = Round(s_wfjg.Sonscale[k],li_wfjgdec)
  1617. LOOP
  1618. CLOSE cur_outmx;
  1619. END IF
  1620. ld_cost_this = 0
  1621. //计算发出明细
  1622. FOR ll_i = 1 To k - 1
  1623. lde_restqty = s_wfjg.qty[ll_i]
  1624. ll_mxbt_cost = 0
  1625. ll_tmp = 1
  1626. DECLARE pf_cur CURSOR FOR
  1627. SELECT ow_wfjgware.mtrlwareid,
  1628. ow_wfjgware.noallocqty,
  1629. ow_wfjgware.cost
  1630. FROM ow_wfjgware
  1631. WHERE ow_wfjgware.mtrlid = :s_wfjg.mtrlid[ll_i]
  1632. AND ow_wfjgware.sptid = :arg_s_check.sptid
  1633. Order By ow_wfjgware.noallocqty;
  1634. OPEN pf_cur;
  1635. FETCH pf_cur Into :ll_mtrlwareid[ll_tmp],:lde_noallocqty[ll_tmp],:lde_cost[ll_tmp];
  1636. DO WHILE sqlca.SQLCode = 0
  1637. ll_tmp++
  1638. FETCH pf_cur Into :ll_mtrlwareid[ll_tmp],:lde_noallocqty[ll_tmp],:lde_cost[ll_tmp];
  1639. LOOP
  1640. CLOSE pf_cur;
  1641. ll_tmp -= 1
  1642. IF ll_tmp = 0 THEN
  1643. ll_tmp = 1
  1644. IF f_insert_0_sptware(arg_s_check.scid, ll_mtrlwareid[ll_tmp], s_wfjg.mtrlid[ll_i], '', arg_s_check.sptid, '', '', '', '', 0, arg_msg) = 0 THEN
  1645. rslt = 0
  1646. GOTO ext
  1647. END IF
  1648. lde_noallocqty[ll_tmp] = 0
  1649. lde_cost[ll_tmp] = 0
  1650. END IF
  1651. FOR ll_j = 1 To ll_tmp
  1652. IF ll_j = ll_tmp THEN
  1653. ld_qty_out = lde_restqty
  1654. lde_restqty = 0
  1655. ELSE
  1656. IF lde_noallocqty[ll_j] > 0 THEN
  1657. IF lde_restqty > lde_noallocqty[ll_j] THEN
  1658. ld_qty_out = lde_noallocqty[ll_j]
  1659. ELSE
  1660. ld_qty_out = lde_restqty
  1661. END IF
  1662. lde_restqty -= ld_qty_out
  1663. ELSE
  1664. ld_qty_out = 0
  1665. //lde_restqty = lde_restqty
  1666. END IF
  1667. END IF
  1668. IF ld_qty_out > 0 THEN
  1669. ll_mxbt_cost++
  1670. IF ll_mxbt_cost = 1 THEN
  1671. ld_cost_this = ld_cost_this + lde_cost[ll_j] * s_wfjg.Sonscale[ll_i]
  1672. END IF
  1673. cnt_out++
  1674. IF uo_ware.acceptmx_bef( ll_mtrlwareid[ll_j],&
  1675. ld_qty_out,&
  1676. '',&
  1677. cnt_out,&
  1678. s_wfjg.unit[ll_i],&
  1679. ld_qty_out,&
  1680. 1,&
  1681. cnt,&
  1682. arg_msg) = 0 THEN
  1683. rslt = 0
  1684. arg_msg = '第'+String(j)+'行,'+arg_msg
  1685. GOTO ext
  1686. END IF
  1687. END IF
  1688. NEXT
  1689. NEXT
  1690. //计算收货明细
  1691. ls_pfcode = f_get_dft_pf(arg_s_check.arg_s_mx[j].mtrlid)
  1692. IF uo_option_wfjg_price_cmp = 0 THEN
  1693. IF uo_cmpl.uof_get_cost(0,arg_s_check.scid,arg_s_check.arg_s_mx[j].mtrlid,arg_s_check.arg_s_mx[j].mtrlcode,ls_pfcode,1,1,ld_price,ld_mprice,ld_outcost,ld_wagecost,ld_eqprice,0,arg_msg,arg_s_mx,1) = 0 THEN
  1694. ld_enprice = 0
  1695. ELSE
  1696. ld_enprice = Round(ld_price,2) + Round(ld_mprice,2) + Round(ld_outcost,2) + Round(ld_wagecost,2) + Round(ld_eqprice,2)
  1697. END IF
  1698. ELSE
  1699. ld_enprice = ld_cost_this
  1700. END IF
  1701. IF IsNull(ld_enprice) THEN ld_enprice = 0
  1702. IF uo_ware.acceptmx(cnt,&
  1703. arg_s_check.arg_s_mx[j].mtrlid,&
  1704. arg_s_check.arg_s_mx[j].mtrlcode,&
  1705. ls_plancode,&
  1706. arg_s_check.arg_s_mx[j].status,&
  1707. arg_s_check.arg_s_mx[j].goodqty,&
  1708. ld_enprice,&
  1709. 1,&
  1710. arg_s_check.arg_s_mx[j].mxdscrp,&
  1711. arg_msg,&
  1712. ld_jgprice,&
  1713. arg_s_check.arg_s_mx[j].reltaskid,&
  1714. arg_s_check.arg_s_mx[j].iftask,&
  1715. arg_s_check.arg_s_mx[j].woodcode,&
  1716. arg_s_check.arg_s_mx[j].pcode,&
  1717. ll_sptid,&
  1718. arg_s_check.arg_s_mx[j].unit,&
  1719. arg_s_check.arg_s_mx[j].rate,&
  1720. arg_s_check.arg_s_mx[j].goodqty * arg_s_check.arg_s_mx[j].rate ,&
  1721. arg_s_check.arg_s_mx[j].storageid,&
  1722. ls_jgdscrp,&
  1723. arg_s_check.arg_s_mx[j].reltaskprintid,&
  1724. 0,&
  1725. arg_s_check.arg_s_mx[j].goodqty,&
  1726. '',&
  1727. arg_billid,&
  1728. arg_s_check.arg_s_mx[j].printid,&
  1729. '',&
  1730. arg_s_check.arg_s_mx[j].Location,&
  1731. ld_taxrate) = 0 THEN
  1732. rslt = 0
  1733. arg_msg = '第'+String(j)+'行,'+arg_msg
  1734. GOTO ext
  1735. END IF
  1736. END IF
  1737. NEXT
  1738. IF cnt > 0 THEN
  1739. IF uo_ware.Save(False,arg_msg) = 0 THEN
  1740. rslt = 0
  1741. GOTO ext
  1742. END IF
  1743. END IF
  1744. ext:
  1745. IF rslt = 0 THEN
  1746. ROLLBACK;
  1747. ELSEIF rslt = 1 And arg_ifcommit THEN
  1748. COMMIT;
  1749. END IF
  1750. Destroy uo_ware
  1751. Destroy uo_cmpl
  1752. RETURN rslt
  1753. end function
  1754. public function integer uof_del_inware_wfjg (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1755. Long ll_scid,ll_cnt
  1756. Long ll_i
  1757. Long ll_inwareid_arr[]
  1758. String ls_inwarecode_arr[]
  1759. uo_inware_wfjg uo_ware
  1760. uo_ware = Create uo_inware_wfjg
  1761. uo_ware.commit_transaction = sqlca
  1762. SELECT scid
  1763. INTO :ll_scid
  1764. FROM u_sptcheck
  1765. Where billid = :arg_billid;
  1766. IF sqlca.SQLCode <> 0 THEN
  1767. rslt = 0
  1768. arg_msg = '查询质检单分部失败,'+sqlca.SQLErrText
  1769. GOTO ext
  1770. END IF
  1771. ll_cnt = 1
  1772. DECLARE cur_inware CURSOR FOR
  1773. SELECT distinct ow_wfjg_in.inwareid, ow_wfjg_in.inwarecode
  1774. FROM ow_wfjgmx_in_aft INNER JOIN
  1775. ow_wfjg_in ON ow_wfjgmx_in_aft.scid = ow_wfjg_in.scid AND
  1776. ow_wfjgmx_in_aft.inwareid = ow_wfjg_in.inwareid
  1777. WHERE ow_wfjgmx_in_aft.relbillid = :arg_billid
  1778. AND ow_wfjgmx_in_aft.scid = :ll_scid
  1779. And ow_wfjg_in.billtype = 4;
  1780. OPEN cur_inware;
  1781. FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt];
  1782. DO WHILE sqlca.SQLCode = 0
  1783. ll_cnt++
  1784. FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt];
  1785. LOOP
  1786. CLOSE cur_inware;
  1787. FOR ll_i = 1 To ll_cnt - 1
  1788. IF uo_ware.del(ll_scid,ll_inwareid_arr[ll_i],arg_msg,False) = 0 THEN
  1789. rslt = 0
  1790. arg_msg = '删除相关外协收货单:'+ls_inwarecode_arr[ll_i]+'失败,'+arg_msg
  1791. GOTO ext
  1792. END IF
  1793. //删除日志
  1794. if f_setsysoplog('外协收货单','送检单撤审自动删除,id:'+string(ll_inwareid_arr[ll_i])+',code:'+ls_inwarecode_arr[ll_i],arg_msg,false) = 0 then
  1795. rslt = 0
  1796. arg_msg = '删除相关外协收货单:'+ls_inwarecode_arr[ll_i]+',记录操作日志失败,'+arg_msg
  1797. GOTO ext
  1798. end if
  1799. NEXT
  1800. ext:
  1801. IF rslt = 0 THEN
  1802. ROLLBACK;
  1803. ELSEIF rslt = 1 And arg_ifcommit THEN
  1804. COMMIT;
  1805. END IF
  1806. Destroy uo_ware
  1807. RETURN rslt
  1808. end function
  1809. public function integer uof_create_inware_cp (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1810. Long ll_storageid_arr[]
  1811. Long ll_mxbt,cnt
  1812. Long i,j
  1813. Decimal ld_planprice
  1814. DateTime server_dt
  1815. String ls_plancode
  1816. SELECT Top 1 getdate() Into :server_dt From u_user;
  1817. IF sqlca.SQLCode <> 0 THEN
  1818. rslt = 0
  1819. arg_msg = "查询操作失败,日期 "
  1820. GOTO ext
  1821. END IF
  1822. s_sptcheck arg_s_check
  1823. uo_inware_cp uo_ware
  1824. uo_ware = Create uo_inware_cp
  1825. uo_ware.commit_transaction = sqlca
  1826. IF getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN
  1827. rslt = 0
  1828. GOTO ext
  1829. END IF
  1830. FOR i = 1 To UpperBound(arg_s_check.arg_s_mx) - 1
  1831. IF arg_s_check.arg_s_mx[i].goodqty <> 0 And arg_s_check.arg_s_mx[i].storageid > 0 THEN
  1832. FOR j = 1 To ll_mxbt
  1833. IF arg_s_check.arg_s_mx[i].storageid = ll_storageid_arr[j] THEN
  1834. GOTO _next
  1835. END IF
  1836. NEXT
  1837. ll_mxbt++
  1838. ll_storageid_arr[ll_mxbt] = arg_s_check.arg_s_mx[i].storageid
  1839. END IF
  1840. _next:
  1841. NEXT
  1842. //每个仓库建立一张生产进仓
  1843. FOR i = 1 To ll_mxbt
  1844. IF uo_ware.newbegin(arg_s_check.scid,3,arg_msg) = 0 THEN
  1845. rslt = 0
  1846. arg_msg = '第'+String(i)+'行,'+arg_msg
  1847. GOTO ext
  1848. END IF
  1849. uo_ware.indate = server_dt
  1850. uo_ware.inrep = publ_operator
  1851. uo_ware.part = arg_s_check.billcode
  1852. uo_ware.dscrp = arg_s_check.dscrp //'质检单:'+arg_s_check.billcode+'审核自动生成'
  1853. uo_ware.storageid = ll_storageid_arr[i]
  1854. uo_ware.sptname = ''
  1855. uo_ware.relid = arg_s_check.sptid //车间
  1856. uo_ware.relint_2 = 0
  1857. cnt = 0
  1858. FOR j = 1 To UpperBound(arg_s_check.arg_s_mx) - 1
  1859. IF arg_s_check.arg_s_mx[j].goodqty <> 0 And arg_s_check.arg_s_mx[j].storageid = ll_storageid_arr[i] THEN
  1860. cnt++
  1861. IF sys_option_taskplancode = 1 THEN
  1862. SELECT u_order_ml.taskrelcode
  1863. INTO :ls_plancode
  1864. FROM u_order_ml
  1865. Where u_order_ml.orderid = :arg_s_check.arg_s_mx[j].reltaskid;
  1866. IF sqlca.SQLCode <> 0 THEN
  1867. ls_plancode = ''
  1868. END IF
  1869. ELSE
  1870. ls_plancode = ''
  1871. END IF
  1872. IF IsNull(ls_plancode) THEN ls_plancode = ''
  1873. f_get_planprice_mtrl(arg_s_check.arg_s_mx[j].mtrlid,&
  1874. arg_s_check.arg_s_mx[j].status,&
  1875. arg_s_check.arg_s_mx[j].woodcode,&
  1876. arg_s_check.arg_s_mx[j].pcode,ld_planprice)
  1877. IF IsNull(ld_planprice) THEN ld_planprice = 0
  1878. IF uo_ware.acceptmx(cnt,&
  1879. arg_s_check.arg_s_mx[j].mtrlid,&
  1880. arg_s_check.arg_s_mx[j].mtrlcode,&
  1881. ls_plancode,&
  1882. arg_s_check.arg_s_mx[j].status,&
  1883. arg_s_check.arg_s_mx[j].goodqty,&
  1884. ld_planprice,&
  1885. 1,&
  1886. arg_s_check.arg_s_mx[j].mxdscrp,&
  1887. arg_msg,0,&
  1888. arg_s_check.arg_s_mx[j].reltaskid,&
  1889. arg_s_check.arg_s_mx[j].iftask,&
  1890. arg_s_check.arg_s_mx[j].woodcode,&
  1891. arg_s_check.arg_s_mx[j].pcode,&
  1892. 0,&
  1893. arg_s_check.arg_s_mx[j].unit,&
  1894. arg_s_check.arg_s_mx[j].rate,&
  1895. arg_s_check.arg_s_mx[j].goodqty * arg_s_check.arg_s_mx[j].rate ,&
  1896. arg_s_check.arg_s_mx[j].reltaskprintid,&
  1897. arg_s_check.arg_s_mx[j].goodqty,&
  1898. '','',&
  1899. arg_billid,&
  1900. arg_s_check.arg_s_mx[j].printid,&
  1901. '',&
  1902. arg_s_check.arg_s_mx[j].Location,&
  1903. arg_s_check.arg_s_mx[j].goodqty,&
  1904. 0) = 0 THEN
  1905. rslt = 0
  1906. arg_msg = '第'+String(i)+'行,'+arg_msg
  1907. GOTO ext
  1908. END IF
  1909. END IF
  1910. NEXT
  1911. IF cnt > 0 THEN
  1912. IF uo_ware.Save(False,arg_msg) = 0 THEN
  1913. rslt = 0
  1914. GOTO ext
  1915. END IF
  1916. END IF
  1917. NEXT
  1918. ext:
  1919. IF rslt = 0 THEN
  1920. ROLLBACK;
  1921. ELSEIF rslt = 1 And arg_ifcommit THEN
  1922. COMMIT;
  1923. END IF
  1924. Destroy uo_ware
  1925. RETURN rslt
  1926. end function
  1927. public function integer uof_del_inware_cp (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1928. Long ll_scid,ll_cnt
  1929. Long ll_i
  1930. Long ll_inwareid_arr[]
  1931. String ls_inwarecode_arr[]
  1932. uo_inware_cp uo_ware
  1933. uo_ware = Create uo_inware_cp
  1934. uo_ware.commit_transaction = sqlca
  1935. SELECT scid
  1936. INTO :ll_scid
  1937. FROM u_sptcheck
  1938. Where billid = :arg_billid;
  1939. IF sqlca.SQLCode <> 0 THEN
  1940. rslt = 0
  1941. arg_msg = '查询质检单分部失败,'+sqlca.SQLErrText
  1942. GOTO ext
  1943. END IF
  1944. ll_cnt = 1
  1945. DECLARE cur_inware CURSOR FOR
  1946. SELECT distinct u_inware.inwareid, u_inware.inwarecode
  1947. FROM u_inwaremx INNER JOIN
  1948. u_inware ON u_inwaremx.scid = u_inware.scid AND
  1949. u_inwaremx.inwareid = u_inware.inwareid
  1950. WHERE u_inwaremx.relbillid = :arg_billid
  1951. And u_inwaremx.scid = :ll_scid
  1952. and u_inware.billtype = 3;
  1953. OPEN cur_inware;
  1954. FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt];
  1955. DO WHILE sqlca.SQLCode = 0
  1956. ll_cnt++
  1957. FETCH cur_inware Into :ll_inwareid_arr[ll_cnt],:ls_inwarecode_arr[ll_cnt];
  1958. LOOP
  1959. CLOSE cur_inware;
  1960. FOR ll_i = 1 To ll_cnt - 1
  1961. IF uo_ware.del(ll_scid,ll_inwareid_arr[ll_i],arg_msg,False) = 0 THEN
  1962. rslt = 0
  1963. arg_msg = '删除相关生产进仓单:'+ls_inwarecode_arr[ll_i]+'失败,'+arg_msg
  1964. GOTO ext
  1965. END IF
  1966. //删除日志
  1967. if f_setsysoplog('生产进仓单','送检单撤审自动删除,id:'+string(ll_inwareid_arr[ll_i])+',code:'+ls_inwarecode_arr[ll_i],arg_msg,false) = 0 then
  1968. rslt = 0
  1969. arg_msg = '删除相关生产进仓单:'+ls_inwarecode_arr[ll_i]+',记录操作日志失败,'+arg_msg
  1970. GOTO ext
  1971. end if
  1972. NEXT
  1973. ext:
  1974. IF rslt = 0 THEN
  1975. ROLLBACK;
  1976. ELSEIF rslt = 1 And arg_ifcommit THEN
  1977. COMMIT;
  1978. END IF
  1979. Destroy uo_ware
  1980. RETURN rslt
  1981. end function
  1982. on uo_sptcheck.create
  1983. call super::create
  1984. TriggerEvent( this, "constructor" )
  1985. end on
  1986. on uo_sptcheck.destroy
  1987. TriggerEvent( this, "destructor" )
  1988. call super::destroy
  1989. end on
  1990. event constructor;String str_optionvalue,arg_msg
  1991. f_get_sys_option_value('265',str_optionvalue,arg_msg)
  1992. uo_option_if_oa_sptcheck = long(str_optionvalue)
  1993. f_get_sys_option_value('267',str_optionvalue,arg_msg)
  1994. uo_option_sptcheck_secaudit = long(str_optionvalue)
  1995. f_get_sys_option_value('266',str_optionvalue,arg_msg)
  1996. uo_option_if_oa_sptcheck_wfjg = long(str_optionvalue)
  1997. f_get_sys_option_value('268',str_optionvalue,arg_msg)
  1998. uo_option_sptcheck_wfjg_secaudit = long(str_optionvalue)
  1999. f_get_sys_option_value('271',str_optionvalue,arg_msg)
  2000. uo_option_sptcheck_inware = long(str_optionvalue)
  2001. f_get_sys_option_value('272',str_optionvalue,arg_msg)
  2002. uo_option_sptcheck_wfjg_inware = long(str_optionvalue)
  2003. f_get_sys_option_value('284',str_optionvalue,arg_msg)
  2004. uo_option_wfjg_price_cmp = long(str_optionvalue)
  2005. end event
  2006. global type uo_incase from nonvisualobject
  2007. end type