SET QUOTED_IDENTIFIER ON GO SET ANSI_NULLS ON GO --EXEC ACCOUNT_CARRY_FEE_FORWARD_MONTHLY '2000','1000','200403','3131','0402001' ALTER PROC ACCOUNT_COST_CARRY_FORWARD_MONTHLY @CO_CD VARCHAR(5),@DIV_CD VARCHAR(5),@YM VARCHAR(6),@ACCT_CD VARCHAR(10),@EMP_CD VARCHAR(10) AS --@ACCT_CD 制造费用转入科目 BEGIN DECLARE @ISU_DT VARCHAR(8) IF EXISTS (SELECT 1 FROM SYSOBJECTS WHERE NAME = 'T_CARRY_FEE_FORWARD' AND XTYPE = 'U') DROP TABLE T_CARRY_FEE_FORWARD 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') SET @ISU_DT = @YM + '28' SELECT B.ACCT_CD,B.DRCR_FG,B.ACCT_AM,IDENTITY(INT,1,1) IDNO INTO T_CARRY_FEE_FORWARD FROM (SELECT A.ACCT_CD,(CASE WHEN A.DRCR_FG = '3' THEN '4' WHEN A.DRCR_FG = '4' THEN '3' END) DRCR_FG,A.ACCT_AM FROM (SELECT C.ACCT_CD,(CASE WHEN C.DRCR_FG = '1' THEN '3' ELSE '4' END) DRCR_FG,SUM(C.ACCT_AM) ACCT_AM FROM (SELECT A.ACCT_CD,B.DRCR_FG, (CASE WHEN ((A.DRCR_FG = '3' AND B.DRCR_FG = '1') OR (A.DRCR_FG = '4' AND B.DRCR_FG = '2')) THEN A.ACCT_AM ELSE -A.ACCT_AM END) ACCT_AM FROM ADOCUD A INNER JOIN SACCT B ON A.CO_CD = B.CO_CD AND A.ACCT_CD = B.ACCT_CD WHERE A.CO_CD = @CO_CD AND A.DIV_CD = @DIV_CD AND SUBSTRING(A.ISU_DT,1,6) = @YM AND A.ACCT_CD LIKE '4105%' )C GROUP BY C.ACCT_CD,C.DRCR_FG)A UNION ALL SELECT D.ACCT_CD,(CASE WHEN D.ACCT_AM < 0 THEN '4' WHEN D.ACCT_AM > 0 THEN '3' ELSE '3' END) DRCR_FG,ABS(D.ACCT_AM) ACCT_AM FROM (SELECT @ACCT_CD ACCT_CD,'3' DRCR_FG,SUM(CASE WHEN C.DRCR_FG = '3' THEN -1*C.ACCT_AM WHEN C.DRCR_FG = '4' THEN C.ACCT_AM ELSE 0 END) ACCT_AM FROM (SELECT A.ACCT_CD,(CASE WHEN A.DRCR_FG = '1' THEN '4' WHEN A.DRCR_FG = '2' THEN '3' END) DRCR_FG,A.ACCT_AM FROM (SELECT A.ACCT_CD,B.DRCR_FG, (CASE WHEN ((A.DRCR_FG = '3' AND B.DRCR_FG = '1') OR (A.DRCR_FG = '4' AND B.DRCR_FG = '2')) THEN A.ACCT_AM ELSE -A.ACCT_AM END) ACCT_AM FROM ADOCUD A INNER JOIN SACCT B ON A.CO_CD = B.CO_CD AND A.ACCT_CD = B.ACCT_CD WHERE A.CO_CD = @CO_CD AND A.DIV_CD = @DIV_CD AND SUBSTRING(A.ISU_DT,1,6) = @YM AND A.ACCT_CD LIKE '4105%')A )C ) D )B WHERE B.ACCT_AM <> 0 DECLARE @COUNT NUMERIC(5,0) DECLARE @LACCT_CD VARCHAR(10) DECLARE @LDRCR_FG VARCHAR(1) DECLARE @LACCT_AM NUMERIC(17,4) DECLARE @ISU_SQ NUMERIC(5,0) DECLARE @DEPT_CD VARCHAR(4) DECLARE @LN_SQ NUMERIC(5,0) SET @LN_SQ = 1 SELECT @COUNT = MAX(IDNO) FROM T_CARRY_FEE_FORWARD SET @COUNT = ISNULL(@COUNT,0) SELECT @ISU_SQ = MAX(ISU_SQ) + 1 FROM ADOCUH WHERE CO_CD = @CO_CD AND ISU_DT = @ISU_DT SELECT @DEPT_CD = DEPT_CD FROM SEMP WHERE CO_CD = @CO_CD AND EMP_CD = @EMP_CD IF @COUNT > 0 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,@DEPT_CD,'0','5',@EMP_CD,'5','00000000',0,@EMP_CD,GETDATE(),@YM+'90') WHILE @LN_SQ < = @COUNT BEGIN SELECT @LACCT_CD = ACCT_CD,@LDRCR_FG = DRCR_FG,@LACCT_AM = ACCT_AM FROM T_CARRY_FEE_FORWARD WHERE IDNO = @LN_SQ 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,@DEPT_CD,@CO_CD,@DIV_CD,@LACCT_CD,@LDRCR_FG,0,'00000000',0,'月末成本类科目结转',@LACCT_AM) SET @LN_SQ = @LN_SQ + 1 END END GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO