diff --git a/문서/2026/01/260130_에이스플랜트 투입액 산출방식.xlsx b/문서/2026/01/260130_에이스플랜트 투입액 산출방식.xlsx new file mode 100644 index 0000000..0c5307f Binary files /dev/null and b/문서/2026/01/260130_에이스플랜트 투입액 산출방식.xlsx differ diff --git a/문서/2026/05/20260518_한라지킴이 변경사항 리스트.hwp b/문서/2026/05/20260518_한라지킴이 변경사항 리스트.hwp new file mode 100644 index 0000000..529417d Binary files /dev/null and b/문서/2026/05/20260518_한라지킴이 변경사항 리스트.hwp differ diff --git a/쿼리/2026/06/20260622_실행예산승인실패시 오류수정.sql b/쿼리/2026/06/20260622_실행예산승인실패시 오류수정.sql new file mode 100644 index 0000000..8829350 --- /dev/null +++ b/쿼리/2026/06/20260622_실행예산승인실패시 오류수정.sql @@ -0,0 +1,37 @@ +-- ========================================== +-- 작업일자: 2026-06-22 +-- 작 성 자: 류호성 +-- 작업목적: [실행예산 승인 실패에 대한 원인 조사 및 수정하기] +-- 요청자/티켓번호: [서경아차장 / 요청번호 5948번] +-- 데이타베이스 : MS-SQL +-- ========================================== + +-- [0] 실행예산 승인 실패시 실패사유를 저장하는 테이블에서 실패사유 조회하기 +select pjt_no, failure_reason from HPOIMS.dbo.ys_project where pjt_no = 'V172T403' + +-- [1] 실행예산 승인 프로시저에서 실패 사유에 대한 부분 조사 +-- usp_ys_mbudget_approval_new + +-- [2] 서경아차장과 협의하여 예산코드 AB33001과 AB33002도 추가하여 예외 기준 정하기로 하여 프로시저 수정함. + SELECT + b.pjt_no, b.main, b.sub, b.bud_seq, (ISNULL(b.amt,0)+ISNULL(a.amt,0)) , ISNULL(b.x_amt,0) + FROM + ( + SELECT pjt_no, main, sub, bud_seq, SUM(amt) amt, SUM(x_amt) x_amt FROM HPOIMS.dbo.ys_pbudget WHERE pjt_no = 'V172T403' GROUP BY pjt_no, main, sub, bud_seq + )b + --LEFT OUTER JOIN + JOIN + HPOIMS.dbo.ys_mbudget a + ON + a.pjt_no = b.pjt_no + AND a.main = b.main + AND a.sub = b.sub + AND a.bud_seq = b.bud_seq + AND a.bud_gbn = 'C' + AND a.chasu = 1 + WHERE + b.pjt_no = 'V172T403' + AND (ISNULL(b.amt,0)+ISNULL(a.amt,0)) < ISNULL(b.x_amt,0) + AND b.main+b.sub NOT IN ('AB33001','AB33002') -- 원가안분 인 경우에는 제외(2011.05.04) + +-- [3] 성공적으로 예산편성 승인 처리된 것 확인함. diff --git a/쿼리/2026/06/20260623_기성지불전표와 실전표정보 차이 조정하기.sql b/쿼리/2026/06/20260623_기성지불전표와 실전표정보 차이 조정하기.sql new file mode 100644 index 0000000..99afb0b --- /dev/null +++ b/쿼리/2026/06/20260623_기성지불전표와 실전표정보 차이 조정하기.sql @@ -0,0 +1,65 @@ +-- ========================================== +-- 작업일자: 2026-06-23 +-- 작 성 자: 류호성 +-- 작업목적: [기성지불 전표와 발행된 회계 전표와의 차이를 찾아서 정보를 일치시킨다.] +-- 요청자/티켓번호: [체크시 발견된 사항이며, 선급금 전표 발행시 프로시저 점검하여 보완해야 할 것으로 보입니다.] +-- 데이타베이스 : MS-SQL +-- ========================================== + +-- [0] 기성지불 전표정보와 실제 전표정보와의 차이 조회하기 +select + a.cont_no, a.year, a.month, a.gs_gbn, a.gs_seq, a.gs_amt, a.sk_amt, a.sj_amt, a.slpdate, a.dtcode, a.slpnum, b.slpnum , b.slpamt +from + HPOIMS.dbo.gs_payment a +left outer join + ACC.dbo.t23b10 b +on + a.slpdate = b.slpdate and a.dtcode = b.dtcode +where + a.year = '2026' and a.slpnum <> b.slpnum and (a.gs_amt = b.slpamt or a.sk_amt = b.slpamt) + +--cont_no year month gs_gbn gs_seq gs_amt sk_amt sj_amt slpdate dtcode slpnum slpnum slpamt +--V26G010 2026 06 M 1 0 40000000 0 20260612 1321 205 203 40000000 + +-- [1] 기성지불정보의 전표정보 조회하기 +select + * +from + HPOIMS.dbo.gs_payment +where + cont_no = 'V26G010' and year = '2026' and month = '06' and gs_gbn = 'M' and gs_seq = 1 + +-- [2] 해당 전표번호로 기성지불내역에 존재여부 재확인하기 +select + * +from + HPOIMS.dbo.gs_payment a +where + a.slpdate = '20260612' and a.dtcode = '1321' and a.slpnum between 201 and 205 + +-- [3] 실행일은 상황에 따라 적절하게 수정하여 해당 전표번호로 전표내역 확인하기 +select + * +from + ACC.dbo.t23b10_tr +where + actdate>'20260401' and slpdate = '20260612' and dtcode = '1321' and slpnum = 203 +order by actdate, acttime + +select + * +from + ACC.dbo.t23b10_tr +where + actdate>'20260401' and slpdate = '20260612' and dtcode = '1321' and slpnum = 205 +order by actdate, acttime + +-- [4] 기성지불에 올바른 전표번호로 수정하기 +/* +update + HPOIMS.dbo.gs_payment +set + slpnum = 203 +where + cont_no = 'V26G010' and year = '2026' and month = '06' and gs_gbn = 'M' and gs_seq = 1 +*/ diff --git a/쿼리/README.md b/쿼리/README.md index 97c00cb..a24a7a6 100644 --- a/쿼리/README.md +++ b/쿼리/README.md @@ -15,23 +15,23 @@ hallasanup/ ├── Template/ │ ├── POR소요예산 변경하기.sql ├── 2026/ - │ ├── 05_May/ - │ └── 06_June/ - │ ├── 20260618_UPDATE_고객_데이터_정정.sql - │ └── 20260620_SELECT_월간_통계_집계.sql + │ ├── 05/ + │ └── 06/ + │ ├── 20260618_고객_데이터_정정.sql + │ └── 20260620_월간_통계_집계.sql └── 2025/ - └── 12_December/ + └── 12/ ``` ## 2. 파일 명명 규칙 (Naming Convention) 파일 이름만 보고도 실행 날짜와 목적을 직관적으로 알 수 있도록 작성합니다. -> **`[YYYYMMDD]_[SQL타입]_[작업_내용].sql`** +> **`[YYYYMMDD]_[작업_내용].sql`** -* **데이터 수정 (UPDATE/DELETE):** `20260618_UPDATE_회원탈퇴처리.sql` -* **데이터 조회 (SELECT):** `20260630_SELECT_매출통계조회.sql` -* **테이블 구조 변경 (ALTER/CREATE):** `20260615_ALTER_상품테이블_인덱스추가.sql` +* **데이터 수정 (UPDATE/DELETE):** `20260618_회원탈퇴처리.sql` +* **데이터 조회 (SELECT):** `20260630_매출통계조회.sql` +* **테이블 구조 변경 (ALTER/CREATE):** `20260615_상품테이블_인덱스추가.sql` --- @@ -45,6 +45,7 @@ hallasanup/ -- 작 성 자: [작성자 이름] -- 작업목적: [쿼리 작성 및 실행 목적 설명] -- 요청자/티켓번호: [요청 부서 또는 이슈 번호] +-- 데이타베이스 : MS-SQL 혹은 MY-SQL -- ========================================== -- [1] 대상 데이터 검증 (조회) diff --git a/쿼리/Template/POR 소요예산 변경하기.sql b/쿼리/Template/POR 소요예산 변경하기.sql index e533931..54480cd 100644 --- a/쿼리/Template/POR 소요예산 변경하기.sql +++ b/쿼리/Template/POR 소요예산 변경하기.sql @@ -3,6 +3,7 @@ -- 작 성 자: [실행자 이름을 기록합니다.] -- 작업목적: [이미 집행된 발주의뢰서의 금액을 실제 투입금액으로 변경할 경우 사용합니다.] -- 요청자/티켓번호: [요청 부서 / 요청자 또는 이슈 번호를 기록합니다.] +-- 데이타베이스 : MS-SQL -- ========================================== declare @por_no char(8), @por_seq int diff --git a/쿼리/Template/매일확인하기.sql b/쿼리/Template/매일확인하기.sql new file mode 100644 index 0000000..890cb5f --- /dev/null +++ b/쿼리/Template/매일확인하기.sql @@ -0,0 +1,1013 @@ +-- ========================================== +-- 작업일자: YYYY-MM-DD [쿼리 작성 및 실행 날짜를 기록합니다.] +-- 작 성 자: [실행자 이름을 기록합니다.] +-- 작업목적: [주기적으로 실행하여 아이체크로 이상데이타 확인하며 필요시 실무자와 확인 후 수정을 별도 진행합니다.] +-- 요청자/티켓번호: [별도 요청은 없으며, 이상자료에 대한 분석에 대한 조치는 실무자와 협의 후 수정하거나 수정하지 않고 확인만 진행합니다.] +-- 데이타베이스 : MS-SQL +-- ========================================== + +-- 실행예산의 소요예산과 구매청구서 금액 + 직접비 금액이 다른 것 조회하기 +select + a.* + , a.x_amt*a.base_rate + round(((a.x_amt*a.base_rate) * isnull((select fob from HPOIMS.dbo.ys_project_rate where pjt_no = a.pjt_no and curr = a.curr),0)),0) x_amt + , (b.soyo_amt+b.input_amt) + , a.x_amt*a.base_rate + round(((a.x_amt*a.base_rate) * isnull((select fob from HPOIMS.dbo.ys_project_rate where pjt_no = a.pjt_no and curr = a.curr),0)),0) - (b.soyo_amt+b.input_amt) +from + HPOIMS.dbo.ys_pbudget a +join +( + select + * + from + ( + select + a.pjt_no, a.main, a.sub, a.bud_seq + , sum(a.bud_amt) bud_amt + , sum(a.bud_x_amt) bud_x_amt + , sum(a.bud_e_amt) bud_e_amt + , sum(a.soyo_amt) soyo_amt + , sum(a.input_amt) input_amt + from + ( + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = ISNULL(a.closing_yn,'N') + , bud_amt = round(ISNULL(a.amt*a.base_rate,0),0) + , bud_x_amt = round(ISNULL(a.x_amt*a.base_rate,0),0) + , bud_e_amt = round(ISNULL(a.e_amt*a.base_rate,0),0) + , soyo_amt = 0 + , input_amt = 0 + FROM + HPOIMS.dbo.ys_pbudget a + + UNION ALL + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = '' + , bud_amt = 0 + , bud_x_amt = 0 + , bud_e_amt = 0 +-- , soyo_amt = SUM(ISNULL(a.amt,0)*ISNULL(b.base_rate,1) + CASE WHEN b.fob IS NULL THEN 0 ELSE FLOOR(ISNULL(a.amt,0)*ISNULL(b.fob,1)*b.base_rate) END) + , soyo_amt = SUM(ISNULL(a.w_amt,0)) + , input_amt = 0 + FROM + HPOIMS.dbo.gm_por_detail a + left outer join + HPOIMS.dbo.ys_project_rate b + on + a.pjt_no = b.pjt_no and a.curr = b.curr + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + + UNION ALL + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = '' + , bud_amt = 0 + , bud_x_amt = 0 + , bud_e_amt = 0 + , soyo_amt = 0 +-- , input_amt = SUM(ISNULL(a.amt,0)*ISNULL(b.base_rate,1) + CASE WHEN b.fob IS NULL THEN 0 ELSE FLOOR(ISNULL(a.amt,0)*ISNULL(b.fob,1)*b.base_rate) END) + , input_amt = SUM(ISNULL(a.amt,0)) + FROM + HPOIMS.dbo.ys_direct_cost a + left outer join + HPOIMS.dbo.ys_project_rate b + on + a.pjt_no = b.pjt_no and a.curr = b.curr + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + ) a + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + ) a +-- where +-- (a.bud_x_amt*a.base_rate) <> (a.soyo_amt+a.input_amt) + +) b +on + a.pjt_no = b.pjt_no + and a.main = b.main + and a.sub = b.sub + and a.bud_seq = b.bud_seq + and a.pjt_no like '%' + and a.main <> 'AB00' + and a.curr = 'WON' + and ROUND(isnull(a.x_amt,0)*a.base_rate,0) <> (b.soyo_amt+b.input_amt) + +-- and a.x_amt*a.base_rate + round(((a.x_amt*a.base_rate) * isnull((select fob from HPOIMS.dbo.ys_project_rate where pjt_no = a.pjt_no and curr = a.curr),0)),0) +-- <> +-- (b.soyo_amt+b.input_amt) +-- and abs((a.x_amt*a.base_rate) - (b.soyo_amt+b.input_amt)) > 1 +-- and a.item_name = 'ManDay 지원비' + +-- 외자인 경우 체크 +select + a.* + , round(a.x_amt*a.base_rate,-1) + round(((a.x_amt*a.base_rate) * isnull((select fob from HPOIMS.dbo.ys_project_rate where pjt_no = a.pjt_no and curr = a.curr),0)),0) x_amt + , (b.soyo_amt+b.input_amt) + , a.x_amt*a.base_rate + round(((a.x_amt*a.base_rate) * isnull((select fob from HPOIMS.dbo.ys_project_rate where pjt_no = a.pjt_no and curr = a.curr),0)),0) - (b.soyo_amt+b.input_amt) +from + HPOIMS.dbo.ys_pbudget a +join +( + select + * + from + ( + select + a.pjt_no, a.main, a.sub, a.bud_seq + , sum(a.bud_amt) bud_amt + , sum(a.bud_x_amt) bud_x_amt + , sum(a.bud_e_amt) bud_e_amt + , sum(a.soyo_amt) soyo_amt + , sum(a.input_amt) input_amt + from + ( + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = ISNULL(a.closing_yn,'N') + , bud_amt = round(ISNULL(a.amt*a.base_rate,0),0) + , bud_x_amt = round(ISNULL(a.x_amt*a.base_rate,0),0) + , bud_e_amt = round(ISNULL(a.e_amt*a.base_rate,0),0) + , soyo_amt = 0 + , input_amt = 0 + FROM + HPOIMS.dbo.ys_pbudget a + + UNION ALL + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = '' + , bud_amt = 0 + , bud_x_amt = 0 + , bud_e_amt = 0 +-- , soyo_amt = SUM(ISNULL(a.amt,0)*ISNULL(b.base_rate,1) + CASE WHEN b.fob IS NULL THEN 0 ELSE FLOOR(ISNULL(a.amt,0)*ISNULL(b.fob,1)*b.base_rate) END) + , soyo_amt = SUM(ISNULL(a.w_amt,0)) + , input_amt = 0 + FROM + HPOIMS.dbo.gm_por_detail a + left outer join + HPOIMS.dbo.ys_project_rate b + on + a.pjt_no = b.pjt_no and a.curr = b.curr + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + + UNION ALL + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = '' + , bud_amt = 0 + , bud_x_amt = 0 + , bud_e_amt = 0 + , soyo_amt = 0 +-- , input_amt = SUM(ISNULL(a.amt,0)*ISNULL(b.base_rate,1) + CASE WHEN b.fob IS NULL THEN 0 ELSE FLOOR(ISNULL(a.amt,0)*ISNULL(b.fob,1)*b.base_rate) END) + , input_amt = SUM(ISNULL(a.amt,0)) + FROM + HPOIMS.dbo.ys_direct_cost a + left outer join + HPOIMS.dbo.ys_project_rate b + on + a.pjt_no = b.pjt_no and a.curr = b.curr + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + ) a + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + ) a +-- where +-- (a.bud_x_amt*a.base_rate) <> (a.soyo_amt+a.input_amt) + +) b +on + a.pjt_no = b.pjt_no + and a.main = b.main + and a.sub = b.sub + and a.bud_seq = b.bud_seq + and a.pjt_no like 'V%' + and a.main <> 'AB00' +-- and a.curr = 'WON' +-- and a.x_amt*a.base_rate + round(((a.x_amt*a.base_rate) * isnull((select fob from HPOIMS.dbo.ys_project_rate where pjt_no = a.pjt_no and curr = a.curr),0)),0) +-- <> +-- (b.soyo_amt+b.input_amt) + and round(a.x_amt*a.base_rate, -1) + round(((a.x_amt*a.base_rate) * isnull((select fob from HPOIMS.dbo.ys_project_rate where pjt_no = a.pjt_no and curr = a.curr),0)),0) <> (b.soyo_amt+b.input_amt) + and abs(a.x_amt*a.base_rate + round(((a.x_amt*a.base_rate) * isnull((select fob from HPOIMS.dbo.ys_project_rate where pjt_no = a.pjt_no and curr = a.curr),0)),0) - (b.soyo_amt+b.input_amt)) > 1 +-- and a.item_name = 'ManDay 지원비' + +/* + +-- 실행예산 소요예산 = 구매청구서 금액 + 직접비 금액 비교하여 다른 것 업데이트 하기 +begin tran + +update + HPOIMS.dbo.ys_pbudget +set + x_amt = (b.soyo_amt+b.input_amt) +from + HPOIMS.dbo.ys_pbudget a +join +( + select + * + from + ( + select + a.pjt_no, a.main, a.sub, a.bud_seq + , sum(a.bud_amt) bud_amt + , sum(a.bud_x_amt) bud_x_amt + , sum(a.bud_e_amt) bud_e_amt + , sum(a.soyo_amt) soyo_amt + , sum(a.input_amt ) input_amt + from + ( + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = ISNULL(a.closing_yn,'N') + , bud_amt = ISNULL(a.amt,0) + , bud_x_amt = ISNULL(a.x_amt,0) + , bud_e_amt = ISNULL(a.e_amt,0) + , soyo_amt = 0 + , input_amt = 0 + FROM + HPOIMS.dbo.ys_pbudget a + + UNION ALL + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = '' + , bud_amt = 0 + , bud_x_amt = 0 + , bud_e_amt = 0 + , soyo_amt = SUM(ISNULL(a.w_amt,0)) + , input_amt = 0 + FROM + HPOIMS.dbo.gm_por_detail a + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + + UNION ALL + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = '' + , bud_amt = 0 + , bud_x_amt = 0 + , bud_e_amt = 0 + , soyo_amt = 0 + , input_amt = SUM(ISNULL(a.amt,0)) + FROM + HPOIMS.dbo.ys_direct_cost a + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + ) a + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + ) a + where + a.bud_x_amt <> (a.soyo_amt+a.input_amt) +) b +on + a.pjt_no = b.pjt_no + and a.main = b.main + and a.sub = b.sub + and a.bud_seq = b.bud_seq + and a.pjt_no like '%' + and a.main <> 'AB00' + and a.curr = 'WON' + and ROUND(isnull(a.x_amt,0)*a.base_rate,0) <> (b.soyo_amt+b.input_amt) + +commit tran + +rollback tran + + +begin tran + +update + HPOIMS.dbo.ys_pbudget +set + x_amt = (b.soyo_amt+b.input_amt) +from + HPOIMS.dbo.ys_pbudget a +join +( + select + * + from + ( + select + a.pjt_no, a.main, a.sub, a.bud_seq + , sum(a.bud_amt) bud_amt + , sum(a.bud_x_amt) bud_x_amt + , sum(a.bud_e_amt) bud_e_amt + , sum(a.soyo_amt) soyo_amt + , sum(a.input_amt ) input_amt + from + ( + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = ISNULL(a.closing_yn,'N') + , bud_amt = ISNULL(a.amt,0) + , bud_x_amt = ISNULL(a.x_amt,0) + , bud_e_amt = ISNULL(a.e_amt,0) + , soyo_amt = 0 + , input_amt = 0 + FROM + HPOIMS.dbo.ys_pbudget a + + UNION ALL + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = '' + , bud_amt = 0 + , bud_x_amt = 0 + , bud_e_amt = 0 + , soyo_amt = SUM(ISNULL(a.w_amt,0)) + , input_amt = 0 + FROM + HPOIMS.dbo.gm_por_detail a + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + + UNION ALL + SELECT + pjt_no = a.pjt_no + , main = a.main + , sub = a.sub + , bud_seq = a.bud_seq + , closing_yn = '' + , bud_amt = 0 + , bud_x_amt = 0 + , bud_e_amt = 0 + , soyo_amt = 0 + , input_amt = SUM(ISNULL(a.amt,0)) + FROM + HPOIMS.dbo.ys_direct_cost a + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + ) a + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + ) a +-- where +-- a.bud_x_amt <> (a.soyo_amt+a.input_amt) +) b +on + + a.pjt_no = b.pjt_no + and a.main = b.main + and a.sub = b.sub + and a.bud_seq = b.bud_seq + and a.pjt_no like '%' + and a.main <> 'AB00' + and a.curr = 'WON' + and ROUND(isnull(a.x_amt,0)*a.base_rate,0) <> (b.soyo_amt+b.input_amt) + +-- and a.pjt_no like 'B%' + and ROUND(a.x_amt*a.base_rate,0) <> (b.soyo_amt+b.input_amt) + +-- and a.x_amt*a.base_rate + round(((a.x_amt*a.base_rate) * isnull((select fob from HPOIMS.dbo.ys_project_rate where pjt_no = a.pjt_no and curr = a.curr),0)),0) +-- <> +-- (b.soyo_amt+b.input_amt) + +rollback tran +*/ + + + +-- 경상비 통제금액과 부서예산항목의 통제금액이 다른 것들 조회하기 +select + * +from +( + select + a.dept_cd, a.year, a.month, a.main_cd, a.sub_cd, isnull(a.budget_use,0) budget_use, isnull(b.amt,0) amt + from + HPOIMS.dbo.ks_budget a + left outer join + ( + select + dept_cd, year, month, main_cd, sub_cd, sum(amt) amt + from + HPOIMS.dbo.ks_indirect_cost + where + ctr_yn = 'Y' + group by + dept_cd, year, month, main_cd, sub_cd + ) b + on + a.dept_cd = b.dept_cd + and a.year = b.year + and a.month = b.month + and a.main_cd = b.main_cd + and a.sub_cd = b.sub_cd +) a +where + a.budget_use <> a.amt + and a.year >= '2024' + + +/* +-- 경상비 통제금액과 부서예산항목의 통제금액이 다른 것들 수정하기 +update + HPOIMS.dbo.ks_budget +set + budget_use = b.amt +from + HPOIMS.dbo.ks_budget a +join +( + select + a.* + from + ( + select + a.dept_cd, a.year, a.month, a.main_cd, a.sub_cd, isnull(a.budget_use,0) budget_use , isnull(b.amt,0) amt + from + HPOIMS.dbo.ks_budget a + left outer join + ( + select + dept_cd, year, month, main_cd, sub_cd, sum(amt) amt + from + HPOIMS.dbo.ks_indirect_cost + where + ctr_yn = 'Y' + group by + dept_cd, year, month, main_cd, sub_cd + ) b + on + a.dept_cd = b.dept_cd + and a.year = b.year + and a.month = b.month + and a.main_cd = b.main_cd + and a.sub_cd = b.sub_cd + ) a + where + a.budget_use <> a.amt +) b +on + a.dept_cd = b.dept_cd + and a.year = b.year + and a.month = b.month + and a.main_cd = b.main_cd + and a.sub_cd = b.sub_cd + and a.year >= '2024' + +*/ + +-- 직접비 예산에 있으나 전표와 일치 하지 않는 것 +select + a.*, b.* +from + HPOIMS.dbo.ys_direct_cost a +left outer join + ACC.dbo.t23b10 b +on + b.slpdate>'20220101' and a.pjt_no = b.ys_pjtno and a.main = b.ys_main and a.sub = b.ys_sub and a.bud_seq = b.ys_bud_seq and a.ctr_seq = b.ys_ctr_seq +where + a.bill_date > '20220101' + and a.ctr_yn = 'N' + and a.direct_desc not like '%국민연금%' + and a.direct_desc not like '%고용보험%' + and a.direct_desc not like '%건강보험%' + and a.direct_desc not like '%급여%' + and a.direct_desc not like '%중식대%' + and b.area is null +order by + a.pjt_no, a.ctr_seq + + +/* + +select + a.pjt_no, a.main, a.sub, a.bud_seq, isnull(a.x_amt,0) , b.amt +from + HPOIMS.dbo.ys_pbudget a +join +( + select a.pjt_no, a.main, a.sub, a.bud_seq, sum(amt) amt from HPOIMS.dbo.ys_direct_cost a where a.pjt_no like 'H%' or a.pjt_no like 'X%' group by a.pjt_no, a.main, a.sub, a.bud_seq +)b +on + a.pjt_no = b.pjt_no and a.main = b.main and a.sub = b.sub and a.bud_seq = b.bud_seq +where + (a.pjt_no like 'H%' or a.pjt_no like 'X%') + and isnull(a.x_amt,0) <> b.amt + + +update + a +set + x_amt = b.amt +from + HPOIMS.dbo.ys_pbudget a +join +( + select a.pjt_no, a.main, a.sub, a.bud_seq, sum(amt) amt from HPOIMS.dbo.ys_direct_cost a where a.pjt_no like 'H%' or a.pjt_no like 'X%' group by a.pjt_no, a.main, a.sub, a.bud_seq +)b +on + a.pjt_no = b.pjt_no and a.main = b.main and a.sub = b.sub and a.bud_seq = b.bud_seq +where + (a.pjt_no like 'H%' or a.pjt_no like 'X%') + and isnull(a.x_amt,0) <> b.amt + +*/ + +-- 경상비 예산과 전표가 일치 하지 않는 것 +select + a.*, b.* +from + HPOIMS.dbo.ks_indirect_cost a +left outer join + ACC.dbo.t23b10 b +on + b.slpdate>'20190101' and a.dept_cd = b.ys_dept_cd and a.main_cd = b.ys_main and a.sub_cd = b.ys_sub and a.ctr_seq = b.ys_ctr_seq +where + a.billdate > '20190101' + and a.ctr_yn = 'N' + and a.indirect_desc not like '%국민연금%' + and a.indirect_desc not like '%고용보험%' + and a.indirect_desc not like '%건강보험%' + and a.indirect_desc not like '%급여%' + and a.indirect_desc not like '%중식대%' + and b.area is null +order by + a.dept_cd, a.ctr_seq + + +-- >> 경상비에서 부서코드 없이 입력되어 있는 자료 +select '경상비에서 부서코드 없이', * from HPOIMS.dbo.ks_indirect_cost where dept_cd = '' and year > '2019' + + +select + '수주가와 수주상세금액 차이', a.pjt_no, a.suju_amt, b.w_amt +from + HPOIMS.dbo.ys_project a +join +( + select + pjt_no, sum(w_amt) w_amt + from + HPOIMS.dbo.ys_project_rev + where + pjt_no like 'V%' -- and approval_yn = 'Y' + group by + pjt_no +) b +on + a.pjt_no = b.pjt_no +where + a.pjt_no like 'V%' + and a.suju_amt <> b.w_amt + +/* + +update + a +set + suju_amt = b.w_amt +from + HPOIMS.dbo.ys_project a +join +( + select + pjt_no, sum(w_amt) w_amt + from + HPOIMS.dbo.ys_project_rev + where + pjt_no like 'V%' -- and approval_yn = 'Y' + group by + pjt_no +) b +on + a.pjt_no = b.pjt_no +where + a.pjt_no like 'V%' + and a.suju_amt <> b.w_amt + +*/ + + +-- 실행예산과 PM추가예상 금액 다른 것 +select + '실행예산과 PM추가예상 금액 다른 것', a.*, c.* +from +( + select + a.pjt_no, a.main, a.sub, a.bud_seq, sum(a.amt) amt, sum(a.amt*a.base_rate + a.amt*isnull(b.fob,0)) w_amt + from + HPOIMS.dbo.ys_ebudget a + left outer join + HPOIMS.dbo.ys_project_rate b + on + a.pjt_no = b.pjt_no and a.curr = b.curr + group by + a.pjt_no, a.main, a.sub, a.bud_seq +) a +right outer join + HPOIMS.dbo.ys_pbudget c +on + a.pjt_no = c.pjt_no and a.main = c.main and a.sub = c.sub and a.bud_seq = c.bud_seq +where + isnull(a.amt,0) <> isnull(c.e_amt,0) +/* +update + a +set + e_amt = isnull(b.amt,0) +from + HPOIMS.dbo.ys_pbudget a +left outer join +( + select + a.pjt_no, a.main, a.sub, a.bud_seq, sum(a.amt) amt, sum(a.amt*a.base_rate + a.amt*isnull(b.fob,0)) w_amt + from + HPOIMS.dbo.ys_ebudget a + left outer join + HPOIMS.dbo.ys_project_rate b + on + a.pjt_no = b.pjt_no and a.curr = b.curr + group by + a.pjt_no, a.main, a.sub, a.bud_seq +) b +on + a.pjt_no = b.pjt_no and a.main = b.main and a.sub = b.sub and a.bud_seq = b.bud_seq +where + isnull(a.e_amt,0) <> isnull(b.amt,0) +*/ + +-- 구매 청구수량과 구매 발주 수량이 다른 것 +select + '구매 청구수량과 구매 발주 수량이 다른 것', a.por_no, a.por_seq, a.pjt_no, a.main, a.sub, a.bud_seq, a.item_name, a.qty, a.w_amt, b.qty, b.w_amt, (select emp from HPOIMS.dbo.gm_poim where poim = c.poim) emp_id +from + HPOIMS.dbo.gm_por_detail a +join +( + select + por_no, por_seq, sum(qty) qty, sum(w_amt) w_amt + from + HPOIMS.dbo.gm_po_detail + where + isnull(u_stat, '') <> 'D' + group by + por_no, por_seq +) b +on + a.por_no = b.por_no + and a.por_seq = b.por_seq +join +( + select distinct b.por_no, b.por_seq, a.poim from HPOIMS.dbo.gm_po a join HPOIMS.dbo.gm_po_detail b on a.po_no = b.po_no +) c +on + a.por_no = c.por_no + and a.por_seq = c.por_seq +where + a.pjt_no like 'V%' + and a.pjt_no in (select pjt_no from HPOIMS.dbo.ys_project where closing_yn = 'N' and pjt_no like 'V%') + and a.qty < b.qty +-- and a.qty <> b.qty +order by + a.por_no + +-- 실행예산의 추가변경금액과 추가변경예산의 금액이 다른 것 +select + '추가변경예산 차이발생', b.*, a.item_name, a.amt, a.m_amt, a.c_amt, a.curr, a.base_rate +from + HPOIMS.dbo.ys_pbudget a +left outer join +( + select + a.pjt_no, a.main, a.sub, a.bud_seq, sum(a.amt) amt + from + HPOIMS.dbo.ys_cbudget a + group by + a.pjt_no, a.main, a.sub, a.bud_seq +) b +on + a.pjt_no = b.pjt_no and a.main = b.main and a.sub = b.sub and a.bud_seq = b.bud_seq +where + isnull(a.c_amt,0) <> isnull(b.amt,0) + and a.pjt_no like 'V%' +-- and a.curr = 'WON' +/* +begin tran + +update + a +set + c_amt = isnull(b.amt,0) +from + HPOIMS.dbo.ys_pbudget a +left outer join +( + select + a.pjt_no, a.main, a.sub, a.bud_seq, sum(a.amt) amt + from + HPOIMS.dbo.ys_cbudget a + group by + a.pjt_no, a.main, a.sub, a.bud_seq +) b +on + a.pjt_no = b.pjt_no and a.main = b.main and a.sub = b.sub and a.bud_seq = b.bud_seq +where + isnull(a.c_amt,0) <> isnull(b.amt,0) + and a.pjt_no like 'V%' +-- and a.curr = 'WON' + +commit +*/ + + +-- 실행예산에서 실행금액 <> 초기편성예산 + 추가변경예산 +select + '실행금액 <> 초기편성예산 + 추가변경예산', a.* +from + HPOIMS.dbo.ys_pbudget a +where + isnull(a.m_amt,0) + isnull(a.c_amt,0) <> isnull(a.amt,0) + and a.pjt_no like 'V%' + +/* +update + a +set + amt = isnull(a.m_amt,0) + isnull(a.c_amt,0) +from + HPOIMS.dbo.ys_pbudget a +where + isnull(a.m_amt,0) + isnull(a.c_amt,0) <> isnull(a.amt,0) + and a.pjt_no like 'V%' +*/ + + +-- 실행금액을 초과한 소요예산 +select + '실행금액을 초과한 소요예산' + , a.pjt_no, pjt_name = (select pjt_name from HPOIMS.dbo.ys_project where a.pjt_no = pjt_no) + , a.main, a.sub, a.bud_seq, a.item_name, a.amt, a.x_amt, a.curr, a.base_rate +from + HPOIMS.dbo.ys_pbudget a +join + HPOIMS.dbo.ys_project b +on + a.pjt_no = b.pjt_no + and b.closing_yn = 'N' +where + a.pjt_no like 'V%' + and isnull(abs(a.amt),0) < isnull(abs(a.x_amt),0) + and a.item_name not like '%원가안분%' + +/* + + +*/ + +-- 구매발주서에 프로젝트가 없는 것 +select '구매발주서에 프로젝트가 없는 것', * from HPOIMS.dbo.gm_po where pjt_no = '' + + +-- 미지급금(공익) 체크하기 +select + '미지급금(공익)' gubun, a.apvdate, a.apvnum, a.apvseq, sum(a.amt) jigub_amt, max(b.apvcramt), (max(b.apvcramt) - sum(a.amt)) +from + ACC.dbo.t23a11 a +join + ACC.dbo.t23a10 b +on + b.area = '9' and a.apvdate = b.apvdate and a.apvnum = b.apvnum and a.apvseq = b.apvseq +group by + a.apvdate, a.apvnum, a.apvseq +having + (max(b.apvcramt) - sum(a.amt)) < 0 +/* +select * from ACC.dbo.t23a11 where apvdate = '20180101' and apvnum = '000001' and apvseq = '000002' +*/ + +-- 매출부가세 검토하기 +select + '매출부가세' gubun, sum(apvcramt) - sum(apvdramt) - ISNULL((select item31 from ACC.dbo.t23a13 where magam_dt = convert(char(8), getdate(), 112)), 0) + , sum(apvcramt) - sum(apvdramt) +from + ACC.dbo.t23a10 +where + area = '9' and apvdate >= '20220101' and acntcode like '21016%' and magam_yn = 'Y' +having + sum(apvcramt) - sum(apvdramt) - (select item31 from ACC.dbo.t23a13 where magam_dt = convert(char(8), getdate(), 112)) <> 0 + +-- 매입부가세 검토하기 +select + '매입부가세' gubun, sum(apvdramt) - sum(apvcramt) - ISNULL((select item32 from ACC.dbo.t23a13 where magam_dt = convert(char(8), getdate(), 112)), 0) + , sum(apvdramt) - sum(apvcramt) +from + ACC.dbo.t23a10 +where + area = '9' and apvdate >= '20220101' and acntcode like '11311%' and magam_yn = 'Y' +having + sum(apvdramt) - sum(apvcramt) - (select item32 from ACC.dbo.t23a13 where magam_dt = convert(char(8), getdate(), 112)) <> 0 + +-- 매출 검토하기 +--select +-- '매출' gubun, isnull(sum(billamt),0) - ISNULL((select item26 from ACC.dbo.t23a13 where magam_dt = convert(char(8), getdate(), 112)), 0) +--from +-- ACC.dbo.t23e10 where billdate >= '20190101' and approve_yn = 'O' and gbn in ('1', '2') and magam_yn = 'Y' -- 공사기성, 위탁기성만 포함(원가안분, 수주분담, 기타 미수금은 미포함 한다.) +--having +-- isnull(sum(billamt),0) - (select item26 from ACC.dbo.t23a13 where magam_dt = convert(char(8), getdate(), 112)) <> 0 + +-- 수금 검토하기 +--select +-- '수금' gubun, isnull(sum(a.billamt),0) - ISNULL((select item27 from ACC.dbo.t23a13 where magam_dt = convert(char(8), getdate(), 112)), 0) +--from +-- ACC.dbo.t23e13 a +--join +-- ACC.dbo.t23e10 b +--on +-- a.billdate = b.billdate +-- and a.seq = b.seq +--where +-- a.collectdate >= '20190101' +-- and a.billdate >= '20190101' +-- and b.gbn in ('1', '2') -- 공사기성, 위탁기성만 포함(원가안분, 수주분담, 기타 미수금은 미포함 한다.) +--having +-- isnull(sum(a.billamt),0) - (select item27 from ACC.dbo.t23a13 where magam_dt = convert(char(8), getdate(), 112)) <> 0 + + +-- 수주통보서 최종납기일 없는 것 +select + '수주통보서 최종납기일 없는 것' gbn, a.pjt_no, a.delv_date, b.delv_date +from + HPOIMS.dbo.ys_project a +join + ( + select + pjt_no, delv_date + from + HPOIMS.dbo.ys_project_rev + where pjt_no+cast(rev_no as varchar(10)) in (select pjt_no + cast(max(rev_no) as varchar(10)) from HPOIMS.dbo.ys_project_rev where approval_yn = 'Y' group by pjt_no) + ) b +on + a.pjt_no = b.pjt_no +where + a.delv_date = '1900-01-01' + + +-- 인트라넷 결재상태와 미소 결재상태 비교하기 + +-- 인트라넷 결재상태 확인해 볼 것 +SELECT * FROM OPENQUERY ([MYSQL], 'SELECT DocSN, FORMNUM, RT_SanctionState FROM sanctiondoc_tbl WHERE formnum like ''HLF-2%'' and RT_SanctionState = '''' ') mysql + +SELECT * FROM OPENQUERY ([MYSQL], 'SELECT * FROM sanctiondoc_tbl WHERE DocSN LIKE ''2026-%'' and RT_SanctionState LIKE ''%FINISH%'' AND PG_Date IS NULL AND FormNum LIKE ''HLF-2%'' ') mysql + +SELECT * FROM OPENQUERY ([MYSQL], 'SELECT DocSN, FORMNUM, RT_SanctionState FROM sanctiondoc_tbl WHERE formnum like ''HLF-1%'' and rg_date > ''2019-01-01''and RT_SanctionState = '''' ') mysql + +SELECT * FROM OPENQUERY ([MYSQL], 'SELECT DocSN, FORMNUM, RT_SanctionState FROM sanctiondoc_tbl WHERE LENGTH(DocSN) < 13 ') mysql + +-- SELECT * FROM OPENQUERY ([MYSQL], 'SELECT DocSN, FORMNUM, RT_SanctionState FROM sanctiondoc_tbl WHERE formnum like ''HLF-%'' and RT_SanctionState = '''' ') mysql + + +-- 매출 지출 계획 관리 지워졌을 경우 복원하기 +-- insert +-- HPOIMS.dbo.ys_moneyplan_day +-- ( +-- plandate, seq, pjt_no, venname, content, amt1, v_amt1, amt2, v_amt2, amt3, v_amt3, payhow, bigo, input_id, input_dt, update_id, update_dt +-- ) +-- select +-- plandate, (select max(seq)+1 from HPOIMS.dbo.ys_moneyplan_day where plandate = HPOIMS.dbo.ys_moneyplan_h.plandate)+row_number() over (order by plandate) seq, +-- pjt_no, venname, content, amt1, v_amt1, amt2, v_amt2, amt3, v_amt3, payhow, bigo, input_id, input_dt, update_id, update_dt +-- from +-- HPOIMS.dbo.ys_moneyplan_h +-- where +-- pjt_no = 'V171T501' and actdate = '20180626' and acttime = '14:14:41' and io_knd = 'IN' + +-- POR 감액하기 +--select * from HPOIMS.dbo.gm_por_detail where por_no = 'P1809014' +--begin tran +--update HPOIMS.dbo.gm_por_detail set unitp = unitp-11290000, amt = amt-11290000, w_unitp = w_unitp-11290000, w_amt = w_amt-11290000, t_amt = t_amt-11290000 where por_no = 'P1809014' +--commit tran +--rollback tran + + +-- 인사정보의 이메일이 서로 다른 경우 일치시키기 +select + a.emp_id, a.emp_nm, b.E_MAIL, a.emp_email +from +(select * from HRM.dbo.hr_insam where holoff_gb = '01' -- and isnull(rtrim(emp_email),'') = '' +) a +join +(select * from HRM.dbo.HR_PERS_MASTER where isnull(rtrim(E_MAIL),'') <> '') b +on +a.emp_id = b.EMP_NO +where + isnull(rtrim(a.emp_email),'') <> isnull(rtrim(b.E_MAIL),'') + +-- and rtrim(a.emp_email) is null +-- and a.emp_id like 'HF%' + +/* +update +a +set + emp_email = b.E_MAIL +from +(select * from HRM.dbo.hr_insam where holoff_gb = '01' -- and isnull(rtrim(emp_email),'') = '' +) a +join +(select * from HRM.dbo.HR_PERS_MASTER where isnull(rtrim(E_MAIL),'') <> '') b +on +a.emp_id = b.EMP_NO +where + isnull(rtrim(a.emp_email),'') <> isnull(rtrim(b.E_MAIL),'') + and rtrim(a.emp_email) is null + -- and a.emp_id like 'HM01775%' + +begin tran +update +b +set + E_MAIL = a.emp_email +from +(select * from HRM.dbo.hr_insam where holoff_gb = '01' -- and isnull(rtrim(emp_email),'') = '' +) a +join +(select * from HRM.dbo.HR_PERS_MASTER where isnull(rtrim(E_MAIL),'') <> '') b +on +a.emp_id = b.EMP_NO +where + isnull(rtrim(a.emp_email),'') <> isnull(rtrim(b.E_MAIL),'') + and a.emp_id <> 'HM00550' +commit +*/ + + +-- 진행중인 프로젝트 중 PM 및 현장소장 미지정 프로젝트 +select a.pjt_no, a.pjt_name, max(a.pm) pm, max(a.현장소장) 현장소장, max(a.cost_dept) 원가부서 +from +( +select + distinct a.pjt_no, a.pjt_name + , (case when b.mbr_gb = 'A' then b.pjt_mbr else null end) as pm + , (case when b.mbr_gb = 'I' then b.pjt_mbr else null end) as 현장소장 + , cost_dept +from + HPOIMS.dbo.ys_project a +left outer join +(SELECT * FROM HPOIMS.dbo.pm_member WHERE pjt_no in (select pjt_no from HPOIMS.dbo.ys_project where pjt_no like 'V%' and closing_yn = 'N')) b +on a.pjt_no = b.pjt_no +where a.pjt_no like 'V%' and a.closing_yn = 'N' +) a +group by a.pjt_no, pjt_name -- 64 rows +having max(a.pm) is null or max(a.현장소장) is null or max(a.cost_dept) is null -- 55 rows --> 48 rows(24.05.17) + + +-- 기성지불처리된 것이나 기성신청에 지불처리중인 건 체크하기 +SELECT a.*, b.slpdate, b.slpnum, b.acc_gbn FROM HPOIMS.dbo.gs_require a left outer join HPOIMS.dbo.gs_payment b on a.cont_no = b.cont_no and a.year = b.year and a.month = b.month and a.gs_gbn = b.gs_gbn where a.pay_yn = 'N' and b.slpdate is not null +-- begin tran +-- update a set pay_yn = 'Y' FROM HPOIMS.dbo.gs_require a left outer join HPOIMS.dbo.gs_payment b on a.cont_no = b.cont_no and a.year = b.year and a.month = b.month and a.gs_gbn = b.gs_gbn where a.pay_yn = 'N' and b.slpdate is not null +-- commit +-- sp_who2 + +-- 기성지불의 전표정보와 실제 발행된 전표 차이 체크하기 +select + a.cont_no, a.year, a.month, a.gs_gbn, a.gs_seq, a.gs_amt, a.sk_amt, a.sj_amt, a.slpdate, a.dtcode, a.slpnum, b.slpnum , b.slpamt +from + HPOIMS.dbo.gs_payment a +left outer join + ACC.dbo.t23b10 b +on + a.slpdate = b.slpdate and a.dtcode = b.dtcode +where + a.year = '2026' and a.slpnum <> isnull(b.slpnum,0) and (a.gs_amt = b.slpamt or a.sk_amt = b.slpamt) + diff --git a/쿼리/Template/본예산승인오류검토하기.sql b/쿼리/Template/본예산승인오류검토하기.sql new file mode 100644 index 0000000..0a7985d --- /dev/null +++ b/쿼리/Template/본예산승인오류검토하기.sql @@ -0,0 +1,150 @@ +-- ========================================== +-- 작업일자: YYYY-MM-DD [쿼리 작성 및 실행 날짜를 기록합니다.] +-- 작 성 자: [실행자 이름을 기록합니다.] +-- 작업목적: [예산승인오류가 발생했을 시 확인합니다.] +-- 요청자/티켓번호: [예산승인부서의 요청시 검토하는 용도입니다.] +-- 데이타베이스 : MS-SQL +-- ========================================== + +declare @pjt_no CHAR(8) +, @bud_gbn CHAR(1) +, @chasu TINYINT +, @update_id CHAR(7) +, @change_why_gbn CHAR(7) +, @cnt int + + DECLARE @tmp_pbudget TABLE + ( + pjt_no CHAR(8) + , main CHAR(4) + , sub CHAR(4) + , bud_seq INT + , x_amt DECIMAL + ) + + select @pjt_no = 'V172T305', @bud_gbn='M' + + -- POR + INSERT + @tmp_pbudget + SELECT + a.pjt_no, a.main, a.sub, a.bud_seq, isnull(SUM(b.amt),0) x_amt -- SUM(b.w_amt) + FROM + HPOIMS.dbo.gm_por_detail a + LEFT OUTER JOIN + ( + SELECT + por_no, por_seq, SUM(amt) amt, SUM(w_amt) w_amt , SUM(qty) qty + FROM + HPOIMS.dbo.gm_po_detail + GROUP BY + por_no, por_seq + )b + ON + a.por_no = b.por_no and a.por_seq = b.por_seq + WHERE + a.pjt_no = @pjt_no +-- AND a.qty = b.qty + AND a.w_amt > b.w_amt + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + + INSERT + @tmp_pbudget + SELECT + a.pjt_no, a.main, a.sub, a.bud_seq, isnull(SUM(b.w_amt),0) x_amt -- SUM(b.w_amt) + FROM + HPOIMS.dbo.gm_por_detail a + LEFT OUTER JOIN + ( + SELECT + por_no, por_seq, SUM(amt) amt, SUM(w_amt) w_amt , SUM(qty) qty + FROM + HPOIMS.dbo.gm_po_detail + GROUP BY + por_no, por_seq + )b + ON + a.por_no = b.por_no AND a.por_seq = b.por_seq + WHERE + a.pjt_no = @pjt_no +-- AND a.qty = b.qty + AND a.w_amt <= b.w_amt + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + + INSERT + @tmp_pbudget + SELECT + a.pjt_no, a.main, a.sub, a.bud_seq, isnull(SUM(b.w_amt),0) x_amt + FROM + HPOIMS.dbo.gm_por_detail a + LEFT OUTER JOIN + ( + SELECT + por_no, por_seq, SUM(amt) amt, SUM(w_amt) w_amt , SUM(qty) qty + FROM + HPOIMS.dbo.gm_po_detail + GROUP BY + por_no, por_seq + )b + ON + a.por_no = b.por_no AND a.por_seq = b.por_seq + WHERE + a.pjt_no = @pjt_no + AND b.w_amt IS NULL + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + + + -- 직접비 + INSERT + @tmp_pbudget + SELECT + a.pjt_no, a.main, a.sub, a.bud_seq, SUM(a.amt*a.base_rate) x_amt + FROM + HPOIMS.dbo.ys_direct_cost a + WHERE + a.pjt_no = @pjt_no + GROUP BY + a.pjt_no, a.main, a.sub, a.bud_seq + + + SELECT + @cnt = COUNT(*) + FROM + ( + SELECT pjt_no, main, sub, bud_seq, SUM(x_amt) x_amt FROM @tmp_pbudget GROUP BY pjt_no, main, sub, bud_seq + )b + LEFT OUTER JOIN + HPOIMS.dbo.ys_mbudget a + ON + a.pjt_no = b.pjt_no + AND a.main = b.main + AND a.sub = b.sub + AND a.bud_seq = b.bud_seq + AND a.bud_gbn = @bud_gbn -- 'M' + WHERE + b.pjt_no = @pjt_no + AND ISNULL(a.w_amt,0) < ISNULL(b.x_amt,0) + AND b.main+b.sub not in ('AB33001', 'AB33002') -- 원가안분 인 경우에는 제외(2011.05.04) + + SELECT + b.pjt_no, b.main, b.sub, b.bud_seq, ISNULL(a.w_amt,0) m_amt, ISNULL(b.x_amt,0) x_amt + FROM + ( + SELECT pjt_no, main, sub, bud_seq, SUM(x_amt) x_amt FROM @tmp_pbudget GROUP BY pjt_no, main, sub, bud_seq + )b + LEFT OUTER JOIN + HPOIMS.dbo.ys_mbudget a + ON + a.pjt_no = b.pjt_no + AND a.main = b.main + AND a.sub = b.sub + AND a.bud_seq = b.bud_seq + AND a.bud_gbn = @bud_gbn -- 'M' + WHERE + b.pjt_no = @pjt_no + AND ISNULL(a.w_amt,0) < ISNULL(b.x_amt,0) + AND b.main+b.sub not in ('AB33001', 'AB33002') -- 원가안분 인 경우에는 제외(2011.05.04) + \ No newline at end of file diff --git a/쿼리/Template/실행예산투입실적금액수정하기.sql b/쿼리/Template/실행예산투입실적금액수정하기.sql index 2c1d268..cb37383 100644 --- a/쿼리/Template/실행예산투입실적금액수정하기.sql +++ b/쿼리/Template/실행예산투입실적금액수정하기.sql @@ -3,6 +3,7 @@ -- 작 성 자: [실행자 이름을 기록합니다.] -- 작업목적: [실행예산 소요예산 = 구매청구서 금액 + 직접비 금액 비교하여 다른 것 조회하여 내용 확인 후 수정합니다.] -- 요청자/티켓번호: [사업부서의 요청 혹은 주기적으로 실행하여 데이터를 일치 시킵니다.] +-- 데이타베이스 : MS-SQL -- ========================================== -- [1] 원화인 경우 실행예산 소요예산 = 구매청구서 금액 + 직접비 금액 비교하여 다른 것 조회하기 diff --git a/쿼리/Template/원가계산.sql b/쿼리/Template/원가계산.sql new file mode 100644 index 0000000..40e5df9 --- /dev/null +++ b/쿼리/Template/원가계산.sql @@ -0,0 +1,1827 @@ +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 diff --git a/쿼리/Template/원가계산검증.sql b/쿼리/Template/원가계산검증.sql new file mode 100644 index 0000000..4e7142e --- /dev/null +++ b/쿼리/Template/원가계산검증.sql @@ -0,0 +1,1131 @@ +-- ========================================== +-- 작업일자: 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) +*/ \ No newline at end of file diff --git a/쿼리/Template/인건비반영제거하기.sql b/쿼리/Template/인건비반영제거하기.sql index ea71b19..1af422d 100644 --- a/쿼리/Template/인건비반영제거하기.sql +++ b/쿼리/Template/인건비반영제거하기.sql @@ -3,6 +3,7 @@ -- 작 성 자: [실행자 이름을 기록합니다.] -- 작업목적: [인건비 일괄 입력된 자료가 중복되거나 잘못 입력된 경우 삭제하고 실행예산 투입실적금액을 변경할 경우 사용합니다.] -- 요청자/티켓번호: [요청 부서 / 요청자 또는 이슈 번호를 기록합니다.] +-- 데이타베이스 : MS-SQL -- ========================================== declare @yy char(4), @mm char(2) diff --git a/쿼리/Template/자금일보조회.sql b/쿼리/Template/자금일보조회.sql index 3ec02e5..5dd9e06 100644 --- a/쿼리/Template/자금일보조회.sql +++ b/쿼리/Template/자금일보조회.sql @@ -3,6 +3,7 @@ -- 작 성 자: [실행자 이름을 기록합니다.] -- 작업목적: [기간에 대한 자금집행내역을 조회하여 다량의 자료를 엑셀파일로 제공합니다.] -- 요청자/티켓번호: [회계부서의 요청에 따라 제공합니다.] +-- 데이타베이스 : MS-SQL -- ========================================== declare @fr_date char(8), @to_date char(8) diff --git a/쿼리/Template/전표금액과 예산투입금액 차이 조회.sql b/쿼리/Template/전표금액과 예산투입금액 차이 조회.sql new file mode 100644 index 0000000..7a677c6 --- /dev/null +++ b/쿼리/Template/전표금액과 예산투입금액 차이 조회.sql @@ -0,0 +1,14 @@ +-- ========================================== +-- 작업일자: YYYY-MM-DD [쿼리 작성 및 실행 날짜를 기록합니다.] +-- 작 성 자: [실행자 이름을 기록합니다.] +-- 작업목적: [전표금액과 예산투입금액의 차이를 검토하기 위해 작성된 쿼리입니다.] +-- 요청자/티켓번호: [회계팀의 요청시 전표금액과 예산투입금액의 차이 내역을 엑셀로 제공하여 검토하는 용도입니다.] +-- 데이타베이스 : MS-SQL +-- ========================================== + +select slpdate, dtcode, slpnum, slpseq, acntcode, slpamt, amt6, slpfree, ys_pjtno, ys_main, ys_sub, ys_bud_seq, ys_ctr_seq +from ACC.dbo.t23b10 +where + area = '9' and slpdate > '20200101' and acntcode like '9%' and prt_yn = 'Z' and slpamt <> amt6 and ys_main is not null +order by + slpdate, dtcode, slpnum, slpseq diff --git a/쿼리/Template/프로젝트별기간투입상세조회.sql b/쿼리/Template/프로젝트별기간투입상세조회.sql index 313a3e5..ec83b5e 100644 --- a/쿼리/Template/프로젝트별기간투입상세조회.sql +++ b/쿼리/Template/프로젝트별기간투입상세조회.sql @@ -3,6 +3,7 @@ -- 작 성 자: [실행자 이름을 기록합니다.] -- 작업목적: [기간이 긴 경우 많은 데이터를 조회할 때 실무자의 요청에 의해 조회하여 엑셀파일로 제공합니다.] -- 요청자/티켓번호: [요청 부서 / 요청자 또는 이슈 번호를 기록합니다.] +-- 데이타베이스 : MS-SQL -- ========================================== declare @f_year CHAR(4) diff --git a/쿼리/Template/회계장부_판관_원가_증빙조회.sql b/쿼리/Template/회계장부_판관_원가_증빙조회.sql index 1d5d6ba..df0b8da 100644 --- a/쿼리/Template/회계장부_판관_원가_증빙조회.sql +++ b/쿼리/Template/회계장부_판관_원가_증빙조회.sql @@ -3,6 +3,7 @@ -- 작 성 자: [실행자 이름을 기록합니다.] -- 작업목적: [회계년도에 대한 원가, 판관비 전표를 조회하여 다량의 자료를 엑셀파일로 제공합니다.] -- 요청자/티켓번호: [회계부서의 요청에 따라 제공합니다.] +-- 데이타베이스 : MS-SQL -- ========================================== declare @fr_date char(8), @to_date char(8) diff --git a/쿼리/Template/회계장부조회.sql b/쿼리/Template/회계장부조회.sql index fc3449e..29065b6 100644 --- a/쿼리/Template/회계장부조회.sql +++ b/쿼리/Template/회계장부조회.sql @@ -3,6 +3,7 @@ -- 작 성 자: [실행자 이름을 기록합니다.] -- 작업목적: [기간에 대한 회계 장부 전체를 조회하여 다량의 자료를 엑셀파일로 제공합니다.] -- 요청자/티켓번호: [회계부서의 요청에 따라 제공합니다.] +-- 데이타베이스 : MS-SQL -- ========================================== declare @fr_date char(8), @to_date char(8), @yy char(4)