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