สวัสดีครับ
ปัญหาคือ พอดีทางบริษัทผมต้องการซื้อโปรแกรม Express มาทำบัญชีสรรพกรโดยเฉพาะอย่างเดียว
ซึ่งบัญชีภายในและการออกเอกสารต่างๆ รวมถึงใบกำกับภาษีที่ส่งให้ลูกค้าไปนั้น ยังคงใช้โปรแกรม ERP ตัวเดิมของบริษัท
ทำให้มีความจำเป็นต้องทำให้รายงานที่ส่งสรรพกรต่างๆใน Express เช่น รายงานแยกประเภท เป็นต้น มีเลขที่เอกสารสอดคล้องกับของโปรแกรมหรือเอกสารเดิม
ยกตัวอย่าง index ใบขายสินค้าของโปรแกรม ERP เดิมของเราคือขึ้นต้นด้วย SV
index ใบขายสินค้าของโปรแกรม Express คือขึ้นต้นด้วย IV
และ Express เองก็มีข้อจำกัดดังนี้
1. ไม่สามารถลบหรือแก้ไข index เอกสารตั้งต้นของระบบได้ (index มาตรฐานของระบบ) ในที่นี้คือ IV
2. ถ้าเกิดเราสร้างเมนูเอกสารเพิ่มขึ้นมาอีกเป็น SV โดยไม่ไปยุ่งกับ IV index SV ก็ไปซ้ำกับเอกสารมาตรฐานในระบบของ Express อีก
3. มีหลาย index เอกสารที่ทางฝั่งของผมจะชนกับ Express (ชนในที่นี้คือ index ไม่ตรงกัน และ ตรงกันแต่เอกสารคนละประเภท เช่น RR ของผมคือ รับชำระหนี้ แต่ RR Express คือ ตั้งหนี้หรือรับสินค้า)
จากปัญหาและข้อจำกัดข้างต้น
ผมเลยต้องใช้ Solution หรือทางออกสุดท้ายนั้นคือ การแก้ไขที่หน้าฉากนั้นคือตัว Report นั้นเอง
ซึ่งผมจะบันทึกเอกสารต่างๆตามปรกติในระบบ Express (ใช้ index มาตรฐานตาม Express)
แต่ตอนที่พิมพ์พวกเอกสารส่งสรรพกรนั้น ผมจะใช้ความสามารถของโปรแกรมรายงาน editor ของ Express เองในการแปลง index ตอนพิมพ์ออกมา
ที่นี้มาถึงคำถามสำคัญครับ
ผมยังไม่เคยใช้โปรแกรม Express มาก่อน และยังไม่เคยแตะตัวจัดการแก้ไข Report ของ Express เอง ซึ่งตัว Demo ก็ไม่อณุญาติผมให้ทดลองตรงฟังชั่นนี้
ผมทำได้แค่ สืบค้นข้อมูลบนเว็ปบอร์ดนี้ เพื่อหา syntax หรือเครื่องมือที่ตัวโปรแกรม Express ทำได้จาก Case ของพี่ๆเพื่อนๆในนี้หลายๆคน และประยุกต์เป็น code logic คร่าวๆขึ้นมา (ซึ่ง syntax อาจจะผิด และอาจจะ compile หรือ run ไม่ผ่าน error) ผมจึงขอความกรุณาเพื่อนๆพี่ๆ ที่มีตัวโปรแกรมในมือหรือเคยผ่าน case นี้มา หรือแม้แต่สามารถช่วยฟันธงให้ผมได้ว่า "มันสามารถทำได้" ก่อนที่ผมจะตกลงซื้อมาครับ (ถ้าซื้อมาแล้วทำไม่ได้ ผมตายแน่ครับ) และก่อนหน้านี้ผมได้มีโทรไปสอบถามทั้งคนที่เชี่ยวชาญที่เป็น dealer ของ Express และตัว Support ของบริษัท Express เองแล้ว ต่างก็บอกว่าทำได้ แต่เพื่อความแน่ใจครับ ผมรบกวนขอให้ดูแนวคิดผมดังนี้
1. ในตัว report editor ที่มาพร้อมกับ โปรแกรม Express มันควรจะต้องมีเครื่องมือให้สร้าง Field หรือ parameter หรือตัวแปรขึ้นมาเองได้
2. ผมขอใช้ชื่อตัวแปรหรือ field ว่า Doc_Change
3. ผมสมมุตให้ ตัวแปรหรือfield มาตรฐานของ เลขที่เอกสาร ของรายงานนั้นๆ เช่นรายงานแยกประเภท field ชื่อว่า doc_name
4. ผมสมมุตว่ามันมีฟังชั่นชื่อว่า substring(stringที่ต้องการตัด,ตำแหน่งเริ่มตัด,ความยาวว่าตัดถึงไหน)
5. เลขที่เอกสารของใบขายของ Express ที่ผมจะ input ในระบบคือ IV5909/0001 ส่วนของระบบเดิม ERP ของผมคือ SV5909/0001
6. ภายใน Doc_Change ผมจะให้มันมี code logic ดังนี้ (syntax และโครงสร้างของ syntax อาจไม่ถูกต้อง เป็นแค่การสมมุติจากฟังชั่นและ syntax ที่ผมไปค้นเจอจากพี่ๆเพื่้อนๆในบอร์ดนี้ ซึ่งผมยังไม่ชัวร์ในหลักการใช้งาน)
IFF(substring(doc_name,1,2)='IV'),'SV'+substring(doc_name,3,9),doc_name);
ซึ่งมันจะทำการตรวจว่า doc_name ที่ออกมาจากระบบ Express นั้นๆ เป็นเอกสารที่มี index นำหน้าด้วย 2 ตำแหน่งแรก IV หรือปล่าว ถ้าเงื่อนไขถูก เป็น true ก็ให้ output พิมพ์ string SV ของผม ต่อ string ด้วย เลขที้เอกสารนั้นๆ 9 ตัวที่เหลือ แบบนี้ก็จะสามารถแปลงจาก IV5909/0001 เป็น SV5909/0001 ได้โดยมีเลขที่เอกสารตำแหน่งที่ 3ถึง9 ถูกต้องตามต้นฉบับ และหากไม่เข้าเงื่อนไข หรือคือไม่ใช้เอกสาร index ที่ผมสนใจ ก็ให้ output พิมพ์ doc_name ตามระบบ ตามเดิมครับ
จากตรงนี้ apply ต่อคือ สมมุตว่า มันสามารถใส่ logic IFF ได้กี่บรรทัดก็ได้ ผมจึงจำเป็นต้องใส่หลายตัวเพราะ ใน 1 รายงานแยกประเภทย่อมมีเลขที่เอกสาร index หลายประเภทอยู่ในนั้นซึ่งมีอยู่หลายตัวที่ผมจำเป็นต้องแปลง ทั้งใบรับสินค้า จาก RR เปลี่ยนเป็น BV, ใบชำระหนี้จาก RE เปลี่ยนเป็น RR และอื่นๆ ผมก็จะใช้ logic เดิมแต่วางหลายบรรทัดดังนี้
IFF(substring(doc_name,1,2)='IV'),'SV'+substring(doc_name,3,9),doc_name);
IFF(substring(doc_name,1,2)='RR'),'BV'+substring(doc_name,3,9),doc_name);
IFF(substring(doc_name,1,2)='RE'),'RR'+substring(doc_name,3,9),doc_name);
เพราะฉะนั้นขอความกรุณารบกวนชี้แนะให้ผมด้วยครับ หากตรงไหนไม่ถูกต้องหรือผมเข้าใจผิด เช่นทั้ง logic, syntax,
หรือแม้แต่ จุดไหนที่มันเป็นไปไม่ได้ หรือทำแล้ว Error แน่นอน ไม่สามารถทำได้ เพราะความสามารถของตัวโปรแกรมรายงาน editor ของ Express ทำไม่ได้
ชี้แจงได้ทันทีเลยครับ เพราะทางบริษัทต้องการความชัวร์จากผม 100% ก่อนยืนยันการสั่งซื้อครับ
สุดท้ายนี้ ผมขอขอบคุณสำหรับเวลาอันมีค่า และขอบคุณสำหรับคำตอบของทุกคนครับ ขอบคุณมากครับ






