ammeter_data_f.pas
来自「县级供电企业电费核算源码, 在客户处正常运行8年以上, Delphi 5开发,数」· PAS 代码 · 共 600 行 · 第 1/2 页
PAS
600 行
procedure TF_Ammeter_Data.TFrm_Transfer1Bt_TransferSelectClick(
Sender: TObject);
begin
Frm_Transfer1.Bt_TransferSelectClick(Sender);
end;
procedure TF_Ammeter_Data.Bt_ClearAllClick(Sender: TObject);
Var
sOK:String;
begin
InputQuery('警示窗: 清除此台变抄表数据?','确认要清除请输入大写的 [OK], 否则请按Cancel',sOK);
if(sOK <> 'OK') Then
Exit;
with DM_Table,v_Ammeter_Data Do
Begin
First();
While Not Eof Do
Begin
P_SetThis_Null(DBE_House_No.Text,DBE_Ammeter_Order.Text);
Next();
End;
Refresh();
End;
end;
procedure TF_Ammeter_Data.Frm_Transfer1Bt_TransferSelectClick(
Sender: TObject);
begin
Frm_Transfer1.Bt_TransferSelectClick(Sender);
end;
procedure TF_Ammeter_Data.CS_ExPNoImportConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
StatusBar.Panels.Items[0].Text := 'Connected to:[' + Socket.RemoteAddress + ']'+Socket.RemoteHost;
Bt_ExPNoImport.Enabled := true;
end;
procedure TF_Ammeter_Data.CS_ExPNoImportError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
Var
Msg:String;
begin
case ErrorEvent Of
eeGeneral: Msg := 'The socket received an error message that does not fit into any of the following categories.';
eeSend: Msg := 'An error occurred when trying to write to the socket connection.';
eeReceive: Msg := 'An error occurred when trying to read from the socket connection.';
eeConnect: Msg := 'A connection request that was already accepted could not be completed.';
eeDisconnect: Msg := 'An error occurred when trying to close a connection.';
eeAccept: Msg := 'A problem occurred when trying to accept a client connection request.';
else Msg := 'unknow error';
end;
StatusBar.Panels.Items[0].Text := Msg;
ErrorCode := 0;//不再产生错误报告
end;
procedure TF_Ammeter_Data.CS_ExPNoImportRead(Sender: TObject;
Socket: TCustomWinSocket);
var
Ans: TPNoAns;
LastCount: LongWord;
v_Note:String;
PNo:String[10];
sLNo:String[4];
Buf: String;
begin
PNo := Trim(Dm_Table.v_Ammeter_Data.FieldByName('f_Ammeter_No').AsString);
LastCount := DM_Table.V_Ammeter_Data['f_Ammeter_Last_Count'];
CS_ExPNoImport.Socket.ReceiveBuf(Ans, SizeOf(Ans));
//显示消息于引入消息框
If Ans.Ok = 1 Then//有效数值
Buf := Format('%s %s ==> %.4X ==>[%d] %d ', [Ans.TransferNo, Ans.PNo, Ans.LNo, Ans.Batch, Ans.Count])
else
Begin
If Ans.LNo <> 0 Then
Buf := Format('%s %s ==> %.4X ==> 无批次 [%d]', [Ans.TransferNo, Ans.PNo, Ans.LNo, Ans.Batch])
Else
Buf := Format('%s %s ==> 未知表', [Ans.TransferNo, Ans.PNo]);
End;
M_Receive.Lines.Add(Buf);
if(PNo <> Ans.PNo) Then
Exit;
if(Ans.Ok = 1) Then
Begin
//与上月数据比较,如比上月小是上月抄大
if(LastCount > Ans.Count) Then
Begin
v_Note := Format('上月抄大(%d)',[Ans.Count]);
Ans.Count := LastCount;//取上月数为表底
End
else
v_Note := '';
P_SetThis_Count(DBE_House_No.Text,DBE_Ammeter_Order.Text, Ans.Count, 0, v_Note);
End;
//当前无逻辑表号时,同时设置返回的逻辑表号
If Ans.LNo <> 0 Then
sLNo := IntToHex(Ans.LNo,4)
Else
sLNo := '';
If DM_Table.v_Ammeter_Data.FieldByName('f_LNo').AsString <> sLNo Then
P_SetLNo(DBE_House_No.Text,DBE_Ammeter_Order.Text,sLNo);
Dm_Table.v_Ammeter_Data.Next();
if(CB_AutoImport.Checked) then
Begin
if(Not DM_Table.v_Ammeter_Data.Eof) Then
Bt_ExPNoImportClick(Nil)
else
// Begin
// PC.ActivePage := TS_House;
Dm_Table.v_Ammeter_Data.Refresh();
// End;
End
else
Dm_Table.v_Ammeter_Data.Refresh();
end;
procedure TF_Ammeter_Data.FormShow(Sender: TObject);
begin
PC.ActivePage := Ts_House;
P_OpenTable(DM_Table.Tb_Transfer);
DM_Table.Tb_Transfer.Refresh();//可能相关集中器号被修改
Try
If (CS_ExPNoImport.Port <> Default_ExPNoImportPort) Or (CS_ExPNoImport.Host <> Default_ImportServer) Then
CS_ExPNoImport.Close();
If (Not CS_ExPNoImport.Active) Then
Begin
CS_ExPNoImport.Host := Default_ImportServer;
CS_ExPNoImport.Port := Default_ExPNoImportPort;
End;
CS_ExPNoImport.Open;
Finally
Bt_ExPNoImport.Enabled := CS_ExPNoImport.Active;
StatusBar.Panels.Items[0].Text := '';
End;
end;
procedure TF_Ammeter_Data.CB_CardClick(Sender: TObject);
begin
If CB_Card.Checked Then
F_HouseCard.Show()
Else
f_HouseCard.Close();
end;
procedure TF_Ammeter_Data.Bt_ExPNoImportClick(Sender: TObject);
Var
Req: TPNoReq;
begin
With DM_Table Do
Begin
Req.PNo := Trim(v_Ammeter_Data.FieldByName('f_Ammeter_No').AsString);
While (Not v_Ammeter_Data.Eof) And (Length(Req.PNo) < 4) Do//物表表号太短
Begin
v_Ammeter_Data.Next();
Req.PNo := Trim(v_Ammeter_Data.FieldByName('f_Ammeter_No').AsString);
End;
If v_Ammeter_Data.Eof Then
Exit;
Req.TransferNo := Tb_Transfer['f_Transfer_No'];//集中器编号
Req.Batch := 1;//此为计费批次号
Req.CT := v_Ammeter_Data.FieldByName('f_Ct').AsInteger;//互感器倍率
While (Length(Req.PNo)<4) And (Not v_Ammeter_Data.Eof) Do
Begin
DM_Table.v_Ammeter_Data.Next();
Req.CT := v_Ammeter_Data.FieldByName('f_Ct').AsInteger;//互感器倍率
Req.PNo := Trim(v_Ammeter_Data.FieldByName('f_Ammeter_No').AsString);
End;
If Not v_Ammeter_Data.Eof Then
CS_ExPNoImport.Socket.SendBuf(Req, SizeOf(Req));
// If (Sender <> Nil) And CB_AutoImport.Checked Then//用户按时
// PC.ActivePage := Ts_Receive;
End;
end;
procedure TF_Ammeter_Data.DBE_LNoChange(Sender: TObject);
Var
ReadOnly: Boolean;
begin
ReadOnly := DBE_LNo.Text <> '';
E_Ammeter_Count.ReadOnly := ReadOnly;
DBE_Ammeter_No.ReadOnly := ReadOnly;
If ReadOnly Then
Begin
E_Ammeter_Count.Color := clInactiveCaption;
DBE_Ammeter_No.Color := clInactiveCaption;
End
Else
Begin
E_Ammeter_Count.Color := clWindow;
DBE_Ammeter_No.Color := clWindow;
End;
end;
procedure TF_Ammeter_Data.DBNavigator1Click(Sender: TObject;
Button: TNavigateBtn);
begin
If Button = nbPost Then
Begin
DM_Table.Query.SQL.Clear();
DM_Table.Query.SQL.Text := Format('Update Tb_Ammeter Set f_Ammeter_No = ''%s'' Where f_House_No = ''%s'' And f_Ammeter_Order = %s',[DBE_Ammeter_No.Text, DBE_House_No.Text, DBE_Ammeter_Order.Text]);
DM_Table.Query.ExecSQL();
End;
end;
procedure TF_Ammeter_Data.Bt_ReCalcClick(Sender: TObject);
begin
Q_Transfer_Wasting.Close();
Q_Transfer_Wasting.ParamByName('TransferNo').AsString := DBE_Transfer_No.Text;
Q_Transfer_Wasting.Open();
end;
procedure TF_Ammeter_Data.N1Click(Sender: TObject);
begin
P_SetThis_Null(DBE_House_No.Text,DBE_Ammeter_Order.Text);
If Cb_AutoRefresh.Checked Then
Dm_Table.V_Ammeter_Data.Refresh();
end;
procedure TF_Ammeter_Data.DBG_Ammeter_DataMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Var
CurPos: TPoint;
begin
If Button = mbRight Then
Begin
If DM_Table.v_Ammeter_Data.FieldByName('f_Count').AsInteger < 5 Then
Begin
GetCursorPos(CurPos);
PM_Clear.Popup(CurPos.X, CurPos.Y);
End;
End;
end;
procedure TF_Ammeter_Data.N4Click(Sender: TObject);
begin
E_Ammeter_Count.Text := DM_Table.v_Ammeter_Data['f_Ammeter_Last_Count'];
Bt_AddClick(Bt_Add);
end;
procedure TF_Ammeter_Data.M_ReceiveChange(Sender: TObject);
Const
LineHeight = 18;
begin
If M_Receive.Lines.Count > M_Receive.Height Div LineHeight Then
M_Receive.Lines.Delete(0);
end;
procedure TF_Ammeter_Data.M_ReceiveDblClick(Sender: TObject);
begin
M_Receive.Lines.Clear();
end;
procedure TF_Ammeter_Data.Bt_CalcClick(Sender: TObject);
begin
If DM_Table.Query.Active Then
DM_Table.Query.Close();
DM_Table.Query.SQL.Text := Format('Delete From Tb_FeeDetail Where f_Transfer_No Is Null Or f_Transfer_No = ''%s''',[DBE_Transfer_No.Text]);
DM_Table.Query.ExecSQL();
DM_Table.Query.SQL.Text := Format('Execute Procedure p_RebuildTransferFee ''%s''',[DBE_Transfer_No.Text]);
DM_Table.Query.ExecSQL();
end;
procedure TF_Ammeter_Data.N5Click(Sender: TObject);
begin
If Application.MessageBox('重新计费所有台变电费将花费几分钟时间,您确认吗?','系统提示',MB_YESNO) <> IDYES Then
Exit;
If DM_Table.Query.Active Then
DM_Table.Query.Close();
DM_Table.Query.SQL.Text := 'Execute Procedure p_RebuildFee';
DM_Table.Query.ExecSQL();
end;
procedure TF_Ammeter_Data.N6Click(Sender: TObject);
begin
If DM_Table.Query.Active Then
DM_Table.Query.Close();
DM_Table.Query.SQL.Text := Format('Execute Procedure p_RebuildTransferFee ''%s''',[DBE_Transfer_No.Text]);
DM_Table.Query.ExecSQL();
end;
procedure TF_Ammeter_Data.DBE_This_CountChange(Sender: TObject);
begin
//在This_Count改变时处理不是很合理, 但也能达到目的
E_Ammeter_Count.Text := DBE_This_Count.Text;
E_Adjust_Count.Text := DBE_Adjust_Count.Text;
M_Note.Text := DBM_Note.Text;
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?