ERP 개발로 창고 간 재고 이동 관리하기
출고대기부터 이동중, 입고확정까지 창고 간 재고 이동을 구현하는 방법을 설명합니다. 부분 입고, 중복 반영 방지, 취소와 조정전표를 중심으로 ERP 개발 범위와 검수 기준을 정리합니다.
핵심 요약
1. 출고창고와 입고창고의 처리 시점을 나눠 재고가 중복 반영되지 않는 이동전표를 만듭니다. 2. PostgreSQL의 트랜잭션과 Django의 권한 체계를 재고 반영 및 담당자 승인에 연결합니다. 3. 부분 입고·취소·재고차이는 직접 개발할 업무 규칙으로 처리하고, dbt로 수량의 일관성을 검사합니다.
창고에서 물건을 보냈다고 도착 창고의 재고가 바로 늘어나면, 아직 없는 물건을 출고할 수 있습니다. 창고 간 이동을 위한 ERP 개발에서는 물건이 어디에 있고 누가 확인했는지를 함께 관리해야 합니다. 아래는 이러한 업무를 위한 시스템 구축 구현안입니다.
출고창고와 입고창고를 구분하는 이동전표
이동전표에는 출고창고, 입고창고, 품목코드, 이동 수량, 출고 예정일을 입력합니다. 같은 창고를 양쪽에 선택하거나 수량을 0 이하로 넣으면 저장을 막도록 개발합니다. 품목명만으로 연결하지 않고 품목코드를 기준으로 각 창고의 재고를 조회합니다.
화면에는 출고대기·이동중·입고확정을 표시하고, 단계별 수량을 따로 보여줍니다. 개발 범위를 정할 자료로는 ‘창고코드·품목코드·현재 수량이 있는 재고 엑셀’과 ‘실제 사용하는 이동전표 양식’이 필요합니다. 같은 전표를 양쪽 창고에서 조회했을 때 출고 수량과 누적 입고 수량이 일치하는지 확인합니다.
PostgreSQL로 출고 확정과 재고 반영 묶기
PostgreSQL의 트랜잭션 (https://www.postgresql.org/docs/current/tutorial-transactions.html)은 여러 데이터 변경을 모두 반영하거나 모두 취소합니다. 이를 적용해 출고창고의 재고 차감, 이동중 수량 증가, 전표의 출고 확정을 하나의 처리로 묶습니다. 출고대기에서는 실제 재고를 차감하지 않고, 담당자가 ‘출고 확정’을 누를 때 반영합니다.

재고를 저장하는 서버에는 같은 출고를 두 번 반영하지 않는 규칙을 직접 개발합니다. 같은 품목의 재고를 동시에 차감하는 요청은 순서대로 처리하고, 확정 직전에 부족 여부를 다시 확인합니다. 재고가 부족하면 처리 전체를 중단하고 부족한 품목과 수량을 화면에 안내합니다.
부분 입고와 입고 처리번호로 중복 막기
입고 담당자는 전표의 예정 수량을 그대로 확정하지 않고 실제 도착한 수량을 입력합니다. 예를 들어 100개를 보냈는데 60개가 도착했다면, 입고창고에는 60개만 더하고 나머지 40개는 이동중으로 남깁니다. 화면에는 이번 입고 수량, 누적 입고 수량, 미도착 수량을 나란히 표시합니다.
입고할 때마다 별도의 처리번호를 부여하고, 같은 번호의 요청이 다시 오면 기존 결과를 보여주도록 개발합니다. 이는 확인 버튼을 반복해서 눌러도 같은 입고가 중복 반영되지 않게 하는 규칙입니다. 다음 도착분에는 새 처리번호를 부여하며, 잔여 수량이 모두 처리됐을 때 전표를 입고확정으로 바꿉니다.

취소와 재고차이를 원전표에 연결하기
출고 전 취소는 재고를 움직이지 않고 전표의 취소 사유만 남깁니다. 이미 출고한 물건은 취소 버튼만으로 출고창고 재고에 되돌리지 않습니다. 실제로 돌아온 수량을 확인한 뒤 원전표와 연결된 반송전표를 만들고, 이동중 수량 감소와 출고창고 재고 증가를 함께 반영합니다.
미도착 수량은 원인이 확인될 때까지 이동중으로 유지합니다. 분실이 확정되면 사유와 승인자를 기록한 조정전표로 해당 수량을 줄이고, 원래 출고 수량은 보존합니다. 초과 도착한 수량도 자동으로 더하지 않고 품목과 출고 기록을 확인하게 합니다. 원전표에서 입고·반송·조정 내역을 열어 남은 수량의 근거를 확인할 수 있어야 합니다.
Django로 창고별 처리 권한 나누기
Django의 인증 체계 (https://docs.djangoproject.com/en/5.2/topics/auth/default/)는 사용자·그룹·권한을 다루는 기능을 제공합니다. 여기에 담당 창고와 업무 역할을 연결하는 규칙을 추가합니다. 출고 담당자는 자신의 창고에서 출고를 확정하고, 입고 담당자는 도착 창고의 수량을 확인하며, 조정전표는 지정된 승인자가 처리하도록 개발합니다.

화면의 버튼 표시와 별도로, 서버에서도 담당 창고와 처리 권한을 검사합니다. 다른 창고의 전표 번호를 직접 요청해도 권한이 없으면 재고가 바뀌지 않아야 합니다. 처리 이력에는 담당자, 처리 시각, 수량과 사유를 남겨 차이가 발생했을 때 확인 경로를 확보합니다.
dbt 수량 검사와 저장 실패 검수
dbt data tests (https://docs.getdbt.com/docs/build/data-tests)는 데이터 조회문인 SQL로 잘못된 행을 반환하는 검사를 작성할 수 있게 합니다. 이 업무에서는 출고 수량과 입고·반송·조정·이동중 수량의 합을 비교하는 규칙을 직접 정의합니다. 수량이 맞지 않는 전표는 담당자가 확인할 목록으로 연결합니다.
검수할 실패 사례는 ‘출고창고 재고를 차감한 직후 저장 오류가 발생한 경우’입니다. 이때 출고창고 재고, 이동중 수량, 전표 단계가 모두 처리 전과 같아야 통과합니다. 부분 입고와 반송, 분실 조정을 차례로 적용한 뒤에도 각 창고의 재고와 남은 이동 수량을 설명할 수 있어야 합니다.
창고별 품목·재고 목록과 기존 이동전표 양식, 부분 입고·취소 승인 기준을 첨부해 재고 이동 ERP 개발과 시스템 구축을 문의해 주세요. 트램스 AI 제작 문의 (https://trams.co.kr/ai-si/contact/#inquiry)
참고 자료
비슷한 AI 서비스를
사업에 적용하고 싶으신가요?
아이디어와 필요한 기능을 알려주시면 제작 범위와 방법을 검토합니다.