แสดงกระทู้

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - BBT Hospital

หน้า: [1] 2
1
ลองแบบนี้ดูครับ
select between ICD10 หลายช่วงในคราวเดียวได้หรือเปล่าครับ
เช่นต้องการหาจำนวนผู้ป่วยนอกที่มี PDX อยู่ในช่วง A00-B99  หรือ E00-E89 หรือ C00-D89 หรือ P00-P96 หรือ Q00-Q99 หรือ R00-R99 หรือ Z00-Z99  ครับ

ตอนนี้ผมห่ทีล่ะช่วงครับ  Grin
select count(v.vn)
from ovst o
left outer join vn_stat v on v.vn=o.vn
where o.vstdate between "2012-10-01" and "2013-09-30"
and    (v.pdx between "A00" and "B999"   or
            v.pdx between "E00" and "E999"   or
            v.pdx between "C00" and "D899"   or
            v.pdx between "P00" and "P969"   or
            v.pdx between "Q00" and "Q999"   or
            v.pdx between "R00" and "R999"   or
             v.pdx between "Z00" and "Z999"  )

ขอเพิ่มตรงรหัสท้ายเป็น 4 หลักครับ เพราะ บาง ICD 10  หลาย ๆ รหัสมี 4 - 5  หลัก ครับ

2
MySQL / Re: ทำไมคำสั่งนี้จึงมี AN ว่างติดมาด้วย
« เมื่อ: กรกฎาคม 25, 2014, 18:17:38 PM »
ทำไมคำสั่งนี้จึงมี AN ว่างติดมาด้วย
select * from ovst where an is not null or an<>""

จากคำสั่งนี้ก็ต้องมีค่าว่างมาด้วยเพราะความหมายคือ

 an ไม่ใช่ค่าว่าง         หรือ       an ไม่เท่ากับ ""

คือถ้า an เป็นค่าว่าง มันก็ไม่เท่ากับ ""    อยู่แแล้ว
และถ้า an ="" มันก็คือไม่ว่าง
จากนิพจน์ดังกล่าวจะกลายเป็นนำทุกค่าข้อมูลมาแสดง
หากต้องการใช้คำสั่งให้ถูก ควรใช้ and แทน or ครับ
เป็น
select * from ovst where an is not null AND an<>""

3
ขอลองไล่ทีละข้อครับ
เอาแต่ผลลัพธ์ตัวเลขใช่ไหมครับ

F =  ผู้ป่วย NCD  ได้แก่  คลินิกเบาหวาน,ความดัน,หอบหืด,ไต,หัวใจ 
ทั้งหมดที่มีผลการคัดกรอง >= 7  มีกี่คน

   โค้ดคือ
 select count(distinct(v.hn))     from depression_screen d1
    left outer join vn_stat v on v.vn = d1.vn     
    LEFT OUTER JOIN clinicmember c ON c.hn=v.hn                   
    where vn.vstdate  between "'+d1+'" and "'+d2+'"
        and c.clinic in("1","10","2","9","13")
        and d1.depression_score>=7
ไม่รู้ว่าเหมือนกันไหมนะครับ ถ้าตัดตารางที่ไม่เกี่ยวข้องจะทำให้หาข้อมูลได้เร็วขึ้นครับ

4
ตรง
procedure GlobalOnCreate;
begin
 GetDateRangeDialog(date1, date2);
 d1:=FormatDateTime('eeee-mm-dd',date1);
 d2:=FormatDateTime('eeee-mm-dd',date2);
end;
ควรแก้ eeee เป็น yyyy เพราะ vstdate เก็บในรูปแบบปี คศ. ครับ

5
ของ โรงพยาบาลผมก็เคยเกิดปัญหา คล้าย ๆ กัน คือใช้เวลา ประมาณ 2 นาที กว่า ๆ กว่าจะprint ใบสั่งยาออกมาได้ครับ โดยเกิดจากการที่ไปใช้ Variable ในรายงานดึงข้อมูลต่างหาก ทำให้การประมวลผลดึงข้อมูลมันช้าครับ
จึงใช้วิธีดึงผ่านคำสั่ง sql ให้ได้ทุกตัวที่ต้องการตั้งแต่แรกครับ
หลังจากนั้นก็ทำให้การprint ใช้เวลา ลดลงอย่างมากครับ เหลือประมาณ 10 วิ

ดังนั้นถ้าเป็นไปได้ ควรตัดการใช้ variable ออกไปครับ

6
ผมว่าไม่แปลกนี่ครับ เนื่องจากรหัส ICD10 ที่ระบุ มันมีตัวย่อยด้วย ทำให้ค่าที่หาได้มากกว่าแบบไม่มีตัวย่อยครับ
เช่น F70 หากมีตัวย่อย เช่น  F709 ก็ทำให้การหาจำนวนแตกต่างกันได้อยู่แล้วครับ

7
Report Exchange / Re: emergency เอาไงดีครับ
« เมื่อ: มีนาคม 02, 2014, 20:45:20 PM »
ที่โรงพยาบาลของผม พยาบาล ER ได้มาติดต่อโดยต้องการจำแนกความเร่งด่วนเป็น 5 ระดับครับ
โดย ให้รายงาน จำแนกผู้ป่วยในแต่ละระดับ ด้วย

8
ต้องใช้ subreport ช่วยครับ
เช่น กำหนดตัวแปรรับค่าก่อนว่า เนื้อหาข้างบนมีกี่บรรทัด
แล้วกำหนดตัวแปรอีกตัวมาว่าจะสร้างบรรทัดเปล่าเพิ่มอีกกี่บรรทัด
แล้วใช้ subreport สร้างบรรทัดเปล่าตามจำนวนบรรทัดที่ต้องการจะสร้าง
เช่น
 ตัวเนื้อหามี 10 บรรทัด เราต้องการให้มี 25 บรรทัดต่อหน้า ก็ต้องสร้างอีก 15 บรรทัดครับ

9
ทำได้ครับ
โดยเข้าไปแก้ไขวันที่ในเครื่องคอมก่อน
หลังจากนั้น ค่อยเข้าหน้า screen ทำการพิมพ์ข้อมูลซักประวัติ
หลังจากนั้น กลับมาดูเวลาอีกครั้ง(เพราะมันมักจะกลับมาเป็นวัน เวลาปัจจุบัน)
ถ้าวันที่กลับมา ก็แก้อีกที
แล้ว อาจเข้าหน้าตรวจอีกครั้ง เพื่อสั่งยาก็ยังได้ครับ

ปล. ใจจริงไม่อยากให้ลงข้อมูลล่วงหน้า เพราะ หากมีอะไรเปลี่ยนแปลง อาจยุ่งยากทีหลังได้ครับ

10
ลองใช้ union ดูซิครับ เช่น

select op0 as op from vn_stat v
where v.vstdate between "2013-01-01" and "2013-01-31"
union
select op1 as op from vn_stat v
where v.vstdate between "2013-01-01" and "2013-01-31"

11
Report Exchange / Re: ระบบโภชนาการ
« เมื่อ: พฤษภาคม 10, 2013, 15:21:14 PM »
ลองเอาตัวอักษร      #        ออกดูครับ

12
แจ้งปัญหา / ขอความช่วยเหลือ / Re: ปัญหา MDC26 DRG 26509
« เมื่อ: พฤษภาคม 06, 2013, 12:36:28 PM »
ผมว่าไม่จริงครับ รหัส Y บางอย่างเป็นการบอกถึงสาเหตุภายนอก ซึ่งอาจจะไม่ต้องมีรหัส S T ก็ได้ครับ เช่น ท้องเสียจากยากลุ่ม เพนนิซิลินครับ

ส่วนการหาค่า RW นั้น ไม่ทราบว่าได้ดูเรื่องข้อมูล  อายุ, เพศ , จำนวนวันนอน, discharge type ว่ามีการลงข้อมูลแล้วหรือยังครับ

13
ทางโปรแกรม HOSxP ใช้ eGFR สูตร EPI-CKD ครับ จึงได้ค่าคนละค่ากันครับ
ซึ่งทางสมาคมโรคไตกำหนดให้ใช้ แบบที่ HOSxP ใช้อยู่ครับ

15
ย้อนหลังเมื่อ 3 ปีที่แล้วก็ดูในช่วงวันที่ ของ 3 ปีที่แล้วเช่น วันที่มาตรวจในช่วงวันที่ 1 ต.ค.53 ถึง 30 ก.ย. 54
แล้วดึงจาก vn_stat ได้เลยเพราะ มี age_y ในตัวแปรอยู่แล้ว คืออายุเป็นปีขณะนั้น
แต่ว่าผมไม่แน่ใจว่าถ้าจะเอาโรคที่เยอะสุดอาจต้องเอาจาก ovstdiag หรือเปล่า เพราะใน vn_stat มันดึง
pdx พร้อม dx0,1,2,3,4,5 ออกมารวมกันเป็นตัวเดียวกันไม่ได้ครับ

16
Report Exchange / Re: รบกวนช่วยดู Scripts ด้วยครับ
« เมื่อ: มีนาคม 12, 2013, 18:46:00 PM »
  Value:=DBPipeline['pdx'];
  if (Value='B20') or (Value='B200') or (Value='B201') or (Value='B202') or (Value='B203') or (Value='B204') or (Value='B205') or (Value='B206') or (Value='B207') or (Value='B208') or (Value='B209')
  or (Value='B21') or (Value='B210') or (Value='B211') or (Value='B212') or (Value='B213') or (Value='B217') or (Value='B218') or (Value='B219')
  or (Value='B22') or (Value='B220') or (Value='B221') or (Value='B222') or (Value='B227')
  or (Value='B23') or (Value='B230') or (Value='B231') or (Value='B232') or (Value='B233') or (Value='B238') or (Value='B24')
  or (Value='F024') or (Value='F0240') or (Value='F0241') or (Value='F0242') or (Value='F0243') or (Value='F0244')
  or (Value='O987') or (Value='R75') or (Value='Z114') or (Value='Z206') or (Value='Z21') or (Value='Z717') or (Value='Z830')
  then
  begin
  Value:='---'
  end else
  Value:=DBPipeline['diagnosis_name'];
  end;

ตามนี้ได้นะครับ แต่พอทำไปทำมา ได้บ้างไม่ได้บ้าง โชว์บ้างไม่โชว์บ้าง งงเลยครับ
ขอลองดูตัวรายงานหน่อยได้ไหมครับ

17
ไม่แสดง preview หน้าขาวๆ ได้มั๊ยคับ
หรือจะใช้ subreport ก็ได้นะครับใน band title ใส่ชื่อหัวรายงานเอาไว้ส่วนตัว data ก็ใช้ DBPipelinelink แค่นี้็ไม่แสดงหน้าว่างๆแล้วครับ
ลองแก้จาก Property for Report ดูซิครับ
เลือกใน NoDataBehaviors จาก ndBlankPage เป็น ndBlankReport ครับ

18
เห็นในนี้ว่า Excel 2003 รับได้ 65535 รายการ
ส่วน Excel 2010 รับได้ถึง 1 ล้านรายการครับ

19
เข้าไปที่เมนู System ==> System setting เลือกที่ สิทธิการรักษา
double click สิทธิ ที่ ต้องการให้มีรายการ จ่าย 30 บาท
เลือกรายการค่าใช้จ่ายเพิ่มที่  ค่าธรรมเนียมสิทธิที่ต้องชำระเอง แล้ว กด ตกลงครับ

20
ถ้าจำไม่ผิดรู้สึกว่าทางสมาคมโรคไต ให้ใช้ค่า eGFR จากสูตรของ CKD-EPI ในผู้ใหญ่และ  Schwartz ในเด็ก< 18 ปี
CKD-EPI formula

เพศหญิงถ้าระดับซีรัมcreatinine≤0.7มิลลิกรัมต่อเดซิลิตร eGFR=144x(ซีรัมcreatinine/0.7)ยกกำลัง-0.329 X(0.993)ยกกำลังอายุ(ปี)
เพศหญิงถ้าระดับซีรัมcreatinine>0.7มิลลิกรัมต่อเดซิลิตร eGFR=144x(ซีรัมcreatinine/0.7)ยกกำลัง-1.209 X(0.993)ยกกำลังอายุ(ปี)
เพศชายถ้าระดับซีรัมcreatinine≤0.9มิลลิกรัมต่อเดซิลิตร eGFR=141x(ซีรัมcreatinine/0.9)ยกกำลัง-0.411 X(0.993)ยกกำลังอายุ(ปี)
เพศหญิงถ้าระดับซีรัมcreatinine>0.9มิลลิกรัมต่อเดซิลิตร eGFR=141x(ซีรัมcreatinine/0.7)ยกกำลัง-1.209 X(0.993)ยกกำลังอายุ(ปี)
ซึ่ง HOSxP ใช้ค่านี้เป็นค่าที่แสดงผลในโปรแกรมครับ

ถ้าเป็นสูตร
สูตร ผู้ชาย (140-อายุ(y))* BMI / 72*serum creatinine
สูตร ผู้หญิง {(140-อายุ(y))* BMI / 72*serum creatinine}*0.85
จะเป็นการหาค่า Creatinine Clearance ครับ

ลองหาโปรแกรมคำนวนจาก web นี้ดูได้ครับ

21
Report Exchange / Re: รบกวนเพิ่มข้อมูล
« เมื่อ: กุมภาพันธ์ 22, 2013, 21:09:29 PM »
จะทำอย่างไรให้ผู้ป่วยมี firstday ทุกราย ครับ ที่ข้อมูลปรากฎออกมาเป็น 0:00:00 ก็เพราะในตาราง patient ไม่มีข้อมูล  firstday ครับ ข้อมูลส่วนใหญ่โอนมาจากระบบ mitnet จะแก้ปัญหานี้ได้อย่างไรบ้างครับ รายงานที่แก้ไขนี้ก็เพื่อให้เจ้าหน้าเวชสถิติพิมพ์ออกมาตรวจสอบส่งตรวจสอบกับทาง สปสช ที่ต้องการวันที่มารับบริการวันแรกในหน้าข้อมูลที่พิมพ์ออกมาตรวจสอบครับ ขอบคุณมากครับ


Value=GetSqlDatedata('select min(vstdate) from vn_stat where hn='"+DBPipeline['HN']+"' ');
น่าจะเป็นอย่างนี้หรือเปล่าครับ

22
Report Exchange / Re: GetThaiAge แล้วอายุไม่ตรงครับ
« เมื่อ: กุมภาพันธ์ 22, 2013, 10:35:25 AM »
ทำไมไม่ลองดึงข้อมูล age_y จาก ตาราง vn_stat ล่ะครับ
ได้แล้วครับ เปลี่ยนเป็น order_date แทนได้ครับ แต่ว่าเหตุทีไม่ดึงจาก age_y เพราะ ถ้าเป็นผู้่ปวยในก็ต้องเชียน script ครอบอีกครับ join vn ไม่ได้ครับ ต้องเขียนอีกชั้นอยู่ดีครับ
ผู้ป่วยในก็ join vn_stat ได้ แต่จะได้อายุ ณ วัน admit
ผมว่าถ้าเป็นผู้ป่วยใน ก็ join an_stat ซิครับ ดึง age_y จาก an_stat ก็มีครับ
แล้วใน an_stat ก็มีช่อง vn นะครับ ทำให้สามารถหา vn จาก ที่นี่ ได้นี่ครับ

23
รายงานนี้ใช้ tempreport (temp-report) โดยเข้าแก้ไขโดยเข้าไปที่
 report designer => เลือก report นี้
เข้าไปที่แถบ Script ที่หน้าจอ ที่มีการ assign parameter โดยจะเห็น แถบ SQL, Script, Reference ครับ
แล้วสร้างตัวแปรข้อมูลไปเก็บที่ tempreport โดยตัวรายงานที่นำมาให้ดูเก็บอยู่ในตัวแปรชื่อ mon.. ต่าง ๆ ครับ

24
Report Exchange / Re: GetThaiAge แล้วอายุไม่ตรงครับ
« เมื่อ: กุมภาพันธ์ 22, 2013, 08:20:32 AM »
ทำไมไม่ลองดึงข้อมูล age_y จาก ตาราง vn_stat ล่ะครับ

25
Report Exchange / Re: รบกวนเรื่อง Operative Note Report ครับ
« เมื่อ: กุมภาพันธ์ 15, 2013, 08:49:18 AM »
ลองแก้เล็กน้อยลองดูแล้วกันครับ

26
Report Exchange / Re: ตารางทีมแพทย์ผ่าตัด
« เมื่อ: กุมภาพันธ์ 13, 2013, 22:00:56 PM »
ขอบคุณครับผม ถามเพิ่มเติมอีกหนึงคำถามครับ ไม่ทราบว่า ICD 10 จากที่กรอกตามรูป จะถูกเก็บอยู่ในตารางไหนหรือครับ
อยู่ใน postdiagnosis จากตาราง operation_list หรือเปล่าครับ

27
Report Exchange / Re: ตารางทีมแพทย์ผ่าตัด
« เมื่อ: กุมภาพันธ์ 12, 2013, 20:51:31 PM »
เดี๋ยวพรุ่งนี้จะดูในตารางให้ครับ เพราะผมก็เอารายชื่อเจ้าหน้าที่ผ่าตัดมาแสดงในการเบิกจ่ายนอกเวลาครับ

ตอนนี้ไม่ได้ backup มาที่ notebook ตัวเองครับ

28
Report Exchange / Re: ปกปิดชื่อโรค HIV
« เมื่อ: กุมภาพันธ์ 12, 2013, 20:45:55 PM »
ทำไมเราเอา Pipeline มาใส่เงื่อนไขตรงๆไม่ได้ครับ งงมากครับ ความจริงคำสั่งนี้ก็เคยใช้ครับ

ผมว่าท่านน่าจะดูที่ pipeline ของ diagnosis_name ว่ามีแค่คำว่า HIV หรือว่ามีคำว่า HIV อยู่ในนี้อีกที
ส่วนใหญ่ชื่อโรคมักจะยาวว่า HIV เฉย ๆ ครับ
เช่น HIV resulting in .....
ทำให้เวลาเปรียบเทียบ = 'HIV' จึงได้ค่าเป็น False และแสดงผลออกมาครับ

29
ลองดูคล้าย ๆ แบบนี้ดูไหมครับ
เพราะว่า Variable 37 นำค่า Last Creatinine ออกมาเป็น String ครับ
 If   DBPipeline['age_y']<18 then
  begin
    if ((Variable37.value)>0.01) and ((Variable37.value)<= 99.99) then
    Value:= (0.41 * DBPipeline['height'])/Variable37.Value;
  end else
  if DBPipeline['sex']='2'  then
  Begin{Female}
     if ((Variable37.value)>0.01) and ((Variable37.value)<= 0.7) then
        Value := (144 * (exp(-0.329*ln((Variable37.value)/0.7)))*exp(DBPipeline['age_y']*ln(0.993))) else
     if ((Variable37.value)>0.7) and (Strtofloat(Variable37.value)< 99.99) then
        Value := (144 * (exp(-1.209*ln((Variable37.value)/0.7)))*exp(DBPipeline['age_y']*ln(0.993)));
  End  {Female}
  else
  Begin{Male}
     if ((Variable37.value)>0.01) and ((Variable37.value)<= 0.9) then
        Value := (141 * (exp(-0.411*ln(Strtofloat(Variable37.value)/0.9)))*exp(DBPipeline['age_y']*ln(0.993))) else
     if ((Variable37.value)>0.9) and ((Variable37.value)< 99.99) then
        Value := (141 * (exp(-1.209*ln((Variable37.value)/0.9)))*exp(DBPipeline['age_y']*ln(0.993))) ;
  End;
ส่วนการกำหนดช่วงเพราะเคยมีการใส่ข้อมูลที่ไม่ใช่ตัวเลขในโปรแกรมทำให้ error ในการคำนวนแล้วข้อมูลไม่ออกได้ครับ

30
ไม่ทราบว่าจะตรงกับใจหรือเปล่านะครับ
แต่คิดว่าคงดูเป็นแนวทางได้ครับ

select lab_order_number,lab_items_code,lab_order_result from lab_order
where lab_items_code=78
and substring(lab_order_result,1,1) between "0" and "9"
limit 100

31
Report Exchange / Re: สอบถามคำสั่งsqlครับ
« เมื่อ: มกราคม 21, 2013, 18:47:31 PM »
select ot.operation_time_type_name, em.emergency_name, p.hn, p.fname from operation_detail op
left outer join operation_list ol on ol.operation_id = op.operation_id
left outer join patient p on p.hn = ol.hn
left outer join operation_time_type ot on  ot.operation_time_type_id  = ol.operation_time_type_id
left outer join operation_emergency em on  em.emergency_id  = ol.emergency_id
where begin_datetime between '2012-05-01 08:30:00' and '2012-05-31 16:30:00'

and time(datetime) between "08:00:00" and "16:00:00"
***********
ถ้าผมอยากแยกเวลาด้วยครับตั้งแต่ 08:00:00 ถึง 16:00:00 ต้องใช้คำสั่งอยากไรครับ ขอบคุณครับ

32
น่าจะต้องกำหนดตัวแปรเป็น integer ก่อนครับ แล้วค่อยเรียง

33
แต่ผมว่า code มันแปลก ๆ ครับ
ควรเป็น
    ChangeReportSQL('select p.pname,p.fname,p.lname,p.cid,h.hospcode,h.hosptype,dr.name AS DRUGNAME , '+
    ' li.lab_items_name,x.xray_list,v.vstdate,v.pttype_expire,v.income,d.name,op.cc,o.rxdate,o.icode from VN_STAT V '+
    ' left outer join  PATIENT P  on  v.hn=p.hn                                                    '+
    ' left outer join  hospcode h on  h.hospcode = p.hcode                                         '+
    ' left outer join  opitemrece o on o.VN = V.VN                                                 '+
    ' left outer join  drugitems dr on dr.icode = o.icode                                          '+
    ' left outer join  lab_head lh  on  lh.vn = v.vn                                               '+
    ' left outer join  lab_order lo on lo.lab_order_number = lh.lab_order_number                   '+
    ' left outer join  lab_items li on li.lab_items_code = lo.lab_items_code                       '+
    ' left outer join doctor d on  d.code=v.dx_doctor                                              '+
    ' left outer join  xray_head x on x.vn = v.vn                                                  '+
    ' left outer join opdscreen op on op.vn = v.vn                                                 '+
    ' where v.vn  ="'+fvn+'"                                                                       '+
    ' group by dr.name');
เพราะคุณไปเลือกตารางหลักเป็น patient ไม่ใช่ vn_stat ครับ
ตัวอักษรใหญ่คือที่น่าจะแก้ไขครับ
ปล. ผมไม่ได้ลองนะครับ ถ้าอย่างไรก็ลองดูนะครับ

34
จาก code
    ChangeReportSQL('select p.pname,p.fname,p.lname,p.cid,h.hospcode,h.hosptype,dr.name, '+
    ' li.lab_items_name,x.xray_list,v.vstdate,v.pttype_expire,v.income,d.name,op.cc,o.rxdate,o.icode from patient p '+

จะเห็นว่าเลือก dr.name ก่อน แล้วจึงเลือก d.name แนะนำให้ ใช้ dr.name as drugname มากกว่าครับ
และส่วน   
    ' left outer join  opitemrece o on o.hn = p.hn                                                 '+
    ' left outer join  drugitems dr on dr.icode = o.icode                                          '+
การลิงค์ ตารางopitemrece ควรใช้     ' left outer join  opitemrece o on o.VN = p.VN '+ มากกว่าครับ
 

35
Report Exchange / Re: ขอความช่วยเหลือ ER-Report-1
« เมื่อ: มกราคม 16, 2013, 08:17:34 AM »
ตาม Link นี้คะ

http://hosxp.net/index.php?option=com_smf&Itemid=28&topic=9303.msg53387;topicseen#msg53387

นันท์ทา   ตั้งใจ(ตั๊ก)
ฝ่ายลูกค้าสัมพันธ์

ผมเอามาดัดแปลงนะครับลองปรับใช้ดูครับ

36
Report Exchange / Re: ขอความช่วยเหลือใบmed sheet
« เมื่อ: มกราคม 16, 2013, 08:00:19 AM »
ลองดูเป็นตัวอย่างแล้วกันครับ

37
Report Exchange / Re: ขอความช่วยเหลือใบmed sheet
« เมื่อ: มกราคม 15, 2013, 20:04:08 PM »
ขอแนะนำให้ทำ sub report ครับ โดยกำหนดตัวแปรก่อนว่ามีกี่รายการในตอนแรก
แล้วกำหนด DbPipelineLink1 เช่น
Variable:= จำนวนที่ขาดไปในหนึ่งหน้า
'select code from provis_education limit '+Variable ;
เพราะผมก็ใช้อยู่ในรพ.ของผมโดยกำหนดแบบนี้ แต่เอามาให้ไม่ได้ เพราะ ตัวแปรยาของผมเป็นแบบกำหนดเองว่าไม่เอาอะไร เอาอะไร มาใส่ในตาราง med sheet

เช่น ถ้าต้องการ 10 รายการต่อหน้าแต่ มียา 2 รายการ หรือ 12 รายการ ก็แสดงเพิ่มอีก 8 รายการเปล่าโดยใส่เนื้อหาของ DbPipelineLink1 แสดงเนื้อหาเป็นสีขาวครับ

ลองเอาไฟล์ cds มาซิครับ เผื่ออาจจะลองแก้ให้ครับถ้าว่าง

38
Report Exchange / Re: ช่วยดูรายงานให้หน่อยครับ
« เมื่อ: ธันวาคม 26, 2012, 06:42:19 AM »
ไปกำหนดใน calculation ของ variable ให้คำสั่งจาก
GetSQLStringData เป็น GetSQLIntegerData
ครับ

39
ผมลองแก้เองแล้วนะครับ อาจไม่ค่อยน่าดู code ซักเท่าไร แต่ก็คำนวณ ตรงใช้ได้ครับ
จาก
  no:=JD-JD5+1;
จากตรงนี้ครับ
  if nmonth<5 then m:=4 else m:=5;
  lcheck:=True;
  lwork:=False;
  i:=0;
  while not lwork do
    begin
      i:=i+1;
      n:=no;
      nmod:=m mod 2;
      if nmod=1 then _day:=29 else _day:=30;
      if (m=7 and _index=2) then _day:=_day+1;
      if nmonth<5 then m:=m-1 else m:=m+1;
      if m<5 then no:=no+_day else no:=no-_day;
//      showmessage(inttostr(m-1)+'-'+inttostr(_index)+'-'+booltostr(lcheck)+#13+inttostr(nmod)+#13+inttostr(_day)+#13+inttostr(n)+'-'+inttostr(no));
      if m=9 then
        if _index=1 then
          if lcheck then
            begin
              lcheck:=False;
              m:=8;
            end;
      if nmonth<5 then lwork:=no>0 else lwork:=no<=_day;
      if i>12 then lwork:=true;
    end;
    n:=dayofweek(nowdate);
    cthaiday:=formatdatetime('dddd',nowdate);  //getsqldata('select name from thaiday where id="'+inttostr(n)+'" ');
    ram:='';
    if no<16 then ram:='ขึ้น '+inttostr(no) else ram:='แรม '+inttostr(no-15);
    ram:=ram+' ค่ำ';
    if nmonth<5 then m:=m+1;

แก้เป็น
ดังนี้ครับ
 if _index=1 then
 begin
   if (no >=-117)and (no<=-89) then begin no:=no+118;m:=1; end else
   if (no >=-88) and (no<=-59) then begin no:=no+89;m:=2;  end else
   if (no >=-58) and (no<=-30) then begin no:=no+59;m:=3;  end else
   if (no >=-29) and (no<=0)   then begin no:=no+30;m:=4;  end else
   if (no >=1)   and (no<=29)  then begin m:=5;            end else
   if (no >=30)  and (no<=59)  then begin no:=no-29;m:=6;  end else
   if (no >=60)  and (no<=88)  then begin no:=no-59;m:=7;  end else
   if (no >=89)  and (no<=118) then begin no:=no-88;m:=8;  end else
   if (no >=119) and (no<=148) then begin no:=no-118;m:=88;end else
   if (no >=149) and (no<=177) then begin no:=no-148;m:=9; end else
   if (no >=178) and (no<=207) then begin no:=no-177;m:=10;end else
   if (no >=208) and (no<=236) then begin no:=no-207;m:=11;end else
   if (no >=237) and (no<=266) then begin no:=no-236;m:=12;end else
   if (no >=267) and (no<=295) then begin no:=no-266;m:=1; nthaiyear:=nthaiyear+1; end;
 end else
 if _index=2 then
 begin
   if (no >=-117)and (no<=-89) then begin no:=no+118;m:=1; end else
   if (no >=-88) and (no<=-59) then begin no:=no+89;m:=2;  end else
   if (no >=-58) and (no<=-30) then begin no:=no+59;m:=3;  end else
   if (no >=-29) and (no<=0)   then begin no:=no+30;m:=4;  end else
   if (no >=1)   and (no<=29)  then begin m:=5;            end else
   if (no >=30)  and (no<=59)  then begin no:=no-29;m:=6;  end else
   if (no >=60)  and (no<=89)  then begin no:=no-59;m:=7;  end else
   if (no >=90)  and (no<=119) then begin no:=no-88;m:=8;  end else
   if (no >=120) and (no<=148) then begin no:=no-119;m:=9; end else
   if (no >=149) and (no<=178) then begin no:=no-148;m:=10;end else
   if (no >=179) and (no<=207) then begin no:=no-178;m:=11;end else
   if (no >=208) and (no<=237) then begin no:=no-207;m:=12;end else
   if (no >=238) and (no<=266) then begin no:=no-237;m:=1; nthaiyear:=nthaiyear+1; end else
   if (no >=267) and (no<=296) then begin no:=no-266;m:=1; nthaiyear:=nthaiyear+1; end;
 end else
 begin
   if (no >=-117)and (no<=-89) then begin no:=no+118;m:=1; end else
   if (no >=-88) and (no<=-59) then begin no:=no+89;m:=2;  end else
   if (no >=-58) and (no<=-30) then begin no:=no+59;m:=3;  end else
   if (no >=-29) and (no<=0)   then begin no:=no+30;m:=4;  end else
   if (no >=1)   and (no<=29)  then begin m:=5;            end else
   if (no >=30)  and (no<=59)  then begin no:=no-29;m:=6;  end else
   if (no >=60)  and (no<=88)  then begin no:=no-59;m:=7;  end else
   if (no >=89)  and (no<=118) then begin no:=no-88;m:=8;  end else
   if (no >=119) and (no<=147) then begin no:=no-118;m:=9; end else
   if (no >=148) and (no<=177) then begin no:=no-147;m:=10;end else
   if (no >=178) and (no<=206) then begin no:=no-177;m:=11;end else
   if (no >=207) and (no<=236) then begin no:=no-206;m:=12;end else
   if (no >=237) and (no<=265) then begin no:=no-236;m:=1; nthaiyear:=nthaiyear+1; end else
   if (no >=266) and (no<=295) then begin no:=no-265;m:=1; nthaiyear:=nthaiyear+1; end;
 end;

สีเขียวเป็นแก้ไขอีกรอบครับนับจำนวนวันผิด

40
ผมยังเจอปัญหาอีกอย่างครับ
อย่างวันที่ 19 เม.ย. 2555 จะกลายเป็น แรม 43 ค่ำ เดือน 4 ปีมะโรงครับ
ถ้าแก้ได้ขอ code ด้วยครับ
ขอบคุณครับ

41
แก้จาก
_mas:=int((y*(nyear-1181)+dd0)/m)- ((_index mod 3) mod 2) * int(((24+(y*(nyear-1181)+dd0)/(m/30))mod 30)/24);
เป็น
int((y*(nyear-1181)+dd0)/m)- ((_index mod 3) mod 2) * int((((24+(y*(nyear-1181)+dd0))/(m/30))mod 30)/24);

เพราะตอนคำนวณ มันหาร 30 ก่อน + 24 ครับ

ตัวอย่าง-ใบรับรองการเกิด
error ตรงคำนวณค่ามาสเกณฑ์(_mas)
ที่ต้อง +25 ไม่รู้เพราะอะไร
คำนวณได้แค่ 2401-2559
หาค่าตารางสังวัตสร (ผมตั้งชื่อว่า sws) ได้แค่นี้

ความจริงต้อง+ แค่ 24ถึง 25 เพราะจาก เวป มีเวปที่บอกเรื่องการคำนวณ
http://www.payakorn.com/webboard_ans.php?q_id=34139

นำไปใส่ใน excel ถึงได้คำตอบว่าผิดตรงที่ แจ้งไว้ครับ

ส่วน จาก cds ที่ได้นี้ทำให้ผมดัดแปลงมาใช้ด้วย ขอบคุณอย่างสูงครับ

42
ลองคำสั่งนี้ดู

select o.vn,o.hn,c.number,concat(p.pname,p.fname," ",p.lname) as ptname
,o.vstdate,o.vsttime,s.bw,s.height,s.bmi,s.bps,s.bpd
,if(s.bps between 140 and 159 or s.bpd between 90 and 99,'1'
,if(s.bps between 160 and 179 or s.bpd between 100 and 109,'2'
,if(s.bps>=180 or s.bpd>=110,'3'
,if(s.bps is null or s.bpd is null,'Error',' ')))) 'BP_Grade'
,if(s.bps between 140 and 159 or s.bpd between 90 and 99,1,0) 'BP_Grade1'
,if(s.bps between 160 and 179 or s.bpd between 100 and 109,1,0) 'BP_Grade2'
,if(s.bps>=180 or s.bpd>=110,1,0) 'BP_Grade3'
,s.tg,s.ldl,s.hdl,s.hbA1c,s.creatinine,s.ua
,s.fbs
,if(s.fbs is null,'Error'
,if(s.fbs<=125,'Normal',if(s.fbs<=154,'1',if(s.fbs<=182,'2','3')))) 'FBS_Grade'
,if(s.fbs between 126 and 154,1,0) 'FBS_Grade1'
,if(s.fbs between 155 and 182,1,0) 'FBS_Grade2'
,if(s.fbs>=183,1,0) 'FBS_Grade3'
from ovst o
left join patient p on p.hn=o.hn
left join opdscreen s on o.vn=s.vn
left join clinicmember c on c.hn=o.hn
where o.vstdate between '2012-01-01' and '2012-06-30'
and c.clinic ="001"
order by o.hn,o.vn
แนะนำให้คำนวนจากBP สูงก่อนครับเพราะถ้า bp 181/90 จะกลายเป็น grade 1 เท่านั้นครับ

43
select * from er_regist
where time(finish_time)<"8.30" or time(finish_time)>"16.30"

ผมลองเอาเวลาเสร็จจากการดูแลผู้ป่วยเป็นตัวตัดเวลานะครับ

44
อยากได้วิธีคำนวนครับ
โหลด .cds มาแล้วมัน error ไม่สามารถดูได้นะครับ
ส่วน .txt มันตาลายนะครับ เลยอยากทราบวิธีคำนวนมากกว่าครับ

45
Report Exchange / Re: รบกวนคำสั่ง sql
« เมื่อ: ธันวาคม 11, 2012, 08:44:57 AM »
select o.vn from opitemrece o
where op.icode in ("รหัสยา A" ,"รหัสยา B" ,"รหัสยา C" )
and  o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
คำสั่งนี้หากมีการสั่งยาแค่ตัวเดียวก็จะขึ้นแล้วไม่ใช่หรือครับ แต่ที่เขาต้องการคือต้องมียาทั้ง 2 ตัวอยู่ด้วย
แต่พอมองเห็นคำสั่งนี้ก็นึกขึ้นได้อีกแบบครับ
select o.vn  from opitemrece o
where o.icode in ("รหัสยา 1","รหัสยา2","รหัสยา3")
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
having count(o.vn>2)

ใช้ในกรณีที่สั่งยาทั้ง 3 ตัว ครับ

ขอแก้ไขเพิ่มเติมครับ
ตรง having count(o.vn>2)  ให้เอา >2 ออกนอกวงเล็บครับ
แบบนี้ครับ having count(o.vn)>2
ขอบคุณครับ บังเอิญไม่ได้ทดสอบ จึงพิมพ์ผิดไปครับ

46
Report Exchange / Re: รบกวนคำสั่ง sql
« เมื่อ: ธันวาคม 11, 2012, 08:22:18 AM »
select o.vn  from opitemrece o
where o.icode in ("รหัสยา 1","รหัสยา2","รหัสยา3")
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
having count(o.vn>2)

ระวัง คำสั่งนี้ตรงที่ หากมีการสั่งยาเดิมซ้ำ 2 - 3 ครัง ก็อาจทำให้ได้ vn ที่สั่งยาจริง ๆ แค่ 1 - 2 ตัวได้ครับ

47
Report Exchange / Re: รบกวนคำสั่ง sql
« เมื่อ: ธันวาคม 10, 2012, 19:12:00 PM »
select o.vn from opitemrece o
where op.icode in ("รหัสยา A" ,"รหัสยา B" ,"รหัสยา C" )
and  o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
คำสั่งนี้หากมีการสั่งยาแค่ตัวเดียวก็จะขึ้นแล้วไม่ใช่หรือครับ แต่ที่เขาต้องการคือต้องมียาทั้ง 2 ตัวอยู่ด้วย
แต่พอมองเห็นคำสั่งนี้ก็นึกขึ้นได้อีกแบบครับ
select o.vn  from opitemrece o
where o.icode in ("รหัสยา 1","รหัสยา2","รหัสยา3")
and o.vstdate between "2012-12-01" and "2012-12-03"
group by o.vn
having count(o.vn>2)

ใช้ในกรณีที่สั่งยาทั้ง 3 ตัว ครับ

48
ลองใช้ sql โดยดึงจากอายุเมื่อ admit ซิครับ เพราะจะได้ว่า 0 ปี 0 เดือน 0 วัน
เช่น
select a.pdx,count(a.an) from an_stat a
where age_y=0 and age_m=0 and age_d=0
and dchdate between "2011-10-01" and "2012-09-30"
group by a.pdx
order by count(a.an) desc

ผมลองมั่วพิมพ์นะครับ ถ้าพิมพ์ผิดก็ขออภัยครับ
เพราะ ไม่มีข้อมูลในเครื่องที่บ้านครับ

49
Report Exchange / Re: สอบถาม รายงานค่าใช้จ่ายครับ
« เมื่อ: ธันวาคม 06, 2012, 21:27:48 PM »
สอบถาม รายงานค่าใช้จ่ายครับ
ถ้า SUM--> v.uc_money + v.paid_money + v.remain_money จะได้ไม่เท่ากับ  v.income
1.จำเป็นหรือเปล่าที่ 3 ตัวนี้รวมกันต้องเท่ากับ income
2.ขอคำสั่งที่ตรวจสอบ v.uc_money + v.paid_money + v.remain_money แล้วไม่เท่ากับ  v.income ครับ
 ;D ;D

ถ้าของโรงพยาบาลผม ผมสังเกตุว่า paid money รวมกับ uc_money จะได้เท่ากับ income ส่วน remain_money จะเป็นยอดเงินที่ผู้ป่วยค้างชำระในvisit นั้น ครับ
(ผมคิดว่า paid_money น่าจะเป็น เงินที่ควรจะต้องจ่าย ไม่ใช่เงินที่ได้รับจากผู้ป่วยครับ)
จากรูปที่คุณนำมาให้ดูผมว่าคล้ายกับของผมครับ
ถ้าจะให้ดีลองcheck ในตาราง rcpt_print ดูที่ vn เดียวกัน ซิครับว่าชำระเงินแล้วยอดที่ขาดจาก paid_money ตรงกับ remain_money หรือเปล่าครับ

50
Report Exchange / Re: รบกวนคำสั่ง sql
« เมื่อ: ธันวาคม 06, 2012, 21:05:15 PM »
ขอพิมพ์โดยไม่ได้ลองกับHOSxp นะครับ

select o.vn from opitemrece o
where o.vn in (select op.vn from opitemrece op where op.icode="รหัสยาที่ 1"
                       and op.vstdate between "2012-12-01" and "2012-12-03" )
  and o.icode="รหัสยาตัวที่ 2" and o.vstdate between "2012-12-01" and "2012-12-03"
limit 10

ผมใช้ ตารางเดียวกันโดยกำหนดชื่อย่อตารางไว้คนละแบบนะครับ จะได้เข้าใจง่าย
ซึ่งความจริงอาจจะไม่ต้องใส่เลยก็ได้ครับ

หน้า: [1] 2