Files
hallasanup/쿼리/Template/원가계산검증.sql
2026-06-23 17:45:48 +09:00

1131 lines
26 KiB
Transact-SQL

-- ==========================================
-- 작업일자: YYYY-MM-DD [쿼리 작성 및 실행 날짜를 기록합니다.]
-- 작 성 자: [실행자 이름을 기록합니다.]
-- 작업목적: [회계장부로 원가계산기능을 순차적으로 검증하며 중간산출자료등을 회계팀에 제공할 목적으로 작성된 쿼리입니다.]
-- 요청자/티켓번호: [회계팀의 요청시 검토하는 용도입니다.]
-- 데이타베이스 : MS-SQL
-- ==========================================
DROP TABLE #temp_t23a10
DECLARE
@area CHAR(1) ,
@saupbu CHAR(2),
@frdate CHAR(8),
@todate CHAR(8)
-- AS
SELECT @area = '9', @saupbu = '10', @frdate = '20230101', @todate = '20230131'
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]
SELECT * FROM @totamt2 order by pjtno
SELECT [month], sum(totamt) FROM @totamt2 GROUP BY [month] -- 11 1986898860
-- 감가상각비, 퇴충에 대해서 처리
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)
-- , 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
-- SELECT * FROM @totamt3 order by pjtno
-- SELECT sum(totamt) FROM @totamt3 -- 18731700085
/* pjt별 배부율 할당계산 */
UPDATE
@totamt3
SET
rate = CONVERT(DECIMAL(20,13), (totamt/(SELECT totamt=SUM(totamt) FROM @totamt3)))
-- SELECT * FROM @totamt2 order by pjtno
SELECT * FROM @totamt3 order by pjtno
SELECT substring(acntcode,1,5) acntcode, mon, sum(slpamt) slpamt FROM @temp_s1 where acntcode like '92%' group by substring(acntcode,1, 5), mon
-- 노무비 배부기준
SELECT pjtno,substring(acntcode,1,5) acntcode, mon, sum(slpamt) slpamt FROM @temp_s1 where acntcode like '92%' group by pjtno,substring(acntcode,1, 5), mon
-- 경비 배부기준
SELECT pjtno,substring(acntcode,1,5) acntcode, mon, sum(slpamt) slpamt FROM @temp_s1 where acntcode like '93%' group by pjtno,substring(acntcode,1, 5), mon
-- SELECT substring(acntcode,1,2) acntcode, mon, sum(slpamt) slpamt FROM @temp_s1 where substring(acntcode,1,5) in ('92001', '92002') group by substring(acntcode,1, 2), mon
/*
SELECT
pjtno = ISNULL(pjtno,'')
, acntcode
, mon = SUBSTRING(apvdate,5,2)
, slpamt = SUM(apvdramt)
FROM
#temp_t23a10
WHERE
acntcode LIKE '93%'
AND apvdate >= '20230101'
AND apvdate <= '20230131'
AND saupbu = '10'
AND area = '9'
and pjtno = 'V172T004'
GROUP BY
pjtno, acntcode, SUBSTRING(apvdate,5,2)
*/