uf_warebalc_storage.srf 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. $PBExportHeader$uf_warebalc_storage.srf
  2. global type uf_warebalc_storage from function_object
  3. end type
  4. forward prototypes
  5. global function integer uf_warebalc_storage (integer arg_balctype, long arg_balcdateint, long arg_storageid, datetime arg_balcdate, ref string arg_msg)
  6. end prototypes
  7. global function integer uf_warebalc_storage (integer arg_balctype, long arg_balcdateint, long arg_storageid, datetime arg_balcdate, ref string arg_msg);//====================================================================
  8. // Function: uf_warebalc_storage()
  9. //--------------------------------------------------------------------
  10. // Description:
  11. //--------------------------------------------------------------------
  12. // Arguments:
  13. // value integer arg_balctype //1:结存,0:反结存
  14. // value long arg_storageid
  15. // value datetime arg_balcdate
  16. // reference string arg_msg
  17. //--------------------------------------------------------------------
  18. // Returns: integer
  19. //--------------------------------------------------------------------
  20. // Author: yyx Date: 2004.02.27
  21. //--------------------------------------------------------------------
  22. // Modify History:
  23. //
  24. //====================================================================
  25. Long rslt = 1,cnt
  26. DateTime balc_date,null_dt
  27. Long ls_balcdateint
  28. IF arg_storageid <= 0 THEN
  29. arg_msg = '请选择仓库'
  30. rslt = 0
  31. GOTO ext
  32. END IF
  33. IF arg_balctype = 1 THEN
  34. ls_balcdateint = Year(Date(arg_balcdate)) * 10000 + Month(Date(arg_balcdate)) * 100 + Day(Date(arg_balcdate))
  35. balc_date = DateTime(Date(arg_balcdate),Time(0))
  36. SELECT count(*) INTO :cnt
  37. FROM u_warebalc
  38. WHERE balcdate = :balc_date
  39. And storageid = :arg_storageid;
  40. IF cnt <> 0 THEN
  41. rslt = 0
  42. arg_msg = "仓库指定日期已进行过结存操作"
  43. GOTO ext
  44. END IF
  45. //检查单据
  46. IF uf_warebalc_check_inoutflag(arg_storageid,arg_balcdate,arg_msg) = 0 THEN
  47. rslt = 0
  48. GOTO ext
  49. END IF
  50. //处理异常数据
  51. IF sys_option_balc_clear0amt = 1 THEN
  52. UPDATE u_warebalc
  53. SET desamt = desamt + balcamt,
  54. desamt_notax = desamt_notax + balcamt_notax,
  55. balcamt_notax = 0,
  56. balcamt = 0
  57. WHERE (balcqty = 0)
  58. AND (balcamt <> 0)
  59. And (balcdateint = 0);
  60. IF sqlca.SQLCode <> 0 THEN
  61. rslt = 0
  62. arg_msg = '更新结存金额失败,'+sqlca.SQLErrText
  63. GOTO ext
  64. END IF
  65. END IF
  66. UPDATE u_warebalc
  67. SET balcdateint = :ls_balcdateint,
  68. balcdate = :arg_balcdate
  69. WHERE balcdateint = 0
  70. And storageid = :arg_storageid;
  71. IF sqlca.SQLCode <> 0 THEN
  72. rslt = 0
  73. arg_msg = "更新仓库结存标记失败. ~n 原因:"+sqlca.SQLErrText
  74. GOTO ext
  75. END IF
  76. INSERT INTO u_warebalc
  77. (balcdateint,
  78. sptid_cusid,
  79. storageid,
  80. mtrlid,
  81. bgqty,
  82. bgaddqty,
  83. bgamt,
  84. bgamt_notax,
  85. incqty,
  86. incaddqty,
  87. incamt,
  88. desqty,
  89. desaddqty,
  90. desamt,
  91. balcqty,
  92. balcaddqty,
  93. balcamt,
  94. balcamt_notax,
  95. pypk,
  96. pypkaddqty,
  97. scid,
  98. status,
  99. woodcode,
  100. pcode)
  101. SELECT 0,
  102. u_warebalc.sptid_cusid,
  103. u_warebalc.storageid,
  104. u_warebalc.mtrlid,
  105. u_warebalc.balcqty,
  106. u_warebalc.balcaddqty,
  107. case when :sys_option_balc_clear0amt = 0 then u_warebalc.balcamt else case when (u_warebalc.balcqty = 0 OR u_warebalc.balcamt < 0) then 0 else u_warebalc.balcamt END END,
  108. case when :sys_option_balc_clear0amt = 0 then u_warebalc.balcamt_notax else case when (u_warebalc.balcqty = 0 OR u_warebalc.balcamt_notax < 0) then 0 else u_warebalc.balcamt_notax END END,
  109. 0,
  110. 0,
  111. 0,
  112. 0,
  113. 0,
  114. 0,
  115. u_warebalc.balcqty,
  116. u_warebalc.balcaddqty,
  117. case when :sys_option_balc_clear0amt = 0 then u_warebalc.balcamt else case when (u_warebalc.balcqty = 0 OR u_warebalc.balcamt < 0) then 0 else u_warebalc.balcamt END END,
  118. case when :sys_option_balc_clear0amt = 0 then u_warebalc.balcamt_notax else case when (u_warebalc.balcqty = 0 OR u_warebalc.balcamt_notax < 0) then 0 else u_warebalc.balcamt_notax END END,
  119. 0,
  120. 0,
  121. u_warebalc.scid,
  122. u_warebalc.status,
  123. u_warebalc.woodcode,
  124. u_warebalc.pcode
  125. FROM u_warebalc
  126. WHERE ( (abs(u_warebalc.bgqty)+abs(u_warebalc.desqty)+abs(u_warebalc.incqty)+abs(u_warebalc.balcqty) <> 0) OR (abs(u_warebalc.bgamt)+ abs(u_warebalc.incamt)+abs(u_warebalc.desamt)+abs(u_warebalc.balcamt) <> 0) )
  127. AND ( u_warebalc.storageid = :arg_storageid )
  128. And ( u_warebalc.balcdateint = :ls_balcdateint );
  129. IF sqlca.SQLCode <> 0 THEN
  130. arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText
  131. rslt = 0
  132. GOTO ext
  133. END IF
  134. // 写入日表 upartbalc
  135. UPDATE u_inware
  136. SET balcflag = 1 ,
  137. u_inware.balcdateint = :ls_balcdateint
  138. WHERE ( u_inware.flag = 1 ) AND
  139. ( u_inware.balcflag = 0 ) AND
  140. ( u_inware.storageid = :arg_storageid ) AND
  141. ( u_inware.balcdateint = 0 );
  142. IF sqlca.SQLCode <> 0 THEN
  143. rslt = 0
  144. arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText
  145. GOTO ext
  146. END IF
  147. UPDATE u_outware
  148. SET balcflag = 1 ,
  149. u_outware.balcdateint = :ls_balcdateint
  150. WHERE ( u_outware.flag = 1 ) AND
  151. ( u_outware.balcflag = 0 ) AND
  152. ( u_outware.storageid = :arg_storageid ) AND
  153. ( u_outware.balcdateint = 0 );
  154. IF sqlca.SQLCode <> 0 THEN
  155. rslt = 0
  156. arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText
  157. GOTO ext
  158. END IF
  159. // //检查外协单据
  160. // IF uf_wfjg_warebalc_check_inoutflag(arg_balcdate,arg_msg) = 0 THEN
  161. // rslt = 0
  162. // GOTO ext
  163. // END IF
  164. // //
  165. //
  166. // UPDATE ow_wfjgbalc
  167. // SET balcdateint = :ls_balcdateint,
  168. // balcdate = :arg_balcdate
  169. // Where balcdateint = 0;
  170. //
  171. // IF sqlca.SQLCode <> 0 THEN
  172. // rslt = 0
  173. // arg_msg = "更新外协供应商仓库结存标记失败. ~n 原因:"+sqlca.SQLErrText
  174. // GOTO ext
  175. // END IF
  176. //
  177. // INSERT INTO ow_wfjgbalc
  178. // (scid,
  179. // balcdateint,
  180. // mtrlid,
  181. // sptid,
  182. // status,
  183. // woodcode,
  184. // bgqty,
  185. // bgamt,
  186. // outqty,
  187. // outamt,
  188. // reoutqty,
  189. // reoutamt,
  190. // thqty,
  191. // thamt,
  192. // inqty,
  193. // inamt,
  194. // balcqty,
  195. // balcamt)
  196. // SELECT ow_wfjgbalc.scid,
  197. // 0,
  198. // ow_wfjgbalc.mtrlid,
  199. // ow_wfjgbalc.sptid,
  200. // ow_wfjgbalc.status,
  201. // ow_wfjgbalc.woodcode,
  202. // ow_wfjgbalc.balcqty,
  203. // ow_wfjgbalc.balcamt,
  204. // 0,
  205. // 0,
  206. // 0,
  207. // 0,
  208. // 0,
  209. // 0,
  210. // 0,
  211. // 0,
  212. // ow_wfjgbalc.balcqty,
  213. // ow_wfjgbalc.balcamt
  214. // FROM ow_wfjgbalc
  215. // WHERE (( abs(ow_wfjgbalc.bgqty)+abs(ow_wfjgbalc.outqty)+abs(ow_wfjgbalc.reoutqty)+abs(ow_wfjgbalc.thqty)+abs(ow_wfjgbalc.inqty)+abs(ow_wfjgbalc.balcqty) <> 0 )
  216. // OR (abs(ow_wfjgbalc.bgamt)+abs(ow_wfjgbalc.outamt)+abs(ow_wfjgbalc.reoutamt)+abs(ow_wfjgbalc.thamt)+abs(ow_wfjgbalc.inamt)+abs(ow_wfjgbalc.balcamt) <> 0 ))
  217. // And ( ow_wfjgbalc.balcdateint = :ls_balcdateint ) ;
  218. //
  219. //
  220. // update ow_wfjg_in set balcflag=1
  221. // where flag=1 and ( ow_wfjg_in.balcflag = 0 ) AND
  222. // ( ow_wfjg_in.balcdateint = 0 );
  223. // IF sqlca.SQLCode <> 0 THEN
  224. // rslt = 0
  225. // arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText
  226. // GOTO ext
  227. // END IF
  228. //
  229. // update ow_wfjg_out set balcflag=1
  230. // where flag=1 and ( ow_wfjg_out.balcflag = 0 ) AND
  231. // ( ow_wfjg_out.balcdateint = 0 );
  232. // IF sqlca.SQLCode <> 0 THEN
  233. // rslt = 0
  234. // arg_msg = "结存操作失败 ~n原因:"+sqlca.SQLErrText
  235. // GOTO ext
  236. // END IF
  237. ELSE
  238. SELECT count(*) INTO :cnt FROM u_inware
  239. WHERE flag = 1
  240. AND ( balcdateint > :arg_balcdateint OR balcdateint = 0 )
  241. And storageid = :arg_storageid;
  242. IF sqlca.SQLCode <> 0 THEN
  243. rslt = 0
  244. arg_msg = '仓库反结存失败,查询进仓单结存日期后是否有单失败'
  245. GOTO ext
  246. END IF
  247. IF cnt > 0 THEN
  248. rslt = 0
  249. arg_msg = '仓库反结存失败,进仓单结存日期后已经有单审核,如果要反结存请将进仓单反审核'
  250. GOTO ext
  251. END IF
  252. cnt = 0
  253. SELECT count(*) INTO :cnt FROM u_outware
  254. WHERE flag = 1
  255. AND ( balcdateint > :arg_balcdateint OR balcdateint = 0 )
  256. And storageid = :arg_storageid;
  257. IF sqlca.SQLCode <> 0 THEN
  258. rslt = 0
  259. arg_msg = '仓库反结存失败,查询出仓单结存日期后是否有单失败'
  260. GOTO ext
  261. END IF
  262. IF cnt > 0 THEN
  263. rslt = 0
  264. arg_msg = '仓库反结存失败,出仓单结存日期后已经有单审核,如果要反结存请将出仓单反审核'
  265. GOTO ext
  266. END IF
  267. // 写入日表 upartbalc
  268. UPDATE u_inware
  269. SET balcflag = 0 ,
  270. u_inware.balcdateint = 0
  271. WHERE ( u_inware.flag = 1 ) AND
  272. ( u_inware.balcflag = 1 ) AND
  273. ( u_inware.storageid = :arg_storageid ) AND
  274. ( u_inware.balcdateint = :arg_balcdateint );
  275. IF sqlca.SQLCode <> 0 THEN
  276. rslt = 0
  277. arg_msg = "反结存操作失败 ~n原因:"+sqlca.SQLErrText
  278. GOTO ext
  279. END IF
  280. UPDATE u_outware
  281. SET balcflag = 0 ,
  282. u_outware.balcdateint = 0
  283. WHERE ( u_outware.flag = 1 ) AND
  284. ( u_outware.balcflag = 1 ) AND
  285. ( u_outware.storageid = :arg_storageid ) AND
  286. ( u_outware.balcdateint = :arg_balcdateint );
  287. IF sqlca.SQLCode <> 0 THEN
  288. rslt = 0
  289. arg_msg = "反结存操作失败 ~n原因:"+sqlca.SQLErrText
  290. GOTO ext
  291. END IF
  292. //-----------------------------------------
  293. DELETE FROM u_warebalc
  294. WHERE balcdateint = 0
  295. And storageid = :arg_storageid;
  296. IF sqlca.SQLCode <> 0 THEN
  297. arg_msg = '反结存操作 ~n原因:'+sqlca.SQLErrText
  298. rslt = 0
  299. GOTO ext
  300. END IF
  301. SetNull(null_dt)
  302. UPDATE u_warebalc
  303. SET balcdateint = 0,
  304. balcdate = :null_dt
  305. WHERE balcdateint = :arg_balcdateint
  306. And storageid = :arg_storageid;
  307. IF sqlca.SQLCode <> 0 THEN
  308. rslt = 0
  309. arg_msg = "更新仓库结存标记失败. ~n 原因:"+sqlca.SQLErrText
  310. GOTO ext
  311. END IF
  312. END IF
  313. ext:
  314. IF rslt = 0 THEN
  315. ROLLBACK;
  316. ELSE
  317. COMMIT;
  318. END IF
  319. RETURN rslt
  320. end function