⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tj_gxdw.pas

📁 省级集邮品管理ERP
💻 PAS
📖 第 1 页 / 共 3 页
字号:

{*******************************************************}
{                                                       }
{                     关系单位管理                      }
{                                                       }
{            中软金马公司版权所有。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 + -