ผู้เขียน หัวข้อ: คำนวณจำนวนยาตามจำนวนวัน วันละครึ่งเม็ด ไม่ได้ครับ  (อ่าน 5444 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ tote

  • Full Member
  • ***
  • กระทู้: 103
  • Respect: 0
    • ดูรายละเอียด
version 3.51.4.17
ดูเหมือนโปรแกรมจะคำนวณจำนวนยาเป็นเลขจำนวนเต็ม ตัดเศษทิ้ง ก่อนที่จำเอาจำนวนเม็ดต่อวัน ไปคูณกับจำนวนวัน
0.5 x 1 = 0.5 -> วันละ 0 เม็ด x 30 วัน = 0
0.5 x 2 = 1    -> วันละ 1 เม็ด x 30 วัน = 30
0.5 x 3 = 1.5 -> วันละ 1 เม็ด x 30 วัน = 30
0.5 x 5 = 2.5 -> วันละ 2 เม็ด x 30 วัน = 60

จำนวนยาต่อวัน น่าจะคิดเป็น real number (double) นะครับ
แล้วหลังจากคูณจำนวนวันแล้ว ค่อยแปลงเป็นเลขจำนวนเต็มทีหลัง
และน่าจะปัดเศษขึ้นเสมอ

ขอเสนอเพิ่มเติม
ยา syrup น่าจะคำนวนเป็น cc ได้
 จำนวนยา = ceil ( ปริมาณยาต่อวันเป็น cc x จำนวนวัน / ปริมาณยาในแต่ละขวดเป็น cc )
ยาเม็ดที่สั่งเป็นแผงก็น่าจะทำแบบเดียวกันได้
 จำนวนยา = ceil (  จำนวนเม็ดต่อวัน x จำนวนวัน / จำนวนเม็ดต่อแผง  )

ออฟไลน์ manoi

  • Hero Member
  • *****
  • กระทู้: 8,669
  • Respect: +170
    • ดูรายละเอียด
    • HOSxP Community Center
ขอบคุณที่ช่วยตรวจสอบและให้คำแนะนำครับ ทำการแก้ไขให้แล้วใน 3.51.5.24 ครับ
HOSxP Project Manager / Cheif Developer / BMS MD

ออฟไลน์ tote

  • Full Member
  • ***
  • กระทู้: 103
  • Respect: 0
    • ดูรายละเอียด
ขอบคุณครับอาจารย์ แต่มันยังมีปัญหาอยู่ครับ
ผมทดสอบ version 3.51.5.28 กับ 3.51.7.2 พบว่า
คราวนี้มันไม่ใช้แค่คำนวณแบบวันละครึ่งเม็ดไม่ได้  วันละเต็มเม็ดมันก็คำนวณไม่ได้ด้วย
เวลาพิมพ์เลขเข้าไปใน column วัน แล้วตัวเลขใน column จำนวน มันไม่เปลี่ยนตามเลยครับ

ออฟไลน์ white

  • Hero Member
  • *****
  • กระทู้: 828
  • Respect: 0
    • ดูรายละเอียด
ขอบคุณครับอาจารย์ แต่มันยังมีปัญหาอยู่ครับ
ผมทดสอบ version 3.51.5.28 กับ 3.51.7.2 พบว่า
คราวนี้มันไม่ใช้แค่คำนวณแบบวันละครึ่งเม็ดไม่ได้  วันละเต็มเม็ดมันก็คำนวณไม่ได้ด้วย
เวลาพิมพ์เลขเข้าไปใน column วัน แล้วตัวเลขใน column จำนวน มันไม่เปลี่ยนตามเลยครับ

ผมก็คำนวณไม่ได้เหมือนกันครับ 3.51.7.2
รออาจารย์ตอบเรื่องการปรับปรุง special usage + คำนวณจำนวณตามวันที่ใช้อยู่ครับ
สงสัยไปเที่ยวยังไม่กลับ  ::)
กระทู้เดิม (อ้างอิงบ่อยจนเริ่มรู้สึกน่าเกกลียด หุหุ)
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6128.0
อดีต intern2 รพ.แก้งคร้อ ชัยภูมิ
อยากช่วยพัฒนา ให้เป็นโปรแกรมที่น่าใช้ระดับชาติ

กระทู้ห้องตรวจแพทย์ สำหรับแพทย์เพื่อช่วยพัฒนาโปรแกรม
-ปรับปรุงรายการนัดผู้ป่วย
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6511.0
-การอ่านผล x-ray ใน patient EMR
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=5999.0
-การอ่านผล LAB
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6040.0
-Request ห้องตรวจ หน้าซักประวัติ(F1)
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6088.0
-Request ห้องตรวจ หน้าประวัติ(F2)
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6069.0
-Request ห้องตรวจ หน้าสั่งเวชภัณฑ์(F3)
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6128.0

doramon

  • บุคคลทั่วไป
เอาแบบตรงเลย สุดยอด
ของผมใกล้  ๆๆ ของที่จะใช้ก็ ok แล้ว


ที่เหลือ ให้คนตรวจ บ้าง  เดียว ตกงานหมด

ออฟไลน์ white

  • Hero Member
  • *****
  • กระทู้: 828
  • Respect: 0
    • ดูรายละเอียด
เอาแบบตรงเลย สุดยอด
ของผมใกล้  ๆๆ ของที่จะใช้ก็ ok แล้ว


ที่เหลือ ให้คนตรวจ บ้าง  เดียว ตกงานหมด


ตอบกระทู้มากไปรึป่าวอาจารย์ แปลว่าอะไรหว่า
ของที่จะใช้อะไรหรอครับ อย่างกับโพสคนละกระทู้  :'(
อดีต intern2 รพ.แก้งคร้อ ชัยภูมิ
อยากช่วยพัฒนา ให้เป็นโปรแกรมที่น่าใช้ระดับชาติ

กระทู้ห้องตรวจแพทย์ สำหรับแพทย์เพื่อช่วยพัฒนาโปรแกรม
-ปรับปรุงรายการนัดผู้ป่วย
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6511.0
-การอ่านผล x-ray ใน patient EMR
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=5999.0
-การอ่านผล LAB
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6040.0
-Request ห้องตรวจ หน้าซักประวัติ(F1)
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6088.0
-Request ห้องตรวจ หน้าประวัติ(F2)
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6069.0
-Request ห้องตรวจ หน้าสั่งเวชภัณฑ์(F3)
http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=6128.0

ออฟไลน์ tote

  • Full Member
  • ***
  • กระทู้: 103
  • Respect: 0
    • ดูรายละเอียด
version 3.51.7.8c กลับมาคำนวณแบบเต็มเม็ดได้เหมือนก่อนหน้านี้แล้วครับ
แต่วันละครึ่งเม็ดยังก็คงคำนวณไม่ได้เหมือนเดิม

ออฟไลน์ tote

  • Full Member
  • ***
  • กระทู้: 103
  • Respect: 0
    • ดูรายละเอียด
ดูจาก source code DoctorDeskU.pas จาก SVN revision 429 (12/5/2551)

อ้างถึง
6687 procedure TDoctorDeskForm.DoctorDrugGridKeyUp(Sender: TObject; var Key: Word;
6688 Shift: TShiftState);
 ...
6697   i, qd: integer;
...
7182             i :=
7183               getsqldata('select iperdose*iperday  from drugusage where shortlist="'
7184               +
7185               doctorrxcdsshortlist.value + '"');
...
7193               doctorrxcdsiperday.value :=
7194                 strtoint(doctordruggrid.inplaceeditor.text);
...
7198               doctorrxcdsqty.value := i *
7199                 strtoint(doctordruggrid.inplaceeditor.text);
...
อ้างถึง
17958 procedure TDoctorDeskForm.N48Click(Sender: TObject);
17959 var
17960   qd: integer;
17961   i: integer;
...
17983             i :=
17984               getsqldata('select iperdose*iperday  from drugusage where shortlist="'
17985               +
17986               doctorrxcdsshortlist.value + '"');
...
17993             doctorrxcdsqty.value := i * qd;
...

พบว่ามีการมีการคำนวณ iperdose*iperday แล้วเอาผลคูณไปเก็บไว้ในตัวแปร i ซึ่งเป็นชนิด integer ก่อน แล้วค่อยเอามาคูณ กับจำนวนวันอีกที
ตอนแปลงเป็น integer เพื่อเก็บในตัวแปร i จะทำให้ผลคูณส่วนที่เป็นเศษหายไป เช่น 0.5 กลายเป็น 0, 1.5 กลายเป็น 2, 2.5 กลายเป็น 2 ทำให้ค่าที่คำนวณได้ผิดไป

ผมขอเสนอการแก้ไขดังนี้นะครับ
1.สร้างตัวแปรชนิด float real หรือ double ขึ้นมา 1 ตัว เพื่อใช้แทนตัวแปร i ในการคำนวณนี้
2.ใช้ function ceil ในบรรทัดที่ 7198-7199 และ 17993 เพื่อปัดเศษขึ้นในกรณีที่คำนวณออกมาแล้วไม่ลงตัว

ปล. อีกที่หนึ่งที่อาจเกี่ยวข้องคือ getsqldata ไม่แน่ใจว่ามันสามารถอ่านค่า iperdose*iperday เป็นเลขทศนิยมได้หรือเปล่า
« แก้ไขครั้งสุดท้าย: กรกฎาคม 16, 2008, 18:20:08 PM โดย tote »

doramon

  • บุคคลทั่วไป
สุดยอด


ออฟไลน์ manoi

  • Hero Member
  • *****
  • กระทู้: 8,669
  • Respect: +170
    • ดูรายละเอียด
    • HOSxP Community Center
ขอบคุณที่ช่วยตรวจสอบให้ครับ พอดีแก้ไปแล้วจุดเดียว แต่มันมีจุดที่ต้องแก้ทั้งหมด 3 จุดครับ 

แก้ไขให้แล้วครับใน 3.51.7.16
HOSxP Project Manager / Cheif Developer / BMS MD

ออฟไลน์ tote

  • Full Member
  • ***
  • กระทู้: 103
  • Respect: 0
    • ดูรายละเอียด
ขอบคุณครับ อ.manoi  ;D

ออฟไลน์ tote

  • Full Member
  • ***
  • กระทู้: 103
  • Respect: 0
    • ดูรายละเอียด
ใช้ version 3.51.7.27 พบว่า คำนวณจำนวนยาวันละครึ่งเม็ดได้แล้วครับ  :)
แต่อยากให้ปรับปรุงอีกนิดนึงครับ เพราะ บางทีมันจะปัดเศษลงทำให้จำนวนเม็ดยาที่คำนวณได้ไม่พอตามจำนวนวันครับ

เมื่อกี้ไปดู source code ที่อาจารย์เพิ่งอัพเดทมา เห็นใช้ function round()
ถ้าสั่งวันละ 0.5 เม็ด
30 วัน -> round(15.0) = 15 -> พอ
25 วัน -> round(12.5) = 12 -> ไม่พอ
15 วัน -> round( 7.5) =  8 -> พอ
 7 วัน -> round( 3.5) =  4 -> พอ
 5 วัน -> round( 2.5) =  2 -> ไม่พอ
 1 วัน -> round( 0.5) =  0 -> ไม่พอ

ถ้าเปลี่ยนจาก round() เป็น ceil() น่าจะแก้ปัญหานี้ได้นะครับ

doramon

  • บุคคลทั่วไป
สุดยอด