[출하] 패킹 삭제 프로그램
1. 프로그램 개요
항목 |
내용 |
프로그램 명 |
PackingCodeRemover |
실행 파일 명 |
PackingCodeRemover.exe |
설치 위치 |
4층 포장 구역 컴퓨터 |
용도 |
바코드(시리얼번호) 입력을 통한 패킹 조회 및 삭제 처리 DB에서 패킹 구성품 정보를 조회하여 필요시 패킹 데이터 및 전표 데이터 삭제 실제 DELETE가 아닌 UPDATE 방식 사용 |
2. 프로그램 UI
메인 화면 |
 |
3. 기능 요약
기능 |
설명 |
바코드 자동 인식 조회 |
바코드 스캔 시 3초 대기 후 자동으로 DB 조회 실행, 입력 변화 감지를 통한 자동화 처리 |
패킹 정보 조회 |
입력된 패킹코드를 기준으로 2개 테이블 조인하여 패킹 구성품 및 주문 정보 조회 |
구성품 목록 표시 |
DataGridView에 구성품명, 수량, 시리얼번호를 표시하여 삭제 전 확인 가능 |
선택적 삭제 처리 |
체크박스 설정에 따라 전표 데이터만 삭제하거나 패킹+전표 데이터 함께 삭제 가능 |
삭제 로그 기록 |
삭제 시 시리얼번호를 note 필드에 기록하여 추적 가능하도록 처리 |
4. 사용자 조작 흐름
[사용자 입력]
↓ ① 바코드 스캔 또는 수동 입력 (PackingCode)
[txbPacking_TextChanged → SetInputCnt → timer_barcode]
↓ 3초 대기 후 자동 실행
[btnReadDB_Click]
↓
[db_select(serial) → SQL 조인 쿼리 실행]
↓
[item_out() → 구성품 정보 추출]
↓ ② 구성품 리스트 표시
[dgv_pack_item에 데이터 로드]
↓
[사용자 삭제 옵션 선택]
↓ ③ 삭제 버튼 클릭
[btn_delete_Click]
↓ 체크박스 상태에 따라 분기
├ 전표만 삭제 → state_delete()
└ 패킹+전표 삭제 → pack_delete() + state_delete()
↓
[UPDATE 쿼리 실행 → 논리적 삭제 처리]
**데이터 흐름**
[바코드 입력] → [패킹 조회] → [구성품 확인] → [선택적 삭제] → [로그 기록]
5. 데이터베이스 구조
조회 대상 테이블 (로컬 DB)
테이블명 |
용도 |
주요 컬럼 |
jomtTesterDB.jomtSalesPackingTbl |
패킹 구성품 정보 |
PackingCode, Data, Main_Product_SN, 각 구성품 수량 및 시리얼 |
jomtOrderDB.jomtOrderTbl |
주문/전표 정보 |
Order_Code, Orderer_Name, Phone_Number, Invoice_Number, Packing_Code |
삭제 처리 방식
삭제 유형 |
대상 테이블 |
처리 방법 |
패킹 데이터 삭제 |
jomtTesterDB.jomtSalesPackingTbl |
PackingCode를 'null_코드'로 변경, 시리얼 필드들 NULL 처리 |
전표 데이터 삭제 |
jomtOrderDB.jomtOrderTbl |
Invoice_Number, Packing_Code, Serial_Number 등 NULL 처리 |
6. 구성품 매핑 테이블
구성품 코드별 제품명 매핑
인덱스 |
구성품명 |
비고 |
0 |
DUALSONIC Pro 1Set (KR) / DUALSONIC Lux 1Set (KR) |
시리얼 앞자리 "10" 여부로 분기 |
1 |
DUALSONIC Elixir MASK 5EA |
- |
2 |
DUALSONIC Elixir MASK 10EA |
- |
3 |
[사은품] 벨크로헤어밴드 |
- |
4 |
DUALSONIC Blooming Moisture Gel |
- |
5 |
DUALSONIC Blooming Moisture Gel(30ml * 5EA) |
- |
6 |
DUALSONIC Skin Cell Elixir Ampoule |
- |
7 |
DUALSONIC Skin Cell Elixir Cream |
- |
8 |
[사은품] 우산 |
- |
9 |
[사은품] 손풍기 |
- |
10 |
충전기 Assy |
- |
11 |
마이크로 충전 케이블 |
- |
12 |
DUALSONIC Skin Elixir Toner |
- |
13 |
DUALSONIC 가죽 케이스 세트 |
- |
14 |
DUALSONIC DUST BAG 1BOX |
- |
15 |
사용자 정의 품목 |
bag_type 값 사용 |
16 |
사용자 정의 품목 |
etc_name 값 사용 |
17 |
DUALSONIC Pro FACE CARTRIDGE |
- |
18 |
DUALSONIC Pro Eye CARTRIDGE |
- |
19 |
DUALSONIC Pro Body Cartridge 1Set Rev.0 (KR) |
- |
20 |
DUALSONIC Lux FACE CARTRIDGE |
- |
21 |
DUALSONIC Lux Eye CARTRIDGE |
- |
22 |
DUALSONIC Lux Body Cartridge 1Set Rev.0 (KR) |
- |
23 |
MAXIMUM FULL PACK (KR) |
- |
24 |
Alpha Set (KR) |
- |
25 |
Alpha FACE CARTRIDGE |
- |
26 |
Alpha Eye CARTRIDGE |
- |
27 |
Alpha Body CARTRIDGE |
- |
28 |
Alto PACK (KR) |
- |
29 |
Effect PACK (KR) |
- |
7. 주요 SQL 쿼리
패킹 조회 쿼리
SELECT
IFNULL(sale.PackingCode,'NULL') as PackingCode,
IFNULL(sale.Data,'NULL') as PackingDate,
IFNULL(sale.Main_Product_SN,'NULL') as MainProductSN,
IFNULL(sale.Set_Cnt,'0') as SetCount,
IFNULL(sale.Pro_Face_Serial,'NULL') as ProFaceSerial,
IFNULL(sale.Pro_Eye_Serial,'NULL') as ProEyeSerial,
IFNULL(otb.Order_Code,'NULL') as OrderCode,
IFNULL(otb.Orderer_Name,'NULL') as OrdererName,
IFNULL(otb.Phone_Number,'NULL') as PhoneNumber,
IFNULL(otb.Invoice_Number,'NULL') as InvoiceNumber
FROM jomtTesterDB.jomtSalesPackingTbl AS sale
LEFT JOIN jomtOrderDB.jomtOrderTbl AS otb
ON sale.PackingCode = otb.Packing_Code
WHERE sale.PackingCode = '입력된패킹코드'
GROUP BY sale.PackingCode
패킹 데이터 삭제 쿼리
UPDATE jomtTesterDB.jomtSalesPackingTbl
SET
PackingCode = 'null_[기존패킹코드]',
Main_Product_SN = NULL,
Main_FACE_SN = NULL,
Main_EYE_SN = NULL,
Pro_Face_Serial = NULL,
Pro_Eye_Serial = NULL,
Pro_Body_Serial = NULL,
note = '[삭제된시리얼번호들]'
WHERE PackingCode = '[패킹코드]'
전표 데이터 삭제 쿼리
UPDATE jomtOrderDB.jomtOrderTbl
SET
Invoice_Number = NULL,
Packing_Code = NULL,
Serial_Number = NULL,
Buy_Type = NULL,
release_state = NULL,
note = '[삭제된시리얼번호들]'
WHERE Order_Code = '[주문코드]'
8. 사용법
기본 조회 과정
- 바코드 스캔 모드 설정:
ckb_barcode
체크박스 활성화
- 패킹코드 입력:
txbPacking
에 바코드 스캔 또는 수동 입력
- 자동 조회: 3초 대기 후 자동으로 DB 조회 실행
- 구성품 확인:
dgv_pack_item
에 표시된 구성품 목록 확인
삭제 처리 과정
- 삭제 옵션 선택:
ckb_state
체크: 전표 데이터만 삭제
ckb_state
해제: 패킹 + 전표 데이터 모두 삭제
- 삭제 실행:
btn_delete
버튼 클릭
- 확인: 삭제 완료 메시지 확인
주의사항
- 삭제는 실제 DELETE가 아닌 논리적 삭제(UPDATE) 방식
- 삭제된 데이터는
note
필드에 시리얼번호 기록으로 추적 가능
- 패킹코드는
null_[기존코드]
형태로 변경되어 무효화
📎 기타 참고 자료 (sequenceDiagram)
sequenceDiagram
participant 사용자
participant UI
participant 시스템
participant 패킹DB
participant 주문DB
사용자->>UI: ① 바코드 스캔/입력
UI->>시스템: txbPacking_TextChanged()
시스템->>시스템: SetInputCnt() → timer 시작
Note over 시스템: 3초 대기
시스템->>시스템: timer_barcode_Tick()
시스템->>시스템: btnReadDB_Click()
시스템->>시스템: db_select(PackingCode)
시스템->>패킹DB: LEFT JOIN 쿼리 실행
패킹DB->>주문DB: 패킹코드 기준 조인
주문DB-->>시스템: 조합된 데이터 반환
시스템->>시스템: item_out() 구성품 추출
시스템->>UI: dgv_pack_item에 구성품 표시
UI-->>사용자: ② 구성품 목록 출력
사용자->>UI: ③ 삭제 옵션 선택
사용자->>UI: 삭제 버튼 클릭
UI->>시스템: btn_delete_Click()
alt 전표만 삭제
시스템->>주문DB: state_delete() UPDATE 쿼리
주문DB-->>시스템: 전표 데이터 NULL 처리
else 패킹+전표 삭제
시스템->>패킹DB: pack_delete() UPDATE 쿼리
패킹DB-->>시스템: 패킹 데이터 무효화
시스템->>주문DB: state_delete() UPDATE 쿼리
주문DB-->>시스템: 전표 데이터 NULL 처리
end
시스템->>UI: 삭제 완료 메시지
UI-->>사용자: 처리 결과 표시