📄 datamodule.pas
字号:
procedure qryInWardCalcFields(DataSet: TDataSet);
procedure OrderItemITEMIDChange(Sender: TField);
procedure OrderItemFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
procedure OrderItemBeforePost(DataSet: TDataSet);
procedure OrderItemAfterPost(DataSet: TDataSet);
procedure OrderItemBeforeDelete(DataSet: TDataSet);
procedure OrderItemBeforeEdit(DataSet: TDataSet);
procedure qryPatientAtonceCalcFields(DataSet: TDataSet);
procedure qrySendPatCalcFields(DataSet: TDataSet);
procedure qryOtherBillCalcFields(DataSet: TDataSet);
procedure qryOtherBillNewRecord(DataSet: TDataSet);
procedure qryOtherBillFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
procedure qryOtherBillBeforePost(DataSet: TDataSet);
procedure qryOtherBillBeforeClose(DataSet: TDataSet);
procedure qryOtherBillBeforeDelete(DataSet: TDataSet);
procedure tblDtlPatSubCalcFields(DataSet: TDataSet);
private
{ Private declarations }
public
//全局变量
isNurse : Boolean; //是否护士操作权限
isInCharge : Boolean; //是否护长操作权限
isSysAdm : Boolean; //是否系统管理员操作权限
isChecked : Boolean; //是否一检查过身份
currWardid : string; //当前病区号
currWardName : String; //当前病区名称
currBedNo : String;
currOperatorno : String;
currOperatorName : String;
csRoomfeeClass,
csOtherFeeClass : String;
//以下是医嘱录入使用的暂时变量
LackFlag : SmallInt; //缺药标志
IsLongOrder : Boolean; //是否新增长期医嘱
IsViewPart : Boolean; //是否查看部分医嘱
FKindID : Smallint; //当前配号
FStartTime : TDateTime; //记下上次输入的开始时间
FUsageId : String;
FUsagename : String;
FUseTimes: Integer;
FUseTimesName: String;
FIsPayBill :SmallInt; // 是否需要记账
FExcost :SmallInt; // 是否贵重药品
FIsDanger :SmallInt; // 是否麻毒药品
FOpenDoc :string; //记下上次输入的开医嘱医生
OrderItemFilterNo : Integer; //医嘱过滤状态字
EditingField : TField; //当前选中的医嘱字段
FPayBillDate : TDate;
itemid : String;
LScount : Integer;
modiopno : string;
workdate : TDate;
monthdate1 : TDate;
monthdate2 : TDate;
maxendtime : tdatetime;
maxamt : double;
//系统参数
SUserName :string; //用户名称
SStartPoint :TTime; //费用起始时间
SStrTimeCnstn :Integer; //医嘱开始时间的录入限制
SEndTimeCnstn :Integer; //医嘱停止时间的录入限制
SIsAutoAddIvdrip :Integer; //是否自动添加滴注附加项目
SSendStrTime :TTime; //指示发药起始时间
SSendEndTime :TTime; //指示发药截止时间
SSendMaxSnap :Integer; //指示发送的最大间距
SBillDateCnst :Integer; //帐单日期录入时间限制
SIsCalcHl :Integer; //最后一天护理费是否计算
SRecallCnstn :Integer; //医嘱召回时间限制
SEMStrTime :TTime; //紧急发送起始时间
SEMEndTime :TTime; //紧急发送截至时间
SIsStopConfirm :Integer; //停医嘱是否确认
SCanModiExorder:Integer; //是否可以修改附加项目
//运行环境参数
RIsAutoStopOrder :Integer; //转科是否自动停止医嘱
procedure SetSystemTime; //计算机日期时间
procedure DownLoadData; //下载基本数据
procedure ReadRunParams; //装载运行环境参数
procedure LoadSysParams; //装载系统参数
function GetSerialID() :string; //获得唯一标识
end;
var
DM: TDM;
implementation
uses HisUtilitis, OrderItem, PRNDataModule;
{$R *.DFM}
procedure TDM.DataModuleCreate(Sender: TObject);
begin
IsNurse := False; //是否护士操作权限
IsInCharge := False; //是否护长操作权限
IsSysAdm := False; //是否系统管理员操作权限
IsChecked := False;
currWardid := ''; //当前病区号
currWardName := ''; //当前病区名称
currBedNo := '';
currOperatorno := '';
currOperatorName := '';
IsLongOrder := True; //缺省是选择长嘱
csRoomFeeClass := '01';
csOtherFeeClass := '08';
RIsAutoStopOrder := 1;
end;
procedure TDM.SetSystemTime;
var
SystemTime : TSystemTime;
begin
with DM.spServerTime do
begin
Execproc;
DateTimeToSystemTime(
DM.spServerTime.Params[0].AsDateTime, SystemTime);
SetLocalTime(SystemTime);
Close;
end;
end;
procedure TDM.DownLoadData; //下载基本数据
begin
Screen.Cursor := crHourGlass;
OrderCost.Close;
Frequency.Close;
Usage.Close;
Doctor.Close;
ExcutePos.Close;
tblWard.Close;
Dept.Close;
bmOrderCost.Execute;
OrderCost.AddIndex('PK_ORDERCOST' ,'COSTID' ,[ixPrimary]);
bmFrequency.Execute;
bmUsage.Execute;
bmDoctor.Execute;
bmExcutePos.Execute;
bmWard.Execute;
bmDept.Execute;
Screen.Cursor := crDefault;
end;
function TDM.GetSerialID() :string;
begin
with DM do
begin
qryGetSerialID.Active := False;
qryGetSerialID.Active := True;
Result := qryGetSerialID.Fields[0].AsString;
qryGetSerialID.Active := False;
end;
end;
procedure TDM.ReadRunParams; //下载基本数据
var
b_iniFile : TIniFile ;
begin
b_IniFile := TIniFile.Create('His2001.ini') ;
RIsAutoStopOrder := b_IniFile.ReadInteger('CHGOPTION', 'ISAUTOSTOPORDER', 2);
if ( RIsAutoStopOrder = 2 ) then
b_iniFile.WriteInteger('CHGOPTION', 'ISAUTOSTOPORDER', 1 );
b_inifile.Free ;
end ;
procedure TDM.LoadSysParams; //装载系统参数
begin
with DM.tblFixedcode do
begin
if Not Active then Open;
if Locate('ParamID' ,1 ,[]) then
DM.SUserName := Trim(FieldByName('ParamValue').AsString)
else
DM.SUserName := '样板医院';
if Locate('ParamID' ,2 ,[]) then
DM.SStartPoint := StrtoTime(Trim(FieldByName('ParamEname').AsString))
else
DM.SStartPoint := StrtoTime('12:00:00');
if Locate('ParamID' ,9000 ,[]) then
DM.SStrTimeCnstn := StrToInt(Trim(FieldByName('ParamValue').AsString))
else
DM.SStrTimeCnstn := 24;
if Locate('ParamID' ,9001 ,[]) then
DM.SEndTimeCnstn := StrToInt(Trim(FieldByName('ParamValue').AsString))
else
DM.SEndTimeCnstn := 24;
if Locate('ParamID' ,9002 ,[]) then
DM.SIsAutoAddIvdrip :=
StrToInt(Trim(FieldByName('ParamValue').AsString))
else
DM.SIsAutoAddIvdrip := 1;
if Locate('ParamID' ,9004 ,[]) then
DM.SSendStrTime :=
StrToTime(Trim(FieldByName('ParamValue').AsString))
else
DM.SSendStrTime := StrtoTime('9:00:00');
if Locate('ParamID' ,9005 ,[]) then
DM.SSendEndTime :=
StrToTime(Trim(FieldByName('ParamValue').AsString))
else
DM.SSendEndTime := StrtoTime('18:00:00');;
if Locate('ParamID' ,9006 ,[]) then
DM.SSendMaxSnap :=
StrToInt(Trim(FieldByName('ParamValue').AsString))
else
DM.SSendMaxSnap := 1;
if Locate('ParamID' ,9007 ,[]) then
DM.SBillDateCnst :=
StrToInt(Trim(FieldByName('ParamValue').AsString))
else
DM.SBillDateCnst := 2;
if Locate('ParamID' ,9008 ,[]) then
DM.SIsCalcHl :=
StrToInt(Trim(FieldByName('ParamValue').AsString))
else
DM.SIsCalcHl := 0;
if Locate('ParamID' ,9009 ,[]) then
DM.SRecallCnstn :=
StrToInt(Trim(FieldByName('ParamValue').AsString))
else
DM.SRecallCnstn := 24;
if Locate('ParamID' ,9010 ,[]) then
DM.SEMStrTime :=
StrToTime(Trim(FieldByName('ParamValue').AsString))
else
DM.SEMStrTime := StrtoTime('18:30:00');
if Locate('ParamID' ,9011 ,[]) then
DM.SEMEndTime :=
StrToTime(Trim(FieldByName('ParamValue').AsString))
else
DM.SEMEndTime := StrtoTime('7:00:00');
if Locate('ParamID' ,9012 ,[]) then
DM.SIsStopConfirm :=
StrToInt(Trim(FieldByName('ParamValue').AsString))
else
DM.SIsStopConfirm := 0;
if Locate('ParamID' ,9013 ,[]) then
DM.SCanModiExorder :=
StrToInt(Trim(FieldByName('ParamValue').AsString))
else
DM.SCanModiExorder := 1;
Close;
end;
end;
procedure TDM.tblPatientSubCalcFields(DataSet: TDataSet);
var
BirthYear, Year, Month, Day : Word;
begin
if not tblPatientSubBirthday.IsNull then
begin
DecodeDate(tblPatientSubBirthday.AsDateTime,Birthyear, Month, Day);
DecodeDate(Now, Year, Month, Day);
tblPatientSubAge.AsInteger := Year - Birthyear + 1;
end;
end;
procedure TDM.OrderItemNewRecord(DataSet: TDataSet);
begin
{
if (maxamt<>0) and (orderitemorderkind.asinteger = 0) and (maxamt<>500) then
begin
Hiserrorprompt('病人费用不够,不能录入长嘱!');
sysutils.Abort;
end;
}
OrderItemSERIALID.AsString := DM.GetSerialID();
OrderItemDeptNum.Value := qryPatientBedNoDeptNum.Value;
OrderItemInid.AsInteger := qryPatientBedNoInid.AsInteger; //住院号
if IsLongOrder then //当前是否输入长嘱
OrderItemOrderKind.AsInteger := 0 //输入长嘱
else
OrderItemOrderKind.AsInteger := 1; //输入临嘱
OrderItemWardId.AsString := currWardId; //病区号
OrderItemBedId.AsString := qryPatientBedNoBed.AsString; //病床
//记下上次输入的开始时间
if trunc( FStartTime) = 0 then
OrderItemStartTime.AsDateTime := Now
else
OrderItemStartTime.AsDateTime := FStartTime;
//住院号
OrderItemInid.AsInteger := tblPatientSubInid.AsInteger;
//住院次数
OrderItemTimes.AsInteger := tblPatientSubTimes.AsInteger;
//病人序号
OrderItemSQID.AsInteger := tblPatientSubSQID.AsInteger;
OrderItemKindID.AsInteger := FKindID; //配号
OrderItemOpenDoc.AsString := FOpenDoc; //开医嘱医生
OrderItemOperator.AsString := currOperatorNo; //操作员
OrderItemConfirm.AsInteger := 0; //确认
OrderItemAtOnce.AsInteger := 0; //立即发药
//是否指示发药缺省为0,表示未指示发药
OrderItemSendMsg.AsInteger := 0;
//医嘱停止类型:0为永久,1为临时
OrderItemStopType.AsInteger := 0;
//医嘱实发药次数
OrderItemInActual.AsInteger := 0;
//赋值显示顺序号
OrderItemDisplayId.AsDateTime := Now;
end;
procedure TDM.qryInWardCalcFields(DataSet: TDataSet);
var
BirthYear, Year, Month, Day : Word;
begin
if not qryInWardBirthday.IsNull then
begin
DecodeDate(qryInWardBirthday.AsDateTime,Birthyear, Month, Day);
DecodeDate(Now, Year, Month, Day);
qryInWardAge.AsInteger := Year - Birthyear + 1;
end;
end;
procedure TDM.OrderItemITEMIDChange(Sender: TField);
begin
qrySelOrderCost.Close;
qrySelOrderCost.Params[0].AsString := OrderItemItemId.AsString;
qrySelOrderCost.Open;
OrderItemItemName.AsString := qrySelOrderCost.Fields[0].AsString;
OrderItemDoseunit.AsString := qrySelOrderCost.Fields[1].AsString;
if OrderItemKindID.Value = FKindID then
begin
Orderitemusageid.AsString := FUsageID;
Orderitemusetimes.Value := FUseTimes;
end;
if OrderItemUsageId.IsNull then
begin
OrderItemUsageid.AsString := qrySelOrderCost.Fields[2].AsString;
OrderItemUseTimes.AsInteger := qrySelOrderCost.Fields[3].AsInteger;
end;
OrderItemExcuPlace.AsInteger := qrySelOrderCost.Fields[4].AsInteger;
LackFlag := qrySelOrderCost.Fields[5].AsInteger;
FIsPayBill := qrySelOrderCost.Fields[6].AsInteger;
FExcost := qrySelOrderCost.Fields[7].AsInteger;
FIsDanger := qrySelOrderCost.Fields[14].AsInteger;
qrySelOrderCost.Active := False;
end;
procedure TDM.OrderItemFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
case OrderItemFilterNo of
{选有效长嘱,医嘱类型为0,停止时间为今天或将来或为空}
0 : begin
Accept := (OrderItemOrderKind.AsInteger = 0)
and ( OrderItemEndTime.IsNull
or ( OrderItemEndTime.AsDateTime > Now - 1 )
)
and (OrderItemWardid.Value = tblPatientSubWardid.Value);
end;
{选所有长嘱,医嘱类型为0}
1 : begin
Accept := (OrderItemOrderKind.AsInteger = 0)
and (OrderItemWardid.Value = tblPatientSubWardid.Value) ;
end;
{选有效临嘱,医嘱类型为1,开始时间为今天或将来}
2 : begin
Accept := ( OrderItemOrderKind.AsInteger = 1 ) and
( OrderItemStartTime.AsDateTime > Now - 1 ) and
( OrderItemWardid.Value = tblPatientSubWardid.Value );
end;
{选所有临嘱,医嘱类型为1}
3 : begin
Accept := ( OrderItemOrderKind.AsInteger = 1 ) and
( OrderItemWardid.Value = tblPatientSubWardid.Value ) ;
end;
{不符合以上条件的过滤不接受}
else
Accept := False;
end;
end;
procedure TDM.OrderItemBeforePost(DataSet: TDataSet);
var
tmpDosage : Variant; //基本用量
begin
{ if maxamt<>0 then
begin
if (orderitemstarttime.AsDateTime > maxendtime) and (maxamt=3000) then
begin
qryendpass.close;
qryendpass.ParamByName('inid').asinteger := orderiteminid.AsInteger;
qryendpass.ParamByName('type').asinteger := 2;
qryendpass.ExecSQL;
Hiserrorprompt('急救通道已过期,请与收费处联系!');
sysutils.Abort;
end;
if (orderitemstarttime.AsDateTime > maxendtime) and (maxamt=100) then
begin
HisErrorprompt('基本医疗通道已过期,请与收费处联系!');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -