📑 สารบัญ
ติดตั้งบน Google
ทำครั้งเดียวบนคอมพิวเตอร์ ประมาณ 10 นาที
เริ่มต้น
สร้างไฟล์ Google Sheets ใหม่
ไฟล์นี้คือ “ฐานข้อมูล” ของระบบ เก็บรายการวัสดุ ยอดคงเหลือ ผู้ขาย เอกสารรับเข้า/เบิกจ่าย/ปรับยอด ความเคลื่อนไหว ใบขอเบิก และการตั้งค่า
- เข้า sheets.new ด้วยบัญชี Google ที่จะเป็นเจ้าของระบบ (แนะนำบัญชีของบริษัท ไม่ใช่บัญชีส่วนตัวของพนักงาน)
- คลิกชื่อไฟล์มุมซ้ายบน ตั้งชื่อ เช่น คลังวัสดุ หน่วยงานของเรา
ได้ แต่แนะนำไฟล์ใหม่เปล่า ๆ ระบบจะสร้างชีต Settings Users Items Suppliers Docs Movements Requestsให้เอง และจะไม่แตะชีตอื่นที่มีอยู่
ใส่ระบบ
วางไฟล์ Code.gs, Index.html และ appsscript.json
- ในไฟล์ชีต ไปที่เมนู ส่วนขยาย›Apps Script (Extensions › Apps Script)
- ตั้งชื่อโปรเจกต์มุมซ้ายบนเป็น Jabphap Stock & Requisition
- เปิดไฟล์ Code.gs ที่มีอยู่ กด Ctrl+A ลบโค้ดเดิม แล้ววางเนื้อหาจากไฟล์
Code.gsที่ได้รับทั้งไฟล์ - กดปุ่ม + ข้างคำว่า “ไฟล์” › HTML ตั้งชื่อว่า
Index(ตัว I ใหญ่ ไม่ต้องพิมพ์ .html) ลบเนื้อหาเดิม แล้ววางเนื้อหาจากIndex.html - ไปที่ ⚙ การตั้งค่าโปรเจกต์ ติ๊ก แสดงไฟล์ Manifest “appsscript.json” ในเครื่องมือแก้ไข กลับมาที่หน้าแก้ไข เปิด
appsscript.jsonแล้ววางเนื้อหาจากไฟล์ที่ได้รับแทนทั้งหมด - กด Ctrl+S บันทึกทุกไฟล์
ต้องมี 3 ไฟล์: Code.gs, Index.html, appsscript.json — ชื่อ Index ต้องตรงทุกตัวอักษร
ถ้าคัดลอกขาดท้ายไฟล์ จะเกิดข้อผิดพลาด “SyntaxError” ตอนบันทึก ให้คัดลอกใหม่ทั้งไฟล์
appsscript.json ทำหน้าที่อะไร
กำหนดเขตเวลา Asia/Bangkok (วันที่เอกสาร เลขที่รายเดือน และสรุปประจำวันใช้เวลาไทย) กำหนดสิทธิ์ที่ระบบขอใช้ให้น้อยที่สุด (ชีต, เมนูในชีต, ทริกเกอร์, ส่งอีเมล, เรียก LINE API) และตั้งค่าเว็บแอปให้ทำงานในนามเจ้าของ ผู้ใช้ล็อกอินด้วย PIN ภายในแอป
สร้างฐานข้อมูล
รันฟังก์ชัน setup
- ที่แถบเครื่องมือด้านบนของหน้าแก้ไขโค้ด เลือกฟังก์ชัน setup ในช่องรายการฟังก์ชัน
- กด ▶ เรียกใช้ (Run) — ครั้งแรก Google จะขออนุญาตสิทธิ์ ทำตามขั้นตอนที่ 4
- รอจนบันทึกการดำเนินการขึ้นว่า “ติดตั้ง Jabphap Stock & Requisition เรียบร้อย”
Settings · Users · Items · Suppliers · Docs · Movements · Requests
วัสดุ 33 รายการ ผู้ขาย 5 ราย ความเคลื่อนไหวย้อนหลังประมาณ 3 เดือน และใบขอเบิก
ส่งรายการวัสดุที่หมด/ต่ำกว่าจุดสั่งซื้อทุกเช้า (ปิดได้ในหน้าตั้งค่า)
หลังจากนี้ เมื่อเปิดไฟล์ชีตจะมีเมนู 📦 Stock & Requisition บนแถบเมนู ใช้ซ่อมฐานข้อมูล (รัน setup ซ้ำได้ ไม่ลบข้อมูลเดิม) แสดงลิงก์เว็บแอป รีเซ็ต PIN ผู้ดูแล และล้างข้อมูลตัวอย่าง
ความปลอดภัย
อนุญาตสิทธิ์ให้สคริปต์
- หน้าต่าง “ต้องมีการให้สิทธิ์” กด ตรวจสอบสิทธิ์ แล้วเลือกบัญชี Google ของคุณ
- ถ้าเจอหน้า “Google ยังไม่ได้ยืนยันแอปนี้” กด ขั้นสูง › ไปที่ Jabphap Stock & Requisition (ไม่ปลอดภัย) — เป็นข้อความปกติของสคริปต์ที่คุณติดตั้งเอง
- ตรวจรายการสิทธิ์ แล้วกด อนุญาต จากนั้นกลับไปรัน setup อีกครั้งถ้ายังไม่ขึ้นข้อความติดตั้งเรียบร้อย


| สิทธิ์ที่ขอ | ใช้ทำอะไร |
|---|---|
| ดู แก้ไข สร้าง สเปรดชีต | อ่าน/เขียนวัสดุ ยอดคงเหลือ เอกสาร และใบขอเบิก ในไฟล์ชีตของคุณ |
| แสดงเนื้อหาในแอป Google | เมนู 📦 Stock & Requisition บนไฟล์ชีต |
| จัดการทริกเกอร์ | ตั้งเวลาส่งสรุปของใกล้หมดประจำวัน |
| ส่งอีเมลในนามคุณ | ส่งสรุปของใกล้หมดถึงเจ้าหน้าที่คลัง/ฝ่ายจัดซื้อ |
| เชื่อมต่อบริการภายนอก | ส่งข้อความเข้า LINE ผ่าน LINE Messaging API (ใช้เมื่อเปิดใช้เท่านั้น) |
เปิดให้ทีมใช้
เผยแพร่เป็นเว็บแอป
- มุมขวาบนของหน้าแก้ไขโค้ด กด การทำให้ใช้งานได้›การทำให้ใช้งานได้รายการใหม่ (Deploy › New deployment)
- กดรูปเฟือง ⚙ ข้าง “เลือกประเภท” แล้วเลือก เว็บแอป
- ตั้งค่า: เรียกใช้ในฐานะ = ฉัน (อีเมลของคุณ) · ผู้ที่มีสิทธิ์เข้าถึง = ทุกคน แล้วกด ทำให้ใช้งานได้
- คัดลอก URL ของเว็บแอป (ลงท้ายด้วย
/exec) ส่งให้ผู้ใช้ทุกคน บันทึกเป็นบุ๊กมาร์กหรือ “เพิ่มไปยังหน้าจอหลัก” บนมือถือ




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

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

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

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

ดูแลระบบ
ล้างข้อมูลตัวอย่าง & อัปเดตเวอร์ชัน
ล้างข้อมูลตัวอย่าง: เปิดไฟล์ชีต › เมนู 📦 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 เวอร์ชันใหม่
ไม่ได้รับสรุปของใกล้หมด
ระบบส่งเฉพาะวันที่มีวัสดุหมด/ต่ำกว่าจุดสั่งซื้อ หรือมีใบขอเบิกค้างอนุมัติ/ค้างจ่าย ตรวจอีเมลผู้รับในหน้าตั้งค่า โฟลเดอร์สแปม และกดบันทึกการตั้งค่าหนึ่งครั้งเพื่อสร้างทริกเกอร์ใหม่
รองรับวัสดุกี่รายการ
เหมาะกับคลังวัสดุหลักสิบถึงหลักพันรายการ ความเคลื่อนไหวหลายหมื่นแถว
ลิขสิทธิ์
ข้อกำหนดสิทธิ์การใช้งาน
Jabphap Stock & Requisition สงวนลิขสิทธิ์ © 2569 (2026) jabphap.com · ผู้ซื้อได้รับสิทธิ์ใช้งานสำหรับกิจการของตนเองตามที่ระบุในการสั่งซื้อ ห้ามจำหน่าย แจกจ่าย หรือดัดแปลงเพื่อขายต่อ รายละเอียดดูไฟล์ LICENSE.txt