閆冰洋 李潔 李維鳳
摘 要:本研究利用Excel VBA技術(shù)設(shè)計(jì)門診藥房輔助庫存盤點(diǎn)程序,以期提高門診藥房庫存盤點(diǎn)效率。其間建立了藥品基礎(chǔ)數(shù)據(jù)庫,對(duì)HIS系統(tǒng)導(dǎo)出的原始盤點(diǎn)表、自動(dòng)發(fā)藥機(jī)導(dǎo)出的發(fā)藥機(jī)藥品庫存信息進(jìn)行數(shù)學(xué)運(yùn)算,得到最終的門診藥房庫存盤點(diǎn)表。結(jié)果表明,單次盤點(diǎn)時(shí)間由原來的120min左右降至60min左右,門診藥房輔助庫存盤點(diǎn)程序的應(yīng)用能有效提高庫存盤點(diǎn)效率。
關(guān)鍵詞:門診藥房;ExcelVBA;藥品盤點(diǎn)
中圖分類號(hào):TP311.11文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1003-5168(2020)02-0038-03
Abstract: Excel VBA technology was used to design an outpatient pharmacy-assisted inventory counting program in order to improve the outpatient pharmacy inventory inventory efficiency in this study. In the meantime, a basic medicine database was established, and the original inventory table derived from the HIS system and the medicine inventory information of the dispenser issued by the automatic dispenser were mathematically calculated to obtain the final outpatient pharmacy inventory inventory table. The results show that the single inventory time is reduced from about 120 minutes to about 60 minutes. The application of the outpatient pharmacy-assisted inventory counting program can effectively improve the inventory counting efficiency.
Keywords: outpatient pharmacy;ExcelVBA;drug inventory
門診藥房藥品盤點(diǎn)工作是醫(yī)院資產(chǎn)管理的重要工作,對(duì)藥品經(jīng)濟(jì)管理與質(zhì)量管理有著非常重要的作用[1-2]。隨著門診藥房信息化和自動(dòng)化建設(shè)的深入推進(jìn),近年來,我國各級(jí)醫(yī)院大力引進(jìn)自動(dòng)發(fā)藥機(jī),以提高門診藥房取藥準(zhǔn)確率和速度[3-4],提高患者的就醫(yī)體驗(yàn)。但是,自動(dòng)發(fā)藥機(jī)的引進(jìn)也給門診藥房藥品盤點(diǎn)工作帶來挑戰(zhàn)。例如,自動(dòng)發(fā)藥機(jī)藥品庫存不能與醫(yī)院HIS系統(tǒng)對(duì)接,導(dǎo)致HIS系統(tǒng)導(dǎo)出的藥品庫存信息與貨架實(shí)存信息不一致,嚴(yán)重影響盤點(diǎn)效率。VBA是一種宏語言,結(jié)合微軟辦公軟件很容易將日常工作流程轉(zhuǎn)換為VBA程序代碼,使藥學(xué)工作實(shí)現(xiàn)自動(dòng)化,如利用VBA編制中藥采購軟件[5]、藥庫智能化辦公[6]、開發(fā)藥品配伍禁忌審查表[7]等。
本文將從新鄉(xiāng)市第一人民醫(yī)院門診藥房庫存盤點(diǎn)實(shí)際工作入手,分析目前盤點(diǎn)工作的不足,利用Excel VBA語言設(shè)計(jì)輔助庫存盤點(diǎn)程序,以提高藥品庫存盤點(diǎn)效率,降低藥師的工作強(qiáng)度。
1 資料與方法
1.1 輔助盤點(diǎn)程序的算法構(gòu)建
此輔助盤點(diǎn)程序的整體思路是:以HIS系統(tǒng)導(dǎo)出的原始盤點(diǎn)表、自動(dòng)發(fā)藥機(jī)導(dǎo)出的庫存數(shù)據(jù)為基礎(chǔ),建立藥品基礎(chǔ)信息庫,設(shè)計(jì)輔助盤點(diǎn)程序的算法,導(dǎo)入原始盤點(diǎn)表、自動(dòng)發(fā)藥機(jī)庫存數(shù)據(jù),得到最終的門診藥房貨架實(shí)際庫存盤點(diǎn)表。
1.1.1 原始盤點(diǎn)表。從醫(yī)院HIS系統(tǒng)導(dǎo)出原始盤點(diǎn)表,保存成“.xls”格式。導(dǎo)出的原始盤點(diǎn)表的內(nèi)容格式如表1所示。
1.1.2 建立藥品基礎(chǔ)信息庫。藥品基礎(chǔ)信息庫內(nèi)容包括藥品的貨位、名稱、規(guī)格、單位、取藥順序、上藥類型、單工位最大數(shù)量等信息,數(shù)據(jù)主要來源于醫(yī)院HIS系統(tǒng)。藥品基礎(chǔ)信息庫格式如表2所示。
1.1.3 輔助盤點(diǎn)程序設(shè)計(jì)思路。一是確定藥品唯一性。因庫存藥品存在同名稱、多規(guī)格、多廠家的情況,只檢索藥品名稱無法確定藥品的唯一性,故采用藥典編號(hào)確定藥品的唯一性。二是確定門診藥房庫存盤點(diǎn)表信息。根據(jù)門診藥房庫存盤點(diǎn)實(shí)際情況,導(dǎo)出的庫存盤點(diǎn)表需要包括貨位、藥品名稱、廠家、規(guī)格、數(shù)量、單位等內(nèi)容。導(dǎo)出的庫存盤點(diǎn)表格式如表3所示。三是庫存盤點(diǎn)表排序與排版。為保證庫存盤點(diǎn)有序進(jìn)行,根據(jù)貨架位置進(jìn)行排序,并進(jìn)行排版。
1.2 輔助庫存盤點(diǎn)程序設(shè)計(jì)
輔助庫存盤點(diǎn)程序包括導(dǎo)入原始盤點(diǎn)表、導(dǎo)入自動(dòng)發(fā)藥機(jī)庫存數(shù)據(jù)、處理庫存數(shù)據(jù)等過程。
1.2.1 導(dǎo)入原始盤點(diǎn)表。從HIS系統(tǒng)中導(dǎo)出原始盤點(diǎn)表,導(dǎo)入到門診藥房輔助庫存盤點(diǎn)程序[8-9],保存在數(shù)組arr_yskc中,藥品基礎(chǔ)信息庫數(shù)據(jù)導(dǎo)入到數(shù)組arr_db中。VBA代碼示例如下:
Set wb = Workbooks.Open(sht_db.[Q4].Value)
arr_yskc = wb.Worksheets(1).Range("B5").Resize([A5].End(xlDown).Row - 4, 16)
wb.Close
arr_db = sht_db.[A1].CurrentRegion
ReDim arr_kc(1 To UBound(arr_yskc, 1), 1 To 10)
For i = 1 To UBound(arr_db, 1)
dict_ydhj(arr_db(i, 1)) = arr_db(i, 2)
Next i
'獲取不重復(fù)藥典編號(hào),獲取數(shù)量之外所有信息
For i = 2 To UBound(arr_yskc, 1)
If dict_ydzc.exists(arr_yskc(i, 1)) = False Then
k = k + 1
If dict_ydhj.exists(arr_yskc(i, 1)) Then
arr_kc(k, 1) = dict_ydhj(arr_yskc(i, 1))
Else
arr_kc(k, 1) = ""
End If
arr_kc(k, 2) = arr_yskc(i, 1)
arr_kc(k, 3) = arr_yskc(i, 2)
arr_kc(k, 4) = arr_yskc(i, 3)
arr_kc(k, 5) = arr_yskc(i, 16)
arr_kc(k, 7) = arr_yskc(i, 11)
arr_kc(k, 9) = arr_yskc(i, 14)
End If
'累加藥典編號(hào)對(duì)應(yīng)數(shù)量信息
dict_ydzs(arr_yskc(i, 1)) = dict_ydzs(arr_yskc(i, 1)) + arr_yskc(i, 7)
dict_ydzc(arr_yskc(i, 1)) = dict_ydzc(arr_yskc(i, 1)) + arr_yskc(i, 10)
dict_ydlc(arr_yskc(i, 1)) = dict_ydlc(arr_yskc(i, 1)) + arr_yskc(i, 13)
Next i
For i = 1 To UBound(arr_kc, 1)
If dict_ydzc.exists(arr_kc(i, 2)) Then
arr_kc(i, 6) = dict_ydzc(arr_kc(i, 2))
arr_kc(i, 8) = dict_ydlc(arr_kc(i, 2))
arr_kc(i, 10) = dict_ydcl(arr_kc(i, 2))
End If
Next i
'庫存盤點(diǎn)表賦值
sht_db.[S2].Resize(UBound(arr_yskc, 1), 10) = arr_kc
1.2.2 導(dǎo)入自動(dòng)發(fā)藥機(jī)庫存數(shù)據(jù)。從自動(dòng)發(fā)藥機(jī)中導(dǎo)出發(fā)藥機(jī)藥品庫存數(shù)據(jù),導(dǎo)入到門診藥房輔助庫存盤點(diǎn)程序,保存在數(shù)組arr_fyjkc1中。VBA代碼示例如下:
'獲取發(fā)藥機(jī)庫存
Set wb = Workbooks.Open(sht_db.[Q5].Value)
arr_fyjkc = wb.Worksheets(1).Range("A1").CurrentRegion
wb.Close
ReDim arr_fyjkc1(1 To UBound(arr_fyjkc, 1), 1 To 3)
For i = 1 To UBound(arr_fyjkc, 1)
arr_fyjkc1(i, 1) = arr_fyjkc(i, 2)
arr_fyjkc1(i, 2) = arr_fyjkc(i, 7)
arr_fyjkc1(i, 3) = arr_fyjkc(i, 9)
Next i
sht_db.[AD1].Resize(UBound(arr_fyjkc, 1), 3) = arr_fyjkc1
1.2.3 處理庫存數(shù)據(jù)。根據(jù)導(dǎo)入的HIS系統(tǒng)原始盤點(diǎn)表、發(fā)藥機(jī)庫存藥品信息等數(shù)據(jù),對(duì)所有品種的藥品數(shù)量信息自動(dòng)進(jìn)行加減運(yùn)算,得到最終的門診藥房貨架實(shí)存數(shù)據(jù),保存在數(shù)組arr_kc中,然后導(dǎo)出到Excel表中。VBA代碼示例如下:
'處理庫存數(shù)據(jù)
arr_kc = sht_db.[S1].CurrentRegion
arr_fyjkc = sht_db.[AD1].CurrentRegion
arr_jtsj = sht_db.[AH1].CurrentRegion
For i = 2 To UBound(arr_fyjkc, 1)
dict_ydkc(arr_fyjkc(i, 1) &"/"&"zcfyj") = arr_fyjkc(i, 2)
Next i
ReDim Preserve arr_kc(1 To UBound(arr_kc, 1), 1 To 13)
For i = 1 To 4
arr_kc(1, i + 9) = arr_kc(1, i + 5)
Next i
For i = 2 To UBound(arr_kc, 1)
If dict_ydkc.exists(arr_kc(i, 2) &"/"&"zcfyj") = False Then
dict_ydkc(arr_kc(i, 2) &"/"&"zcfyj") = 0
End If
arr_kc(i, 6) = arr_kc(i, 6) - dict_ydkc(arr_kc(i, 2) &"/"&"zcfyj")
arr_kc(i, 10) = ""
arr_kc(i, 11) = arr_kc(i, 7)
arr_kc(i, 12) = ""
arr_kc(i, 13) = arr_kc(i, 9)
Next i
Set dict_ydkc = Nothing
sht1.[A1].Resize(UBound(arr_kc, 1), 13) = arr_kc
2 結(jié)果
使用門診藥房輔助盤點(diǎn)程序之前,原始盤點(diǎn)表上同一藥品存在好幾個(gè)條目,需要二次查詢自動(dòng)發(fā)藥機(jī)單品種藥品庫存,貨架藥品盤點(diǎn)后需要進(jìn)行大量的數(shù)學(xué)運(yùn)算,嚴(yán)重影響盤點(diǎn)效率。而使用門診藥房輔助庫存盤點(diǎn)程序,人們可以直接得到門診貨架實(shí)存藥品數(shù)量,單次盤點(diǎn)時(shí)間由原來的120 min左右降至60 min左右,提高了藥師的工作效率。
3 結(jié)論
獲取庫存數(shù)據(jù)時(shí),該程序以導(dǎo)出數(shù)據(jù)的方式保存在本地計(jì)算機(jī)上,操作不便,若能直接獲取HIS系統(tǒng)和自動(dòng)發(fā)藥機(jī)藥品庫存信息,會(huì)增加操作的便捷性??傮w來說,該門診藥房輔助庫存盤點(diǎn)程序的使用,讓藥師有更多的時(shí)間為患者提供用藥服務(wù),提高了藥師的專業(yè)技術(shù)價(jià)值,同時(shí)也為提高自動(dòng)化藥房庫存盤點(diǎn)效率提供了新思路。
參考文獻(xiàn):
[1]唐哲,韋韡,西娜.我院加強(qiáng)藥品盤點(diǎn)監(jiān)管的探討[J].中國藥房,2016(10):1378-1380.
[2]袁忠偉.提高醫(yī)院藥品盤點(diǎn)賬物相符率的經(jīng)驗(yàn)淺談[J].中國執(zhí)業(yè)藥師,2015(4):51-53.
[3]謝明華,葛敏,彭佳蓓,等.自動(dòng)化發(fā)藥系統(tǒng)在我院門診藥房的應(yīng)用實(shí)踐與體會(huì)[J].中國藥房,2014(41):3889-3891.
[4]孫家艷,朱靜.韋樂海茨發(fā)藥機(jī)在本院門診藥房應(yīng)用的實(shí)踐與體會(huì)[J].北方藥學(xué),2015(11):125-126.
[5]林永進(jìn).采用VBA編制中藥采購軟件[D].濟(jì)南:山東大學(xué),2016.
[6]金朝輝,顧錦建,鄭明琳,等.VBA語言在我院藥庫智能化辦公中的應(yīng)用[J].中國藥房,2016(7):987-989.
[7]王柯靜,楊波,周遠(yuǎn)大,等.基于Excel的藥品配伍禁忌審查表的開發(fā)[J].中國藥房,2013(17):1625-1626.
[8]Excle Home.Excel VBA經(jīng)典代碼應(yīng)用大全[M].北京:北京大學(xué)出版社,2019.
[9]Excle Home論壇.常見字典用法集錦及代碼詳解[EB/OL].(2019-10-01)[2019-12-18].http://club.excelhome.net/forum.php?mod=viewthread&tid=868892.