?? tj_gxdw.pas
字號:
{*******************************************************}
{ }
{ 關系單位管理 }
{ }
{ 中軟金馬公司版權所有。2002.12前 }
{ }
{ 編制:中軟金馬郵資票品項目開發組 }
{ }
{ }
{*******************************************************}
(*
本模塊在省級系統管理模塊里面調用。
*)
unit tj_gxdw;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables, Db, ActnList, ImgList, RXCtrls, StdCtrls, Buttons, Grids,
DBGrids, DBCtrls, Mask, ExtCtrls, ComCtrls;
type
Tfrm_gxdw = class(TForm)
pnl_Face: TPanel;
pnl_Main: TPanel;
Panel11: TPanel;
RxLabel1: TRxLabel;
DWMC: TLabel;
ds_GXDW: TDataSource;
ILi_Edit: TImageList;
ALi_Edit: TActionList;
Act_Add: TAction;
Act_Delete: TAction;
Act_Modify: TAction;
Act_Save: TAction;
Act_Cancel: TAction;
Act_Exit: TAction;
Act_Print: TAction;
Act_PrinterSetup: TAction;
query: TAction;
clear: TAction;
Act_Search: TAction;
qry_Table: TQuery;
upSQL_Save: TUpdateSQL;
pnl_Show: TPanel;
lbl_DWDM: TLabel;
lbl_DWMC: TLabel;
lbl_DWJC: TLabel;
lbl_DH: TLabel;
lbl_LXR: TLabel;
lbl_email: TLabel;
lbl_DZ: TLabel;
lbl_BZ: TLabel;
lbl_ZJM: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
dbe_DWDM: TDBEdit;
dbe_DWMC: TDBEdit;
dbe_DWJC: TDBEdit;
dbe_DH: TDBEdit;
dbe_ZJM: TDBEdit;
dbe_LXR: TDBEdit;
gb_BDWGX: TGroupBox;
dbck_ZJSJ: TDBCheckBox;
dbck_ZJXJ: TDBCheckBox;
dbck_GYS: TDBCheckBox;
dbck_KH: TDBCheckBox;
dbck_SJFH: TDBCheckBox;
dbck_BJ: TDBCheckBox;
dbe_email: TDBEdit;
dbe_DZ: TDBEdit;
dbe_BZ: TDBEdit;
qry_tv: TQuery;
lbl_PXM: TLabel;
dbe_PXM: TDBEdit;
gb_YWGX: TGroupBox;
dbck_FHDX: TDBCheckBox;
dbck_TXYW: TDBCheckBox;
dbck_JYYW: TDBCheckBox;
pnl_ViewType: TPanel;
rb_ViewTable: TRadioButton;
rb_ViewTree: TRadioButton;
pnl_Bottom: TPanel;
Panel1: TPanel;
bbtn_Add: TBitBtn;
bbtn_Del: TBitBtn;
bbtn_Save: TBitBtn;
bbtn_Cancel: TBitBtn;
bbtn_Exit: TBitBtn;
bbtn_Modify: TBitBtn;
tv_List: TTreeView;
dbg_List: TDBGrid;
lbl_GKGX: TLabel;
edt_GKGX: TEdit;
bbtn_gkgx: TBitBtn;
qry_Tmp: TQuery;
procedure tv_ListChange(Sender: TObject; Node: TTreeNode);
procedure rb_ViewTableClick(Sender: TObject);
procedure rb_ViewTreeClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure bbtn_AddClick(Sender: TObject);
procedure bbtn_ModifyClick(Sender: TObject);
procedure bbtn_SaveClick(Sender: TObject);
procedure bbtn_CancelClick(Sender: TObject);
procedure bbtn_DelClick(Sender: TObject);
procedure bbtn_gkgxClick(Sender: TObject);
procedure qry_TableAfterScroll(DataSet: TDataSet);
procedure dbck_ZJXJClick(Sender: TObject);
procedure dbck_BJClick(Sender: TObject);
procedure dbck_ZJSJClick(Sender: TObject);
procedure dbck_SJFHClick(Sender: TObject);
procedure dbck_KHClick(Sender: TObject);
procedure dbck_GYSClick(Sender: TObject);
procedure dbck_JYYWClick(Sender: TObject);
procedure dbck_TXYWClick(Sender: TObject);
procedure dbck_FHDXClick(Sender: TObject);
procedure dbe_MKeyPress(Sender: TObject; var Key: Char);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
procedure Set_State(State: Integer); {設置界面控件的狀態}
procedure Create_List; {生成關系單位數據列表}
procedure Create_Node(SQL_param: string; Node: TTreeNode; Find_Sub: Boolean = False); {創建節點}
procedure Clear_Node; {刪除所有TreeView控件的所有節點和數據}
function Add_Node(l_DWMC, l_DWDM: string): TTreeNode; {添加固定節點}
function Test_Can_Del: Boolean; {判斷能否進行刪除}
function Create_Default_GKGX: string; {產生默認的歸口關系}
function Create_Default_PXM: Integer; {產生默認的排序碼}
procedure Adjust_PXM(State: Integer); {調整排序碼}
function Test_NULL: Boolean; {測試是否為空}
function Test_GX: Boolean; {測試是否指定與本局關系}
function Test_Exist_BJ: Boolean; {測試是否存在本局}
function Test_Exist_ZJSJ: Boolean; {測試是否存在直接上級}
function Test_DWDM: Boolean; {測試是否存在單位代碼}
procedure Fit_PXM; {合理調整排序碼位置}
procedure Refresh_Data(l_DWDM: string); {刷新數據}
public
{ Public declarations }
end;
type
PView_Data = ^TView_Data;
TView_Data = record
DWDM: string;
end;
var
frm_gxdw: Tfrm_gxdw;
implementation
{$R *.DFM}
{關系單位數據維護模塊,對系統的省級關系單位數據表(TGS_GXDWSJB)進行讀寫。
1、采用數型結構顯示本局和直接上級、上級發貨、直接下級、客戶之間的關系。其中,
某單位可能具有多個屬性(如直接下級和客戶同時具備)。
2、生成直接下級的時候,采用數型結構確定其歸口關系。
3、增加排序號,實現各單位的統一排序
石玉琢 2001.09.26補}
{本程序中所有判斷條件如果符合要求,則返回True,否則返回False}
uses
tj_Chose_gkgx, Pub;
var
Edit_State: Integer;
Ever_Change: Boolean; {判斷是否曾經保存過數據庫,如果對數據庫進行了修改,則顯示樹型列表的時候需要重新讀取,否則,直接顯示便可以了。} {}
_GKGX: string;
_GKMC: string;
{===============================================================================}
procedure Tfrm_gxdw.FormCreate(Sender: TObject);
begin
DWMC.Caption := '使用單位:' + VG_UnitName;
qry_Table.Open;
Ever_Change := True;
Set_State(0);
end;
{-------------------------------------------------------------------------------}
{退出提示}
procedure Tfrm_gxdw.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if Edit_State <> 0 then
if CHQMsgBox('當前正處于添加/修改狀態,是否退出?', 2) = mrNo then
CanClose := False;
end;
{Select DWDM,DWMC,DWJC,DH,LXR,EMAIL,DZ,BZ,BJ,ZJSJ,SJFH,ZJXJ,KH,GYS,TXYW,JYYW,PXM,GKGX,FHDX,HOSTNAME From TGS_GXDWSJB
where DWDM>'0' order by GKGX}
{-------------------------------------------------------------------------------}
{設置界面控件的狀態}
procedure Tfrm_gxdw.Set_State(State: Integer);
var
i: Integer;
begin
case State of
0: {瀏覽模式} {}
begin
dbg_List.Enabled := True;
bbtn_Modify.Enabled := True;
bbtn_Add.Enabled := True;
bbtn_Del.Enabled := True;
bbtn_Save.Enabled := False;
bbtn_Cancel.Enabled := False;
pnl_ViewType.Enabled := True;
for i := 0 to pnl_Show.ControlCount - 1 do
if (pnl_Show.Controls[i] is TDBEdit) then
(pnl_Show.Controls[i] as TDBEdit).ReadOnly := True;
for i := 0 to gb_BDWGX.ControlCount - 1 do
if (gb_BDWGX.Controls[i] is TDBCheckBox) then
(gb_BDWGX.Controls[i] as TDBCheckBox).ReadOnly := True;
for i := 0 to gb_YWGX.ControlCount - 1 do
if (gb_YWGX.Controls[i] is TDBCheckBox) then
(gb_YWGX.Controls[i] as TDBCheckBox).ReadOnly := True;
bbtn_gkgx.Enabled := False;
end;
1, 2: {新增/修改模式} {}
begin
dbg_List.Enabled := False;
bbtn_Modify.Enabled := False;
bbtn_Add.Enabled := False;
bbtn_Del.Enabled := False;
bbtn_Save.Enabled := True;
bbtn_Cancel.Enabled := True;
if rb_ViewTable.Checked = False then
rb_ViewTable.Checked := True;
pnl_ViewType.Enabled := False;
for i := 0 to pnl_Show.ControlCount - 1 do
if (pnl_Show.Controls[i] is TDBEdit) then
(pnl_Show.Controls[i] as TDBEdit).ReadOnly := False;
for i := 0 to gb_BDWGX.ControlCount - 1 do
if (gb_BDWGX.Controls[i] is TDBCheckBox) then
(gb_BDWGX.Controls[i] as TDBCheckBox).ReadOnly := False;
for i := 0 to gb_YWGX.ControlCount - 1 do
if (gb_YWGX.Controls[i] is TDBCheckBox) then
(gb_YWGX.Controls[i] as TDBCheckBox).ReadOnly := False;
dbe_DWDM.SetFocus;
end;
end;
Edit_State := State; {完全設置結束后,設置全局變量,必須加在后面} {}
end;
{-------------------------------------------------------------------------------}
{使用列表方式顯示}
procedure Tfrm_gxdw.rb_ViewTableClick(Sender: TObject);
begin
tv_List.Visible := False;
dbg_List.Visible := True;
ds_GXDW.DataSet := qry_Table;
{定位到指定記錄}
if tv_List.Items.Count <> 0 then
if tv_List.Selected.Data <> nil then
qry_Table.Locate('DWDM', PView_Data(tv_List.Selected.Data)^.DWDM, []);
end;
{-------------------------------------------------------------------------------}
{使用樹型顯示}
procedure Tfrm_gxdw.rb_ViewTreeClick(Sender: TObject);
var
i: Integer;
begin
if Edit_State = 0 then
begin
if Ever_Change = True then
Create_List; {生成列表} {}
Ever_Change := False;
{定位到列表框中顯示的數據}
for i := 0 to tv_List.Items.Count - 1 do
begin
if tv_List.Items[i].Data <> nil then
if qry_Table.FieldByName('DWDM').AsString = PView_Data(tv_List.Items[i].Data)^.DWDM then
begin
tv_List.Selected := tv_List.Items[i];
break;
end;
end;
tv_List.Visible := True;
dbg_List.Visible := False;
ds_GXDW.DataSet := qry_tv;
end;
end;
{-------------------------------------------------------------------------------}
{滾動事件,用來顯示歸口等}
procedure Tfrm_gxdw.qry_TableAfterScroll(DataSet: TDataSet);
begin
if qry_Table.FieldByName('ZJXJ').AsString <> '1' then
begin
edt_GKGX.Text := '';
_GKGX := '';
_GKMC := '';
Exit;
end;
with qry_Table do
begin
if Copy(FieldByName('GKGX').AsString, 4, 3) = '000' then
with qry_Tmp do
begin
Close;
SQL.Text := 'Select DWMC From TGS_GXDWSJB where BJ=''1''';
Open;
edt_GKGX.Text := FieldByName('DWMC').AsString;
end
else
with qry_Tmp do
begin
Close;
SQL.Text := 'Select DWMC From TGS_GXDWSJB where GKGX=''' + Copy(qry_Table.FieldByName('GKGX').AsString, 1, 3) + '000''';
Open;
edt_GKGX.Text := FieldByName('DWMC').AsString;
end;
end;
_GKGX := qry_Table.FieldByName('GKGX').AsString;
_GKMC := edt_GKGX.Text;
end;
{-------------------------------------------------------------------------------}
{選擇歸口關系}
procedure Tfrm_gxdw.bbtn_gkgxClick(Sender: TObject);
begin
if Edit_State = 0 then Exit;
with TFrm_Chose_gkgx.Create(Application) do
begin
cur_dwdm := qry_Table.FieldByName('DWDM').AsString;
Old_gkgx := qry_Table.FieldByName('GKGX').AsString;
ShowModal;
if ModalResult = mrOk then
begin
if gkgx = Old_gkgx then Exit;
{如果原始代碼后三位為0,則表示可能含有下級,如果本級進行了修改,則需要處理下級關系}{}
if Copy(Old_gkgx, 4, 3) = '000' then
with qry_Tmp do
begin
Close;
SQL.Text := 'Select Count(*) as l_Count From TGS_GXDWSJB where SubStr(GKGX,4,3)<>''000'' and SubStr(GKGX,1,3)=''' + Copy(Old_gkgx, 1, 3) + '''';
Open;
if FieldByName('l_Count').AsInteger > 0 then
begin
CHQMsgBox('已經存在下級關系,不能再進行設置!');
Exit;
end;
end;
{符合條件,可以進行修改了}
qry_Table.Edit;
qry_Table.FieldByName('GKGX').AsString := gkgx;
edt_GKGX.Text := gkgx_MC;
end;
Free;
end;
end;
{==========================保存時判斷條件是否全部滿足===========================}
{測試是否為空}
function Tfrm_gxdw.Test_NULL: Boolean;
begin
with qry_Table do
begin
if FieldByName('DWDM').AsString = '' then
begin
CHQMsgBox('必須錄入單位代碼!');
dbe_DWDM.SetFocus;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -