1828 lines
40 KiB
Transact-SQL
1828 lines
40 KiB
Transact-SQL
USE [ACC]
|
|
GO
|
|
/****** Object: StoredProcedure [dbo].[usp_frm21404_01] Script Date: 2023-02-21 오전 10:33:37 ******/
|
|
SET ANSI_NULLS ON
|
|
GO
|
|
SET QUOTED_IDENTIFIER ON
|
|
GO
|
|
|
|
|
|
-- ==========================================
|
|
-- 작업일자: YYYY-MM-DD [쿼리 작성 및 실행 날짜를 기록합니다.]
|
|
-- 작 성 자: [실행자 이름을 기록합니다.]
|
|
-- 작업목적: [회계장부로 원가계산기능을 순차적으로 실행하며 중간산출자료 등을 검토할 목적으로 만든 쿼리이며 원가계산 프로시저입니다.]
|
|
-- 요청자/티켓번호: [회계팀의 요청시 원가계산을 검토하는 용도입니다.]
|
|
-- 데이타베이스 : MS-SQL
|
|
-- ==========================================
|
|
|
|
/*************************************************************/
|
|
/* 재료비 집계 & 간접 재료비 배부 */
|
|
/* 노무비 집계 & 간접 노무비 배부 */
|
|
/* 경 비 집계 & 간접 경 비 배부 */
|
|
/* 외주비 집계 & 간접 외주비 배부 */
|
|
/*************************************************************/
|
|
|
|
-- exec ACC.dbo.usp_frm21404_01 @area = '9', @saupbu = '10', @frdate = '20110101', @todate = '20110930'
|
|
|
|
-- ALTER PROCEDURE [dbo].[usp_frm21404_01]
|
|
drop table #temp_t23a10
|
|
|
|
DECLARE
|
|
@area CHAR(1) ,
|
|
@saupbu CHAR(2),
|
|
@frdate CHAR(8),
|
|
@todate CHAR(8)
|
|
-- AS
|
|
SELECT @area = '9', @saupbu = '10', @frdate = '20220101', @todate = '20221231'
|
|
|
|
|
|
DECLARE @totamt DECIMAL(20,0)
|
|
DECLARE @yy CHAR(4)
|
|
SET @yy = SUBSTRING(@frdate,1,4)
|
|
|
|
CREATE TABLE #temp_t23a10
|
|
(
|
|
area CHAR(1) null,
|
|
apvdate CHAR(8) null,
|
|
apvnum CHAR(6) null,
|
|
apvseq CHAR(6) null,
|
|
saupbu CHAR(2) null,
|
|
acntcode CHAR(7) null,
|
|
vendorcd VARCHAR(20) null,
|
|
pjtno VARCHAR(20) null,
|
|
apvdramt DECIMAL,
|
|
apvcramt DECIMAL,
|
|
hyundae CHAR(1) null,
|
|
dr_cr CHAR(1) null
|
|
)
|
|
|
|
--============ 조정후 시작(2011.11.16)
|
|
|
|
INSERT
|
|
#temp_t23a10
|
|
SELECT
|
|
area,apvdate,apvnum,apvseq,saupbu,acntcode,vendorcd,pjtno,apvdramt,apvcramt,hyundae,dr_cr
|
|
FROM
|
|
ACC.dbo.t23a10
|
|
WHERE area = @area
|
|
AND saupbu = @saupbu
|
|
AND apvdate BETWEEN SUBSTRING(@todate,1,4) AND @todate
|
|
|
|
UPDATE
|
|
a
|
|
SET
|
|
acntcode = (CASE WHEN b.c_acntcode <> '' THEN b.c_acntcode ELSE a.acntcode END)
|
|
, pjtno = (CASE WHEN b.c_pjtno <> '' THEN b.c_pjtno ELSE a.pjtno END)
|
|
FROM
|
|
#temp_t23a10 a
|
|
JOIN
|
|
ACC.dbo.t23w70 b
|
|
ON
|
|
a.apvdate = b.apvdate and a.apvnum = b.apvnum and a.apvseq = b.apvseq
|
|
|
|
--============ 조정후 종료
|
|
|
|
/* 지움 */
|
|
DELETE
|
|
ACC.dbo.t23w20 -- 원가계산마스타
|
|
WHERE
|
|
yy = @yy
|
|
|
|
|
|
DECLARE @temp_s1 TABLE
|
|
(
|
|
pjtno VARCHAR(10)
|
|
, acntcode VARCHAR(7)
|
|
, mon VARCHAR(2)
|
|
, slpamt DECIMAL(20,2)
|
|
)
|
|
|
|
DECLARE @temp_s2 TABLE
|
|
(
|
|
pjtno VARCHAR(10)
|
|
, yy CHAR(4)
|
|
, hg_gijun CHAR(1)
|
|
)
|
|
|
|
INSERT
|
|
@temp_s2
|
|
SELECT
|
|
c.pjtno_rep pjtno, a.yy, a.hg_gijun
|
|
FROM
|
|
ACC.dbo.t23w60 a
|
|
JOIN
|
|
ACC.dbo.t23w50 c
|
|
ON
|
|
a.yy = c.yy and a.pjtno = c.pjtno_rep
|
|
WHERE
|
|
a.yy = @yy
|
|
UNION
|
|
SELECT
|
|
c.pjtno_slip pjtno, a.yy, a.hg_gijun
|
|
FROM
|
|
ACC.dbo.t23w60 a
|
|
JOIN
|
|
ACC.dbo.t23w50 c
|
|
ON
|
|
a.yy = c.yy and a.pjtno = c.pjtno_rep
|
|
WHERE
|
|
a.yy = @yy
|
|
|
|
|
|
--==============================================================================================
|
|
-- 원가계산 공사진행율로 인식
|
|
-- 직접비와 간접비를 산출한다.
|
|
-- 직접비는 재료비는 프로젝트별 하나의 계정 월별로 합계액을 구한다.
|
|
-- 노무비는 프로젝트별 급여, 상여, 기타(나머지는 기타로)별 월별로 합계액을 구한다.
|
|
-- 경비는 프로젝트별 각 계정별 월별로 합계액을 구한다.
|
|
-- 외주비는 프로젝트별 하나의 계정 월별로 합계액을 구한다.
|
|
-- 간접비는 간접비 배부기준에서 불러와서 체크된 것에 한해서 프로젝트별 계정별 월별에 배부한다.
|
|
--==============================================================================================
|
|
/* 재료비 직접비 집계 -->월별로 재료비 하나로만 관리*/
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'91'),
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode = '91'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '91%'
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '1'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'91'),
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode = '91'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '91%'
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '1'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
|
|
/* 노무비 직접비 집계 --> 프로젝트별 계정과목별 월별 금액*/
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'9200101') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '92%'
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '1'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'9200101') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '92%'
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '1'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
|
|
/* 경 비 직접비 집계 */
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'9300101') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '93%'
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '1'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'9300101') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '93%'
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '1'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
/* 외주비 직접비 집계 */
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'94') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode = '94'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '94%'
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '1'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'94') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode = '94'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '94%'
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '1'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
|
|
/* 전표등록된 공사코드 ---> 원가계산용 공사코드로 변경 */
|
|
UPDATE
|
|
@temp_s1
|
|
SET
|
|
pjtno = b.pjtno_rep
|
|
FROM
|
|
@temp_s1 a
|
|
JOIN
|
|
ACC.dbo.t23w50 b
|
|
ON
|
|
b.yy = @yy and a.pjtno = b.pjtno_slip
|
|
|
|
/* 원가계산 테이블에 저장 ---> 프로젝트별 계정별 월별 직접비 금액*/
|
|
INSERT
|
|
ACC.dbo.t23w20
|
|
(yy, pjtno, acntcode, indi, [month], amt, rate, gijun)
|
|
SELECT
|
|
@yy
|
|
, pjtno, acntcode
|
|
, indi = '1'--직접비
|
|
, mon
|
|
, amt = ISNULL(SUM(slpamt),0)
|
|
, rate = 0
|
|
, gijun = '1' -- 공사진행율 인식
|
|
FROM
|
|
@temp_s1
|
|
WHERE
|
|
pjtno <> 'AA'
|
|
GROUP BY
|
|
pjtno, acntcode, mon
|
|
ORDER BY
|
|
pjtno, acntcode, mon
|
|
|
|
--=================================================================
|
|
-- 원가계산 세금계산서 발행금액으로 인식(직접비만 산출한다.)
|
|
--=================================================================
|
|
DELETE @temp_s1
|
|
|
|
/* 재료비 직접비 집계 -->월별로 재료비 하나로만 관리*/
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'91'),
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode = '91'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '91%'
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '2'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'91'),
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode = '91'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '91%'
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '2'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
|
|
/* 노무비 직접비 집계 --> 프로젝트별 계정과목별 월별 금액*/
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'9200101') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '92%'
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '2'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'9200101') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '92%'
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '2'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
|
|
/* 경 비 직접비 집계 */
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'9300101') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '93%'
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '2'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'9300101') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '93%'
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '2'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
/* 외주비 직접비 집계 */
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'94') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode = '94'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '94%'
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '2'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
a.pjtno,
|
|
acntcode = ISNULL(b.acntcode,'94') ,
|
|
mon = ISNULL(b.mon,'01'),
|
|
slpamt = ISNULL(b.slpamt,0)
|
|
FROM
|
|
@temp_s2 a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
pjtno = ISNULL(pjtno,'')
|
|
, acntcode = '94'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '94%'
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun = '2'
|
|
ORDER BY
|
|
a.pjtno
|
|
|
|
|
|
/* 전표등록된 공사코드 ---> 원가계산용 공사코드로 변경 */
|
|
UPDATE
|
|
@temp_s1
|
|
SET
|
|
pjtno = b.pjtno_rep
|
|
FROM
|
|
@temp_s1 a
|
|
JOIN
|
|
ACC.dbo.t23w50 b
|
|
ON
|
|
b.yy = @yy and a.pjtno = b.pjtno_slip
|
|
|
|
/* 원가계산 테이블에 저장 ---> 프로젝트별 계정별 월별 직접비 금액*/
|
|
INSERT
|
|
ACC.dbo.t23w20
|
|
(yy, pjtno, acntcode, indi, [month], amt, rate, gijun)
|
|
SELECT
|
|
@yy
|
|
, pjtno, acntcode
|
|
, indi = '1'--직접비
|
|
, mon
|
|
, amt = ISNULL(SUM(slpamt),0)
|
|
, rate = 0
|
|
, gijun = '2' -- 세금계산서 발행금액 인식
|
|
FROM
|
|
@temp_s1
|
|
WHERE
|
|
pjtno <> 'AA'
|
|
GROUP BY
|
|
pjtno, acntcode, mon
|
|
ORDER BY
|
|
pjtno, acntcode, mon
|
|
|
|
/* ------------------------------------------------------------------- */
|
|
/* 간접비는 원가배부기준이 1인것에만 프로젝트별 계정별 월별로 배부한다.*/
|
|
/* 간접비는 공사코드가 AA인 것만 합치면 된다. */
|
|
/* 간접비는 직접비의 비율에 따라서 배부한다. */
|
|
/* ------------------------------------------------------------------- */
|
|
DELETE @temp_s1
|
|
|
|
/* 재료비 간접집계 -- 하나의 계정으로 관리*/
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
pjtno
|
|
, acntcode = '91'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '91%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
-- AND pjtno = 'AA'
|
|
AND (pjtno = 'AA' OR pjtno IN (select pjtno_slip from ACC.dbo.t23w50 where yy = substring(@frdate,1,4) and pjtno_rep = 'AA'))
|
|
GROUP BY
|
|
pjtno, SUBSTRING(apvdate,5,2)
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
pjtno
|
|
, acntcode = '91'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '91%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
-- AND pjtno = 'AA'
|
|
AND (pjtno = 'AA' OR pjtno IN (select pjtno_slip from ACC.dbo.t23w50 where yy = substring(@frdate,1,4) and pjtno_rep = 'AA'))
|
|
GROUP BY
|
|
pjtno, SUBSTRING(apvdate,5,2)
|
|
|
|
/* 노무비 간접비 집계 -- 급여, 상여, 기타로 관리하기로 했는데 일단 계정별로 */
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
pjtno
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '92%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
-- AND pjtno = 'AA'
|
|
AND (pjtno = 'AA' OR pjtno IN (select pjtno_slip from ACC.dbo.t23w50 where yy = substring(@frdate,1,4) and pjtno_rep = 'AA'))
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
pjtno
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '92%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
-- AND pjtno = 'AA'
|
|
AND (pjtno = 'AA' OR pjtno IN (select pjtno_slip from ACC.dbo.t23w50 where yy = substring(@frdate,1,4) and pjtno_rep = 'AA'))
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
|
|
|
|
/* 경비 간접비 집계 --계정별로 합계를 구한다. */
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
pjtno
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '93%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
-- AND pjtno = 'AA'
|
|
AND (pjtno = 'AA' OR pjtno IN (select pjtno_slip from ACC.dbo.t23w50 where yy = substring(@frdate,1,4) and pjtno_rep = 'AA'))
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
pjtno
|
|
, acntcode
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '93%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
-- AND pjtno = 'AA'
|
|
AND (pjtno = 'AA' OR pjtno IN (select pjtno_slip from ACC.dbo.t23w50 where yy = substring(@frdate,1,4) and pjtno_rep = 'AA'))
|
|
GROUP BY
|
|
pjtno, acntcode, SUBSTRING(apvdate,5,2)
|
|
|
|
|
|
/* 외주비 간접비 집계 --하나의 계정으로 합계를 구한다. */
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
pjtno
|
|
, acntcode = '94'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '94%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
-- AND pjtno = 'AA'
|
|
AND (pjtno = 'AA' OR pjtno IN (select pjtno_slip from ACC.dbo.t23w50 where yy = substring(@frdate,1,4) and pjtno_rep = 'AA'))
|
|
GROUP BY
|
|
pjtno, SUBSTRING(apvdate,5,2)
|
|
|
|
INSERT
|
|
@temp_s1
|
|
SELECT
|
|
pjtno
|
|
, acntcode = '94'
|
|
, mon = SUBSTRING(apvdate,5,2)
|
|
, slpamt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '94%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
-- AND pjtno = 'AA'
|
|
AND (pjtno = 'AA' OR pjtno IN (select pjtno_slip from ACC.dbo.t23w50 where yy = substring(@frdate,1,4) and pjtno_rep = 'AA'))
|
|
GROUP BY
|
|
pjtno, SUBSTRING(apvdate,5,2)
|
|
|
|
/* 간접비 합계 ------------------------------------------------
|
|
SELECT pjtno, acntcode, mon, amt=ISNULL(SUM(slpamt),0)
|
|
into #temp_s3
|
|
FROM @temp_s1
|
|
group by pjtno, acntcode, mon
|
|
*/
|
|
|
|
/************************************************************************/
|
|
/* 간접비 배부 ------------------------------------------------*/
|
|
/************************************************************************/
|
|
DECLARE @chk_baebu_yn1 char(1),@chk_baebu_yn2 char(1),@chk_baebu_yn3 char(1),@chk_baebu_yn4 char(1)
|
|
SELECT @chk_baebu_yn1 = cd_name4 FROM ACC.dbo.t23c90 WHERE group_code = '05' AND sub_code = '1'
|
|
SELECT @chk_baebu_yn2 = cd_name4 FROM ACC.dbo.t23c90 WHERE group_code = '05' AND sub_code = '2'
|
|
SELECT @chk_baebu_yn3 = cd_name4 FROM ACC.dbo.t23c90 WHERE group_code = '05' AND sub_code = '3'
|
|
SELECT @chk_baebu_yn4 = cd_name4 FROM ACC.dbo.t23c90 WHERE group_code = '05' AND sub_code = '4'
|
|
|
|
/* 직접비 합 구함 :::: 프로젝트별 월별 계정별 합계 */
|
|
/* 간접비 배부기준에 따라서 직접비 합이 틀려진다. 간접비배부에 해당하는 계정에 대한 합(A)을 구한다.*/
|
|
/* 간접비 배부에 해당하는 프로젝트별 합(B)을 구해서 B/A*100을 하면 비율이 구해진다.*/
|
|
/*
|
|
SELECT pjtno, month
|
|
, SUM(case when acntcode like '91%' then amt else 0 end) tot1
|
|
, SUM(case when acntcode like '92%' then amt else 0 end) tot2
|
|
, SUM(case when acntcode like '93%' then amt else 0 end) tot3
|
|
, SUM(case when acntcode like '94%' then amt else 0 end) tot4
|
|
, rate=convert(decimal(20,13),0)
|
|
into @totamt1
|
|
FROM ACC.dbo.t23w20
|
|
WHERE area=@area
|
|
AND saupbu=@saupbu
|
|
AND indi = '1' --직접비기준
|
|
AND gijun = '1' --공사진행율기준
|
|
GROUP BY pjtno, month
|
|
*/
|
|
-- SELECT * FROM @temp_s1
|
|
-- SELECT SUM(slpamt) FROM @temp_s1 GROUP BY SUBSTRING(acntcode,1,2)
|
|
-- SELECT * FROM @totamt1 ORDER BY acntcode, pjtno
|
|
-- SELECT * FROM @totamt2 ORDER BY pjtno, acntcode
|
|
|
|
-- 이거는 사용 안해도 될듯...
|
|
DECLARE @totamt1 TABLE
|
|
(
|
|
pjtno VARCHAR(10),
|
|
acntcode VARCHAR(7),
|
|
[month] VARCHAR(2),
|
|
totamt DECIMAL,
|
|
rate DECIMAL(20,13)
|
|
)
|
|
|
|
INSERT INTO
|
|
@totamt1
|
|
SELECT
|
|
pjtno, acntcode, [month], totamt=SUM(amt), rate=0
|
|
FROM
|
|
ACC.dbo.t23w20
|
|
WHERE
|
|
yy = @yy
|
|
AND indi = '1' --직접비기준
|
|
AND gijun = '1' --공사진행율기준
|
|
GROUP BY
|
|
pjtno, acntcode, [month]
|
|
ORDER BY
|
|
acntcode
|
|
|
|
|
|
-- 이거는 일단 간접비 배부기준을 92, 93으로 셋팅함 원래는 테이블에서 가져와야 하는데...처리 안됨
|
|
DECLARE @totamt2 TABLE
|
|
(
|
|
pjtno VARCHAR(10),
|
|
[month] VARCHAR(2),
|
|
totamt DECIMAL,
|
|
amt92 DECIMAL,
|
|
amt93 DECIMAL,
|
|
rate DECIMAL(20,13)
|
|
)
|
|
|
|
INSERT INTO
|
|
@totamt2
|
|
SELECT
|
|
pjtno, [month]
|
|
-- , totamt = (SUM(CASE WHEN acntcode like '92%' THEN amt ELSE 0 END)+SUM(CASE WHEN acntcode like '93%' THEN amt ELSE 0 END))
|
|
, totamt = case
|
|
when @todate < '20130531'
|
|
then
|
|
(SUM(CASE WHEN acntcode like '92%' THEN amt ELSE 0 END)+SUM(CASE WHEN acntcode like '93%' THEN amt ELSE 0 END))
|
|
else
|
|
(SUM(CASE WHEN acntcode like '92%' THEN (case when amt>0 then amt else 0 end) ELSE 0 END)+SUM(CASE WHEN acntcode like '93%' THEN (case when amt>0 then amt else 0 end) ELSE 0 END))
|
|
end
|
|
, amt92 = SUM(CASE WHEN acntcode like '92%' THEN amt ELSE 0 END)
|
|
, amt93 = SUM(CASE WHEN acntcode like '93%' THEN amt ELSE 0 END)
|
|
, rate=CONVERT(DECIMAL(20,13),0)
|
|
FROM
|
|
ACC.dbo.t23w20
|
|
WHERE
|
|
yy = @yy
|
|
AND indi = '1' --직접비기준
|
|
AND gijun = '1' --공사진행율기준
|
|
GROUP BY pjtno, [month]
|
|
|
|
/* pjt별 배부율 할당계산 */
|
|
UPDATE
|
|
@totamt2
|
|
SET
|
|
rate = CONVERT(DECIMAL(20,13), (a.totamt/b.total))
|
|
FROM
|
|
@totamt2 a
|
|
INNER JOIN
|
|
(
|
|
SELECT
|
|
[month]
|
|
, total = SUM(totamt)
|
|
FROM
|
|
@totamt2
|
|
GROUP BY
|
|
[month]
|
|
) b
|
|
on a.[month] = b.[month]
|
|
|
|
-- 감가상각비, 퇴충에 대해서 처리
|
|
DECLARE @totamt3 TABLE
|
|
(
|
|
pjtno VARCHAR(10),
|
|
[month] VARCHAR(2),
|
|
totamt DECIMAL,
|
|
amt92 DECIMAL,
|
|
amt93 DECIMAL,
|
|
rate DECIMAL(20,13)
|
|
)
|
|
|
|
INSERT INTO
|
|
@totamt3
|
|
SELECT
|
|
pjtno
|
|
, [month] = SUBSTRING(@todate,5,2)
|
|
-- , [month] = [month]
|
|
-- , totamt = (SUM(CASE WHEN acntcode like '92%' THEN amt ELSE 0 END)+SUM(CASE WHEN acntcode like '93%' THEN amt ELSE 0 END))
|
|
, totamt = case
|
|
when @todate < '20130531'
|
|
then
|
|
(SUM(CASE WHEN acntcode like '92%' THEN amt ELSE 0 END)+SUM(CASE WHEN acntcode like '93%' THEN amt ELSE 0 END))
|
|
else
|
|
(SUM(CASE WHEN acntcode like '92%' THEN (case when amt>0 then amt else 0 end) ELSE 0 END)+SUM(CASE WHEN acntcode like '93%' THEN (case when amt>0 then amt else 0 end) ELSE 0 END))
|
|
end
|
|
, amt92 = SUM(CASE WHEN acntcode like '92%' THEN amt ELSE 0 END)
|
|
, amt93 = SUM(CASE WHEN acntcode like '93%' THEN amt ELSE 0 END)
|
|
, rate=CONVERT(DECIMAL(20,13),0)
|
|
FROM
|
|
ACC.dbo.t23w20
|
|
WHERE
|
|
yy = @yy
|
|
AND indi = '1' --직접비기준
|
|
AND gijun = '1' --공사진행율기준
|
|
GROUP BY pjtno
|
|
-- , [month]
|
|
|
|
/* pjt별 배부율 할당계산 */
|
|
UPDATE
|
|
@totamt3
|
|
SET
|
|
rate = CONVERT(DECIMAL(20,13), (totamt/(SELECT totamt=SUM(totamt) FROM @totamt3)))
|
|
|
|
|
|
SELECT * FROM @totamt1
|
|
SELECT * FROM @totamt2 order by pjtno
|
|
SELECT * FROM @totamt3 order by pjtno
|
|
SELECT * FROM @temp_s1 order by pjtno
|
|
|
|
SELECT substring(acntcode,1,2) acntcode, mon, sum(slpamt) slpamt FROM @temp_s1 group by substring(acntcode,1,2), mon
|
|
|
|
SELECT * FROM ACC.dbo.t23w20 where yy = @yy
|
|
|
|
/* 재료,노무,경비,외주 간접비 배부 ---------------------------------*/
|
|
/* 직접비 구성대로 간접비 구성 */
|
|
/*
|
|
SELECT * ,convert(decimal(20,0),round((a.rate*b.slpamt),0))
|
|
FROM @totamt1 a inner join @temp_s1 b on a.acntcode = b.acntcode AND a.month = b.mon
|
|
WHERE b.acntcode like '93%'
|
|
*/
|
|
|
|
-- 간접비를 직접재료비에 배부시킨다. Y일 때만
|
|
if (@chk_baebu_yn1 = 'Y')
|
|
BEGIN
|
|
INSERT INTO
|
|
ACC.dbo.t23w20
|
|
(yy, pjtno, acntcode, indi, [month]
|
|
, amt
|
|
, rate, gijun)
|
|
SELECT
|
|
@yy, a.pjtno, '91', '2', a.[month]
|
|
, amt = CONVERT(DECIMAL(20,0), ROUND((a.rate*b.slpamt),0))
|
|
, 0, '1'
|
|
FROM
|
|
@totamt1 a
|
|
INNER JOIN
|
|
@temp_s1 b
|
|
ON
|
|
a.acntcode = b.acntcode
|
|
AND a.[month] = b.mon
|
|
WHERE
|
|
b.acntcode ='91'
|
|
END
|
|
-- SELECT SUM(amt) FROM t23w20 WHERE indi = '2' GROUP BY SUBSTRING(acntcode,1,2)
|
|
-- SELECT * FROM t23w20 WHERE indi = '2' AND acntcode like '92%'
|
|
/* SELECT a.pjtno, b.acntcode, '2', a.month
|
|
, a.rate, b.slpamt
|
|
FROM @totamt2 a inner join @temp_s1 b
|
|
on a.month = b.mon
|
|
WHERE b.acntcode like '93%'
|
|
*/
|
|
-- 간접비를 직접노무비에 배부시킨다. Y일 때만
|
|
if (@chk_baebu_yn2 = 'Y')
|
|
BEGIN
|
|
INSERT INTO
|
|
ACC.dbo.t23w20
|
|
(yy, pjtno, acntcode, indi, [month], amt, rate, gijun)
|
|
SELECT
|
|
@yy, a.pjtno, b.acntcode, '2', a.[month]
|
|
, amt = SUM(ROUND((a.rate*b.slpamt),0))
|
|
, 0, '1'
|
|
FROM
|
|
@totamt2 a
|
|
INNER JOIN
|
|
@temp_s1 b
|
|
ON
|
|
a.[month] = b.mon
|
|
WHERE
|
|
b.acntcode LIKE '92%'
|
|
AND b.acntcode NOT IN ('9200400' ,'9200401' ,'9200402','9200403')
|
|
GROUP BY
|
|
a.pjtno, b.acntcode, a.[month]
|
|
|
|
SELECT
|
|
@yy, a.pjtno, b.acntcode, '2', a.[month]
|
|
, amt = SUM(ROUND((a.rate*b.slpamt),0))
|
|
, rate = SUM(a.rate)
|
|
, slpamt = SUM(b.slpamt)
|
|
, 0, '1'
|
|
FROM
|
|
@totamt2 a
|
|
INNER JOIN
|
|
@temp_s1 b
|
|
ON
|
|
a.[month] = b.mon
|
|
WHERE
|
|
b.acntcode LIKE '92%'
|
|
AND b.acntcode NOT IN ('9200400' ,'9200401' ,'9200402','9200403')
|
|
GROUP BY
|
|
a.pjtno, b.acntcode, a.[month]
|
|
|
|
INSERT INTO
|
|
ACC.dbo.t23w20
|
|
(yy, pjtno, acntcode, indi, [month], amt, rate, gijun)
|
|
SELECT
|
|
@yy, a.pjtno, b.acntcode, '2', a.[month]
|
|
, amt = SUM(ROUND((a.rate*b.slpamt),0))
|
|
, 0, '1'
|
|
FROM
|
|
@totamt3 a
|
|
INNER JOIN
|
|
@temp_s1 b
|
|
ON
|
|
a.[month] = b.mon
|
|
WHERE
|
|
b.acntcode IN ('9200400' ,'9200401' ,'9200402','9200403')
|
|
GROUP BY
|
|
a.pjtno, b.acntcode, a.[month]
|
|
END
|
|
-- 간접비를 직접경비에 배부시킨다. Y일 때만
|
|
if (@chk_baebu_yn3 = 'Y')
|
|
BEGIN
|
|
IF (@todate < '20130531') -- (SUBSTRING(@todate,5,4) = '0531')
|
|
BEGIN
|
|
|
|
INSERT INTO
|
|
ACC.dbo.t23w20
|
|
(yy, pjtno, acntcode, indi, [month], amt, rate, gijun)
|
|
SELECT
|
|
@yy, a.pjtno, b.acntcode, '2', a.[month]
|
|
, amt = SUM(ROUND((a.rate*b.slpamt),0))
|
|
, 0, '1'
|
|
FROM
|
|
@totamt2 a
|
|
INNER JOIN
|
|
@temp_s1 b
|
|
ON
|
|
a.[month] = b.mon
|
|
WHERE
|
|
b.acntcode LIKE '93%'
|
|
GROUP BY
|
|
a.pjtno, b.acntcode, a.[month]
|
|
|
|
END
|
|
ELSE
|
|
BEGIN
|
|
|
|
INSERT INTO
|
|
ACC.dbo.t23w20
|
|
(yy, pjtno, acntcode, indi, [month], amt, rate, gijun)
|
|
SELECT
|
|
@yy, a.pjtno, b.acntcode, '2', a.[month]
|
|
, amt = SUM(ROUND((a.rate*b.slpamt),0))
|
|
, 0, '1'
|
|
FROM
|
|
@totamt2 a
|
|
INNER JOIN
|
|
@temp_s1 b
|
|
ON
|
|
a.[month] = b.mon
|
|
WHERE
|
|
b.acntcode LIKE '93%'
|
|
AND b.acntcode NOT IN ('9303900' ,'9303901' ,'9303902','9303903','9303904','9303905','9303906','9303907','9303908')
|
|
GROUP BY
|
|
a.pjtno, b.acntcode, a.[month]
|
|
|
|
INSERT INTO
|
|
ACC.dbo.t23w20
|
|
(yy, pjtno, acntcode, indi, [month], amt, rate, gijun)
|
|
SELECT
|
|
@yy, a.pjtno, b.acntcode, '2', a.[month]
|
|
, amt = SUM(ROUND((a.rate*b.slpamt),0))
|
|
, 0, '1'
|
|
FROM
|
|
@totamt3 a
|
|
INNER JOIN
|
|
@temp_s1 b
|
|
ON
|
|
a.[month] = b.mon
|
|
WHERE
|
|
b.acntcode IN ('9303900' ,'9303901' ,'9303902','9303903','9303904','9303905','9303906','9303907','9303908')
|
|
GROUP BY
|
|
a.pjtno, b.acntcode, a.[month]
|
|
|
|
END
|
|
|
|
-- INSERT INTO
|
|
-- ACC.dbo.t23w20
|
|
-- (yy, pjtno, acntcode, indi, [month], amt, rate, gijun)
|
|
-- SELECT
|
|
-- @yy, a.pjtno, b.acntcode, '2', a.[month]
|
|
-- , amt = SUM(ROUND((a.rate*b.slpamt),0))
|
|
-- , 0, '1'
|
|
-- FROM
|
|
-- @totamt2 a
|
|
-- INNER JOIN
|
|
-- @temp_s1 b
|
|
-- ON
|
|
-- a.[month] = b.mon
|
|
-- WHERE
|
|
-- b.acntcode LIKE '93%'
|
|
-- AND b.acntcode NOT IN ('9303900' ,'9303901' ,'9303902','9303903','9303904','9303905','9303906','9303907','9303908')
|
|
-- GROUP BY
|
|
-- a.pjtno, b.acntcode, a.[month]
|
|
--
|
|
-- INSERT INTO
|
|
-- ACC.dbo.t23w20
|
|
-- (yy, pjtno, acntcode, indi, [month], amt, rate, gijun)
|
|
-- SELECT
|
|
-- @yy, a.pjtno, b.acntcode, '2', a.[month]
|
|
-- , amt = SUM(ROUND((a.rate*b.slpamt),0))
|
|
-- , 0, '1'
|
|
-- FROM
|
|
-- @totamt3 a
|
|
-- INNER JOIN
|
|
-- @temp_s1 b
|
|
-- ON
|
|
-- a.[month] = b.mon
|
|
-- WHERE
|
|
-- b.acntcode IN ('9303900' ,'9303901' ,'9303902','9303903','9303904','9303905','9303906','9303907','9303908')
|
|
-- GROUP BY
|
|
-- a.pjtno, b.acntcode, a.[month]
|
|
|
|
END
|
|
-- 간접비를 직접외주비에 배부시킨다. Y일 때만
|
|
if (@chk_baebu_yn4 = 'Y')
|
|
BEGIN
|
|
INSERT INTO
|
|
ACC.dbo.t23w20
|
|
(yy, pjtno, acntcode, indi, [month], amt, rate, gijun)
|
|
SELECT
|
|
@yy, a.pjtno, '94', '2', a.[month]
|
|
, amt = CONVERT(DECIMAL(20,0),ROUND((a.rate*b.slpamt),0)), 0, '1'
|
|
FROM
|
|
@totamt1 a
|
|
INNER JOIN
|
|
@temp_s1 b
|
|
ON
|
|
a.[month] = b.mon
|
|
WHERE
|
|
b.acntcode LIKE '94%'
|
|
END
|
|
|
|
/*=== 간접비인 경우에 승인전표에서 계정코드가 '5130100' 이 당기 기간의 매출액이 되므로 해당 매출액을 입력한다. */
|
|
DECLARE @temp_saleamt TABLE
|
|
(
|
|
pjtno VARCHAR(10),
|
|
saleamt DECIMAL
|
|
)
|
|
|
|
INSERT INTO
|
|
@temp_saleamt
|
|
SELECT
|
|
a.pjtno,
|
|
saleamt = SUM(a.apvcramt)
|
|
FROM
|
|
(
|
|
SELECT
|
|
a.pjtno,
|
|
a.apvcramt
|
|
FROM
|
|
#temp_t23a10 a
|
|
INNER JOIN
|
|
(
|
|
SELECT DISTINCT a.pjtno
|
|
FROM
|
|
(
|
|
SELECT
|
|
distinct c.pjtno_slip pjtno
|
|
FROM
|
|
ACC.dbo.t23w60 a
|
|
JOIN
|
|
ACC.dbo.t23w50 c
|
|
ON
|
|
a.yy = c.yy and a.pjtno = c.pjtno_rep
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun ='2'
|
|
UNION
|
|
SELECT
|
|
distinct a.pjtno
|
|
FROM
|
|
ACC.dbo.t23w60 a
|
|
WHERE
|
|
NOT EXISTS
|
|
(
|
|
SELECT * FROM ACC.dbo.t23w50
|
|
WHERE
|
|
a.yy = yy and a.pjtno = pjtno_slip
|
|
)
|
|
AND a.yy = @yy
|
|
AND a.hg_gijun ='2'
|
|
) a
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.apvdate BETWEEN @frdate AND @todate
|
|
AND a.acntcode = '5130100'
|
|
UNION ALL
|
|
SELECT
|
|
a.pjtno,
|
|
a.apvcramt
|
|
FROM
|
|
ACC.dbo.t23a90 a
|
|
INNER JOIN
|
|
(
|
|
SELECT DISTINCT a.pjtno
|
|
FROM
|
|
(
|
|
SELECT
|
|
distinct c.pjtno_slip pjtno
|
|
FROM
|
|
ACC.dbo.t23w60 a
|
|
JOIN
|
|
ACC.dbo.t23w50 c
|
|
ON
|
|
a.yy = c.yy and a.pjtno = c.pjtno_rep
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun ='2'
|
|
UNION
|
|
SELECT
|
|
distinct a.pjtno
|
|
FROM
|
|
ACC.dbo.t23w60 a
|
|
WHERE
|
|
NOT EXISTS
|
|
(
|
|
SELECT * FROM ACC.dbo.t23w50
|
|
WHERE
|
|
a.yy = yy and a.pjtno = pjtno_slip
|
|
)
|
|
AND a.yy = @yy
|
|
AND a.hg_gijun ='2'
|
|
) a
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
-- a.apvdate BETWEEN @frdate AND @todate 2010.06.16 수정
|
|
a.apvdate = @todate
|
|
AND a.acntcode = '5130100'
|
|
) a
|
|
GROUP BY
|
|
a.pjtno
|
|
|
|
|
|
/*=== 직접비인 경우에 승인전표에서 계정코드가 '2100601','2100602'이고, 사업자번호가 '4118121029'이 아닌 대변금액이 당기 기간의 수금액이 되므로 */
|
|
INSERT INTO
|
|
@temp_saleamt
|
|
SELECT
|
|
a.pjtno,
|
|
saleamt = SUM(a.apvcramt)
|
|
FROM
|
|
#temp_t23a10 a
|
|
INNER JOIN
|
|
(
|
|
-- SELECT DISTINCT a.pjtno
|
|
-- FROM
|
|
-- @temp_s2 a
|
|
-- WHERE
|
|
-- a.yy = @yy
|
|
-- AND a.hg_gijun = '1'
|
|
|
|
SELECT DISTINCT a.pjtno
|
|
FROM
|
|
(
|
|
SELECT
|
|
distinct c.pjtno_slip pjtno
|
|
FROM
|
|
ACC.dbo.t23w60 a
|
|
JOIN
|
|
ACC.dbo.t23w50 c
|
|
ON
|
|
a.yy = c.yy and a.pjtno = c.pjtno_rep
|
|
WHERE
|
|
a.yy = @yy
|
|
AND a.hg_gijun ='1'
|
|
UNION
|
|
SELECT
|
|
distinct a.pjtno
|
|
FROM
|
|
ACC.dbo.t23w60 a
|
|
WHERE
|
|
NOT EXISTS
|
|
(
|
|
SELECT * FROM ACC.dbo.t23w50
|
|
WHERE
|
|
a.yy = yy and a.pjtno = pjtno_slip
|
|
)
|
|
AND a.yy = @yy
|
|
AND a.hg_gijun ='1'
|
|
) a
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.apvdate BETWEEN substring(@frdate,1,7)+'2' AND @todate
|
|
AND a.acntcode in ('2100601','2100602')
|
|
AND a.vendorcd <> '4118121029'
|
|
GROUP BY
|
|
a.pjtno
|
|
|
|
/* 전표등록된 공사코드 ---> 원가계산용 공사코드로 변경 */
|
|
UPDATE
|
|
@temp_saleamt
|
|
SET
|
|
pjtno = b.pjtno_rep
|
|
FROM
|
|
@temp_saleamt a,
|
|
ACC.dbo.t23w50 b
|
|
WHERE
|
|
b.yy = substring(@frdate,1,4) and a.pjtno = b.pjtno_slip
|
|
|
|
/* 원가계산에 있는 경우에는 업데이트하고 해당 기간에 없는 경우에는 신규로 입력한다.*/
|
|
UPDATE
|
|
ACC.dbo.t23w20
|
|
SET
|
|
saleamt = b.saleamt
|
|
FROM
|
|
ACC.dbo.t23w20 a
|
|
INNER JOIN
|
|
(
|
|
SELECT pjtno, SUM(saleamt) saleamt FROM @temp_saleamt
|
|
GROUP BY pjtno
|
|
) b
|
|
ON
|
|
a.yy = @yy
|
|
AND a.pjtno = b.pjtno
|
|
|
|
|
|
INSERT INTO
|
|
ACC.dbo.t23w20
|
|
(
|
|
yy, pjtno, amt, rate, indi, acntcode, [month]
|
|
, gijun
|
|
, saleamt
|
|
)
|
|
SELECT
|
|
@yy, a.pjtno, 0, 0, '', '', ''
|
|
, (SELECT hg_gijun FROM ACC.dbo.t23w60 WHERE yy = @yy AND pjtno = a.pjtno)
|
|
, SUM(a.saleamt) saleamt
|
|
FROM
|
|
@temp_saleamt a
|
|
WHERE NOT EXISTS
|
|
(
|
|
SELECT DISTINCT pjtno FROM ACC.dbo.t23w20 WHERE yy = @yy AND a.pjtno = pjtno
|
|
)
|
|
GROUP BY
|
|
a.pjtno
|
|
|
|
-- 해당 기간에 발생되지 않은 자료를 강제로 보여주기 위해서 추가함.
|
|
INSERT INTO
|
|
ACC.dbo.t23w20
|
|
(
|
|
yy, pjtno, amt, rate, indi, acntcode, [month]
|
|
, gijun
|
|
, saleamt
|
|
)
|
|
SELECT
|
|
@yy, a.pjtno, 0, 0, '', '', ''
|
|
, a.hg_gijun
|
|
, 0
|
|
FROM
|
|
ACC.dbo.t23w60 a
|
|
WHERE NOT EXISTS
|
|
(
|
|
SELECT DISTINCT pjtno FROM ACC.dbo.t23w20 WHERE yy = @yy AND a.pjtno = pjtno
|
|
)
|
|
AND a.yy = @yy
|
|
|
|
/*=== 공사진행율기준의 경우에 선수금을 가져오기 위해서 추가 */
|
|
UPDATE
|
|
ACC.dbo.t23w20
|
|
SET
|
|
sunsugum = b.sunsugum
|
|
FROM
|
|
ACC.dbo.t23w20 a
|
|
INNER JOIN
|
|
(
|
|
SELECT
|
|
a.pjtno, SUM(a.apvcramt) - SUM(a.apvdramt) sunsugum -- 대변 - 차변
|
|
FROM
|
|
#temp_t23a10 a
|
|
INNER JOIN
|
|
(
|
|
SELECT pjtno FROM ACC.dbo.t23w20 WHERE yy = @yy AND gijun ='1' GROUP BY pjtno
|
|
) b
|
|
ON
|
|
a.pjtno = b.pjtno
|
|
WHERE
|
|
a.apvdate BETWEEN @frdate AND @todate
|
|
AND a.acntcode in ('2100601','2100602')
|
|
GROUP BY
|
|
a.pjtno
|
|
) b
|
|
ON
|
|
a.yy = @yy
|
|
AND a.pjtno = b.pjtno
|
|
|
|
|
|
|
|
-- 노무비 차액 발생하는 것 체크해서 월별로 가장 큰 계정의 금액에 더하거나 뺀다.
|
|
DECLARE @tmpjan92 TABLE
|
|
(
|
|
seq INT IDENTITY(1,1),
|
|
mon CHAR(2),
|
|
amt DECIMAL
|
|
)
|
|
|
|
DECLARE @seq INT, @cnt INT, @janamt DECIMAL
|
|
SET @seq = 1
|
|
SET @cnt = 0
|
|
SET @janamt = 0
|
|
|
|
INSERT INTO
|
|
@tmpjan92
|
|
SELECT
|
|
a.mon, b.amt-a.amt
|
|
FROM
|
|
(
|
|
SELECT mon = [month], sum(amt) amt
|
|
FROM
|
|
ACC.dbo.t23w20
|
|
WHERE
|
|
yy = @yy
|
|
and acntcode like '92%'
|
|
GROUP BY
|
|
[month]
|
|
) a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
mon, SUM(amt) amt
|
|
FROM
|
|
(
|
|
SELECT
|
|
mon = SUBSTRING(apvdate,5,2)
|
|
, amt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '92%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
GROUP BY
|
|
SUBSTRING(apvdate,5,2)
|
|
UNION ALL
|
|
SELECT
|
|
mon = SUBSTRING(apvdate,5,2)
|
|
, amt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '92%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
GROUP BY
|
|
SUBSTRING(apvdate,5,2)
|
|
) a
|
|
GROUP BY
|
|
mon
|
|
) b
|
|
ON
|
|
a.mon = b.mon
|
|
|
|
-- SELECT * FROM @tmpjan92
|
|
|
|
SELECT @cnt = COUNT(*)
|
|
FROM @tmpjan92
|
|
|
|
WHILE(@seq<=@cnt)
|
|
BEGIN
|
|
SELECT @janamt = amt FROM @tmpjan92 WHERE seq = @seq
|
|
|
|
UPDATE
|
|
ACC.dbo.t23w20
|
|
SET
|
|
amt = amt + @janamt
|
|
FROM
|
|
ACC.dbo.t23w20 a
|
|
JOIN
|
|
(
|
|
SELECT TOP 1 pjtno, [month], acntcode
|
|
FROM
|
|
ACC.dbo.t23w20
|
|
WHERE
|
|
yy = @yy
|
|
AND [month] = HRM.dbo.ufn_lpad(@seq, 2, '0')
|
|
AND acntcode LIKE '92%'
|
|
AND indi = '2' -- 간접비에 배부해야 함
|
|
GROUP BY
|
|
pjtno, [month], acntcode
|
|
ORDER BY
|
|
MAX(amt) DESC
|
|
) b
|
|
ON
|
|
a.yy = @yy
|
|
AND a.[month] = b.[month]
|
|
AND a.pjtno = b.pjtno
|
|
AND a.acntcode = b.acntcode
|
|
AND a.indi = '2' -- 간접비에 배부해야 함
|
|
|
|
SET @seq = @seq + 1
|
|
END
|
|
|
|
-- 경비 차액 발생하는 것 체크해서 월별로 가장 큰 계정의 금액에 더하거나 뺀다.
|
|
DECLARE @tmpjan93 TABLE
|
|
(
|
|
seq INT IDENTITY(1,1),
|
|
mon CHAR(2),
|
|
amt DECIMAL
|
|
)
|
|
|
|
INSERT INTO
|
|
@tmpjan93
|
|
SELECT
|
|
a.mon, b.amt-a.amt
|
|
FROM
|
|
(
|
|
SELECT mon = [month], sum(amt) amt
|
|
FROM
|
|
ACC.dbo.t23w20
|
|
WHERE
|
|
yy = @yy
|
|
AND acntcode LIKE '93%'
|
|
GROUP BY
|
|
[month]
|
|
) a
|
|
JOIN
|
|
(
|
|
SELECT
|
|
mon, SUM(amt) amt
|
|
FROM
|
|
(
|
|
SELECT
|
|
mon = SUBSTRING(apvdate,5,2)
|
|
, amt = SUM(apvdramt)
|
|
FROM
|
|
#temp_t23a10
|
|
WHERE
|
|
acntcode LIKE '93%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
AND apvdate >= @frdate
|
|
AND apvdate <= @todate
|
|
GROUP BY
|
|
SUBSTRING(apvdate,5,2)
|
|
UNION ALL
|
|
SELECT
|
|
mon = SUBSTRING(apvdate,5,2)
|
|
, amt = SUM(apvdramt)
|
|
FROM
|
|
ACC.dbo.t23a90
|
|
WHERE
|
|
acntcode LIKE '93%'
|
|
AND saupbu = @saupbu
|
|
AND area = @area
|
|
-- AND apvdate >= @frdate
|
|
AND apvdate = @todate
|
|
GROUP BY
|
|
SUBSTRING(apvdate,5,2)
|
|
) a
|
|
GROUP BY
|
|
mon
|
|
) b
|
|
ON
|
|
a.mon = b.mon
|
|
ORDER BY
|
|
a.mon
|
|
|
|
-- SELECT * FROM @tmpjan93
|
|
|
|
SET @seq = 1
|
|
SET @cnt = 0
|
|
SET @janamt = 0
|
|
|
|
SELECT @cnt = COUNT(*)
|
|
FROM @tmpjan93
|
|
|
|
WHILE(@seq<=@cnt)
|
|
BEGIN
|
|
SELECT @janamt = amt FROM @tmpjan93 WHERE seq = @seq
|
|
|
|
-- SELECT @janamt
|
|
|
|
UPDATE
|
|
ACC.dbo.t23w20
|
|
SET
|
|
amt = amt + @janamt
|
|
FROM
|
|
ACC.dbo.t23w20 a
|
|
JOIN
|
|
(
|
|
SELECT TOP 1 pjtno, [month], acntcode
|
|
FROM
|
|
ACC.dbo.t23w20
|
|
WHERE
|
|
yy = @yy
|
|
AND [month] = HRM.dbo.ufn_lpad(@seq, 2, '0')
|
|
AND acntcode LIKE '93%'
|
|
AND indi = '2' -- 간접비에 배부해야 함
|
|
GROUP BY
|
|
pjtno, [month], acntcode
|
|
ORDER BY
|
|
MAX(amt) DESC
|
|
) b
|
|
ON
|
|
a.yy = @yy
|
|
AND a.[month] = b.[month]
|
|
AND a.pjtno = b.pjtno
|
|
AND a.acntcode = b.acntcode
|
|
AND indi = '2' -- 간접비에 배부해야 함
|
|
|
|
SET @seq = @seq + 1
|
|
END
|