# 실행 내보내기

> 실행의 옮길 수 있는 사본과 생성한 PDF입니다. 각 명령이 무엇을 요구하는지, 파일 이름을 어떻게 짓는지, 그리고 CSV와 XLSX와 GLAB와 PDF에 정확히 무엇이 담기는지입니다.

열린 실행 위의 명령 줄은 옮길 수 있는 사본을 먼저, 그다음에 발행하는 문서를 담고 있습니다([실행 기록 상세](histories-record#the-strip)). 아래의 네 명령은 **이력 내보내기와 가져오기** 권한을 요구하며, 넷 다 실행 파일을 읽는 일입니다. 런타임이 정지한 동안에도, 유닛이 기록하는 동안에도 그대로 쓸 수 있고, 어느 것도 실행에 아무것도 쓰지 않습니다.

명령 줄에는 다섯 번째 명령 **새 라벨**이 있는데, 이것은 내보내기도 읽기도 아닙니다. 라벨을 실행 안으로 내보내고 그 사실을 증거로 거기에 기록하므로, 내보내기 권한이 아니라 **절차 실행**을 요구하며 그것이 속한 문서와 함께 설명합니다([라벨과 보고서](histories-documents)).

| 명령 | 만들어 내는 것 | 쓸 수 있는 실행 | 놓이는 곳 |
| --- | --- | --- | --- |
| CSV 내보내기 | 원시 데이터로그를 글자로 내놓습니다. | 아직 기록 중인 실행을 포함해 모든 실행. | 브라우저 내려받기이며, 스테이션 자신의 창에서도 그렇습니다("CSV 내보냄 · 파일"). |
| XLSX 내보내기 | 실행 식별과 메타데이터와 형식이 붙은 데이터로그가 든 Excel 통합 문서입니다. | 아직 기록 중인 실행을 포함해 모든 실행. 아직 아무것도 기록하지 않은 실행은 "실행에 아직 머리말 스냅숏이 없습니다. 잠시 뒤에 다시 시도하십시오."라고 답합니다. | 브라우저 내려받기("XLSX 내보냄 · 파일"). |
| GLAB 내보내기 | 다른 스테이션이 가져올 수 있는, 옮길 수 있는 `.glab` 파일 하나에 실행 전체를 담습니다. | 완료, 중단됨, 실패인 실행만. | 브라우저 내려받기("GLAB 내보냄 · 파일(크기)"). |
| PDF 생성 | 선택기가 고른 서식으로 실행 전체에서 새 보고서 PDF를 짭니다. | 기록을 마친 모든 실행. | 데이터 루트의 보고서 폴더에 놓인 뒤 열립니다. |

실행 도중의 CSV나 XLSX 내보내기는 앞뒤가 맞는 부분 사본입니다. 얼어붙은 머리는 실행이 시작될 때 쓰이므로, 내보낸 파일은 열 전체와 그때까지 기록된 행을 담습니다. 파일에 두 번째로 접속하는 것이 아니라 살아 있는 기록을 통해 읽습니다. 내보낸 파일의 모든 날짜와 시각은 [설정](settings-localization)에서 정한 형식을 따르고, 파일마다 그 시각을 어느 기준으로 읽어야 하는지를 밝힙니다. 내보낸 시점 스테이션의 시차인 "UTC" 또는 "UTC±hh:mm"입니다.

## 파일 이름 {#file-names}

CSV, XLSX, GLAB, PDF는 실행마다 하나의 기본 이름을 함께 씁니다. 스테이션의 날짜와 시각 형식으로 적은 시작 시각에서 구분 기호를 파일에 쓸 수 있는 글자로 바꾼 것, 그다음 모델과 유닛과 절차의 이름입니다("02-09-2026 14-05-30 - 항온항습 챔버 - 유닛 1 - 유지 시험"). 각 토막은 48자로 줄이고 Windows가 거부하는 글자를 걷어냅니다. 기본 이름은 오래 잡아 두므로 한 실행을 거듭 내보내도 다시 시작한 뒤까지 같은 이름을 씁니다. 같은 이름에 닿게 될 다른 실행만이 자기 신원에서 나온 짧은 꼬리를 받습니다. 액션이 내보낸 보고서는 기본 이름 뒤에 그룹의 이름을 붙이고, 여기에서 생성한 PDF는 기본 이름만 그대로 씁니다. 파일은 모두 임시 이름으로 다 쓴 뒤에야 발행되므로, 도중에 그만둔 내보내기가 제품 확장자를 단 반쪽 파일을 남기는 일은 없습니다.

## CSV {#csv}

**Timestamp** 열 하나가 시각 기준을 붙인 "Timestamp (UTC-03:00)"라는 머리로 먼저 오고, 그다음 얼어붙은 열 순서대로 기록된 채널마다 값 열이 옵니다. 값 열의 머리는 실행이 그 열에 얼려 둔 이름(유닛에서 힘을 가진 별칭, 없었으면 채널 이름)에 공학 단위를 대괄호로 붙인 것이고("온도 [°C]"), 그 옆에 **Good** 또는 **Unavailable**이라고 적는 품질 열이 붙습니다("온도 [°C] Quality"). 이 머리는 실행의 차트와 보고서가 같은 열에 붙이는 이름입니다. 값 열은 데이터로그가 담아 둔 것을 그대로 두고(아무것도 없었으면 빈칸), 참과 거짓은 `true`와 `false`로 적으며, 날짜 형식의 채널은 스테이션의 형식으로 적습니다. 구분 기호나 따옴표나 줄바꿈이 든 값은 따옴표로 묶습니다. `=`, `+`, `-`, `@`로 시작하는 글자 칸은 앞에 작은따옴표를 붙여 스프레드시트가 수식이 아니라 글로 읽게 합니다. 머리의 열 이름과, 설비에서 오는 글자 채널의 읽은 값이 그렇습니다. 숫자에는 결코 붙이지 않으므로 음수 값은 숫자로 남습니다.

파일은 스테이션의 소수 구분 기호 설정을 따릅니다. 소수점이 마침표이면 목록 구분 기호는 `,`이고, 소수점이 쉼표이면 `;`이므로 그 지역의 스프레드시트에서 깔끔하게 열립니다. 숫자는 천 단위 구분 기호 없이, 데이터로그가 담아 둔 자릿수 그대로 적습니다. 글자는 UTF-8입니다.

## XLSX {#xlsx}

통합 문서는 Field와 Value 두 열을 머리로 가진 **Run** 시트로 시작합니다.

| Field | 내용 |
| --- | --- |
| Run ID | 실행의 고유한 신원입니다. |
| Run Name, Model, Model Revision, Unit, Procedure | 실행이 기록될 때 얼어붙은 이름들이며, 실행이 값을 가지지 않은 자리는 빈칸입니다. |
| Started At, Finished At | 실행의 처음과 끝입니다. 아직 기록 중인 실행은 Finished At이 **In progress**입니다. |
| Time Zone | 통합 문서의 모든 시각을 읽는 기준입니다. |
| State | 내보낸 시점의 수명 주기 상태입니다. |
| Result | 종합 판정(OK, NOK, Indeterminate, None 중 하나)이며, 실행이 아직 기록 중이면 **In progress**입니다. |
| Termination | None, 또는 StopInterlock입니다. |
| Interval (ms) | 기록 주기입니다. |
| Imported At, Imported From | 다른 설치본에서 가져온 사본에만 있습니다. 언제 여기에 들어왔는지와 어느 파일에서 왔는지입니다. 여기에서 기록한 실행에는 두 줄 다 없습니다. |
| Notes | 실행의 메모입니다. |

그다음에 Metadata와 Value라는 두 번째 머리가 오고, 시작 시점에 기록된 메타데이터 항목마다 한 줄씩 묻는 순서대로 늘어섭니다. 이어서 **Datalog** 시트가 하나 이상 오는데, 열 순서와 채널 머리는 CSV와 같고, 머리 줄은 고정되어 있으며, 모든 시트에 자동 필터가 붙고 눈금선은 없습니다. Excel의 시트 한 장 한도인 1,048,576행보다 긴 데이터로그는 **Datalog 2**, **Datalog 3**처럼 저마다 자기 머리를 가진 시트로 저절로 나뉩니다.

값은 형식이 붙은 칸으로 적습니다. 정수와 유한한 소수는 데이터로그가 담아 둔 자릿수 그대로 원래의 숫자로, 참과 거짓은 원래의 TRUE와 FALSE로 적습니다. Excel 자체가 유효 숫자 15자리까지만 다루므로 그 너머의 자릿수는 거기에서 보이지 않지만 파일은 담고 있습니다. 유한하지 않은 읽은 값과 날짜 형식의 채널과 시각은 글자입니다. 품질이 **Unavailable**인 읽은 값은 값 칸을 비워 두고 품질 열이 그렇다고 말합니다. Excel의 16,384열보다 많은 열이 필요한 실행과, 32,767자 한도를 넘는 글자 칸은 잘린 통합 문서를 내놓는 대신 이유를 붙여 거부합니다.

## GLAB {#glab}

`.glab` 파일은 실행 자신의 SQLite 파일을 앞뒤가 맞게 쪽 단위로 뜬 사본이며, 실행이 도는 채로 뜹니다. 압축 껍데기도, 목록 파일도, 파생된 문서도, 발행된 PDF도 없습니다. 실행 파일이 담은 것을 모두 담습니다. 얼어붙은 스냅숏, 행, 메타데이터, 레시피가 쓴 값, 판정 기준, 발생 기록, 코멘트, 주석, 생산성 기록, 얼어붙은 바이트가 든 라벨 산출물, 그리고 보관한 사본이 있다면 그것까지 딸린 보고서 등록 기록입니다. 다른 내보내기와 같은 기본 이름을 쓰고, 완전히 다 쓴 뒤에야 발행됩니다. 다른 스테이션은 [실행 가져오기](histories-import)로 이것을 도로 받아들입니다.

## PDF {#pdf}

**PDF 생성**은 옆의 선택기가 고른 서식으로 보고서를 짭니다. "(절차의 보고서)"는 오늘의 내보내기 순서에서 절차의 첫 완료 보고서 명령이 이름 댄 서식입니다(완료 시점에 보고서를 내보내지 않는 절차라면 첫 시작 명령). 사라진 절차, 보고서를 내보내지 않는 절차, 그리고 삭제된 서식은 모든 구획을 담는 기본값으로 물러나므로, 다시 만들어 내는 일은 그것을 썼던 구성보다 오래 살아남습니다. 라이브러리의 다른 서식도 고를 수 있습니다. 실행 파일이 그 자체로 충분하기 때문입니다. PDF는 보고서 폴더에 실행의 기본 이름으로 발행되며, 앞서 손으로 그린 것을 대신하고, 실행에는 아무것도 등록하지 않습니다.

스테이션 자신의 창에서는 다 만든 PDF가 시스템의 PDF 뷰어에서 열리고, 그것이 실패하면 브라우저 내려받기로 물러납니다("보고서를 열지 못했습니다. 대신 내려받습니다."). 브라우저에서는 로컬이든 원격이든 새 탭에서 열립니다. 쪽에 무엇이 담기는지는 [보고서 서식](process-reports#what-the-pdf-prints)에 있습니다. 실행에 이미 등록된 보고서는 [라벨과 보고서](histories-documents)에서 다시 내보내며, 그쪽은 결코 다시 짜지 않습니다.
