📄 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 + -