2025-07-08 17:01:59 +09:00

8.6 KiB

[출하] 패킹 삭제 프로그램

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. 사용법

기본 조회 과정

  1. 바코드 스캔 모드 설정: ckb_barcode 체크박스 활성화
  2. 패킹코드 입력: txbPacking에 바코드 스캔 또는 수동 입력
  3. 자동 조회: 3초 대기 후 자동으로 DB 조회 실행
  4. 구성품 확인: dgv_pack_item에 표시된 구성품 목록 확인

삭제 처리 과정

  1. 삭제 옵션 선택:
    • ckb_state 체크: 전표 데이터만 삭제
    • ckb_state 해제: 패킹 + 전표 데이터 모두 삭제
  2. 삭제 실행: btn_delete 버튼 클릭
  3. 확인: 삭제 완료 메시지 확인

주의사항

  • 삭제는 실제 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-->>사용자: 처리 결과 표시