IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[DZGOLD].[ZDC_SP_ASSET_CAL_DEPR]') AND OBJECTPROPERTY(ID, N'ISPROCEDURE') = 1) DROP PROCEDURE [DZGOLD].[ZDC_SP_ASSET_CAL_DEPR] GO SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO /******************************************************* --TYPE: SPECIALLY DESIGNATED IN ONE COUNTRY (CHINA) --DETAIL: CREATE FIX ASSETS SLIP --CREATE: 2006/12/26 ; WAN CHENG JIAN --REVISION1: --REVISION2: --REVISION3: *******************************************************/ CREATE PROC ZDC_SP_ASSET_CAL_DEPR @CO_CD VARCHAR(5),@DIV_CD VARCHAR(5),@YM VARCHAR(6),@EMP_CD VARCHAR(10) AS BEGIN IF @CO_CD = '' OR @DIV_CD = '' OR @YM = '' OR @EMP_CD = '' RETURN --设定凭证日期 DECLARE @ISU_DT VARCHAR(8) IF SUBSTRING(@YM,5,2) IN ('01','03','05','07','08','10','12') SET @ISU_DT = @YM + '31' IF SUBSTRING(@YM,5,2) IN ('04','06','09','11') SET @ISU_DT = @YM + '30' IF SUBSTRING(@YM,5,2) IN ('02') AND LEFT(@YM,4)/4*4 = LEFT(@YM,4) SET @ISU_DT = @YM + '29' IF SUBSTRING(@YM,5,2) IN ('02') AND LEFT(@YM,4)/4*4 <> LEFT(@YM,4) SET @ISU_DT = @YM + '28' IF OBJECT_ID('tempdb..#T_ASSET_CAL_TEMP') IS NOT NULL DROP TABLE #T_ASSET_CAL_TEMP SELECT GR_CD,DEPT_CD,DPRE_ACCT,EXP_ACCT,IDENTITY(INT,1,1) NOID,CAST(0 AS NUMERIC(17,4)) CUR_DAM INTO #T_ASSET_CAL_TEMP FROM ASSET_ACCT_SET WHERE CO_CD = @CO_CD DECLARE @LOOP INT DECLARE @LCOUNT INT SET @LOOP = 1 SELECT @LCOUNT = MAX(NOID) FROM #T_ASSET_CAL_TEMP SET @LCOUNT = ISNULL(@LCOUNT,0) IF @LCOUNT = 0 BEGIN RAISERROR('未定义折旧结转方案',16,1) RETURN END DECLARE @GR_CD VARCHAR(6) DECLARE @DEPT_CD VARCHAR(6) DECLARE @DPRE_ACCT VARCHAR(8) DECLARE @EXP_ACCT VARCHAR(8) DECLARE @CUR_DAM NUMERIC(17,4) DECLARE @GET_FG VARCHAR(4) --凭证类型 DECLARE @DEPT_NM VARCHAR(20) --参考损益结转里面的凭证类型设置 SELECT @GET_FG = CFG_VALUES FROM T_CARRYF_MONTHLY WHERE CO_CD = @CO_CD AND CFG_NO = '0020' SELECT @GET_FG = ISNULL(@GET_FG,'5') --如果损益结转未定义凭证类型,缺省为5 WHILE @LOOP < = @LCOUNT BEGIN SELECT @GR_CD = GR_CD,@DEPT_CD = DEPT_CD,@DPRE_ACCT = DPRE_ACCT,@EXP_ACCT = EXP_ACCT FROM #T_ASSET_CAL_TEMP WHERE NOID = @LOOP SET @DEPT_CD = ISNULL(@DEPT_CD,'') SET @CUR_DAM = 0 IF @DEPT_CD = '' --方案设置中没有部门信息 BEGIN SELECT @CUR_DAM = ISNULL(SUM(A.CUR_DAM),0) FROM ADPREM A INNER JOIN ASSET B ON A.CO_CD = B.CO_CD AND A.ASSET_CD = B.ASSET_CD WHERE B.GR_CD = @GR_CD AND A.CO_CD = @CO_CD AND A.DPRE_YM = @YM AND B.DIV_CD = @DIV_CD UPDATE #T_ASSET_CAL_TEMP SET CUR_DAM = @CUR_DAM WHERE NOID = @LOOP END IF @DEPT_CD <> '' --方案设置中有部门信息 BEGIN SELECT @CUR_DAM = ISNULL(SUM(ROUND(A.CUR_DAM,2,0)),0) FROM ADPREM A INNER JOIN ASSET B ON A.CO_CD = B.CO_CD AND A.ASSET_CD = B.ASSET_CD WHERE B.GR_CD = @GR_CD AND A.CO_CD = @CO_CD AND A.DPRE_YM = @YM AND B.CT_DEPT = @DEPT_CD AND B.DIV_CD = @DIV_CD UPDATE #T_ASSET_CAL_TEMP SET CUR_DAM = @CUR_DAM WHERE NOID = @LOOP END SET @DEPT_CD = '' SET @LOOP = @LOOP + 1 END --SELECT * FROM ASSET_ACCT_SET DECLARE @LLCOUNT INT SET @LLCOUNT = 0 SELECT @LLCOUNT = COUNT(*) FROM #T_ASSET_CAL_TEMP WHERE CUR_DAM <> 0 IF @LLCOUNT <= 0 BEGIN RAISERROR('没有折旧数据可结转',16,1) RETURN END --如果有折旧数据,开始凭证处理 DECLARE @ISU_SQ NUMERIC(5,0) DECLARE @LDEPT_CD VARCHAR(4) DECLARE @LN_SQ NUMERIC(5,0) SET @LN_SQ = 1 SELECT @ISU_SQ = MAX(ISU_SQ) + 1 FROM ADOCUH WHERE CO_CD = @CO_CD AND ISU_DT = @ISU_DT --AND DIV_CD = @DIV_CD SELECT @LDEPT_CD = DEPT_CD FROM SEMP WHERE CO_CD = @CO_CD AND EMP_CD = @EMP_CD INSERT INTO ADOCUH (ISU_DT,ISU_SQ,CO_CD,DIV_CD,DEPT_CD,DOCU_ST,DOCU_TY,EMP_CD,GET_FG,FILL_DT,FILL_NB,INSERT_ID,INSERT_DT,INSERT_IP) VALUES(@ISU_DT,ISNULL(@ISU_SQ,1),@CO_CD,@DIV_CD,@LDEPT_CD,'0',@GET_FG,@EMP_CD,@GET_FG,'00000000',0,@EMP_CD,GETDATE(),@YM+'96') SET @LOOP = 1 WHILE @LOOP < = @LCOUNT BEGIN SET @CUR_DAM = 0 SET @DEPT_CD = NULLIF('','') SELECT @GR_CD = GR_CD,@DEPT_CD = DEPT_CD,@DPRE_ACCT = DPRE_ACCT,@EXP_ACCT = EXP_ACCT,@CUR_DAM = CUR_DAM FROM #T_ASSET_CAL_TEMP WHERE NOID = @LOOP SET @CUR_DAM = ROUND(ISNULL(@CUR_DAM,0),2,0) IF @CUR_DAM <> 0 BEGIN SET @DEPT_NM = NULLIF('','') SELECT @DEPT_NM = DEPT_NM FROM SDEPT WHERE CO_CD = @CO_CD AND DEPT_CD = @DEPT_CD INSERT INTO ADOCUD(ISU_DT,ISU_SQ,LN_SQ,DEPT_CD,CO_CD,DIV_CD,ACCT_CD,DRCR_FG,FILL_NB,FILL_DT,RMK_NB,RMK_DC,ACCT_AM,CT_DEPT,DEPT_NM,DEPTCD_TY) VALUES(@ISU_DT,ISNULL(@ISU_SQ,1),@LN_SQ,@LDEPT_CD,@CO_CD,@DIV_CD,@EXP_ACCT,'3',0,'00000000',0,'固定资产折旧结转',@CUR_DAM,@DEPT_CD,@DEPT_NM,'C1') SET @LN_SQ = @LN_SQ +1 INSERT INTO ADOCUD(ISU_DT,ISU_SQ,LN_SQ,DEPT_CD,CO_CD,DIV_CD,ACCT_CD,DRCR_FG,FILL_NB,FILL_DT,RMK_NB,RMK_DC,ACCT_AM) VALUES(@ISU_DT,ISNULL(@ISU_SQ,1),@LN_SQ,@LDEPT_CD,@CO_CD,@DIV_CD,@DPRE_ACCT,'4',0,'00000000',0,'固定资产折旧结转',@CUR_DAM) SET @LN_SQ = @LN_SQ +1 END SET @LOOP = @LOOP + 1 END END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO