IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[DZGOLD].[SPA_APREV_CH]') AND OBJECTPROPERTY(ID, N'ISPROCEDURE') = 1) DROP PROCEDURE [DZGOLD].[SPA_APREV_CH] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO CREATE PROC SPA_APREV_CH ( @S_CO_CD VARCHAR(4), @S_DIV_CD VARCHAR(4), @S_DEPT_CD VARCHAR(4), @S_EMP_CD VARCHAR(10), @S_GISU NUMERIC(3), @START VARCHAR(8), @FRDT VARCHAR(8), @TODT VARCHAR(8) ) --WITH ENCRYPTION AS BEGIN /*-------------------------------------------------------*/ /*? ?:?????? */ /*???:??? */ /*???:2001/05/30 */ /*???:2002/01/03 */ /*???: SPA_APREV */ /*-------------------------------------------------------*/ SET NOCOUNT ON SET ANSI_WARNINGS OFF DECLARE @V_CO_CD VARCHAR(4), @V_ACCT_CD VARCHAR(8), @V_RACCT_CD VARCHAR(8), @V_ACCT_FG VARCHAR(1), @V_SUB_DISP VARCHAR(2), @V_GR_CD VARCHAR(2), --UPGRADE @V_DRCR_FG VARCHAR(1), @V_CLS_DT VARCHAR(8), @V_ACCT_AM NUMERIC(17,4), @V_FILL_NB NUMERIC(5), @V_CNT NUMERIC(5), @FLAG VARCHAR(16), @ERRNO INT, @ERRMSG VARCHAR(100), @DEAL_TY VARCHAR(5), @CTNB_TY VARCHAR(5), @QT_TY VARCHAR(5) --判断是否结转 SELECT @V_CLS_DT=ISNULL(CLOSE_DT,'00000000') FROM SCLOSE WHERE CLOSE_CD='07' AND CO_CD=@S_CO_CD AND DIV_CD = @S_DIV_CD IF (@START<=@V_CLS_DT) BEGIN SET @ERRNO = 50814 SET @ERRMSG = '选中的会计年度已经结转.' GOTO ERROR END --清除结转数据 DELETE FROM APREV_D WHERE CO_CD = @S_CO_CD AND DIV_CD=@S_DIV_CD AND GISU = @S_GISU +1 DELETE FROM APREV WHERE CO_CD = @S_CO_CD AND DIV_CD=@S_DIV_CD AND GISU = @S_GISU +1 --选择需要进行结转的科目 DECLARE CUSOR_APREV CURSOR FOR SELECT DISTINCT M.CO_CD, M.ACCT_CD , --SUB_DISP 连接项目 ,NORM_CD--需要结转余额的管理项目 S.ACCT_FG,ISNULL(S.SUB_DISP,'00') AS SUB_DISP,S.NORM_CD AS GR_CD ,S.RACCT_CD,S.DRCR_FG, S.DEAL_TY,S.CTNB_TY,S.QT_TY FROM (SELECT DISTINCT CO_CD,ACCT_CD FROM APREV WHERE CO_CD=@S_CO_CD AND DIV_CD=@S_DIV_CD AND FILL_DT = @FRDT UNION SELECT DISTINCT CO_CD,ACCT_CD FROM ADOCUD WHERE CO_CD=@S_CO_CD AND DIV_CD=@S_DIV_CD AND FILL_DT BETWEEN @FRDT AND @TODT ) M JOIN SACCT S ON M.CO_CD=S.CO_CD AND M.ACCT_CD=S.ACCT_CD AND S.ACCT_FG<'9' AND S.ACCT_CD < '5000' --如果要控制损益类科目不转 OPEN CUSOR_APREV FETCH CUSOR_APREV INTO @V_CO_CD, @V_ACCT_CD,@V_ACCT_FG,@V_SUB_DISP,@V_GR_CD,@V_RACCT_CD,@V_DRCR_FG,@DEAL_TY,@CTNB_TY,@QT_TY -- BEGIN TRANSACTION WHILE (@@FETCH_STATUS = 0) BEGIN IF (@V_GR_CD='0' AND ( @DEAL_TY <> 'K2' AND @CTNB_TY <> 'E6') ) BEGIN SET @V_ACCT_AM = 0 SELECT @V_ACCT_AM=ISNULL(SUM(DCR_AM),0) FROM VA_ACMSUM WHERE CO_CD=@S_CO_CD AND DIV_CD = @S_DIV_CD AND FILL_YM BETWEEN LEFT(@FRDT,6) AND LEFT(@TODT,6) AND ACCT_CD =@V_ACCT_CD IF (@V_ACCT_AM<>0) --科目有余额 INSERT APREV (CO_CD, GISU, DIV_CD, ACCT_CD, ISU_SQ, DEPT_CD, EMP_CD, DRCR_FG, FILL_DT, FILL_NB, RMK_NB, RMK_DC, ACCT_AM , TRCD_TY, TRNM_TY, DEPTCD_TY, PJTCD_TY, CTNB_TY, FRDT_TY, TODT_TY, QT_TY, AM_TY, RT_TY, DEAL_TY , USER1_TY, USER2_TY ) SELECT @S_CO_CD,@S_GISU+1,@S_DIV_CD,@V_ACCT_CD,1,@S_DEPT_CD,@S_EMP_CD, (CASE WHEN A.DRCR_FG='1' THEN '3' ELSE '4' END) DRCR_FG, @START,1,0,'年度结转',@V_ACCT_AM, A.TRCD_TY, A.TRNM_TY, A.DEPTCD_TY, A.PJTCD_TY, A.CTNB_TY, A.FRDT_TY, A.TODT_TY, A.QT_TY, A.AM_TY, A.RT_TY, A.DEAL_TY, A.USER1_TY, A.USER2_TY FROM SACCT A WHERE A.CO_CD=@S_CO_CD AND A.ACCT_CD = @V_ACCT_CD END --处理管理项目余额的结转 IF (@V_GR_CD<>'0' OR @DEAL_TY = 'K2' OR @CTNB_TY = 'E6' ) BEGIN EXEC SPA_APREH @S_CO_CD,@S_DIV_CD,@S_DEPT_CD,@S_EMP_CD,@S_GISU,@START,@FRDT,@TODT, @V_ACCT_CD,@V_ACCT_FG,@V_SUB_DISP,@V_GR_CD,'',@V_DRCR_FG,@DEAL_TY,@CTNB_TY,@QT_TY END FETCH CUSOR_APREV INTO @V_CO_CD, @V_ACCT_CD,@V_ACCT_FG,@V_SUB_DISP,@V_GR_CD,@V_RACCT_CD,@V_DRCR_FG,@DEAL_TY,@CTNB_TY,@QT_TY END CLOSE CUSOR_APREV DEALLOCATE CUSOR_APREV SET NOCOUNT OFF SET ANSI_WARNINGS ON RETURN 1 ERROR: --ROLLBACK TRANSACTION RAISERROR @ERRNO @ERRMSG SET NOCOUNT OFF SET ANSI_WARNINGS ON END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO