BMS-HOSxP Community

HOSxP => Report Exchange => ข้อความที่เริ่มโดย: naj ที่ พฤษภาคม 26, 2011, 02:47:12 AM

หัวข้อ: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: naj ที่ พฤษภาคม 26, 2011, 02:47:12 AM
อธิบาย Concept ในการออกแบบก่อนนะครับ คือ ห้องยาต้องการพิมพ์ Drug Profile ของผู้ป่วยในจุดประสงค์เพื่อที่จะให้ห้องยาและ IPD ใช้ฟอร์มตัวเดียวกันในการจัด จ่ายยา และลงบันทึกเวลาจ่ายยาให้กับผู้ป่วย ซึ่งของเดิม ที่ ward หรือห้องคลอดจะมี ฟอร์มของตัวเองไม่แน่ใจเรียกว่าใบ Mar หรือเปล่านะครับ ส่วนห้องยาก็มีฟอร์มของตัวเองด้วยเหมือนกัน  ปัญหา อ.สรพ ไม่ปลื้ม ไม่แหล่ม  อยากให้สมานฉันท์รวมเป็นฟอร์มเดียวกัน เพื่อที่จะได้ทวนสอบได้ง่าย เพราะคนจัด คนเช็ค คนจ่าย คนให้ยากับผู้ป่วยจะได้ลงเวลาให้ยาในฟอร์มเดียวกันนี้ได้เลย  เพื่อจะได้ลดความคลาดเคลื่อน ยิ่งมีมากฟอร์ม มากขั้นตอน ก็ยิ่งเสี่ยงและ ก็ต้องเพิ่มงานโดยไม่จำเป็น โดนว่าเป็นประเภทย้ำคิดย้ำทำ ซะง้าน.... :D :D :D :D :D :D สรุป ประมานว่าฟอร์มเดียวจบ (แต่ไม่ค่อยจะสะดวกกับ รพ ที่คนไข้ admit มากๆๆเพราะใบนี้มันจะวิ่งไป วิ่งมาระหว่าง ward กับห้องยา  :P :P :P :P :P แต่เมื่อ อ.สรพ กล้าขอมา ก็จะจัดให้ ;D ;D ;D ;D โชคดีหรือดชคร้ายที่ รพ ผม ไม่ค่อยมีคนไข้ admit มากเท่าไหร่ครับ ) โดยฟอร์ทีผมออกแบบจะจำกัดให้มียาหน้าละ 4 รายการ กรณีที่มีรายการยาเพิ่มมาใหม่ ปกติจะ print ออกมาพร้อมฟอร์มรายงานเลยครับ แต่เนื่องจากว่าถ้าต้องพิมพ์แผ่นใหม่ทุกครั้ง(A4)ที่มีการเพิ่มยาหรือเปลี่ยนแปลง order คงไม่ไหวเหมือนกัน เลยออกแบบให้มีรายการเปล่า เพื่อไว้ ดั้งนั้นถ้า เกิดรายการยาไม่ครบพอดีหน้า อาจจะขาดหรือเกินหน้าไป หน้าฟอร์มมันจะมีพื้นที่โล่งๆๆ ผู้ใช้บอกว่าขัดใจ ไม่ปลื้ม เลยปรับให้มันสามารถ
1.เติมรายการให้ครบ 4 รายการต่อหน้า auto
2.ระบุจำหน้าที่เป็น ฟอร์มเปล่าได้เพื่อเผื่อมีรายการเพิ่มเติมจะได้พิมพ์ Sticker ออกมาแล้ว Print แปะได้แลย

ผมเลยสร้างตารางขึ้นมาใหม่ ไม่กล้าไปยุ่งกลับตารางเดิมครับกลัวงานเข้า... ;D ;D ;D ;D
โค๊ด: Delphi
  1. Unit Yindee;
  2. procedure main;
  3. var
  4. fan,pageno:String;
  5. a,b,c,i:integer;
  6. begin
  7. fan:=report_value(1);
  8. //ShowMessage(fan);
  9. zquery.close;
  10. zquery.sql.text:='CREATE TABLE IF NOT EXISTS `yindee_ipd_profile_print` ( '+
  11.  ' `med_plan_number` int(11) DEFAULT "0",    '+
  12.   '`an` varchar(9) DEFAULT NULL,      '+
  13.   '`doctor` varchar(7) DEFAULT NULL,   '+
  14.   '`icode` varchar(7) DEFAULT NULL,      '+
  15.   '`qty` int(11) DEFAULT NULL,             '+
  16.   '`offdate` date DEFAULT NULL,              '+
  17.   '`orderdate` date DEFAULT NULL,              '+
  18.   '`orderstatus` varchar(5) DEFAULT NULL,        '+
  19.   '`drugusage` varchar(7) DEFAULT NULL,            '+
  20.   '`sp_use` varchar(7) DEFAULT NULL,                 '+
  21.   '`frequency` int(11) DEFAULT NULL,                   '+
  22.   '`name` varchar(250) DEFAULT NULL,  '+
  23.   '`shortlist` varchar(250) DEFAULT NULL, '+
  24.   '`d1` int(11) DEFAULT NULL, '+
  25.   '`d2` int(11) DEFAULT NULL,   '+
  26.   '`d3` int(11) DEFAULT NULL,     '+
  27.   '`d4` int(11) DEFAULT NULL,       '+
  28.   '`d5` int(11) DEFAULT NULL, '+
  29.   '`d6` int(11) DEFAULT NULL,  '+
  30.   '`d7` int(11) DEFAULT NULL,    '+
  31.   '`d8` int(11) DEFAULT NULL,      '+
  32.   '`d9` int(11) DEFAULT NULL,        '+
  33.   '`d10` int(11) DEFAULT NULL, '+
  34.   '`d11` int(11) DEFAULT NULL,   '+
  35.   '`d12` int(11) DEFAULT NULL,     '+
  36.   '`d13` int(11) DEFAULT NULL,       '+
  37.   '`d14` int(11) DEFAULT NULL,         '+
  38.   '`number` int(11) DEFAULT NULL,   '+
  39.   '`icode_type` char(3) DEFAULT NULL, '+
  40.   '`return_qty` int(11) DEFAULT NULL,   '+
  41.   '`vorder` int(11) DEFAULT NULL,         '+
  42.   '`start_date` date DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=tis620';
  43.   zquery.execsql;
  44. zquery.sql.text:='delete from yindee_ipd_profile_print';
  45. zquery.execsql;
  46. zquery.sql.text:='insert into yindee_ipd_profile_print(an,doctor,drugusage,frequency, '+
  47. 'icode,icode_type,med_plan_number,name,number,offdate,orderdate,orderstatus,  '+
  48. 'qty,return_qty,shortlist,sp_use,start_date,vorder,d1,d2,d3,d4,d5,d6,d7,d8, '+
  49. 'd9,d10,d11,d12,d13,d14) '+
  50. 'select an,doctor,drugusage,frequency,icode,icode_type,med_plan_number,name,number, '+
  51. 'offdate,orderdate,orderstatus,qty,return_qty,shortlist, '+
  52. 'sp_use,start_date,vorder,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14   '+
  53. 'from  ipd_profile_print  where an="'+fan+'" ';
  54. zquery.execsql;
  55. fcds2.datarequest('select * from ipd_profile_print where an="'+fan+'" ');
  56. fcds2.open;
  57. //ShowMessage(inttostr(fcds2.recordcount));
  58. fcds.datarequest('select * from yindee_ipd_profile_print');
  59. fcds.open;
  60.  Try
  61. b:=strtoint(getsqldata('select max(med_plan_number) as dd from ipd_profile_print where an="'+fan+'" '));
  62. execpt b:=0; end;
  63. //ShowMessage(inttostr(b));
  64.  
  65. a:=fcds2.recordcount mod 4;
  66. //showmessage(inttostr(a));
  67. pageno:='0';
  68. inputquery('¡Ó˹´¨Ó¹Ç¹Ë¹éÒ·Õèµéͧ¡ÒþÔÁà¾ÔèÁàµÔÁ','¨Ó¹Ç¹Ë¹éÒ·Õè¾ÔÁ¾ìà¾ÔèÁ (ÃкØà»ç¹µÑÇàÅ¢à·èÒ¹Ñé¹)',pageno);
  69. c:=strtoint(pageno);
  70. if a>0 then
  71. begin
  72. for i:=1 to (4-a+(4*c)) do
  73. begin
  74.  b:=b+1;
  75.  fcds.insert;
  76.  fcds['med_plan_number']:=b;
  77.  fcds['an']:=fcds2['an'];
  78.  fcds['start_date']:=fcds2['start_date'];
  79.  fcds['orderstatus']:='S';
  80.  fcds.post;
  81. end;
  82. end else
  83. begin
  84. for i:=1 to(4*c) do
  85. begin
  86.  b:=b+1;
  87.  fcds.insert;
  88.  fcds['med_plan_number']:=b;
  89.  fcds['an']:=fcds2['an'];
  90.  fcds['start_date']:=fcds2['start_date'];
  91.  fcds['orderstatus']:='S';
  92.  fcds.post;
  93. end;
  94. end;
  95. fcds.datarequest('select * from yindee_ipd_profile_print');
  96. applyupdate_fcds(-1);
  97. fcds2.close;
  98. fcds.close;
  99. zquery.close;
  100. //ShowMessage('Done...');
  101. end;
  102. end.
  103.  
หัวข้อ: Re: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: jdadmin1 ที่ พฤษภาคม 26, 2011, 05:50:21 AM
 ;D ;D ;D ขอบคุณครับ ขอให้มีแรงบันดาลใจเยอะ ๆ ๆ นะครับ แต่ระวังตัวแถมแถว ๆ ปากท่อมาแอบหนีบแรงบันดาลใจไปหมดนะครับ ;D ;D ;D
หัวข้อ: Re: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: werachon ที่ พฤษภาคม 26, 2011, 08:17:37 AM
ขอบคุณครับ ... ;D
หัวข้อ: Re: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: jatuhospital ที่ พฤษภาคม 26, 2011, 10:31:03 AM
มันขึ้นแบบนี้ครับ Error in unit 'Yindee' online 60 , Type mismatch ครับต้องแก้ยังไง
หัวข้อ: Re: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: naj ที่ พฤษภาคม 26, 2011, 20:22:51 PM
จะตรวจสอบให้อีกครั้งครับ แต่ทีผมลองทดสอบมันก็ใช้งานได้นะครับ :) :) :) :) :)
คำสั่งบรรทัดนี้มันดึงค่าสูงสุดของ med_plan_number ของ an ที่เราเรียก ในตาราง ipd_profile_print มาเพื่อจะนำค่านี้ไป run field  med_plan_number ที่เพิ่มขึ้นมาใหม่ครับ ของตาราง yindee_ipd_profile_prin
หัวข้อ: Re: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: เกื้อกูล ครับ.. ที่ พฤษภาคม 26, 2011, 22:12:43 PM
;D ;D ;D ขอบคุณครับ ขอให้มีแรงบันดาลใจเยอะ ๆ ๆ นะครับ แต่ระวังตัวแถมแถว ๆ ปากท่อมาแอบหนีบแรงบันดาลใจไปหมดนะครับ ;D ;D ;D

มีพาดพิงงงง...ครับ...ป๋า...ผมยังไม่กล้าไปสมุทรประการ...กลัวทั้งเขียว..ทั้งแดง...ผมมันสีใสครับ...แต่ไม่ใช่สุเทพ
หัวข้อ: Re: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: naj ที่ พฤษภาคม 27, 2011, 08:51:09 AM
พบสาเหตุแล้วครับ เกิดจากที่มันไม่พบ an ที่เราเรียกจากตาราง ipd_profile_print ทำให้ไม่สามารถจะหาค่า Max(med_plan_number)  เพราะมันไม่มีจึงหาไม่ได้ :) :) :) :) :) ครับ แก้ไขให้แล้วครับ ขอบคุณมากที่แจ้งมาครับ แนบ file IPD-PROFILE-REPORT-1 มาให้ใหม่แล้วครับ
หัวข้อ: Re: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: nayok ที่ พฤษภาคม 27, 2011, 10:09:27 AM
 :o :o สุดยอดเลย อ.นาจเรา  ;D ;D
หัวข้อ: Re: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: naj ที่ พฤษภาคม 29, 2011, 06:27:33 AM
เพิ่ม Code ในการตรวจสอบจำนวนหน้าที่ระบุว่าเป็นตัวเลขหรือไม่ครับ โดยใช้ Function  IsStrANumber()
function IsStrANumber(const S:String):Boolean;
begin
Result:=TRUE;
Try
StrToInt(S);
Except
Result:=False;
end;
end;
หัวข้อ: Re: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: kkko ที่ ตุลาคม 28, 2011, 11:31:31 AM
รบกวนขอฟอร์ม IPD-PROFILE-REPORT-1 ด้วยครับ
จะแก้ไขของระบบแต่หาตัวฟอร์มใน Report designer ไม่เจอ ขอบคุณล่วงหน้าครับ
หัวข้อ: Re: ตัวอย่าง IPD-PROFILE-REPORT-1 แบบระบุจำหน้าที่พิมพ์เพิ่มได้
เริ่มหัวข้อโดย: kkko ที่ ตุลาคม 28, 2011, 11:35:37 AM
เพิ่มเติมครับอยากได้แบบที่มีอยู่ในระบบนะครับ (ของ อ.นาจ userไม่ชอบลองให้ใช้แล้ว)