uo_ware_pdb_balc.sru 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068
  1. $PBExportHeader$uo_ware_pdb_balc.sru
  2. forward
  3. global type uo_ware_pdb_balc from nonvisualobject
  4. end type
  5. end forward
  6. global type uo_ware_pdb_balc from nonvisualobject
  7. end type
  8. global uo_ware_pdb_balc uo_ware_pdb_balc
  9. type variables
  10. Int uo_option_warebalc_checksale
  11. int uo_option_wkpmtrlware
  12. int uo_option_outware_scll_new_cj_mtrlware
  13. end variables
  14. forward prototypes
  15. public function integer uof_warebalc_cancel (long arg_balcdateint, long arg_storageid, ref string arg_msg, boolean arg_ifcommit)
  16. public function integer uof_pdb_audit (long arg_storageid, long arg_pdbdate, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  17. public function integer uof_pdb_caudit (long arg_storageid, long arg_pdbdate, ref string arg_msg, boolean arg_ifcommit)
  18. public function integer uof_pdb_del (long arg_storageid, long arg_pdbdate, ref string arg_msg, boolean arg_ifcommit)
  19. public function integer uof_pdb_add (long arg_atid, long arg_storageid, datetime arg_pdbdt, integer arg_ifnoallocqty, ref string arg_msg, boolean arg_ifcommit)
  20. public function integer uof_warebalc_amt (long arg_storageid, long arg_balcdateint, ref string arg_msg, boolean arg_ifcommit)
  21. public function integer uof_warebalc_amt_cancel (long arg_storageid, long arg_balcdateint, ref string arg_msg, boolean arg_ifcommit)
  22. public function integer uof_warebalc_check_inoutflag (long arg_storageid, datetime arg_balcdate, ref string arg_msg, integer arg_ifchecksale)
  23. public function integer uof_warebalc (long arg_storageid, datetime arg_balcdate, ref string arg_msg, boolean arg_ifcommit, integer arg_ifchecksale)
  24. public function integer uof_pdb_add_assign (long arg_storageid, datetime arg_pdbdt, integer arg_ifnoallocqty, ref string arg_msg, boolean arg_ifcommit)
  25. public function integer uof_pdb_del_assign (long arg_storageid, long arg_pdbdate, ref string arg_msg, boolean arg_ifcommit)
  26. public function integer uof_pdb_audit_assign (long arg_storageid, long arg_pdbdate, string arg_opemp, ref string arg_msg, boolean arg_ifcommit)
  27. public function integer uof_pdb_caudit_assign (long arg_storageid, long arg_pdbdate, ref string arg_msg, boolean arg_ifcommit)
  28. end prototypes
  29. public function integer uof_warebalc_cancel (long arg_balcdateint, long arg_storageid, ref string arg_msg, boolean arg_ifcommit);int rslt = 1
  30. long cnt
  31. DateTime null_dt,ld_balcdate
  32. string ls_balcdate
  33. int li_StoreBalcType
  34. SetNull(null_dt)
  35. ls_balcdate = left(string(arg_balcdateint),4) + '-' + left(right(string(arg_balcdateint),4),2) +'-'+ right(string(arg_balcdateint),2)
  36. ld_balcdate = datetime(date(ls_balcdate),time('23:59:59'))
  37. IF arg_storageid <= 0 THEN
  38. arg_msg = '请选择仓库'
  39. rslt = 0
  40. GOTO ext
  41. END IF
  42. SELECT StoreBalcType
  43. INTO :li_StoreBalcType
  44. FROM u_storage
  45. Where storageid = :arg_storageid;
  46. IF sqlca.SQLCode <> 0 THEN
  47. rslt = 0
  48. arg_msg = "查询仓库结算数量和金额类型失败"
  49. GOTO ext
  50. END IF
  51. //检查进仓单
  52. cnt = 0
  53. SELECT count(*) INTO :cnt FROM u_inware
  54. WHERE flag = 1
  55. AND ( balcdateint > :arg_balcdateint OR balcdateint = 0 )
  56. AND storageid = :arg_storageid;
  57. IF sqlca.SQLCode <> 0 THEN
  58. rslt = 0
  59. arg_msg = '仓库反结存失败,查询进仓单结存日期后是否有单失败'
  60. GOTO ext
  61. END IF
  62. IF cnt > 0 THEN
  63. rslt = 0
  64. arg_msg = '仓库反结存失败,进仓单结存日期后已经有单审核,如果要反结存请将进仓单反审核'
  65. GOTO ext
  66. END IF
  67. //检查出仓单
  68. cnt = 0
  69. SELECT count(*) INTO :cnt FROM u_outware
  70. WHERE flag = 1
  71. AND ( balcdateint > :arg_balcdateint OR balcdateint = 0 )
  72. AND storageid = :arg_storageid;
  73. IF sqlca.SQLCode <> 0 THEN
  74. rslt = 0
  75. arg_msg = '仓库反结存失败,查询出仓单结存日期后是否有单失败'
  76. GOTO ext
  77. END IF
  78. IF cnt > 0 THEN
  79. rslt = 0
  80. arg_msg = '仓库反结存失败,出仓单结存日期后已经有单审核,如果要反结存请将出仓单反审核'
  81. GOTO ext
  82. END IF
  83. //检查仓库外协进仓单及返工单
  84. cnt = 0
  85. SELECT count(*) INTO :cnt
  86. FROM ow_wfjg_in INNER JOIN
  87. ow_wfjgmx_in_aft ON ow_wfjg_in.scid = ow_wfjgmx_in_aft.scid AND
  88. ow_wfjg_in.inwareid = ow_wfjgmx_in_aft.inwareid
  89. WHERE ( ow_wfjg_in.flag = 1 )
  90. AND ( ow_wfjg_in.indate > :ld_balcdate )
  91. AND ( ow_wfjgmx_in_aft.storageid = :arg_storageid )
  92. And ( ow_wfjg_in.billtype = 4);
  93. IF sqlca.SQLCode <> 0 THEN
  94. rslt = 0
  95. arg_msg = '仓库反结存失败,查询仓库外协进仓单或返工单结存日期后是否有单失败'
  96. GOTO ext
  97. END IF
  98. IF cnt > 0 THEN
  99. rslt = 0
  100. arg_msg = '仓库反结存失败,仓库外协进仓单或返工单结存日期后已经有单审核,如果要反结存请将仓库外协进仓单或返工单反审核'
  101. GOTO ext
  102. END IF
  103. //检查仓库外协发出单及退回单
  104. cnt = 0
  105. SELECT count(*) INTO :cnt
  106. FROM ow_wfjg_out INNER JOIN
  107. ow_wfjgmx_out ON ow_wfjg_out.scid = ow_wfjgmx_out.scid AND
  108. ow_wfjg_out.outwareid = ow_wfjgmx_out.outwareid
  109. WHERE ( ow_wfjg_out.flag = 1 )
  110. AND ( ow_wfjg_out.outdate > :ld_balcdate)
  111. AND ( ow_wfjgmx_out.storageid = :arg_storageid )
  112. And ( ow_wfjg_out.billtype = 4);
  113. IF sqlca.SQLCode <> 0 THEN
  114. rslt = 0
  115. arg_msg = '仓库反结存失败,查询仓库外协出发单或退回单结存日期后是否有单失败'
  116. GOTO ext
  117. END IF
  118. IF cnt > 0 THEN
  119. rslt = 0
  120. arg_msg = '仓库反结存失败,仓库外协出发单或退回单结存日期后已经有单审核,如果要反结存请将仓库外协出发单或退回单反审核'
  121. GOTO ext
  122. END IF
  123. // 写入日表 upartbalc
  124. UPDATE u_inware
  125. SET balcflag = 0 ,
  126. u_inware.balcdateint = 0
  127. WHERE ( u_inware.flag = 1 ) AND
  128. ( u_inware.balcflag = 1 ) AND
  129. ( u_inware.storageid = :arg_storageid ) AND
  130. ( u_inware.balcdateint = :arg_balcdateint );
  131. IF sqlca.SQLCode <> 0 THEN
  132. rslt = 0
  133. arg_msg = "反结存操作失败 ~n原因:"+sqlca.SQLErrText
  134. GOTO ext
  135. END IF
  136. UPDATE u_outware
  137. SET balcflag = 0 ,
  138. u_outware.balcdateint = 0
  139. WHERE ( u_outware.flag = 1 ) AND
  140. ( u_outware.balcflag = 1 ) AND
  141. ( u_outware.storageid = :arg_storageid ) AND
  142. ( u_outware.balcdateint = :arg_balcdateint );
  143. IF sqlca.SQLCode <> 0 THEN
  144. rslt = 0
  145. arg_msg = "反结存操作失败 ~n原因:"+sqlca.SQLErrText
  146. GOTO ext
  147. END IF
  148. //-----------------------------------------
  149. DELETE FROM u_warebalc
  150. WHERE balcdateint = 0
  151. AND storageid = :arg_storageid;
  152. IF sqlca.SQLCode <> 0 THEN
  153. arg_msg = '反结存操作 ~n原因:'+sqlca.SQLErrText
  154. rslt = 0
  155. GOTO ext
  156. END IF
  157. UPDATE u_warebalc
  158. SET balcdateint = 0,
  159. balcdate = :null_dt,
  160. QtyAuditFlag = 0,
  161. QtyAuditDate = :null_dt,
  162. QtyAuditEmp = '',
  163. AmtAuditFlag = 0,
  164. AmtAuditDate = :null_dt,
  165. AmtAuditEmp = ''
  166. WHERE balcdateint = :arg_balcdateint
  167. AND storageid = :arg_storageid;
  168. IF sqlca.SQLCode <> 0 THEN
  169. rslt = 0
  170. arg_msg = "更新结存表结存标记失败. ~n 原因:"+sqlca.SQLErrText
  171. GOTO ext
  172. END IF
  173. ext:
  174. IF rslt = 0 THEN
  175. ROLLBACK;
  176. ELSEIF rslt = 1 AND arg_ifcommit THEN
  177. COMMIT;
  178. END IF
  179. RETURN rslt
  180. end function
  181. public function integer uof_pdb_audit (long arg_storageid, long arg_pdbdate, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  182. Long cnt
  183. SELECT count(*) INTO :cnt
  184. FROM u_storage
  185. Where storageid = :arg_storageid;
  186. IF sqlca.SQLCode <> 0 THEN
  187. arg_msg = '查询仓库资料失败,'+sqlca.SQLErrText
  188. rslt = 0
  189. GOTO ext
  190. END IF
  191. IF cnt <> 1 THEN
  192. arg_msg = '仓库资料不存在或重复,请检查'
  193. rslt = 0
  194. GOTO ext
  195. END IF
  196. cnt = 0
  197. SELECT count(*) INTO :cnt
  198. FROM u_warepdb
  199. WHERE storageid = :arg_storageid
  200. AND pdbdate = :arg_pdbdate;
  201. IF sqlca.SQLCode <> 0 THEN
  202. arg_msg = '查询盘点表失败,'+sqlca.SQLErrText
  203. rslt = 0
  204. GOTO ext
  205. END IF
  206. IF cnt = 0 THEN
  207. arg_msg = '盘点表没有盘点内容,不能审核'
  208. rslt = 0
  209. GOTO ext
  210. END IF
  211. cnt = 0
  212. SELECT count(*) INTO :cnt
  213. FROM u_warepdb
  214. WHERE storageid = :arg_storageid
  215. AND pdbdate = :arg_pdbdate
  216. AND flag = 1;
  217. IF sqlca.SQLCode <> 0 THEN
  218. arg_msg = '查询盘点表是否已审核失败,'+sqlca.SQLErrText
  219. rslt = 0
  220. GOTO ext
  221. END IF
  222. IF cnt > 0 THEN
  223. arg_msg = '盘点表已审核,不能审核'
  224. rslt = 0
  225. GOTO ext
  226. END IF
  227. UPDATE u_warepdb
  228. SET flag = 1,
  229. auditemp = :arg_opemp,
  230. auditdate = getdate()
  231. WHERE storageid = :arg_storageid
  232. AND pdbdate = :arg_pdbdate;
  233. IF sqlca.SQLCode <> 0 THEN
  234. arg_msg = '更新盘点表审核标记失败,'+sqlca.SQLErrText
  235. rslt = 0
  236. GOTO ext
  237. END IF
  238. //盘点后, 记录库存分配的信息 20120716 lhd
  239. UPDATE u_warepdb_assign_log
  240. SET edqty = u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty
  241. FROM u_warepdb_assign_log INNER join
  242. u_mtrlware_assign on u_warepdb_assign_log.Assignid = u_mtrlware_assign.Assignid
  243. WHERE u_warepdb_assign_log.storageid = :arg_storageid
  244. And u_warepdb_assign_log.pdbdate = :arg_pdbdate;
  245. IF sqlca.SQLCode <> 0 THEN
  246. arg_msg = '记录库存分配的信息失败,'+sqlca.SQLErrText
  247. rslt = 0
  248. GOTO ext
  249. END IF
  250. ext:
  251. IF rslt = 0 THEN
  252. ROLLBACK;
  253. ELSEIF rslt = 1 AND arg_ifcommit THEN
  254. COMMIT;
  255. END IF
  256. RETURN rslt
  257. end function
  258. public function integer uof_pdb_caudit (long arg_storageid, long arg_pdbdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  259. Long cnt
  260. Long ll_pdbdate
  261. DateTime null_dt
  262. SetNull(null_dt)
  263. SELECT count(*) INTO :cnt
  264. FROM u_storage
  265. Where storageid = :arg_storageid;
  266. IF sqlca.SQLCode <> 0 THEN
  267. arg_msg = '查询仓库资料失败,'+sqlca.SQLErrText
  268. rslt = 0
  269. GOTO ext
  270. END IF
  271. IF cnt <> 1 THEN
  272. arg_msg = '仓库资料不存在或重复,请检查'
  273. rslt = 0
  274. GOTO ext
  275. END IF
  276. cnt = 0
  277. SELECT count(*) INTO :cnt
  278. FROM u_warepdb
  279. WHERE storageid = :arg_storageid
  280. AND pdbdate = :arg_pdbdate;
  281. IF sqlca.SQLCode <> 0 THEN
  282. arg_msg = '查询盘点表失败,'+sqlca.SQLErrText
  283. rslt = 0
  284. GOTO ext
  285. END IF
  286. IF cnt = 0 THEN
  287. arg_msg = '盘点表没有盘点内容,不能撤审'
  288. rslt = 0
  289. GOTO ext
  290. END IF
  291. cnt = 0
  292. SELECT count(*) INTO :cnt
  293. FROM u_warepdb
  294. WHERE storageid = :arg_storageid
  295. AND pdbdate = :arg_pdbdate
  296. AND flag = 0;
  297. IF sqlca.SQLCode <> 0 THEN
  298. arg_msg = '查询盘点表是否未审核失败,'+sqlca.SQLErrText
  299. rslt = 0
  300. GOTO ext
  301. END IF
  302. IF cnt > 0 THEN
  303. arg_msg = '盘点表未审核,不能撤审'
  304. rslt = 0
  305. GOTO ext
  306. END IF
  307. //检查盘点日期后是否有结存
  308. ll_pdbdate = Long(arg_pdbdate)
  309. cnt = 0
  310. SELECT COUNT(*)
  311. INTO :cnt
  312. FROM u_warebalc
  313. WHERE (balcdateint >= :ll_pdbdate)
  314. And (storageid = :arg_storageid);
  315. IF sqlca.SQLCode <> 0 THEN
  316. arg_msg = '查询盘点日期后仓库是否有结存失败,'+sqlca.SQLErrText
  317. rslt = 0
  318. GOTO ext
  319. END IF
  320. IF cnt > 0 THEN
  321. arg_msg = '盘点日期后仓库已结存,不能撤审'
  322. rslt = 0
  323. GOTO ext
  324. END IF
  325. UPDATE u_warepdb
  326. SET flag = 0,
  327. auditemp = '',
  328. auditdate = :null_dt
  329. WHERE storageid = :arg_storageid
  330. AND pdbdate = :arg_pdbdate;
  331. IF sqlca.SQLCode <> 0 THEN
  332. arg_msg = '更新盘点表审核标记失败,'+sqlca.SQLErrText
  333. rslt = 0
  334. GOTO ext
  335. END IF
  336. //盘点后, 记录库存分配的信息 20120716 lhd
  337. UPDATE u_warepdb_assign_log
  338. SET edqty = 0
  339. WHERE u_warepdb_assign_log.storageid = :arg_storageid
  340. And u_warepdb_assign_log.pdbdate = :arg_pdbdate;
  341. IF sqlca.SQLCode <> 0 THEN
  342. arg_msg = '记录库存分配的信息失败,'+sqlca.SQLErrText
  343. rslt = 0
  344. GOTO ext
  345. END IF
  346. ext:
  347. IF rslt = 0 THEN
  348. ROLLBACK;
  349. ELSEIF rslt = 1 AND arg_ifcommit THEN
  350. COMMIT;
  351. END IF
  352. RETURN rslt
  353. end function
  354. public function integer uof_pdb_del (long arg_storageid, long arg_pdbdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  355. Long cnt = 0
  356. IF arg_storageid <= 0 THEN
  357. arg_msg = '请选择要仓库'
  358. rslt = 0
  359. GOTO ext
  360. END IF
  361. SELECT count(*)
  362. INTO :cnt
  363. FROM u_warepdb
  364. WHERE u_warepdb.storageid = :arg_storageid
  365. AND u_warepdb.pdbdate = :arg_pdbdate
  366. AND flag = 1;
  367. IF sqlca.SQLCode <> 0 THEN
  368. arg_msg = '查询操作失败,在盘点日:'+String(arg_pdbdate)+'数据资料失败,'+sqlca.SQLErrText
  369. rslt = 0
  370. GOTO ext
  371. END IF
  372. IF cnt > 0 THEN
  373. arg_msg = '盘点日:'+String(arg_pdbdate)+',盘点数据已经审核,不能删除'
  374. rslt = 0
  375. GOTO ext
  376. END IF
  377. DELETE FROM u_warepdb
  378. WHERE pdbdate = :arg_pdbdate
  379. AND storageid = :arg_storageid;
  380. IF sqlca.SQLCode <> 0 THEN
  381. arg_msg = '删除当前期的盘点表失败!'+sqlca.SQLErrText
  382. rslt = 0
  383. GOTO ext
  384. END IF
  385. DELETE FROM u_warepdb_assign_log
  386. WHERE pdbdate = :arg_pdbdate
  387. AND storageid = :arg_storageid;
  388. IF sqlca.SQLCode <> 0 THEN
  389. arg_msg = '删除当前期的盘点表库存分配信息失败!'+sqlca.SQLErrText
  390. rslt = 0
  391. GOTO ext
  392. END IF
  393. ext:
  394. IF rslt = 0 THEN
  395. ROLLBACK;
  396. ELSEIF rslt = 1 AND arg_ifcommit THEN
  397. COMMIT;
  398. END IF
  399. RETURN rslt
  400. end function
  401. public function integer uof_pdb_add (long arg_atid, long arg_storageid, datetime arg_pdbdt, integer arg_ifnoallocqty, ref string arg_msg, boolean arg_ifcommit);//====================================================================
  402. // 事件: uo_ware_pdb_balc.uof_pdb_add()
  403. //--------------------------------------------------------------------
  404. // 描述:
  405. //--------------------------------------------------------------------
  406. // 参数:
  407. // value long arg_atid
  408. // value long arg_storageid
  409. // value datetime arg_pdbdt
  410. // value integer arg_ifnoallocqty
  411. // reference string arg_msg
  412. // value boolean arg_ifcommit
  413. //--------------------------------------------------------------------
  414. // 返回: integer
  415. //--------------------------------------------------------------------
  416. //--------------------------------------------------------------------
  417. // Copyright (c) 2002-2018 RICHTA(TM), All rights reserved.
  418. //--------------------------------------------------------------------
  419. // 修改历史:
  420. //
  421. //====================================================================
  422. Int rslt = 1
  423. Long ll_waredate
  424. Long ls_scid
  425. DateTime st_date,ed_date,ls_serverdate
  426. Date ls_enddate
  427. Long cnt
  428. Int li_mtrlprp
  429. ll_waredate = Long(String(arg_pdbdt,'yyyymmdd'))
  430. If arg_storageid <= 0 Then
  431. arg_msg = "请选择仓库"
  432. rslt = 0
  433. Goto ext
  434. End If
  435. Select scid,mtrlprp Into :ls_scid,:li_mtrlprp
  436. From u_storage
  437. Where storageid = :arg_storageid;
  438. If sqlca.SQLCode <> 0 Then
  439. arg_msg = '查询仓库分部失败'+sqlca.SQLErrText
  440. rslt = 0
  441. Goto ext
  442. End If
  443. Select count(*)
  444. Into :cnt
  445. From u_warepdb
  446. Where storageid = :arg_storageid
  447. And pdbdate = :ll_waredate;
  448. If sqlca.SQLCode <> 0 Then
  449. rslt = 0
  450. arg_msg = '查询盘点表是否已存在失败,'+sqlca.SQLErrText
  451. Goto ext
  452. End If
  453. If cnt > 0 Then
  454. rslt = 0
  455. arg_msg = '该仓库当前日期的盘点表已经存在,不能再建立!'
  456. Goto ext
  457. End If
  458. Select count(*)
  459. Into :cnt
  460. From u_warepdb_assign
  461. Where storageid = :arg_storageid
  462. And pdbdate = :ll_waredate;
  463. If sqlca.SQLCode <> 0 Then
  464. rslt = 0
  465. arg_msg = '查询盘点表是否已存在失败,'+sqlca.SQLErrText
  466. Goto ext
  467. End If
  468. If cnt > 0 Then
  469. rslt = 0
  470. arg_msg = '该仓库当前日期的盘点表已经存在,不能再建立!'
  471. Goto ext
  472. End If
  473. If li_mtrlprp = 3 Then
  474. cnt = 0
  475. Select count(*)
  476. Into :cnt
  477. From u_outware Inner JOIN
  478. u_outwaremx Inner JOIN
  479. u_mtrldef ON u_outwaremx.mtrlid = u_mtrldef.mtrlid ON
  480. u_outware.scid = u_outwaremx.scid And
  481. u_outware.outwareid = u_outwaremx.outwareid Inner JOIN
  482. u_storage ON u_outware.StorageID = u_storage.storageid Inner JOIN
  483. u_sc_workgroup ON u_outware.relint_2 = u_sc_workgroup.wrkGrpid Inner JOIN
  484. u_workgroup ON u_outware.relid = u_workgroup.workgroupid Inner JOIN
  485. u_sc_wkp ON u_sc_workgroup.storageid = u_sc_wkp.wrkGrpid RIGHT Outer JOIN
  486. u_mtrlware ON u_outwaremx.scid = u_mtrlware.scid And
  487. u_outwaremx.mtrlwareid = u_mtrlware.mtrlwareid LEFT Outer JOIN
  488. u_outware_scllplan RIGHT Outer JOIN
  489. u_outware_scllplan_mx_mx ON
  490. u_outware_scllplan.outwareid = u_outware_scllplan_mx_mx.outwareid ON
  491. u_outwaremx.relid = u_outware_scllplan_mx_mx.outwareid And
  492. u_outwaremx.relprintid = u_outware_scllplan_mx_mx.printid
  493. Where (u_outwaremx.qty > u_outwaremx.planqty) And
  494. ( u_outware.billtype = 3 And u_outware.relint_1 = 4 )
  495. And (u_outware.flag = 1)
  496. And (u_outware.outdate <= :arg_pdbdt)
  497. And (u_outwaremx.wsauditflag = 0)
  498. And (u_sc_workgroup.storageid In (Select wrkGrpid From u_sc_wkp Where storageid = :arg_storageid));
  499. If sqlca.SQLCode <> 0 Then
  500. arg_msg = '查询未进行车间审核的超发料明细失败'+sqlca.SQLErrText
  501. rslt = 0
  502. Goto ext
  503. End If
  504. If cnt > 0 Then
  505. rslt = 0
  506. arg_msg = '该仓库对应车间有未进行车间审核的超发料明细,不能建立盘点表!'
  507. Goto ext
  508. End If
  509. End If
  510. If arg_atid = 0 Then
  511. rslt = uof_warebalc_check_inoutflag(arg_storageid,arg_pdbdt,arg_msg,0)
  512. If rslt = 0 Or rslt = 2 Then
  513. Goto ext
  514. End If
  515. End If
  516. Select Top 1 getdate() Into :ls_serverdate From u_user ;
  517. If sqlca.SQLCode <> 0 Then
  518. arg_msg = '查询当前日期操作失败'+sqlca.SQLErrText
  519. rslt = 0
  520. Goto ext
  521. End If
  522. ls_enddate = Date(String(arg_pdbdt,'yyyy-mm-dd'))
  523. st_date = DateTime(RelativeDate(Date(ls_enddate),1),Time('0:0'))
  524. ed_date = DateTime(RelativeDate(Date(ls_serverdate),1),Time('0:0'))
  525. If st_date > ed_date Then
  526. arg_msg = '盘点日期不能大过于当前日期'
  527. rslt = 0
  528. Goto ext
  529. End If
  530. Delete u_parm_balcdate ;
  531. If sqlca.SQLCode <> 0 Then
  532. arg_msg = "因网络或其它原因导致操作失败,请重试"
  533. rslt = 0
  534. Goto ext
  535. End If
  536. Insert Into u_parm_balcdate (first_date,end_date)
  537. Values (:st_date,:ed_date) ;
  538. If sqlca.SQLCode <> 0 Then
  539. arg_msg = "因网络或其它原因导致建立开始日期,结束日期操作失败,请重试,"+sqlca.SQLErrText
  540. rslt = 0
  541. Goto ext
  542. End If
  543. Commit ;
  544. Insert Into u_warepdb (
  545. atid,
  546. flag,
  547. pdbdate,
  548. scid,
  549. mtrlwareid,
  550. mtrlid,
  551. storageid,
  552. plancode,
  553. Status,
  554. planprice,
  555. Sptid,
  556. Dxflag,
  557. newprice,
  558. woodcode,
  559. pcode,
  560. cost,
  561. qty,
  562. factqty,
  563. uqty,
  564. factuqty,
  565. rate,
  566. wareamt,
  567. scllflag,
  568. pdbdt,
  569. pdbemp,
  570. mtrlcuscode,
  571. location)
  572. Select
  573. :arg_atid,
  574. 0,
  575. :ll_waredate ,
  576. u_mtrlware.scid,
  577. u_mtrlware.mtrlwareid,
  578. u_mtrlware.mtrlid,
  579. u_mtrlware.storageid,
  580. u_mtrlware.plancode,
  581. u_mtrlware.Status,
  582. u_mtrldef.planprice,
  583. u_mtrlware.Sptid,
  584. u_mtrlware.Dxflag,
  585. u_mtrlware.newprice,
  586. u_mtrlware.woodcode,
  587. u_mtrlware.pcode,
  588. u_mtrlware.cost,
  589. u_mtrlware.noallocqty + ISNULL(uv_pdb_outware.desqty, 0) - ISNULL(uv_pdb_inware.incqty, 0),
  590. 0,
  591. case u_mtrldef.ifunit when 0 then u_mtrlware.noallocqty + ISNULL(uv_pdb_outware.desqty, 0) - ISNULL(uv_pdb_inware.incqty, 0)
  592. else u_mtrlware.unoallocqty + ISNULL(uv_pdb_outware.desuqty, 0) - ISNULL(uv_pdb_inware.incuqty, 0) End ,
  593. 0,
  594. case u_mtrldef.ifunit when 0 then 1 else
  595. case u_mtrlware.unoallocqty + ISNULL(uv_pdb_outware.desuqty, 0) - ISNULL(uv_pdb_inware.incuqty, 0) when 0 then u_mtrldef.rate_buy
  596. else round((u_mtrlware.noallocqty + ISNULL(uv_pdb_outware.desqty, 0) - ISNULL(uv_pdb_inware.incqty, 0))/(u_mtrlware.unoallocqty + ISNULL(uv_pdb_outware.desuqty, 0) - ISNULL(uv_pdb_inware.incuqty, 0)),5) End End,
  597. u_mtrlware.wareamt + ISNULL(uv_pdb_outware.desamt, 0) - ISNULL(uv_pdb_inware.incamt,0),
  598. u_mtrldef.scllflag,
  599. getdate(),
  600. :publ_operator,
  601. u_mtrlware.mtrlcuscode,
  602. u_mtrlware.location
  603. From uv_pdb_inware RIGHT Outer JOIN
  604. u_mtrlware ON uv_pdb_inware.storageid = u_mtrlware.storageid And
  605. uv_pdb_inware.mtrlid = u_mtrlware.mtrlid And
  606. uv_pdb_inware.plancode = u_mtrlware.plancode And
  607. uv_pdb_inware.status = u_mtrlware.Status And
  608. uv_pdb_inware.cusid = u_mtrlware.Sptid And
  609. uv_pdb_inware.Dxflag = u_mtrlware.Dxflag And
  610. uv_pdb_inware.pcode = u_mtrlware.pcode And
  611. uv_pdb_inware.woodcode = u_mtrlware.woodcode LEFT Outer JOIN
  612. uv_pdb_outware ON u_mtrlware.storageid = uv_pdb_outware.StorageID And
  613. u_mtrlware.mtrlid = uv_pdb_outware.mtrlid And
  614. u_mtrlware.plancode = uv_pdb_outware.plancode And
  615. u_mtrlware.Status = uv_pdb_outware.status And
  616. u_mtrlware.Sptid = uv_pdb_outware.Sptid And
  617. u_mtrlware.Dxflag = uv_pdb_outware.Dxflag And
  618. u_mtrlware.woodcode = uv_pdb_outware.woodcode And
  619. u_mtrlware.pcode = uv_pdb_outware.pcode,
  620. u_mtrldef
  621. Where (u_mtrldef.mtrlid = u_mtrlware.mtrlid) And
  622. (u_mtrlware.storageid = :arg_storageid) And
  623. (u_mtrlware.scid = :ls_scid) And
  624. (u_mtrlware.noallocqty > 0 And :arg_ifnoallocqty = 1 Or :arg_ifnoallocqty = 0);
  625. If sqlca.SQLCode <> 0 Then
  626. If Pos(sqlca.SQLErrText,'Cannot insert duplicate key in') > 0 Then
  627. arg_msg = '该仓库当前日期的盘点表已经存在,不能建立!'
  628. Else
  629. arg_msg = '生成当前期的盘点表失败!~n原因是:'+sqlca.SQLErrText
  630. End If
  631. rslt = 0
  632. Goto ext
  633. End If
  634. //盘点前, 记录库存分配的信息 20120716 lhd
  635. Insert Into u_warepdb_assign_log
  636. (storageid, pdbdate, Assignid, assigntype, Scid, Mtrlwareid, cusid, Mtrlcuscode,
  637. Relbillid, Relbillcode, Relprintid, bgqty)
  638. Select u_mtrlware.storageid, :ll_waredate as pdbdate, u_mtrlware_assign.Assignid,
  639. u_mtrlware_assign.assigntype, u_mtrlware_assign.Scid,
  640. u_mtrlware_assign.Mtrlwareid, u_mtrlware_assign.cusid,
  641. u_mtrlware_assign.Mtrlcuscode, u_mtrlware_assign.Relbillid,
  642. u_mtrlware_assign.Relbillcode, u_mtrlware_assign.Relprintid,
  643. u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty AS bgqty
  644. From u_mtrlware_assign Inner JOIN
  645. u_mtrlware ON u_mtrlware_assign.scid = u_mtrlware.scid
  646. And u_mtrlware_assign.Mtrlwareid = u_mtrlware.mtrlwareid
  647. Where (u_mtrlware.storageid = :arg_storageid);
  648. If sqlca.SQLCode <> 0 Then
  649. arg_msg = ' 记录库存分配的信息失败,'+sqlca.SQLErrText
  650. rslt = 0
  651. Goto ext
  652. End If
  653. ext:
  654. If rslt = 0 Or rslt = 2 Then
  655. Rollback;
  656. ElseIf rslt = 1 And arg_ifcommit Then
  657. Commit;
  658. End If
  659. Return rslt
  660. end function
  661. public function integer uof_warebalc_amt (long arg_storageid, long arg_balcdateint, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  662. Long cnt
  663. Int li_ifautobalccmpl
  664. uo_warebalc_cmpl uo_cmpl
  665. uo_cmpl = Create uo_warebalc_cmpl
  666. IF arg_storageid <= 0 THEN
  667. arg_msg = '请选择仓库'
  668. rslt = 0
  669. GOTO ext
  670. END IF
  671. IF arg_balcdateint = 0 THEN
  672. arg_msg = '请先执行数量结存'
  673. rslt = 0
  674. GOTO ext
  675. END IF
  676. SELECT ifautobalccmpl
  677. INTO :li_ifautobalccmpl
  678. FROM u_storage
  679. Where storageid = :arg_storageid;
  680. IF sqlca.SQLCode <> 0 THEN
  681. rslt = 0
  682. arg_msg = "查询仓库信息失败. ~n 原因:"+sqlca.SQLErrText
  683. GOTO ext
  684. END IF
  685. //检查进仓单是否有未财审(采购收货单,退货单, 其它进仓单,生产进仓单,盘盈单)
  686. SELECT count(*)
  687. INTO :cnt
  688. FROM u_inware
  689. WHERE secflag = 0
  690. AND (balcdateint = :arg_balcdateint)
  691. AND (storageid = :arg_storageid)
  692. And (billtype In (1,3,8,9));
  693. IF sqlca.SQLCode <> 0 THEN
  694. rslt = 0
  695. arg_msg = "查询结存日期内是否有进仓单未财审失败. ~n 原因:"+sqlca.SQLErrText
  696. GOTO ext
  697. END IF
  698. IF cnt > 0 THEN
  699. rslt = 0
  700. arg_msg = "结存时间段内有进仓单未财审,不能执行金额结存"
  701. GOTO ext
  702. END IF
  703. //检查出仓单是否有未财审(销售发货单,其它出仓单,盘亏单)
  704. SELECT count(*)
  705. INTO :cnt
  706. FROM u_outware
  707. WHERE secflag = 0
  708. AND (balcdateint = :arg_balcdateint)
  709. AND (storageid = :arg_storageid)
  710. And (billtype In (1,8,9));
  711. IF sqlca.SQLCode <> 0 THEN
  712. rslt = 0
  713. arg_msg = "查询结存日期内是否有出仓单未财审失败. ~n 原因:"+sqlca.SQLErrText
  714. GOTO ext
  715. END IF
  716. IF cnt > 0 THEN
  717. rslt = 0
  718. arg_msg = "结存时间段内有出仓单未财审,不能执行金额结存"
  719. GOTO ext
  720. END IF
  721. //自动重算一次
  722. IF li_ifautobalccmpl = 1 THEN
  723. IF uo_cmpl.uof_warebalc_cmplamt_all(arg_storageid, arg_balcdateint, arg_msg, False, sqlca) = 0 THEN
  724. rslt = 0
  725. GOTO ext
  726. END IF
  727. END IF
  728. UPDATE u_warebalc
  729. SET AmtAuditFlag = 1,
  730. AmtAuditDate = getdate(),
  731. AmtAuditEmp = :publ_operator
  732. WHERE balcdateint = :arg_balcdateint
  733. And storageid = :arg_storageid;
  734. IF sqlca.SQLCode <> 0 THEN
  735. rslt = 0
  736. arg_msg = "更新结存表金额结存标记失败. ~n 原因:"+sqlca.SQLErrText
  737. GOTO ext
  738. END IF
  739. ext:
  740. Destroy uo_cmpl
  741. IF rslt = 0 THEN
  742. ROLLBACK;
  743. ELSEIF rslt = 1 And arg_ifcommit THEN
  744. COMMIT;
  745. END IF
  746. RETURN rslt
  747. end function
  748. public function integer uof_warebalc_amt_cancel (long arg_storageid, long arg_balcdateint, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  749. Long cnt
  750. IF arg_storageid <= 0 THEN
  751. arg_msg = '请选择仓库'
  752. rslt = 0
  753. GOTO ext
  754. END IF
  755. //检查结存表的金额结存数据,如果有比这个月份后的, 不能撤审
  756. SELECT count(*)
  757. INTO :cnt
  758. FROM u_warebalc
  759. WHERE balcdateint > :arg_balcdateint
  760. AND storageid = :arg_storageid
  761. And AmtAuditFlag = 1;
  762. IF sqlca.SQLCode <> 0 THEN
  763. rslt = 0
  764. arg_msg = "查询最后一次金额结存失败. ~n 原因:"+sqlca.SQLErrText
  765. GOTO ext
  766. END IF
  767. IF cnt > 0 THEN
  768. rslt = 0
  769. arg_msg = '当前选择不是最后一次金额结存,不能操作'
  770. GOTO ext
  771. END IF
  772. UPDATE u_warebalc
  773. SET AmtAuditFlag = 0,
  774. AmtAuditDate = NULL,
  775. AmtAuditEmp = ''
  776. WHERE balcdateint = :arg_balcdateint
  777. And storageid = :arg_storageid;
  778. IF sqlca.SQLCode <> 0 THEN
  779. rslt = 0
  780. arg_msg = "更新结存表金额结存标记失败. ~n 原因:"+sqlca.SQLErrText
  781. GOTO ext
  782. END IF
  783. ext:
  784. IF rslt = 0 THEN
  785. ROLLBACK;
  786. ELSEIF rslt = 1 And arg_ifcommit THEN
  787. COMMIT;
  788. END IF
  789. RETURN rslt
  790. end function
  791. public function integer uof_warebalc_check_inoutflag (long arg_storageid, datetime arg_balcdate, ref string arg_msg, integer arg_ifchecksale);//arg_ifchecksale 0-询问 1-继续 2-不继续
  792. Long rslt = 1
  793. Long cnt = 0
  794. String ls_storagename
  795. Int li_mtrlprp
  796. IF uo_option_warebalc_checksale = -1000 THEN
  797. arg_msg = '选项:[152]盘点结存限制日期前不能有未审发货单,读取初始默认值失败,操作取消!'
  798. rslt = 0
  799. GOTO ext
  800. END IF
  801. IF uo_option_wkpmtrlware = -1000 THEN
  802. arg_msg = '选项:[057]生产使用车间核算,读取初始默认值失败,操作取消!'
  803. rslt = 0
  804. GOTO ext
  805. END IF
  806. IF uo_option_outware_scll_new_cj_mtrlware = -1000 THEN
  807. arg_msg = '选项:[355]其它领料单增加车间仓库存,读取初始默认值失败,操作取消!'
  808. rslt = 0
  809. GOTO ext
  810. END IF
  811. SELECT storagename,mtrlprp
  812. INTO :ls_storagename,:li_mtrlprp
  813. FROM u_storage
  814. Where storageid = :arg_storageid;
  815. IF sqlca.SQLCode <> 0 THEN
  816. rslt = 0
  817. arg_msg = '查询操作失败,仓库名称'
  818. GOTO ext
  819. END IF
  820. IF uo_option_wkpmtrlware = 1 And li_mtrlprp = 3 THEN
  821. cnt = 0
  822. SELECT count(*)
  823. INTO :cnt
  824. FROM u_outware INNER JOIN
  825. u_workgroup ON u_outware.relid = u_workgroup.workgroupid INNER JOIN
  826. u_sc_workgroup ON u_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid INNER JOIN
  827. u_sc_wkp ON u_sc_workgroup.storageid = u_sc_wkp.wrkGrpid
  828. WHERE (u_outware.billtype = 3)
  829. AND (u_outware.secflag = 0)
  830. AND (u_sc_wkp.ifwkpmtrlware = 1)
  831. AND (u_sc_wkp.storageid = :arg_storageid)
  832. AND (u_outware.outdate <= :arg_balcdate)
  833. And (u_outware.relint_1 <> 3 Or :uo_option_outware_scll_new_cj_mtrlware = 1);
  834. IF sqlca.SQLCode <> 0 THEN
  835. arg_msg = '查询车间仓是否有相关待二审的领料单失败'+sqlca.SQLErrText
  836. rslt = 0
  837. GOTO ext
  838. END IF
  839. IF cnt > 0 THEN
  840. rslt = 0
  841. arg_msg = '车间仓有相关待二审的领料单,请先审核'
  842. GOTO ext
  843. END IF
  844. SELECT count(*)
  845. INTO :cnt
  846. FROM u_sc_wkp u_sc_wkp_order INNER JOIN
  847. u_Order_ml ON
  848. u_sc_wkp_order.wrkGrpid = u_Order_ml.wrkGrpid RIGHT OUTER JOIN
  849. u_inware INNER JOIN
  850. u_inwaremx ON u_inware.scid = u_inwaremx.scid AND
  851. u_inware.inwareid = u_inwaremx.inwareid INNER JOIN
  852. u_mtrldef ON u_inwaremx.mtrlid = u_mtrldef.mtrlid INNER JOIN
  853. u_sc_wkp ON u_mtrldef.dftwrkGrpid = u_sc_wkp.wrkGrpid ON
  854. u_Order_ml.scid = u_inwaremx.scid AND
  855. u_Order_ml.OrderID = u_inwaremx.relid
  856. WHERE (u_inware.fkflag = 0)
  857. AND (u_inware.billtype = 3)
  858. AND ( u_inware.relint_2 = 0 )
  859. AND (u_inware.indate <= :arg_balcdate)
  860. AND ((u_sc_wkp_order.storageid = :arg_storageid AND u_inwaremx.relid > 0 AND u_sc_wkp_order.ifwkpmtrlware = 1)
  861. Or (u_sc_wkp.storageid = :arg_storageid And u_inwaremx.relid = 0 And u_sc_wkp.ifwkpmtrlware = 1));
  862. IF sqlca.SQLCode <> 0 THEN
  863. arg_msg = '查询车间仓是否有相关未反扣的生产进仓单失败'+sqlca.SQLErrText
  864. rslt = 0
  865. GOTO ext
  866. END IF
  867. IF cnt > 0 THEN
  868. rslt = 0
  869. arg_msg = '车间仓有相关相关未反扣的生产进仓单,请先反扣'
  870. GOTO ext
  871. END IF
  872. END IF
  873. //1.检查日期前
  874. //1.1检查进仓单
  875. cnt = 0
  876. SELECT count(*)
  877. INTO :cnt
  878. FROM u_inware
  879. WHERE flag = 0
  880. AND storageid = :arg_storageid
  881. And indate <= :arg_balcdate ;
  882. IF sqlca.SQLCode <> 0 THEN
  883. rslt = 0
  884. arg_msg = '查询操作失败,日期前是否有进仓单未审'
  885. GOTO ext
  886. END IF
  887. IF cnt > 0 THEN
  888. rslt = 0
  889. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有('+String(cnt)+')进仓单未审'
  890. GOTO ext
  891. END IF
  892. //1.2不检查已开未审发货单,(占库存)
  893. cnt = 0
  894. SELECT count(*)
  895. INTO :cnt
  896. FROM u_outware
  897. WHERE flag = 0
  898. AND storageid = :arg_storageid
  899. AND billtype <> 1
  900. And outdate <= :arg_balcdate ;
  901. IF sqlca.SQLCode <> 0 THEN
  902. rslt = 0
  903. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前是否有出仓单未审'
  904. GOTO ext
  905. END IF
  906. IF cnt > 0 THEN
  907. rslt = 0
  908. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有('+String(cnt)+')出仓单未审'
  909. GOTO ext
  910. END IF
  911. //1.2.1 检查已开未审发货单,(占库存)
  912. cnt = 0
  913. SELECT count(*)
  914. INTO :cnt
  915. FROM u_outware
  916. WHERE flag = 0
  917. AND storageid = :arg_storageid
  918. AND billtype = 1
  919. And outdate <= :arg_balcdate ;
  920. IF sqlca.SQLCode <> 0 THEN
  921. rslt = 0
  922. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前是否有发货单未审'
  923. GOTO ext
  924. END IF
  925. IF uo_option_warebalc_checksale = 1 THEN
  926. IF cnt > 0 THEN
  927. rslt = 0
  928. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有('+String(cnt)+')发货单未审'
  929. GOTO ext
  930. END IF
  931. ELSE
  932. IF cnt > 0 THEN
  933. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有('+String(cnt)+')发货单未审'
  934. IF arg_ifchecksale = 0 THEN
  935. IF MessageBox('询问',arg_msg+',是否继续?',question!,yesno!) = 2 THEN
  936. rslt = 2
  937. GOTO ext
  938. END IF
  939. ELSEIF arg_ifchecksale = 2 THEN
  940. rslt = 2
  941. GOTO ext
  942. END IF
  943. END IF
  944. END IF
  945. //1.3检查调仓单
  946. cnt = 0
  947. SELECT count(*)
  948. INTO :cnt
  949. FROM u_outware_move
  950. WHERE ( flag = 0 )
  951. AND ( sstorageid = :arg_storageid )
  952. And ( outdate <= :arg_balcdate );
  953. IF sqlca.SQLCode <> 0 THEN
  954. rslt = 0
  955. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前是否有调仓单调出未审'
  956. GOTO ext
  957. END IF
  958. IF cnt > 0 THEN
  959. rslt = 0
  960. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有('+String(cnt)+')调仓单未审'
  961. GOTO ext
  962. END IF
  963. cnt = 0
  964. SELECT count(*)
  965. INTO :cnt
  966. FROM u_outware_move
  967. WHERE ( d_auditflag = 0 )
  968. AND ( dstorageid = :arg_storageid )
  969. And ( indate <= :arg_balcdate );
  970. IF sqlca.SQLCode <> 0 THEN
  971. rslt = 0
  972. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前是否有调仓单调入未审'
  973. GOTO ext
  974. END IF
  975. IF cnt > 0 THEN
  976. rslt = 0
  977. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有('+String(cnt)+')调仓单未审'
  978. GOTO ext
  979. END IF
  980. //1.4 检查仓库外协进仓单(含返工单)
  981. cnt = 0
  982. SELECT count(*)
  983. INTO :cnt
  984. FROM ow_wfjg_in INNER JOIN
  985. ow_wfjgmx_in_aft ON ow_wfjg_in.scid = ow_wfjgmx_in_aft.scid AND
  986. ow_wfjg_in.inwareid = ow_wfjgmx_in_aft.inwareid
  987. WHERE (ow_wfjg_in.flag = 0 )
  988. AND (ow_wfjg_in.indate <= :arg_balcdate)
  989. AND (ow_wfjgmx_in_aft.storageid = :arg_storageid)
  990. And (ow_wfjg_in.billtype = 4);
  991. IF sqlca.SQLCode <> 0 THEN
  992. rslt = 0
  993. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前是否有仓库外协进仓单或仓库外协返工单未审'
  994. GOTO ext
  995. END IF
  996. IF cnt > 0 THEN
  997. rslt = 0
  998. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有('+String(cnt)+')仓库外协进仓单或仓库外协返工单未审'
  999. GOTO ext
  1000. END IF
  1001. //1.5 检查仓库外协发出单(含退回单)
  1002. cnt = 0
  1003. SELECT count(*)
  1004. INTO :cnt
  1005. FROM ow_wfjg_out INNER JOIN
  1006. ow_wfjgmx_out ON ow_wfjg_out.scid = ow_wfjgmx_out.scid AND
  1007. ow_wfjg_out.outwareid = ow_wfjgmx_out.outwareid
  1008. WHERE (ow_wfjg_out.flag = 0 )
  1009. AND (ow_wfjg_out.outdate <= :arg_balcdate)
  1010. AND (ow_wfjgmx_out.storageid = :arg_storageid)
  1011. And (ow_wfjg_out.billtype = 4);
  1012. IF sqlca.SQLCode <> 0 THEN
  1013. rslt = 0
  1014. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前是否有仓库外协发出单或仓库外协退回单未审'
  1015. GOTO ext
  1016. END IF
  1017. IF cnt > 0 THEN
  1018. rslt = 0
  1019. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有('+String(cnt)+')仓库外协发出单或仓库外协退回单未审'
  1020. GOTO ext
  1021. END IF
  1022. //1.5.1 检查外协订单, 开通选项自动生成发出单的情况
  1023. IF sys_option_autocreate_outware = 1 THEN
  1024. cnt = 0
  1025. SELECT count(*)
  1026. INTO :cnt
  1027. FROM u_order_wfjg INNER JOIN
  1028. u_order_wfjgMx_out ON u_order_wfjg.scid = u_order_wfjgMx_out.scid AND
  1029. u_order_wfjg.wfjgID = u_order_wfjgMx_out.wfjgID
  1030. WHERE (u_order_wfjg.status = 0 )
  1031. AND (u_order_wfjg.requiredate <= :arg_balcdate)
  1032. And (u_order_wfjgMx_out.storageid = :arg_storageid);
  1033. IF sqlca.SQLCode <> 0 THEN
  1034. rslt = 0
  1035. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前是否有外协订单未审'
  1036. GOTO ext
  1037. END IF
  1038. IF cnt > 0 THEN
  1039. rslt = 0
  1040. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有('+String(cnt)+')外协订单未审(自动生成发出)'
  1041. GOTO ext
  1042. END IF
  1043. END IF
  1044. //1.6 检查仓库外协销售单(含退货单)
  1045. cnt = 0
  1046. SELECT count(*)
  1047. INTO :cnt
  1048. FROM ow_wfjg_out INNER JOIN
  1049. ow_wfjgmx_out ON ow_wfjg_out.scid = ow_wfjgmx_out.scid AND
  1050. ow_wfjg_out.outwareid = ow_wfjgmx_out.outwareid
  1051. WHERE (ow_wfjg_out.flag = 0 )
  1052. AND (ow_wfjg_out.outdate <= :arg_balcdate)
  1053. AND (ow_wfjgmx_out.storageid = :arg_storageid)
  1054. And (ow_wfjg_out.billtype = 7);
  1055. IF sqlca.SQLCode <> 0 THEN
  1056. rslt = 0
  1057. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前是否有仓库外协销售单或仓库外协销售退货单未审'
  1058. GOTO ext
  1059. END IF
  1060. IF cnt > 0 THEN
  1061. rslt = 0
  1062. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有('+String(cnt)+')仓库外协销售单或仓库外协销售退货单未审'
  1063. GOTO ext
  1064. END IF
  1065. //2.检查日期后
  1066. //2.1检查进仓单
  1067. cnt = 0
  1068. SELECT count(*)
  1069. INTO :cnt
  1070. FROM u_inware
  1071. WHERE flag = 1
  1072. AND storageid = :arg_storageid
  1073. And indate > :arg_balcdate ;
  1074. IF sqlca.SQLCode <> 0 THEN
  1075. rslt = 0
  1076. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后是否有进仓单已审'
  1077. GOTO ext
  1078. END IF
  1079. IF cnt > 0 THEN
  1080. rslt = 0
  1081. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后有('+String(cnt)+')进仓单已审'
  1082. GOTO ext
  1083. END IF
  1084. //2.2检查出仓单
  1085. cnt = 0
  1086. SELECT count(*)
  1087. INTO :cnt
  1088. FROM u_outware
  1089. WHERE flag = 1
  1090. AND storageid = :arg_storageid
  1091. And outdate > :arg_balcdate ;
  1092. IF sqlca.SQLCode <> 0 THEN
  1093. rslt = 0
  1094. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后是否有出仓单已审'
  1095. GOTO ext
  1096. END IF
  1097. IF cnt > 0 THEN
  1098. rslt = 0
  1099. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后有('+String(cnt)+')出仓单已审'
  1100. GOTO ext
  1101. END IF
  1102. //2.3检查调仓单
  1103. cnt = 0
  1104. SELECT count(*)
  1105. INTO :cnt
  1106. FROM u_outware_move
  1107. WHERE ( flag = 1 )
  1108. AND ( sstorageid = :arg_storageid )
  1109. And ( outdate > :arg_balcdate );
  1110. IF sqlca.SQLCode <> 0 THEN
  1111. rslt = 0
  1112. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后是否有调仓单调出已审'
  1113. GOTO ext
  1114. END IF
  1115. IF cnt > 0 THEN
  1116. rslt = 0
  1117. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后有('+String(cnt)+')调仓单调出已审'
  1118. GOTO ext
  1119. END IF
  1120. cnt = 0
  1121. SELECT count(*)
  1122. INTO :cnt
  1123. FROM u_outware_move
  1124. WHERE ( d_auditflag = 1 )
  1125. AND ( dstorageid = :arg_storageid )
  1126. And ( outdate > :arg_balcdate );
  1127. IF sqlca.SQLCode <> 0 THEN
  1128. rslt = 0
  1129. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后是否有调仓单调入已审'
  1130. GOTO ext
  1131. END IF
  1132. IF cnt > 0 THEN
  1133. rslt = 0
  1134. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后有('+String(cnt)+')调仓单调入已审'
  1135. GOTO ext
  1136. END IF
  1137. //2.4 检查仓库外协进仓单(含返工单)
  1138. cnt = 0
  1139. SELECT count(*)
  1140. INTO :cnt
  1141. FROM ow_wfjg_in INNER JOIN
  1142. ow_wfjgmx_in_aft ON ow_wfjg_in.scid = ow_wfjgmx_in_aft.scid AND
  1143. ow_wfjg_in.inwareid = ow_wfjgmx_in_aft.inwareid
  1144. WHERE (ow_wfjg_in.flag = 1 )
  1145. AND (ow_wfjg_in.indate > :arg_balcdate)
  1146. AND (ow_wfjgmx_in_aft.storageid = :arg_storageid)
  1147. And (ow_wfjg_in.billtype = 4);
  1148. IF sqlca.SQLCode <> 0 THEN
  1149. rslt = 0
  1150. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后是否有仓库外协进仓单或仓库外协返工单已审'
  1151. GOTO ext
  1152. END IF
  1153. IF cnt > 0 THEN
  1154. rslt = 0
  1155. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后有('+String(cnt)+')仓库外协进仓单或仓库外协返工单已审'
  1156. GOTO ext
  1157. END IF
  1158. //2.5 检查仓库外协发出单(含退回单)
  1159. cnt = 0
  1160. SELECT count(*)
  1161. INTO :cnt
  1162. FROM ow_wfjg_out INNER JOIN
  1163. ow_wfjgmx_out ON ow_wfjg_out.scid = ow_wfjgmx_out.scid AND
  1164. ow_wfjg_out.outwareid = ow_wfjgmx_out.outwareid
  1165. WHERE (ow_wfjg_out.flag = 1 )
  1166. AND (ow_wfjg_out.outdate > :arg_balcdate)
  1167. AND (ow_wfjgmx_out.storageid = :arg_storageid)
  1168. And (ow_wfjg_out.billtype = 4);
  1169. IF sqlca.SQLCode <> 0 THEN
  1170. rslt = 0
  1171. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后是否有仓库外协发出单或仓库外协退回单已审'
  1172. GOTO ext
  1173. END IF
  1174. IF cnt > 0 THEN
  1175. rslt = 0
  1176. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',后有('+String(cnt)+')仓库外协发出单或仓库外协退回单已审'
  1177. GOTO ext
  1178. END IF
  1179. //// //
  1180. String ls_pdbdate
  1181. ls_pdbdate = String(arg_balcdate,'yyyymmdd')
  1182. cnt = 0
  1183. SELECT count(*) INTO :cnt
  1184. FROM u_warepdb
  1185. WHERE storageid = :arg_storageid
  1186. AND pdbdate <= :ls_pdbdate
  1187. And flag = 0;
  1188. IF sqlca.SQLCode <> 0 THEN
  1189. rslt = 0
  1190. arg_msg = '查询操作失败,日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前是否有盘点表未审'
  1191. GOTO ext
  1192. END IF
  1193. IF cnt > 0 THEN
  1194. rslt = 0
  1195. arg_msg = '仓库:'+ls_storagename+',日期:'+String(arg_balcdate,'yyyy-mm-dd hh:mm')+',前有盘点表未审'
  1196. GOTO ext
  1197. END IF
  1198. ext:
  1199. RETURN rslt
  1200. end function
  1201. public function integer uof_warebalc (long arg_storageid, datetime arg_balcdate, ref string arg_msg, boolean arg_ifcommit, integer arg_ifchecksale);Int rslt = 1
  1202. Long cnt
  1203. DateTime balc_date
  1204. Long ls_balcdateint
  1205. Int li_StoreBalcType, li_ifautobalccmpl
  1206. uo_warebalc_cmpl uo_cmpl
  1207. uo_cmpl = Create uo_warebalc_cmpl
  1208. IF arg_storageid <= 0 THEN
  1209. arg_msg = '请选择仓库'
  1210. rslt = 0
  1211. GOTO ext
  1212. END IF
  1213. ls_balcdateint = Year(Date(arg_balcdate)) * 10000 + Month(Date(arg_balcdate)) * 100 + Day(Date(arg_balcdate))
  1214. balc_date = DateTime(Date(arg_balcdate),Time('23:59:59'))
  1215. SELECT StoreBalcType, ifautobalccmpl
  1216. INTO :li_StoreBalcType, :li_ifautobalccmpl
  1217. FROM u_storage
  1218. Where storageid = :arg_storageid;
  1219. IF sqlca.SQLCode <> 0 THEN
  1220. rslt = 0
  1221. arg_msg = "查询仓库信息失败,"+sqlca.SQLErrText
  1222. GOTO ext
  1223. END IF
  1224. SELECT count(*) INTO :cnt
  1225. FROM u_warebalc
  1226. WHERE balcdate >= :balc_date
  1227. And storageid = :arg_storageid;
  1228. IF cnt <> 0 THEN
  1229. rslt = 0
  1230. arg_msg = "仓库指定日期后已进行过结存操作"
  1231. GOTO ext
  1232. END IF
  1233. //检查单据
  1234. rslt = uof_warebalc_check_inoutflag(arg_storageid,arg_balcdate,arg_msg,arg_ifchecksale)
  1235. IF rslt = 0 Or rslt = 2 THEN
  1236. GOTO ext
  1237. END IF
  1238. //自动重算一次
  1239. IF li_StoreBalcType = 0 THEN
  1240. IF li_ifautobalccmpl = 1 THEN
  1241. //未结存,重算的是本期
  1242. IF uo_cmpl.uof_warebalc_cmplamt_all(arg_storageid, 0, arg_msg, False, sqlca) = 0 THEN
  1243. rslt = 0
  1244. GOTO ext
  1245. END IF
  1246. END IF
  1247. END IF
  1248. //把当前最新的标准成本价更新到结存表的标准成本价列
  1249. UPDATE u_warebalc
  1250. SET u_warebalc.stprice = u_mtrldef_planprice.stprice
  1251. FROM u_warebalc INNER JOIN
  1252. u_mtrldef_planprice ON u_warebalc.mtrlid = u_mtrldef_planprice.mtrlid AND
  1253. u_warebalc.status = u_mtrldef_planprice.status AND
  1254. u_warebalc.woodcode = u_mtrldef_planprice.woodcode AND
  1255. u_warebalc.pcode = u_mtrldef_planprice.pcode
  1256. WHERE balcdateint = 0
  1257. And storageid = :arg_storageid;
  1258. IF sqlca.SQLCode <> 0 THEN
  1259. rslt = 0
  1260. arg_msg = "更新结存表标准成本价失败. ~n 原因:"+sqlca.SQLErrText
  1261. GOTO ext
  1262. END IF
  1263. UPDATE u_warebalc
  1264. SET balcdateint = :ls_balcdateint,
  1265. balcdate = :arg_balcdate,
  1266. QtyAuditFlag = 1,
  1267. QtyAuditDate = getdate(),
  1268. QtyAuditEmp = :publ_operator,
  1269. AmtAuditFlag = case :li_StoreBalcType when 0 then 1 else 0 END,
  1270. AmtAuditDate = case :li_StoreBalcType when 0 then getdate() else NULL END,
  1271. AmtAuditEmp = case :li_StoreBalcType when 0 then :publ_operator else '' END
  1272. WHERE balcdateint = 0
  1273. And storageid = :arg_storageid;
  1274. IF sqlca.SQLCode <> 0 THEN
  1275. rslt = 0
  1276. arg_msg = "更新仓库结存标记失败. ~n 原因:"+sqlca.SQLErrText
  1277. GOTO ext
  1278. END IF
  1279. INSERT INTO u_warebalc
  1280. (balcdateint,
  1281. storageid,
  1282. mtrlid,
  1283. bgqty,
  1284. ubgqty,
  1285. bgamt,
  1286. incqty,
  1287. uincqty,
  1288. incamt,
  1289. desqty,
  1290. udesqty,
  1291. desamt,
  1292. balcqty,
  1293. ubalcqty,
  1294. balcamt,
  1295. pypk,
  1296. scid,
  1297. status,
  1298. woodcode,
  1299. pcode,
  1300. plancode,
  1301. sptid,
  1302. dxflag,
  1303. mtrlcuscode,
  1304. location,
  1305. mtrlwareid)
  1306. SELECT 0,
  1307. u_warebalc.storageid,
  1308. u_warebalc.mtrlid,
  1309. u_warebalc.balcqty,
  1310. u_warebalc.ubalcqty,
  1311. u_warebalc.balcamt,
  1312. 0,
  1313. 0,
  1314. 0,
  1315. 0,
  1316. 0,
  1317. 0,
  1318. u_warebalc.balcqty,
  1319. u_warebalc.ubalcqty,
  1320. u_warebalc.balcamt,
  1321. 0,
  1322. u_warebalc.scid,
  1323. u_warebalc.status,
  1324. u_warebalc.woodcode,
  1325. u_warebalc.pcode,
  1326. u_warebalc.plancode,
  1327. u_warebalc.sptid,
  1328. u_warebalc.dxflag,
  1329. u_warebalc.mtrlcuscode,
  1330. u_warebalc.location,
  1331. u_warebalc.mtrlwareid
  1332. FROM u_warebalc
  1333. WHERE ( (abs(u_warebalc.bgqty)+abs(u_warebalc.desqty)+abs(u_warebalc.incqty)+abs(u_warebalc.balcqty) <> 0)
  1334. OR (abs(u_warebalc.bgamt)+ abs(u_warebalc.incamt)+abs(u_warebalc.desamt)+abs(u_warebalc.balcamt) <> 0) )
  1335. AND ( u_warebalc.storageid = :arg_storageid )
  1336. And ( u_warebalc.balcdateint = :ls_balcdateint );
  1337. IF sqlca.SQLCode <> 0 THEN
  1338. arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText
  1339. rslt = 0
  1340. GOTO ext
  1341. END IF
  1342. // 写入日表 upartbalc
  1343. UPDATE u_inware
  1344. SET balcflag = 1 ,
  1345. u_inware.balcdateint = :ls_balcdateint
  1346. WHERE ( u_inware.flag = 1 ) AND
  1347. ( u_inware.balcflag = 0 ) AND
  1348. ( u_inware.storageid = :arg_storageid ) AND
  1349. ( u_inware.balcdateint = 0 );
  1350. IF sqlca.SQLCode <> 0 THEN
  1351. rslt = 0
  1352. arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText
  1353. GOTO ext
  1354. END IF
  1355. UPDATE u_outware
  1356. SET balcflag = 1 ,
  1357. u_outware.balcdateint = :ls_balcdateint
  1358. WHERE ( u_outware.flag = 1 ) AND
  1359. ( u_outware.balcflag = 0 ) AND
  1360. ( u_outware.storageid = :arg_storageid ) AND
  1361. ( u_outware.balcdateint = 0 );
  1362. IF sqlca.SQLCode <> 0 THEN
  1363. rslt = 0
  1364. arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText
  1365. GOTO ext
  1366. END IF
  1367. ext:
  1368. Destroy uo_cmpl
  1369. IF rslt = 0 Or rslt = 2 THEN
  1370. ROLLBACK;
  1371. ELSEIF rslt = 1 And arg_ifcommit THEN
  1372. COMMIT;
  1373. END IF
  1374. RETURN rslt
  1375. end function
  1376. public function integer uof_pdb_add_assign (long arg_storageid, datetime arg_pdbdt, integer arg_ifnoallocqty, ref string arg_msg, boolean arg_ifcommit);
  1377. Int rslt = 1
  1378. Long ll_waredate
  1379. Long ls_scid
  1380. DateTime st_date,ed_date,ls_serverdate
  1381. Date ls_enddate
  1382. Long cnt
  1383. Int li_mtrlprp
  1384. ll_waredate = Long(String(arg_pdbdt,'yyyymmdd'))
  1385. IF arg_storageid <= 0 THEN
  1386. arg_msg = "请选择仓库"
  1387. rslt = 0
  1388. GOTO ext
  1389. END IF
  1390. SELECT scid,mtrlprp INTO :ls_scid,:li_mtrlprp
  1391. FROM u_storage
  1392. Where storageid = :arg_storageid;
  1393. IF sqlca.SQLCode <> 0 THEN
  1394. arg_msg = '查询仓库分部失败'+sqlca.SQLErrText
  1395. rslt = 0
  1396. GOTO ext
  1397. END IF
  1398. SELECT scid,mtrlprp INTO :ls_scid,:li_mtrlprp
  1399. FROM u_storage
  1400. Where storageid = :arg_storageid;
  1401. IF sqlca.SQLCode <> 0 THEN
  1402. arg_msg = '查询仓库分部失败'+sqlca.SQLErrText
  1403. rslt = 0
  1404. GOTO ext
  1405. END IF
  1406. SELECT count(*)
  1407. INTO :cnt
  1408. FROM u_warepdb
  1409. WHERE storageid = :arg_storageid
  1410. And pdbdate = :ll_waredate;
  1411. IF sqlca.SQLCode <> 0 THEN
  1412. rslt = 0
  1413. arg_msg = '查询盘点表是否已存在失败,'+sqlca.SQLErrText
  1414. GOTO ext
  1415. END IF
  1416. IF cnt > 0 THEN
  1417. rslt = 0
  1418. arg_msg = '该仓库当前日期的盘点表已经存在,不能再建立!'
  1419. GOTO ext
  1420. END IF
  1421. SELECT count(*)
  1422. INTO :cnt
  1423. FROM u_warepdb_assign
  1424. WHERE storageid = :arg_storageid
  1425. And pdbdate = :ll_waredate;
  1426. IF sqlca.SQLCode <> 0 THEN
  1427. rslt = 0
  1428. arg_msg = '查询盘点表是否已存在失败,'+sqlca.SQLErrText
  1429. GOTO ext
  1430. END IF
  1431. IF cnt > 0 THEN
  1432. rslt = 0
  1433. arg_msg = '该仓库当前日期的盘点表已经存在,不能再建立!'
  1434. GOTO ext
  1435. END IF
  1436. rslt = uof_warebalc_check_inoutflag(arg_storageid,arg_pdbdt,arg_msg,0)
  1437. IF rslt = 0 Or rslt = 2 THEN
  1438. GOTO ext
  1439. END IF
  1440. SELECT Top 1 getdate() Into :ls_serverdate From u_user ;
  1441. IF sqlca.SQLCode <> 0 THEN
  1442. arg_msg = '查询当前日期操作失败'+sqlca.SQLErrText
  1443. rslt = 0
  1444. GOTO ext
  1445. END IF
  1446. ls_enddate = Date(String(arg_pdbdt,'yyyy-mm-dd'))
  1447. st_date = DateTime(RelativeDate(Date(ls_enddate),1),Time('0:0'))
  1448. ed_date = DateTime(RelativeDate(Date(ls_serverdate),1),Time('0:0'))
  1449. IF st_date > ed_date THEN
  1450. arg_msg = '盘点日期不能大过于当前日期'
  1451. rslt = 0
  1452. GOTO ext
  1453. END IF
  1454. INSERT INTO u_warepdb_assign
  1455. (pdbdate,
  1456. scid,
  1457. mtrlwareid,
  1458. assignid,
  1459. mtrlid,
  1460. storageid,
  1461. status,
  1462. woodcode,
  1463. pcode,
  1464. plancode,
  1465. sptid,
  1466. mtrlcuscode,
  1467. location,
  1468. Dxflag,
  1469. qty,
  1470. factqty,
  1471. cost,
  1472. wareamt,
  1473. relbillid,
  1474. relprintid,
  1475. relbillcode,
  1476. pdbdt,
  1477. pdbemp)
  1478. SELECT :ll_waredate,
  1479. scid,
  1480. mtrlwareid,
  1481. 0 AS Assignid,
  1482. mtrlid,
  1483. storageid,
  1484. Status,
  1485. woodcode,
  1486. pcode,
  1487. plancode,
  1488. Sptid,
  1489. mtrlcuscode,
  1490. location,
  1491. Dxflag,
  1492. noallocqty - allocqty ,
  1493. noallocqty - allocqty ,
  1494. cost,
  1495. wareamt,
  1496. 0 AS Relbillid,
  1497. 0 AS Relprintid,
  1498. '' AS Relbillcode,
  1499. :ls_serverdate,
  1500. :publ_operator
  1501. FROM u_mtrlware
  1502. WHERE (storageid = :arg_storageid) AND
  1503. (scid = :ls_scid) AND
  1504. (noallocqty > 0 AND :arg_ifnoallocqty = 1 OR :arg_ifnoallocqty = 0)
  1505. UNION ALL
  1506. SELECT :ll_waredate,
  1507. u_mtrlware.scid,
  1508. u_mtrlware.mtrlwareid,
  1509. u_mtrlware_assign.Assignid,
  1510. u_mtrlware_assign.mtrlid,
  1511. u_mtrlware.storageid,
  1512. u_mtrlware.Status,
  1513. u_mtrlware.woodcode,
  1514. u_mtrlware.pcode,
  1515. u_mtrlware.plancode,
  1516. u_mtrlware.Sptid,
  1517. u_mtrlware.mtrlcuscode,
  1518. u_mtrlware.location,
  1519. u_mtrlware.Dxflag,
  1520. u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty ,
  1521. u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty ,
  1522. u_mtrlware.cost,
  1523. (u_mtrlware_assign.assignqty - u_mtrlware_assign.Outqty)
  1524. * u_mtrlware.cost AS wareamt,
  1525. u_mtrlware_assign.Relbillid,
  1526. u_mtrlware_assign.Relprintid,
  1527. u_mtrlware_assign.Relbillcode,
  1528. :ls_serverdate,
  1529. :publ_operator
  1530. FROM u_mtrlware_assign INNER JOIN
  1531. u_mtrlware ON u_mtrlware_assign.Scid = u_mtrlware.scid AND
  1532. u_mtrlware_assign.Mtrlwareid = u_mtrlware.mtrlwareid
  1533. WHERE (u_mtrlware_assign.assignqty > u_mtrlware_assign.Outqty) AND
  1534. (u_mtrlware_assign.assigntype = 1) AND
  1535. (u_mtrlware.storageid = :arg_storageid) AND
  1536. (u_mtrlware.scid = :ls_scid);
  1537. IF sqlca.SQLCode <> 0 THEN
  1538. IF Pos(sqlca.SQLErrText,'Cannot insert duplicate key in') > 0 THEN
  1539. arg_msg = '该仓库当前日期的盘点表已经存在,不能建立!'
  1540. ELSE
  1541. arg_msg = '生成当前期的盘点表失败!~n原因是:'+sqlca.SQLErrText
  1542. END IF
  1543. rslt = 0
  1544. GOTO ext
  1545. END IF
  1546. ext:
  1547. IF rslt = 0 Or rslt = 2 THEN
  1548. ROLLBACK;
  1549. ELSEIF rslt = 1 And arg_ifcommit THEN
  1550. COMMIT;
  1551. END IF
  1552. RETURN rslt
  1553. end function
  1554. public function integer uof_pdb_del_assign (long arg_storageid, long arg_pdbdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1555. Long cnt = 0
  1556. IF arg_storageid <= 0 THEN
  1557. arg_msg = '请选择要仓库'
  1558. rslt = 0
  1559. GOTO ext
  1560. END IF
  1561. SELECT count(*)
  1562. INTO :cnt
  1563. FROM u_warepdb_assign
  1564. WHERE u_warepdb_assign.storageid = :arg_storageid
  1565. AND u_warepdb_assign.pdbdate = :arg_pdbdate
  1566. And flag = 1;
  1567. IF sqlca.SQLCode <> 0 THEN
  1568. arg_msg = '查询操作失败,在盘点日:'+String(arg_pdbdate)+'数据资料失败,'+sqlca.SQLErrText
  1569. rslt = 0
  1570. GOTO ext
  1571. END IF
  1572. IF cnt > 0 THEN
  1573. arg_msg = '盘点日:'+String(arg_pdbdate)+',盘点数据已经审核,不能删除'
  1574. rslt = 0
  1575. GOTO ext
  1576. END IF
  1577. DELETE FROM u_warepdb_assign
  1578. WHERE pdbdate = :arg_pdbdate
  1579. And storageid = :arg_storageid;
  1580. IF sqlca.SQLCode <> 0 THEN
  1581. arg_msg = '删除当前期的盘点表失败!'+sqlca.SQLErrText
  1582. rslt = 0
  1583. GOTO ext
  1584. END IF
  1585. ext:
  1586. IF rslt = 0 THEN
  1587. ROLLBACK;
  1588. ELSEIF rslt = 1 And arg_ifcommit THEN
  1589. COMMIT;
  1590. END IF
  1591. RETURN rslt
  1592. end function
  1593. public function integer uof_pdb_audit_assign (long arg_storageid, long arg_pdbdate, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1594. Long cnt
  1595. SELECT count(*) INTO :cnt
  1596. FROM u_storage
  1597. Where storageid = :arg_storageid;
  1598. IF sqlca.SQLCode <> 0 THEN
  1599. arg_msg = '查询仓库资料失败,'+sqlca.SQLErrText
  1600. rslt = 0
  1601. GOTO ext
  1602. END IF
  1603. IF cnt <> 1 THEN
  1604. arg_msg = '仓库资料不存在或重复,请检查'
  1605. rslt = 0
  1606. GOTO ext
  1607. END IF
  1608. cnt = 0
  1609. SELECT count(*) INTO :cnt
  1610. FROM u_warepdb_assign
  1611. WHERE storageid = :arg_storageid
  1612. AND pdbdate = :arg_pdbdate;
  1613. IF sqlca.SQLCode <> 0 THEN
  1614. arg_msg = '查询盘点表失败,'+sqlca.SQLErrText
  1615. rslt = 0
  1616. GOTO ext
  1617. END IF
  1618. IF cnt = 0 THEN
  1619. arg_msg = '盘点表没有盘点内容,不能审核'
  1620. rslt = 0
  1621. GOTO ext
  1622. END IF
  1623. cnt = 0
  1624. SELECT count(*) INTO :cnt
  1625. FROM u_warepdb_assign
  1626. WHERE storageid = :arg_storageid
  1627. AND pdbdate = :arg_pdbdate
  1628. AND flag = 1;
  1629. IF sqlca.SQLCode <> 0 THEN
  1630. arg_msg = '查询盘点表是否已审核失败,'+sqlca.SQLErrText
  1631. rslt = 0
  1632. GOTO ext
  1633. END IF
  1634. IF cnt > 0 THEN
  1635. arg_msg = '盘点表已审核,不能审核'
  1636. rslt = 0
  1637. GOTO ext
  1638. END IF
  1639. UPDATE u_warepdb_assign
  1640. SET flag = 1,
  1641. auditemp = :arg_opemp,
  1642. auditdate = getdate()
  1643. WHERE storageid = :arg_storageid
  1644. AND pdbdate = :arg_pdbdate;
  1645. IF sqlca.SQLCode <> 0 THEN
  1646. arg_msg = '更新盘点表审核标记失败,'+sqlca.SQLErrText
  1647. rslt = 0
  1648. GOTO ext
  1649. END IF
  1650. ext:
  1651. IF rslt = 0 THEN
  1652. ROLLBACK;
  1653. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1654. COMMIT;
  1655. END IF
  1656. RETURN rslt
  1657. end function
  1658. public function integer uof_pdb_caudit_assign (long arg_storageid, long arg_pdbdate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1
  1659. Long cnt
  1660. Long ll_pdbdate
  1661. DateTime null_dt
  1662. SetNull(null_dt)
  1663. SELECT count(*) INTO :cnt
  1664. FROM u_storage
  1665. Where storageid = :arg_storageid;
  1666. IF sqlca.SQLCode <> 0 THEN
  1667. arg_msg = '查询仓库资料失败,'+sqlca.SQLErrText
  1668. rslt = 0
  1669. GOTO ext
  1670. END IF
  1671. IF cnt <> 1 THEN
  1672. arg_msg = '仓库资料不存在或重复,请检查'
  1673. rslt = 0
  1674. GOTO ext
  1675. END IF
  1676. cnt = 0
  1677. SELECT count(*) INTO :cnt
  1678. FROM u_warepdb_assign
  1679. WHERE storageid = :arg_storageid
  1680. AND pdbdate = :arg_pdbdate;
  1681. IF sqlca.SQLCode <> 0 THEN
  1682. arg_msg = '查询盘点表失败,'+sqlca.SQLErrText
  1683. rslt = 0
  1684. GOTO ext
  1685. END IF
  1686. IF cnt = 0 THEN
  1687. arg_msg = '盘点表没有盘点内容,不能撤审'
  1688. rslt = 0
  1689. GOTO ext
  1690. END IF
  1691. cnt = 0
  1692. SELECT count(*) INTO :cnt
  1693. FROM u_warepdb_assign
  1694. WHERE storageid = :arg_storageid
  1695. AND pdbdate = :arg_pdbdate
  1696. AND flag = 0;
  1697. IF sqlca.SQLCode <> 0 THEN
  1698. arg_msg = '查询盘点表是否未审核失败,'+sqlca.SQLErrText
  1699. rslt = 0
  1700. GOTO ext
  1701. END IF
  1702. IF cnt > 0 THEN
  1703. arg_msg = '盘点表未审核,不能撤审'
  1704. rslt = 0
  1705. GOTO ext
  1706. END IF
  1707. //检查盘点日期后是否有结存
  1708. ll_pdbdate = Long(arg_pdbdate)
  1709. cnt = 0
  1710. SELECT COUNT(*)
  1711. INTO :cnt
  1712. FROM u_warebalc
  1713. WHERE (balcdateint >= :ll_pdbdate)
  1714. And (storageid = :arg_storageid);
  1715. IF sqlca.SQLCode <> 0 THEN
  1716. arg_msg = '查询盘点日期后仓库是否有结存失败,'+sqlca.SQLErrText
  1717. rslt = 0
  1718. GOTO ext
  1719. END IF
  1720. IF cnt > 0 THEN
  1721. arg_msg = '盘点日期后仓库已结存,不能撤审'
  1722. rslt = 0
  1723. GOTO ext
  1724. END IF
  1725. UPDATE u_warepdb_assign
  1726. SET flag = 0,
  1727. auditemp = '',
  1728. auditdate = :null_dt
  1729. WHERE storageid = :arg_storageid
  1730. AND pdbdate = :arg_pdbdate;
  1731. IF sqlca.SQLCode <> 0 THEN
  1732. arg_msg = '更新盘点表审核标记失败,'+sqlca.SQLErrText
  1733. rslt = 0
  1734. GOTO ext
  1735. END IF
  1736. ext:
  1737. IF rslt = 0 THEN
  1738. ROLLBACK;
  1739. ELSEIF rslt = 1 AND arg_ifcommit THEN
  1740. COMMIT;
  1741. END IF
  1742. RETURN rslt
  1743. end function
  1744. on uo_ware_pdb_balc.create
  1745. call super::create
  1746. TriggerEvent( this, "constructor" )
  1747. end on
  1748. on uo_ware_pdb_balc.destroy
  1749. TriggerEvent( this, "destructor" )
  1750. call super::destroy
  1751. end on
  1752. event constructor;String arg_msg
  1753. String str_optionvalue
  1754. str_optionvalue = ''
  1755. f_get_sys_option_value('152',str_optionvalue,arg_msg)
  1756. uo_option_warebalc_checksale = Long(str_optionvalue)
  1757. str_optionvalue = ''
  1758. f_get_sys_option_value('057',str_optionvalue,arg_msg)
  1759. uo_option_wkpmtrlware = Long(str_optionvalue)
  1760. end event