BMS-HOSxP Community
HOSxP => Report Exchange => ข้อความที่เริ่มโดย: udomchok ที่ ธันวาคม 02, 2009, 23:36:31 PM
-
เพิ่งทำเสร็จเมื่อปลายเดือน พ.ย. 52 แต่พอนำไปใช้งานจริงแล้วมีปัญหาเรื่องการเรียงลำดับ
เมื่อคืนเอามาแก้ไขใหม่ น่าจะเรียบร้อย เรียงลำดับตามกลุ่ม LAB (CBC, Electrolyte, etc.)
เพิ่มการตรวจสอบผล LAB ที่ได้ว่ามากกว่าหรือน้อยกว่าค่าปกติ หากมากกว่าให้แสดง H ในช่อง Flag หากน้อยกว่าแสดง L
แต่ต้องไปลงข้อมูลใน "ค่าปกติ(ตัวเลข)" ของ LAB แต่ละตัวด้วยนะครับ จึงจะตรวจสอบได้ถูกต้อง ให้ใส่ในทั้ง 2 เพศเลยครับ เพราะจะตรวจสอบเพศก่อน แล้วค่อยไปเทียบกับค่าปกติ
หากไม่ใส่ค่าใน "ค่าปกติ(ตัวเลข)" จะแปรผลว่าเป็น H หมดเลยครับ
ปล. ฝาก อ.อ๊อดช่วยดู DBText11 ด้วย เขียนอย่างไรให้สวยงาม
เดิมใช้ If...then...else ซ้อนกันหลายชั้น แล้วไม่สามารถแสดงผลได้หากมีการตรวจสอบเพศ
ตอนนี้ใช้ case....of แทน ก็สามารถตรวจสอบได้
คราวนี้ต่อไปหากเพื่อการตรวจสอบกับค่าวิกฤตอีก จะต้องซ้อน If อีก จะกำหนด begin...end อย่างไรให้ ทำงานได้
-
ตอนแรกใช้ If...then...else
procedure DBText11OnGetText(var Text: String);
begin
If DBPipeline['result_type'] = 0 then
If DBPipeline['sex'] = 1 then
If DBPipeline['lab_order_result'] < DBPipeline['range_check_min'] then
Text := 'L'
else
If DBPipeline['lab_order_result'] > DBPipeline['range_check_max'] then
Text := 'H'
else
Text := ''
else
If DBPipeline['lab_order_result'] < DBPipeline['range_check_min_female'] then
Text := 'L'
else
If DBPipeline['lab_order_result'] > DBPipeline['range_check_max_female'] then
Text := 'H'
else
Text := '';
end;
ไม่สามารถแสดงผลได้ถูกต้องหาก sex <> 1
เลยเปลี่ยนมาใช้แบบนี้
procedure DBText11OnGetText(var Text: String);
begin
If DBPipeline['result_type'] = 0 then
begin
case DBPipeline['sex'] of
1: If DBPipeline['lab_order_result'] < DBPipeline['range_check_min'] then
Text := 'L'
else
If DBPipeline['lab_order_result'] > DBPipeline['range_check_max'] then
Text := 'H'
else
Text := '';
2: If DBPipeline['lab_order_result'] < DBPipeline['range_check_min_female'] then
Text := 'L'
else
If DBPipeline['lab_order_result'] > DBPipeline['range_check_max_female'] then
Text := 'H'
else
Text := '';
end;
end;
end;
เข้าใจว่าคงต้องใส่ begin...end; ครอบ if บางช่วง แต่ยังไม่รู้ว่าจะใส่ตรงไหนดี ใช้ได้บ่อยแค่ไหน
เดี๋ยวคืนนี้จะทดลองหาคำตอบก่อนครับ ;D
-
ลองใส่ begin...end แบบมั่ว ๆ (น่าจะเป็น) ไล่ไปไล่มา ได้แบบนี้ครับ
procedure DBText11OnGetText(var Text: String);
begin
If DBPipeline['result_type'] = 0 then
begin
If DBPipeline['sex'] = 1 then
begin
If DBPipeline['lab_order_result'] < DBPipeline['range_check_min'] then
Text := 'L'
else
begin
If DBPipeline['lab_order_result'] > DBPipeline['range_check_max'] then
Text := 'H'
else
Text := '';
end;
end
else
begin
If DBPipeline['lab_order_result'] < DBPipeline['range_check_min_female'] then
Text := 'L'
else
begin
If DBPipeline['lab_order_result'] > DBPipeline['range_check_max_female'] then
Text := 'H'
else
Text := '';
end;
end;
end;
end;
ดู ๆ แล้ว ไม่รู้ว่าเกินความจำเป็นตรงไหนบ้างหรือเปล่า แต่ run ได้
ถ้าเทียบกับ case..of แล้ว ยาวกว่า ดูแล้วงงกว่า...เฮ้อ
ท่านไหนว่างช่วยดูหน่อยครับ (ชอบใช้ If มากกว่า case...of แต่สงสัยต้องเปลี่ยนใจซะแล้ว :D )
-
สุดยอดเลยครับ อ.โก้ :D ;) ;D
-
ขอบคุณครับ สุดยอดอีกแล้ว
-
พี่โก้ครับเพิ่มเติมส่วนที่การรายงานเป็นตัวอักษรครับมันไม่มีมากกว่าหรือน้อยกว่าครับมีแต่ <> หรือ not like "%ค่าปรกติที่เราตั้งไว้%" คงต้องรบกวนเพิ่มเติมจุดนี้ด้วยครับ ;D
-
หรือไม่ก็อาจต้องกำหนดเงื่อนไข ว่า ให้แสดงกรณีที่ติ๊กถูกว่าการรายงานเป็นแบบตัวเลขเท่านั้น ถ้าเป็นแบบตัวอักษร ไม่ต้องแสดง มาครอบใว้อีกทีครับ ;D
-
พี่โก้ครับเพิ่มเติมส่วนที่การรายงานเป็นตัวอักษรครับมันไม่มีมากกว่าหรือน้อยกว่าครับมีแต่ <> หรือ not like "%ค่าปรกติที่เราตั้งไว้%" คงต้องรบกวนเพิ่มเติมจุดนี้ด้วยครับ ;D
กำลังว่าจะทำครับ เดี๋ยวขอตั้งตัวก่อน :D :D :D
หรือไม่ก็อาจต้องกำหนดเงื่อนไข ว่า ให้แสดงกรณีที่ติ๊กถูกว่าการรายงานเป็นแบบตัวเลขเท่านั้น ถ้าเป็นแบบตัวอักษร ไม่ต้องแสดง มาครอบใว้อีกทีครับ ;D
ผมเลือกเฉพาะที่เป็นตัวเลขอยู่แล้วครับ ดังคำสั่งข้างล่างนี้
procedure DBText11OnGetText(var Text: String);
begin
If DBPipeline['result_type'] = 0 then
begin
-
ตอนนี้แก้ไขด้วยวิธีนี้ไปก่อนครับ
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=12902.msg92516#msg92516
update lab_items set result_type=1 where ((range_check_min is null) or (range_check_max is null) or (range_check_min_female is null) or (range_check_max_female is null))
-
หลังจากนั้นตามด้วย
update lab_items set range_check="Y" where result_type =0
เพื่อปรับปรุงให้โปรแกรมเตือนเมื่อค่าไม่อยู่ในช่วงของค่าปกติ อาจจะเข้าไปติ๊กในหน้ารายการ LAB ก็ได้นะครับ ตรงช่อง "เตือนเมื่อมีค่าผิดปกติ"
เพราะ report ตัวต่อไปจะตรวจสอบตรงนี้ด้วย
-
ปรับปรุงล่าสุด
ปรับการแสดงผลรายการ HIV ต่าง ๆ จากเดิม fix code เปลี่ยนเป็นอ่านจากชื่อ ต้องมีคำว่า HIV ในชื่อ LAB
-
ไม่มีแบบที่เป็น Custom Repost หรือครับต้องการมากเขียนเองแล้วมันแสดงข้อมูลออกมาครับ