knowledge(경쟁사): UI 폼 전수 분석 — 선택축 272개, 화면에 남아 있던 계산 규칙
폼 233개(고유 190개) 중 3개만 뽑아 쓰고 있었음. 전수로 훑어 폼 40개에서 선택축 272개를 뽑음. 계산설정 폼 하나에서 뽑았던 83축의 세 배가 넘음. 화면에서 새로 나온 계산 규칙 - wM_Edt_Hal: 적용단가 = 기준단가 x 율%, 소수 n 자리 미만 절사/반올림. 「적용단가 0원인 것과 보호표시된 것은 수정 안 됨」 = T10 일괄변경 수동값 우선순위가 화면 안내문에 있음 - wM_Rate: 단수처리가 전역이 아니라 비목(M·L·X·W)마다 절사/반올림 x 소수 0~4위 - wM_Sel_Prn: ACTTYP = 표준시장단가 적용 방식(노임외 비목 적용안함/재료비로/ 경비로), ACTOPT = 끝전 보정 우선순위. 설치폴더의 STBSC 파일명과 정확히 대응. 봉화는 ACTYP=1 ACTOP=2 = 「노임외 재료비로 적용 + 소수 비교후 타금액 우선보정」 ⚠ 변경 차수가 화면에서 8차까지임. COSTN 접미사 4벌과 어긋나므로 재확인 필요 - wM_Set_Sys: KCDNM·ACDNM·ZCDNM·JCDNM·ECDNM·BPNNM 이 전부 소수 자리수 설정. 20번에서 미확정으로 둔 것이 풀림. EXRNM 은 환율 적용 범위, RX1NM~RX4NM 은 작업조건별 노임 환산식 4벌(터널·장대터널·펌프/GRAB/버켓준설선) - wM_KanJub_K: 기성 계산은 부가세 선택지가 설계용과 다름 (재료비+산출경비의 10% 추가) - wM_Mrg_BSC: 반기 기준자료 갱신의 매칭 키 5단계와 덮어쓰기 정책 - wM_JabPum·wQtyList: 코드 종류 전체 목록에 「그림코드」가 따로 있음 문서 22 신규, UI 카탈로그 원자료와 스크립트 3개 추가. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Prk9BCHG1EMAywk9k8wegA
This commit is contained in:
@@ -28,6 +28,7 @@
|
||||
| 19 진행률 장부 | **어디까지 봤고 무엇이 남았나** — 원천별 실측 진행률, 차단점 현황 | (저장소 파일) |
|
||||
| 20 설정파일과 보고서 카탈로그 | **`Start8x.Ini`·`SET_REP`** — 간접비 코드 사전 301~370, 서식 75종 | (저장소 파일) |
|
||||
| 21 정정과 트랙 통합 | **⛔ `SMT` 판정 정정 · 지식DB 트랙 셋 통합 · `PRJLST.SMT` 설정 원장 · 암호화의 성격** | (저장소 파일) |
|
||||
| 22 UI 폼 분석 | **폼 233개 중 3개만 봤던 것** — 선택축 272개, `ACTTYP`·자리수 키·일괄변경 규칙 | (저장소 파일) |
|
||||
|
||||
> **정본은 저장소 파일이다** — `resources/knowledge/original/경쟁사 프로그램/STmate 분석/20_분석/`.
|
||||
> 위 Orca 링크는 보기용이며, 문서를 지식DB 자리로 옮기면서 주소가 한 번 바뀌었다.
|
||||
@@ -80,6 +81,11 @@
|
||||
| 수공형식 세부경비 8개 | 표본 없어 미상 | **항목 확정** — `R_S_SUDO`·`BOKRI`·`SOMO`·`TONGSIN`·`SEGUM`·`PEGI`·`DOSEO`·`JIGUP` | 21번 §3.2 |
|
||||
| 암호화의 성격 | 「기초단가가 막혔다」 | **사온 물가지 데이터 보호** — 뚫을 일이 아니라 살 일 | 21번 §4 |
|
||||
| 지식DB STmate 트랙 | 하나로 알고 있었음 | **셋이 서로 몰랐음** — ①계산로직 ②STC포맷 ③프로그램분석 | 21번 §2 |
|
||||
| UI 폼 | 3개만 뽑아 씀 | **선택축 272개 전수** — 폼 40개 | 22번 |
|
||||
| 일괄변경 수동값 (T10) | ⛔ 실행 필요 | **화면 안내문에 있음** — 보호표시·0원 제외 | 22번 §3.1 |
|
||||
| `ACTTYP`·`ACTOPT` | 뜻 모름 | **A** — 표준시장 적용 방식·끝전 보정 우선순위 | 22번 §3.3 |
|
||||
| `KCDNM` 등 6키 | 미확정 | **A** — 소수 자리수 설정 | 22번 §3.4 |
|
||||
| 변경 차수 | 최대 3차로 봄 | ⚠ **화면은 8차** — 저장 구조 재확인 필요 | 22번 §3.3 |
|
||||
|
||||
분석일: 2026-09-13
|
||||
대상: `C:\경영정보(주)`
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
# UI 폼 분석 — 화면에 남아 있던 계산 규칙
|
||||
|
||||
점검일: 2026-09-13
|
||||
계기: 「추가 UI 정보도 분석했는지」 확인. **안 했다.** 폼 233개 중 **3개만** 뽑아 썼다.
|
||||
원자료: `30_원자료/ui_form_catalog.txt` · 재현 스크립트: `40_스크립트/ui_form_sweep.py`, `form_extract.py`, `form_catalog.py`
|
||||
|
||||
## 1. 그동안 얼마나 봤나
|
||||
|
||||
| | 개수 |
|
||||
|---|---:|
|
||||
| 폼을 가진 PE 모듈 | 46 |
|
||||
| 폼 자원 (중복 포함) | **233** |
|
||||
| 서로 다른 폼 이름 | **190** |
|
||||
| **그동안 뽑아 쓴 것** | **3** — `TWM_KANJUB`·`TWM_KAN_RATE`·`TPM_KAN_RATE` |
|
||||
|
||||
계산 분석에 필요한 제비율·계산설정 화면만 뽑고 나머지는 손대지 않았다.
|
||||
|
||||
## 2. 이번에 전수로 훑음
|
||||
|
||||
파싱에 성공한 STmate 고유 폼에서 캡션과 선택지를 뽑았다.
|
||||
|
||||
| | 개수 |
|
||||
|---|---:|
|
||||
| 선택지를 가진 폼 | **40** |
|
||||
| **선택축** | **272** |
|
||||
|
||||
12번 §10.1-2가 계산설정 폼 하나에서 뽑은 **83축의 세 배가 넘는다.**
|
||||
|
||||
### 폼 이름 규칙
|
||||
|
||||
```
|
||||
PM_* 인쇄 폼 — SET_REP 의 보고서 서식 75종과 대응
|
||||
w* / wM_* 편집 창·모달
|
||||
frm* 보조 창
|
||||
```
|
||||
|
||||
`ST_P_Nae`(22) · `STmate.Cpm`(30) · `ST_Boq`(13)에 폼이 몰려 있다.
|
||||
|
||||
## 3. 화면에서 새로 나온 계산 규칙
|
||||
|
||||
### 3.1 `wM_Edt_Hal` — 기준단가 수정 (단가 일괄보정)
|
||||
|
||||
```text
|
||||
적용단가 = 기준단가 × [ ] % , 소수 [ ] 자리 미만 [절사 / 반올림]
|
||||
|
||||
※ 단【 적용단가 】가 "0" 원인것과 보호표시된 것은 수정안됨
|
||||
```
|
||||
|
||||
⇒ **일괄변경에서 「보호표시(수동 고정)된 항목과 적용단가 0원인 항목은 건너뛴다.**」 13번 **T10(일괄변경 수동값 우선순위)**의 핵심이 화면 안내문에 적혀 있다. 등급 **A**(화면 문구 기준).
|
||||
|
||||
### 3.2 `wM_Rate` — 비목별 일괄 보정, 절사/반올림 × 소수 0~4위
|
||||
|
||||
`ST_Boq.CPM`의 노무비·재료비·경비·중기·일식 보정 창에 **비목마다 같은 짝**이 있다.
|
||||
|
||||
```text
|
||||
wcBx_Pnt1_M / _L / _X / _W → 0 절사하여 · 1 반올림 하여
|
||||
wcBx_Pnt2_M / _L / _X / _W → 0~4 소수 n 위값을 적용
|
||||
rd_Qty1 / rd_Amt1 / rd_Amt2 → 내역서 전체 · 선택된 항목만
|
||||
```
|
||||
|
||||
⇒ **단수처리가 전역 설정 하나가 아니라 비목(M·L·X·W)마다 따로**다. 09번 §4의 「출력별 정책을 데이터로」가 여기서도 확인된다.
|
||||
|
||||
### 3.3 `wM_Sel_Prn` — `ACTTYP`·`ACTOPT` 의 뜻이 풀렸다
|
||||
|
||||
`PRJLST.ACTTYP`·`ACTOPT`와 `INITIAL`의 `ACTYP`·`ACTOP`가 무엇인지 몰랐다. 화면이 답한다.
|
||||
|
||||
```text
|
||||
cb_ACTTYP 노무비외 비목 적용안함 / 노무비외 재료비로 적용 / 노무비외 경비로 적용
|
||||
cb_ACTOPT 노무비 1원미만 버림 / 소수 비교후 노무비 우선보정 / 소수 비교후 타금액 우선보정
|
||||
```
|
||||
|
||||
**표준시장단가(실적) 적용 방식**이다. 설치 폴더의 파일명과 정확히 대응한다.
|
||||
|
||||
```
|
||||
2025(상_표준시장[노임외 경비적용],국교,해수부).STBSC
|
||||
2025(상_표준시장[노임외 재료비적용],국교,해수부).STBSC
|
||||
```
|
||||
|
||||
봉화 2024는 `ACTYP=1`·`ACTOP=2` → **「노임외 재료비로 적용」 + 「소수 비교후 타금액 우선보정」**이다.
|
||||
|
||||
`cb_PCLASS`(당초/변경/분할설계)와 `cb_CHASU`(1~8차변경)도 여기 있다 — **변경 차수가 최대 8차**까지다. `COSTN`의 접미사 1~4(최대 3차변경)와 다르므로, **차수 저장 구조가 4벌 슬롯만이 아니다.**
|
||||
|
||||
### 3.4 `wM_Set_Sys` — `Start8x.Ini` 의 미확정 키가 풀렸다
|
||||
|
||||
20번 §2.4에서 「`KCDNM`·`ACDNM`·`ZCDNM`·`JCDNM`·`ECDNM`·`BPNNM`은 의미 미확정(B)」이라 적었다. 화면이 답한다.
|
||||
|
||||
```text
|
||||
cmBx_KCD / ACD / JCD / ECD / BPN → 0 자리 · 1 자리 · 2 자리
|
||||
cmBx_ZCD → 2 자리 · 3 자리
|
||||
```
|
||||
|
||||
⇒ **전부 소수 자리수 설정**이다. `Start8x.Ini`의 `KCDNM=1 ACDNM=1 ZCDNM=2 JCDNM=0 ECDNM=0 BPNNM=1`이 그대로 자리수다. 등급 **A**.
|
||||
|
||||
같은 화면에서 두 가지가 더 풀린다.
|
||||
|
||||
```text
|
||||
cmBX_EXR 환율 적용 범위 — 시간당중기사용료 단독적용 / 중기 / 대가 / 산근 / 내역 전체
|
||||
cmBx_Sel_RX 노임 환산 계수 갈래 — 계수 ; 터널구간 / 계수-1 ; 장대터널
|
||||
/ 계수-2 ; 펌프준설선 / 계수-3 ; GRAB준설선 / 계수-4 ; 버켓준설선
|
||||
```
|
||||
|
||||
⇒ `[EQUIPMENT]`의 `RX1NM`~`RX4NM`은 **작업 조건별 노임 환산식 네 벌**이다(18번 §2.1의 `RXTNM`이 기본). `EXRNM`은 환율을 어디까지 적용할지다.
|
||||
|
||||
### 3.5 `wM_KanJub_K` — 부가세 방식이 하나 더 있다
|
||||
|
||||
기성 제잡비 계산서 화면의 부가세 선택지가 **12번 §10.1과 다르다.**
|
||||
|
||||
```text
|
||||
(0) 직접입력 (1) 공급가액의 10% (2) 재료비의 10% (3) 재료비+산출경비의 10%
|
||||
```
|
||||
|
||||
12번이 본 설계용 화면은 `공급가액의 10% / 재료비의 10% / 없음 / 산림조합 형식 / 산림조합-면세품`이었다. **기성 계산은 선택지 집합이 다르다.** 계류보전 프로젝트의 부가세가 10%가 아니었던 것(19번 §6 주석)과 이어질 수 있다.
|
||||
|
||||
`rd_Filter`는 집계 수준을 고르는 축이다 — `소계(+=) 이상 / 계(+==) / 합계(+===) / 총계(+====) / 총합계(+=====)`. **`BOQ11`의 `T*`·`E*` 계층 깊이와 대응**한다(16번 §4.1).
|
||||
|
||||
### 3.6 `wM_Mrg_BSC` — 기준자료 갱신 매칭 규칙
|
||||
|
||||
```text
|
||||
매칭 기준(5단계) 호환규정코드 / 시설코드 / 명칭·규격·단위 / 호환+명+규+단 / 명칭·단위 / 설정안함
|
||||
명칭·단가·조달코드 업데이트 안함(복사처적용) / 업데이트(복사원적용)
|
||||
+ 조달코드는 「복사처 우선」·「복사원 우선」까지 4택
|
||||
```
|
||||
|
||||
⇒ 반기마다 새 기준자료가 오면 **무엇을 키로 잡아 기존 프로젝트 단가를 갱신할지**가 여기서 정해진다. 재구현 시 같은 축이 필요하다.
|
||||
|
||||
### 3.7 `wM_JabPum` · `wQtyList` — 코드 종류 전체 목록
|
||||
|
||||
```text
|
||||
모든단가 · 노무비 · 재료비 · 경비 · 일위대가 · 중기비 · 단가산출 · 견적단가 · 대가,산근 · 그림코드
|
||||
```
|
||||
|
||||
`COD_FMT_1~8`(20번 §2.4)보다 넓다. **`그림코드`**가 따로 있다 — 도면 참조 코드가 단가 체계 안에 있다.
|
||||
|
||||
## 4. 이번 점검이 바꾸는 것
|
||||
|
||||
| 항목 | 이전 | 지금 |
|
||||
|---|---|---|
|
||||
| UI 분석 범위 | 폼 3 / 190 | **선택축 272개 전수 카탈로그** |
|
||||
| 일괄변경 수동값 우선순위 (T10) | ⛔ 실행 필요 | ✅ **화면 안내문에 있음** — 보호표시·0원은 제외 |
|
||||
| 비목별 단수처리 | 전역 설정으로 봄 | ✅ **M·L·X·W 각각 절사/반올림 × 소수 0~4위** |
|
||||
| `ACTTYP`·`ACTOPT` | 뜻 모름 | ✅ **표준시장단가 적용 방식·끝전 보정 우선순위** |
|
||||
| `KCDNM` 등 6개 키 | 미확정 (B) | ✅ **소수 자리수 설정** |
|
||||
| `RX1NM`~`RX4NM` | 미상 | ✅ **작업조건별 노임 환산식 4벌** (터널·준설선 계열) |
|
||||
| 변경 차수 | 최대 3차(접미사 1~4)로 봄 | ⚠ **화면은 8차까지** — 저장 구조 재확인 필요 |
|
||||
| 부가세 방식 | 설계용 5택 | ⚠ **기성용은 다른 4택** |
|
||||
|
||||
## 5. 남은 UI 작업
|
||||
|
||||
| 순위 | 할 일 | 왜 |
|
||||
|---:|---|---|
|
||||
| 1 | `PM_*` 인쇄 폼 ↔ `SET_REP` 75종 **대응표** | 어느 서식이 어느 계산을 쓰는지 |
|
||||
| 2 | `wBoq`(398 KB)·`wM_Edit_San`(81 KB) 깊이 파싱 | 내역·단가산출 **편집 규칙** |
|
||||
| 3 | 변경 차수 **8차** 저장 구조 확인 | `COSTN` 접미사 4벌과 어긋남 |
|
||||
| 4 | 272개 선택축 ↔ `PRJLST.SMT` 키 대응 | 설정 저장 자리 완성 |
|
||||
|
||||
**UI 는 「화면 모양」이 아니라 계산 옵션의 원장이다.** 아직 캘 것이 남았다.
|
||||
@@ -0,0 +1,335 @@
|
||||
### 파싱 성공한 STmate 고유 폼 150개
|
||||
|
||||
■ PM_Prn_Ord ST_Prt.CPM «보고서 파일의 인쇄순서를 지정합니다.»
|
||||
cBx_BTyp 당초 설계, 변경 설계, 분할 설계, 실적 공사, 할증 내역, 견적 내역, 계약 내역, 실행 예산, 기성 내역, 설계 변경, 굴착/복구, 굴착 변경
|
||||
■ PM_Prt ST_Prt.CPM «설계예산시스템 인쇄메뉴»
|
||||
cmBx_FntTyp 굴림체, 궁서체, 바탕체, 돋움체
|
||||
cmBx_BigoFld 코드번호 인쇄, 번호(호표) 인쇄, 분류번호 인쇄, 시설코드 인쇄, 호환규정코드, 적용기준일, 수공분류코드
|
||||
cmBx_CodeFld 코드번호 인쇄, 번호(호표) 인쇄, 분류번호 인쇄, 시설코드 인쇄, 호환규정코드
|
||||
cmBx_PosQty 수량 / 단위, 단위 / 수량, 표 준
|
||||
cmBx_BigoFld2 코드번호 인쇄, 번호(호표) 인쇄, 분류번호 인쇄, 시설코드 인쇄, 호환규정코드, 적용기준일, 수공분류코드
|
||||
cmBx_SHTyp 일반양식 인쇄, 토개공양식 인쇄, 수자원공사양식 인쇄
|
||||
cmBx_SanLP 기본방향(세로) 인쇄, 횡 방향(가로) 인쇄
|
||||
cmBx_SanMOK 일반양식 인쇄, 산근양식 인쇄
|
||||
■ PM_Sel_St ST_Prt.CPM «인쇄할 공종을 선택하세요»
|
||||
rd_Filter 소 계(+=) 이상, 계(+==) 이상, 합 계(+===) 이상, 총 계(+====) 이상, 총합계(+=====
|
||||
Rg_Bk 아래로, 위로
|
||||
■ mMinMsg_ DP_MinMsg.CPM «종류»
|
||||
ListBox1 기호1, 기호2, 영어/숫자, 한글자모, 그리스어, 선문자, 단위기호, 원문자, 괄호문자, 히라가다, 가다가나, 러시아어, 특수외국어, 분수/첨자
|
||||
■ uM_ConstType ST_U_Convert.CPM «건축공사 사업내용《 건축공사 중 신축 또는 신축에 준하»
|
||||
cn_Cn_Code1 서울특별시; 11, 부산광역시; 26, 대구광역시; 27, 인천광역시; 28, 광주광역시; 29, 대전광역시; 30, 울산광역시; 31, 세종특별자치시; 36
|
||||
cn_Cn_Code2 서울특별시; 11, 부산광역시; 26, 대구광역시; 27, 인천광역시; 28, 광주광역시; 29, 대전광역시; 30, 울산광역시; 31, 세종특별자치시; 36
|
||||
cn_Bd_Type 일반청사; 연면적 10,000㎡ 미만 공용청사(경찰서, 우체국 포함), 대형청사; 연면적 10,000㎡ 이상 공용청사(경찰서, 우체국 포함), 일반형초중고;
|
||||
cn_Dm_Const 철거공사 포함; 기존 부지에 있는 시설물을 철거하고 공사, 철거공사 미포함; 기존/신축 부지에 시설물만 공사
|
||||
cn_Cl_Area 비혼잡지역(일반); 공사와 관련된 현장주변의 장애요인이 적고 공사수행환경이 복잡하지 않은 지역, 혼잡지역(특수); 공사에 따른 민원발생 소지가 높고, 특수지반
|
||||
cn_Gr_Shape 일반지반; 터파기 등 기초공사 수행에 어려움이 없는 지반, 특수지반;
|
||||
cn_Sh_Const 흙막이공사가 없는 경우, 흙막이공사가 있는 경우
|
||||
cn_St_Type 철골조; 주요 구조부가 철골조로 구성된 경우, 철골철근콘크리트조; 주요 구조부가 철골철근콘크리트로 구성된 경우, 철근콘크리트조; 주요 구조부가 철근콘크리로 구
|
||||
■ uM_Merge ST_U_Merge.CPM «데이타 병합 【 복사처 <= 복사원 】»
|
||||
Rdo_BD 각 기준에 따라 설정, 일식단가(W코드)로 생성
|
||||
Rdo_X 일위대가 기준대로 처리, 일식단가(W코드)로 생성
|
||||
RdoL 복사처적용 (동일항목 코드치환), 복사원적용 (동일항목 내용복사), 신규등록 (단가다른코드 신규생성)
|
||||
RdoM 복사처적용 (동일항목 코드치환), 복사원적용 (동일항목 내용복사), 신규등록 (단가다른코드 신규생성)
|
||||
RdoS 복사처적용 (동일항목 코드치환), 복사원적용 (동일항목 내용복사), 신규등록 (단가다른코드 신규생성)
|
||||
RdoB 복사처적용 (동일항목 코드치환), 복사원적용 (동일항목 내용복사), 신규등록 (단가다른코드 신규생성)
|
||||
RdoD 복사처적용 (동일항목 코드치환), 복사원적용 (동일항목 내용복사), 신규등록 (단가다른코드 신규생성)
|
||||
RdoW 복사처적용 (동일항목 코드치환), 복사원적용 (동일항목 내용복사), 신규등록 (단가다른코드 신규생성)
|
||||
■ uM_XML_Info ST_U_Convert.CPM «공사원가호환규정 포맷(XML) 변환»
|
||||
ed_PrjTyp 토목공사, 건축공사, 설비공사, 전기공사, 통신공사, 조경공사, 소방공사, 국가유산수리공사
|
||||
■ wBoq ST_Boq.CPM «공종목록표»
|
||||
cBox01 = 이상, == 이상, === 이상, ==== 이상 , ===== 이상, ====== 이상
|
||||
RGrpTo 내역서, 열린 보관함
|
||||
cBox02 = 이상, == 이상, === 이상, ==== 이상 , ===== 이상, ====== 이상
|
||||
■ wBoqRate ST_Boq.CPM «할증율 적용:»
|
||||
Rdo 전체(재,노,경 같은 비율), 비목별(재,노,경 각각)
|
||||
■ wExpnd ST_Boq.CPM «일위대가표 풀기»
|
||||
RGrpToT 소계(=), 계(==), 합계(===)
|
||||
CMBoxUpDn 절삭하여, 반올림하여
|
||||
CMBoxDot 소수 4위값을 적용, 소수 3위값을 적용, 소수 2위값을 적용, 소수 1위값을 적용, 소수 0위값을 적용
|
||||
■ wITNum ST_Boq.CPM «내역서의 공종번호 자동입력»
|
||||
RdoFirstChar 공란처리, . 입력, ( 입력, - 입력, 추가입력
|
||||
RdoLastChar 공란처리, . 입력, ) 입력
|
||||
CBoxType 가..하,거..허 ~ 그..흐,기..히 (14x10=140개 까지만 처리), a .. z,a1..z1 ~ a8..z8,a9..z9 (26x10=260개 까
|
||||
CBoxLeft 여백 0 Byte, 여백 1 Byte, 여백 2 Byte, 여백 3 Byte, 여백 4 Byte, 여백 5 Byte, 여백 6 Byte, 여백 7 Byte,
|
||||
Fmt_Typ 0, 00, 000
|
||||
cBx_itNum_B 『직전공종(계표시)의 공종번호』, 『직전공종길이 여백으로 채움』
|
||||
cBx_OnlyIT 공종(계표시) / 단가코드 모두적용., 공종(계표시)에만 구분적용., 단가코드에만 구분적용.
|
||||
cBx_Bl_Lev 하위 전체공종 반영, 9레벨(=========) 미만에서 초기화, == 레벨 미만에서 초기화, === 레벨 미만에서 초기화,
|
||||
■ wKongJong ST_Boq.CPM «공종 목록표»
|
||||
RdoLevel 소계 (+=), 계 (+==), 합계 (+===), 총계 (+====), 총합계(+=====), 총대계(+======)
|
||||
RdoFirstChar - 입력, 없슴
|
||||
RdoIndex 코드번호 순, 명 칭 순, 분류번호 순
|
||||
RdoFilt 일위대가/산근전체, 대공종 해당목록만
|
||||
■ wMBoq ST_Boq.CPM «주공종 집계표(계표시 확인)»
|
||||
CBox01 1레벨( 소 계 ) 이상, 2레벨( 계 ) 이상, 3레벨( 합 계 ) 이상, 4레벨( 총 계 ) 이상, 5레벨(총 합 계) 이상, 6레벨(총 대
|
||||
■ wM_Boq_ExecX ST_Boq.CPM «시간/단위당 중기실행단가 계산 및 입력»
|
||||
wCm_Jeol 1원, 10원, 100원, 1,000원, 10,000원, 100,000원
|
||||
wCm_OPT 기본보정, 노 무 비, 재 료 비, 경 비
|
||||
■ wM_Box_H STmate.Cpm «불러간 목록»
|
||||
RG_MComp 변동없음, 1 단가, 2 단가, 3 단가, 4 단가, 5 단가, 최소단가
|
||||
■ wM_Boxa STmate.Cpm «단가목록표»
|
||||
RG_MComp 변동없음, 1 단가, 2 단가, 3 단가, 4 단가, 5 단가, 최소단가
|
||||
rg_FLT_M_PP 모 두 보 임, 10 : 새들분수전, 11 : K.P 자재, 12 : 엘보, 13 : 직관, 14 : 소켓, 15 : S.T.S 자재, 16 : 니플, 17
|
||||
rg_FLT_B_PP 모 두 보 임, 30 : 토공, 31 : 포장공, 32 : 포장깨기/절단, 30~32 : 토공사, 40 : 분기공, 41 : 관접합, 42 : 관연결, 43
|
||||
■ wM_Conv_A2W STmate.Cpm «실적단가를 일식단가로 변환등록»
|
||||
wcBx_SelJOD 비목율( 단가 => 노,재,경 ), 조달청 발표단가 변환적용
|
||||
cBx_Stndard 공종(실적)코드 ↔ 분류번호로 연결, 공종(실적)코드 ↔ 시설코드로 연결, 명칭, 규격, 단위 로 연결
|
||||
■ wM_Conv_Mode ST_PList.CPM «설계자료 → 계약자료로 변환등록»
|
||||
cBx_Sel_QTY 당초 수량/단가 적용, 변경 수량/단가 적용
|
||||
cBx_Lev 소계 이상, 계 이상, 합계 이상, 총계 이상, 총합계 이상, 총대계 이상, 광역계 이상, 광역총계이상, 광역대계이상
|
||||
■ wM_Edit_EQ ST_EdSan.CPM «표준중기공식 편집.»
|
||||
cBx_INS_X 공 식, 공식+코드
|
||||
■ wM_Edit_San ST_EdSan.CPM «단가산출근거 수정[ D00001: 무근콘크리트 깨기 ]»
|
||||
RdosmMode 열블럭, 행블럭, 일 반
|
||||
cBoxFunc 각종 지원함수, ∏, INT(0), SIN(0), COS(0), TAN(0), SQRT(1) , √(1), ROUND(1,0), ROUNDDOWN(1,0),
|
||||
cBox_Trans 코드 * 수량(0) =, 명칭 코드 * 수량(0) =, 명칭 규격 코드 * 수량(0) =, 명칭 규격 코드 * 수량(0) 단위 =, 코드번호
|
||||
ComOp /, *
|
||||
ComQty Q, A, T, N
|
||||
cmBx_IFORCE XML비호환 메세지 숨김, XML비호환시 보이기
|
||||
cBx_SBMOK 0 각 해당비목 적용, 1 재료비로 적용, 2 노무비로 적용, 3 경 비로 적용
|
||||
■ wM_Edit_XRate ST_EdiLWi.CPM «시간당 손료계수 수정»
|
||||
cBx_Sel 계 입력, 각계수 입력
|
||||
■ wM_Edit_iLWi ST_EdiLWi.CPM «일위대가표 수정»
|
||||
wcBx_RXX 초기값설정 개별적용, 기 본 노임산출계수, 기 타 노임산출계수, 기타-1노임산출계수, 기타-2노임산출계수, 기타-3노임산출계수, 기타-4노임산출계수
|
||||
cBx_SBMOK 0 각 해당비목 적용, 1 재료비로 적용, 2 노무비로 적용, 3 경 비로 적용
|
||||
■ wM_Edt_Hal ST_Jabpum.CPM «기준단가 수정»
|
||||
wcBx_Up 절사, 반올림
|
||||
■ wM_Expnd ST_Boq.CPM «일위대가표 및 단가산출근거 풀어넣기»
|
||||
wcBx_Pnt1_M 0 절사하여, 1 반올림 하여
|
||||
wcBx_Pnt2_M 0 소수 0위값을 적용, 1 소수 1위값을 적용, 2 소수 2위값을 적용, 3 소수 3위값을 적용, 4 소수 4위값을 적용
|
||||
wcBx_Pnt1_L 0 절사하여, 1 반올림 하여
|
||||
wcBx_Pnt2_L 0 소수 0위값을 적용, 1 소수 1위값을 적용, 2 소수 2위값을 적용, 3 소수 3위값을 적용, 4 소수 4위값을 적용
|
||||
wcBx_Pnt1_X 0 절사하여, 1 반올림 하여
|
||||
wcBx_Pnt2_X 0 소수 0위값을 적용, 1 소수 1위값을 적용, 2 소수 2위값을 적용, 3 소수 3위값을 적용, 4 소수 4위값을 적용
|
||||
wcBx_Pnt1_W 0 절사하여, 1 반올림 하여
|
||||
wcBx_Pnt2_W 0 소수 0위값을 적용, 1 소수 1위값을 적용, 2 소수 2위값을 적용, 3 소수 3위값을 적용, 4 소수 4위값을 적용
|
||||
■ wM_Expnd10 ST_Boq.CPM «일위대가표 풀기»
|
||||
RGrpToT 입력안함, 소계(=), 계(==), 합계(===)
|
||||
Add1_PRIN 재료비의, 노무비의, 경비의, 전체의
|
||||
Add1_PROUT 재료비로 계산, 노무비로 계산, 경비로 계산, 해당비목 계산
|
||||
Add2_PRIN 재료비의, 노무비의, 경비의, 전체의
|
||||
Add2_PROUT 재료비로 계산, 노무비로 계산, 경비로 계산, 해당비목 계산
|
||||
■ wM_GetAMT ST_KanJub.CPM «잡비 금액 불러오기»
|
||||
rd_Filter 모두보기, 소 계(+=), 계(+==), 합 계(+===), 총 계(+====), 총합계(+=====)
|
||||
■ wM_Host STmate8.Exe «서버의 IP주소를 입력하고 IP접속( 또는 Enter »
|
||||
rgPrgTyp 일반, LAN, EDU, OnLine, 북측
|
||||
■ wM_JDCode STmate.Cpm «공사원가 호환규정코드 찾기 / 입력»
|
||||
wCb_Base 명칭, 명칭/규격, 분류번호, 시설코드, 선택안함
|
||||
wCb_Srch 명칭/규격/단위, 호환규정코드, 군급목록번호, 중기품셈코드, 시설코드번호
|
||||
wCb_Other 기본, 자재, 경비, 중기, 실적/기타
|
||||
wCb_Method 분류별 조회, 코드..명칭 조회
|
||||
■ wM_JabPum ST_Jabpum.CPM «닫기 (&Q)»
|
||||
cBoxCode 모든단가, 노무비, 재료비, 경비, 일위대가, 중기비, 단가산출, 견적단가, 대가,산근, 그림코드
|
||||
cBox_IFORM 명칭,규격 으로검색, 산근내용 으로검색
|
||||
■ wM_KanJub ST_KanJub.CPM «제잡비 계산»
|
||||
Cmbx_PORD1_H 당초 / 변경 대비인쇄, 변 경 분 만 인 쇄
|
||||
cBx_K_JeolSa 간접비 절사없음, 간접비 10원미만 절사, 간접비 100원미만 절사, 간접비 1,000원미만 절사, 간접비 10,000원미
|
||||
cBx_Chasu 원설계, 1차변경, 2차변경, 3차변경
|
||||
cBx_W_Type 제잡비 원가계산방식, 제잡비 표준시장방식
|
||||
cBx_Jeol_T 총공사비에서 조정, 10원 미만, 100원 미만, 1,000원 미만, 10,000원 미만, 100,
|
||||
Ed_C_AnJun_K_T 없음, 관급/사급 내용, 사급자재대
|
||||
Ed_C_AnJun_B_T , 의 1.2배
|
||||
Ed_C_KUNBO_T ㄴ.1)직노, 당해 상시근로자노무비
|
||||
■ wM_KanJub_K ST_KanJub.CPM «< 기성 제잡비 계산서 >»
|
||||
rd_Filter 소 계(+=) 이상, 계(+==) 이상, 합 계(+===) 이상, 총 계(+====) 이상, 총합계(+=====) 이상
|
||||
cmBx_Buga (0) 직접입력, (1) 공급가액의 10%, (2) 재료비의 10%, (3) 재료비+산출경비의 10%
|
||||
cmBx_JeolSa 총공사비에서 조정, 10원 미만, 100원 미만, 1,000원 미만, 10,000원 미만, 100,
|
||||
cmBx_Tot_Jeol 이윤금액 직접입력, 10원 미만, 100원 미만, 1,000원 미만, 10,000원 미만, 100,
|
||||
■ wM_Mk_Cont STmate.Cpm «당초설계 → 계약내역 변환등록»
|
||||
cBx_Lev 소계 이상, 계 이상, 합계 이상, 총계 이상, 총합계 이상, 총대계 이상, 광역계 이상, 광역총계이상, 광역대계이상
|
||||
■ wM_Mrg_BSC STmate.Cpm «자료파일 업데이트»
|
||||
cBx_Sel1 호환규정코드, 시설코드, 명칭/규격/단위, 호환+명+규+단, 명칭/단위, 설정안함
|
||||
cBx_Sel2 호환규정코드, 시설코드, 명칭/규격/단위, 호환+명+규+단, 명칭/단위, 설정안함
|
||||
cBx_Sel3 호환규정코드, 시설코드, 명칭/규격/단위, 호환+명+규+단, 명칭/단위, 설정안함
|
||||
cBx_Sel4 호환규정코드, 시설코드, 명칭/규격/단위, 호환+명+규+단, 명칭/단위, 설정안함
|
||||
cBx_Sel5 호환규정코드, 시설코드, 명칭/규격/단위, 호환+명+규+단, 명칭/단위, 설정안함
|
||||
rg_Name 업데이트 안함(복사처적용), 업데이트 (복사원적용)
|
||||
rg_Amt 업데이트 안함(복사처적용), 업데이트 (복사원적용)
|
||||
rg_JDCOD 업데이트 안함(복사처적용), 업데이트 (복사원적용), 복사처 우선적용 업데이트, 복사원 우선적용 업데이트
|
||||
■ wM_Rate ST_Boq.CPM «노무비»
|
||||
rd_Qty1 내역서 전체, 선택된 항목만
|
||||
rd_Amt1 내역서 전체, 선택된 항목만
|
||||
rd_Amt2 내역서 전체, 선택된 항목만
|
||||
wcBx_Pnt1 0 절사하여, 1 반올림 하여
|
||||
wcBx_Pnt2 0 소수 0위값을 적용, 1 소수 1위값을 적용, 2 소수 2위값을 적용, 3 소수 3위값을 적용, 4 소수 4위값을 적용
|
||||
wcBx_Pnt1_M 0 절사하여, 1 반올림 하여
|
||||
wcBx_Pnt2_M 0 소수 0위값을 적용, 1 소수 1위값을 적용, 2 소수 2위값을 적용, 3 소수 3위값을 적용, 4 소수 4위값을 적용
|
||||
wcBx_Pnt1_L 0 절사하여, 1 반올림 하여
|
||||
■ wM_Req_ON STmate.Cpm «유지보수기간 연장신청»
|
||||
wEd_Sub 12개월, 6개월, 3개월
|
||||
■ wM_Sel_Prn STmate.Cpm «인쇄할 영역을 선택하세요»
|
||||
cb_PCLASS 당초설계, 변경설계, 분할설계
|
||||
cb_PRTYPE 해당코드 상위의 7레벨공종이하 내역전체, 해당코드 상위의 해당레벨(하위레벨제외)
|
||||
cb_ACTTYP 노무비외 비목 적용안함, 노무비외 재료비로 적용, 노무비외 경비로 적용
|
||||
cb_ACTOPT 노무비 1원미만 버림, 소수 비교후 노무비 우선보정, 소수 비교후 타금액 우선보정
|
||||
cb_CHASU 1차변경, 2차변경, 3차변경, 4차변경, 5차변경, 6차변경, 7차변경, 8차변경
|
||||
■ wM_Set_Sys ST_Sys.CPM «초기값 입력및 수정»
|
||||
cmBx_Sel_RX 계수 ;터널구간, 계수-1;장대터널, 계수-2;펌프준설선, 계수-3;GRAB준설선, 계수-4;버켓준설선
|
||||
cmBX_EXR 시간당중기사용료 단독적용, 중기, 대가, 산근, 내역 전체
|
||||
cmBx_KCD 0 자리, 1 자리, 2 자리
|
||||
cmBx_ACD 0 자리, 1 자리, 2 자리
|
||||
cmBx_ZCD 2 자리, 3 자리
|
||||
cmBx_JCD 0 자리, 1 자리, 2 자리
|
||||
cmBx_ECD 0 자리, 1 자리, 2 자리
|
||||
cmBx_BPN 0 자리, 1 자리, 2 자리
|
||||
■ wM_Stmate_Merge_Code ST_Merge_Code.CPM «설계예산시스템 코드병합»
|
||||
rg_Set_Sys 선택코드만 병합, 선택코드+하위기초단가코드 병합, 모든코드(하위 산근,대가포함) 병합, 코드병합 취소
|
||||
■ wQtyList STmateQty8.CPM «수량산출서»
|
||||
cBoxCode 모든단가, 노무비, 재료비, 경비, 일위대가, 중기비, 단가산출, 견적단가, 대가,산근
|
||||
■ wSrch_PL ST_PList.CPM «프로젝트 DATA검색(명칭, 규격)»
|
||||
wcBx_Type 노무비, 재료비, 경비, 중기비, 일위대가, 단가산출, 일식/표준시장, 내역서
|
||||
|
||||
선택지를 가진 폼 40개, 선택축 272개
|
||||
### STmate 고유 폼 — 모듈별
|
||||
|
||||
■ STmate.Cpm 30개
|
||||
M_Chk_Pw PM_Req_AS frmAddTip frmEditor
|
||||
frmTips wM_About wM_Box_H wM_Boxa
|
||||
wM_Conv_A2W wM_DM_Com wM_D_Restore wM_Dm_1
|
||||
wM_Dm_2 wM_Down_Center wM_Get_Info wM_Get_Value
|
||||
wM_JDCode wM_JajeXLS wM_Mk_Cont wM_Mrg_BSC
|
||||
wM_Req_AS wM_Req_ON wM_Rw_On wM_Sel_Prn
|
||||
wM_Show_Info wM_Status wM_Stmate_Start_8x wM_Xls_Comp
|
||||
wM_iLWi_San wPrjList
|
||||
|
||||
■ ST_P_Nae.CPM 22개
|
||||
PM_Boq_Not PM_Bqm PM_Jab PM_Jab_P
|
||||
PM_Nae PM_NaeW PM_NaeW_P PM_Nae_B
|
||||
PM_Nae_Col PM_Nae_Col_ML PM_Nae_Cont PM_Nae_K0
|
||||
PM_Nae_P PM_Nae_P_K0 PM_Nae_Plan_A PM_Nae_Plan_K
|
||||
PM_Won_A PM_Won_A_C PM_Won_A_L PM_Wonga
|
||||
PM_Wonga_C PM_Wonga_L
|
||||
|
||||
■ ST_Boq.CPM 13개
|
||||
wBoq wBoqRate wExpnd wITNum
|
||||
wKongJong wMBoq wM_Boq_ExecX wM_Expnd
|
||||
wM_Expnd10 wM_From_XLS wM_Rate wM_Ref_Lst
|
||||
wSameCode
|
||||
|
||||
■ ST_P_ConEst.CPM 8개
|
||||
PM_JAB_K PM_NAE_C1 PM_NAE_C2 PM_NAE_C3
|
||||
PM_NAE_K1 PM_NAE_K2 PM_NAE_K3 PM_Nae_Est
|
||||
|
||||
■ ST_PList.CPM 8개
|
||||
wM_Add_Prj wM_Conv_Mode wM_Get_Node wM_Get_Value
|
||||
wM_ST_Restore wPList wST_Dir wSrch_PL
|
||||
|
||||
■ ST_P_List.CPM 7개
|
||||
PM_Comp_M PM_Dan PM_Dan_L PM_SanMok
|
||||
PM_SanMok_L PM_SanMok_P PM_iLMok
|
||||
|
||||
■ ST_P_Excav.CPM 6개
|
||||
PM_NAE_Ex2 PM_NAE_Ex2T PM_Nae_Ex1 PM_Nae_Ex1T
|
||||
PM_Nae_ExC PM_Nae_ExCT
|
||||
|
||||
■ ST_P_Joong.CPM 6개
|
||||
PM_JOONG PM_JOONG2 PM_JOONG2_L PM_JOONG_L
|
||||
PM_Joong_C PM_Joong_C_L
|
||||
|
||||
■ ST_KanJub.CPM 5개
|
||||
PM_KAN_RATE wM_GetAMT wM_KAN_RATE wM_KanJub
|
||||
wM_KanJub_K
|
||||
|
||||
■ ST_Jabpum.CPM 4개
|
||||
wM_Edit_Strorage wM_Edt_Hal wM_Inst_CD wM_JabPum
|
||||
|
||||
■ ST_P_Collect.CPM 4개
|
||||
PM_Col_Dan PM_Col_Dan_L PM_Col_X PM_Col_X_L
|
||||
|
||||
■ ST_Prt.CPM 4개
|
||||
PM_Jab_Ord PM_Prn_Ord PM_Prt PM_Sel_St
|
||||
|
||||
■ ST_Viewer.exe 4개
|
||||
wM_About wM_Extr wM_Main__Viewer wM_Sub
|
||||
|
||||
■ DP_MinMsg.CPM 3개
|
||||
mMinMsg_ wInDlgImg wInDlgMemo
|
||||
|
||||
■ ST_EdSan.CPM 3개
|
||||
wM_Edit_EQ wM_Edit_San wM_Edit_USER
|
||||
|
||||
■ ST_Sys.CPM 3개
|
||||
wM_Set_Init wM_Set_JLab wM_Set_Sys
|
||||
|
||||
■ ST_U_ChgCode.CPM 3개
|
||||
uM_ChgCode uM_Chg_Plus uM_ReplCode
|
||||
|
||||
■ ST_U_ConBD.CPM 3개
|
||||
uM_ConBD uM_ConQTY uM_ConQTY9
|
||||
|
||||
■ ST_U_Convert.CPM 3개
|
||||
uM_BSC_M uM_ConstType uM_XML_Info
|
||||
|
||||
■ ST_Merge_Code.CPM 3개
|
||||
wM_Stmate_Merge_Code wM_Sub wSrch_PL
|
||||
|
||||
■ JDLCHK.Size.dll 2개
|
||||
frm_CheckProgress frm_JDLAnno
|
||||
|
||||
■ ST_Com_V.CPM 2개
|
||||
wInDlgImg wInDlgMemo
|
||||
|
||||
■ ST_EdiLWi.CPM 2개
|
||||
wM_Edit_XRate wM_Edit_iLWi
|
||||
|
||||
■ ST_FindUse.CPM 2개
|
||||
wM_FindBoq wM_FindUse
|
||||
|
||||
■ ST_P_iLWi.CPM 2개
|
||||
PM_iLWi PM_iLWi_S
|
||||
|
||||
■ ST_P_San.CPM 2개
|
||||
PM_San_L PM_San_P
|
||||
|
||||
■ ST_U_ADL.CPM 2개
|
||||
NMShow wM_ADL
|
||||
|
||||
■ ST_Func_C.CPM 2개
|
||||
wInDlgImg wInDlgMemo
|
||||
|
||||
■ ST_Wal.CPM 2개
|
||||
wM_Get_GJ wM_Stmate_Get_Wal
|
||||
|
||||
■ JDLCHK.Tab.dll 1개
|
||||
frm_CheckProgress
|
||||
|
||||
■ JDLCHK.Tab_33.dll 1개
|
||||
frm_CheckProgress
|
||||
|
||||
■ ST_U_Archive.CPM 1개
|
||||
uM_Archive
|
||||
|
||||
■ ST_U_ChgAmt.CPM 1개
|
||||
uM_Chg_Amt
|
||||
|
||||
■ ST_U_DelCode.CPM 1개
|
||||
uM_DelCode
|
||||
|
||||
■ ST_U_DelPrj.CPM 1개
|
||||
uM_DelPrj
|
||||
|
||||
■ ST_U_Indx.CPM 1개
|
||||
uM_Indx
|
||||
|
||||
■ ST_U_Merge.CPM 1개
|
||||
uM_Merge
|
||||
|
||||
■ STmateQty8.CPM 1개
|
||||
wQtyList
|
||||
|
||||
■ ST_U_APatch.CPM 1개
|
||||
wM_Stmate_APatch
|
||||
|
||||
■ STmate8.Exe 1개
|
||||
wM_Host
|
||||
|
||||
■ View_Old_San.CPM 1개
|
||||
M_Hrp_San
|
||||
|
||||
|
||||
### 갈래별 (총 172개)
|
||||
모달 편집 66개
|
||||
인쇄 63개
|
||||
편집 창 19개
|
||||
기타 17개
|
||||
보조 창 7개
|
||||
@@ -0,0 +1,52 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""STmate 고유 폼 목록을 모듈·갈래별로 정리."""
|
||||
import sys, io, pathlib, re, collections
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
|
||||
ROOT = pathlib.Path(r"C:\경영정보(주)\System")
|
||||
THIRD = re.compile(r"^(Dclhrp60|designide60|RTL60|VCL60|DBRTL60|BDERTL60|RealGrid|Apollo|dsnide)", re.I)
|
||||
HRLIB = {"HReportUf","HRPageRf","HRPreVUf","HRSaveUf","LoginDialog","PasswordDialog","HRGridCUf",
|
||||
"HRGridFUf","HRGroupUf","HRLinkFf","HRPrintUf","HRExprUf","HRFieldUf","HRSortUf"}
|
||||
def forms(b):
|
||||
out=[]
|
||||
for m in re.finditer(rb"TPF0", b):
|
||||
s=m.end()
|
||||
if s>=len(b): continue
|
||||
n=b[s]
|
||||
if not (3<=n<=40): continue
|
||||
cls=b[s+1:s+1+n]
|
||||
if not re.fullmatch(rb"T[A-Za-z0-9_]+", cls): continue
|
||||
s2=s+1+n
|
||||
if s2>=len(b): continue
|
||||
n2=b[s2]
|
||||
if not (1<=n2<=40): continue
|
||||
nm=b[s2+1:s2+1+n2]
|
||||
if not re.fullmatch(rb"[A-Za-z_][A-Za-z0-9_]*", nm): continue
|
||||
out.append(nm.decode("latin1"))
|
||||
return out
|
||||
|
||||
per={}
|
||||
for p in sorted(ROOT.rglob("*")):
|
||||
if not p.is_file() or THIRD.match(p.stem): continue
|
||||
try: b=p.read_bytes()
|
||||
except Exception: continue
|
||||
if b[:2]!=b"MZ": continue
|
||||
f=[x for x in forms(b) if x not in HRLIB]
|
||||
if f: per[p.name]=sorted(set(f))
|
||||
|
||||
def kind(n):
|
||||
if n.startswith("PM_"): return "인쇄"
|
||||
if n.startswith(("wM_","M_")): return "모달 편집"
|
||||
if n.startswith("w"): return "편집 창"
|
||||
if n.startswith("frm"): return "보조 창"
|
||||
return "기타"
|
||||
cnt=collections.Counter(); tot=0
|
||||
print("### STmate 고유 폼 — 모듈별")
|
||||
for nm,f in sorted(per.items(), key=lambda x:-len(x[1])):
|
||||
if not f: continue
|
||||
tot+=len(f)
|
||||
for x in f: cnt[kind(x)]+=1
|
||||
print("\n■ %-24s %2d개" % (nm, len(f)))
|
||||
for i in range(0,len(f),4):
|
||||
print(" " + " ".join("%-22s"%x for x in f[i:i+4]))
|
||||
print("\n\n### 갈래별 (총 %d개)"%tot)
|
||||
for k,v in cnt.most_common(): print(" %-10s %3d개" % (k,v))
|
||||
@@ -0,0 +1,38 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""PE 안의 이름 붙은 Delphi 폼(TPF0)을 뽑아 .dfm 으로 저장. 원본은 읽기만."""
|
||||
import sys, io, re, pathlib
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
|
||||
ROOT = pathlib.Path(r"C:\경영정보(주)\System")
|
||||
OUT = pathlib.Path(r"C:\Users\umsan\AppData\Local\Temp\claude\D--aislo-wt-sub\df75230a-b05b-4088-ad34-bb0c9da0a312\scratchpad\forms")
|
||||
OUT.mkdir(exist_ok=True)
|
||||
|
||||
want = sys.argv[1:] or ["wM_Edt_Hal","wM_JabPum","wM_Edit_San","wM_Set_Init","wM_Set_Sys","wBoq","wBoqRate"]
|
||||
found = {}
|
||||
for p in sorted(ROOT.rglob("*")):
|
||||
if not p.is_file(): continue
|
||||
try: b=p.read_bytes()
|
||||
except Exception: continue
|
||||
if b[:2]!=b"MZ": continue
|
||||
for m in re.finditer(rb"TPF0", b):
|
||||
s=m.end()
|
||||
if s>=len(b): continue
|
||||
n=b[s]
|
||||
if not (3<=n<=40): continue
|
||||
cls=b[s+1:s+1+n]
|
||||
if not re.fullmatch(rb"T[A-Za-z0-9_]+", cls): continue
|
||||
s2=s+1+n; n2=b[s2] if s2<len(b) else 0
|
||||
if not (1<=n2<=40): continue
|
||||
nm=b[s2+1:s2+1+n2]
|
||||
try: nms=nm.decode("latin1")
|
||||
except Exception: continue
|
||||
if nms not in want or nms in found: continue
|
||||
# 끝 찾기: 다음 TPF0 또는 넉넉히 자름
|
||||
nxt=b.find(b"TPF0", m.end())
|
||||
end = nxt if nxt>0 else min(len(b), m.start()+400000)
|
||||
blob = b[m.start():end]
|
||||
f = OUT/("%s.dfm"%nms)
|
||||
f.write_bytes(blob)
|
||||
found[nms]=(p.name, len(blob))
|
||||
for k in want:
|
||||
if k in found: print(" ✅ %-16s %-22s %7d B" % (k, found[k][0], found[k][1]))
|
||||
else: print(" ✗ %-16s 못 찾음" % k)
|
||||
@@ -0,0 +1,62 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""STmate 고유 폼 전수 — 캡션·선택지를 뽑아 UI 카탈로그를 만든다. 원본은 읽기만."""
|
||||
import sys, io, re, pathlib, importlib.util, collections
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8", errors="replace")
|
||||
spec=importlib.util.spec_from_file_location("pd", r"D:\aislo-wt\sub\resources\knowledge\original\경쟁사 프로그램\STmate 분석\40_스크립트\parse_dfm.py")
|
||||
pd=importlib.util.module_from_spec(spec); spec.loader.exec_module(pd)
|
||||
ROOT=pathlib.Path(r"C:\경영정보(주)\System")
|
||||
THIRD=re.compile(r"^(Dclhrp60|designide60|RTL60|VCL60|DBRTL60|BDERTL60|RealGrid|Apollo|dsnide|JDLCHK)",re.I)
|
||||
HRLIB={"HReportUf","HRPageRf","HRPreVUf","HRSaveUf","LoginDialog","PasswordDialog"}
|
||||
|
||||
def blobs(b):
|
||||
out=[]; pos=[m.start() for m in re.finditer(rb"TPF0", b)]
|
||||
for i,s in enumerate(pos):
|
||||
e = pos[i+1] if i+1<len(pos) else len(b)
|
||||
p=s+4
|
||||
if p>=len(b): continue
|
||||
n=b[p]
|
||||
if not (3<=n<=40): continue
|
||||
cls=b[p+1:p+1+n]
|
||||
if not re.fullmatch(rb"T[A-Za-z0-9_]+", cls): continue
|
||||
p2=p+1+n; n2=b[p2] if p2<len(b) else 0
|
||||
if not (1<=n2<=40): continue
|
||||
nm=b[p2+1:p2+1+n2]
|
||||
if not re.fullmatch(rb"[A-Za-z_][A-Za-z0-9_]*", nm): continue
|
||||
out.append((nm.decode("latin1"), b[s:e]))
|
||||
return out
|
||||
|
||||
def walk(n, out):
|
||||
if isinstance(n,dict):
|
||||
pr=n.get("properties") or {}
|
||||
cap=pr.get("Caption")
|
||||
items=None
|
||||
for k,v in pr.items():
|
||||
if k.lower().endswith("items.strings") or k=="Items": items=v
|
||||
if isinstance(cap,str) and any(ord(c)>127 for c in cap): out["cap"].append(cap.strip())
|
||||
if isinstance(items,list) and items: out["items"].append((n.get("name",""), [str(x) for x in items]))
|
||||
for c in n.get("children",[]) or []: walk(c,out)
|
||||
|
||||
cat={}
|
||||
for p in sorted(ROOT.rglob("*")):
|
||||
if not p.is_file() or THIRD.match(p.stem): continue
|
||||
try: b=p.read_bytes()
|
||||
except Exception: continue
|
||||
if b[:2]!=b"MZ": continue
|
||||
for nm, blob in blobs(b):
|
||||
if nm in HRLIB or nm in cat: continue
|
||||
try:
|
||||
r=pd.Reader(blob); r.take(4); root=r.component(root=True)
|
||||
except Exception: continue
|
||||
o={"cap":[],"items":[]}; walk(root,o)
|
||||
if o["cap"] or o["items"]: cat[nm]=(p.name,o)
|
||||
|
||||
print("### 파싱 성공한 STmate 고유 폼 %d개\n" % len(cat))
|
||||
tot_i=0
|
||||
for nm,(mod,o) in sorted(cat.items()):
|
||||
if not o["items"]: continue
|
||||
tot_i+=len(o["items"])
|
||||
title=o["cap"][0] if o["cap"] else ""
|
||||
print("■ %-20s %-20s %s" % (nm[:20], mod[:20], ("«%s»"%title[:30]) if title else ""))
|
||||
for cn, its in o["items"][:8]:
|
||||
print(" %-18s %s" % (cn[:18], ", ".join(its)[:88]))
|
||||
print("\n선택지를 가진 폼 %d개, 선택축 %d개" % (sum(1 for _,(_,o) in cat.items() if o["items"]), tot_i))
|
||||
@@ -47,6 +47,7 @@
|
||||
| 19 | **진행률 장부** — 어디까지 봤고 무엇이 남았나 |
|
||||
| 20 | **설정파일과 보고서 카탈로그** — 간접비 코드 사전, 서식 75종 |
|
||||
| 21 | **정정과 트랙 통합** — `SMT` 정정, 지식DB 세 트랙, 암호화의 성격 |
|
||||
| 22 | **UI 폼 분석** — 선택축 272개, 화면에 남아 있던 계산 규칙 |
|
||||
|
||||
## 확정된 굵직한 것
|
||||
|
||||
|
||||
Reference in New Issue
Block a user