스프레드시트 활용

[자동화 스크립트 2] 실시간 재고관리 자동화

JS's Spreadsheets 2025. 9. 2. 13:48

🔗 지금 바로 사용해보세요!

📥 자동화와 매크로 스프레드시트(재고관리 시트) 바로가기

클릭  번으로 바로 접속해서 복사하여 사용하실  있습니다

 

Apps Script 환경 진입

1.      확장 프로그램 → Apps Script 클릭

2.     새 프로젝트 생성: "자동화 마스터" 이름 설정

3.      코드 편집기 환경 확인

    - 파일에서 스크립트 선택

    - 이름을 '실시간 재고관리 자동화.gs'라고 저장

    - 아래 함수를 입력

 

재고 모니터링 자동화 스크립트

function monitorInventory() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("재고관리");
 
  // 헤더를 제외한 데이터 범위 가져오기
  var data = sheet.getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn()).getValues();
 
  var alertItems = []; // 알림 대상 상품들
 
  for (var i = 0; i < data.length; i++) {
    var row = i + 2; // 실제 행 번호 (헤더 때문에 +2)
    var productName = data[i][0];     // A열: 상품명
    var currentStock = data[i][1];    // B열: 현재재고
    var safetyStock = data[i][2];     // C열: 안전재고
    var supplierEmail = data[i][3];   // D열: 공급업체이메일
    var price = data[i][4];           // E열: 단가
    var lastUpdate = new Date();
   
    // 재고 상태 판정
    var status;
    var orderQuantity = 0;
   
    if (currentStock <= safetyStock * 0.5) {
      status = "위험";
      orderQuantity = safetyStock * 3; // 안전재고의 3배 발주
    } else if (currentStock <= safetyStock) {
      status = "부족";
      orderQuantity = safetyStock * 2; // 안전재고의 2배 발주
    } else {
      status = "정상";
    }
   
    // 상태 업데이트 (F열)
    sheet.getRange(row, 6).setValue(status);
   
    // 위험/부족 상태일 때 알림 목록에 추가
    if (status === "위험" || status === "부족") {
      alertItems.push({
        name: productName,
        current: currentStock,
        safety: safetyStock,
        supplier: supplierEmail,
        price: price,
        orderQty: orderQuantity,
        status: status
      });
     
      // 발주 수량 기록 (새 열 H 추가)
      sheet.getRange(row, 8).setValue(orderQuantity);
      sheet.getRange(row, 9).setValue("발주 필요");
      sheet.getRange(row, 10).setValue(new Date());
    }
  }
 
  // 알림 대상이 있으면 이메일 발송
  if (alertItems.length > 0) {
    sendInventoryAlert(alertItems);
  }
 
  Logger.log("재고 모니터링 완료. 알림 대상: " + alertItems.length + "개 상품");
}

function sendInventoryAlert(alertItems) {
  var subject = "🚨 긴급: 재고 부족 알림 (" + alertItems.length + "개 상품)";
  var body = "안녕하세요.\n\n재고가 안전 수준 이하로 떨어진 상품들이 있어 알려드립니다.\n\n";
 
  body += "📦 재고 부족 상품 목록:\n";
  body += "─────────────────────────────\n";
 
  for (var i = 0; i < alertItems.length; i++) {
    var item = alertItems[i];
    body += "• " + item.name + "\n";
    body += "  현재 재고: " + item.current + "개\n";
    body += "  안전 재고: " + item.safety + "개\n";
    body += "  상태: " + item.status + "\n";
    body += "  권장 발주량: " + item.orderQty + "개\n";
    body += "  공급업체: " + item.supplier + "\n\n";
  }
 
  body += "빠른 발주 처리를 부탁드립니다.\n\n";
  body += "감사합니다.\n재고 관리 자동화 시스템";
 
  // 관리자에게 이메일 발송
  try {
    GmailApp.sendEmail("manager@####.com", subject, body);  // 실제 이메일로 수정
    Logger.log("재고 부족 알림 이메일 발송 완료");
  } catch (error) {
    Logger.log("이메일 발송 실패: " + error.toString());
  }
}

 

실행 및 테스트:

1.      monitorInventory 함수 실행

2.     재고관리 시트에서 상태 업데이트 확인

3.     현재재고 값을 안전재고 이하로 변경 후 재실행

4.     알림 이메일 발송 확인