uo_cpcheck.sru 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959
  1. $PBExportHeader$uo_cpcheck.sru
  2. forward
  3. global type uo_cpcheck from nonvisualobject
  4. end type
  5. type s_saleplanmx from structure within uo_cpcheck
  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_cpcheck from nonvisualobject
  16. end type
  17. global uo_cpcheck uo_cpcheck
  18. type variables
  19. Long uo_billid
  20. int uo_ifauto = 0
  21. //billtype 质检类型:0-自制质检;1-采购质检;2-外协质检; 4-采购收货质检
  22. end variables
  23. forward prototypes
  24. public function integer save (s_cpcheck arg_s_cpcheck, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer updatebegin (long arg_billid, ref string arg_msg)
  27. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  28. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  29. public function integer p_getinfo (long arg_billid, ref s_cpcheck arg_s_check, ref string arg_msg)
  30. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg)
  31. public function integer secaudit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  32. public function integer csecaudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit)
  33. public function integer uf_save_chk (ref s_cpcheck arg_s_cpcheck, ref string arg_msg)
  34. end prototypes
  35. public function integer save (s_cpcheck arg_s_cpcheck, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Integer rslt = 1
  36. Long cnt = 0
  37. DateTime server_dt
  38. Long ll_billid,it_mxbt,ll_i,i
  39. String ls_sccode,ls_billcode
  40. IF IsNull(arg_s_cpcheck.scid) THEN arg_s_cpcheck.scid = 0
  41. IF IsNull(arg_s_cpcheck.billid) THEN arg_s_cpcheck.billid = 0
  42. IF IsNull(arg_s_cpcheck.checktype) THEN arg_s_cpcheck.checktype = 0
  43. IF IsNull(arg_s_cpcheck.relid) THEN arg_s_cpcheck.relid = 0
  44. IF IsNull(arg_s_cpcheck.qty) THEN arg_s_cpcheck.qty = 0
  45. IF IsNull(arg_s_cpcheck.checkqty) THEN arg_s_cpcheck.checkqty = 0
  46. IF IsNull(arg_s_cpcheck.badqty) THEN arg_s_cpcheck.badqty = 0
  47. IF IsNull(arg_s_cpcheck.goodqty) THEN arg_s_cpcheck.goodqty = 0
  48. IF IsNull(arg_s_cpcheck.dscrp) THEN arg_s_cpcheck.dscrp = ''
  49. IF IsNull(arg_s_cpcheck.reson) THEN arg_s_cpcheck.reson = ''
  50. IF IsNull(arg_s_cpcheck.suggest) THEN arg_s_cpcheck.suggest = ''
  51. IF IsNull(arg_s_cpcheck.feedback) THEN arg_s_cpcheck.feedback = ''
  52. IF IsNull(arg_s_cpcheck.opinion) THEN arg_s_cpcheck.opinion = ''
  53. IF IsNull(arg_s_cpcheck.billemp) THEN arg_s_cpcheck.billemp = ''
  54. IF IsNull(arg_s_cpcheck.unit) THEN arg_s_cpcheck.unit = ''
  55. IF IsNull(arg_s_cpcheck.rate) THEN arg_s_cpcheck.rate = 1
  56. SELECT Top 1 getdate() Into :server_dt From u_user;
  57. IF sqlca.SQLCode <> 0 THEN
  58. rslt = 0
  59. arg_msg = "查询操作失败,日期 "
  60. GOTO ext
  61. END IF
  62. it_mxbt = UpperBound(arg_s_cpcheck.arg_s_cpcheckmx)
  63. // //允许没有明细保存 - 20080423_dyy改, 其他暂时不考虑
  64. IF arg_s_cpcheck.billtype = 4 THEN
  65. IF it_mxbt <= 0 THEN
  66. rslt = 0
  67. arg_msg = "没有明细质检项目"
  68. GOTO ext
  69. END IF
  70. END IF
  71. IF uf_save_chk(arg_s_cpcheck, arg_msg) = 0 THEN
  72. rslt = 0
  73. GOTO ext
  74. END IF
  75. FOR ll_i = 1 To it_mxbt
  76. cnt = 0
  77. SELECT count(*) INTO :cnt
  78. FROM u_checkitem
  79. Where u_checkitem.itemid = :arg_s_cpcheck.arg_s_cpcheckmx[ll_i].itemid;
  80. IF sqlca.SQLCode <> 0 THEN
  81. arg_msg = '查询行:'+String(arg_s_cpcheck.arg_s_cpcheckmx[ll_i].printid)+',项目资料是否存在失败,'+sqlca.SQLErrText
  82. rslt = 0
  83. GOTO ext
  84. END IF
  85. IF cnt = 0 THEN
  86. arg_msg = '行:'+String(arg_s_cpcheck.arg_s_cpcheckmx[ll_i].printid)+',项目资料已存在失败!'
  87. rslt = 0
  88. GOTO ext
  89. END IF
  90. arg_s_cpcheck.arg_s_cpcheckmx[ll_i].checkemp = Trim(arg_s_cpcheck.arg_s_cpcheckmx[ll_i].checkemp)
  91. arg_s_cpcheck.arg_s_cpcheckmx[ll_i].checkresult = Trim(arg_s_cpcheck.arg_s_cpcheckmx[ll_i].checkresult)
  92. //自动生成,先不用
  93. IF uo_ifauto = 0 THEN
  94. IF arg_s_cpcheck.arg_s_cpcheckmx[ll_i].checkemp = '' THEN
  95. arg_msg = '行:'+String(arg_s_cpcheck.arg_s_cpcheckmx[ll_i].printid)+',请输入明细质检人!'
  96. rslt = 0
  97. GOTO ext
  98. END IF
  99. END IF
  100. NEXT
  101. IF arg_s_cpcheck.billid = 0 THEN
  102. ll_billid = f_sys_scidentity(0,"u_cpcheck","billid",arg_msg,True,id_sqlca)
  103. IF ll_billid <= 0 THEN
  104. rslt = 0
  105. GOTO ext
  106. END IF
  107. IF f_get_sccode(arg_s_cpcheck.scid,sqlca,ls_sccode,arg_msg) = 0 THEN
  108. rslt = 0
  109. GOTO ext
  110. END IF
  111. CHOOSE CASE arg_s_cpcheck.billtype
  112. CASE 0
  113. ls_billcode = getid(arg_s_cpcheck.scid,ls_sccode + 'QA',Date(server_dt),False,sqlca)
  114. CASE 1
  115. ls_billcode = getid(arg_s_cpcheck.scid,ls_sccode + 'QD',Date(server_dt),False,sqlca)
  116. CASE 2
  117. ls_billcode = getid(arg_s_cpcheck.scid,ls_sccode + 'QE',Date(server_dt),False,sqlca)
  118. CASE 4
  119. ls_billcode = getid(arg_s_cpcheck.scid,ls_sccode + 'QB',Date(server_dt),False,sqlca)
  120. END CHOOSE
  121. IF ls_billcode = "err" THEN
  122. rslt = 0
  123. arg_msg = "无法获取单据编号"+"~n"+sqlca.SQLErrText
  124. GOTO ext
  125. END IF
  126. INSERT INTO u_cpcheck
  127. ( scid,
  128. billid,
  129. billcode,
  130. checkdate,
  131. checktype,
  132. opdate,
  133. opemp,
  134. flag,
  135. relid,
  136. relcode,
  137. mtrlid,
  138. qty,
  139. checkqty,
  140. badqty,
  141. goodqty,
  142. status,
  143. woodcode,
  144. pcode,
  145. dscrp,
  146. itemtypeid,
  147. reson,
  148. suggest,
  149. feedback,
  150. opinion ,
  151. billemp,
  152. billtype,
  153. Relprintid,
  154. QcResult,
  155. unit,
  156. rate)
  157. VALUES (
  158. :arg_s_cpcheck.scid,
  159. :ll_billid,
  160. :ls_billcode,
  161. :arg_s_cpcheck.checkdate,
  162. :arg_s_cpcheck.checktype,
  163. getdate(),
  164. :arg_opemp,
  165. 0,
  166. :arg_s_cpcheck.relid,
  167. :arg_s_cpcheck.relcode,
  168. :arg_s_cpcheck.mtrlid,
  169. :arg_s_cpcheck.qty,
  170. :arg_s_cpcheck.checkqty,
  171. :arg_s_cpcheck.badqty,
  172. :arg_s_cpcheck.goodqty,
  173. :arg_s_cpcheck.status,
  174. :arg_s_cpcheck.woodcode,
  175. :arg_s_cpcheck.pcode,
  176. :arg_s_cpcheck.dscrp,
  177. :arg_s_cpcheck.itemtypeid,
  178. :arg_s_cpcheck.reson,
  179. :arg_s_cpcheck.suggest,
  180. :arg_s_cpcheck.feedback,
  181. :arg_s_cpcheck.opinion,
  182. :arg_s_cpcheck.billemp,
  183. :arg_s_cpcheck.billtype,
  184. :arg_s_cpcheck.Relprintid,
  185. :arg_s_cpcheck.QcResult,
  186. :arg_s_cpcheck.unit,
  187. :arg_s_cpcheck.rate) ;
  188. IF sqlca.SQLCode <> 0 THEN
  189. rslt = 0
  190. arg_msg = "因网络或其它原因导致建立单据操作失败"+"~n"+sqlca.SQLErrText
  191. GOTO ext
  192. END IF
  193. uo_billid = ll_billid
  194. ELSE
  195. UPDATE u_cpcheck
  196. SET checkdate = :arg_s_cpcheck.checkdate,
  197. checktype = :arg_s_cpcheck.checktype,
  198. moddate = getdate(),
  199. modemp = :arg_opemp,
  200. relid = :arg_s_cpcheck.relid,
  201. relcode = :arg_s_cpcheck.relcode,
  202. mtrlid = :arg_s_cpcheck.mtrlid,
  203. qty = :arg_s_cpcheck.qty,
  204. checkqty = :arg_s_cpcheck.checkqty,
  205. badqty = :arg_s_cpcheck.badqty,
  206. goodqty = :arg_s_cpcheck.goodqty,
  207. status = :arg_s_cpcheck.status,
  208. woodcode = :arg_s_cpcheck.woodcode,
  209. pcode = :arg_s_cpcheck.pcode,
  210. dscrp = :arg_s_cpcheck.dscrp,
  211. itemtypeid = :arg_s_cpcheck.itemtypeid,
  212. reson = :arg_s_cpcheck.reson,
  213. suggest = :arg_s_cpcheck.suggest,
  214. feedback = :arg_s_cpcheck.feedback,
  215. opinion = :arg_s_cpcheck.opinion,
  216. billemp = :arg_s_cpcheck.billemp,
  217. Relprintid = :arg_s_cpcheck.Relprintid,
  218. QcResult = :arg_s_cpcheck.QcResult,
  219. unit = :arg_s_cpcheck.unit,
  220. rate = :arg_s_cpcheck.rate
  221. WHERE billid = :arg_s_cpcheck.billid
  222. And flag = 0;
  223. IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN
  224. rslt = 0
  225. arg_msg = "因网络或其它原因导致更新单据操作失败"+"~n"+sqlca.SQLErrText
  226. GOTO ext
  227. END IF
  228. DELETE FROM u_cpcheckmx
  229. Where billid = :arg_s_cpcheck.billid;
  230. IF sqlca.SQLCode <> 0 THEN
  231. rslt = 0
  232. arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText
  233. GOTO ext
  234. END IF
  235. uo_billid = arg_s_cpcheck.billid
  236. END IF
  237. FOR i = 1 To it_mxbt
  238. INSERT INTO u_cpcheckmx
  239. ( scid,
  240. billid,
  241. itemid,
  242. checkresult,
  243. checkemp,
  244. badqty,
  245. goodqty,
  246. printid,
  247. mxdscrp,
  248. QcResult,
  249. Environmen,
  250. Method,
  251. Basis,
  252. Equipment,
  253. Standard)
  254. VALUES (:arg_s_cpcheck.scid,
  255. :uo_billid,
  256. :arg_s_cpcheck.arg_s_cpcheckmx[i].itemid,
  257. :arg_s_cpcheck.arg_s_cpcheckmx[i].checkresult,
  258. :arg_s_cpcheck.arg_s_cpcheckmx[i].checkemp,
  259. :arg_s_cpcheck.arg_s_cpcheckmx[i].badqty,
  260. :arg_s_cpcheck.arg_s_cpcheckmx[i].goodqty,
  261. :arg_s_cpcheck.arg_s_cpcheckmx[i].printid,
  262. :arg_s_cpcheck.arg_s_cpcheckmx[i].mxdscrp,
  263. :arg_s_cpcheck.arg_s_cpcheckmx[i].QcResult,
  264. :arg_s_cpcheck.arg_s_cpcheckmx[i].Environmen,
  265. :arg_s_cpcheck.arg_s_cpcheckmx[i].Method,
  266. :arg_s_cpcheck.arg_s_cpcheckmx[i].Basis,
  267. :arg_s_cpcheck.arg_s_cpcheckmx[i].Equipment,
  268. :arg_s_cpcheck.arg_s_cpcheckmx[i].Standard);
  269. IF sqlca.SQLCode <> 0 THEN
  270. uo_billid = arg_s_cpcheck.billid
  271. rslt = 0
  272. arg_msg = "因网络或其它原因导致插入明细操作失败"+"~n"+sqlca.SQLErrText
  273. GOTO ext
  274. END IF
  275. NEXT
  276. ext:
  277. IF rslt = 0 THEN
  278. ROLLBACK;
  279. ELSEIF arg_ifcommit And rslt = 1 THEN
  280. COMMIT;
  281. END IF
  282. RETURN rslt
  283. end function
  284. public function integer del (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  285. s_cpcheck arg_s_check
  286. IF arg_billid <= 0 THEN
  287. rslt = 0
  288. ARG_MSG = '错误单据唯一码'
  289. GOTO ext
  290. END IF
  291. IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  292. rslt = 0
  293. GOTO ext
  294. END IF
  295. IF arg_s_check.flag = 1 THEN
  296. rslt = 0
  297. ARG_MSG = '单据已经审核,不可以删除'
  298. GOTO ext
  299. END IF
  300. DELETE FROM u_cpcheck Where billid = :arg_billid;
  301. IF sqlca.SQLCode <> 0 THEN
  302. rslt = 0
  303. arg_msg = "删除单据操作失败"+"~n"+sqlca.SQLErrText
  304. GOTO ext
  305. END IF
  306. DELETE FROM u_cpcheckmx Where billid = :arg_billid ;
  307. IF sqlca.SQLCode <> 0 THEN
  308. rslt = 0
  309. arg_msg = "删除单据明细操作失败"+"~n"+sqlca.SQLErrText
  310. GOTO ext
  311. END IF
  312. ext:
  313. IF rslt = 0 THEN
  314. ROLLBACK;
  315. ELSEIF rslt = 1 AND arg_ifcommit THEN
  316. COMMIT;
  317. END IF
  318. RETURN rslt
  319. end function
  320. public function integer updatebegin (long arg_billid, ref string arg_msg);Int rslt = 1
  321. s_cpcheck arg_s_check
  322. IF arg_billid <= 0 THEN
  323. rslt = 0
  324. ARG_MSG = '错误单据唯一码'
  325. GOTO ext
  326. END IF
  327. IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  328. rslt = 0
  329. GOTO ext
  330. END IF
  331. IF arg_s_check.flag = 1 THEN
  332. rslt = 0
  333. ARG_MSG = '单据已经审核,不可以修改,要修改请先撤销审核'
  334. GOTO ext
  335. END IF
  336. ext:
  337. RETURN rslt
  338. end function
  339. public function integer caudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  340. DateTime null_dt
  341. s_cpcheck arg_s_check
  342. SetNull(null_dt)
  343. uo_inware_buy uo_ware
  344. uo_ware = Create uo_inware_buy
  345. IF arg_billid <= 0 THEN
  346. rslt = 0
  347. arg_msg = '错误单据唯一码'
  348. GOTO ext
  349. END IF
  350. IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  351. rslt = 0
  352. GOTO ext
  353. END IF
  354. IF arg_s_check.flag = 0 THEN
  355. rslt = 0
  356. arg_msg = '单据未审核,不可以撤审'
  357. GOTO ext
  358. END IF
  359. UPDATE u_cpcheck
  360. SET flag = 0,
  361. permit_emp = '',
  362. permit_date = :null_dt
  363. WHERE billid = :arg_billid
  364. AND flag = 1;
  365. IF sqlca.SQLCode <> 0 THEN
  366. rslt = 0
  367. arg_msg = "因网络或其它原因导致单据撤消审核操作失败"+"~n"+sqlca.SQLErrText
  368. GOTO ext
  369. END IF
  370. IF arg_s_check.billtype = 4 THEN //采购收货质检单
  371. IF arg_s_check.relid > 0 And arg_s_check.relprintid > 0 THEN
  372. IF sys_option_cpcheck_update_chkqty = 1 THEN
  373. s_inwaremx s_mx
  374. Decimal lde_rate
  375. IF sys_option_cpcheck_use_chkpassrate = 0 THEN
  376. s_mx.chkqty = 0 - arg_s_check.checkqty
  377. s_mx.badqty = 0 - arg_s_check.badqty
  378. s_mx.goodqty = 0 - arg_s_check.goodqty
  379. s_mx.chkinqty = 0
  380. s_mx.chkinqty2 = 0
  381. ELSE
  382. IF arg_s_check.checkqty = 0 THEN
  383. lde_rate = 0
  384. ELSE
  385. lde_rate = arg_s_check.goodqty / arg_s_check.checkqty
  386. END IF
  387. s_mx.chkqty = 0 - arg_s_check.checkqty
  388. s_mx.badqty = 0 - arg_s_check.badqty
  389. s_mx.goodqty = 0 - arg_s_check.goodqty
  390. IF arg_s_check.checktype = 1 THEN //全检, 按原合格数,不合格数登记
  391. s_mx.chkinqty = 0 - arg_s_check.goodqty
  392. s_mx.chkinqty2 = 0 - arg_s_check.badqty
  393. ELSE //抽检,按抽检合格比率,超过比率的,算全合格,否则全不合格
  394. IF lde_rate >= arg_s_check.chkpassrate THEN
  395. s_mx.chkinqty = 0 - arg_s_check.qty
  396. s_mx.chkinqty2 = 0
  397. ELSE
  398. s_mx.chkinqty = 0
  399. s_mx.chkinqty2 = 0 - arg_s_check.qty
  400. END IF
  401. END IF
  402. END IF
  403. // s_inwaremx s_mx
  404. // s_mx.chkqty = 0 - arg_s_check.checkqty
  405. // s_mx.badqty = 0 - arg_s_check.badqty
  406. // s_mx.goodqty = 0 - arg_s_check.goodqty
  407. IF uo_ware.uof_update_chkqty(arg_s_check.scid, arg_s_check.relid , arg_s_check.relprintid, s_mx, ARG_MSG, False) = 0 THEN
  408. rslt = 0
  409. ARG_MSG = "更新采购收货单质检相关数据失败"+"~n"+ARG_MSG
  410. GOTO ext
  411. END IF
  412. END IF
  413. END IF
  414. END IF
  415. ext:
  416. Destroy uo_ware
  417. IF rslt = 0 THEN
  418. ROLLBACK;
  419. ELSEIF rslt = 1 AND arg_ifcommit THEN
  420. COMMIT;
  421. END IF
  422. RETURN rslt
  423. end function
  424. public function integer audit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  425. Long it_mxbt
  426. s_cpcheck arg_s_check
  427. uo_inware_buy uo_ware
  428. uo_ware = Create uo_inware_buy
  429. //uo_ware.commit_transaction = sqlca
  430. IF arg_billid <= 0 THEN
  431. rslt = 0
  432. ARG_MSG = '错误单据唯一码'
  433. GOTO ext
  434. END IF
  435. IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  436. rslt = 0
  437. GOTO ext
  438. END IF
  439. IF arg_s_check.flag = 1 THEN
  440. rslt = 0
  441. ARG_MSG = '单据已经审核,不可以再审'
  442. GOTO ext
  443. END IF
  444. IF arg_s_check.qty <= 0 THEN
  445. rslt = 0
  446. ARG_MSG = '错误的批量'
  447. GOTO ext
  448. END IF
  449. IF arg_s_check.checkqty <= 0 THEN
  450. rslt = 0
  451. ARG_MSG = '错误的抽检数量'
  452. GOTO ext
  453. END IF
  454. IF arg_s_check.qty < arg_s_check.checkqty THEN
  455. rslt = 0
  456. ARG_MSG = '抽检数量大于批量'
  457. GOTO ext
  458. END IF
  459. //更新审核标记
  460. UPDATE u_cpcheck
  461. SET permit_emp = :arg_opemp,
  462. permit_date = getdate(),
  463. flag = 1
  464. WHERE billid = :arg_billid
  465. And flag = 0;
  466. IF sqlca.SQLCode <> 0 THEN
  467. rslt = 0
  468. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  469. GOTO ext
  470. END IF
  471. IF arg_s_check.billtype = 4 THEN //采购收货质检单
  472. IF arg_s_check.relid > 0 And arg_s_check.relprintid > 0 THEN
  473. IF sys_option_cpcheck_update_chkqty = 1 THEN
  474. s_inwaremx s_mx
  475. Decimal lde_rate
  476. IF sys_option_cpcheck_use_chkpassrate = 0 THEN
  477. s_mx.chkqty = arg_s_check.checkqty
  478. s_mx.badqty = arg_s_check.badqty
  479. s_mx.goodqty = arg_s_check.goodqty
  480. s_mx.chkinqty = 0
  481. s_mx.chkinqty2 = 0
  482. ELSE
  483. IF arg_s_check.checkqty = 0 THEN
  484. lde_rate = 0
  485. ELSE
  486. lde_rate = arg_s_check.goodqty / arg_s_check.checkqty
  487. END IF
  488. s_mx.chkqty = arg_s_check.checkqty
  489. s_mx.badqty = arg_s_check.badqty
  490. s_mx.goodqty = arg_s_check.goodqty
  491. IF arg_s_check.checktype = 1 THEN //全检, 按原合格数,不合格数登记
  492. s_mx.chkinqty = arg_s_check.goodqty
  493. s_mx.chkinqty2 = arg_s_check.badqty
  494. ELSE //抽检,按抽检合格比率,超过比率的,算全合格,否则全不合格
  495. IF lde_rate >= arg_s_check.chkpassrate THEN
  496. s_mx.chkinqty = arg_s_check.qty
  497. s_mx.chkinqty2 = 0
  498. ELSE
  499. s_mx.chkinqty = 0
  500. s_mx.chkinqty2 = arg_s_check.qty
  501. END IF
  502. END IF
  503. END IF
  504. IF uo_ware.uof_update_chkqty(arg_s_check.scid, arg_s_check.relid , arg_s_check.relprintid, s_mx, ARG_MSG, False) = 0 THEN
  505. rslt = 0
  506. ARG_MSG = "更新采购收货单质检相关数据失败"+"~n"+ARG_MSG
  507. GOTO ext
  508. END IF
  509. END IF
  510. END IF
  511. END IF
  512. ext:
  513. Destroy uo_ware
  514. IF rslt = 0 THEN
  515. ROLLBACK;
  516. ELSEIF rslt = 1 And arg_ifcommit THEN
  517. COMMIT;
  518. END IF
  519. RETURN rslt
  520. end function
  521. public function integer p_getinfo (long arg_billid, ref s_cpcheck arg_s_check, ref string arg_msg);Int rslt = 1
  522. IF arg_billid <= 0 THEN
  523. rslt = 0
  524. ARG_MSG = '错误单据唯一码'
  525. GOTO ext
  526. END IF
  527. SELECT u_cpcheck.relcode,
  528. u_cpcheck.qty,
  529. u_cpcheck.checkqty,
  530. u_cpcheck.checktype,
  531. u_cpcheck.dscrp,
  532. u_cpcheck.checkdate,
  533. u_cpcheck.itemtypeid,
  534. u_cpcheck.flag,
  535. u_cpcheck.relid,
  536. u_cpcheck.scid,
  537. u_cpcheck.mtrlid,
  538. u_cpcheck.status,
  539. u_cpcheck.woodcode,
  540. u_cpcheck.pcode,
  541. u_cpcheck.billtype,
  542. u_cpcheck.relprintid,
  543. u_cpcheck.QcResult,
  544. u_cpcheck.secflag,
  545. u_cpcheck.unit,
  546. u_cpcheck.rate,
  547. u_cpcheck.goodqty,
  548. u_cpcheck.badqty,
  549. u_mtrldef.checkrate,
  550. u_mtrldef.chkpassrate
  551. INTO
  552. :arg_s_check.relcode,
  553. :arg_s_check.qty,
  554. :arg_s_check.checkqty,
  555. :arg_s_check.checktype,
  556. :arg_s_check.dscrp,
  557. :arg_s_check.checkdate,
  558. :arg_s_check.itemtypeid,
  559. :arg_s_check.flag,
  560. :arg_s_check.relid,
  561. :arg_s_check.scid,
  562. :arg_s_check.mtrlid,
  563. :arg_s_check.status,
  564. :arg_s_check.woodcode,
  565. :arg_s_check.pcode,
  566. :arg_s_check.billtype,
  567. :arg_s_check.relprintid,
  568. :arg_s_check.QcResult,
  569. :arg_s_check.secflag,
  570. :arg_s_check.unit,
  571. :arg_s_check.rate,
  572. :arg_s_check.goodqty,
  573. :arg_s_check.badqty,
  574. :arg_s_check.checkrate,
  575. :arg_s_check.chkpassrate
  576. FROM u_cpcheck INNER JOIN
  577. u_mtrldef on u_cpcheck.mtrlid = u_mtrldef.mtrlid
  578. Where u_cpcheck.billid = :arg_billid;
  579. IF sqlca.SQLCode <> 0 THEN
  580. rslt = 0
  581. ARG_MSG = '查询单据内容失败(错误单据唯一码)'
  582. GOTO ext
  583. END IF
  584. ext:
  585. RETURN rslt
  586. end function
  587. public function integer add_dscrp (long arg_billid, string arg_newdescppart, ref string arg_msg);Int rslt = 1
  588. s_cpcheck arg_s_check
  589. IF arg_billid <= 0 THEN
  590. rslt = 0
  591. arg_msg = '错误单据唯一码'
  592. GOTO ext
  593. END IF
  594. IF arg_newdescppart = '' THEN
  595. rslt = 0
  596. arg_msg = "要添加内容为空,操作取消"
  597. GOTO ext
  598. END IF
  599. IF p_getinfo(arg_billid,arg_s_check,arg_msg) = 0 THEN
  600. rslt = 0
  601. GOTO ext
  602. END IF
  603. IF arg_s_check.flag = 0 THEN
  604. rslt = 0
  605. arg_msg = '单据未审核,不可以增加备注'
  606. GOTO ext
  607. END IF
  608. UPDATE u_cpcheck
  609. SET DSCRP = DSCRP+' '+:arg_newdescppart
  610. WHERE u_cpcheck.billid = :arg_billid
  611. AND flag = 1;
  612. IF SQLCA.SQLCode <> 0 THEN
  613. rslt = 0
  614. arg_msg = "因网络或其它原因导致添加备注操作失败"+"~n"+SQLCA.SQLErrText
  615. GOTO ext
  616. END IF
  617. ext:
  618. IF rslt = 1 THEN
  619. COMMIT;
  620. ELSE
  621. ROLLBACK;
  622. END IF
  623. Return (rslt)
  624. end function
  625. public function integer secaudit (long arg_billid, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  626. Long it_mxbt
  627. s_cpcheck arg_s_check
  628. IF arg_billid <= 0 THEN
  629. rslt = 0
  630. ARG_MSG = '错误单据唯一码'
  631. GOTO ext
  632. END IF
  633. IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  634. rslt = 0
  635. GOTO ext
  636. END IF
  637. IF arg_s_check.secflag = 1 THEN
  638. rslt = 0
  639. ARG_MSG = '单据已经二审,不可以再审'
  640. GOTO ext
  641. END IF
  642. IF arg_s_check.flag = 0 THEN
  643. rslt = 0
  644. ARG_MSG = '单据未审核,不可以二审'
  645. GOTO ext
  646. END IF
  647. //更新审核标记
  648. UPDATE u_cpcheck
  649. SET secauditemp = :arg_opemp,
  650. SecAuditdate = getdate(),
  651. secflag = 1
  652. WHERE billid = :arg_billid
  653. AND flag = 1
  654. and secflag = 0;
  655. IF sqlca.SQLCode <> 0 THEN
  656. rslt = 0
  657. ARG_MSG = "因网络或其它原因导致单据审核操作失败"+"~n"+sqlca.SQLErrText
  658. GOTO ext
  659. END IF
  660. ext:
  661. IF rslt = 0 THEN
  662. ROLLBACK;
  663. ELSEIF rslt = 1 AND arg_ifcommit THEN
  664. COMMIT;
  665. END IF
  666. RETURN rslt
  667. end function
  668. public function integer csecaudit (long arg_billid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  669. DateTime null_dt
  670. s_cpcheck arg_s_check
  671. SetNull(null_dt)
  672. IF arg_billid <= 0 THEN
  673. rslt = 0
  674. arg_msg = '错误单据唯一码'
  675. GOTO ext
  676. END IF
  677. IF p_getinfo(arg_billid,arg_s_check,ARG_MSG) = 0 THEN
  678. rslt = 0
  679. GOTO ext
  680. END IF
  681. IF arg_s_check.secflag = 0 THEN
  682. rslt = 0
  683. arg_msg = '单据未二审,不可以撤审'
  684. GOTO ext
  685. END IF
  686. UPDATE u_cpcheck
  687. SET secflag = 0,
  688. secAuditemp = '',
  689. secAuditDate = :null_dt
  690. WHERE billid = :arg_billid
  691. AND secflag = 1
  692. and flag = 1;
  693. IF sqlca.SQLCode <> 0 THEN
  694. rslt = 0
  695. arg_msg = "因网络或其它原因导致单据撤消审核操作失败"+"~n"+sqlca.SQLErrText
  696. GOTO ext
  697. END IF
  698. ext:
  699. IF rslt = 0 THEN
  700. ROLLBACK;
  701. ELSEIF rslt = 1 AND arg_ifcommit THEN
  702. COMMIT;
  703. END IF
  704. RETURN rslt
  705. end function
  706. public function integer uf_save_chk (ref s_cpcheck arg_s_cpcheck, ref string arg_msg);//保存前的检查
  707. Int rslt = 1
  708. Long cnt
  709. CHOOSE CASE arg_s_cpcheck.billtype
  710. CASE 0 //自制
  711. IF arg_s_cpcheck.relid = 0 THEN
  712. rslt = 0
  713. arg_msg = "请选择指令单"
  714. GOTO ext
  715. END IF
  716. SELECT
  717. mtrlid,
  718. status,
  719. woodcode,
  720. pcode
  721. INTO
  722. :arg_s_cpcheck.mtrlid,
  723. :arg_s_cpcheck.status,
  724. :arg_s_cpcheck.woodcode,
  725. :arg_s_cpcheck.pcode
  726. FROM u_Order_ml
  727. WHERE orderid = :arg_s_cpcheck.relid
  728. And scid = :arg_s_cpcheck.scid;
  729. IF sqlca.SQLCode <> 0 THEN
  730. arg_msg = '查询指令单资料失败,'+sqlca.SQLErrText
  731. rslt = 0
  732. GOTO ext
  733. END IF
  734. CASE 1 //采购
  735. IF arg_s_cpcheck.relid = 0 THEN
  736. rslt = 0
  737. arg_msg = "请选择采购送检单"
  738. GOTO ext
  739. END IF
  740. //检查是否唯一生成
  741. SELECT count(*)
  742. INTO :cnt
  743. FROM u_cpcheck
  744. WHERE scid = :arg_s_cpcheck.scid
  745. AND relid = :arg_s_cpcheck.relid
  746. AND Relprintid = :arg_s_cpcheck.relprintid
  747. And billtype = 1
  748. and billid <> :arg_s_cpcheck.billid;
  749. IF sqlca.SQLCode <> 0 THEN
  750. cnt = 0
  751. END IF
  752. IF cnt > 0 THEN //已经生成过采购送检单,不能重复生成
  753. rslt = 0
  754. arg_msg = "采购送检明细已有相关采购质检单,不能重复建单"
  755. GOTO ext
  756. END IF
  757. CASE 2 //外协
  758. CASE 4 //采购收货单
  759. IF arg_s_cpcheck.relid = 0 THEN
  760. rslt = 0
  761. arg_msg = "请选择采购收货单"
  762. GOTO ext
  763. END IF
  764. //检查是否唯一生成
  765. SELECT count(*)
  766. INTO :cnt
  767. FROM u_cpcheck
  768. WHERE scid = :arg_s_cpcheck.scid
  769. AND relid = :arg_s_cpcheck.relid
  770. AND Relprintid = :arg_s_cpcheck.relprintid
  771. And billtype = 4
  772. and billid <> :arg_s_cpcheck.billid;
  773. IF sqlca.SQLCode <> 0 THEN
  774. cnt = 0
  775. END IF
  776. IF cnt > 0 THEN //已经生成过收货质检单,不能重复生成
  777. rslt = 0
  778. arg_msg = "采购收货单明细已有相关收货质检单,不能重复建单"
  779. GOTO ext
  780. END IF
  781. END CHOOSE
  782. ext:
  783. RETURN rslt
  784. end function
  785. on uo_cpcheck.create
  786. call super::create
  787. TriggerEvent( this, "constructor" )
  788. end on
  789. on uo_cpcheck.destroy
  790. TriggerEvent( this, "destructor" )
  791. call super::destroy
  792. end on
  793. global type uo_incase from nonvisualobject
  794. end type