มีน้องๆถามมา ว่าจะเขียน คำสั่ง เก็บบันทึกเวลารายงานตัวพิมพ์ออกจาก hosxp ทำได้ไหม ?

ตอบ.  ได้นะครับ  มาดูวิธีการกันครับ

จากรายงานที่ผมแจกไว้ในหน้านี้ นะครับ
ฟรี ! รายงาน และ dataset สำหรับ HOSxP & HOSxP_PCU

จะมีรายงานที่ชือ  30. FORM-Doctor-OPDCARD  ** ดาวโหลด **  ดูตัวอย่างรายงาน
สามารถเอาตัวนี้ไปแกะ แล้วปรับประยุกต์ได้

เพราะมี โค้ด pascal ที่สั่งบันทึกเก็บที่ตาราง

จะเป็นโค้ด สำหรับ เก็บข้อมูลเข้าตาราง pq_doctor ว่า vn นี้มีการพิมพ์ออกจากระบบจริง ๆ

โดยรายงานตัวนี้ท่านต้องใช้ แท็บ Script ในการเขียนนะครับ






แต่ภาษาที่ใช้เขียน จะต้องเป็นภาษา pascal เท่านั้นด้วย  มาดูคำอธิบาย แต่ละคำสั่งนะครับ

เริ่มจาก  1 – 11 บรรทัดแรกคือการประกาศ unit ชื่ออะไร  และมี procedure ชื่ออะไร

แล้ว บรรทัดที่ 3 เป็นต้นมา ก็จะเป็นการประกาศตัวแปร  คือ
pq_doctor_cds เป็น ตัวแปรของ Tclientdataset คือเป็นตัวแปรสำหรับดึงข้อมูล มาเก็บพักไว้ เหมือน excel
vn, computername  เป็นตัวแปรตัวอักษรที่เอาไว้เก็บเลข vn  ณ ตอนรายงาน และ computername ดึงชื่อคอมพิวเตอร์ที่ online ของ ผู้ใช้งานของเครื่องนั้น
doctor,staff คือตัวแปร เอาไว้เก็บรหัสแพทย์ ที่ login เข้าเครื่องคอมพิวเตอร์นั้นอยู่ และ staff คือ ชื่อ login ที่เข้าใช้งาน hosxp โดยกรองจากชื่อเครื่องคอมพิวเตอร์อีกที

ต่อมา  บรรทัดที่ 7 คือ begin
ก็คือเริ่มดึงค่ามาเก็บยังตัวแปรที่กำหนด คือ

vn := report_value(1);
ดึงค่า Param ตัวที่ 1 มาไว้
computername := report_value(2);
ดึงค่า Param ตัวที่ 2 มาไว้  ตามรูปด้านล่าง

doctor := getsqldata(‘select if(count(*)>0,op.doctorcode,”00″)as cc from onlineuser o left outer join opduser op on op.loginname=o.kskloginname where servername=”‘+computername+'” ‘);
ได้ตัวแปร computername แล้วก็มากรองหา  รหัสแพทย์ ถ้าไม่มีก็ให้ค่าเป็น ’00’  นั้นเอง
staff := getsqldata(‘select kskloginname from onlineuser where servername=”‘+computername+'” ‘);
อันนี้ก็เช่นกันมาหา loginname ที่ใช้งาน hosxp ที่ชื่อเครื่องคอมพิวเตอร์เครื่องนี้นั้นเอง

ต่อมา  บรรทัด 13 เป็นต้นไป ก็คือการ query หาข้อมูลตาราง pq_doctor ว่ามีข้อมูลใน vn กับ staff นี้ไหม ถ้าไม่มี  ก็สั่งเพิ่ม คือ pq_doctor_cds.insert ถ้ามีอยู่แล้วก็สั่ง pq_doctor_cds.edit   นั้นเอง

ก็มากำหนดค่าที่จะให้บันทึกเข้าไปในแต่ละฟิวล์ที่จะกำหนด  เช่น  pq_doctor_cds[‘vn’] := vn;  เช่น vn ก็ไปเก็บไว้ที่ฟิวล์  vn  ของตาราง pq_doctor นั้นเอง
และฟิวล์อื่นๆ
pq_doctor_cds[‘pq_doctor_id’] := getsqldata(‘select get_serialnumber(“pq_doctor_id”) as cc’);
** กรณีต้องการให้ดึงเลข pq_doctor_id ล่าสุด จะมีคำสั่ง get_serialnumber ดึงค่าล่าสุดมาให้ได้เลยครับ  ท่านไม่ต้องไปหา id ล่าสุดในตาราง pq_doctor นะใช้คำสั่งนี้แทนได้เลย เลข serial ก็จะรันไปเรื่อยๆ เลยครับ **
pq_doctor_cds[‘doctor_date’] := formatdatetime(‘yyyy-mm-dd’,date);
pq_doctor_cds[‘doctor_time’] := formatdatetime(‘hh:nn:ss’,now);
pq_doctor_cds[‘staff’] := staff;
pq_doctor_cds[‘doctor’] := doctor;
pq_doctor_cds[‘doctor_time_type_id’] := ‘1’;
pq_doctor_cds[‘hos_guid’] := ‘insert_by_report_ds’;

เสร็จแล้วก็สั่ง บันทึกเก็บไว้ใน dataset ก่อน คือ pq_doctor_cds.post;  แล้วค่อยเอา dataset ที่มี สั่ง update ขึ้นไปยัง server อีกที ด้วยคำสั่ง
hosxp_updatedelta(pq_doctor_cds.delta,’select * from pq_doctor where vn=”‘+vn+'” and staff =”‘+staff+'” ‘);

โดยจะเช็คก่อนว่ามี dataset ที่มีการแก้ไขหรือเพิ่มหรือไม่คือเงื่อนไขที่บรรทัด  32 คือ
if pq_doctor_cds.changecount > 0 then

ถ้ามี ก็สั่งบันทึกไปยัง server
ถ้าไม่ก็ไม่ต้องทำอะไร

ประมาณนี้  พอให้เข้าใจหลักการนะครับ  (สำหรับมือใหม่ ๆ ที่ถามกันเข้ามา )

ที่นี้เวลาพิมพ์รายงานที่หน้าจอแพทย์ ก็จะทำงานคำสั่งที่เราเขียนไว้นีด้วยเช่นกัน
แต่อย่าลืมเช็คว่าพิมพ์ออกรายงานชื่อนี้ด้วยนะ กรณีเรากำหนดชื่อฟอร์มรายงานตัวอื่นๆ

เท่านี้ รายงานที่เราทำไว้ก็ทำงานตาม ที่เราต้องการแล้ว
สามารถประยุกต์ไปเก็บตารางอะไรก็ได้ที่อยู่ในฐาน hosxp

โอเค เริ่มยาวแล้ว  หวังว่าจะเป็นประโยชน์นะครับ
หากท่านชอบบทความนี้ ฝากกด Like กดแชร์ต่อไปให้ท่านอื่น ได้ทราบด้วยนะครับ
ขอบคุณครับ  แล้วพบกันใหม่ครับ

 3,862 total views,  2 views today

HOSxP Report เขียนคำสั่งบันทึกการพิมพ์ OPDCARD หากรายงานนี้ถูกสั่งพิมพ์

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

This site uses Akismet to reduce spam. Learn how your comment data is processed.