Duration Data Type ในภาษา AL ของ Microsoft Dynamics 365 Business Central เป็นชนิดข้อมูลที่ใช้สำหรับการจัดการและคำนวณระยะเวลา (time duration) โดยระยะเวลานี้สามารถประกอบด้วยหน่วยเวลา เช่น ชั่วโมง (hours), นาที (minutes), วินาที (seconds), และมิลลิวินาที (milliseconds) ชนิดข้อมูล Duration นี้ช่วยให้นักพัฒนาสามารถคำนวณเวลา เปรียบเทียบระยะเวลา หรือแปลงเวลาไปเป็นข้อความที่เข้าใจง่ายในแอปพลิเคชันของพวกเขาได้อย่างมีประสิทธิภาพ
การประกาศตัวแปรชนิด Duration
ในภาษา AL การประกาศตัวแปรชนิด Duration สามารถทำได้ง่ายๆ โดยใช้คำสั่ง Duration ตามด้วยชื่อของตัวแปรที่ต้องการ เช่น:
varTotalDuration: Duration;
ในตัวอย่างนี้ ตัวแปร TotalDuration จะใช้สำหรับเก็บข้อมูลระยะเวลา
การกำหนดค่าให้กับ Duration
การกำหนดค่าให้กับ Duration สามารถทำได้โดยการคำนวณจำนวนชั่วโมง นาที วินาที หรือมิลลิวินาทีที่คุณต้องการ เช่น:
TotalDuration := 2 * 60 * 60 * 1000; // 2 ชั่วโมง
หรือคุณสามารถรวมหลายหน่วยเวลาเข้าด้วยกัน:
TotalDuration := (2 * 60 * 60 * 1000) + (30 * 60 * 1000); // 2 ชั่วโมง 30 นาที
ในตัวอย่างนี้ เราได้กำหนดค่าระยะเวลาเป็น 2 ชั่วโมงและ 30 นาที โดยใช้การคำนวณในหน่วยมิลลิวินาที
ตัวอย่าง: การคำนวณเวลาทำงานทั้งหมดและเปรียบเทียบกับเวลาทำงานมาตรฐาน
สมมุติว่าคุณต้องการคำนวณเวลาทำงานทั้งหมดของพนักงานในแต่ละวัน และเปรียบเทียบกับเวลาทำงานมาตรฐาน (Standard Working Time) ที่กำหนดไว้คือ 8 ชั่วโมง เพื่อดูว่าพนักงานทำงานเกินเวลาหรือไม่
procedure CalculateWorkingTime(StartTime: DateTime; EndTime: DateTime)
var
TotalWorkingTime: Duration;
StandardWorkingTime: Duration;
Overtime: Duration;
WorkHours: Integer;
WorkMinutes: Integer;
OvertimeHours: Integer;
OvertimeMinutes: Integer;
MessageText: Text;
begin
// กำหนดเวลาทำงานมาตรฐานเป็น 8 ชั่วโมง
StandardWorkingTime := 8 * 60 * 60 * 1000;// 8 ชั่วโมง = 8 * 60 นาที * 60 วินาที * 1000 มิลลิวินาที
// คำนวณเวลาทำงานทั้งหมด
TotalWorkingTime := EndTime - StartTime;
// แปลงเวลาทำงานทั้งหมดเป็นชั่วโมงและนาที
WorkHours := TotalWorkingTime DIV (3600 * 1000); // 1 ชั่วโมง = 3600 วินาที * 1000 มิลลิวินาที
WorkMinutes := (TotalWorkingTime MOD (3600 * 1000)) DIV (60 * 1000); // 1 นาที = 60 วินาที * 1000 มิลลิวินาที
if TotalWorkingTime > StandardWorkingTime then begin
// คำนวณเวลาทำงานโอที
Overtime := TotalWorkingTime - StandardWorkingTime;
// แปลงเวลาทำงานโอทีเป็นชั่วโมงและนาที
OvertimeHours := Overtime DIV (3600 * 1000);
OvertimeMinutes := (Overtime MOD (3600 * 1000)) DIV (60 * 1000);
MessageText := StrSubstNo('เวลาทำงานทั้งหมด: %1 ชั่วโมง %2 นาที. เวลาทำงานโอที: %3 ชั่วโมง %4 นาที',WorkHours, WorkMinutes, OvertimeHours, OvertimeMinutes);
end else begin
MessageText := StrSubstNo('เวลาทำงานทั้งหมด: %1 ชั่วโมง %2 นาที. ไม่มีเวลาทำงานโอที.', WorkHours, WorkMinutes);
end;
Message(MessageText);
end;
สมมุติเวลาทำงานทั้งหมดเป็น 9 ชั่วโมง

อธิบายโค้ด:
- StandardWorkingTime: กำหนดเวลาทำงานมาตรฐานเป็น 8 ชั่วโมง โดยแปลงหน่วยเป็นมิลลิวินาที (
8 * 60 * 60 * 1000). - TotalWorkingTime: คำนวณเวลาทำงานทั้งหมดจากการลบ
StartTimeออกจากEndTime. - WorkHours และ WorkMinutes: แปลงเวลาทำงานทั้งหมดที่คำนวณได้เป็นชั่วโมงและนาที เพื่อให้สามารถนำไปแสดงผลได้ง่าย.
- Overtime: หาก
TotalWorkingTimeมากกว่าStandardWorkingTimeจะคำนวณเวลาโอทีและแปลงเป็นชั่วโมงและนาที. - MessageText: สร้างข้อความที่จะแสดงผลเวลาทำงานทั้งหมดและเวลาโอทีถ้ามี และแสดงผลข้อความนี้ออกมา.
โค้ดนี้สามารถใช้ในการคำนวณเวลาทำงานจริง และตรวจสอบได้ว่ามีการทำงานเกินเวลา (โอที) หรือไม่ พร้อมกับแสดงผลให้ผู้ใช้งานทราบในรูปแบบที่เข้าใจง่าย
การแปลง Duration เป็นข้อความ
Duration สามารถแปลงเป็นข้อความเพื่อแสดงผลได้โดยใช้ฟังก์ชัน Format เช่น:
var
DurationText: Text;
begin
DurationText := Format(TotalDuration); // จะแสดงเป็น '2 hours 30 minutes'
Message(DurationText);
end;

สรุป
Duration Data Type ใน AL เป็นเครื่องมือที่มีประสิทธิภาพในการจัดการเวลาในแอปพลิเคชัน Dynamics 365 Business Central ไม่ว่าจะเป็นการคำนวณเวลา การเปรียบเทียบระยะเวลา หรือการแปลงเวลาไปเป็นข้อความที่เข้าใจง่าย การเข้าใจและใช้งาน Duration อย่างถูกต้องจะช่วยให้การพัฒนาของคุณมีความแม่นยำและเป็นระเบียบมากขึ้น
