Merge remote-tracking branch 'origin/dev' into sub_laptop_4

충돌 49개 구조물 json + Store.py + test_m02_structure.py — dev 쪽 산출근거 분리(basis/) 구조를 따르고 내 쪽 도면.layers 기본 도면층을 얹어 합침.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EUypcnp5d1gU2aeKh9F2H7
This commit is contained in:
2026-09-27 20:43:35 +09:00
co-authored by Claude Sonnet 5
162 changed files with 9706 additions and 3216 deletions
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "be",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "bg",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "bm_area",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "bm_len",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "bx_len",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "bx_wing",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "cs",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "ec",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "etc",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "fb",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "fp_l",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "fp_w",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "gr_curb",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "gr_rail",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "gr_sign",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_break",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_ford_basin",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_intake",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_pg_rail",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_pv_rail",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_rip_c",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_rip_m",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_rockfall",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_soil_ditch",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_stone_bed",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_stone_ch",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "h_waste",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "memo",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "mr",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "ms",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "no",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "od_cnt",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "od_len",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "pg_in",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "pp_cp",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "pp_len",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "ps",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "pv_a",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "pv_b",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "pv_jt",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "pv_l",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "pv_w",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "rf",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "rv",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "rw",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "sg",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "sta",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "ta",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
+56
View File
@@ -0,0 +1,56 @@
{
"종류": "통합문서",
"판": 1,
"열": "wy",
"서식": [
{},
{
"굵게": true,
"가로": "center",
"세로": "center",
"테두리": {
"위": {
"선": "thin"
},
"아래": {
"선": "thin"
},
"왼": {
"선": "thin"
},
"오른": {
"선": "thin"
}
}
}
],
"시트": [
{
"id": "s1",
"이름": "산출근거",
"칸": {
"A1": {
"값": "공종",
"서식": 1
},
"B1": {
"값": "규격",
"서식": 1
},
"C1": {
"값": "산출 내역",
"서식": 1
},
"D1": {
"값": "단위",
"서식": 1
},
"E1": {
"값": "수량(m당)",
"서식": 1
}
}
}
],
"활성": "s1"
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -15,66 +15,5 @@
"isLocked": false
}
]
},
"산출근거": {
"양식": "산출근거",
"종류": "표",
"판": 1,
"열": [
{
"id": "work",
"머리": [
"공종"
],
"단위": null,
"꼴": "글"
},
{
"id": "spec",
"머리": [
"규격"
],
"단위": null,
"꼴": "글"
},
{
"id": "detail",
"머리": [
"산출 내역"
],
"단위": null,
"꼴": "글"
},
{
"id": "unit",
"머리": [
"단위"
],
"단위": null,
"꼴": "글"
},
{
"id": "qty",
"머리": [
"수량(m당)"
],
"단위": null,
"꼴": "수"
}
],
"줄": [
{
"id": "1",
"값": {}
},
{
"id": "2",
"값": {}
},
{
"id": "3",
"값": {}
}
]
}
}
@@ -0,0 +1,113 @@
/* 스프레드시트 엔진 A 무게 시험 — 큰 시트 불러오기 · 칸 하나 고칠 때 재계산 · 나눗셈 사슬 분모.
* 수치를 JSON 으로 냄 → `test_spreadsheet_bench.py` 가 한도 안인지 봄. 적재 · 가짜 함수는 엔진 시험 헬퍼 것.
*/
const { A, C, E, F, G } = require("./helper_spreadsheet_engine.cjs");
const ms = (fn) => {
const t = process.hrtime.bigint();
const out = fn();
return [Number(process.hrtime.bigint() - t) / 1e6, out];
};
const round = (x) => Math.round(x * 100) / 100;
/** 칸 표 → 시트 하나 통합문서 JSON 글(불러오기 = JSON.parse + 엔진 만들기) */
function bookText(cells) {
const 칸 = {};
for (const [k, v] of Object.entries(cells)) 칸[k] = typeof v === "string" ? { 식: v } : { 값: v };
return JSON.stringify({ 종류: "통합문서", 판: 1, 열: "b", 서식: [{}], 시트: [{ id: "s1", 이름: "무게", 칸 }] });
}
/** 불러오기 · 칸 하나 고치기(가운데 · 맨 앞) 시간 */
function scenario(cells, edits) {
const text = bookText(cells);
const [parseMs, book] = ms(() => JSON.parse(text));
const [loadMs, engine] = ms(() => G.createCalcEngine(book));
const out = { cells: Object.keys(cells).length, kb: Math.round(text.length / 1024), parseMs: round(parseMs), loadMs: round(loadMs) };
for (const [label, a1, value] of edits) {
const times = [];
let redone = 0;
for (let i = 0; i < 5; i++) {
const fx = C.applyCommand(book, { 종류: "칸", 시트: "s1", 칸: { [a1]: { 값: value + i } } });
const [t, list] = ms(() => engine.update(fx.cells));
times.push(t);
redone = list.length;
}
times.sort((x, y) => x - y);
out[label] = { ms: round(times[2]), redone };
}
return [out, engine];
}
const N = 5000;
const result = {};
// ① 얕은 시트 — 칸 1만(값 5천 · 식 5천) · 식마다 이웃 두 칸 · 끝에 합계 하나
{
const cells = {};
for (let i = 1; i <= N; i++) cells[`A${i}`] = (i % 97) / 10;
for (let i = 1; i < N; i++) cells[`B${i}`] = `ROUNDDOWN((A${i}+A${i + 1}/2)*1.3,2)`;
cells[`B${N}`] = `SUM(B1:B${N - 1})`;
const [out, engine] = scenario(cells, [
["editMiddle", "A2500", 3],
["editFirst", "A1", 3],
]);
out.total = E.toCalcValue(engine.value("s1", N - 1, 1));
result.shallow = out;
}
// ② 깊은 사슬 — 칸 1만 · 식 5천이 한 줄로 이어짐(맨 앞 고치면 5천 칸 모두 다시)
{
const cells = {};
for (let i = 1; i <= N; i++) cells[`A${i}`] = 1;
cells.B1 = "A1";
for (let i = 2; i <= N; i++) cells[`B${i}`] = `B${i - 1}+A${i}*1.1`;
const [out, engine] = scenario(cells, [
["editLast", `A${N}`, 2],
["editFirst", "A1", 2],
]);
out.end = E.toCalcValue(engine.value("s1", N - 1, 1));
result.chain = out;
}
// ③ 큰 시트 불러오기 — 실무 최대 모양(271 행 × 253 열) 에 가까운 6만 8천 칸 · 절반이 식
{
const cells = {};
for (let r = 1; r <= 271; r++)
for (let c = 0; c < 253; c++) {
const a1 = A.toA1(r - 1, c);
cells[a1] = c % 2 === 0 ? r + c / 100 : `${A.toA1(r - 1, c - 1)}*2+${A.toA1(Math.max(0, r - 2), c - 1)}/3`;
}
const [out] = scenario(cells, [["editOne", "A1", 5]]);
result.bigSheet = out;
}
// ④ 나눗셈 사슬 — 분모가 커지는 식(1/소수 더하기 · 소수로 나누기) · 상한(10^40) 넘으면 30 자리 십진으로 굳힘
{
const primes = [];
for (let n = 2; primes.length < 2000; n++) if (primes.every((p) => n % p)) primes.push(n);
const cells = { A1: 1, C1: 1 };
for (let i = 2; i <= 2000; i++) {
cells[`A${i}`] = `A${i - 1}+1/${primes[i - 1]}`; // 역수 합 — 분모가 소수 곱으로 부풂
cells[`C${i}`] = `C${i - 1}/${primes[(i * 7) % 2000]}*${primes[(i * 13) % 2000]}`; // 곱 · 나눗셈 사슬
}
const book = JSON.parse(bookText(cells));
const [loadMs, engine] = ms(() => G.createCalcEngine(book));
let maxDigits = 0;
for (let i = 1; i <= 2000; i++)
for (const c of [0, 2]) {
const v = engine.value("s1", i - 1, c);
maxDigits = Math.max(maxDigits, v.d.toString().length);
}
let dbl = 1;
for (let i = 2; i <= 2000; i++) dbl += 1 / primes[i - 1];
const exact = Number(F.fracToString(engine.value("s1", 1999, 0)));
result.divChain = {
cells: 4000,
loadMs: round(loadMs),
maxDenominatorDigits: maxDigits,
sum: F.fracToString(engine.value("s1", 1999, 0)),
relErrVsDouble: Math.abs(exact - dbl) / dbl,
};
}
process.stdout.write(JSON.stringify(result));
+277
View File
@@ -0,0 +1,277 @@
/* =============================================================================
* e_harness.ts — E(도구 모음 · 탭 · 메뉴 · 클립보드) 화면 시험 틀.
* A(주소 · 명령 · 참조 옮김) · B(숫자 형식) 는 아직 0 계약 몸만 있어 `fakes/`(진짜 대신 최소
* 흉내)를 `vite.harness.config.ts` 별칭으로 끼움. dispatch 는 이 파일이 직접 문서에 적용해
* 화면에 곧바로 비침 — 진짜 A `applyCommand` 가 아님(시험 전용).
* ========================================================================== */
import { mountToolbar } from "../../../A00_Common/spreadsheet/spreadsheet_toolbar";
import { mountTabs } from "../../../A00_Common/spreadsheet/spreadsheet_tabs";
import { attachMenu } from "../../../A00_Common/spreadsheet/spreadsheet_menu";
import {
attachClipboard,
parseClipboard,
} from "../../../A00_Common/spreadsheet/spreadsheet_clipboard";
import type {
Cell,
CellRange,
Command,
Sheet,
Workbook,
} from "../../../A00_Common/spreadsheet/spreadsheet_types";
import type {
GridHandle,
Selection,
SpreadsheetContext,
} from "../../../A00_Common/spreadsheet/spreadsheet_view_types";
import { colName, rangeToA1, toA1 } from "./fakes/fake_address";
const log: string[] = [];
const logEl = document.querySelector<HTMLPreElement>("#log")!;
function say(msg: string): void {
log.push(msg);
logEl.textContent = log.join("\n");
}
const book: Workbook = {
종류: "통합문서",
판: 1,
열: "test",
서식: [{}, { 굵게: true }],
시트: [
{
id: "s1",
이름: "측구수로400",
칸: {
A1: { 값: "터파기 계산서", 서식: 1 },
B1: { 값: 12.5 },
C1: { 식: "B1*2" },
},
병합: [],
},
],
활성: "s1",
};
function forEachCell(range: CellRange, fn: (r: number, c: number) => void): void {
for (let r = range.r0; r <= range.r1; r++) for (let c = range.c0; c <= range.c1; c++) fn(r, c);
}
function styleIndexAt(sheet: Sheet, r: number, c: number): number {
return (
sheet.칸[toA1(r, c)]?.서식 ??
sheet.열?.[colName(c)]?.서식 ??
sheet.행?.[String(r + 1)]?.서식 ??
0
);
}
function internStyle(book: Workbook, style: Record<string, unknown>): number {
const json = JSON.stringify(style);
let idx = book.서식.findIndex((s) => JSON.stringify(s) === json);
if (idx === -1) {
book.서식.push(style as never);
idx = book.서식.length - 1;
}
return idx;
}
/** dispatch 가 흉내로 적용 — 진짜 A `applyCommand` 아님(시험 전용, 모양만 맞춤). */
function applyMock(cmd: Command): void {
switch (cmd.종류) {
case "묶음":
cmd.명령.forEach(applyMock);
return;
case "서식": {
const sheet = book.시트.find((s) => s.id === cmd.시트)!;
cmd.범위.forEach((range) =>
forEachCell(range, (r, c) => {
const cur = { ...(book.서식[styleIndexAt(sheet, r, c)] ?? {}) };
for (const [k, v] of Object.entries(cmd.바꿀)) {
if (v === null) delete (cur as Record<string, unknown>)[k];
else (cur as Record<string, unknown>)[k] = v;
}
const key = toA1(r, c);
sheet.칸[key] = { ...sheet.칸[key], 서식: internStyle(book, cur) };
}),
);
return;
}
case "서식지움": {
const sheet = book.시트.find((s) => s.id === cmd.시트)!;
cmd.범위.forEach((range) =>
forEachCell(range, (r, c) => {
const key = toA1(r, c);
if (sheet.칸[key]) delete sheet.칸[key].서식;
}),
);
return;
}
case "내용지움": {
const sheet = book.시트.find((s) => s.id === cmd.시트)!;
cmd.범위.forEach((range) =>
forEachCell(range, (r, c) => {
const key = toA1(r, c);
const cell = sheet.칸[key];
if (!cell) return;
delete cell.값;
delete cell.식;
if (!Object.keys(cell).length) delete sheet.칸[key];
}),
);
return;
}
case "칸": {
const sheet = book.시트.find((s) => s.id === cmd.시트)!;
for (const [key, val] of Object.entries(cmd.칸)) {
if (val === null) delete sheet.칸[key];
else sheet.칸[key] = val as Cell;
}
return;
}
case "병합": {
const sheet = book.시트.find((s) => s.id === cmd.시트)!;
sheet.병합 = [...(sheet.병합 ?? []), rangeToA1(cmd.범위)];
return;
}
case "병합풀기": {
const sheet = book.시트.find((s) => s.id === cmd.시트)!;
const a1 = rangeToA1(cmd.범위);
sheet.병합 = (sheet.병합 ?? []).filter((m) => m !== a1);
return;
}
case "시트더하기":
book.시트.splice(cmd.자리, 0, cmd.시트);
return;
case "시트지우기":
book.시트 = book.시트.filter((s) => s.id !== cmd.시트);
if (book.활성 === cmd.시트) book.활성 = book.시트[0]?.id;
return;
case "시트이름":
book.시트.find((s) => s.id === cmd.시트)!.이름 = cmd.이름;
return;
case "시트옮기기": {
const idx = book.시트.findIndex((s) => s.id === cmd.시트);
const [sheet] = book.시트.splice(idx, 1);
book.시트.splice(cmd.자리, 0, sheet);
return;
}
default:
return;
}
}
const selection: Selection = {
시트: "s1",
범위: [{ r0: 0, c0: 0, r1: 0, c1: 0 }],
활성: { r: 0, c: 0 },
기준: { r: 0, c: 0 },
};
const root = document.querySelector<HTMLDivElement>("#ss-root")!;
const grid: GridHandle = {
root,
render() {},
invalidate() {},
renderSelection() {},
setRefHighlights() {},
cellBox: () => ({ x: 0, y: 0, w: 60, h: 20 }),
hitTest: (clientX) => {
const box = root.getBoundingClientRect();
const x = clientX - box.left;
if (x < 30) return { kind: "rowHead", r: 0, c: 0 };
if (x < 60) return { kind: "colHead", r: 0, c: 0 };
return { kind: "cell", r: selection.활성.r, c: selection.활성.c };
},
reveal() {},
visibleRange: () => ({ r0: 0, c0: 0, r1: 10, c1: 10 }),
editorSlot: () => ({ layer: root, box: { x: 0, y: 0, w: 60, h: 20 } }),
destroy() {},
};
const ctx: SpreadsheetContext = {
root,
book,
readOnly: false,
engine: {
update: () => [],
rebuild() {},
value: (sheetId, r, c) => {
const sheet = book.시트.find((s) => s.id === sheetId);
const cell = sheet?.칸[toA1(r, c)];
if (!cell) return null;
if (cell.식 !== undefined) return { n: 999n, d: 1n };
if (typeof cell.값 === "number") return { n: BigInt(Math.round(cell.값 * 100)), d: 100n };
if (cell.값 === undefined) return null;
return cell.값;
},
precedents: () => [],
snapshot: () => ({}),
},
history: {
push() {},
undo: () => null,
redo: () => null,
canUndo: () => false,
canRedo: () => false,
},
selection,
sheet: () => book.시트.find((s) => s.id === selection.시트)!,
dispatch(command) {
say(`dispatch: ${JSON.stringify(command)}`);
applyMock(command);
toolbar.refresh();
tabs.refresh();
},
undo() {
say("undo");
},
redo() {
say("redo");
},
select(sel) {
Object.assign(selection, sel);
say(`select: ${JSON.stringify(sel)}`);
toolbar.refresh();
},
showSheet(sheetId) {
book.활성 = sheetId;
selection.시트 = sheetId;
say(`showSheet: ${sheetId}`);
tabs.refresh();
toolbar.refresh();
},
grid,
editor: {
editing: () => false,
begin() {},
commit() {},
cancel() {},
sync() {},
},
};
const toolbar = mountToolbar(ctx);
const tabs = mountTabs(ctx);
attachMenu(ctx);
attachClipboard(ctx);
document.querySelector("#toolbar-slot")!.append(toolbar.root!);
document.querySelector("#tabs-slot")!.append(tabs.root!);
say("mounted — 도구 모음 · 탭 · 메뉴 · 클립보드 붙음");
(window as unknown as { __ctx: unknown; __book: unknown }).__ctx = ctx;
(window as unknown as { __ctx: unknown; __book: unknown }).__book = book;
// 클립보드 밖 → 안 시험 — 자리 표시자에 실제로 붙여넣기(Ctrl+V)를 받아 결과를 보임.
const pasteZone = document.querySelector<HTMLDivElement>("#paste-zone")!;
const pasteOut = document.querySelector<HTMLPreElement>("#paste-out")!;
pasteZone.addEventListener("paste", (ev) => {
ev.preventDefault();
const html = ev.clipboardData?.getData("text/html") ?? "";
const text = ev.clipboardData?.getData("text/plain") ?? "";
const block = parseClipboard(html, text, { r: 0, c: 0 });
pasteOut.textContent = `html:\n${html}\n\ntext:\n${text}\n\nblock:\n${JSON.stringify(block, null, 2)}`;
});

Some files were not shown because too many files have changed in this diff Show More