ammeter_data_f.pas

来自「县级供电企业电费核算源码, 在客户处正常运行8年以上, Delphi 5开发,数」· PAS 代码 · 共 600 行 · 第 1/2 页

PAS
600
字号
unit Ammeter_Data_F;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls, Mask, Transfer_Frm,
  ScktComp, Db, DBTables, Menus;

type
  TF_Ammeter_Data = class(TForm)
    DBNavigator1: TDBNavigator;
    DBE_This_Count: TDBEdit;
    DBM_Note: TDBMemo;
    DBE_Adjust_Count: TDBEdit;
    DBE_Ammeter_Order: TDBEdit;
    DBG_Ammeter_Data: TDBGrid;
    StatusBar: TStatusBar;
    Panel2: TPanel;
    Frm_Transfer1: TFrm_Transfer;
    CS_ExPNoImport: TClientSocket;
    DBE_LNo: TDBEdit;
    PC: TPageControl;
    Ts_House: TTabSheet;
    Label3: TLabel;
    Label1: TLabel;
    Label2: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    M_Note: TMemo;
    E_Ammeter_Count: TEdit;
    Bt_Add: TButton;
    Bt_Return: TButton;
    E_Adjust_Count: TEdit;
    CB_AutoRefresh: TCheckBox;
    Bt_Print: TButton;
    DBE_House_name: TDBEdit;
    DBE_Ammeter_No: TDBEdit;
    CB_Sort: TCheckBox;
    Bt_ClearAll: TButton;
    CB_AutoImport: TCheckBox;
    CB_Card: TCheckBox;
    Bt_ExPNoImport: TButton;
    DBE_House_No: TDBEdit;
    Ts_Transfer: TTabSheet;
    DBG_Transfer: TDBGrid;
    Panel1: TPanel;
    Bt_ReCalc: TButton;
    Q_Transfer_Wasting: TQuery;
    Ds_Transfer_Wasting: TDataSource;
    DBE_Transfer_No: TDBEdit;
    Q_Transfer_WastingF_TRANSFER_NO: TStringField;
    Q_Transfer_WastingF_TRANSFER_NAME: TStringField;
    PM_Clear: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    Ts_Receive: TTabSheet;
    M_Receive: TMemo;
    Bt_Calc: TButton;
    Q_Transfer_WastingF_COUNTER: TIntegerField;
    Q_Transfer_WastingF_BUYCOUNT: TFloatField;
    Q_Transfer_WastingF_COUNT: TFloatField;
    Q_Transfer_WastingF_AMOUNT: TFloatField;
    Q_Transfer_WastingF_WASTING: TFloatField;
    Q_Transfer_WastingF_LOSSRATE: TFloatField;
    Q_Transfer_WastingF_PRICE: TFloatField;
    PM_RebuildFee: TPopupMenu;
    N5: TMenuItem;
    N6: TMenuItem;
    procedure Bt_ReturnClick(Sender: TObject);
    procedure Bt_AddClick(Sender: TObject);
    procedure E_Ammeter_CountKeyPress(Sender: TObject; var Key: Char);
    procedure FormActivate(Sender: TObject);
    procedure DBG_Ammeter_DataDblClick(Sender: TObject);
    procedure DBG_Ammeter_DataKeyPress(Sender: TObject; var Key: Char);
    procedure DBG_Ammeter_DataTitleClick(Column: TColumn);
    procedure Bt_PrintClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDeactivate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Bt_TransferSelectClick(Sender: TObject);
    procedure TFrm_Transfer1Bt_TransferSelectClick(Sender: TObject);
    procedure Bt_ClearAllClick(Sender: TObject);
    procedure Frm_Transfer1Bt_TransferSelectClick(Sender: TObject);
    procedure CS_ExPNoImportConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure CS_ExPNoImportError(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure CS_ExPNoImportRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure FormShow(Sender: TObject);
    procedure CB_CardClick(Sender: TObject);
    procedure Bt_ExPNoImportClick(Sender: TObject);
    procedure DBE_LNoChange(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure Bt_ReCalcClick(Sender: TObject);
    procedure N1Click(Sender: TObject);
    procedure DBG_Ammeter_DataMouseUp(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure N4Click(Sender: TObject);
    procedure M_ReceiveChange(Sender: TObject);
    procedure M_ReceiveDblClick(Sender: TObject);
    procedure Bt_CalcClick(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure DBE_This_CountChange(Sender: TObject);
  private
    { Private declarations }
	v_OrderField:String;
  public
    { Public declarations }
  end;

//用户定义记录
{$A-}//按字节对齐
TPNo = String[10];
TTransferNo = String[6];//台变编号

TPNoAns = record
	TransferNo: TTransferNo;//台变编号
    Batch:LongWord;//批次号
    PNo:TPNo;//物理表号
    Count:LongWord;//读数
    Ok: Byte;//数据有效
    LNo: Word;//返回的逻辑表号
end;

TPNoReq = record
	TransferNo: TTransferNo;//台变编号
    Batch:LongWord;//批次号
    PNo:TPNo;//物理表号
    CT: Word;//互感器倍率
end;

var
  F_Ammeter_Data: TF_Ammeter_Data;

implementation

uses Table_DM, Comm, CommSmdljf, Ammeter_Data_R, TransferSelect_F,
  HouseCard_F;

{$R *.DFM}

procedure TF_Ammeter_Data.Bt_ReturnClick(Sender: TObject);
begin
	If F_HouseCard.Visible Then
    	F_HouseCard.Close();
    CB_Card.Checked := False;
	Close();
end;




procedure TF_Ammeter_Data.Bt_AddClick(Sender: TObject);
Var
    v_this_Count: Real;
	v_Adjust_Count:Real;
    v_Note:String;
begin
    E_Ammeter_Count.Text := Trim(E_Ammeter_Count.Text);
   	If E_Ammeter_Count.Text = '' Then//输入为空时表示此表未抄
    	P_SetThis_Null(DBE_House_No.Text,DBE_Ammeter_Order.Text)
    Else
    Begin
    	v_Note := M_Note.Text;//用户输入的备注
		v_this_Count := StrtoFloat(E_Ammeter_Count.Text);
        //与上月数据比较,如比上月小则提示
    	if(DM_Table.V_Ammeter_Data['f_Ammeter_Last_Count'] > v_This_Count) Then
        Begin
        	Application.MessageBox('本月数比上月数小,系统将按倒转或翻转处理','系统提示',MB_OK);
            if v_Note = '' Then//已有说明时不再替换原有说明
	            v_Note := '倒转/翻转';
        End
		Else if (v_This_Count - DM_Table.V_Ammeter_Data['f_Ammeter_Last_Count'] > 5000) Then
        Begin
        	Application.MessageBox('用电量太大,系统将按倒转或翻转处理','系统提示',MB_OK);
            if v_Note = '' Then//已有说明时不再替换原有说明
	            v_Note := '倒转/翻转';
        End;
		if E_Adjust_Count.Text <> '' Then
        	v_Adjust_Count := StrtoFloat(E_Adjust_Count.Text)
        Else
           	v_Adjust_Count := 0;
        //有调整量时必须有说明
        If (v_Adjust_Count <> 0) And (v_Note = '') Then
        Begin
        	ShowMessage('有调整量必须说明原因!');
            Exit;
        End;
    	//设置本月抄表数据
    	P_SetThis_Count(DBE_House_No.Text,DBE_Ammeter_Order.Text, v_this_Count, v_Adjust_Count, v_Note);

    End;
	Dm_Table.V_Ammeter_Data.Next();
    DBG_Ammeter_DataDblClick(Sender);
	If Cb_AutoRefresh.Checked Then
        Dm_Table.V_Ammeter_Data.Refresh();
   	E_Ammeter_Count.SetFocus();
	E_Ammeter_Count.SelectAll();//选取编辑框内的文本
end;

procedure TF_Ammeter_Data.E_Ammeter_CountKeyPress(Sender: TObject;
  var Key: Char);
begin
	If (Key = #13) Then
		Bt_AddClick(Bt_Add);
end;

procedure TF_Ammeter_Data.FormActivate(Sender: TObject);
begin
    P_OpenTable(Dm_Table.V_Ammeter_Data);

    //如原来是空的,则刷新后仍然没有数据,此控件有问题
    If Dm_Table.V_Ammeter_Data.EOF then
    Begin
    	Dm_Table.V_Ammeter_Data.Close;
        Dm_Table.V_Ammeter_Data.Open;
    End
	Else
	    Dm_Table.V_Ammeter_Data.Open;
	Dm_Table.V_Ammeter_Data.EnableControls();
end;

procedure TF_Ammeter_Data.DBG_Ammeter_DataDblClick(Sender: TObject);
begin
  E_Ammeter_Count.Text := DBE_This_Count.Text;
  E_Adjust_Count.Text := DBE_Adjust_Count.Text;
  M_Note.Text := DBM_Note.Text;
	E_Ammeter_Count.SetFocus()
end;





procedure TF_Ammeter_Data.DBG_Ammeter_DataKeyPress(Sender: TObject; var Key: Char);
begin
	If Key = #13 Then
   	DBG_Ammeter_DataDBlClick(Sender);
end;


procedure TF_Ammeter_Data.DBG_Ammeter_DataTitleClick(Column: TColumn);
begin
	if(CB_Sort.Checked = false) Then
    	Exit;
	Dm_Table.V_Ammeter_Data.Close();
	v_OrderField := UpperCase(Column.FieldName);
    if(v_OrderField = 'F_HOUSE_NO') Or (v_OrderField = 'F_AMMETER_ORDER') Then
    	Dm_Table.V_Ammeter_Data.IndexFieldNames := 'F_TRANSFER_NO;F_House_No;F_Ammeter_Order'
    else
    	Dm_Table.V_Ammeter_Data.IndexFieldNames := 'F_TRANSFER_NO;'+v_OrderField;
    Dm_Table.V_Ammeter_Data.Open();
end;







procedure TF_Ammeter_Data.Bt_PrintClick(Sender: TObject);
begin
	P_Print_Report(R_Ammeter_Data);
    //QR_Save(R_Ammeter_Data,'.');
end;



procedure TF_Ammeter_Data.FormCreate(Sender: TObject);
begin
    v_OrderField := 'F_House_No';
end;


procedure TF_Ammeter_Data.FormDeactivate(Sender: TObject);
begin
	Dm_Table.V_Ammeter_Data.DisableControls();
end;

procedure TF_Ammeter_Data.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
    Dm_Table.V_Ammeter_Data.Close();
end;

procedure TF_Ammeter_Data.Bt_TransferSelectClick(Sender: TObject);
begin
	F_TransferSelect.Show();
end;







⌨️ 快捷键说明

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