Jabphap Stock & Requisition คู่มือการติดตั้ง
⏱ ติดตั้งประมาณ 10 นาที · ไม่ต้องเขียนโค้ด

ติดตั้ง Jabphap Stock & Requisition บน Google ของคุณเอง

ระบบคลังวัสดุสิ้นเปลือง รับเข้า เบิกจ่าย ใบขอเบิก และแจ้งเตือนของใกล้หมด ทำงานบน Google Sheets + Google Apps Script ในบัญชี Google ของหน่วยงานเอง ข้อมูลทั้งหมดอยู่ใน Drive ของคุณ ไม่มีค่าบริการรายเดือน

👤บัญชี GoogleGmail หรือ Google Workspace 1 บัญชี (เป็นเจ้าของระบบ)
💻คอมพิวเตอร์ใช้ตอนติดตั้งครั้งแรก หลังจากนั้นใช้มือถือได้
📄ไฟล์ 3 ไฟล์Code.gs · Index.html · appsscript.json
📋รายการวัสดุรหัส ชื่อ หน่วย ยอดคงเหลือตั้งต้น (นำเข้าจากชีตได้)
📑 สารบัญ
ส่วนที่ 1

ติดตั้งบน Google

ทำครั้งเดียวบนคอมพิวเตอร์ ประมาณ 10 นาที

1

เริ่มต้น

สร้างไฟล์ Google Sheets ใหม่

ไฟล์นี้คือ “ฐานข้อมูล” ของระบบ เก็บรายการวัสดุ ยอดคงเหลือ ผู้ขาย เอกสารรับเข้า/เบิกจ่าย/ปรับยอด ความเคลื่อนไหว ใบขอเบิก และการตั้งค่า

  1. เข้า sheets.new ด้วยบัญชี Google ที่จะเป็นเจ้าของระบบ (แนะนำบัญชีของบริษัท ไม่ใช่บัญชีส่วนตัวของพนักงาน)
  2. คลิกชื่อไฟล์มุมซ้ายบน ตั้งชื่อ เช่น คลังวัสดุ หน่วยงานของเรา
💡 ใช้ไฟล์ที่มีอยู่แล้วได้ไหม

ได้ แต่แนะนำไฟล์ใหม่เปล่า ๆ ระบบจะสร้างชีต Settings Users Items Suppliers Docs Movements Requestsให้เอง และจะไม่แตะชีตอื่นที่มีอยู่

2

ใส่ระบบ

วางไฟล์ Code.gs, Index.html และ appsscript.json

  1. ในไฟล์ชีต ไปที่เมนู ส่วนขยาย›Apps Script (Extensions › Apps Script)
  2. ตั้งชื่อโปรเจกต์มุมซ้ายบนเป็น Jabphap Stock & Requisition
  3. เปิดไฟล์ Code.gs ที่มีอยู่ กด Ctrl+A ลบโค้ดเดิม แล้ววางเนื้อหาจากไฟล์ Code.gs ที่ได้รับทั้งไฟล์
  4. กดปุ่ม + ข้างคำว่า “ไฟล์” › HTML ตั้งชื่อว่า Index (ตัว I ใหญ่ ไม่ต้องพิมพ์ .html) ลบเนื้อหาเดิม แล้ววางเนื้อหาจาก Index.html
  5. ไปที่ ⚙ การตั้งค่าโปรเจกต์ ติ๊ก แสดงไฟล์ Manifest “appsscript.json” ในเครื่องมือแก้ไข กลับมาที่หน้าแก้ไข เปิด appsscript.json แล้ววางเนื้อหาจากไฟล์ที่ได้รับแทนทั้งหมด
  6. กด Ctrl+S บันทึกทุกไฟล์
✓ ตรวจชื่อไฟล์

ต้องมี 3 ไฟล์: Code.gs, Index.html, appsscript.json — ชื่อ Index ต้องตรงทุกตัวอักษร

⚠ วางให้ครบทั้งไฟล์

ถ้าคัดลอกขาดท้ายไฟล์ จะเกิดข้อผิดพลาด “SyntaxError” ตอนบันทึก ให้คัดลอกใหม่ทั้งไฟล์

appsscript.json ทำหน้าที่อะไร

กำหนดเขตเวลา Asia/Bangkok (วันที่เอกสาร เลขที่รายเดือน และสรุปประจำวันใช้เวลาไทย) กำหนดสิทธิ์ที่ระบบขอใช้ให้น้อยที่สุด (ชีต, เมนูในชีต, ทริกเกอร์, ส่งอีเมล, เรียก LINE API) และตั้งค่าเว็บแอปให้ทำงานในนามเจ้าของ ผู้ใช้ล็อกอินด้วย PIN ภายในแอป

3

สร้างฐานข้อมูล

รันฟังก์ชัน setup

  1. ที่แถบเครื่องมือด้านบนของหน้าแก้ไขโค้ด เลือกฟังก์ชัน setup ในช่องรายการฟังก์ชัน
  2. กด ▶ เรียกใช้ (Run) — ครั้งแรก Google จะขออนุญาตสิทธิ์ ทำตามขั้นตอนที่ 4
  3. รอจนบันทึกการดำเนินการขึ้นว่า “ติดตั้ง Jabphap Stock & Requisition เรียบร้อย”
สร้างชีต7 ชีตพร้อมหัวตาราง

Settings · Users · Items · Suppliers · Docs · Movements · Requests

ข้อมูลตัวอย่างคลังวัสดุจำลอง

วัสดุ 33 รายการ ผู้ขาย 5 ราย ความเคลื่อนไหวย้อนหลังประมาณ 3 เดือน และใบขอเบิก

ทริกเกอร์สรุปของใกล้หมด 08:00

ส่งรายการวัสดุที่หมด/ต่ำกว่าจุดสั่งซื้อทุกเช้า (ปิดได้ในหน้าตั้งค่า)

หลังจากนี้ เมื่อเปิดไฟล์ชีตจะมีเมนู 📦 Stock & Requisition บนแถบเมนู ใช้ซ่อมฐานข้อมูล (รัน setup ซ้ำได้ ไม่ลบข้อมูลเดิม) แสดงลิงก์เว็บแอป รีเซ็ต PIN ผู้ดูแล และล้างข้อมูลตัวอย่าง

4

ความปลอดภัย

อนุญาตสิทธิ์ให้สคริปต์

  1. หน้าต่าง “ต้องมีการให้สิทธิ์” กด ตรวจสอบสิทธิ์ แล้วเลือกบัญชี Google ของคุณ
  2. ถ้าเจอหน้า “Google ยังไม่ได้ยืนยันแอปนี้” กด ขั้นสูง › ไปที่ Jabphap Stock & Requisition (ไม่ปลอดภัย) — เป็นข้อความปกติของสคริปต์ที่คุณติดตั้งเอง
  3. ตรวจรายการสิทธิ์ แล้วกด อนุญาต จากนั้นกลับไปรัน setup อีกครั้งถ้ายังไม่ขึ้นข้อความติดตั้งเรียบร้อย
หน้าต่างขออนุญาตสิทธิ์ของ Google Apps Script
หน้าต่างขอสิทธิ์ — กด “ตรวจสอบสิทธิ์” แล้วเลือกบัญชี (ชื่อโปรเจกต์ในหน้าต่างของคุณจะเป็น Jabphap Stock & Requisition)
หน้าเตือน Google ยังไม่ได้ยืนยันแอป
คลิก “ขั้นสูง” แล้วเลือก “ไปที่ … (ไม่ปลอดภัย)” เพื่อดำเนินการต่อ
สิทธิ์ที่ขอใช้ทำอะไร
ดู แก้ไข สร้าง สเปรดชีตอ่าน/เขียนวัสดุ ยอดคงเหลือ เอกสาร และใบขอเบิก ในไฟล์ชีตของคุณ
แสดงเนื้อหาในแอป Googleเมนู 📦 Stock & Requisition บนไฟล์ชีต
จัดการทริกเกอร์ตั้งเวลาส่งสรุปของใกล้หมดประจำวัน
ส่งอีเมลในนามคุณส่งสรุปของใกล้หมดถึงเจ้าหน้าที่คลัง/ฝ่ายจัดซื้อ
เชื่อมต่อบริการภายนอกส่งข้อความเข้า LINE ผ่าน LINE Messaging API (ใช้เมื่อเปิดใช้เท่านั้น)
5

เปิดให้ทีมใช้

เผยแพร่เป็นเว็บแอป

  1. มุมขวาบนของหน้าแก้ไขโค้ด กด การทำให้ใช้งานได้›การทำให้ใช้งานได้รายการใหม่ (Deploy › New deployment)
  2. กดรูปเฟือง ⚙ ข้าง “เลือกประเภท” แล้วเลือก เว็บแอป
  3. ตั้งค่า: เรียกใช้ในฐานะ = ฉัน (อีเมลของคุณ) · ผู้ที่มีสิทธิ์เข้าถึง = ทุกคน แล้วกด ทำให้ใช้งานได้
  4. คัดลอก URL ของเว็บแอป (ลงท้ายด้วย /exec) ส่งให้ผู้ใช้ทุกคน บันทึกเป็นบุ๊กมาร์กหรือ “เพิ่มไปยังหน้าจอหลัก” บนมือถือ
เมนูการทำให้ใช้งานได้รายการใหม่
เมนู Deploy › New deployment มุมขวาบน
เลือกประเภทการทำให้ใช้งานได้เป็นเว็บแอป
กดรูปเฟืองแล้วเลือก “เว็บแอป”
ตั้งค่าเว็บแอป เรียกใช้ในฐานะฉัน ทุกคนเข้าถึงได้
เรียกใช้ในฐานะ “ฉัน” และผู้มีสิทธิ์เข้าถึง “ทุกคน” — ผู้ใช้ไม่ต้องมีบัญชี Google แต่ต้องล็อกอินด้วยชื่อผู้ใช้และ PIN ของระบบ
URL ของเว็บแอปหลังเผยแพร่
คัดลอก URL ของเว็บแอป (ลงท้าย /exec) ไปใช้งาน
⚠ ทำไมต้องเลือก “ทุกคน”

ข้อมูลไม่ได้เปิดเผยต่อสาธารณะ ทุกคนที่เปิดลิงก์จะเห็นแค่หน้าล็อกอิน ต้องมีชื่อผู้ใช้และ PIN ที่ผู้ดูแลสร้างให้ ระบบล็อกบัญชี 5 นาทีเมื่อใส่ PIN ผิด 5 ครั้ง และไฟล์ชีตยังเป็นของคุณคนเดียว (อย่าแชร์ไฟล์ชีตให้คนอื่นถ้าไม่จำเป็น)

6

ใช้งานได้แล้ว

เข้าสู่ระบบครั้งแรกและเปลี่ยน PIN

  1. เปิด URL เว็บแอป ใส่ชื่อผู้ใช้ admin และ PIN 1234
  2. ระบบจะบังคับตั้ง PIN ใหม่ทันที (ตัวเลข 4–8 หลัก ห้ามใช้ 1234 หรือ 0000)
  3. ไปที่ ตั้งค่า ใส่ชื่อหน่วยงานและชื่อคลัง ปรับหมวดหมู่ แผนก ที่จัดเก็บ หน่วยนับ และเพิ่มผู้ขาย (ดูขั้นตอนที่ 7)
หน้าเข้าสู่ระบบ Jabphap Stock & Requisition
หน้าเข้าสู่ระบบ — ฝั่งซ้ายแนะนำระบบ ฝั่งขวากรอกชื่อผู้ใช้และ PIN (บนมือถือแสดงเฉพาะฟอร์ม)
💡 ลืม PIN ผู้ดูแล

เปิดไฟล์ชีต › เมนู 📦 Stock & Requisition › 🔑 รีเซ็ต PIN ผู้ดูแล (admin) เป็น 1234 แล้วเข้าสู่ระบบใหม่ ส่วนผู้ใช้คนอื่นที่ลืม PIN ให้ผู้ดูแลรีเซ็ตให้ในหน้าจัดการผู้ใช้

ส่วนที่ 2

เตรียมคลังให้พร้อมใช้

ทำหลังติดตั้งเสร็จ จากหน้าเว็บแอปด้วยบัญชีผู้ดูแลระบบ

7

ตั้งค่า

รายการอ้างอิง & ผู้ขาย

เมนู ตั้งค่า › แท็บ ทั่วไป ใส่ชื่อหน่วยงานและชื่อคลัง · แท็บ รายการอ้างอิง แก้หมวดหมู่วัสดุ แผนก/หน่วยงานที่มาเบิก ที่จัดเก็บ (ชั้น/ตู้/ห้อง) หน่วยนับ และเหตุผลการปรับยอด (พิมพ์คั่นด้วยจุลภาค) · แท็บ ผู้ขาย เพิ่มชื่อร้าน/บริษัท ผู้ติดต่อ โทร อีเมล LINE — ใช้ตอนรับเข้าและจัดกลุ่มรายการต้องสั่งซื้อ

ตั้งค่ารายการอ้างอิง
รายการอ้างอิง — หมวดหมู่ แผนก ที่จัดเก็บ หน่วยนับ และเหตุผลการปรับยอด
8

ข้อมูลตั้งต้น

บันทึกวัสดุ & ยอดยกมา

  1. เมนู สต็อกวัสดุ › + เพิ่มวัสดุ กรอกรหัส (เช่น OF-001) ชื่อ หมวดหมู่ หน่วย ที่จัดเก็บ จุดสั่งซื้อ (เตือนเมื่อคงเหลือ ≤ ค่านี้) ยอดสูงสุด (ใช้คำนวณจำนวนแนะนำให้สั่ง) ต้นทุนต่อหน่วย และผู้ขายหลัก
  2. ใส่ ยอดยกมา = จำนวนที่มีอยู่จริงตอนเริ่มใช้ระบบ ระบบสร้างเอกสารปรับยอด (ADJ) “ยอดยกมา” ให้ เพื่อให้บัตรคุมวัสดุถูกต้องตั้งแต่วันแรก
  3. ถ้ามีวัสดุจำนวนมาก แนะนำบันทึกทีละหมวด แล้วใช้หน้า ตรวจนับ / ปรับยอด กรอกยอดนับจริงทั้งชั้นในครั้งเดียว
⚠ อย่าแก้ยอดคงเหลือในชีตโดยตรง

ยอดคงเหลือ (คอลัมน์ balance) ถูกคำนวณจากเอกสารรับ/จ่าย/ปรับยอด ถ้าแก้ในชีตเอง บัตรคุมวัสดุจะไม่ตรง ให้ใช้หน้าตรวจนับ/ปรับยอดแทน

9

ผู้ใช้

ผู้ใช้ & สิทธิ์

แท็บ ผู้ใช้งาน เพิ่มผู้ใช้ ใส่ชื่อ ชื่อผู้ใช้ แผนก อีเมล และ PIN เริ่มต้น (ครั้งแรกจะถูกขอให้ตั้ง PIN ใหม่)

ตั้งค่าผู้ใช้งาน
ผู้ใช้งาน สิทธิ์ และแผนก
สิทธิ์ทำอะไรได้
ผู้ดูแลระบบทุกอย่าง รวมการตั้งค่า ผู้ใช้ และลบวัสดุ
เจ้าหน้าที่คลังรับเข้า เบิกจ่าย อนุมัติ/จ่ายใบขอเบิก ตรวจนับ ปรับยอด ดูรายงานและรายการต้องสั่งซื้อ
พนักงาน (ขอเบิก)ดูยอดคงเหลือ ยื่นใบขอเบิก ติดตามสถานะ และยกเลิกใบที่ยังไม่อนุมัติ (ไม่เห็นต้นทุนถ้าผู้ดูแลปิดไว้)
ดูอีเมลหลักของบัญชี Googleตรวจว่าผู้รันฟังก์ชันผู้ดูแล (ติดตั้ง / รีเซ็ตรหัสผ่าน) เป็นเจ้าของไฟล์ — กันไม่ให้ผู้เปิดเว็บแอปเรียกใช้ได้
10

ไม่ให้ของขาด

แจ้งเตือนของใกล้หมด

แท็บ การแจ้งเตือน: เปิด สรุปของใกล้หมดประจำวัน ตั้งเวลา ใส่อีเมลผู้รับ (เช่น เจ้าหน้าที่คลัง ฝ่ายจัดซื้อ — คั่นด้วยจุลภาค) และเลือกส่งเข้า LINE · เลือกให้แจ้ง LINE ทันทีเมื่อมีใบขอเบิกใหม่ได้

LINE Messaging API: สร้าง LINE Official Account ที่ manager.line.biz › เปิดใช้ Messaging API › ไปที่ LINE Developers Console ออก Channel access token (long-lived) มาวาง และใส่ Group ID ของกลุ่มคลัง (เชิญบอทเข้ากลุ่มก่อน) หรือ User ID ของคุณ แล้วกดทดสอบส่ง — token เก็บใน Script Properties ไม่อยู่ในชีต

ตั้งค่าการแจ้งเตือน
สรุปของใกล้หมดประจำวัน ผู้รับอีเมล และ LINE
11

ดูแลระบบ

ล้างข้อมูลตัวอย่าง & อัปเดตเวอร์ชัน

ล้างข้อมูลตัวอย่าง: เปิดไฟล์ชีต › เมนู 📦 Stock & Requisition › 🧹 ล้างข้อมูลตัวอย่าง ระบบลบวัสดุ ผู้ขาย เอกสาร ความเคลื่อนไหว และใบขอเบิกทั้งหมด แต่เก็บการตั้งค่าและผู้ใช้ไว้ — จากนั้นปิดบัญชีผู้ใช้ตัวอย่าง (wanida, kittipong, supaporn, anan) ในหน้าตั้งค่า › ผู้ใช้งาน

อัปเดตเวอร์ชัน: วางทับ Code.gs และ Index.html รัน setup อีกครั้ง (เพิ่มคอลัมน์ใหม่ ไม่ลบข้อมูล) แล้ว Deploy › จัดการการทำให้ใช้งานได้ › ✎ › เวอร์ชันใหม่

อ้างอิง

โครงสร้างชีตในฐานข้อมูล

ห้ามเปลี่ยนชื่อชีต หัวคอลัมน์ และคอลัมน์ id — การเปลี่ยนยอดคงเหลือต้องทำผ่านเอกสารในหน้าเว็บเท่านั้น

ชีตเก็บอะไรคอลัมน์สำคัญ
Settingsการตั้งค่าcompany_name, store_name, categories, departments, locations, units, adjust_reasons, staff_see_cost, digest_*
Usersผู้ใช้username, name, role (admin/storekeeper/staff), department, email, pin_hash + salt, active
Itemsวัสดุcode, name, category, unit, location, min_qty (จุดสั่งซื้อ), max_qty, unit_cost (ต้นทุนเฉลี่ย), supplier_id, balance (คงเหลือ), active
Suppliersผู้ขายname, contact, phone, email, line_id
Docsหัวเอกสารdoc_no (RCV/ISS/ADJ-ปปดด-####), type, doc_date, supplier_name, ref_no, department, requester, purpose, request_no, reason, total_qty, total_value
Movementsความเคลื่อนไหวรายวัสดุdoc_no, type, doc_date, item_code, qty, unit_cost, value, balance_after, avg_cost_after, department
Requestsใบขอเบิกreq_no, requester_name, department, purpose, need_date, lines (JSON), status, approver_name, decision_note, issue_doc_no

ช่วยเหลือ

คำถามที่พบบ่อย

เบิกพร้อมกันหลายคน ยอดจะติดลบไหม

ไม่ติดลบ ทุกการรับ/จ่าย/ปรับยอดทำภายใต้ LockService และตรวจยอดคงเหลือก่อนบันทึก ถ้าของไม่พอระบบจะแจ้งรายการที่ไม่พอให้แก้จำนวน

ต้นทุนเฉลี่ยคิดอย่างไร

ใช้ต้นทุนเฉลี่ยเคลื่อนที่ (Moving average): ทุกครั้งที่รับเข้า ต้นทุนใหม่ = (มูลค่าคงเหลือเดิม + มูลค่ารับเข้า) ÷ จำนวนคงเหลือใหม่ การเบิกจ่ายตัดมูลค่าตามต้นทุนเฉลี่ย ณ ตอนนั้น

บันทึกผิด แก้อย่างไร

เอกสารที่บันทึกแล้วไม่ถูกลบเพื่อรักษาประวัติ ให้ทำรายการกลับ เช่น รับเข้าผิดจำนวนให้ปรับยอดที่หน้าตรวจนับ/ปรับยอด พร้อมเหตุผล “บันทึกผิดพลาด”

เปิดลิงก์แล้วขึ้น “ไม่พบฟังก์ชันสคริปต์: doGet” หรือหน้าขาว

วาง Code.gs ไม่ครบ หรือไฟล์ HTML ไม่ได้ชื่อ Index แก้แล้ว Deploy เวอร์ชันใหม่

ไม่ได้รับสรุปของใกล้หมด

ระบบส่งเฉพาะวันที่มีวัสดุหมด/ต่ำกว่าจุดสั่งซื้อ หรือมีใบขอเบิกค้างอนุมัติ/ค้างจ่าย ตรวจอีเมลผู้รับในหน้าตั้งค่า โฟลเดอร์สแปม และกดบันทึกการตั้งค่าหนึ่งครั้งเพื่อสร้างทริกเกอร์ใหม่

รองรับวัสดุกี่รายการ

เหมาะกับคลังวัสดุหลักสิบถึงหลักพันรายการ ความเคลื่อนไหวหลายหมื่นแถว