📄 datamodule.pas
字号:
sysutils.Abort;
end;
if (orderitemstarttime.AsDateTime > maxendtime) and (maxamt=500) then
begin
qryendpass.close;
qryendpass.ParamByName('inid').asinteger := orderiteminid.AsInteger;
qryendpass.ParamByName('type').asinteger := 3;
qryendpass.ExecSQL;
HisErrorprompt('出院通道已过期!');
sysutils.Abort;
end;
qrybedcost.close;
qrybedcost.ParamByName('inid').asinteger := orderiteminid.AsInteger;
qrybedcost.open;
qrycost.close;
qrycost.ParamByName('inid').asinteger := orderiteminid.AsInteger;
qrycost.ParamByName('times').assmallint := orderitemtimes.AsInteger;
qrycost.open;
ordercost.Locate('dosage',orderitemitemid.Value,[]);
if orderitemdosage.AsFloat = 0.0 then orderitemdosage.AsFloat := 1.0;
if ((orderitemprice.AsFloat*orderitemnumb.Value*orderitemdosage.Value/ordercostdosage.Value+qrybedcostfee.Value+qrycostcost.Value)>maxamt)
and (orderitemexcuplace.Value <> 99) then
begin
HisErrorprompt('费用已超过限制。');
sysutils.Abort;
end;
end; //end if
}
if OrderItemConfirm.Value <> 1 then begin //confirm =0
if OrderItemStartTime.IsNull then
OrderItemStartTime.AsDateTime := Now
else
if ( OrderItemConfirm.AsInteger = 0 ) and
(( OrderItemStartTime.AsDateTime <= Now - DM.SStrTimeCnstn/24 )
or ( OrderItemStartTime.AsDateTime > Now + DM.SStrTimeCnstn/24 )) then
begin
HisErrorprompt(PChar('不能输入' + InttoStr(DM.SStrTimeCnstn) + '小时前的日期时间!'));
SysUtils.Abort;
end;
if ( OrderItemKindId.IsNull ) then
begin
HisErrorPrompt('配号不能为空!');
SysUtils.Abort;
end;
if ( OrderItemItemId.IsNull ) or
( Trim(OrderItemItemId.AsString) = '' ) then
begin
HisErrorPrompt('项目号不能为空!');
SysUtils.Abort;
end;
if ( OrderItemUsageId.IsNull ) or
( Trim(OrderItemUsageId.AsString) = '' ) then
begin
HisErrorPrompt('用法不能为空值!');
SysUtils.Abort;
end;
if ( OrderItemUseTimes.IsNull or (OrderItemUseTimes.AsInteger = 0)) then
begin
HisErrorPrompt('次数不能为空!');
SysUtils.Abort;
end;
if ( OrderItemExcuPlace.IsNull ) then
begin
HisErrorPrompt('执行地点不能为空!');
SysUtils.Abort;
end;
if (OrderItemExcuplace.Value = 1) and (OrderItemDosage.IsNull) then
begin
HisErrorPrompt('执行地点为中心药房的医嘱用量不能为空!!');
SysUtils.Abort;
end;
if ( OrderItemOpenDoc.IsNull ) or
( Trim(OrderItemOpenDoc.Value) = '') then
begin
HisErrorPrompt('开立医生工号不能为空!');
SysUtils.Abort;
end;
with qryCheckKindID do
begin
Active := False;
ParamByName('inid').Asinteger := orderitemInid.Value;
ParamByName('times').AsSmallint := orderitemTimes.Value;
ParamByName('orderkind').AsSmallint := orderitemOrderkind.Value;
ParamByName('kindid').AsSmallInt := orderitemKindid.Value;
Active := True;
end;
if dm.qrycheckkindidusageid.AsString = '' then
else if (orderitemSerialid.asString<>dm.QRYCHECKKINDIDSERIALID.AsString)and
((orderitemusageid.AsString <> dm.qrycheckkindidusageid.AsString) or
(orderitemusetimes.Value <> dm.qrycheckkindidusetimes.Value)) then
begin
HisErrorPrompt('同一配号用法,次数必须相同!');
qrycheckkindid.Active := False;
SysUtils.Abort;
end;
qrycheckkindid.Active := False;
if (DM.OrderitemExcuplace.AsInteger = 1) AND (LackFlag = 1) then
begin
HisErrorPrompt('中心药房暂无该药!');
SysUtils.Abort;
end;
if (FExcost = 1) then
begin
if OrderItemExcuplace.AsInteger <> 99 then
begin
HisErrorPrompt('贵重药品的之执行地点应为自备(99)');
SysUtils.Abort;
end;
HisWarningPrompt('此医嘱项目为贵重药品,需要到住院部记帐!');
end;
if (FIsDanger = 1) then
begin
if OrderItemExcuplace.AsInteger <> 99 then
begin
HisErrorPrompt('麻毒药品的之执行地点应为自备(99)');
SysUtils.Abort;
end;
HisWarningPrompt('此医嘱项目为麻毒药品,需要到住院部记帐!');
end;
if (FIsPayBill = 1) then
begin
hisWarningPrompt('该项目应该到执行科室划价,然后到住院部记帐!');
if OrderItemExcuplace.AsInteger <> 99 then
begin
HisErrorPrompt('该项目的执行地点应为自备(99)');
SysUtils.Abort;
end;
end;
tmpDosage := qryOrderCost.Lookup(
'costid', OrderItemItemId.AsString, 'basedose' );
if not VarIsEmpty(tmpDosage) and ( tmpDosage <> 0 ) and
( OrderItemDosage.AsFloat / tmpDosage >= 10 ) then
begin
if Application.MessageBox('注意:超常用量10倍!是否继续?','警告',
MB_ICONWARNING+MB_YESNO+MB_DEFBUTTON2) <> IDYES then
SysUtils.Abort;
end;
if not VarIsEmpty(tmpDosage) and ( tmpDosage <> 0 ) and
( OrderItemDosage.AsFloat / tmpDosage >= 100 ) then
begin
Hiserrorprompt('警告!!!超常用量100倍!!!!!');
sysutils.Abort;
end;
//标准化开始时间
spSdtime.Active := false;
spSdtime.Params[0].asdatetime := orderitemstarttime.AsDateTime;
spSdtime.ExecProc;
orderitemstdstatime.AsDateTime := spsdtime.Params[1].AsDateTime;
OrderItemPayTime.AsDateTime := spsdtime.Params[1].AsDateTime;
if not OrderItemEndTime.IsNull then
OrderItemEndTime.Clear;
//在提交前停止时间非空,断定用户要进行停止医嘱操作,
//此时,询问用户“是否停止当前医嘱?”,
//是:提交医嘱并执行停止医嘱
//否:不提交
end // end confirm <>1
else begin //confirm=1
if (not OrderItemEndTime.IsNull) then
if (OrderItemEndTime.AsDateTime <= Now - DM.SEndTimeCnstn/24 ) or
(OrderItemEndTime.AsDateTime > Now + DM.SEndTimeCnstn/24 ) then
begin
HisErrorprompt(PChar('不能输入' + InttoStr(DM.SEndTimeCnstn) +'小时前、后的停止时间!'));
SysUtils.Abort;
end
else if (OrderItemEndtime.AsDateTime < OrderItemStartTime.AsDateTime) then
begin
HisErrorprompt('停医嘱时间不能早于开医嘱时间!');
SysUtils.Abort;
end
else
if HisIsYesQuery('注意:这是不可恢复的操作!'#13#10#13#10+
'永久停止当前医嘱吗?') then
begin
spSdtime.Active := false;
spSdtime.Params[0].AsDateTime := OrderItemEndtime.AsDateTime;
spSdtime.ExecProc;
OrderitemStdEndTime.AsDateTime := spsdtime.Params[1].AsDateTime;
if (DM.SIsStopConfirm = 1 ) then
begin
OrderItemStopType.Value := - 1;
OrderItemHandle.Value := DM.currOperatorno;
end;
end else
SysUtils.Abort;
end;
if (OrderItemDosage.AsFloat = 0.0) and (OrderItemOrderKind.Value = 1) then
OrderItemDosage.AsFloat := 1.0;
end;
procedure TDM.OrderItemAfterPost(DataSet: TDataSet);
begin
if OrderItemConfirm.AsInteger <> 1 then
begin
FStartTime := OrderitemStartTime.AsDateTime; //记下上次输入的开始时间
FKindId := OrderItemKindid.AsInteger; //记下上次输入的配号
FUsageId := OrderItemUsageId.AsString; //记下上次输入的用法
FUsageName := OrderItemUsagename.AsString; //记下上次输入的用法名称
FUseTimes := OrderItemUseTimes.AsInteger; //记下上次输入的次数
FUseTimesName:= OrderItemUseTimesName.AsString;//记下上次输入的次数名称
FOpenDoc := OrderItemOpenDoc.AsString; //记下上次输入的医生工号
OrderItem.Refresh; //为了解决重影和马上修改新录医嘱的bug,
//如果找到可替代的方法应该把这句删掉,以提高录入的效率
end else
{因为医嘱在增加时BeforePost保证停止时间肯定为空
而修改医嘱时,之前停止时间肯定为空,否则BeforeEdit保证不能编辑
提交后停止时间不为空,表示用户正想执行停止医嘱操作}
// when stoptime should be modified before execute it, following
if ( OrderItemConfirm.AsInteger = 1 ) and
( not OrderItemEndtime.IsNull ) and
( DM.SIsStopConfirm = 0) then
//如果停止不需要确认时,马上执行停医嘱过程
begin
try
if ProjHisadt.InTransaction then
ProjHisadt.Commit;
ProjHisadt.StartTransaction;
spStopMulti.Params[0].AsString := OrderItemSerialId.AsString;
spStopMulti.Params[1].AsDateTime := OrderItemEndtime.Value;
spStopMulti.Params[2].AsDateTime := OrderItemStdEndtime.Value;
spStopMulti.Params[3].AsSmallInt := 1;
spStopMulti.Params[4].AsString := DM.currOperatorno;
spStopMulti.ExecProc; //执行停止医嘱
ProjHisadt.Commit;
except
ProjHisadt.Rollback;
HisErrorPrompt('停止当前医嘱有错!');
end;
end;
if ProjHisadt.InTransaction then
ProjHisadt.Commit;
end;
procedure TDM.OrderItemBeforeDelete(DataSet: TDataSet);
begin
{如果医嘱已确认,则不能删除
否则,询问用户是否想删除当前医嘱}
if OrderItemConfirm.AsInteger = 1 then
begin
HisErrorPrompt('确定后的医嘱不能删除!');
SysUtils.Abort;
end
else
if not HisIsYesQuery('是否删除当前医嘱?') then
SysUtils.Abort;
end;
procedure TDM.OrderItemBeforeEdit(DataSet: TDataSet);
var
CanChange : Boolean; //能否修改临时变量
begin
CanChange := False;
//如医嘱未确定,则可随意修改
if OrderItemConfirm.AsInteger = 0 then
CanChange := True
else
//如医嘱已确定,则在停止时间为空的情况下,只能填入停止时间
if (OrderItemConfirm.AsInteger = 1) then
begin
if (EditingField.Name = 'OrderItemENDTIME' ) and
(OrderItemEndTime.IsNull or
(Int(OrderItemMsgTime.Value) = Int(Now) - 1)) then
CanChange := True;
end;
if not CanChange then
begin
frmOrderItem.OrderStatusBar.Panels[2].Text := '确定后的医嘱不能修改!';
SysUtils.Abort;
end;
end;
procedure TDM.qryPatientAtonceCalcFields(DataSet: TDataSet);
begin
if qryPatientAtOnceOrderkind.Value = 0 then
qryPatientAtOnceOrderKindName.Value := '长'
else
qryPatientAtOnceOrderKindName.Value := '临';
end;
procedure TDM.qrySendPatCalcFields(DataSet: TDataSet);
begin
case qrySendPatInState.Value of
1 : qrySendPatStateName.Value := '正在入住';
2 : qrySendPatStateName.Value := '定义出院';
3 : qrySendPatStateName.Value := '结算出院';
else
qrySendPatStateName.Value := '未知';
end;
end;
procedure TDM.qryOtherBillCalcFields(DataSet: TDataSet);
begin
qryOtherBillATM.Value := qryOtherBillQTY.Value
* qryOtherBillI_PRICE.Value;
end;
procedure TDM.qryOtherBillNewRecord(DataSet: TDataSet);
begin
qryOtherBillINSDT.Value := now;
qryOtherBillSerialID.Value := DM.GetSerialID;
qryOtherBillCostDate.Value := DM.FPayBillDate;
qryOtherBillInid.Value := DM.tblPatientSubInid.Value;
qryOtherBillTimes.Value := DM.tblPatientSubTimes.Value;
qryOtherBillSqid.Value := DM.tblPatientSubSqid.Value;
qryOtherBillWardid.Value := DM.currWardid;
qryOtherBillKindid.Value := -1;
qryOtherBillOpno.Value := DM.currOperatorno;
qryOtherBillOrderKind.Value:= 4; //补费用类型
qryOtherBillAcType.Value := 0; //暂定非特诊
qryOtherBillFeeType.Value := '01';
qryOtherBillPay.Value := 0;
qryOtherBillDocID.Value := '0000';
qryOtherBillBedID.Value := DM.qryPatientBedNoBed.Value;
qryOtherBillExdept.Value := DM.tblPatientSubDeptNum.Value;
qryOtherBillDeptNum.Value := DM.tblPatientSubDeptNum.Value;
end;
procedure TDM.qryOtherBillFilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept := ( qryOtherBillCostDate.Value = Trunc(DM.FPayBillDate) );
end;
procedure TDM.qryOtherBillBeforePost(DataSet: TDataSet);
begin
if ( (qryOtherBillCostDate.Value < (Date - DM.SBillDateCnst) ) or
(qryOtherBillCostDate.Value > (Date + DM.SBillDateCnst) ) ) then
begin
HisErrorPrompt(PChar('不能输入' + InttoStr(DM.SBillDateCnst)
+'天前、后的帐单!'));
SysUtils.Abort;
end;
if ( qryOtherBillItemID.IsNull ) or
(Length(Trim(qryOtherBillItemID.Value)) = 0)then
begin
HisErrorPrompt('一定要输入项目代号!!');
SysUtils.Abort;
end;
if ( qryOtherBillQty.IsNull ) then
begin
HisErrorPrompt('一定要输入数量!!');
SysUtils.Abort;
end;
with qrySelOrderCost do
begin
Close;
Params[0].AsString := qryOtherBillItemID.Value;
Open;
if FieldByName('IsPayBill').AsInteger = 1 then
begin
HisErrorPrompt('该项目应该到执行科室划价,然后到住院部记帐!');
SysUtils.Abort;
end;
qryOtherBillPrice.Value := FieldByName('Price').AsFloat;
qryOtherBillIClass.Value := FieldByName('IClass').AsString;
qryOtherBillBClass.Value := FieldByName('BClass').AsString;
qryOtherBillSClass.Value := FieldByName('SClass').AsString;
qryOtherBillSelfPay.Value := FieldByName('SelfPay').AsInteger;
qryOtherBillExprice.Value := FieldByName('Exprice').AsFloat;
Close;
end;
end;
procedure TDM.qryOtherBillBeforeClose(DataSet: TDataSet);
begin
with qryOtherBill do
if Active then
begin
Cancel;
if UpdatesPending then ApplyUpdates;
end;
end;
procedure TDM.qryOtherBillBeforeDelete(DataSet: TDataSet);
begin
if not ( qryOtherBillPNtblDate.IsNull
and (qryOtherBillPay.Value = 0) ) then
begin
HisErrorPrompt('此项目已经打印了一日清单或者已经结算,不能修改!');
SysUtils.Abort;
end;
end;
procedure TDM.tblDtlPatSubCalcFields(DataSet: TDataSet);
var
BirthYear, Year, Month, Day : Word;
begin
if not tblDtlPatSubBirthday.IsNull then
begin
DecodeDate(tblDtlPatSubBirthday.AsDateTime,Birthyear, Month, Day);
DecodeDate(Now, Year, Month, Day);
tblDtlPatSubAge.AsInteger := Year - Birthyear + 1;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -