คลังเก็บป้ายกำกับ: SAP

Unicode ใน SAP

หลายวันก่อนมีบริษัทผู้ให้บริการซอฟต์แวร์ SAP เข้ามาที่ทำงานผม เนื้อหาที่เขาเข้ามาพูดก็คือการปรับรุ่นของซอฟต์แวร์ SAP ที่ ๆ ทำงานผมใช้อยู่ จากรุ่น 4.7 ไปเป็น ECC6 ซึ่งเรื่องปรับรุ่นไม่มีประเด็น เพราะถ้าไม่ปรับก็คงจะไม่มีใครมาช่วยเหลืออีก เนื่องจาก SAP เขาจะหยุดสนับสนุน SAP รุ่น 4.7 ในอีกประมาณครึ่งปีข้างหน้านี้

แต่ที่มีประเด็นกลับเป็นเรื่องของ Unicode เพราะรุ่น 4.7 ไม่ได้ใช้ Unicode ในขณะที่รุ่น ECC6 ใช้ Unicode!!!

จริง ๆ แล้ว Unicode ถูกออกแบบขึ้นมา เพราะโลกเรามันมีภาษาเขียนหลายสิบหลายร้อยภาษา ดังนั้น การเอาตัวเลขเพียงแค่ 8 บิต (รหัส ASCII) มาแทนอักขระของทุกภาษามันจึงเป็นไปไม่ได้ ดังนั้น เขาก็เลยเอาตัวเลขแบบ 16 บิต (Unicode) มาใช้แทนอักขระของทุกภาษาในโลก และเป็นที่มาของสิ่งที่เรียกว่า Unicode

ปัจจุบันมีการเอาตัวเลขแบบ 32 บิต (Unicode) มาใช้แทนอักขระของทุกภาษาในโลกแล้วด้วยซ้ำไป!!!

ทีนี้วกกลับมาเรื่องปรับรุ่น SAP ก่อน คือ บางครั้งบริษัทผู้ให้บริการซอฟต์แวร์ SAP เขาก็นำเสนอไม่ค่อยเป็น เพราะเมื่อถูกถามว่าทำไมต้องเปลี่ยนไปเป็น Unicode แทนที่เขาจะอธิบายว่าการเก็บข้อมูลมันจะเปลี่ยน เช่น จากเดิมอักขระ “ก” จะถูกเก็บ 8 บิตเป็นค่า A1 พอเปลี่ยนมาเป็น 16 บิตแบบ Unicode ก็จะกลายเป็นค่า 0E01 อะไรแบบนี้ คือเขาควรอธิบายแบบนี้ แต่กลายเป็นว่าเขาพาออกทะเล ดันไปบอกว่าถ้าเราใช้ Unicode แล้วมันจะสนับสนุนหลายภาษาได้ พาเข้ารกเข้าพงไปกันใหญ่ เพราะพอถามกลับไปว่าปรกติก็ใช้แต่ภาษาอังกฤษกับภาษาไทย แล้วจะใช้ Unicode ไปทำไมล่ะ ในเมื่อไม่ได้ใช้หลายภาษา ใช้แค่สองภาษาเอง?

นอกจากนี้ก็ยังมีเรื่องของเนื้อที่จัดเก็บ เพราะเดี๋ยวนี้ SAP เขาเก็บเป็น Unicode 32 บิต นั่นแสดงว่าเราต้องเสียเนื้อที่เพื่อจัดเก็บแต่ล่ะอักขระเพิ่มขึ้นเป็น 4 เท่า คือ จากเดิมอักขระเดียว 8 บิต ก็กลายเป็นอักขระนึง 32 บิต ซึ่งแสดงว่าเราต้องเพิ่มเนื้อที่ฮาร์ดดิสก์อีกอย่างเยอะ เพื่อให้รองรับต่อการขยายตัวนี้ ซึ่งข้อนี้บริษัทเขาสามารถโต้แย้งได้ คือเขาบอกว่า SAP ECC6 มันสามารถบีบอัดข้อมูลได้ 30% ดังนั้น ไม่น่าจะมีประเด็นเรื่องของเนื้อที่

ตอนจบของการพูดคุยเราเลยบอกเขาไปว่า เรายังคงอยากเก็บหนึ่งอักขระด้วยตัวเลข 8 บิตอยู่ ดังนั้น ช่วยไปหาตัวแปลงทั้งขาเข้าและขาออกจาก SAP ECC6 ให้มันคุยกับข้างนอกเป็น Unicode 32 บิต แล้วคุยข้างในเป็น ASCII 8 บิตให้ที

ให้ PHP ใช้ SAPRFC เพื่อดึงข้อมูลจาก SAP R/3

ผมกำลังจะทำชิ้นงานหนึ่งชิ้น เพื่อดึงเอาข้อมูลออกจาก SAP R/3 ออกมาใช้ครับ โดยชิ้นงานที่ว่าจะออกเป็นแนว Web Application ซึ่งผมก็คิดว่าผมจะสร้างมันด้วย PHP โดยจะใช้ SAPRFC ซึ่งเป็น PHP Extension สำหรับแทงทะลุเข้าไปใน SAP R/3 ครับ

จริง ๆ แล้วผมจะเขียนภาษา ABAP เพื่อให้มันทำงานบน SAP R/3 ก็ได้นะ มันได้ผลเหมือนกัน เพียงแต่ผมอยากจะแสดงผลออกมาเป็น Web Application ที่มีลูกเล่นสวย ๆ โดยใช้ XHTML + CSS + jQuery + AJAX มากกว่า และอีกอย่างผมก็ไม่อยากจะให้ผู้ใช้งาน ต้องมาติดตั้ง SAP GUI ให้วุ่นวายด้วย ก็เลยเลือกทำเป็น Web Application แทน

หลัก ๆ แล้วการเชื่อมต่อจาก PHP ไปที่ SAP R/3 สามารถทำได้สองวิธีครับ คือใช้ RFC กับใช้ SOAP แต่ผมเลือกใช้ RFC เพราะมีคนเก่ง ๆ ทำ PHP Extension ที่เรียกว่า SAPRFC ให้เราแล้ว ทำเป็น API สวยงาม พร้อมให้เราเรียกใช้ได้เลย

ตอนแรกผมนึกว่าผมจะใช้ ASP.NET เพื่อทำเป็น Web Application แล้วต่อเชื่อมไป SAP R/3 ด้วย SAP Netweaver ที่มี API ของ .NET Framework เตรียมมาให้ แต่แย่หน่อย ผมไม่ได้เป็นสาวกของ Microsoft ผมชอบ PHP มากกว่า ก็เลยเลือกใช้ PHP แทน (ชุมชนมันใหญ่ดี)

วกกลับมาเรื่อง RFC ต่อ คือว่า แนวคิดของ SAP R/3 เ่นี่ย เขาจะอนุญาตให้โปรแกรมคอมพิวเตอร์ภายนอกเรียกเข้ามาที่ SAP R/3 ได้ แต่ไม่ให้เรียกเข้ามาตรง ๆ มาคุ้ยมาเขี่ยตามใจชอบอะไรแบบนั้น คือจะต้องเรียก Function ที่เตรียมเอาไว้ใน SAP R/3 ซึ่ง Function ดังกล่าวก็จะมี Parameter สำหรับรับเข้าและส่งออก และที่สำคัญ Function ดังกล่าวต้องสร้างเอาไว้โดยมีคุณสมบัติเป็น Remote-enabled Module

มีคนแต่งหนังสือสอนเรื่องนี้ไว้หลายคน เช่น อันนี้ เป็นต้น

การเขียนโปรแกรมคอมพิวเตอร์เพื่อเชื่อมต่อกับ SAP R/3 ถือว่าเป็นเรื่องท้าทาย เพราะโดยปรกติแล้ว ก็มีแต่ผลิตภัณฑ์ของ SAP กันเองนั่นแหล่ะ ที่ใช้่ RFC เพื่อเชื่อมต่อรับส่งข้อมูลหากัน คนนอกไม่ค่อยอยากไปยุ่งด้วยเท่าไหร่หรอก มันเป็นระบบกึ่งปิดกึ่งเปิด

ก็ทำมันบน SAP สิ

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

ผมเองเป็นคนจำพวกหลัง มันเลยทำให้ผมต้องกลับมาวิเคราะห์ระบบงานคอมพิวเตอร์ เพื่อให้คอมพิวเตอร์มันทำงานตามความต้องการของผู้ใช้งาน!!!

เดี๋ยวนี้ผู้ใช้งานเอาแต่ใจตัวเองน้อยลงครับ เริ่มจะไม่สนใจแล้วว่าผลลัพธ์จะออกมาในรูปแบบใด ขอแค่มันออกมาได้เป็นพอแล้ว มันก็เลยทำให้นักเขียนโปรแกรมคอมพิวเตอร์เริ่มมีทางเลือกมากขึ้น ว่าจะแสดงผลลัพธ์ออกมาในรูปแบบใด ไม่ว่าจะเป็น Window Form, Web Form, SAP Form หรือ Oracle Form และใช้กลไกใดในการทำให้มันสำเร็จ ไม่ว่าจะเป็น Window Application หรือ Web Application เป็นต้น

ทีนี้ถ้าแหล่งกำเนิดข้อมูลสำหรับนำเข้าระบบฯ มันมาจากหลายแหล่งล่ะ? เราควรจะพิจารณาว่าเราควรจะสร้างกลไกแบบไหนดี เพื่อให้ทุ่นแรงมากที่สุด ซึ่งเรื่องนี้ต้องพิจารณาออกเป็นสามเรื่องใหญ่ ๆ คือ เรื่องแรกพิจารณาถึงสัดส่วนของแหล่งกำเนิดข้อมูล, สองคือการพิจารณาถึงความยากง่ายของกลไก และสามคือการพิจารณาถึงคนที่จะมาสร้างมันขึ้นมา

อย่างเรื่องแรกที่ใช้วิธีพิจารณาถึงสัดส่วนของแหล่งกำเนิดข้อมูล เราก็ต้องมาดูว่าระบบฯที่เราจะสร้างขึ้นมา มันนำเข้าข้อมูลมาจากไหนบ้าง เช่น จาก SAP 50%, จาก Oracle Database 20%, จาก SQL Server 20% และจาก Microsoft Excel อีก 10% งั้นก็ตัดสินใจดิบ ๆ ได้เลยว่า เราควรจะทำโปรแกรมเป็นแบบ SAP Form ทำงานในแบบ Window Application บนสภาพแวดล้อมของ SAP โดยเขียนภาษา ABAP ขึ้นมา แล้วก็เรีียก Function Module มาตรฐานโน่นนี่นั่นที่ SAP จัดเตรียมมาให้ เพื่อสร้างเป็นโปรแกรมคอมพิวเตอร์ขึ้นมา สำหรับต่อเชื่อมกับฐานข้อมูลของ SAP เอง และต่อเชื่อมกับ Oracle Database, SQL Server Database และมีกลไกในการ Import ไฟล์ Microsoft Excel อะไรเงี้ย

ส่วนเรื่องสองคือการพิจารณาถึงความยากง่ายของกลไก เราต้องพิจารณาว่าการเขียนโปรแกรมคอมพิวเตอร์แบบไหนยากกว่ากัน เช่น เขียน ABAP เพื่อทำเป็น SAP Form ยากมั้ย? หรือเขียนด้วย Visual Studio .NET เพื่อทำเป็น Window Form จะยากกว่า หรือเขียนด้วย PHP แล้วใช้ CakePHP เพื่อทำเป็น Web Form แล้วให้มันทำงานแบบ Web Application จะลำบากหน่อยแต่ดูสวยงาม หรือแม้กระทั่งจะเขียนด้วย Developer 2000 เพื่อทำเป็น Oracle Form ซะเลย ซึ่งถ้าสุดท้ายเราพิจารณาแล้วว่าทำเป็น SAP Form มันจะง่ายกว่า เพราะมันมีกลไกเจ๋ง ๆ อย่าง ALV Report เอย มี Selection Screen เอยเอาไว้ให้เราใช้ เราก็ควรจะเลือกมันเป็นลำดับต้น ๆ ก่อน

สำหรับเรื่องที่สามซึ่งเป็นเรื่องสุดท้ายที่เราจะพิจารณา นั่นก็คือคนของเราน่ะถนัดใช้เครื่องมืออะไรในการทำ และมีความพร้อมจะทำหรือเปล่า เช่น เรามี ABAPER ที่เป็นคนของบริษัทภายนอกที่เราจ้างเอาไว้ด้วย man day ตายตัว เราควรจะให้เขาทำมั้ย? หรือ เราควรจะให้คนในองค์กรทำกันเองด้วย Visual Studio .NET เพราะคนของเราก็ทำ Window Application แบบ Win Form เก่งเหมือนกัน? หรือ เราควรจะใช้คนของทีม Web เพื่อให้มาทำ Web Form ดี แต่เอ๊ะ เขาไม่เกี่ยวกับเรื่องนี้ เขาจะยอมทำให้หรือเปล่า?

ถ้าเราพิจารณาทั้งสามเงื่อนไขแล้ว เราเห็นว่ามันเข้าเงื่อนไขสองในสาม ก็เลือกแบบนั้น ๆ ไปก็แล้วกัน ซึ่งตามตัวอย่างข้างต้นจะเห็นว่า การเลือกทำบน SAP จะเป็นคำตอบที่ดีที่สุด เพราะมีการนำเข้าข้อมูลจาก SAP 50% ซึ่งถือเป็นข้อมูลสัดส่วนใหญ่, ใช้ ABAP เพื่อทำ SAP Form ง่ายกว่า เพราะมีเครื่องมือที่เอื้ออำนวยในการเข้าถึงข้อมูล และ ใช้ ABAPER ของบริษัทที่จ้างเอาไว้ เพราะเป็นมืออาชีพกว่า เป็นต้น

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

Cross Function Workflow

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

แต่พอผ่านไปผมก็พบว่า ยิ่งคุยยิ่งยาก ดังนั้น การเขียน flowchart มันไม่พอ มันต้องมีการแบ่งแยกด้วยว่า กระบวนการและข้อมูลในช่วงนั้น ๆ ถูกกระทำโดย Unit ใด ก็เลยกลายเป็นว่าต้องเขียนเป็น workflow แทน

เดี๋ยวนี้อาการหนัก เพราะตั้งแต่ทำ SAP R/3 เลยทำให้รู้ว่า การเขียน workflow แบบพื้น ๆ เพียงอย่างเดียวมันไม่พอ ต้องมีการใส่มิติให้กับมันด้วย เพราะ SAP R/3 มันมีหลาย Module ซะเหลือเกิน แถม Unit แต่ล่ะส่วน ก็ใช้ Module สลับไปสลับมาอีกต่างหาก T-T

ต่อไป ไม่แน่ อาจจะต้องเขียนกันเป็น workflow 3 มิติกันเลยทีเดียวเชียว

งาน SAP

ถ้าเราไม่นำเอามาตรฐาน ITIL มาใช้เพื่อแบ่งงานซ่อมบำรุง SAP เราก็จะสามารถแบ่งงาน SAP ออกได้เป็น 4 ประเภทใหญ่ ๆ คือ MODULE, BASIS, AUTHORIZE และ ABAP

งาน SAP
งาน SAP

งาน MODULE จะครอบคลุมการ Configure เพื่อให้ MODULE ต่าง ๆ เช่น FI, CO, MM, SD หรือ HR สามารถทำงานได้ตามความต้องการของผู้ใช้งาน

งาน BASIS จะเกี่ยวกับการจัดการขั้นพื้นฐานของ SAP เพื่อให้สามารถเชื่อมประสานระหว่าง Server, Database, Network และ SAP ได้อย่างลงตัว

งาน AUTHORIZE เป็นการกำหนดศักดิ์และสิทธิ์ให้กับผู้ใช้งาน ว่าจะสามารถใช้งานกลไกใด ๆ ใน SAP ได้บ้าง

งาน ABAP คือการเขียนโปรแกรมด้วยภาษา ABAP เพื่อสั่งให้ SAP ทำหรือไม่ทำสิ่งที่ต้องการ เพื่อตอบสนองความพึงพอใจสูงสุดของผู้ใช้งาน

มีคนเคยบอกผมว่าคนที่เชี่ยวชาญ SAP จะสามารถสร้างรายได้ให้กับตัวเองได้อย่างมากมาย แต่บางทีก็ต้องเจาะลึกลงไปเหมือนกัน ว่างานย่อยในส่วนใดของ SAP ที่ให้รายได้สูงที่สุด??

อือม ตรงนี้ผมก็ไม่รู้เหมือนกัน!!!