閆冰洋 李潔 李維鳳
摘 要:本研究利用Excel VBA技術設計門診藥房輔助庫存盤點程序,以期提高門診藥房庫存盤點效率。其間建立了藥品基礎數(shù)據庫,對HIS系統(tǒng)導出的原始盤點表、自動發(fā)藥機導出的發(fā)藥機藥品庫存信息進行數(shù)學運算,得到最終的門診藥房庫存盤點表。結果表明,單次盤點時間由原來的120min左右降至60min左右,門診藥房輔助庫存盤點程序的應用能有效提高庫存盤點效率。
關鍵詞:門診藥房;ExcelVBA;藥品盤點
中圖分類號:TP311.11文獻標識碼:A文章編號: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
門診藥房藥品盤點工作是醫(yī)院資產管理的重要工作,對藥品經濟管理與質量管理有著非常重要的作用[1-2]。隨著門診藥房信息化和自動化建設的深入推進,近年來,我國各級醫(yī)院大力引進自動發(fā)藥機,以提高門診藥房取藥準確率和速度[3-4],提高患者的就醫(yī)體驗。但是,自動發(fā)藥機的引進也給門診藥房藥品盤點工作帶來挑戰(zhàn)。例如,自動發(fā)藥機藥品庫存不能與醫(yī)院HIS系統(tǒng)對接,導致HIS系統(tǒng)導出的藥品庫存信息與貨架實存信息不一致,嚴重影響盤點效率。VBA是一種宏語言,結合微軟辦公軟件很容易將日常工作流程轉換為VBA程序代碼,使藥學工作實現(xiàn)自動化,如利用VBA編制中藥采購軟件[5]、藥庫智能化辦公[6]、開發(fā)藥品配伍禁忌審查表[7]等。
本文將從新鄉(xiāng)市第一人民醫(yī)院門診藥房庫存盤點實際工作入手,分析目前盤點工作的不足,利用Excel VBA語言設計輔助庫存盤點程序,以提高藥品庫存盤點效率,降低藥師的工作強度。
1 資料與方法
1.1 輔助盤點程序的算法構建
此輔助盤點程序的整體思路是:以HIS系統(tǒng)導出的原始盤點表、自動發(fā)藥機導出的庫存數(shù)據為基礎,建立藥品基礎信息庫,設計輔助盤點程序的算法,導入原始盤點表、自動發(fā)藥機庫存數(shù)據,得到最終的門診藥房貨架實際庫存盤點表。
1.1.1 原始盤點表。從醫(yī)院HIS系統(tǒng)導出原始盤點表,保存成“.xls”格式。導出的原始盤點表的內容格式如表1所示。
1.1.2 建立藥品基礎信息庫。藥品基礎信息庫內容包括藥品的貨位、名稱、規(guī)格、單位、取藥順序、上藥類型、單工位最大數(shù)量等信息,數(shù)據主要來源于醫(yī)院HIS系統(tǒng)。藥品基礎信息庫格式如表2所示。
1.1.3 輔助盤點程序設計思路。一是確定藥品唯一性。因庫存藥品存在同名稱、多規(guī)格、多廠家的情況,只檢索藥品名稱無法確定藥品的唯一性,故采用藥典編號確定藥品的唯一性。二是確定門診藥房庫存盤點表信息。根據門診藥房庫存盤點實際情況,導出的庫存盤點表需要包括貨位、藥品名稱、廠家、規(guī)格、數(shù)量、單位等內容。導出的庫存盤點表格式如表3所示。三是庫存盤點表排序與排版。為保證庫存盤點有序進行,根據貨架位置進行排序,并進行排版。
1.2 輔助庫存盤點程序設計
輔助庫存盤點程序包括導入原始盤點表、導入自動發(fā)藥機庫存數(shù)據、處理庫存數(shù)據等過程。
1.2.1 導入原始盤點表。從HIS系統(tǒng)中導出原始盤點表,導入到門診藥房輔助庫存盤點程序[8-9],保存在數(shù)組arr_yskc中,藥品基礎信息庫數(shù)據導入到數(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
'獲取不重復藥典編號,獲取數(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
'累加藥典編號對應數(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
'庫存盤點表賦值
sht_db.[S2].Resize(UBound(arr_yskc, 1), 10) = arr_kc
1.2.2 導入自動發(fā)藥機庫存數(shù)據。從自動發(fā)藥機中導出發(fā)藥機藥品庫存數(shù)據,導入到門診藥房輔助庫存盤點程序,保存在數(shù)組arr_fyjkc1中。VBA代碼示例如下:
'獲取發(fā)藥機庫存
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ù)據。根據導入的HIS系統(tǒng)原始盤點表、發(fā)藥機庫存藥品信息等數(shù)據,對所有品種的藥品數(shù)量信息自動進行加減運算,得到最終的門診藥房貨架實存數(shù)據,保存在數(shù)組arr_kc中,然后導出到Excel表中。VBA代碼示例如下:
'處理庫存數(shù)據
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 結果
使用門診藥房輔助盤點程序之前,原始盤點表上同一藥品存在好幾個條目,需要二次查詢自動發(fā)藥機單品種藥品庫存,貨架藥品盤點后需要進行大量的數(shù)學運算,嚴重影響盤點效率。而使用門診藥房輔助庫存盤點程序,人們可以直接得到門診貨架實存藥品數(shù)量,單次盤點時間由原來的120 min左右降至60 min左右,提高了藥師的工作效率。
3 結論
獲取庫存數(shù)據時,該程序以導出數(shù)據的方式保存在本地計算機上,操作不便,若能直接獲取HIS系統(tǒng)和自動發(fā)藥機藥品庫存信息,會增加操作的便捷性??傮w來說,該門診藥房輔助庫存盤點程序的使用,讓藥師有更多的時間為患者提供用藥服務,提高了藥師的專業(yè)技術價值,同時也為提高自動化藥房庫存盤點效率提供了新思路。
參考文獻:
[1]唐哲,韋韡,西娜.我院加強藥品盤點監(jiān)管的探討[J].中國藥房,2016(10):1378-1380.
[2]袁忠偉.提高醫(yī)院藥品盤點賬物相符率的經驗淺談[J].中國執(zhí)業(yè)藥師,2015(4):51-53.
[3]謝明華,葛敏,彭佳蓓,等.自動化發(fā)藥系統(tǒng)在我院門診藥房的應用實踐與體會[J].中國藥房,2014(41):3889-3891.
[4]孫家艷,朱靜.韋樂海茨發(fā)藥機在本院門診藥房應用的實踐與體會[J].北方藥學,2015(11):125-126.
[5]林永進.采用VBA編制中藥采購軟件[D].濟南:山東大學,2016.
[6]金朝輝,顧錦建,鄭明琳,等.VBA語言在我院藥庫智能化辦公中的應用[J].中國藥房,2016(7):987-989.
[7]王柯靜,楊波,周遠大,等.基于Excel的藥品配伍禁忌審查表的開發(fā)[J].中國藥房,2013(17):1625-1626.
[8]Excle Home.Excel VBA經典代碼應用大全[M].北京:北京大學出版社,2019.
[9]Excle Home論壇.常見字典用法集錦及代碼詳解[EB/OL].(2019-10-01)[2019-12-18].http://club.excelhome.net/forum.php?mod=viewthread&tid=868892.