diff --git a/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/00_개요.md b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/00_개요.md new file mode 100644 index 00000000..1066ed91 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/00_개요.md @@ -0,0 +1,72 @@ +# 오솔길 엑셀 매크로(VBA) — 개요 + +## 무엇인가 + +파일 : `../../오솔길/Macro/PERSONAL.XLSB(오솔길)` +엑셀 개인용 매크로 통합문서. 사용법 : `%AppData%\Microsoft\Excel\XLSTART\` 에 넣으면 엑셀 켤 때마다 자동으로 붙음. + +**하는 일** — 캐드(`OSKi.arx`)가 뱉어 놓은 **밋밋한 CSV**를 열어, 셀을 병합·색칠·테두리 치고 **집계 수식을 심어** 제출용 산출서로 만듦. +잠금 없이 소스가 그대로 읽힘. 주석에 계산식이 한글로 적혀 있어 로직 파악이 쉬움. + +## 매크로 7개 지도 + +| 모듈 | 매크로 이름 | 먹는 파일 | 성격 | 문서 | +| --- | --- | --- | --- | --- | +| Module1 | `임도_1횡단물량` | 임도 횡단물량 CSV | **계산 있음** | [Module1](Module1_임도-횡단물량.md) | +| Module2 | `임도_2평균운반거리산출서` | 평균운반거리산출서.csv 외 3종 | 서식만 | [Module2](Module2_임도-평균운반거리산출서.md) | +| Module3 | `야계_1터파기있는횡단물량` | 야계 횡단물량 CSV | **계산 있음** | [Module3](Module3_야계-횡단물량_터파기있음.md) | +| Module11 | `야계_2터파기없는횡단물량` | 야계 횡단물량 CSV | **계산 있음** | [Module11](Module11_야계-횡단물량_터파기없음.md) | +| Module4 | `사방댐_3수량산출서거푸집레미콘` | 사방댐-수량산출서 | 시트 쪼개기 | [Module4](Module4_사방댐-수량산출서분리.md) | +| Module5 | `사방댐_2토공수량34각형법` | 토공수량(3,4각형법).csv | 합계만 | [Module5](Module5_사방댐-토공수량_3-4각형법.md) | +| Module6 | `사방댐_1토공수량평균단면적법` | 토공수량(평균단면적).csv | 서식만 | [Module6](Module6_사방댐-토공수량_평균단면적법.md) | + +보조 프로시저는 [공통_보조프로시저.md](공통_보조프로시저.md) — Module1·3·11 에 **똑같이 복사되어 세 벌 존재**함. + +## 모든 매크로가 공유하는 규칙 + +### ① 시트 모양 — 머리 3줄 + 자료 + 계 1줄 + +``` +1행 대분류 (절토 / 측구터파기 / 성토 …) +2행 중분류 (토사 / 암석) +3행 소분류 (단면적 / 입적 / 보정량) +4행 0측점부터 자료 시작 +… +끝행 "계" (SUM) +``` + +- A열 = 측점, B열 = 점간거리. 이 둘은 어느 매크로나 고정. +- 자료가 어디까지 있는지는 `UsedRange` 로 그때그때 잼 — **측점 수가 몇이든 따라감**. + +### ② 물량은 전부 평균단면적법 + +같은 꼴이 30여 항목에 그대로 반복됨. + +``` +현측점 입적 = ROUND( (앞측점 단면적 + 현측점 단면적) ÷ 2 × 현측점 점간거리 , 2) +``` + +부피(㎥)도 면적(㎡)도 이 한 줄. 「단면적」 자리에 「연장」이 들어가면 면적이 나옴. +**소수 둘째 자리 반올림**이 일관 규칙. + +### ③ 계산의 씨앗은 캐드가 심음 + +매크로는 **단면적을 만들지 못함**. 단면적(C·F·I·L·P… 열)은 캐드가 이미 CSV에 적어 둔 값이고, 매크로는 그 옆 칸에 「입적」·「보정량」 수식을 꽂을 뿐임. +**보정계수(토량환산계수)조차 하드코딩이 아니라 캐드가 적어 둔 첫 줄에서 역산해 읽어옴** → [공통_보조프로시저](공통_보조프로시저.md) 참조. + +### ④ 캐드가 쓰는 파일 이름 + +| 구분 | 입력 | 출력 | +| --- | --- | --- | +| 평면 | `*.pln` | `*_PLN.dwg`, `*.crv` | +| 종단 | `*.rod` (+`*.pnb`) | `*_JD.dwg`, `*.JD` | +| 횡단 | `*.rhd` | `*1.dwg`~, `*.BOM`, **`*.csv`**, `*.pin` | +| 유토 | `유토곡선.MASS` | `유토곡선.dwg`, `.med`, **평균운반거리.csv** | + +굵은 것이 이 매크로가 먹는 파일. +한 프로젝트는 확장자만 다르고 **파일명(basename)을 전부 같게** 맞춰야 함. + +## 우리(Aislo)와 견줄 점 + +- 오솔길은 **캐드 → CSV → 엑셀** 3단 릴레이. 계산 주체가 갈라져 있어 「보정계수를 CSV에서 역산」 같은 군더더기가 생김. +- 우리는 서버가 정본을 쥐고 한 번에 계산 → 릴레이 자체가 없음. 다만 **집계 정의(유용토·차인토량·누가토량)는 업계 표준이므로 그대로 맞춰야 함.** diff --git a/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module11_야계-횡단물량_터파기없음.md b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module11_야계-횡단물량_터파기없음.md new file mode 100644 index 00000000..3edc5e34 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module11_야계-횡단물량_터파기없음.md @@ -0,0 +1,91 @@ +# Module11 — `야계_2터파기없는횡단물량` + +**야계사방댐 횡단 물량 산출서.** 터파기를 잡지 않는 경우용. + +> 개발자 주석 그대로 : *「주로 "경남"지역이다… 임도마크로를 복사해서 그대로 쓴다. 표현상의 차이만 있다. "임도는 성토>단면적,입적"으로 표현되나 "야계는 되메우기>단면적,입적"으로 표현된다.」* + +즉 **계산은 임도(Module1)와 완전히 같고, 표에 적히는 이름만 다름.** +「성토」라 적힌 자리가 야계에서는 「되메우기」로 읽힘 — 캐드가 CSV 머리글에 그렇게 써 주고, 매크로는 자리만 맞춰 병합함. + +--- + +## Module1(임도)·Module3(터파기有)과 견주기 + +| | 임도 (Module1) | 야계 터파기無 (Module11) | 야계 터파기有 (Module3) | +| --- | --- | --- | --- | +| 두 번째 흙 항목 | 측구터파기 | **측구터파기** | 터파기 | +| 되메우기 별도 열 | 없음 | **없음** (성토 자리로 표현) | 있음 | +| 유용토 | MIN(O, Q) | **MIN(O, Q)** | MIN(O, Q+S) | +| 법면보호공 | 있음 | **있음** | 없음 | +| 열 수 | A~AL | **A~AL** | A~AJ | + +**Module11 = Module1 의 복사본.** 열 구성·수식이 한 글자도 다르지 않음. + +--- + +## 표 생김새 (A~AL) + +[Module1 표](Module1_임도-횡단물량.md)와 동일. + +``` +A 측점 │ B 거리 +C·D·E 절토>토사 │ F·G·H 절토>암석 +I·J·K 측구터파기>토사 │ L·M·N 측구터파기>암석 +O 보정량계 │ P·Q 성토(=되메우기) │ R 유용토 │ S 차인토량 │ T 누가토량 +U·V 면고르기>성토 │ W·X 면고르기>절토 +Y·Z 법면보호공>초류종자살포 │ AA·AB 법면보호공>절토면보호공 +AC·AD 편책 │ AE·AF 층따기 +AG·AH 지장목제거>성토 │ AI·AJ 지장목제거>절토 │ AK·AL 노면다짐 +``` + +--- + +## 계산 로직 + +### ① 절토 · ② 측구터파기 · ③ 보정량계 · ④ 성토 + +Module1 과 동일. + +``` +입적 = ROUND((앞줄 단면적 + 현줄 단면적)/2 × 점간거리, 2) +보정량 = ROUND(입적 × 계수, 2) ※ 절토·측구터파기만 +보정량계 O5 = E5 + H5 + K5 + N5 +성토입적 Q5 = ROUND((P4+P5)/2*B5, 2) +``` + +보정계수는 절토 첫 줄에서 역산(토사 예 0.9 · 암 예 1.0). + +### ⑤ 유용토 — **표기 방식만 다름** + +``` +R5 = MIN(O5, Q5) +``` + +Module1 은 같은 뜻을 `IF(O5>Q5, Q5, O5)` 로 썼고, 여기는 `MIN()` 을 그대로 씀. **결과는 동일.** + +### ⑥ 차인토량 · ⑦ 누가토량 + +``` +S5 = O5 - Q5 +T5 = T4 + S5 +``` + +### ⑧ 면적 항목 9가지 + +면고르기(성토/절토) · 법면보호공(초류종자살포/절토면보호공) · 층따기 · 지장목제거(성토/절토) · 노면다짐. 전부 + +``` +면적 = ROUND((앞줄값 + 현줄값)/2 × 점간거리, 2) +``` + +### ⑨ 계 + +각 열 `SUM`. 누가토량 제외. + +--- + +## 우리가 견줄 점 + +- **같은 야계사방댐인데 지역 관행에 따라 물량표 골격이 둘로 갈림.** 프로그램이 매크로를 둘로 나눠 대응한 것 자체가 정보임. +- 터파기를 안 잡는 쪽은 **되메우기도 안 잡음** — 파고 되메우는 한 벌을 통째로 생략하고 「성토」 하나로 뭉갬. +- 어느 쪽을 기본으로 둘지는 **미결** — `resources/knowledge/03_미결_및_확인사항.md` 로 올릴 거리. 임의 확정 금지. diff --git a/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module1_임도-횡단물량.md b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module1_임도-횡단물량.md new file mode 100644 index 00000000..e96c12b4 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module1_임도-횡단물량.md @@ -0,0 +1,136 @@ +# Module1 — `임도_1횡단물량` + +**임도 횡단 물량 산출서를 완성하는 매크로.** 오솔길 계산 로직 중 가장 알맹이. +캐드 횡단도면작성이 뱉은 `*.csv` 를 열고 이 매크로를 돌리면 제출용 물량표가 됨. + +> 주석에 이력이 남아 있음 — 2016.5.29 「유용토」를 「횡방향무대」로 바꿨다가, **2023.5.27 다시 「유용토」로 되돌리고 횡방향무대는 폐기**. 같은 날 **암을 3종류(연암·보통암·경암) 가정에서 1종류로 축소**. + +--- + +## 표 생김새 (암 1종류 기준, A~AL = 38열) + +머리 3줄(대분류/중분류/단면적·입적·보정량), 4행부터 0측점 자료, 맨 밑 「계」. + +| 열 | 뜻 | 열 | 뜻 | +| --- | --- | --- | --- | +| A | 측점 | S | **차인토량** | +| B | 점간거리 | T | **누가토량** | +| C·D·E | 절토>토사 : 단면적·입적·보정량 | U·V | 면고르기>성토 : 단면적·면적 | +| F·G·H | 절토>암석 : 단면적·입적·보정량 | W·X | 면고르기>절토 : 단면적·면적 | +| I·J·K | 측구터파기>토사 : 단면적·입적·보정량 | Y·Z | 법면보호공>초류종자살포 | +| L·M·N | 측구터파기>암석 : 단면적·입적·보정량 | AA·AB | 법면보호공>절토면보호공 | +| O | **보정량계** | AC·AD | 편책 (**집계 안 함**) | +| P·Q | 성토 : 단면적·입적 | AE·AF | 층따기 : 단면적·입적 | +| R | **유용토** | AG·AH | 지장목제거>성토 | +| | | AI·AJ | 지장목제거>절토 | +| | | AK·AL | 노면다짐 | + +> 주석에 「암 2종류면 44열, 3종류면 50열」이라 적혀 있으나 **지금 코드는 1종류 38열만 처리**함. + +--- + +## 계산 로직 — 항목별 + +아래 `5` 는 첫 자료줄(0측점 다음 줄) 예시. 실제로는 마지막 측점까지 자동 채움. + +### ① 절토 — 흙과 돌을 따로 + +``` +절토>토사>입적 D5 = ROUND((C4+C5)/2*B5, 2) +절토>토사>보정량 E5 = ROUND(D5 × 토사계수, 2) (예) 0.9 +절토>암석>입적 G5 = ROUND((F4+F5)/2*B5, 2) +절토>암석>보정량 H5 = ROUND(G5 × 암계수, 2) (예) 1 +``` + +### ② 측구터파기 — 절토와 똑같은 꼴, 계수도 같은 것을 씀 + +``` +측구터파기>토사>입적 J5 = ROUND((I4+I5)/2*B5, 2) +측구터파기>토사>보정량 K5 = ROUND(J5 × 토사계수, 2) +측구터파기>암석>입적 M5 = ROUND((L4+L5)/2*B5, 2) +측구터파기>암석>보정량 N5 = ROUND(M5 × 암계수, 2) +``` + +### ③ 보정량계 — 파낸 것을 모두 더함 + +``` +O5 = E5 + H5 + K5 + N5 +``` + +절토토사 + 절토암 + 측구토사 + 측구암. **네 가지 보정량의 합**. + +### ④ 성토 — 보정 안 걸림 + +``` +성토>입적 Q5 = ROUND((P4+P5)/2*B5, 2) +``` + +> ⚠ **주석 오기 발견.** 주석엔 `Q5=(P5+P6)/2*B5` 라 적혀 있으나 실제 코드는 `(P4+P5)`. 앞줄+현줄이 맞음. 주석을 믿지 말 것. + +### ⑤ 유용토 — 「판 것」과 「쌓을 것」 중 작은 쪽 + +``` +R5 = IF(O5 > Q5, Q5, O5) → 곧 MIN(보정량계, 성토입적) +``` + +파낸 흙이 남아돌면 성토에 넣을 수 있는 만큼(=성토입적)만 유용, 모자라면 있는 만큼(=보정량계)만 유용. **현장 상식 그대로.** + +> 폐기된 옛 방식이 주석에 남아 있음 : `=ROUND(((E18+K18)/O18)*Q18, 2)` — 토사 비율로 안분하던 식. **보정량계가 0일 때 0으로 나누는 오류가 나서 못 쓰고 되돌림**이라고 개발자가 적어 둠. + +### ⑥ 차인토량 — 남거나 모자라는 양 + +``` +S5 = O5 - Q5 (보정량계 - 성토입적) +``` + +`+` 면 흙이 남음(사토), `−` 면 모자람(토취). + +### ⑦ 누가토량 — 위에서부터 쌓아 내려온 합 + +``` +T5 = T4 + S5 +``` + +유토곡선(Mass Curve)의 세로축이 되는 값. + +### ⑧ 면적 항목 8가지 — 전부 같은 한 줄 + +면고르기(성토/절토) · 법면보호공(초류종자살포/절토면보호공) · 층따기 · 지장목제거(성토/절토) · 노면다짐 + +``` +면적 = ROUND((앞줄값 + 현줄값)/2 × 점간거리, 2) +``` + +부피와 똑같은 평균단면적법. 다만 **보정계수는 안 걸림**. + +### ⑨ 편책 — 칸은 있으나 합계를 내지 않음 + +`AC·AD` 는 표에 자리만 있고 「집계 안 함」이라고 주석에 못 박음. 개수 세는 항목이라 부피·면적 집계에 섞지 않는 것으로 보임. + +### ⑩ 계 (맨 밑줄) + +거리·입적·보정량·면적 모든 열에 `SUM(첫 자료줄:마지막 자료줄)`. +**누가토량(T)만 예외** — 이미 누계라 합계를 내지 않음. + +--- + +## 정리 — 임도 토공 물량 흐름 + +``` +캐드가 준 단면적 + ↓ 평균단면적법 ((앞+현)/2 × 거리) +입적 + ↓ × 보정계수 (토사 0.9 · 암 1.0) ※ 파낸 것만 +보정량 ── 넷을 합쳐 → 보정량계 + ↓ 성토입적과 견줌 + 유용토 = 작은 쪽 + 차인토량 = 보정량계 − 성토입적 + ↓ 누적 + 누가토량 → 유토곡선 +``` + +## 우리가 견줄 점 + +- **정의 자체는 그대로 따라야 함** — 유용토·차인토량·누가토량 뜻이 업계 공통. +- 보정계수 토사 0.9 / 암 1.0 은 **오솔길이 쓰는 값**일 뿐. 우리 기본값은 현행 법령·행정규칙과 사용자 협의로 정할 것. +- 항목 구성(면고르기·법면보호공·층따기·지장목제거·노면다짐·편책)은 임도 물량표 표준 골격으로 참고 가치 있음. diff --git a/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module2_임도-평균운반거리산출서.md b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module2_임도-평균운반거리산출서.md new file mode 100644 index 00000000..623e8ee2 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module2_임도-평균운반거리산출서.md @@ -0,0 +1,68 @@ +# Module2 — `임도_2평균운반거리산출서` + +**유토곡선에서 뽑은 운반거리 CSV 4종을 산출서 모양으로 다듬는 매크로.** +2008년에 처음 기록된 가장 오래된 매크로(주석에 `kt이(가) 2008-08-04에 기록`). + +> ⚠ **계산은 없음.** 값은 전부 캐드가 이미 구해 놓은 것. 이 매크로가 새로 만드는 수식은 맨 밑 「평균운반거리」 합계 두 줄뿐임. + +--- + +## 파일 4종을 한 매크로가 처리 + +파일 이름을 읽어 스스로 구분함 (내부 구분자 `id_No`). + +| 파일 | id_No | 열 수 | 맨 밑줄 | +| --- | --- | --- | --- | +| `평균운반거리산출서.csv` | 1 | 8 (A~H) | 덤프트럭 + 불도우져 평균운반거리 | +| `토량운반거리.csv` | 2 | 8 (A~H) | 없음 | +| `무대평균운반거리산출서.csv` | 11 | 4 (A~D) | 덤프트럭 평균운반거리만 | +| `무대운반거리.csv` | 12 | 4 (A~D) | 없음 | + +**무대(無代)** = Free Haul, 운반비를 따로 안 매기는 무료 운반 구간. +무대 파일은 덤프트럭만 나옴 — 불도우져·종단유용 칸이 아예 없음. + +--- + +## 표 생김새 + +``` +번호 │ 덤프트럭 (…) │ 불도우져 (…) │ 종단유용 +``` + +- 열이 7개면 「종단유용」 칸을 만들고, 4개면 안 만듦. +- 자료 끝에 「합 계」 줄을 넣고 주황색 칠함(산출서 계열만). +- 맨 밑 두 줄에 `1) 덤프트럭 평균운반 거리:` · `2) 불도우져 평균운반 거리:` 를 넣고 A~C 칸을 하나로 병합. + +--- + +## 계산 로직 + +### 유일한 수식 — 평균운반거리 두 줄 + +``` +덤프트럭 평균운반거리 = SUM(D:H 의 해당 줄) +불도우져 평균운반거리 = SUM(D:H 의 해당 줄) ※ 무대 파일은 C:D +``` + +가로로 늘어선 항목을 그냥 더하는 것. **거리 자체를 구하는 계산은 캐드 안에 있음.** + +### 캐드 쪽이 하는 일 (매뉴얼로 확인한 것) + +유토곡선 도면 위에서 사람이 수평선을 긋고 명령을 부르면 캐드가 잼. + +| 명령 | 하는 일 | +| --- | --- | +| 임의 수평선 / 점중심 수평선 | 유토곡선에 기준 수평선 긋기 | +| 20m·60m 찾기 | 선 두 개를 골라 길이를 재고 **평균**을 최종 거리로 삼음 (예: 61.78·58.99 → 59.99) | +| 토량·거리 (Q·L) | 그 구간의 토량 Q 와 거리 L 을 산출 → `평균운반거리.csv` | +| 유토(자동) | 위 과정을 사람 손 없이 한 번에 | + +즉 **평균운반거리는 「유토곡선 위에서 잰 길이」**이지 공식으로 푸는 값이 아님. 반자동(사람이 선 지정)과 자동 두 갈래를 다 제공함. + +--- + +## 우리가 견줄 점 + +- 유토곡선 → 평균운반거리를 **도면 위 작도로 푸는 방식**이 오솔길의 접근. 수치해석이 아니라 그래프를 자로 재는 옛 방식임. +- **무대(Free Haul) 구간을 따로 뽑는 구조**는 참고 가치 있음 — 운반비 산정이 무대/유대로 갈림. +- 「덤프트럭 / 불도우져」 두 장비로 나눠 각각 평균운반거리를 내는 것도 임도 관행. diff --git a/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module3_야계-횡단물량_터파기있음.md b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module3_야계-횡단물량_터파기있음.md new file mode 100644 index 00000000..32ce7a49 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module3_야계-횡단물량_터파기있음.md @@ -0,0 +1,123 @@ +# Module3 — `야계_1터파기있는횡단물량` + +**야계사방댐 횡단 물량 산출서.** 터파기가 있는 경우용. + +> 개발자 주석 그대로 : *「터파기가 있으면, 되메우기가 있다. "경남"을 제외한 지역이다…」* +> 즉 **지역에 따라 물량 잡는 관행이 갈림** — 경남은 터파기를 안 잡고, 나머지 지역은 잡음. +> 경남용은 [Module11](Module11_야계-횡단물량_터파기없음.md). + +--- + +## 임도(Module1)와 무엇이 다른가 + +| | 임도 (Module1) | 야계 터파기有 (Module3) | +| --- | --- | --- | +| 두 번째 흙 항목 | **측구터파기** | **터파기** (댐 기초) | +| 되메우기 | 없음 | **있음** (R·S 열 추가) | +| 유용토 상대 | 성토입적 | **성토입적 + 되메우기입적** | +| 법면보호공 | 있음 | **없음** | +| 열 수 | A~AL | A~AJ | + +**되메우기가 끼어들면서 뒤쪽 열이 통째로 두 칸씩 밀림.** + +--- + +## 표 생김새 (A~AJ) + +| 열 | 뜻 | 열 | 뜻 | +| --- | --- | --- | --- | +| A | 측점 | R·S | **되메우기 : 단면적·입적** | +| B | 점간거리 | T | **유용토** | +| C·D·E | 절토>토사 : 단면적·입적·보정량 | U | **차인토량** | +| F·G·H | 절토>암석 : 단면적·입적·보정량 | V | **누가토량** | +| I·J·K | 터파기>토사 : 단면적·입적·보정량 | W·X | 면고르기>성토 | +| L·M·N | 터파기>암석 : 단면적·입적·보정량 | Y·Z | 면고르기>절토 | +| O | **보정량계** | AA·AB | 편책 | +| P·Q | 성토 : 단면적·입적 | AC·AD | 층따기 | +| | | AE·AF | 지장목제거>성토 | +| | | AG·AH | 지장목제거>절토 | +| | | AI·AJ | 노면다짐 | + +--- + +## 계산 로직 — 항목별 + +### ① 절토 (임도와 동일) + +``` +절토>토사>입적 D5 = ROUND((C4+C5)/2*B5, 2) +절토>토사>보정량 E5 = ROUND(D5 × 토사계수, 2) +절토>암석>입적 G5 = ROUND((F4+F5)/2*B5, 2) +절토>암석>보정량 H5 = ROUND(G5 × 암계수, 2) +``` + +보정계수는 임도와 똑같이 **절토 첫 줄에서 역산** → [공통_보조프로시저](공통_보조프로시저.md). + +### ② 터파기 (임도의 「측구터파기」 자리) + +``` +터파기>토사>입적 J5 = ROUND((I4+I5)/2*B5, 2) +터파기>토사>보정량 K5 = ROUND(J5 × 토사계수, 2) +터파기>암석>입적 M5 = ROUND((L4+L5)/2*B5, 2) +터파기>암석>보정량 N5 = ROUND(M5 × 암계수, 2) +``` + +댐 기초를 앉히려고 파낸 흙. **절토와 똑같은 계수를 씀.** + +### ③ 보정량계 + +``` +O5 = E5 + H5 + K5 + N5 +``` + +### ④ 성토 · 되메우기 — 둘 다 보정 안 걸림 + +``` +성토>입적 Q5 = ROUND((P4+P5)/2*B5, 2) +되메우기>입적 S5 = ROUND((R4+R5)/2*B5, 2) +``` + +**되메우기** = 터파기로 판 구덩이에 댐을 앉히고 남는 빈 공간을 다시 흙으로 채우는 것. + +### ⑤ 유용토 — 쌓을 곳이 둘 + +``` +T5 = MIN(O5, Q5 + S5) +``` + +임도는 성토 하나뿐이라 `MIN(O,Q)` 였으나, 야계는 **성토 + 되메우기** 를 합친 것과 견줌. +파낸 흙을 성토에도 쓰고 되메우기에도 쓸 수 있으므로 자연스러움. + +### ⑥ 차인토량 + +``` +U5 = O5 - (Q5 + S5) +``` + +### ⑦ 누가토량 + +``` +V5 = V4 + U5 +``` + +### ⑧ 면적 항목 6가지 + +면고르기(성토/절토) · 층따기 · 지장목제거(성토/절토) · 노면다짐 + +``` +면적 = ROUND((앞줄값 + 현줄값)/2 × 점간거리, 2) +``` + +**임도에 있던 「법면보호공」이 야계엔 없음.** 편책(AA·AB)은 임도와 마찬가지로 자리만 있음. + +### ⑨ 계 + +각 열 `SUM`. 누가토량 열만 제외. + +--- + +## 우리가 견줄 점 + +- **「터파기 → 되메우기」 짝**은 사방댐 물량의 핵심 골격. 우리 사방댐 수량 설계 때 반드시 짝으로 잡을 것. +- **유용토 상대가 「성토 + 되메우기」** 라는 점이 임도와 갈리는 결정적 차이. +- **지역별 관행 차이(경남 vs 그 외)를 프로그램이 아예 두 갈래로 나눠 대응**함 — 우리도 설계자가 고를 수 있게 둘지 협의 필요. → `resources/knowledge/03_미결_및_확인사항.md` 에 올릴 거리. diff --git a/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module4_사방댐-수량산출서분리.md b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module4_사방댐-수량산출서분리.md new file mode 100644 index 00000000..221d5ffa --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module4_사방댐-수량산출서분리.md @@ -0,0 +1,66 @@ +# Module4 — `사방댐_3수량산출서거푸집레미콘` + +**사방댐 수량산출서 한 장을 두 장으로 쪼개는 매크로.** + +> ⚠ **계산 없음.** 수식을 하나도 만들지 않음. 시트를 나누고 서식만 입힘. + +--- + +## 하는 일 + +캐드가 만든 「사방댐-수량산출서」 시트 한 장 안에는 두 성격의 표가 이어 붙어 있음. +매크로가 **`<거푸집>` 이라 적힌 줄을 찾아** 그 앞뒤로 잘라 시트 두 장을 새로 만듦. + +``` +원본 한 장 + ├─ 1행 ~ <거푸집> 직전 → 새 시트 「수량산출서」 + └─ <거푸집> 줄 ~ 끝 → 새 시트 「거푸집, 레미콘수량산출서, 기타자재수량산출서」 +``` + +### 잘라내는 기준 글자 세 개 + +시트를 훑으며 A열에서 이 글자를 찾아 그 줄을 표제로 삼아 A~E 칸을 병합함. + +``` +<거푸집> +<레미콘 수량산출서> +<기타자재 수량산출서> +``` + +--- + +## 시트별 서식 + +| 시트 | 열 너비 | 테두리 | +| --- | --- | --- | +| 수량산출서 | A=15.44 · C=70.11 | A1 ~ D(마지막줄) | +| 거푸집·레미콘·기타자재 | A=20 · B=17 · D=114 | A1 ~ E(마지막줄) | + +C열·D열이 유난히 넓음(70·114) — **산출 근거 수식을 글로 적어 두는 칸**으로 보임. +즉 사방댐 수량산출서는 「규격 → 산출식 문장 → 수량」 꼴로 근거를 남기는 양식임. + +--- + +## 알 수 있는 것 + +사방댐 물량이 **네 갈래로 나뉘어 집계**됨. + +1. **수량산출서** — 콘크리트·돌 등 본체 물량 +2. **거푸집** — 형틀 면적 +3. **레미콘 수량산출서** — 규격별 레미콘 +4. **기타자재 수량산출서** — 철근·다웰바·신축이음 등 + +관련 계수 표가 원본 폴더에 그대로 있음. + +| 파일 | 내용 | +| --- | --- | +| `../../오솔길/철근단위중량.txt` | D6~D51 단위중량 (예: D13=0.995, D16=1.56, D25=3.98) | +| `../../오솔길/석축채움콘크리트량.txt` | 석축 규격별 채움 콘크리트량 5줄 | + +--- + +## 우리가 견줄 점 + +- **산출 근거를 문장으로 남기는 칸**이 있다는 점이 중요. 실무 제출물은 숫자만으로 안 되고 「어떻게 나왔는가」를 적어야 함. +- 거푸집·레미콘·기타자재를 **본체 물량과 분리해 별도 산출서로 뽑는 구조**는 B08 수량 재작업 때 참고 가치 있음. +- 철근 단위중량 표는 KS 표준값이라 우리 것과 대조만 하면 됨. diff --git a/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module5_사방댐-토공수량_3-4각형법.md b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module5_사방댐-토공수량_3-4각형법.md new file mode 100644 index 00000000..7d2b96cb --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module5_사방댐-토공수량_3-4각형법.md @@ -0,0 +1,55 @@ +# Module5 — `사방댐_2토공수량34각형법` + +**사방댐 토공수량(3·4각형법) 표를 다듬는 매크로.** + +> ⚠ **계산 거의 없음.** 만드는 수식은 맨 밑 합계 두 줄뿐. + +--- + +## 3·4각형법이 무엇인가 + +댐 터파기 바닥을 **삼각형·사각형 조각으로 쪼개 각 조각의 부피를 더하는 방식.** +평균단면적법(단면을 잘라 (앞+현)/2 × 거리)과 달리, **평면을 조각내 바로 부피를 냄.** +오솔길은 사방댐 토공에 두 방식을 다 제공하고 설계자가 고르게 함. + +**쪼개고 재는 일은 전부 캐드 안에서 일어남.** 매크로는 캐드가 뱉은 조각별 수량 목록을 받아 합계만 냄. + +--- + +## 표 생김새 (A~D, 4열) + +``` +A 구분 │ B 산출식(넓음) │ C 수량(토사) │ D 수량(암석) +``` + +| 열 | 너비 | 뜻 | +| --- | --- | --- | +| A | 8.78 | 번호·구분 | +| B | **33.44** | 조각별 산출식을 글로 적는 칸 | +| C | 10.89 | 토사 수량 | +| D | 10.89 | 암석 수량 | + +1행 = 제목(굵게, 11pt 굴림, 행 높이 30), 2행부터 자료. + +--- + +## 계산 로직 + +### 유일한 수식 — 합계 두 줄 + +자료 마지막 줄 다음에 「합 계」 줄을 새로 만들고 꽂음. + +``` +수량(토사) 합계 C(끝) = SUM(C2 : C(끝-1)) +수량(암석) 합계 D(끝) = SUM(D2 : D(끝-1)) +``` + +**토사와 암석을 끝까지 갈라서 집계함** — 단가가 다르므로 섞지 않음. + +--- + +## 우리가 견줄 점 + +- **토공 산출 방식이 하나가 아님** — 평균단면적법 / 3·4각형법 중 설계자가 고름. 우리도 사방댐 토공을 짤 때 어느 방식을 기본으로 둘지 협의 필요. → 미결 거리. +- **토사·암석 2열 분리**는 끝까지 유지되는 원칙. +- B열(산출식 문장)이 넓은 것 — 여기서도 근거를 글로 남김. diff --git a/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module6_사방댐-토공수량_평균단면적법.md b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module6_사방댐-토공수량_평균단면적법.md new file mode 100644 index 00000000..59e23468 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/Module6_사방댐-토공수량_평균단면적법.md @@ -0,0 +1,73 @@ +# Module6 — `사방댐_1토공수량평균단면적법` + +**사방댐 토공수량(평균단면적법) 표에 서식만 입히는 매크로.** + +> ⚠ **계산 전혀 없음.** 수식을 하나도 만들지 않음. 합계조차 안 냄 — 캐드가 이미 다 적어 준 것으로 보임. + +--- + +## 하는 일 + +- 자료 범위를 `UsedRange` 로 재고 +- `A1` ~ (마지막 열)`12` 에 윤곽선·구분선을 그림 +- 네 줄에 색을 칠함 + +``` +1행 ← 제목 +2행 ← 머리글 +7행 ← 구분선 +12행 ← 구분선 +``` + +--- + +## 알 수 있는 것 — **표 크기가 고정임** + +색칠·테두리 자리가 `7`, `12`, `12` 로 **숫자가 박혀 있음**. 자료 줄 수에 따라 늘어나지 않음. +→ 댐 토공수량(평균단면적법) 표는 **항상 12줄짜리 정해진 양식**이라는 뜻. +7행과 12행이 구분선이므로 대략 이런 3토막 구조로 읽힘. + +``` +1 제목 +2 머리글 +3 ~ 6 1구간 (예: 댐 본체 터파기) +7 구분선 +8 ~ 11 2구간 (예: 물받이 등) +12 구분선 / 합계 +``` + +매뉴얼에도 「댐 토공량 구하기(평균단면적법), 물받이 토공량 구하기」로 **두 덩이를 따로 뽑는다**고 적혀 있어 앞뒤가 맞음. + +열 수는 `UsedRange` 로 재므로 가변 — 측점(단면) 수만큼 옆으로 늘어나는 **가로형 표**로 보임. +(Module1·3·11 의 세로형 측점 표와 반대) + +--- + +## 계산 로직 + +없음. 값은 전부 캐드가 산출해 CSV에 적어 둠. + +### 캐드 쪽이 하는 일 (매뉴얼로 확인한 것) + +`오솔길야계사방댐-4c-댐 토공수량.pdf` 기준. + +1. 지반선(레이어 `지반선`, Pline) · 암선(레이어 `암선`, Pline) 을 사람이 그림 +2. 댐 어깨 끝점을 찍으면 **터파기선을 기울기 0.7로 자동으로 내림** +3. 「평균단면적 산출을 위한 자동 수직선」 명령이 단면을 자를 수직선을 그음 +4. 그 단면들로 토공량·암량을 평균단면적법으로 산출 → 물량표 작성 + +관련 수치 (매뉴얼에서 확인, **우리 기본값 아님**) + +| 항목 | 값 | +| --- | --- | +| 터파기 기울기 | 0.7 | +| 댐 중심 깊이 | 지반고보다 1.8m 아래 (= 9.0 ÷ 5) | +| 도면 축척 | H = 1:200, V = 1:200 (고정) | + +--- + +## 우리가 견줄 점 + +- **댐 본체 / 물받이를 나눠 토공을 뽑는 두 덩이 구조**는 그대로 참고 가치 있음. +- 터파기 기울기 0.7 등은 **오솔길이 쓰는 값**. 우리 기본값은 현행 법령·행정규칙과 사용자 협의로 정할 것. +- 표가 12줄 고정이라 **단면이 늘면 옆으로 늘어나는 가로형** — 우리 수량 산출서 양식 정할 때 세로형/가로형 선택 참고. diff --git a/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/공통_보조프로시저.md b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/공통_보조프로시저.md new file mode 100644 index 00000000..04076bf8 --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/01_엑셀매크로/공통_보조프로시저.md @@ -0,0 +1,80 @@ +# 공통 보조 프로시저 + +Module1(임도) · Module3(야계 터파기有) · Module11(야계 터파기無) 에 **똑같은 것이 세 벌 복사**되어 있음. +고칠 일이 생기면 세 곳을 다 고쳐야 하는 구조 — 오솔길 쪽 관리 부담. + +--- + +## 1. `get___BoJung_Factor` — 보정계수 역산 + +**하는 일** : 토량환산계수(보정계수)를 **어디에도 적어 두지 않고, 캐드가 만든 표에서 거꾸로 계산해 알아냄.** + +### 어떻게 + +``` +보정계수 = 보정량 ÷ 입적 +``` + +- 4행(0측점)부터 「계」 직전 줄까지 훑음. +- **입적이 0.01보다 큰 첫 줄**을 찾아 그 줄의 `보정량 ÷ 입적` 을 취하고 즉시 멈춤. +- 절토 칸이 전부 비어 있으면(전 구간 성토) → **6칸 오른쪽으로 옮겨** 측구터파기(야계는 터파기) 칸에서 같은 짓을 함. +- 마지막에 `계수 × 100` 을 정수로 잘라 다시 ÷100 → **소수 둘째 자리에서 버림**. `0.9000345…` → `0.9`. + +### 두 번 부름 + +``` +토사 계수 ← 절토>토사 의 (입적 D, 보정량 E) (예) 0.9 +암 계수 ← 절토>암석 의 (입적 G, 보정량 H) (예) 1 +``` + +### 뜻하는 바 + +- **계수의 주인은 캐드**. 엑셀은 캐드가 이미 넣어 둔 값에서 눈치껏 읽어올 뿐임. +- 그래서 **한 산출서 안에서는 토사 계수가 전 구간 하나**로 고정됨 — 측점마다 다른 계수를 쓸 수 없는 구조. +- 표 첫 줄이 하필 0이거나 전 구간 성토면 계수를 못 찾아 **0으로 남는 사고 여지 있음**(방어 코드 없음). + +--- + +## 2. `Proc___Ipjuck_BojungRyang` — 입적·보정량 수식 심기 + +**하는 일** : 항목 하나에 대해 「입적」 칸과 「보정량」 칸에 수식을 꽂고, 아래로 자동 채우고, 맨 밑에 합계를 넣음. + +### 심는 수식 + +``` +입적 = ROUND( (앞줄 단면적 + 현줄 단면적) ÷ 2 × 현줄 점간거리 , 2) +보정량 = ROUND( 입적 × 보정계수 , 2) +합계 = SUM(첫 자료줄 : 마지막 자료줄) +``` + +예시(절토>토사, 5행) : `D5 = ROUND((C4+C5)/2*B5, 2)` · `E5 = ROUND(D5*0.9, 2)` + +### 두 가지 모드 + +| 부를 때 준 값 | 무엇을 함 | +| --- | --- | +| `iflag = 2` | 입적 + 보정량 둘 다 심음 — **절토·터파기(흙이 나오는 곳)** | +| `iflag = 1` | 입적만 심음 — **성토·되메우기·면고르기·법면보호공·층따기·지장목제거·노면다짐** | + +즉 **보정(토량환산)은 「파낸 흙」에만 걸림**. 쌓는 것·면적 항목엔 안 걸림. + +### 표시 형식 + +모든 계산 칸에 `0.00` 서식 고정 — 화면·인쇄 모두 소수 둘째 자리. + +--- + +## 3. `Merge___CELLs` / `Draw___BOX` — 서식 전용 + +- `Merge___CELLs` : 지금 고른 범위를 하나로 병합, 가운데 정렬. +- `Draw___BOX` : 지금 고른 범위에 바깥 굵은 테두리 + 안쪽 가는 선. + +계산과 무관. 산출서 모양새를 만드는 도구. + +--- + +## 우리가 가져갈 점 + +- **「보정계수를 표에서 역산」은 따라 하지 말 것.** 계수는 값을 낳은 주인(서버 계산)이 명시적으로 들고 있어야 함. +- **모드 두 가지(보정 걸림/안 걸림)의 구분선은 그대로 유효** — 절토·터파기만 환산계수 적용. +- 같은 코드 세 벌 복사는 오솔길의 약점. 우리는 한 벌로 둘 것. diff --git a/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/README.md b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/README.md new file mode 100644 index 00000000..3f58f43a --- /dev/null +++ b/resources/knowledge/original/경쟁사 프로그램/오솔길 분석/README.md @@ -0,0 +1,55 @@ +# 오솔길 분석 + +경쟁사 CAD 설계 프로그램 **오솔길(O-solkil)** 을 뜯어본 기록. +원본은 옆 폴더 `../오솔길/` — **원본은 손대지 않음**, 여기에만 정리물을 둠. + +## 오솔길이 무엇인가 + +- **AutoCAD / ZWCAD 플러그인**. 독립 프로그램 아님. `OSKi.arx`(64비트 캐드 확장 DLL, 21MB)를 캐드에 올리면 「명령어 상자」가 떠서 버튼으로 조작함. +- 만든 곳 커널테크너리지(곽명근), 검수 엘림엔지니어링 오점곤 기술사. 매뉴얼 표기 **V26.7**. +- 하드웨어 락(동글) 필요 — 지금 자료엔 락이 없어 **실행 불가**. 매뉴얼·파일 분석으로만 확인 가능. +- 제품 5종 : 임도 자동설계 · 야계사방댐 자동설계 · NaviF(산림조사) · 나스(산림조사) · 시공정산(설계변경). + +## 계산이 어디서 일어나나 — 두 겹 + +| 겹 | 무엇을 함 | 우리가 볼 수 있나 | +| ------------------------ | ------------------------------------------------------------- | ------------------------------------- | +| **캐드 플러그인(.arx)** | 횡단 단면 작도, **단면적 산출**, 구조물 물량, 댐 단면 자동설계 | ❌ 컴파일된 C++ — 역공학 안 함 | +| **엑셀 매크로(VBA)** | 캐드가 뱉은 CSV를 받아 **입적·보정량·유용토·차인/누가토량 집계** | ✅ 소스 그대로 읽힘 → 아래 문서로 정리 | + +즉 **「단면적을 어떻게 그리고 재는가」는 못 보고, 「단면적을 받아 물량을 어떻게 쌓는가」는 전부 보임.** + +## 문서 + +- [01_엑셀매크로/00_개요.md](01_엑셀매크로/00_개요.md) — 매크로 7개 지도, 공통 규칙 +- [01_엑셀매크로/공통_보조프로시저.md](01_엑셀매크로/공통_보조프로시저.md) — 보정계수 역산, 입적·보정량 수식 심기 +- [01_엑셀매크로/Module1_임도-횡단물량.md](01_엑셀매크로/Module1_임도-횡단물량.md) +- [01_엑셀매크로/Module2_임도-평균운반거리산출서.md](01_엑셀매크로/Module2_임도-평균운반거리산출서.md) +- [01_엑셀매크로/Module3_야계-횡단물량_터파기있음.md](01_엑셀매크로/Module3_야계-횡단물량_터파기있음.md) +- [01_엑셀매크로/Module11_야계-횡단물량_터파기없음.md](01_엑셀매크로/Module11_야계-횡단물량_터파기없음.md) +- [01_엑셀매크로/Module4_사방댐-수량산출서분리.md](01_엑셀매크로/Module4_사방댐-수량산출서분리.md) +- [01_엑셀매크로/Module5_사방댐-토공수량_3-4각형법.md](01_엑셀매크로/Module5_사방댐-토공수량_3-4각형법.md) +- [01_엑셀매크로/Module6_사방댐-토공수량_평균단면적법.md](01_엑셀매크로/Module6_사방댐-토공수량_평균단면적법.md) + +## 아직 안 한 것 + +- 매뉴얼 PDF 30개 → md화 (곡선설치 공식, 횡단 입력 문법, 축척, 사방댐 제원 규칙 등이 들어 있음) +- 도면 양식 DWG 40여 개(`OSK_sym/`) 분석 — 표제란·물량표·곡선설치표·사방댐 표준도 +- 표준 구조물 목록 `산림청표준PNB구조물txt.csv` → 우리 지식DB 대조 +- 실무 성과품(오솔길로 뽑은 출력 CSV·DWG) 확보 시 입력↔출력 역산 + +## 쓸 때 지킬 것 + +- **여기 적힌 수식은 「경쟁사가 이렇게 함」이라는 관찰 기록**. 우리 기본값은 현행 법령·행정규칙과 사용자 협의로 정함 — 여기 값을 그대로 채택하지 말 것. +- 코드를 베끼지 않음. 계산 **방법**만 적음. + +## 다시 뽑는 법 + +VBA 원문은 저장하지 않음. 필요하면 원본에서 다시 뽑을 것. + +``` +pip install --target <임시폴더> oletools +python -c "from oletools.olevba import VBA_Parser; \ + v=VBA_Parser(r'../오솔길/Macro/PERSONAL.XLSB(오솔길)'); \ + print('\n'.join(c for _,_,_,c in v.extract_macros()))" +```