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

📄 open.pas

📁 计量功能 事件记录 购电提醒 欠费报警 负荷控制 自检功能 显示功能 用户插卡错误信息显示
💻 PAS
📖 第 1 页 / 共 3 页
字号:
        if (ReadCK.ECK<>ForBuyCard) and (ReadCK.ECK<>BuyCard) and
           (ReadCK.ECK<>PatchForBuyCard) and (ReadCK.ECK<>PatchBuyCard)
          then begin
           wFunShowError('卡型错误,无法申购!',[mbOK]); goto TOBuyReadError;
          end;
        if ReadCD.Buy.iECurBuy<>0 then begin
           wFunShowError('上次申购量未读入卡表,无法再次申购!',[mbOK]);
           goto TOBuyReadError;
          end;
        CustRW.iCustNo:=ReadCD.iCustNo;
        if not bFunGetCustDBData(CustRW) then begin
           wFunShowError('数据库无此卡记录!',[mbOK]); goto TOBuyReadError;
          end;
        if not bFunCmpCustDB_CardData(CustRW,ReadCD,ReadCK) then begin
           wFunShowError('卡内数据不正常!'+#13+#13+
               '请核对用户申购记录和卡内数据!',[mbOK]); goto TOBuyReadError;
          end;
        TOBuyReadOK:
           bCanWrite:=True;
           PrdFrmOpenIni(Sender); Exit;
        TOBuyReadError:  Exit;
        end;{end of False}
      True:begin {bCanWrite=True 再写卡}
        iKeepESum:=CustRW.EM.iESum;
        iKeepTotalNum:=CustRW.EM.iTotalNum;
        ReadCD:=CustRW;
        if not bFunGetInputRec(Sender) then begin
           CustRW:=ReadCD; Exit;
         end;
        with DCOMOpen do begin
          with CustRW.Buy do begin //写申购记录
            Connected:=True;
            aCntRslt[1]:=AppServer.btFunAddBuyRecord(CustRW.iCustNo,
                         iBuyNum,dtBuyDate,iECurBuy,iEPriceKind,fEPrice,
                         RecOpInfo.sOpName,RecNImsInfo.ClntHost.sHostName);
            Connected:=False; fE_Refund:=iECurBuy*fEPrice;
           end; if aCntRslt[1]<>CntRecOK then goto TOBuyError;
          with CustRW.EM do begin //更新申购次数、购电总量
            Connected:=True;
            aCntRslt[2]:=AppServer.btFunSetDefEMeterInfo(CustRW.iCustNo,
                         iEBuyLmt,iERemind,iEWarn,iESum,iTotalNum);
            Connected:=False;
           end; if aCntRslt[2]<>CntRecOK then goto TOBuyError;
         end;//end DCOMOpen
        PrdFrmOpenIni(Sender);//显示申购记录内容
        WriteCK.ECK:=BuyCard;
        if not FrmRWCard.bFunWriteCardCustData(CustRW,WriteCK)//写用户数据
           then goto TOBuyError;
        MessageDlgPos('申购成功'+#13+'应收款:'+floattostr(fE_Refund)+'元'#13
                     +'打印申购记录吗?',mtConfirmation,[mbYes]+[mbNo],
                     0,BtnOK.Left,BtnOK.Top);
       end; {end of True}
     end;{end Case}
   TOBuyOK:
     ModalResult:=mrOK;  Exit;//写入成功
   TOBuyError://写入失败则清除已写记录
     with DCOMOpen do begin
       with CustRW.EM do begin
         if aCntRslt[2]=CntRecOK then begin
            Connected:=True;//恢复原申购次数、购电总量
            AppServer.btFunSetDefEMeterInfo(CustRW.iCustNo,
                      iEBuyLmt,iERemind,iEWarn,iKeepESum,iKeepTotalNum);
            Connected:=False;
          end;
        end;
       if aCntRslt[1]=CntRecOK then begin
          Connected:=True;//删除已写入的申购记录
          AppServer.btFunClearDefBuyRecord(CustRW.iCustNo,
                    CustRW.Buy.iBuyNum);
          Connected:=False;
        end;
        wFunShowError('用户申购失败!',[mbOK]);
        ModalResult:=mrCancel;Exit;
      end;//end DCOMOpen
     end//end if
  else if EnterMode=EdtCustMode then begin
     case bCanWrite of
      False: begin{ bCanWrite=False 先读卡}
        if not FrmRWCard.bFunReadCardCustData(ReadCD,ReadCK)//读用户数据
           then goto TOEdtReadError;
        CustRW.iCustNo:=ReadCD.iCustNo;
        if not bFunGetCustDBData(CustRW) then begin
           wFunShowError('数据库无此卡记录!',[mbOK]); goto TOEdtReadError;
          end;
        TOEdtReadOK:
           bCanWrite:=True;
           PrdFrmOpenIni(Sender); Exit;
        TOEdtReadError:  Exit;
        end;{end of False}
      True:begin {bCanWrite=True 再写数据记录}
        bFunGetInputRec(Sender);
        with DCOMOpen do begin
          with CustRW do begin //更新用户信息
            Connected:=True;
            aCntRslt[1]:=AppServer.btFunSetDefCust(iCustNo,Cust.sMark);
            Connected:=False;
           end; if aCntRslt[1]<>CntRecOK then goto TOEdtError;
          with CustRW.EM do begin //更新电表信息
            Connected:=True;
            aCntRslt[2]:=AppServer.btFunSetDefEMeterInfo(CustRW.iCustNo,
                         iEBuyLmt,iERemind,iEWarn,iESum,iTotalNum);
            Connected:=False;
           end; if aCntRslt[2]<>CntRecOK then goto TOEdtError;
         end;//end DCOMOpen
        MessageDlgPos('用户数据修改成功!',mtConfirmation,
                      [mbYes],0,BtnOK.Left,BtnOK.Top);
       end; {end of True}
     end;{end Case}
   TOEdtOK:
        ModalResult:=mrOK;  Exit;//写入成功
   TOEdtError:
        wFunShowError('用户数据修改失败!',[mbOK]);
        ModalResult:=mrCancel;Exit;
   end//end if
  else if EnterMode=CustUnBuyMode then begin
     case bCanWrite of
      False: begin{ bCanWrite=False 先读卡}
        if not FrmRWCard.bFunReadCardCustData(ReadCD,ReadCK)//读用户数据
           then goto TOUnBuyReadError;
        CustRW.iCustNo:=ReadCD.iCustNo;
        if not bFunGetCustDBData(CustRW) then begin
           wFunShowError('数据库无此卡记录!',[mbOK]); goto TOUnBuyReadError;
          end;
        if not bFunCmpCustDB_CardData(CustRW,ReadCD,ReadCK) then begin
           wFunShowError('卡内数据不正常!'+#13+#13+
               '请核对用户申购记录和卡内数据!',[mbOK]); goto TOUnBuyReadError;
          end;
        TOUnBuyReadOK:
           bCanWrite:=True;
           PrdFrmOpenIni(Sender); Exit;
        TOUnBuyReadError:
           ModalResult:=mrCancel; Exit;
        end;{end of False}
      True:begin {bCanWrite=True 再写数据记录}
        WriteCK.ECK:=UnBuyCard;
        if not FrmRWCard.bFunWriteCardCustData(CustRW,WriteCK)//写用户数据
           then goto TOUnBuyError;
       TOUnBuyOK:
          wFunShowOK('用户已结算'+#13+#13+
            '请将此卡插入卡表后再办理用户销户!',[mbOK]);
          ModalResult:=mrOK;  Exit;//写入成功
       TOUnBuyError:
          ModalResult:=mrCancel;Exit;
        end;{end of False}
     end;{end Case}
   end//end if
  else if EnterMode=CustCloseMode then begin
     case bCanWrite of
      False: begin{ bCanWrite=False 先读卡}
        if not FrmRWCard.bFunReadCardCustData(ReadCD,ReadCK)//读用户数据
           then goto TOCloseReadError;
        CustRW.iCustNo:=ReadCD.iCustNo;
        if not bFunGetCustDBData(CustRW) then begin
           wFunShowError('数据库无此卡记录!',[mbOK]); goto TOCloseReadError;
          end;
        CustRW.EM.iEConsume:=ReadCD.EM.iEConsume;
        CustRW.EM.iERemain:=ReadCD.EM.iERemain;
        TOCloseReadOK:
           bCanWrite:=True;
           PrdFrmOpenIni(Sender); Exit;
        TOCloseReadError:
           ModalResult:=mrCancel; Exit;
        end;{end of False}
      True:begin {bCanWrite=True 再写数据记录}
        iE_RemainSum:=CustRW.EM.iESum-CustRW.EM.iEConsume;
        fE_Refund:=0.00;  iIntA:=CustRW.EM.iTotalNum;
        repeat //计算退款
          with DCOMOpen do begin
            Connected:=True; //读指定申购信息数据库
            aCntRslt[1]:=AppServer.btFunGetDefBuyRecord(CustRW.iCustNo,
                         iIntA,dtGetDate,iE_Buy,iIntB,fE_Price,wsStrA,wsStrB);
            Connected:=False;
           end;
          if aCntRslt[1]<>CntRecOK then goto TOCloseError;
          if iE_RemainSum>iE_Buy then fE_Refund:=fE_Refund+iE_Buy*fE_Price
          else fE_Refund:=fE_Refund+iE_RemainSum*fE_Price;
          iE_RemainSum:=iE_RemainSum-iE_Buy;
          iIntA:=iIntA-1;
        until iE_RemainSum <= 0;
        WriteCK.ECK:=EmptyCard;
        if not FrmRWCard.bFunWriteCardCustData(CustRW,WriteCK)//写用户数据
           then goto TOCloseError;
        if not bFunClearDefCustDBData(CustRW) then begin
           wFunShowError('数据库读写失败!',[mbOK]); goto TOCloseError;
          end;
        MessageDlgPos('用户销户成功'+#13+'应退款:'+floattostr(fE_Refund)+'元'
            +#13+'打印销户记录吗?',mtConfirmation,[mbYes]+[mbNo],0,BtnOK.Left,BtnOK.Top);
       TOCloseOK:
          ModalResult:=mrOK;  Exit;//写入成功
       TOCloseError:
          wFunShowError('用户销户失败!',[mbOK]);
          ModalResult:=mrCancel;Exit;
        end;{end of False}
     end;{end Case}
   end//end if
  else if EnterMode=CustPatchMode then begin
    case bCanWrite of
      False: begin{ bCanWrite=False 先查找用户记录}
        PanelInfo.Visible:=True; PanelInfo.Enabled:=True;
        PageCtrlInfo.ActivePage:=TabSheetFind; iCount:=0;
        iSelctRow:=-1; StrGrid.RowCount:=1;//清除旧记录
        repeat //查找用户记录
         if StrGrid.RowCount>1 then begin
            StrGrid.FixedCols:=1;  StrGrid.FixedRows:=1;
          end;
         iIntA:=strtoint(sFunCheckStr(MskEdtCustNo.Text));
         wsStrA:=MskEdtCustName.Text; wsStrB:=MskEdtIDNo.Text;
         iCount:=iCount+1;
         with DCOMOpen do begin
           Connected:=True;
           aCntRslt[1]:=AppServer.btFunFindLikeCust(iIntA,wsStrA,wsStrB,iCount);
           Connected:=False;
          end;
         if aCntRslt[1]=CntRecOK then begin
            StrGrid.RowCount:=StrGrid.RowCount+1;
            iRow:=StrGrid.RowCount-1;
            StrGrid.Cells[1,iRow]:=inttostr(iIntA);
            StrGrid.Cells[2,iRow]:=wsStrA;
            StrGrid.Cells[3,iRow]:=wsStrB;
          end;
         if iRow>20 then begin
            StrGrid.Cells[0,iRow-1]:='...'; break;
          end;
        until aCntRslt[1]<>CntRecOK;
        Exit;
       end;
      True: begin {bCanWrite=True 再读用户记录并补卡}
        if not bFunGetCustDBData(CustRW) then begin
           wFunShowError('读数据库记录失败!',[mbOK]); goto TOPatchError;
         end;
        PrdFrmOpenIni(Sender);
       end;
     end;//end case
     case MessageDlgPos('用户丢卡前'+#13+'是否已将卡插入卡表?',mtConfirmation,
                 [mbYes]+[mbNo],0,BtnOK.Left,BtnOK.Top) of
        mrYes: begin //已插卡
          if CustRW.EM.iTotalNum=1 then begin
             WriteCK.ECK:=PatchForBuyCard;//补待购卡
             CustRW.Buy.iECurBuy:=0;
            end
          else begin
             WriteCK.ECK:=PatchBuyCard;//补申购卡
             CustRW.Buy.iECurBuy:=0;
            end;
         end; //end mrYes
        mrNo: begin  //未插卡
          if CustRW.EM.iTotalNum=1 then
             WriteCK.ECK:=NewCustCard
          else WriteCK.ECK:=PatchBuyCard;//补申购卡
         end; //end mrNo
        else goto TOPatchError;
      end;//end case
      if not FrmRWCard.bFunWriteCardCustData(CustRW,WriteCK)//写用户数据
        then goto TOPatchError;
   TOPatchOK:
        wFunShowOK('用户补卡成功!',[mbOK]);
        ModalResult:=mrOK;  Exit;//补卡成功
   TOPatchError:
        wFunShowError('用户补卡失败!',[mbOK]);
        ModalResult:=mrCancel;Exit;
   end;//end if
end;

procedure TFrmOpen.PrdCreatChkCard(Sender: TObject);
var
  wChoice: word;
begin
  wChoice:=wFunShowAsk('制作检查卡'+#13+'请将空白卡插入写卡器!',[mbOK]+[mbCancel]);
  if wChoice=mrOK then begin
     WriteCK.ECK:=ForChkCard;//写检查卡
     CustRW.sEMemDT:=TaiYuanMemKind;
     if not FrmRWCard.bFunWriteCardCustData(CustRW,WriteCK)//写用户数据
        then wFunShowError('制作检查卡失败!',[mbOK])
     else  wFunShowOK('制作检查卡成功!',[mbOK]);
   end;
end;

procedure TFrmOpen.PrdClearChkCard(Sender: TObject);
var
  wChoice: word;
begin
  wChoice:=wFunShowAsk('清除检查卡'+#13+'请将检查卡插入写卡器!',[mbOK]+[mbCancel]);
  if wChoice=mrOK then begin
     WriteCK.ECK:=EmptyCard;//写检查卡
     CustRW.sEMemDT:=TaiYuanMemKind;
     if not FrmRWCard.bFunWriteCardCustData(CustRW,WriteCK)//写用户数据
        then wFunShowError('清除检查卡失败!',[mbOK])
     else  wFunShowOK('已将检查卡清除为空白卡!',[mbOK]);
   end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -