Erp 101

นั่งเทียน นอนเทียน ศึกษา ERP คำเตือน โปรดระวัง ผมไม่เคยทำงานหรือใช้ SAP มาก่อน

Tuesday, September 06, 2005

Core Business Entities

หายไปนาน ได้ฤกษ์เขียนอีกรอบแล้ว
วันนี้จะว่าด้วยเรื่อง Core Business Entities
(เนื้อหาส่วนนี้มาจาก OSS/j cbe)

Note: ส่วนนี้เป็นเรื่องการ modelling แล้ว
ไม่ได้พูดถึง product ใด product หนึ่ง

ในธุรกิจทุกๆอย่าง ถ้าเราลอง model concept
ของการทำธุรกิจ เราจะได้ Diagram ออกมาดังนี้




นั่นคือ ธุรกิจเป็นเรื่องของ ใคร (who) ทำอะไร (what)
ที่ไหน (where) และ ที่ไหน-อย่างไร (when, where)

  • who -> customer, service provider, supplier etc.
  • what -> product, resource, Service
  • where -> Location & Address
  • when,why -> Interaction

เริ่มที่ who ก่อน
concept ของ who เราจะแยกมองออกเป็น 2 ส่วนคือ
party กับ party role
party ก็คือ คน (Individual)
หรือองค์กร (Organize) ตรงคำว่าองค์กรนี้เรามักจะนึกถึง
บริษัทอย่างเดียว แต่สำหรับในที่นี้ เรามองมันเป็น Business Unit ก็ได้
เช่น สาขา สำนักงานใหญ่
หรือจะมองเป็น group ของคนก็ได้ เช่น Team, ชมรม,
สมาคม



ส่วน party role ก็คือ บทบาทที่คนหรือบริษัทนั้นๆ กำลังสวมอยู่เช่น
บริษัท A (party) เป็นลูกค้า (party-role) ของบริษัทเรา
การแยก party-role ออกจาก party ทำให้เราสามารถ
ตอบโจทย์กรณีที่เรา due กับบริษัทที่เป็นทั้งลูกค้าและ supplier ให้เรา
ได้ง่ายขึ้น

เมื่อมี party ก็ต้องมีเรื่องของการติดต่อ (Contact)
ซึ่งสามารถแยกออกเป็น สถานที่ติดต่อทางไปรษณีย์ , email address
โทรศัพท์, fax etc.
เรา abstract เรียกช่องทางติดต่อนี้ว่า ContactMedium
สามารถเขียนเป็น diagram ได้ดังนี้
(Note ให้สังเกตุว่าจริงแล้ว ความสัมพันธ์ระหว่างที่อยู่
กับ party จะเป็นแบบ many-to-many
แต่ในการ implement จริง ต้องมองความคุ้มค่าด้วย
ว่าคุ้มกับการ implement แค่ไหน)



ที่นี้ลองมองดูที่ Party Role อีกนิดหนึ่ง
party role แต่ละอัน ก็สามารถมีความสัมพันธ์กันได้อีก



จากนั้นก็ว่าด้วยชื่อ (Name)
แต่ละ party จะมี name
ปัญหาของ Name ก็คือ มันเปลี่ยนแปลงได้
ดังนั้นเราจึง model แยกออกมาดังนี้

Friday, June 24, 2005

Posting G/L Transaction

การบันทึก G/L Transaction
จะประกอบด้วยส่วนหัวเอกสาร
กับส่วน รายการทางบัญชีที่ลง

ตัว sap จะมีวิธีบันทึกอยู่ 2 แบบ
คือแบบ complex (version ดั้งเดิม)
กับ แบบ enjoy transaction (gui รุ่นใหม่)

การบันทึกแบบ complex จะมีลักษณะ
เป็นแบบ flow ของ screen
โดยหน้าแรก เป็นการบันทึกส่วนหัว
ส่วนหน้าถัดไป เป็นการบันทึก item
ซึ่งใช้ 1 หน้าต่อ 1 item

ส่วนการบันทึกแบบ enjoy จะใช้
การบันทึกลง widget table โดยตรง (หน้าเดียวจบ)
โดย user สามารถเลือก template
เพื่อกำหนดว่า table ต้องมีช่องอะไรให้กรอกได้

การบันทึกส่วนหัว จะประกอบด้วย
  • document date
  • document type
  • company code
  • posting date
  • period
  • currency
  • document number
  • transaction date
  • reference
  • document header text

document type เช่น
  • dr customer invoice
  • dg customer credit memo
  • dz customer payments
  • sa G/L account document
  • kr vendor invoice
  • kg vendor credit memos
  • kz vendor payment
  • kn venor net invoices and credit memos

ตัว document type จะใช้ control
เลขที่ document number ด้วย
(ตอน config document type ต้อง
กำหนด range ของ document number ด้วย)

การบันทึก item ทำได้โดยใส่ posting key
กับ เลขที่บัญชี
ตัวที่น่าสนใจก็คือ posting key ซึ่งเป็น
รหัสแสดงว่า item ที่เรา post เข้าไปนั้น
เป็นชนิดอะไร เช่น vendor, customer, asset หรือว่าแค่บัญชีธรรมดา
ตัว posting key จะมีผลดังนี้
  • posting key + account code จะเป็นตัวกำหนดว่า จะมี field อะไร
    ที่ต้องใส่บ้างในหน้า จอบันทึกรายการบัญชี
  • กำหนดด้านการลงบัญชี ว่าเป็นประเภท debit หรือ credit

Note: กรณี posting key ที่ต้องใส่ กรณีที่เป็น G/L
transaction ถ้าเป็นบ้านเรา
user ไม่น่าจะยอมใส่ง่ายๆนะ
แต่เห็นว่าใน sap enjoy transaction
ได้ปรับปรุงในส่วนนี้ใหม่
โดยกำหนดว่า user ไม่ต้องใส่ posting key ก็ได้
ตัวโปรแกรมจะใช้ค่า default ซึ่งก็คือค่า 40(debit) หรือ 50(credit)

หลังจาก post แล้ว
sap จะทำการ update ยอด balance ให้โดยอัตโนมัติ
ซึ่งเราสามารถใช้หน้าจอสอบถาม เข้าไปดูได้ทันที
โดยจากหน้าจอ balance เราสามารถ zoom ลงไปดู line item
ที่ประกอบขึ้นมาเป็นยอด balance นั้น
และจาก line item เราก็สามารถเปิดดู
ตัว document ที่เป็นต้นตอของ line item นั้นๆได้

Friday, June 17, 2005

Clearing Program

เป็น feature ของ G/L ที่ผมสนใจ
ก็คือมันจะทำหน้าทีจับคู่ item ที่สามารถ clear
กันได้ ใน account ที่กำหนด
โดย account ที่ใช้ feature นี้จะเป็นพวก
Checks Receivable Clearing account,
Goods Receipt/Invoice Receipt Clearing account

บัญชี clearing ก็คือบัญชีพัก
กำหนดขึ้นเพื่อให้ตรวจสอบได้ง่ายว่า
มีรายการอะไรที่ยังไม่เสร็จสิ้นสมบูรณ์บ้าง
เช่นมีการรับของแต่ยังไม่มีการรับวางบิล

ที่นี้โปรแกรมจะรู้ได้อย่างไรว่าควรจะจับคู่
clear ค่าไหนบ้าง

customer
-------------------------------
2000.00 | 5000.00
3000.00 |


จากข้างบน โปรแกรมจะรู้ได้อย่างไรว่าควร
จับค่า debit 2000 รวมกับยอด 3000 ไปหัก
กับยอด 5000

การจับคู่นี้ sap จะใช้ criteria ดังนี้
  • Business Area
  • Trading partner Id
  • Reconcillation account number
  • Currency

โดยเราสามารถ define criteria
ได้เองอีก 4 criteria

ก่อนที่ Clearing program จะทำงานได้
เราต้องมี configuration ดังนี้
  • บัญชีนั้นต้องมีการกำหนดให้เป็น
    open item management
    บัญชี customer กับ vendor
    จะเป็นบัญชีประเภทนี้เสมอ
  • ต้องมีการกำหนดว่าต้องการ
    ให้มีการ automatic clearing
  • item ที่จะ clear
    ต้องไม่เป็น item ประเภทที่ require extra posting
    ??? อันนี้ยังไม่เข้าใจ
    เขายกตัวอย่างเช่น
    item ที่มี cash discount
    item ที่ post โดยใช้ net method
    item ที่ต้องการ withholding tax posting
  • item ต้องไม่เป็นประเภท special
    transaction
    ??? ยังไม่เข้าใจเช่นกัน

G/L Account Balances

เมื่อมีการ post G/L transaction
ก็จะมีการ update ค่า balance ทันที
และสามารถเรียกดูค่าสรุปเหล่านี้ได้

โดยในแต่ละ account จะแสดงยอดดังนี้
  • ยอดยกมา (ต้นปี)
  • ยอดรวมของ transaction ในแต่ละ period
    โดยแยกให้เห็นทั้งค่า debit และ credit

นอกจากนี้ยังแสดงค่าที่ได้จากการคำนวณดังนี้
  • ยอด balance ของแต่ละ period
  • ยอดยกไปของแต่ละ period


จากหน้าจอที่แสดง account balance
เราสามารถ zoom ลงไปดูรายการที่เกิดในแต่ละ period ได้
โดยส่วนนี้เรียกว่า Line Items

จาก Line Item ก็สามารถตามไปดู document
ที่เป็นต้นตอของ Line Item นั้นได้

Wednesday, June 01, 2005

Account Data in Company Code

ก่อนที่จะนำรหัสบัญชีใน Accounting Chart ไปใช้ได้นั้น
จะต้องมีการ assign รหัสบัญชีนั้นให้กับ Company Code
ที่ต้องการใช้งานเสียก่อน รวมทั้งมีการกำหนด
ข้อมูลเพิ่มเติม (เฉพาะของบริษัทนั้นๆ) ลงไปด้วย

โดยข้อมูลนั้นประกอบด้วย
  • Currency
    เป็นการระบุว่าในการ post transaction
    ลงบัญชีนี้ จะยอมให้ post ด้วย currency อะไรบ้าง
    กรณีที่ระบุเป็น local currency
    ก็จะยอมให้ post เข้ามาด้วย currency อะไรก็ได้
    แต่ถ้าระบุ currency ที่ไม่ใช่ local currency
    ก็จะบังคับให้ใช้ currency ที่ระบุเท่านั้น
    Note: กรณีที่ระบุเป็น foreign currency
    transaction figure (ยอดคงเหลือ) จะ maintain
    ไว้ในรูปของทั้ง local currency และ foreign currency
  • Balances in Local Currency Only
    ใช้สำหรับ clearing account ที่มีการ post ตั้งยอด
    ในรูปของ currency หนึ่ง และตัดยอดในอีก currency หนึ่ง
    เชน บัญชี good received and imcoming invoice
    Note: ตรงนี้น่าสนใจตรง จะต้อง config บัญชี "ผลต่างของอัตราแลกเปลี่ยน"
    ที่ไหน? อย่างไร?
  • Tax Category
    ระบุว่า tax ประเภทไหนที่ post เข้ามาได้
    โดยระบุประเภทว่าเป็นภาษีซื้อ หรือภาษีขาย
    กรณีที่ไม่เกี่ยวกับ tax เลยก็ไม่ต้องระบุอะไร
  • Posting without Tax Allowed
    ระบุว่าในการ post เข้าบัญชีนี้ห้ามไม่ให้ใส่รหัสภาษี
    แต่ถ้าใส่ ก็ต้องอยู่ในกลุ่มที่ระบุใน Tax Category
    Note: ?? เป็นกรณีเฉพาะ เห็นมีการอ้างถึง Jurisdiction code
    แล้วมันคืออะไรหล่ะ
  • Reconciliation Account for Account Type
    กรณีที่เป็น Reconcile account ก็ต้องระบุด้วยว่า
    เป็นประเภทไหน เช่น Vendor, Customer หรือ Asset
  • Open Item Management
    ใช้กับบัญชีประเภท clearing account
    ที่ต้องมีการตั้งยอดและการตัดยอด โดยจะ
    maintain รายการเป็นราย Item
    Note: ถ้านึกไม่ออกให้ลองนึกถึง
    การเก็บยอดคงเหลือใน ใบทวงหนี้บัตรเครดิต
    (กรณีนี้เป็นกรณีตรงข้ามกับ open item)
    ซึ่งปกติจะ maintain ในรูปยอดรวม ไม่แยกรายการย่อย
    เวลาเราชำระเงิน เขาก็จะตัดยอดเงินรวมเลย
    ไม่ได้เอาไปแตกตัดรายการย่อยๆ
  • Line Item Display
    ต้องการดูรายการย่อยๆ ไหม
    (ถ้าไม่ต้องการ ก็จะเป็นการประหยัดเนื้อที่ และเวลาในการเก็บ)
    ตัวอย่างบัญชีที่ไม่ต้องการให้เก็บรายการย่อยๆ เช่น
    บัญชีลูกหนี้ (เนื่องจากรายการย่อยเก็บไว้ใน ระบบบัญชีลูกหนี้ไปแล้ว)
  • Field Status Group
    ใช้ config ว่าในการทำ transaction posting
    ถ้ามีการอ้างถึงบัญชีนี้ จะต้องมีค่าอะไร
    ที่ต้องใส่ (Required, Optional) หรือค่าอะไรที่ให้ซ่อนไว้บ้าง

Friday, May 27, 2005

Chart of Account #2

ต่อจากคราวก่อน
คราวก่อนมีที่เข้าใจสับสนเล็กน้อยก็คือเรื่อง Retained earnings Account
ในการ config Chart of Account Segment
เราจะระบุ Account แค่ว่าเป็นบัญชี
Balance sheet account หรือ
P+L statement account
แค่นั้น ไม่ต้องระบุว่า retained earning
เป็นค่าอะไร เพราะว่าจะมีหน้าจอต่างหาก
สำหรับระบุว่า retained earning account
เป็นเลขที่บัญชีอะไร

Information ที่สำคัญอันหนึ่งสำหรับ
Chart of Account Segment ก็คือ
"Account Group"

ตัว Account Group จะเป็นตัวช่วย control
การป้อนข้อมูลในส่วน Company Specific ให้
เป็นไปอย่างถูกต้อง
โดยทำหน้าที่เป็นตัวกำหนดว่า
  • ช่วงเลขที่ของ account no. ที่ยอมให้ใช้ได้
    (ตรงนี้จะเป็นการตรวจสอบความถูกต้องว่า
    user ตั้งเลขที่ account ถูกต้องหรือไม่)
  • ข้อกำหนดของข้อมูล (field properties)
    • ข้อมูลอะไรต้องถูกป้อน (Required)
    • ข้อมูลอะไรที่ไม่ใช้ (Hide)
    • ข้อมูลอะไรที่ห้ามแก้ไข (Display)
    • ข้อมูลที่ไม่บังคับใส่ (Optional)

field properties นี้ บางอันก็จะเป็น
กลุ่มของ field ถ้ากำหนดเป้น required
field ย่อยๆทุกอันในกลุ่มนั้น ก็จะมีสถานะ
เป็น required ด้วย

บาง field ก็เป้น field บังคับเสมอ
account group ไม่สามารถเปลี่ยนแปลง
status นี้ได้ เช่น field "Account Currency"

Saturday, May 21, 2005

Chart of Account #1

ในการ config SAP ตัว Variant ที่สำคัญที่ขาดไม่ได้ก็คือ
ต้องมีการระบุว่า Company นั้นใช้ Chart of Account
อะไร

คำถามก็คือ Chart of Account คืออะไร
ตัว chart of account จริงๆ ก็คือ group
ของ Account definition นั่นเอง โดยออกแบบให้
เก็บแต่ค่าที่สามารถ share กันใช้ระหว่าง Company
(ชื่อก็คือพวกชื่อ, รหัส, )

ส่วนประเด็นที่ว่า ทำไมต้องมี chart of account
แยกออกมาต่างหากหล่ะ ทำไมไม่ออกแบบให้เป็นแบบ
บริษัทฯใครบริษัทฯมันไปเลย ที่เป็นเช่นนี้ก็เพราะว่า
เป้าหมายจริงๆในการใช้ chart of account ก็คือ
เพื่อความสะดวกใน การ Consolidate หรือ การออกงบการเงินโดยรวม
ของหลายๆบริษัทฯในเครือ หรือหลายๆ Account Entity เข้าด้วยกัน
(ผลพลอยได้ ก็คือสะดวกในการ config)

Chart of Account 's Definition
  • รหัส (4 หลัก)
  • คำอธิบาย
  • ภาษาหลัก (maintenance language)
  • ความยาวของเลขบัญชี
    สูงสุดได้ 10 หลัก
  • automatic สร้าง Cost Element หรือไม่
    (อยู่ในเรื่องของ controlling ?เรียกบัญชีต้นทุนได้หรือเปล่า)
  • group chart of account (yes/no)
    ใช้ในกรณีที่ต้องการ consolidate งบการเงินระหว่าง company
    ที่ใช้ Chart of Account คนละตัวกัน ถ้า set
    ค่านี้ ตอนที่เราป้อนบัญชีแต่ละบัญชี เราต้องระบุ cosolidate
    account ด้วย
  • blocked indicator
    เป็น flag ที่ใช้ป้องกันไม่ให้ user สร้าง account
    (? เพราะยัง config ไม่เสร็จดี)


Chart of Accounts Segment
ถ้าฟังแต่ชื่ออย่างเดียว ก็จะงงหน่อย ว่ามันคืออะไรวะ
จริงๆแล้วมันก็คือ ส่วนที่เป็น definition ย่อยๆ
ของแต่ละบัญชีที่อยู่ภายใน Chart of Account นั่นเอง
1 segment ก็คือ 1 บัญชี

ภายในแต่ละบัญชี จะมีการกำหนด
  • เลขที่บัญชี
    ความยาวได้สูงสุดตามที่กำหนดไว้ใน chart of account definition
  • ชื่อบัญชี (shortname, longname)
  • ระบุว่าเป็นบัญชีกลุ่ม profit+loss(พวกรายได้/รายจ่าย) หรือ
    เป็นพวก balance sheet account
    ซึ่งจะไปมีผลตอนปิดบัญชีสิ้นปี
    ถ้าเป็นบัญชี profit&Loss จะเกิดการปิดยอดไปลงบัญชีกำไรขาดทุน
    (ซึ่งต้องระบุลงไปด้วย ว่าเป็นบัญชีเลขที่อะไร)
    Note: การระบุเลขที่บัญชีกำไรขาดทุน จะมีลักษณะ
    เป็น indirect กล่าวคือเราไม่ได้ระบุเลขที่ลงไปตรงๆ
    แต่ระบุเป้น key แทน จากนั้นค่อยกำหนดว่า key
    นั้นหมายถึงเลขที่บัญชีอะไร ? เดาว่าที่เขาทำอย่างนี้
    เพราะจะได้สะดวกถ้าเกิดมีการเปลี่ยนแปลงเลขที่
    บัญชีตรงนี้ จะได้ทำได้ง่าย เปลี่ยนจากจุดเดียว
  • Account Group
    ตัวนี้เป็นตัวช่วย config พฤติกรรมและคุณสมบัติ
    ของ account ว่าควรเป็นอย่างไร
  • Cosolidate fields
  • Translation text (ชื่อในภาษาอื่นๆ ที่ไม่ใช่ maintenance language)

Note: ทุก company ที่ใช้ account นี้จะ
เห็นชื่อบัญชีหรือค่าอื่นๆใน chart of account definition
เหมือนกันไม่ว่าจะอยู่ใน company ไหน

Company Code Segment
เป็นส่วนของ Account ที่ customize สำหรับแต่ละ
company โดย segment นี้จะเกิดเมื่อมีการ assign
chart of Account segment ให้กับ company
ข้อมูลใน Company Code Segment ประกอบด้วย
  • Currency
  • Taxes
  • Reconciliation account
  • Line item display
  • Sort key
  • Field status group
  • House bank
  • Interest calculation information

Friday, May 20, 2005

Variant Priniple

ตอนแรกก็ไม่แน่ใจในศัพท์ตัวนี้นัก แต่ตอนนี้เข้าใจแล้ว
หลักการก็คือ object ใดๆที่มีโอกาศ share หรือใช้
ร่วมกันระหว่าง company หรือ business entity ได้
SAP จะเรียกตัวนั้นว่า Variant
ตัวอย่างของ Variant ก็เช่น fiscal year, Chart of Account

ส่วนมุมมองของ Programer ก็คือ Variant
ถือได้ว่าเป็น ความสัมพันธ์แบบ many-to-one ของ
business entity เช่น
Company<--many ---to--- one--> Chart of Account


ดังนั้นตัว chart of account จึงถือเป็นพวก Variant

? จริงๆแล้วพวก many-to-many ก็น่าจะถือเป็น
variant เหมือนกันนะ เพราะมันต้องถูก share ใช้
ระหว่าง company เหมือนกัน

Currencies

ประเด็นของ currencies จะเกิดในตอนที่
มีการซื้อขายกับ vendor หรือ customer
ที่อยู่นอกประเทศ
โดยในการลงบัญชี จะต้องมีการ convert
สกุลเงินให้เป็นสกุลเงินที่ได้ define ไว้ที่
company code เสียก่อน

ประเด็นที่เกิดขึ้นก็คือ จะต้องมีการ maintain
convertion table ที่ใช้ในการ convert
ซึ่งการป้อนด้วยมือ ดูจะเป็นทางเลือกที่น่าพิสมัย
น้อยสุด ในส่วนของ SAP ได้เตรียมทางเลือกไว้
2 แบบก็คือ
  • manual upload file
    เตรียม file ให้อยู่ใน format ที่กำหนดแล้วก็
    upload ตามอัธยาศัย
  • Remote Function Call
    เป็นการ call ออกไปยัง external system
    เพื่อให้ได้ข้อมูลกลับมา


สิ่งที่น่าสนใจก็คือ วิธีการเก็บ Exchange Rate
​เนื่องจาก rate มีอยู่ 2 rate ก็คือ selling rate
กับ Buying rate แทนที่จะเก็บ 2 ค่านี้
เราจะเก็บเป็น Average Rate กับ Spread ณ ขนาดนั้นแทน
เนื่องจากตัว Spread ส่วนใหญ่จะไม่ค่อยเปลี่ยนแปลง

Selling Rate ---------
|
+ spread
|
Average Rate ---------
|
- spread
|
Buying Rate ----------


ส่วนประเด็นสุดท้ายก็คือ รูปแบบของ convertion rate
อยู่ในรูป direct quotation หรือ indirect quotation
(จะเอามาคูณ หรือเอามาหาร เพื่อแปลงเป็น local currency
แค่นั้นเอง)