# [출하] 포장 일반 및 자동화 프로그램

### **1. 프로그램 정보**

#### - DUALSONIC SalesPacking MES Program (Ver. 1.1.2)

- **설치 위치:** 4층 포장 구역  
- **실행 파일:** `SalesPacking_MES_API_Project.exe`

#### - 주요 기능
- 출하장 제품의 자동 포장 처리지시에 따라 포장 작업을 지원합니다.  
- 일반건 및 대량건의 무게 측정을 자동화합니다.
---
### **2. 프로그램 실행 화면**

| 메인 화면                         | 설정 화면                         |
| ----------------------------- | ------------------------------ |
| ![메인화면](ui_images/main.png) | ![설정화면](ui_images/setting.png) |

---

### **3. UI 구성요소**

* **상단 영역**: MES 로그인, 송장 등록, P/N 입력 버튼, 패킹코드, 설정, 종료
* **오른쪽 영역**: 요청 수량, 작업 수량, 잔여 수량, 제품 사양(메인/단일 정보, 수량, 시작/종료/소요/평균 시간), 초기화/등록 버튼
* **왼쪽 영역**: 대기 중 출고 조건(구성 품목 명, 구매 수량, 확인 수량)
* **설정 화면**:

  * 통신 포트, 자동 설정
  * 무게 오차범위 설정
  * 출고 이벤트/이벤트명 등록
  * 포장 개수 설정, 프린터 및 PC 식별 코드 관리
  * 라벨 변경, 새로고침, 저장

---

### **4. Mode1 vs Mode2 동작 흐름**

| 구분            | Mode1 (일반 모드)              | Mode2 (자동화 모드)            |
| ------------- | -------------------------- | ------------------------- |
| **조건**        | `rdbMode1.Checked = True`  | `rdbMode2.Checked = True` |
| **작동 방식**     | 수동 포장 (바코드/무게 수동 처리)       | 자동 포장 (API + 무게 자동 처리)    |
| **무게 검증**     | 체크박스 `ckbWeight`에 따라 수동 측정 | 라디오버튼 `rdbAuto2`로 자동 측정   |
| **주문 처리**     | 바코드 기반 단건 처리               | ERP/MES API 연동, 다건 처리     |
| **Save Flow** | `saveStart()` → 수동 데이터 저장  | `saveStart()` → 자동 데이터 저장 |
| **세트 코드 처리**  | 수동 분해 또는 처리 없음             | 세트코드 자동 분해 및 구성품 계산       |
| **로그 저장**     | 필요 시 `saveLogOrder()`      | 자동 로그 저장 (무게 포함)          |
| **적용 예시**     | 단일 상품, 실험용 포장              | 대량 출하용 자동 포장 시스템          |

---

### **5. 전체 동작 FlowChart**

```mermaid
flowchart TD
    A["프로그램 시작 (mainForm_Load)"] --> B["설정 로드 (loadConfig)"]
    B --> C["UI 초기화"]
    C --> D["바코드 입력"]
    D --> E["입력값 분기 (codeParsing())"]

    E -->|ERPORDER| F["ERP 처리"]
    E -->|MESORDER| G["MES API 처리"]
    E -->|PRODSCAN| H["제품 스캔 처리"]
    E -->|COMSCAN| I["복수 코드 처리"]
    E -->|PACKING| J["포장 처리"]
    E -->|기타| K["오류 처리"]

    F & G & H & I & J --> L["packingRun() → 조건 검사"]
    L --> M{"조건 만족?"}
    M -->|Yes| N["saveStart() 호출 (DB 저장, 무게검증 등)"]
    M -->|No| O["오류 출력 및 Exit"]

    N --> P["DB 저장"]
    P --> Q["로컬 저장"]
    Q --> R["작업 완료"]
```
