📄 open.pas
字号:
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 + -