⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datamodule.pas

📁 某大型医院护士站
💻 PAS
📖 第 1 页 / 共 3 页
字号:
      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 + -