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 + -
显示快捷键?