การสร้างรายงานด้วย report designer...

Post on 20-Jul-2020

1 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

การสรางรายงานดวย Report Designer ขนประยกต

ระหวางวนท ๑๓ – ๑๗ มถนายน ๒๕๕๔

จดโดย

บ.บางกอก เมดคอล ซอฟแวร จ ากด 2 ชน 2 ม.8 ซ.สขสวสด 33 แขวง/เขต ราษฎรบรณะ กรงเทพฯ

เรยบเรยงโดย นายสชาต จนตะวงศ นกวชาการสาธารณสขช านาญการ ส านกงานสาธารณสขอ าเภอเชยงกลาง

ตารางการอบรม วนท 1

ค าสง SQL ส าหรบการจดการขอมลและเลอกขอมลแบบมเงอนไข การประยกตใชค าสง SQL เพอการท ารายงาน แบบฝกหด

วนท 2

ภาษา Pascal ขนพนฐาน ภาษา Pascal เพอการประยกตใชในการท ารายงาน แบบฝกหด

วนท 3

การใช Variable ในการสรางรายงาน การใช variable ชวยในการสรางรายงานทซบซอมขน แบบฝกหด

วนท 4

การใช Function ในการสรางรายงาน การใช Function ชวยในการสรางรายงานแบบมเงอนไข แบบฝกหด

วนท 5

การสรางรายงานในรปแบบตางๆ แบบฝกหด

SQL โครงการอบรมผดแลระบบ Report Designer

๑. การดโครงสรางตารางดวยค าสง DESC หรอ DESCRIBE รปแบบค าสง DESC [table name] หรอ DESCRIBE [table name] ตวอยาง Desc patient

๒. การสอบถามขอมลพนฐาน (SELECT) รปแบบค าสง SELECT Column1,Column2,Column3,… FROM [Table Name] ตวอยาง SELECT * FROM patient SELECT hn,pname,fname,lname,cid FROM patient

๓. ค าสงเลอกขอมลมาแสดงตาม record ทตองการ LIMIT รปแบบค าสง

SELECT Column1,Column2,Column3,… FROM [Table Name] LIMIT [int-start],[int-end]

ตวอยาง SELECT hn,pname,fname,lname,cid FROM patient LIMIT 100

๔. ค าสงรวมขอความดวย SELECT … CONCAT รปแบบค าสง SELECT CONCAT (Column1, Column2,…) ตวอยางค าสง SELECT hn,CONCAT(pname,fname,” “,lname),cid FROM patient

๕. ค าสงเปลยนหวคอลมนเปนขอความอนดวย SELECT … AS รปแบบค าสง SELECT <Column> AS “New Heading” ตวอยาง SELECT hn,CONCAT(pname,fname,” “,lname) AS name ,cid FROM patient

๖. ค าสงเลอกเฉพาะขอมลทตองการดวย WHERE รปแบบค าสง SELECT <Column-name> FROM <Table-name> WHERE <condition> ตวอยาง SELECT * FROM patient WHERE nationality = “90”

๗. ค าสงเลอกเฉพาะขอมลทตองการ หลายเงอนไข (OR, AND) รปแบบค าสง SELECT <Column-name> FROM <Table-name> WHERE <condition> AND / OR <condition> ตวอยาง SELECT * FROM patient WHERE nationality = “99” AND occupation = “112” SELECT * FROM patient WHERE pttype <> “20”

๘. ค าสงเลอกขอมลทตรงตามชดขอมลดวย IN,NOT IN รปแบบค าสง SELECT <Column-name> FROM <Table-name> WHERE <Column-name> [NOT] IN (data set) ตวอยาง SELECT * FROM patient WHERE pttype in (“20”,”21”,”59”) SELECT * FROM patient WHERE pttype not in (“20”,”21”,”59”)

๙. ค าสงเลอกขอมลตามเงอนไข like รปแบบค าสง SELECT <Column-name> FROM <Table-name> WHERE <Column-name> like “%<name>%” ตวอยาง SELECT fname FROME patient WHERE like “%พร”

SELECT fname FROME patient WHERE like “พร%” SELECT fname FROME patient WHERE like “%พร%”

๑๐. ค าสงหาคาวางหรอไมวาง (Is null, Is not null, “ “) รปแบบค าสง SELECT <Column-name> FROM <Table-name> WHERE <Column-name> = “ “

SELECT <Column-name> FROM <Table-name> WHERE <Column-name> IS NULL, IS NOT NULL ตวอยาง SELECT * FROM vn_stat WHERE pdx IS NOT NULL or pdx <> or pdx =””

๑๑. ค าสงเงอนไขเพอเลอกชวงขอมล BETWEEN .. AND รปแบบค าสง SELECT <Column-name> FROM <table-name> WHERE <Column-name> BETWEEN <value1> AND <value2> ตวอยาง SELECT * FROM vn_stat WHERE vstdate BETWEEN “2011-03-01” AND “2011-03-31”

๑๒. ค าสงฟงกชนทใชในการตดคาทซ า distinct รปแบบค าสง SELECT distinct (Column-name) FROM <Table-name> ตวอยาง SELECT count (distinct (hn)) AS con FROM va_stat WHERE vstdate BETWEEN “2011-03-01” AND “2011-03-31”

๑๓. ค าสงตดขอความทตองการดวย SUBSRING รปแบบค าสง SELECT SUBSTR (Column-name,pos,len) AS “New-Field”

ตวอยาง SELECT SUBSTR (vstdate, 1,4) AS “Year” FROM vn_stat

๑๔. ค าสงการจดกลมขอมลดวยค าสง GROUP BY รปแบบค าสง SELECT <Column-name> FROM <Table-name> GROUP BY <Column-name> ตวอยาง SELECT vn.hn,pdx,vstdate FROM vn_stat WHERE vstdate BETWEEN “2011-03-01” AND “2011-03-31” GROUP BY pdx

๑๕. ค าสงจดเรยงขอมลดวยค าสง ORDER BY รปแบบค าสง SELECT <Column-name> FROM <Table-name> ORDER BY <Column-name> [DESC][ASC] ตวอยาง SELECT vn,hn,pdx,vstdate FROM vn_stat WHERE vstdate BETWEEN “2011-03-01” AND “2011-03-31” GROUP BY pdx ORDER BY pdx DESC

๑๖. ค าสงเงอนไขของกลมดวย HAVING รปแบบค าสง SELECT <Column-name> FROM <Table-name> WHERE <condition> GROUP BY <Column-name> HAVING <condition>

ตวอยาง SELECT pttype,sum(income) AS income FROM vn_stat WHERE pttype IN(“70”,”71”,”77”) GROUP BY pttype HAVING income < 50000 ORDER BY pttype

๑๗. ค าสง SUB QUERY รปแบบค าสง SELECT Column1,Column2,Column3, … FROM [Table-name] WHERE <condition> (SELECT Column FROM [Table-name] ตวอยาง SELECT * FROM opitemrece WHERE icode IN(DELECT icode FROM drugitems) LIMIT 100

๑๘. ค าสงฟงกชนทใชหาคาขอมลทงกลม รปแบบค าสง SELECT Function <Column-name> FROM <Table-name> AVG : ใหผลลพธเปนคาเฉลยของขอมลทงกลม SUM : ใหผลลพธเปนผลบวกของขอมลทงกลม MIN : ใหผลลพธเปนคานอยทสดของขอมลทงกลม MAX : ใหผลลพธเปนคามากทสดของขอมลทงกลม COUNT : ใหผลลพธเปนจ านวนรายการของขอมลทงกลม

๑๙. เชอมTable แบบ EQUI JION รปแบบค าสง SELECT <Column-name> FROM <Table-name><Nickname>,<Table-join><Nickname> WHERE <Nickname><key> = <Nickname-Table-join><key> ตวอยาง SELECT o.icode,CONCAT(d>name,” “,d.strength),d.unitprice,o.qty FROM poitemrece o, drugitems d WHERE o.icode = d.icode

AND o.rxdate BETWEEN “2011-03-01” AND “2011-03-31”

๒๐. เชอมTable แบบ LEFT OUTER JOIN รปแบบค าสง SELECT <Column-name> FROM <Table-name><Nickname> *** เฉพาะตารางหลก LEFT OUTER JOIN <Table-join><Nickname>

ON <Nickname><key> = <Nickname-join><key> ตวอยาง

SELECT o.icode,CONCAT(d>name,” “,d.strength), d.unitprice,o.qty FROM poitemrece o LEFT OUTER JOIN drugitems d ON o.icode = d.icode WHERE o.rxdate BETWEEN “2011-03-01” AND “2011-03-31”

๒๑. เชอม Table แบบ Self Join รปแบบค าสง SELECT <Column-name> FROM <Table-name><Nickname1>, <Table-name><Nickname2> WHERE <Nickname1><key> = <Nickname2><key> ตวอยาง SELECT p1.hn,p1.fname,p1.lname,p1.birthday,p2.hn,p2.fname,p2.lname FROM p1.lname = p2.lname AND p1.hn <> p2.hn

Pascal การสรางรายงานดวย Report Designer รปแบบของโปรแกรม Pascal

Program Var Begin End.

๑. สวนหวของโปรแกรม : Program Heading

ลกษณะทใช ใชในการตงชอของโปรแกรม

รปแบบ Program ชอโปรแกรม;

ตวอยาง MyFirstProgram;

๒. สวนหวการประกาศ : Declaration Part

ลกษณะทใช ๑. ประกาศตวแปรทใชในโปรแกรม (Variable Declaration)

รปแบบ Var ชอตวแปร : ชนดตวแปร; ตวอยาง Var date1,date2 : datetme; ds1,ds2 : string;

๒. ประกาศคาคงท (Constant Declaration) รปแบบ Const ชอคาคงท = คาทก าหนด; ตวอยาง Const Addon = 80;

๓. ประกาศชนดของขอมลทสรางขนใหม (Type Declaration) ตวอยาง Type Color = (red,green,blue);

๔. ประกาศตวแปรยอยในรปของ Procedure และ Function

๓. สวนค าสง : Statement ลกษณะทใช ใชในการเขยนค าสงประมวลผล รปแบบ Begin Statement_1 Statement_2 ……….. Statement_n End. ตวอยาง Program MyFirstProgram Begin ShowMessage(‘This is a Pascal Program’); End. Program MyFirstProgram Var IntegerVar : Integer; Begin IntegerVar := 3; ShowMessage(IntToStr(IntegerVar)); End. หลกการตงชอตวแปรในภาษาปาสคาล

๑. ตองขนตนดวยอกษร A-Z หรอ a-z หรอ เครองหมาย _ (underscore) ๒. ภายในชอสามารถใชไดแตตวอกษร A-Z หรอ a-z หรอตวเลข ๐-๙ หรอ

เครองหมาย _ เทานน ๓. การใชตวอกษรพมพใหญ หรอพมพเลก ไมมผล คอมคาไมตางกน เชน Name กม

ความหมายเหมอนกบ NAME หรอ name เปนตน ๔. หามน าค าสงวนมาตงชอ ๕. หามเวนชองวางในชอ

ตวอยางการตงชอตวแปรทถกตอง ตวอยางการตงชอตวแปรทไมถกตอง - Average; - 9SUM; - Lab8; - Begin; - _sum; - Sum@A - SUM_income; - _Data-2

ตวอยางค าสงวน And downto in or then Asm else inline packed to Array end interface procedure type Begin exports label program unit Case file library record until

Const for mod repeat uses Constructor function nil set var Destructor goto not shl while Div if object shr with Do implementation of string xor

รปแบบของการเขยนโปรแกรม

๑. ชอ ค า หรอตวเลข ตองแยกกนโดยใชชองวาง อยางนอย ๑ ชอง หรอแยกกนโดยการขนบรรทดใหม หรอดวยสญลกษณ : (colon) ; (semi-colon) หรอ , (comma)

๒. จะแบงขอความทอยในเครองหมาย ‘’ ใหอยคนละบรรทดไมได ๓. การตงชอตวแปรควรตงใหสอความหมาย ๔. การยอหนาใหตรงกน จะชวยท าใหโปรแกรมอานงาย ๕. การใส comment จะใชเครองหมาย // ดานหนา หรอใหอยในเครองหมาย { }

หรอ (* *)

ชนดของขอมล ๑. Integer เกบขอมลแบบตวเลขจ านวนเตม มคาระหวา –๓๒๗๖๘ ถง ๓๒๗๙๗ ๒. Real เกบขอมลแบบตวเลขจ านวนจรง ทประกอบดวยตวเลขจ านวนเตมและทศนยม ๓. Char เกบขอมลเปนตวอกขระ หรอตวอกษร เพยง ๑ ตว อาจจะเปนตวเลข, ตวอกษร,

สญลกษณพเศษ ๔. String เกบขอมลทเปนขอความ ๕. Boolean เกบขอมลทเปนแบบตรรกศาสตร ทแสดงถงการตดสนใจวาขอมลนนจรง(True)

หรอเทจ(False) การก าหนดคาใหตวแปร รปแบบ Variable := expression ตวอยาง Discount := 15; Pay := Salary + 1500; Sum := Sum + Num1; Str1 := ‘12345ABCDE’; การประกาศคาคงท Program DisplayConst; Const Addon = 80; InterestRate = 0.10; AccountCode = ‘CD’; Begin Statement; End;

เครองหมายทางคณตศาสตร (Arithmetic Operator) ๑. เครองหมายบวก สญลกษณ + ๒. เครองหมายลบ สญลกษณ - ๓. เครองหมายคณ สญลกษณ * ๔. เครองหมายหาร สญลกษณ / ๕. เครองหมายหารตดเศษ สญลกษณ div ๖. เครองหมายหารเอาแตเศษ สญลกษณ mod ๗. ฟงกชนเพอค านวณการยกก าลงสองของX สญลกษณ sqr(x) ๘. ฟงกชนการหารากทสองของx สญลกษณ sqrt(x)

ล าดบการค านวณของเครองหมายทางคณตศาสตร

๑. ค านวณนพจนทอยในวงเลบกอน โดยเรมจากวงเลบในสด ๒. ท าการ คณ, หาร, div, mod, and ๓. ท าการบวก, ลบ, or ๔. ถาล าดบเทากน ท าจากซายไปขวา

เครองหมายเปรยบเทยบ

๑. เครองหมายเทากบ สญลกษณ = ๒. เครองหมายนอยกวา สญลกษณ < ๓. เครองหมายนอยกวาหรอเทากบ สญลกษณ <= ๔. เครองหมายมากวา สญลกษณ > ๕. เครองหมายมากกวาหรอเทากบ สญลกษณ >= ๖. เครองหมายไมเทากบ สญลกษณ <>

เครองหมายเปรยบเทยบทางตรรกะ

๑. Not ใหคาตรงขามกบเงอนไขทตามหลง ๒. And ใหคาเปนจรง เมอเงอนไขทงคเปนจรง และใหคาเปนเทจเมอเงอนไขใดเงอนไขหนง

มคาเปนเทจ หรอเปนเทจทงค ๓. Or ใหคาเปนเทจเงอนไขทงคเปนเทจ และใหคาเปนจรงเมอเงอนไขใดเงอนไขหนงมคา

เปนจรง หรอเปนจรงทงค

๔. Xor ใหคาเปนจรง เมอเงอนไขใดเงอนไขหนงเทานนเปนจรง และใหคาเปนเทจ เมอเงอนไขทงคเปนจรง หรอเงอนไขทงคเปนเทจ

ขอควรระวงในการล าดบการเปรยบเทยบ

๑. ใหใสวงเลบคนระหวางสองเงอนไข กบเครองหมายตรรกะ เชน x > 40 or x < 0 ใหเขยนใหมเปน (x >40) or (x < 0)

๒. เงอนไข not A and not B เขยนไดเปน not(A or B) ๓. เงอนไข not A or not B เขยนไดเปน not(A and B)

โปรแกรมแบบมเงอนไข รปแบบ If condition then Statement1 Else Statement2; ตวอยางการเปรยบเทยบ Program CheckNumber; Var A : Integer; Begin A := 10; If A >= 0 Then ShowMessage(‘A is positive number’) Else ShowMessage(‘A is nagative number’); End.

ค าสง IF ไมจ าเปนตองม ELSE ตามหลงกได ตวอยาง

If Num > 10 Then Showmessage(‘Num>10’); Compound Statement รปแบบ IF Comdition1 Then Begin ….. End // end ตวแรกไมตองมเครองหมาย; Else Begin ….. End; Nested if รปแบบ If Condition1 Then Begin …… End // end ตวแรกไมตองมเครองหมาย; Else If Condition2 Then Begin …… End Else

Begin End;

ค าสง Case รปแบบ Case selector Of Constant1 : Statement1; Constant2 : Statement2; Constant3 : Statement3; ………. ………. Constant_n : Statement_n; Else Default_Statement End; ตวอยาง Case Program MyCase; Var DayInteger : Integer; DayName : String; Begin DayInteger := 1; Case DayInteger Of 1 : DayName := ‘Monday’; 2 : DayName := ‘Tuesday’; End; End;

การท างานแบบวนรอบ หรอท าซ า (LOOP) เปนการเขยนค าสงเพอใหโปรแกรมวนท างานซ าค าสงเดม โดยการก าหนดเงอนไขในการวนรอบท างานจนกวาเงอนไขไมเปนจรง จงจะหยด ค าสงทใชในการท างานแบบวนรอบ

๑. FOR ๒. WHILE ๓. REPEAT

โปรแกรมแบบท าซ าดวยค าสง FOR รปแบบ For Control_Value := Initial_value To Final_value Do Statement; ตวอยาง โปรแกรมแบบท าซ า ดวยค าสง FOR Program For_Loop; Var Number : Integer; Begin For Number := 1 To 10 Do Begin Showmessage(‘Number = ‘+IntToStr(Number)); End; End;

ตวอยาง ค าสง FOR ซอนกน Program For_Nested; Var Number1, Number2 : Integer; Begin For Number1 := 1 To 10 Do Begin Showmessage(‘Number1 = ‘+IntToStr(Number1)); For Number2 := 1 To 3 Do Begin Showmessage(‘Number2 = ‘+IntToStr(Number2)); End; End; End; ค าสง WHILE รปแบบ While Condition do Statement; หรอ While Condition do Begin Statement1; Statement2;

………………. Increment/Decrement;

End;

ตวอยางค าสง WHILE Program Test_While; Var I : Integer; Begin I := 10; While I > 0 Do Begin ShowMessage(IntToStr(I)); I := I – 1; End; End; ค าสง REPEAT รปแบบค าสง Repeat Statement1; Statement2; ……………….. Increment/Decrement; Until Condition; ตวอยางการใช ค าสง REPEAT Program Test_Prpeat; Var I : Integer; Begin I := 10; Repeat ShowMessage(IntToStr(I)); I := I – 1; Until I < 0; End;

สรปการใชค าสง ๑. ค าสง FOR เหมาะกบการท างานทรจ านวนครงทตองการใหท างานซ า และขอมลทใชเพอ

ตรวจสอบจ านวนครงในการท าซ า ตองเปนเลขจ านวนเตม ๒. ค าสง WHILE เหมะกบการท างานทไมรจ านวนครงทแนนอนของการท าซ า โยจะตรวจสอบ

เงอนไขกอนเขาท างานใน LOOP และตองก าหนดคาเรมตนใหเงอนไขกอนเขา LOOP เสมอ

๓. ค าสง REPRAT เหมะกบการท างานทไมรจ านวนครงทแนนอนของการท างานซ า โดยจะเขาท างานใน LOOP กอนหนงครง แลวจงตรวจสอบเงอนไข

โปรแกรมยอยชนดโพรซเยอร (Procedure) Procedure เปรยบเหมอนโปรแกรมยอยทเขยนค าสงตางๆรวมไวดวยกน เพอท างานออกมาใหตรงตามทเราตองการ รปแบบการประกาศ Procedure Procedure_Name(parameter1,parameter2,…,parameter_n); Var name : type; Begin Statement_1 Statement_2 ……………… Statement_n End;

ขอดของการใชโพรซเยอร คอ ถาภายในโปรแกรมตองท างานทซ าซอนหรอซ ากนหลายครง ยกตวอยางเชน การแสดงเสนคนบรรทดดวยเครองหมาย * ยาว ๕๐ คอลมน ค าสงทตองเขยนใหแสดง ดงน Program line; Uses wincrt; Var Count : byte; Begin For Count := 1 to 50 do Write(‘*’); writeIn; end. โปรแกรมยอยชนดโพซเยอร(Procedure) การเรยกใชโพรซเยอร Procedure_Name(actual_parameter_list); หรอ Procedure_Name; การสงคาพารามเตอร Procedure_Name(actual_parameter_list); หรอ Procedure_Name;

โปรแกรมยอยชนดฟงกชน (FUNCTION) มหนาทการท างานเหมอนโพรซเยอร โดยเปรยบเหมอนโปรแกรมยอยท างานตามทก าหนด ดงนนโครงสรางและหลกการทใชกบโพรซเยอร กสามารถน ามาใชกบฟงกชนไดเชนกน ขอแตกตางระหวางโพรซเยอรและฟงกชนมเพยงขอเดยว คอการท างานของฟงกชนจะมการสงคากลบออกมาจากฟงกชน ๑ คา รปแบบการประกาศ Function Function_name(parameter_1,parameter_2,….,parameter_n); Return; Var name : type; Begin Statement_1 Statement_2 ……………… Statement_n; End;

การใชโปรแกรม HOSxP Report Designer การใชงาน

๑. เขาโปรแกรม เลอก All Programs เลอก HOSxP แลวเลอก Reports Designer

๒. Login และ Password เดยวกบของผดแลระบบทเขาโปรแกรม HOSxP

๓. หนาตาของโปรแกรม Import Report ใชในการน าค าสงของ Report ใหมจากทอนเขาสโปรแกรม

การสราง Report Designer ใหม

๑. ในหนาจอของ HOSxP Report Central คลก Next เลอก Custom Report เลอกค าสง Report หนงค าสงเปนชออะไรกได คลกเลอก Next คลก Next อกครง

๒. คลกเลอก Design

๓. ไปท File เลอก New Report และลบขอมลเดมออกใหหมด คลกปดหนา Report

๔. ท Current Report Name ตงชอ Report ใหม และท Module ชอโมดลทจะเกบรายงาน

ใหม คลกเลอก Save Report

๕. เขารายงานทสรางใหม คลก Next

๖. เลอก Custom Report เลอก Report ทสรางใหม คลก Next คลก Next อกครง

๗. คลกเลอก Design

การแสดงผลรายงานจากการออกแบบ พนท Design ม ๕ แถบ ไดแก

๑. แถบ Title สงทอยในแถบน จะแสดงเฉพาะหนาแรกเทานน นยมใชเขยนชอรายงาน

๒. แถบ Header จะแสดงทสวนหวของรายงานททกหนาของรายงาน

๓. แถบ Detail รายละเอยดของรายงาน ทจะแสดงออกมาจากค าสงหลก

๔. แถบ Footer จะแสดงสวนทายของรายงานททกหนาของรายงาน

๕. แถบ Summary จะแสดงตอจาก Record สดทายของ Detail โดยจะแสดงหนาสดทายเพยงหนาเดยว

ตวอยางการออกแบบรายงาน

การแสดงผลรายงานทไดจากการออกแบบ

การเชอมค า หรอค าสงดวย ‘+’ ในการเขยนค าสงใน โปรแกรม Report Design จะตองมการเชอมค า เพอใหโปรแกรมไดรจก ตวอยางการเชอค าหรอประโยคของค าสง Wonder girl Wonder’+’girl ผลทได wondergirl Wonder ‘+’girl ผลทได wonder girl Wonder’+’ girl ผลทได wonder girl Select * from patient Select * from’+’ patient ผลทได Select * frompatient Select * from ‘+’patient ผลทได Select * from patient Select * from’+’ patient ผลทได Select * from patient ดงนน ค าสงใน Pascal Code จะมลกษณะดงตอไปน Value := GetSQLStringData(‘select name from pttype ‘+ ‘ order by pttype ‘); ผลทได คอ select name from pttype order by pttype

ความแตกตางระหวางหนาจอทใสค าสงหลก ค าสงหลกใน Tab SQL ค าสงหลกใน Tab Calc ค าสง SQL ใน Tab SQL

โดยผลลพธไดจากค าสงหลกใน Tab SQL สงเกตท Data Control จะปรากฏชอ DBPipeline

ค าสง SQL ใน Tab Calc ค าสงหลกใน Tab SQL จะ select อะไรกได

ค าสงหลกใน Tab Calc

ให Preview แลวใหกลบมาทหนาจอ Design สงเกตท Data Control

Function For Report Toolbox: Function

Function Type

1. String เปนฟงกชนกลมของตวอกษร ทน ามาเรยงกนอยภายในเครองหมายค าพด (‘’) และไมสามารถน าไปค านวณได

2. Conversion เปนฟงกชนการแปลงคา หรอแปลงชนดของขอมลนนใหเปนอกคาหนง

3. Format เปนฟงกชนทใชจดรปแบบของขอมล

4. Date Time เปนฟงกชนในการจดการขอมลวนท และเวลา

5. Math เปนฟงกชนทชวยค านวณทางคณตศาสตรทซบซอน

6. Utility เปนฟงกชนทใชประโยชนในดานตางๆของโปรแกรม จะเปนการแสดงขอความ Massage

ฟงกชนทมกใชบอยในโปรแกรม Report Designer (Function frequently used) 1. ฟงกชนแบบ String ไดแก ๑.๑ ChangeReportSQL(sql)

เปนฟงกชนไวส าหรบ run ค าสง SQL ทเปนค าสงหลกโดยผลทไดจะเปนไปตามคาทเราเขยนค าสง SQL ซงเราจะเรยกคานนวา DBPipline

1.2 GetDateRangeDialog(date1, date2); เปนฟงกชนทสรางชวงวนทใหเลอก 1.3 GetDateTimeRangeDialog(date1, date2); เปนฟงกชนทสรางชวงวนทและเวลาใหเลอก 1.4 FormatThaiDate(fFormat, fDate); เปนฟงกชนเปลยนรปแบบวนทจาก ค.ศ.เปน พ.ศ. 1.5 GetPatientAddress(hn); เปนฟงกชนหาทอยของคนไข 1.6 GetThaiAge(BirthDay, VisitDay); เปนฟงกชนหาอายของ 1.7 HospitalName; เปนฟงกชนแสดงชอสถานพยาบาล 1.8 ThaiMoney(m); เปนฟงกชนทแปลงจากคาเงนทเปนตวเลขเปนตวอกษร 1.9 GetCurrentUser; เปนฟงกชนทแสดง Login name ของผทก าลงใชงานอย 1.10 GetSQLStringData(sql);

เปนฟงกชนทไวส าหรบรบคาทเปน String ซงอาจเปนไดทงขอความและตวเลข ท ไมสามารถน าคาทไดไปค านวณได

1.11 GetPickupList(sql); เปนฟงกชนทสรางตวเลอก ซงสามารถเลอกไดครงละ ๑ ตวเลอก 1.12 GetMultipleList(sql); เปนฟงกชนทสรางตวเลอก ซงสามารถเลอกไดมากกวา ๑ ตวเลอก

1.13 InputQuery(title, label); เปนฟงกชนทสรางกลองไวส าหรบ รบคาทเปน String หรอขอความ

2. Conversion 2.1 IntToStr(value); เปนฟงกชนเปลยนประเภทขอมลจาก Integer เปน string 2.2 StrToInt(S); เปนฟงกชนเปลยนประเภทขอมลจาก String เปน integer

3. Format 3.1 FormatDateTime(Format, aDateTime); เปนฟงกชนทเปลยนรปแบบของวนท

4. Date Time

4.1 GetSQLDateData(sql); เปนฟงกชนทไวส าหรบ รบคาทเปน Date วนท

5. Math 5.1 GetSQLDoubleData(sql); เปนฟงกชนทไวส าหรบ รบคาทเปนตวเลขซงอาจเปนเลขทศนยมกได และสามารถ

น าคาทไดไปค านวณตอได 5.2 GetSQLIntegerData(sql); เปนฟงกชนทไวส าหรบ รบคาทเปนตวเลขซงไมเปนเลขทศนยม และสามารถ

น าคาทไดไปค านวณตอได

6. Utility 6.1 ShowMessage(Msg); เปนฟงกชนทไวส าหรบแสดงขอความเตอนตางๆ

ตวอยางการเขยนรายงานดวยโปรแกรม Report Designer

1. รายงานแสดงคาใชจายของผปวยนอกแยกตามหมวดคาใชจาย รปแบบ

รายงานแสดงคาใชจายของผปวยนอกแยกตามหมวดคาใชจาย ตงแตวนท ถงวนท

หมวดคาใชจาย เบกได เบกไมได ลกหน รวม๑ รวม๒ รวม๓ คาหองและคาอาหาร ๐ ๐ ๐ ๐ ๐ ๐ คาอวยวะเทยมและอปกรณในการบ าบดรกษาโรค

๐ ๐ ๐ ๐ ๐ ๐

คายาในบญชยาหลกแหงชาต ๐ ๐ ๐ ๐ ๐ ๐ คายากลบบาน ๐ ๐ ๐ ๐ ๐ ๐

............................................ ๐ ๐ ๐ ๐ ๐ ๐ ฯลฯ ๐ ๐ ๐ ๐ ๐ ๐ รวม ๐ ๐ ๐ ๐ ๐ ๐

ขนตอนการเขยนรายงาน ๑. เปดโปรแกรม Report Designer และสราง Report ใหม เลอก Design คลกเลอกแถบ Design ด าเนนการออกแบบรายงานทตองการ โดยใชเครองมอ label A ในการสรางกลองชอ

2. การสรางชวงวนททตองการระบ ๒.๑ การประกาศตวแปรวนท ทแถบ Calc ประกาศตวแปรวนทโดยก าหนด และคลก Declarations var date1,date2 : datetime; ds1,ds2 : string; เสรจแลวลอง compile ตวแปรด ๒.๒ การสรางกลองวนท Dialog ทแถบ Calc เลอก Events เลอก On Create เขยนค าสงโดยด าเนนการดงน - ท Code Toolbox เลอก String - เลอกแถบ Language เลอกฟงกชน GetDateRangeDialog(date1, date2); ลากมา

วางใต begin และตวแปร date1 และdate2 จะตองตรงกบชอตวแปร datetime ทประกาศใน var ในทนเขยนไดดงน GetDateRangeDialog(date1, date2);

๒.๓ เปลยนรปแบบวนทใหกลายเปนรปแบบ พ.ศ. โดยใชฟงกชน

FormatDateTime(Format, aDateTime); ท Code Toolbox เลอก Format เลอกแถบ Language เลอกฟงกชน FormatDateTime(Format, aDateTime); ลากไปวางใตค าสง ฟงกชน GetDateRangeDialog(date1, date2); และสรางตวแปรมารบคา โดยใชตวแปรทไดประกาศตวแปรไวท Declarations ไดแก ds1,ds2 : string; ไปวางหนาฟงกชน ในทนเขยนค าสงฟงกชนไดดงน ds1 := FormatDateTime('yyyy-mm-dd', date1); ds2 := FormatDateTime('yyyy-mm-dd', date2);

- เสรจแลวลอง compile และ preview

2.4 สรางกลองวนทในตวรายงานทหนา Design

ใชกลองเครองมอ Variable มาวางตรงทตองการชวงวนท แลวคลกขวาท variable เลอก calculations… แลวก าหนดคาวนทใหตรงตวแปรทเราตองการ เชน คาแรกก าหนดเปน Value := date1; คาทสองก าหนดเปน Value := date๒; เสรจแลว ก าหนดชนดขอมลเปน date time ทบรเวณมมขวาบน

หรออกวธการสรางวนทโดยใชรปแบบการเชอมค าโดยใช + ในการสรางกลอง variable เพยงกลองเดยว แลวก าหนดเปน Value := FormatThaiDate('D MMMM EEEE', date1)+' ' +'ถง'+' '+ FormatThaiDate('D MMMM EEEE', date2);

3. การสรางตวแปรของขอมลทตองการ 3.1 การเขยนค าสง sql เลอกขอมลทตองการใน HOSxP SQL Query ในตาราง income โดยใชค าสง SQL Query เปน select income,name from income order by income ผลทไดจากการ RUN ค าสง

3.2 คดลอกค าสงไปวางใน Calc ตามหลงฟงกชน ChangeReportSQL(sql); โดยวางแทน sql โดยใสเครองหมาย ‘’กอน ผลทได ChangeReportSQL('select income,name from income order by income'); โดยวางถดจากฟงกชนของวนท เสรจแลว ลอง compile และ preview ด จะได ทแถบ data จะม จะปรากฏชอ DBPipeline ๓.๓ ออกแบบรายงานในหนา Design โดยด าเนนการดงน - การสรางล าดบทให RUN อตโนมต โดยใชเครองชอ DBcalc คลกใตชอล าดบในแถบ Detail แลวคลกขวาท variable เลอก calculations… Calc Type เลอก Count คลก OK

- การสรางขอมลตวแปรในหมวดคาใชจาย โดยใชเครองมอทชอวา DBtext คลกวางใตหมวดคาใชจายในแถบ Detail ทแถบ DBPipeline ขางบนเลอก name

- การสรางตวแปรทแสดงรายละเอยดคาใชจาย โดยตารางในโปรแกรม HOSxP จะเกบคาใชจายในตาราง opitemrece จะใชแยกคาใชจายตามชวงวนททเราตองการ และตามตาราง paidst จะระบคาประเภทของคาใชจาย ไดแก paidst = 00 คางช าระ, ๐๑ ช าระเงนเบกได, ๐๒ ลกหนสทธ, ๐๓ ช าระเองเบกไมได, ๐๔ สวนลดเงนสด โดยด าเนนการดงน ๑. คาใชจายประเภทเบกได

โดยใชเครองมอ Variable วางใต เบกไดแลวคลกขวา variable เลอก calculations… ก าหนดคาตวแปร variable โดยท Code Toolbox เลอก Math เลอกฟงกชน GetSQLDoubleData(sql); มาวางตอจาก Value := และเขยนค าสง sql เปน Value := GetSQLDoubleData('select sum(sum_price) from opitemrece where paidst = "01" '+ 'and vstdate between "'+ds1+'" and "'+ds2+'" and income="'+DBPipeline['income']+'"'); อยาลมการเชอมค าดวย + และการก าหนดคา income = ใหใช DBPipeline['income'] จากแถบ data ลากมาวางแทนการพมพใน "'++'"

๒. คาใชจายประเภทเบกไมได โดยก าหนดคา paidst = "03" Value := GetSQLDoubleData('select sum(sum_price) '+ 'from opitemrece where '+'paidst = "03" '+'and vstdate between "'+ds1+'" and "'+ds2+'" '+'and income = "'+DBPipeline['income']+'"');

๓. คาใชจายประเภทลกหน โดยก าหนดคา paidst = "0๒" Value := GetSQLDoubleData('select sum(sum_price) '+ 'from opitemrece where '+'paidst = "0๒" '+'and vstdate between "'+ds1+'" and "'+ds2+'" '+'and income = "'+DBPipeline['income']+'"');

๔. คาใชจายรวม๑ (เปนการรวมดวย variable บวกไปเรอยๆ) โดยก าหนดคา Value := variable1.value + variable2.value + variable3.value;

๕. คาใชจายรวม๒ โดยก าหนดคา Value := GetSQLDoubleData('select sum(sum_price) '+'from opitemrece where '+'paidst in ("01","02","03") '+'and vstdate between "'+ds1+'" and "'+ds2+'" '+'and income = "'+DBPipeline['income']+'"');

๖. คาใชจายรวม๓ (รวมดวยฟงกชน อยาลมประกาศตวแปร sum1) โดยก าหนดคา if Report.DataPipeline.bof then sum1 :=0; Value := GetSQLDoubleData('select sum(sum_price) '+ 'from opitemrece where '+'paidst in ("01","02","03") '+ 'and vstdate between "'+ds1+'" and "'+ds2+'" '+'and income = "'+DBPipeline['income']+'"');sum1 := sum1+value;

โดยรปแบบการใชฟงกชนทง 3 แบบจะสงคาออกมาเทากน ๗. คารวมทงหมดแตละรายการ ท าไดดงน

- คารวมเบกได ใชเครองมอ variable คลกขวา เลอก calculations… ก าหนดคาตวแปร Value := GetSQLDoubleData('select sum(sum_price) '+ 'from opitemrece where '+ 'paidst in ("01") '+ 'and vstdate between "'+ds1+'" and "'+ds2+' "');

- คารวมเบกไมได ก าหนดคาตวแปร Value := GetSQLDoubleData('select sum(sum_price) '+ 'from opitemrece where '+ 'paidst = "03" '+ 'and vstdate between "'+ds1+'" and "'+ds2+'" '+'and income = "'+DBPipeline['income']+'"');

- คารวมลกหน Value := GetSQLDoubleData('select sum(sum_price) '+ 'from opitemrece where '+ 'paidst = "02" '+ 'and vstdate between "'+ds1+'" and "'+ds2+'" '+'and income = "'+DBPipeline['income']+'"');

- คาผลรวมของรวม๑ เปนการรวมดวย variable บวกไปเรอยๆ การรวมแบบนจะเปนการรวมในแนวนอน คอเอา variable ของรวมเบกได รวมเบกไมได และรวมลกหนมาบวกกน ไดแก Value := variable11.value+variable10.value+variable9.value

- คาผลรวมของรวม๒ (รวมดวยค าสง ตดเงอนไขบางสวนออกไป) Value := GetSQLDoubleData('select sum(sum_price) '+ 'from opitemrece where '+ 'paidst in ("01","02","03") '+ 'and vstdate between "'+ds1+'" and "'+ds2+' "');

- คาผลรวมของรวม๓ (รวมดวยฟงกชน) Value := sum1; ๘. ปดรายงาน แลวบนทกรายงาน เขารายงานใหม ลอง preview ด

ตวอยางของรายงานแบบน เปนการค านวณคาของจ านวนเงน สามารถใชฟงกชน GetSQLDoubleData(sql); หรอ GetSQLIntegerData(sql); กได เพราะฟงกชนทง ๒ แบบสามารถสงคาออกมาแลวสามารถน าไปค านวณได แตโดยปกตจะใชแบ GetSQLDoubleData(sql);และ จดประสงคของตวอยางรายงานนเพอใหเหนตวอยางค าสงของการรวมแตละแบบ

๒. ตวอยางแบบรายงานท ๒ รายงานแสดงรายชอผปวยนด เปนการใชฟงกชน GetPickupList

รปแบบ รายงานแสดงรายชอผปวยนด : (นดทงหมด, มาตามนด, ขาดนด)

ตรวจสอบวนทนด ถง วนท ล าดบท วนทนด HN ชอ – สกล รายการนด แพทยผนด

การออกแบบรายงาน

๑. ออกแบบรายงานตามแบบฟอรมในแถบ Design ๒. สรางกลองวนทเพอรบตวแปรการระบชวงวนท

๒.๑ การประกาศตวแปรวนท ทแถบ Calc ประกาศตวแปรวนทโดยก าหนด และคลก Declarations var

date1,date2 : datetime; ds1,ds2 : string;

เสรจแลวลอง compile ตวแปรด ๒.๒ การสรางกลองวนท Dialog ทแถบ Calc เลอก Events เลอก On Create เขยนค าสงโดยด าเนนการดงน

- ท Code Toolbox เลอก String - เลอกแถบ Language เลอกฟงกชน GetDateRangeDialog(date1, date2);

ลากมาวางใต begin และตวแปร date1 และdate2 จะตองตรงกบชอตวแปร datetime ทประกาศใน var ในทนเขยนไดดงน GetDateRangeDialog(date1, date2); ๒.๓ เปลยนรปแบบวนทใหกลายเปนรปแบบ พ.ศ. โดยใชฟงกชน

FormatDateTime(Format, aDateTime); ท Code Toolbox เลอก Format เลอกแถบ Language เลอกฟงกชน FormatDateTime(Format, aDateTime); ลากไปวางใตค าสง ฟงกชน GetDateRangeDialog(date1, date2); และสรางตวแปรมารบคา โดยใชตวแปรทไดประกาศตวแปรไวท Declarations ไดแก ds1,ds2 : string; ไปวางหนาฟงกชน ในทนเขยนค าสงฟงกชนไดดงน

ds1 := FormatDateTime('yyyy-mm-dd', date1); ds2 := FormatDateTime('yyyy-mm-dd', date2);

- เสรจแลวลอง compile และ preview

๒.๔ สรางกลองวนทในตวรายงานทหนา Design สรางวนทโดยใชเครองมอ Variable ในการสรางกลอง คลกขวาท variable เลอก calculations… ก าหนดคาตวแปร โดยใชฟงกชน ISO2Date(d, f); ท Code Toolbox เลอก Format เลอกแถบ Language เลอกฟงกชน ISO2Date(d, f); ไปวาง แกไขค าสงเปน Value := ISO2Date(ds1, 'D MMMM EEEE')+' ถงวนท '+ ISO2Date(ds2, 'D MMMM EEEE');

๓. การสราง Pickup List เพอแสดงประเภทคนไขนด(นดทงหมด, มาตามนด, ขาดนด) 3.1 ประกาศตวแปร App : string (app จะรบคาตวแปรประเภทคนไขนด) ๓.๒ ใชฟงกชน GetPickupList(sql); ท Code Toolbox เลอก Format เลอกแถบ Language เลอกฟงกชน GetPickupList(sql); ไปวางใต begin โดยเขยนค าสง SQL ดงน app:= GetPickupList('select "คนไขนดทงหมด"

Union select "มาตามนดจรง" Union select "ไมไดมาตามนด"');

If app = 'คนไขนดทงหมด' then ChangeReportSQL('select * from oapp where nextdate between "'+ds1+'" and "'+ds2+'"')

Else If app = 'มาตามนดจรง' then

ChangeReportSQL('select * from oapp where nextdate between "'+ds1+'" and "'+ds2+'"'+' and patient_visit = "y"')

Else If app = 'ไมไดมาตามนด' then

ChangeReportSQL('select * from oapp where nextdate between "'+ds1+'" and "'+ds2+'"'+' and (patient_visit = "N" or patient_visit is null or patient_visit = "")');

End; ๔. การสรางตวแปร เพอรบคาประเภทคนไขนดในแถบ Design

ใชเครองมอ variable วางตอจากชอ ตาราง คลกขวาเลอก calculations… ก าหนดคาตวแปร Value := app;

๕. ลอง compile และ Preview ด ๖. การสรางล าดบทให RUN อตโนมต โดยใชเครองชอ DBcalc คลกใตชอล าดบในแถบ

Detail แลวคลกขวาท variable เลอก calculations… Calc Type เลอก Count คลก OK

๗. การสรางตวแปร วนทนด และ HN โดยใชเครองมอทชอวา DBtext คลกวางใตตวแปรในแถบ Detail ทแถบ DBPipeline

ขางบนเลอก คาวนทนด และ เลข HN ๘. การสรางตวแปร ชอ – สกลคนไขนด โดยใชเครองมอ variable คลกขวา ก าหนดคาเปน

Value := GetSQLStringData('select concat(pname,fname," ",lname) from patient where hn = "'+DBPipeline['hn']+'"');

๙. การสรางตวแปรแพทยผนด โดยใชเครองมอ variable คลกขวา ก าหนดคาเปน Value := GetSQLStringData('select name from doctor where code = "'+DBPipeline['doctor']+'"');

3. ตวอยางแบบรายงานท ๓ แบบบนทกการตรวจรกษา รปแบบ

บนทกการตรวจรกษา หนวยบรการ รพช.เชยงกลาง ชอ – สกล ทอย HN

วนทมารบบรการ แพทยผรกษา วนทนด อาย BW H BMI รอบเอว BP RR HR ER Image ER Image การใหค าแนะน า การใชยา การปฏบตตวใหเหมาะสมกบโรค การรบประทานอาหาร มาตรวจตามนด ออกก าลงกาย อาการ (CC.)

HPI PE การรกษา

วธการออกแบบรายงาน 1. ออกแบบรายงานในแถบ Design

1.1 ชอหนวยบรการ ใชฟงกชน Value := HospitalName; 2. ประกาศตวแปร

var ad1,ad2,ad3,ad4,ad5 : string; ad11,ad22,ad33,ad44,ad55 : string; hn : string; date1,date2 : datetime; ds1,ds2,vstdate : string;

3. แถบ Calc เลอก Events เลอก On Create เขยนค าสง ดงน begin

hn:= InputQuery('plese insert HN', 'ใสหมายเลข HN ทตองการ'); vstdate := GetListFromQuery('select vstdate from opdscreen where hn = "'+hn+'" order by vstdate desc ');

ShowMessage(vstdate); GetDateRangeDialog(date1, date2);

ds1 := FormatDateTime('yyyy-mm-dd', date1); ds2 := FormatDateTime('yyyy-mm-dd', date2); ChangeReportSQL('select o.vn,o.hn,o.vstdate,bpd,bps,bw,cc,

pe,pulse,temperature ,rr ,height, advice1, advice2,advice3,advice4, advice5,advice6,advice7,bmi ,hpi,waist , v.dx_doctor , concat(v.age_y," ป " ,v.age_m," เดอน") as age,pe_image.image1 '+ ' from opdscreen o '+

' left outer join vn_stat v on o.vn=v.vn '+ ' left outer join pe_image on o.vn = pe_image.vn '+ ' left outer join er_image on o.vn = er_image.vn '+

' where o.hn="'+hn+'" and o.vstdate between "'+ds1+'" and "'+ds2+'" '+'order by o.vstdate desc');

End;

เสรจแลว ลอง compile และลอง preview ด 4. การสรางตวแปร ชอ – สกลผรบบรการ

ใชเครองมอ variable คลกขวาเลอก calculations… ใสคาค าสงเปน Value :=GetSQLStringData('select concat(pname,fname," ",lname) from patient where hn="'+DBPipeline['hn']+'" ');

5. การสรางตวแปรทอยผรบบรการ ใชฟงกชน GetPatientAddress(hn); ใชเครองมอ variable คลกขวาเลอก calculations… ใสคาค าสงเปน Value := GetPatientAddress(DBPipeline['hn']);

6. การสรางขอมล HN ของผรบบรการ ใชเครองมอ DBtext แลวใสคา DBPipeline เปน HN

7. การสรางขอมล วนทมารบบรการ ใชเครองมอ DBtext แลวใสคา DBPipeline เปน vstdate

8. การสรางตวแปร แพทยผรกษา ใชฟงกชน GetSQLStringData(sql); ใชเครองมอ variable คลกขวาเลอก calculations… ใสคาค าสงเปน Value := GetSQLStringData('select name from doctor where code = "'+DBPipeline['dx_doctor']+'"');

9. การสรางตวแปร วนทนด ใชฟงกชน GetSQLDateData(sql); ใชเครองมอ variable คลกขวาเลอก calculations… ใสคาค าสงเปน Value :=GetSQLDateData('select nextdate from oapp where vn ="'+DBPipeline['vn']+'"');

10. การสรางขอมล อายของผรบบรการ ใชเครองมอ DBtext แลวใสคา DBPipeline เปน age

11. การสรางขอมล BW.ของผรบบรการ ใชเครองมอ DBtext แลวใสคา DBPipeline เปน bw

12. การสรางขอมล H.ของผรบบรการ ใชเครองมอ DBtext แลวใสคา DBPipeline เปน height

13. การสรางขอมล BMI.ของผรบบรการ ใชเครองมอ DBtext แลวใสคา DBPipeline เปน bmi

14. การสรางขอมล รอบเอวของผรบบรการ ใชเครองมอ DBtext แลวใสคา DBPipeline เปน waist

15. การสรางขอมล BPI.ของผรบบรการ ใชเครองมอ DBtext แลวใสคา DBPipeline เปน bps “/” bpd

16. การสรางขอมล RR.ของผรบบรการ ใชเครองมอ DBtext แลวใสคา DBPipeline เปน rr

17. การสรางขอมล HR.ของผรบบรการ ใชเครองมอ DBtext แลวใสคา DBPipeline เปน pulse

18. การสรางบลอกค าแนะน า โดยน าค าแนะน าในตาราง opdscreen ในขอมล advice1-7 มาใชโดยใชหลกการ ถามการใหค าแนะน าในเรองดงกลาว จะโชวเครองหมาย / ในหวขอดงกลาง โดยด าเนนการ - ออกแบบการใหค าแนะน าในแถบ Design - ใชเครองมอ Checkbox ในแถบเมนบาร น าเครองหมายถกท Mark ออกในแถบ properties for checkbox โดยจะใชค าสงใหกระท าแทน - ใชเครองมอ variable คลกขวา เขยนค าสง ad1 := GetSQLStringData('select advice1 from opdscreen where vn =

"'+DBPipeline['vn']+'"'); if

ad1='Y' then checkbox1.checked := true

else checkbox1.checked := false; กระท าอยางนทกขอค าแนะน า

19. การท ารายการ อาการส าคญ (CC.) ด าเนนการดงน

- ออกแบบรายงานในแถบ design - ใชเครองมอ DBmono บนแถบเมน ในการสราง - ท DBPipeline เลอก CC.

20.

top related