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

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

ระบบออกใบเสนอราคา ใบแจ้งหนี้ และใบเสร็จรับเงินเป็น PDF ทำงานบน Google Sheets + Google Apps Script ในบัญชี Google ของบริษัทเอง เอกสารและไฟล์ PDF ทั้งหมดอยู่ใน 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 Customers Products Documents Payments Countersให้เอง และจะไม่แตะชีตอื่นที่มีอยู่

2

ใส่ระบบ

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

  1. ในไฟล์ชีต ไปที่เมนู ส่วนขยาย›Apps Script (Extensions › Apps Script)
  2. ตั้งชื่อโปรเจกต์มุมซ้ายบนเป็น Jabphap Quotation & Invoice
  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, Google Drive สำหรับบันทึกไฟล์ PDF) และตั้งค่าเว็บแอปให้ทำงานในนามเจ้าของ ผู้ใช้ล็อกอินด้วย PIN ภายในแอป

3

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

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

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

Settings · Users · Customers · Products · Documents · Payments · Counters

ข้อมูลตัวอย่างบริษัทไอทีจำลอง

ลูกค้า 9 ราย สินค้า/บริการ 14 รายการ เอกสาร 36 ใบ ย้อนหลัง 6 เดือน

ทริกเกอร์สรุปทุกเช้า 08:00

อัปเดตสถานะเกินกำหนด และส่งรายการใบแจ้งหนี้เกินกำหนด (ปิดได้ในหน้าตั้งค่า)

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

4

ความปลอดภัย

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

  1. หน้าต่าง “ต้องมีการให้สิทธิ์” กด ตรวจสอบสิทธิ์ แล้วเลือกบัญชี Google ของคุณ
  2. ถ้าเจอหน้า “Google ยังไม่ได้ยืนยันแอปนี้” กด ขั้นสูง › ไปที่ Jabphap Quotation & Invoice (ไม่ปลอดภัย) — เป็นข้อความปกติของสคริปต์ที่คุณติดตั้งเอง
  3. ตรวจรายการสิทธิ์ แล้วกด อนุญาต จากนั้นกลับไปรัน setup อีกครั้งถ้ายังไม่ขึ้นข้อความติดตั้งเรียบร้อย
หน้าต่างขออนุญาตสิทธิ์ของ Google Apps Script
หน้าต่างขอสิทธิ์ — กด “ตรวจสอบสิทธิ์” แล้วเลือกบัญชี (ชื่อโปรเจกต์ในหน้าต่างของคุณจะเป็น Jabphap Quotation & Invoice)
หน้าเตือน Google ยังไม่ได้ยืนยันแอป
คลิก “ขั้นสูง” แล้วเลือก “ไปที่ … (ไม่ปลอดภัย)” เพื่อดำเนินการต่อ
สิทธิ์ที่ขอใช้ทำอะไร
ดู แก้ไข สร้าง สเปรดชีตอ่าน/เขียนลูกค้า สินค้า เอกสาร การรับชำระ ในไฟล์ชีตของคุณ
ดู แก้ไข สร้าง ไฟล์ใน Google ไดรฟ์สร้างโฟลเดอร์และบันทึกไฟล์ PDF ของเอกสาร
แสดงเนื้อหาในแอป Googleเมนู 🧾 Quotation & Invoice บนไฟล์ชีต
จัดการทริกเกอร์ตั้งเวลาตรวจและสรุปใบแจ้งหนี้เกินกำหนดทุกวัน
ส่งอีเมลในนามคุณส่งเอกสาร PDF ถึงลูกค้า และส่งสรุปประจำวัน
เชื่อมต่อบริการภายนอกส่งข้อความเข้า LINE ผ่าน LINE Messaging API (ใช้เมื่อเปิดใช้เท่านั้น)
ดูอีเมลหลักของบัญชี Googleตรวจว่าผู้รันฟังก์ชันผู้ดูแล (ติดตั้ง / รีเซ็ตรหัสผ่าน) เป็นเจ้าของไฟล์ — กันไม่ให้ผู้เปิดเว็บแอปเรียกใช้ได้
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 Quotation & Invoice
หน้าเข้าสู่ระบบ — ฝั่งซ้ายแนะนำระบบ ฝั่งขวากรอกชื่อผู้ใช้และ PIN (บนมือถือแสดงเฉพาะฟอร์ม)
💡 ลืม PIN ผู้ดูแล

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

ส่วนที่ 2

ตั้งค่าเอกสารของบริษัท

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

7

หัวเอกสาร

ข้อมูลบริษัท & โลโก้

  1. แท็บ ข้อมูลบริษัท: ชื่อบริษัท (ไทย/อังกฤษ) เลขประจำตัวผู้เสียภาษี 13 หลัก สำนักงานใหญ่/สาขา ที่อยู่ โทร อีเมล เว็บไซต์
  2. โลโก้ (ไม่บังคับ): อัปโหลดรูปไว้ใน Google Drive แชร์เป็น “ทุกคนที่มีลิงก์” แล้ววางลิงก์รูป หรือใช้ลิงก์รูปจากเว็บไซต์บริษัท (https://...png)
  3. สีหัวเอกสาร · ช่องทางการชำระเงิน (ธนาคาร เลขบัญชี พร้อมเพย์) · ชื่อและตำแหน่งผู้มีอำนาจลงนาม
ตั้งค่าข้อมูลบริษัท
ข้อมูลบริษัทที่พิมพ์บนหัวเอกสาร บัญชีรับเงิน และผู้ลงนาม
8

เลขที่ & ภาษี

รูปแบบเลขที่เอกสาร & VAT

แท็บ เลขที่และเอกสาร: อักษรนำของแต่ละประเภท (ค่าเริ่มต้น QT / INV / RC) เริ่มเลขใหม่ทุกเดือนหรือทุกปี ใช้ปี ค.ศ. หรือ พ.ศ. และจำนวนหลักเลขรัน ระบบแสดงตัวอย่างเลขที่ถัดไปให้ทันที เช่น QT202610-0001 หรือ QT256910-0001

ตั้งชื่อหัวเอกสาร (เช่น เปลี่ยน “ใบเสร็จรับเงิน” เป็น “ใบเสร็จรับเงิน / ใบกำกับภาษี” เมื่อจดทะเบียน VAT) ไฟล์ PDF เริ่มต้น (ต้นฉบับ / ต้นฉบับ+สำเนา) ภาษีมูลค่าเพิ่มเริ่มต้น (ไม่คิด / ราคาไม่รวม VAT / ราคารวม VAT) อัตรา VAT หัก ณ ที่จ่ายเริ่มต้น อายุใบเสนอราคา เครดิตเทอม หมายเหตุและเงื่อนไขการชำระเงิน

ตั้งค่าเลขที่และเอกสาร
รูปแบบเลขที่ (รีเซ็ตทุกเดือน ปี ค.ศ. 4 หลัก) และค่าเริ่มต้นของเอกสาร
✓ เลขที่ไม่ซ้ำแน่นอน

เลขที่ออกตอนกดบันทึกภายใต้ LockService แม้หลายคนบันทึกพร้อมกันก็ไม่ซ้ำ เอกสารที่ยกเลิกยังคงเลขเดิมไว้ (ไม่นำกลับมาใช้) ตามหลักการทำบัญชี

9

ส่งเอกสาร

อีเมล PDF & การแจ้งเตือน

แท็บ อีเมลและแจ้งเตือน: แม่แบบหัวข้อและข้อความอีเมล ใช้ตัวแปร {doc_type} {doc_no} {doc_date} {customer} {company} {total} {sender} {phone} ได้ · สำเนาถึงตัวเองทุกครั้ง · สรุปใบแจ้งหนี้เกินกำหนดทุกเช้า (เวลา และผู้รับ) ทางอีเมลและ LINE

ตั้งค่าอีเมลและแจ้งเตือน
แม่แบบอีเมล สรุปประจำวัน และ LINE Messaging API

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

⚠ โควตาอีเมลของ Google

บัญชี Gmail ทั่วไปส่งอีเมลจากสคริปต์ได้ประมาณ 100 ฉบับ/วัน (Google Workspace ประมาณ 1,500) ระบบแสดงจำนวนที่ส่งได้คงเหลือในหน้าต่างส่งอีเมล ไฟล์ PDF ถูกบันทึกในโฟลเดอร์ Drive ที่ระบบสร้างให้ครั้งแรก (ดูลิงก์โฟลเดอร์ได้ในหน้าตั้งค่า)

10

เริ่มใช้งานจริง

ผู้ใช้ & ล้างข้อมูลตัวอย่าง

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

ล้างข้อมูลตัวอย่าง: เปิดไฟล์ชีต › เมนู 🧾 Quotation & Invoice › 🧹 ล้างข้อมูลตัวอย่าง ระบบลบลูกค้า สินค้า เอกสาร การรับชำระ และรีเซ็ตเลขที่เอกสาร (ชีต Counters) แต่เก็บการตั้งค่าและผู้ใช้ไว้ — จากนั้นปิดบัญชีผู้ใช้ตัวอย่าง (kanokwan, piyapong) ไฟล์ PDF ตัวอย่างใน Drive (ถ้ามี) ลบเองได้

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

อ้างอิง

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

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

ชีตเก็บอะไรคอลัมน์สำคัญ
Settingsการตั้งค่าcompany_*, logo_url, bank_info, signer_*, prefix_QT/INV/RC, number_reset, number_era, vat_rate, default_vat_mode, default_wht, email_subject/body, digest_*
Usersผู้ใช้username, name, role (admin/staff), email, pin_hash + salt, active
Customersลูกค้าcode, name, tax_id, branch_type, branch_no, address, contact, phone, email, credit_days
Productsสินค้า/บริการcode, name, unit, price, active
Documentsเอกสารทุกประเภทtype (QT/INV/RC), doc_no, doc_date, due_date, ข้อมูลลูกค้า ณ วันออกเอกสาร (cust_*), items (JSON), vat_mode, vat_rate, wht_rate, subtotal, vat_amount, total, wht_amount, net_total, paid_amount, balance, status, ref_no, pdf_url, sent_at
Paymentsการรับชำระinv_no, pay_date, amount, wht, method, reference, receipt_no, status
Countersเลขที่ล่าสุดkey (เช่น QT-202610), last

ช่วยเหลือ

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

กด PDF แล้วขึ้นว่าไม่มีสิทธิ์ Google Drive

ตอนติดตั้งยังไม่ได้อนุญาตสิทธิ์ Drive ให้วาง appsscript.json ให้ครบ แล้วรัน setup อีกครั้งเพื่ออนุญาตสิทธิ์ใหม่

ฟอนต์ภาษาไทยใน PDF ไม่สวยเหมือนหน้าจอ

ไฟล์ PDF สร้างด้วยตัวแปลงของ Google ซึ่งใช้ฟอนต์ไทยมาตรฐาน ถ้าต้องการให้เหมือนหน้าจอทุกจุด ใช้ปุ่ม พิมพ์ แล้วเลือก “บันทึกเป็น PDF” ในหน้าต่างพิมพ์ของเบราว์เซอร์

ออกใบกำกับภาษีได้ไหม

ได้ เปลี่ยนชื่อหัวเอกสาร RC เป็น “ใบเสร็จรับเงิน / ใบกำกับภาษี” และกรอกเลขผู้เสียภาษี/สาขาของบริษัทและลูกค้าให้ครบ (ควรปรึกษาผู้ทำบัญชีเรื่องรูปแบบที่กรมสรรพากรกำหนด)

แก้ไขเอกสารที่ส่งไปแล้วได้ไหม

ใบเสนอราคาและใบแจ้งหนี้แก้ได้จนกว่าจะถูกแปลงเป็นเอกสารอื่นหรือมีการรับชำระ ส่วนใบเสร็จที่ออกแล้วแก้ไม่ได้ ถ้าต้องแก้ยอดให้ยกเลิกเอกสาร (ระบุเหตุผล — ต้องยกเลิกเอกสารที่อ้างอิงต่อก่อน) แล้วออกใบใหม่ เอกสารที่ยกเลิกยังเห็นในรายการพร้อมตราประทับ “ยกเลิก”

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

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

ใช้พร้อมกันหลายคนได้ไหม

ได้ ทุกการบันทึกและการออกเลขที่ใช้ LockService เหมาะกับธุรกิจที่ออกเอกสารหลักพันใบต่อปี