BMS-HOSxP Community

HOSxP => Development => ข้อความที่เริ่มโดย: manoi ที่ เมษายน 19, 2012, 13:08:30 PM

หัวข้อ: ReportBuilder end user function
เริ่มหัวข้อโดย: manoi ที่ เมษายน 19, 2012, 13:08:30 PM
เนื่องจากในการอบรมการเขียน Report โดยใช้ Report Designer ใน HOSxP ได้มีผู้เรียกร้องให้เพิ่ม Utility function ต่างๆ เป็นจำนวนมาก ผมก็เลยได้ Idea ว่าถ้าให้ผู้ที่ทำ Report จริงๆ จังๆ เขียน Function ที่ต้องการเพิ่มเข้ามาได้เองน่าจะสะดวกและมีประโยชน์มากกว่า ดังนั้นใครที่อยากเพิ่ม Function ต่างๆ เข้าไปในระบบ Rap ของ Report Designer ใน HOSxP สามารถเขียนตามตัวอย่างใน Unit ที่ผมแนบ ได้เลยครับ แล้วผมจะเอามา Compile ใส่ไว้ใน HOSxP นะครับ
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: ittipol ที่ กรกฎาคม 13, 2012, 10:11:08 AM
ขอบคุณครับ
มีประโยชน์มากครับ
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: LDHP ที่ กรกฎาคม 13, 2012, 10:19:06 AM
เยี่ยมเลยค่ะ ใช้ได้ทั้ง hosxp และ hosxp_pcu ด้วยหรือเปล่าคะ
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: manoi ที่ กรกฎาคม 13, 2012, 10:22:18 AM
ใช่ครับ แต่ไม่เห็นมีใครส่ง function เข้ามาเลยครับ
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: armds ที่ กรกฎาคม 13, 2012, 11:07:43 AM
ขอคนแรกได้ไหมครับ  อ.mn
ไม่แน่ใจว่าจะได้ไหมนะครับ

//ตัวนี้เอาไว้หาคะแนน  ของผลแลป fbs  ครับ โดยตั้งค่าคงที่ไว้ที่  select sys_value from sys_var where sys_name like"LAB_Criterion_FBS_1"
โค๊ด: Delphi
  1. function GetGradelab_fbs(lab_result:string): string;
  2. begin
  3.   result := '';
  4.   if StrToFloat(lab_result) < getsqldata('select sys_value from sys_var where sys_name like"LAB_Criterion_FBS_1" ') then
  5.               result := getsqldata('select sys_var_guid from sys_var where sys_name like"LAB_Criterion_FBS_1" ')
  6.            else if StrToFloat(lab_result) < getsqldata('select sys_value from sys_var where sys_name like"LAB_Criterion_FBS_2" ') then
  7.                   result := getsqldata('select sys_var_guid from sys_var where sys_name like"LAB_Criterion_FBS_2" ')
  8.                 else if StrToFloat(lab_result) < getsqldata('select sys_value from sys_var where sys_name like"LAB_Criterion_FBS_3" ') then
  9.                        result := getsqldata('select sys_var_guid from sys_var where sys_name like"LAB_Criterion_FBS_3" ')
  10.                      else  if StrToFloat(lab_result) < getsqldata('select sys_value from sys_var where sys_name like"LAB_Criterion_FBS_4" ') then
  11.                            result := getsqldata('select sys_var_guid from sys_var where sys_name like"LAB_Criterion_FBS_4" ')
  12.                            else
  13.                            result := getsqldata('select sys_var_guid from sys_var where sys_name like"LAB_Criterion_FBS_5" ');
  14. end;

//ตัวนี้เอาไว้หาคะแนน  ของผลแลป hba1c  ครับ โดยตั้งค่าคงที่ไว้ที่  select sys_value from sys_var where sys_name like"LAB_Criterion_HbA1C_1"
โค๊ด: Delphi
  1. function GetGradelab_hba1c(lab_result:string): string;
  2. begin
  3.   result := '';
  4.   if StrToFloat(lab_result) < getsqldata('select sys_value from sys_var where sys_name like"LAB_Criterion_HbA1C_1" ') then
  5.             result := getsqldata('select sys_var_guid from sys_var where sys_name like"LAB_Criterion_HbA1C_1" ')
  6.          else if StrToFloat(lab_result) < getsqldata('select sys_value from sys_var where sys_name like"LAB_Criterion_HbA1C_2" ') then
  7.                  result := getsqldata('select sys_var_guid from sys_var where sys_name like"LAB_Criterion_HbA1C_2" ')
  8.               else  if StrToFloat(lab_result) < getsqldata('select sys_value from sys_var where sys_name like"LAB_Criterion_HbA1C_3" ') then
  9.                     result := getsqldata('select sys_var_guid from sys_var where sys_name like"LAB_Criterion_HbA1C_3" ')
  10.                     else  if StrToFloat(lab_result) < getsqldata('select sys_value from sys_var where sys_name like"LAB_Criterion_HbA1C_4" ') then
  11.                           result := getsqldata('select sys_var_guid from sys_var where sys_name like"LAB_Criterion_HbA1C_4" ')
  12.                           else
  13.                           result := getsqldata('select sys_var_guid from sys_var where sys_name like"LAB_Criterion_HbA1C_5" ');
  14. end;

// //ตัวนี้เอาไว้หาคะแนน  ของผลแลป bp  ครับ  แต่ค่าคงที่ยัง fix ตายตัวอยู่  ยังหาที่เก็บไว้ไม่ได้ครับ
โค๊ด: Delphi
  1. function GetGradebp(bps,bpd:string): string;
  2. begin
  3.   result := '';
  4.  
  5.   case strtoint(bps)  of
  6.      1..140   : begin
  7.                      if strtoint(bpd)<=90 then
  8.                      result := '5';
  9.                 end;
  10.      141..150 : begin
  11.                      if strtoint(bpd)<=90 then
  12.                      result := '4'
  13.                      else if strtoint(bpd)<=95 then
  14.                           result := '3';
  15.                 end;
  16.      151..160 : begin
  17.                      if strtoint(bpd)>95  then
  18.                      result := '2'
  19.                      else
  20.                      result := '2';
  21.                 end;
  22.      161..300 : begin
  23.                      if strtoint(bpd)>100  then
  24.                      result := '1'
  25.                      else
  26.                      result := '1';
  27.                 end;
  28.      else result := '0';
  29.   end;
  30. end;
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: chitvichai ที่ กรกฎาคม 13, 2012, 11:28:10 AM
// //ตัวนี้เอาไว้หาคะแนน  ของผลแลป bp  ครับ  แต่ค่าคงที่ยัง fix ตายตัวอยู่  ยังหาที่เก็บไว้ไม่ได้ครับ
โค๊ด: Delphi
  1. function GetGradebp(bps,bpd:string): string;
  2. begin
  3.   result := '';
  4.  
  5.   case strtoint(bps)  of
  6.      1..140   : begin
  7.                      if strtoint(bpd)<=90 then
  8.                      result := '5';
  9.                 end;
  10.      141..150 : begin
  11.                      if strtoint(bpd)<=90 then
  12.                      result := '4'
  13.                      else if strtoint(bpd)<=95 then
  14.                           result := '3';
  15.                 end;
  16.      151..160 : begin
  17.                      if strtoint(bpd)>95  then
  18.                      result := '2'
  19.                      else
  20.                      result := '2';
  21.                 end;
  22.      161..300 : begin
  23.                      if strtoint(bpd)>100  then
  24.                      result := '1'
  25.                      else
  26.                      result := '1';
  27.                 end;
  28.      else result := '0';
  29.   end;
  30. end;
ช่วยอธิบายความหมายของแต่ละ grade 0-5 หน่อยครับว่าคืออะไร เพราะมีบาง case แบ่ง grade ไม่ได้ครับ
เช่นผู้ป่วย วัด bps 139 bpd 93 result:= ''
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: armds ที่ กรกฎาคม 13, 2012, 11:37:43 AM

ช่วยอธิบายความหมายของแต่ละ grade 0-5 หน่อยครับว่าคืออะไร เพราะมีบาง case แบ่ง grade ไม่ได้ครับ
เช่นผู้ป่วย วัด bps 139 bpd 93 result:= ''

อ้อ อันนี้หมอเขาต้องการดู grade ของคนไข้ความดันครับ
ถ้าในกรณี  bps 139 bpd 93 result:= '0'  ผลลัพก็จะได้  0 ครับ
แต่ความหมายในทางการวิเคราะห์ผมก็ไม่ทราบครับ  เขาอยากแบ่งแบบนี้ครับ 
เดี่ยวไปถามพี่พยาบาลก่อนนะครับ
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: manoi ที่ กรกฎาคม 13, 2012, 11:49:26 AM
เอาไปใส่ไว้ใน Unit ตามตัวอย่างแฟ้มใน post แรกได้หรืเปล่าครับ
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: armds ที่ กรกฎาคม 13, 2012, 12:00:13 PM
เอาไปใส่ไว้ใน Unit ตามตัวอย่างแฟ้มใน post แรกได้หรืเปล่าครับ
ตัวอย่าง  THOSxPRapGetGradelab_fbsFunction  นี้ได้ไหมครับ
ถ้าได้จะได้เพิ่มที่เหลือครับ   :)

อ้อลืม อีกบรรทัดครับ 
raRegisterFunction('GetGradelab_fbs', THOSxPRapGetGradelab_fbsFunction);
บรรทัดสุดท้าย
แนบไฟล์ใหม่แล้วนะครับ อ.mn
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: manoi ที่ กรกฎาคม 13, 2012, 12:06:21 PM
ลบ class ของ function ตัวอย่างออกแล้วแก้ให้เป็น Unit สำหรับ Function นี้ได้เลยครับ ผมลองแก้ให้แล้วครับ แต่ถ้าใครอยากจะใส่ Function ของตัวเอง ก็แก้ตาม Unit นี้ได้ครับ
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: manoi ที่ กรกฎาคม 13, 2012, 12:12:38 PM
ผม link unit นี้ให้แล้วนะครับใน 3.55.7.13
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: armds ที่ กรกฎาคม 13, 2012, 12:23:39 PM
ผม link unit นี้ให้แล้วนะครับใน 3.55.7.13
เพิ่มอีก 2 ฟังชันครับ  อ.mn   :)
GetGradelab_hba1c
GetGradebp
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: manoi ที่ กรกฎาคม 13, 2012, 12:33:33 PM
เพิ่มให้แล้วครับ  :)
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: armds ที่ กรกฎาคม 13, 2012, 12:43:44 PM
เพิ่มให้แล้วครับ  :)
เพิ่มเติมครับ อ.mn
GetHOSVariable

อันนี้ไม่ได้เขียนเองครับ  อยู่ใน hosxp  แล้วแต่อยากใช้งานกับรายงานด้วยครับ
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: chitvichai ที่ กรกฎาคม 13, 2012, 14:47:35 PM

ช่วยอธิบายความหมายของแต่ละ grade 0-5 หน่อยครับว่าคืออะไร เพราะมีบาง case แบ่ง grade ไม่ได้ครับ
เช่นผู้ป่วย วัด bps 139 bpd 93 result:= ''

อ้อ อันนี้หมอเขาต้องการดู grade ของคนไข้ความดันครับ
ถ้าในกรณี  bps 139 bpd 93 result:= '0'  ผลลัพก็จะได้  0 ครับ
แต่ความหมายในทางการวิเคราะห์ผมก็ไม่ทราบครับ  เขาอยากแบ่งแบบนี้ครับ 
เดี่ยวไปถามพี่พยาบาลก่อนนะครับ
ผมลอง แล้วครับ GetGradebp('139','93');
มัน return value ='' ครับ ไม่ใช่ 0 นะครับ
หัวข้อ: Re: ReportBuilder end user function
เริ่มหัวข้อโดย: armds ที่ กรกฎาคม 13, 2012, 15:04:15 PM

ช่วยอธิบายความหมายของแต่ละ grade 0-5 หน่อยครับว่าคืออะไร เพราะมีบาง case แบ่ง grade ไม่ได้ครับ
เช่นผู้ป่วย วัด bps 139 bpd 93 result:= ''

อ้อ อันนี้หมอเขาต้องการดู grade ของคนไข้ความดันครับ
ถ้าในกรณี  bps 139 bpd 93 result:= '0'  ผลลัพก็จะได้  0 ครับ
แต่ความหมายในทางการวิเคราะห์ผมก็ไม่ทราบครับ  เขาอยากแบ่งแบบนี้ครับ 
เดี่ยวไปถามพี่พยาบาลก่อนนะครับ
ผมลอง แล้วครับ GetGradebp('139','93');
มัน return value ='' ครับ ไม่ใช่ 0 นะครับ

ครับ โอกาสที่ bpd จะเป็น 93 ก็เป็นไปได้  แต่ผลลัพที่ไม่มีในเงื่อนไขก็จะเป็นค่าว่างครับ 
ผมก็เอาค่า returen value = '' หรือ 0 ก็มีความเดียวกันครับ

ประมาณนี้ครับ
function GetGradebp(bps,bpd:string): string;
begin
  result := '';

  case strtoint(bps)  of
     1..140   : begin
                     if strtoint(bpd)<=90 then
                     result := '5'
                     else
                     result := '0';
                end;
     141..150 : begin
                     if strtoint(bpd)<=90 then
                     result := '4'
                     else if strtoint(bpd)<=95 then
                          result := '3'
                          else
                          result := '0';
                end;
     151..160 : begin
                     if strtoint(bpd)>95  then
                     result := '2'
                     else
                     result := '2';
                end;
     161..300 : begin
                     if strtoint(bpd)>100  then
                     result := '1'
                     else
                     result := '1';
                end;
     else result := '0';
  end;
end;