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

📄 bas_itemclass.pas

📁 一个MRPII系统源代码版本
💻 PAS
字号:
unit Bas_ItemClass;

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Base_Outer, Menus, ExtPrintReport, Db, ActnList, AdODB, Grids, DBGridEh,
  StdCtrls, ExtCtrls, ComCtrls, ToolWin, jpeg;

Type
  TFrm_Bas_ItemClass = Class(TFrm_Base_Outer)
    Lbl_IteCode: TLabel;
    Edt_Ite_ItemCode: TEdit;
    Lbl_Name: TLabel;
    Lbl_Name_D: TLabel;
    Label1: TLabel;
    Lbl_RecordCount: TLabel;
    TlBtn_Hint: TToolButton;
    AdoQry_MainPClassCode: TStringField;
    AdoQry_MainClassCode: TStringField;
    AdoQry_MainClassName: TStringField;
    AdoQry_MainClassRemArk: TStringField;
    procedure Edt_Ite_ItemCodeExit(Sender: TObject);
    procedure Action1Execute(Sender: TObject);
    procedure Act_NewExecute(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure Act_ModifyExecute(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Act_HintExecute(Sender: TObject);
    procedure Act_DeleteExecute(Sender: TObject);
    procedure Action2Execute(Sender: TObject);
    procedure Edt_Ite_ItemCodeChange(Sender: TObject);
  private
    Lc_OldMaster:TStrinGlist;

    procedure InsertOldMaster(ItemCode:string); //把当前查询的父项插入
    procedure GetOldMaster;                     //根据历史的父项得到数据
    procedure SetPnl_Head(R_Code:string);
    procedure GetSlave(R_Code:string);
    function  PickMasterCode(R_InitCode:string):string;
    function  HaveSlave(R_Code:string):Boolean;
    function  MasterCodeUsable(R_Code:string):Boolean;
    procedure clearPnl_Head;
    procedure LocateToSlave(T_ItemCode:String);  //定位到子项代码
    { Private declarations }
  public
    procedure InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);Override;
    Function  SetDeleteSql:string;Override;
    procedure InitReport; Override;
    { Public declarations }
  end;

var
  Frm_Bas_ItemClass: TFrm_Bas_ItemClass;

implementation

uses Sys_Global,Bas_ItemClass_D;
{$R *.DFM}

procedure TFrm_Bas_ItemClass.SetPnl_Head(R_Code:string);
var
    T_Sql:string;
  T_Type:integer;
begin
    T_Sql:=
      'select * '+
      ' From ItemClass  '+
      'where ClassCode='''+R_Code+''' ';
    with AdoQry_Tmp do
    begin
      Close;
      SQL.clear;
      SQL.Add(T_Sql);
      Open;
      if not eof then
      begin
        if edt_ite_ItemCode.Text='' then
          lbl_Name_D.Caption :=''
          else
          Lbl_Name_D.Caption:=fieldbyname('ClassName').AsString;
      end;
    end;
end;

procedure TFrm_Bas_ItemClass.GetSlave(R_Code:string);
var
  T_Sql:string;
begin
    T_Sql:=
     'select * '+
     ' From ItemClass '+
     ' Where pClassCode ='''+R_Code+''' '+
     '  Order by ClassCode ';
    with AdoQry_Main do
    begin
      Close;
      SQL.clear;
      SQL.Add(T_Sql);
      open;
      //设置BOTTON的提示信息
    end;
    with AdoQry_tmp do
    begin
      Close;
      sql.Text :='select Count(*) recordCount '+
                 ' From ItemClass '+
                 ' Where pClassCode ='''+R_Code+''' ';
      open;
      Lbl_RecordCount.Caption:=fieldbyname('RecordCount').asstring;
    end;
end;

function TFrm_Bas_ItemClass.HaveSlave(R_Code:string):Boolean;
var
  T_Count:integer;
  T_Sql:string;
begin
  T_Sql:=
    'Select Count(*) as RecordCount '+
    'from Bom '+
    'where Ite_ItemCode='''+R_Code+'''';
  with AdoQry_Tmp do
  begin
    Close;
    SQL.clear;
    SQL.Add(T_Sql);
    open;
    T_Count:=fieldbyname('RecordCount').AsInteger;
    Close;
  end;
  if T_Count>0 then
    Result:=True
  else
    Result:=False;
end;

function TFrm_Bas_ItemClass.MasterCodeUsable(R_Code:string):Boolean;
var
  T_Count:integer;
  T_Sql:string;
begin
   T_Sql:=
    'Select Count(*) as RecordCount '+
    'from ItemClass '+
    'where pClassCode='''+R_Code+''' ';
    with AdoQry_Tmp do
    begin
      Close;
      SQL.clear;
      SQL.Add(T_Sql);
      open;
      T_Count:=fieldbyname('RecordCount').AsInteger;
      Close;
    end;
   if T_Count>0 then
     Result:=True
   else
     Result:=False;
end;

function TFrm_Bas_ItemClass.PickMasterCode(R_InitCode:string):String;
begin
 //根据InitCode调用QuickPick
  Result:=GetCodeHint(
        AdoQry_Main,
        'ClassName','分类描述',
        'pClassCode','分类父代码',
        'ItemClass',R_InitCode,'');
end;

procedure TFrm_Bas_ItemClass.InitForm(AdOConnection:TAdOConnection;ReadOnly:Boolean);
var
  T_ItemCode:string;
begin
  inherited;
  T_ItemCode:='';
  SelectFromSQL:='select * from ItemClass where pClassCode='''+''+'''';
  getdata;
  with AdoQry_tmp do
  begin
    Close;
    sql.Text :='select Count(*) recordCount '+
               ' From ItemClass '+
               ' Where pClassCode ='''+''+''' ';
    open;
    Lbl_RecordCount.Caption:=fieldbyname('RecordCount').asstring;
  end;
  Frm_Sys_Detail:=TFrm_Bas_ItemClass_D.Create(Application);

end;

function TFrm_Bas_ItemClass.SetDeleteSql:string;
var
  T_ItemCode:string;
  Tmp_Str:String;
begin
  //先插入到日志文件中
  Tmp_Str:='';
  T_ItemCode:=AdoQry_Main.fieldbyname('ClassCode').AsString;

  Tmp_Str:=Tmp_Str+
           'Delete from ItemClass '+
           'where ClassCode='''+AdoQry_Main.fieldbyname('ClassCode').Asstring+''' ';
  Result:=Tmp_Str;
end;

procedure TFrm_Bas_ItemClass.Edt_Ite_ItemCodeExit(Sender: TObject);
var
  T_ItemCode:string;
begin
    T_ItemCode:=Trim(Edt_Ite_ItemCode.text);
    if MasterCodeUsable(T_ItemCode) then
    begin
      InsertOldMaster(T_ItemCode);
      SetPnl_Head(T_ItemCode);
      GetSlave(T_ItemCode);
    end
    else
    begin
      DispInfo('该父项代码不存在!',1);
      Edt_Ite_ItemCode.Text :='';
      TWinControl(Sender).SetFocus;
      Abort;
    end;
  inherited;
  if edt_ite_ItemCode.Text ='' then
     lbl_Name_D.Caption :='';
end;

procedure TFrm_Bas_ItemClass.Action1Execute(Sender: TObject);
var T_ItemCode:string;
begin
//  inherited;
  if not AdoQry_Main.eof then
  begin
    T_ItemCode:=AdoQry_Main.fieldbyname('ClassCode').AsString;
    Edt_Ite_ItemCode.Text:=t_ItemCode;
//    InsertOldMaster(T_ItemCode);

    SetPnl_Head(T_ItemCode);
    GetSlave(T_ItemCode);
  end;
end;

procedure TFrm_Bas_ItemClass.Act_NewExecute(Sender: TObject);
begin
  //强制类型转换
  TFrm_Bas_ItemClass_D(Frm_Sys_Detail).Lbl_MasterCode.Caption :=Edt_Ite_ItemCode.Text;
  if not AdoQry_Main.Eof then
  begin
    TFrm_Bas_ItemClass_D(Frm_Sys_Detail).edt_ItemCode.Text :=AdoQry_Main.fieldbyname('ClassCode').AsString ;
    TFrm_Bas_ItemClass_D(Frm_Sys_Detail).edt_ItemName.Text :=AdoQry_Main.fieldbyname('ClassName').AsString ;
  end;
  //判断父项是否为资源
  inherited;
  GetSlave(Edt_Ite_ItemCode.Text);
  LocateToSlave(TFrm_Bas_ItemClass_D(Frm_Sys_Detail).edt_ItemCode.Text);
end;

procedure TFrm_Bas_ItemClass.FormCreate(Sender: TObject);
begin
  inherited;
  ExtendCaption:=False;
  Lc_OldMaster:=TStrinGlist.Create;
  Lbl_Name_D.Caption:='';
  Lbl_RecordCount.Caption:='';
  TlBtn_Hint.left:=TlBtn_Help.left+TlBtn_Help.Width;
end;

procedure TFrm_Bas_ItemClass.FormActivate(Sender: TObject);
begin
  inherited;
  TlBtn_filter.Action:=Action1;
  ToolButton6.Action:=Action2;
  Act_Filter.Enabled:=False;
  Act_New.ImageIndex:=4;
 
end;

procedure TFrm_Bas_ItemClass.clearPnl_Head;
begin
  Lbl_Name_D.Caption:='';
end;

procedure TFrm_Bas_ItemClass.Act_ModifyExecute(Sender: TObject);
begin
  //强制类型转换
  if not AdoQry_Main.Eof then
  begin
    TFrm_Bas_ItemClass_D(Frm_Sys_Detail).Lbl_MasterCode.Caption:=Edt_Ite_ItemCode.Text;
    TFrm_Bas_ItemClass_D(Frm_Sys_Detail).lbl_MasterName.Caption :=lbl_Name_D.Caption ;
    inherited;
    if Frm_Sys_Detail.ModalResult=MrOk then
    begin
      GetSlave(Edt_Ite_ItemCode.Text);
      LocateToSlave(TFrm_Bas_ItemClass_D(Frm_Sys_Detail).Edt_ItemCode.Text);
    end;
  end;
end;

procedure TFrm_Bas_ItemClass.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  inherited;
  Action:=CaFree;
end;

procedure TFrm_Bas_ItemClass.Act_HintExecute(Sender: TObject);
begin
  inherited;
  if ActiveControl.Name='Edt_Ite_ItemCode' then
  begin
    Edt_Ite_ItemCode.Text:=PickMasterCode(Edt_Ite_ItemCode.Text);
    Edt_Ite_ItemCode.SetFocus;
  end;
end;

procedure TFrm_Bas_ItemClass.Act_DeleteExecute(Sender: TObject);
begin
  if activecontrol.Name='Edt_Ite_ItemCode' then abort;
  with AdoQry_tmp do
  begin
    Close;
    sql.Text :='select * from ItemClass where pClassCode='''+AdoQry_Main.fieldbyname('ClassCode').asstring+''' ';
    open;
    if not eof then
    begin
      DispInfo('该分类存在子项分类,不允许删除!',1);
      abort;
    end;
  end;
  inherited;
  lbl_recordCount.Caption:=inttostr(AdoQry_Main.recordCount);
end;

procedure TFrm_Bas_ItemClass.LocateToSlave(T_ItemCode: String);
begin
  if AdoQry_Main.Active then
    AdoQry_Main.Locate('ClassCode',T_ItemCode,[]);
end;

procedure TFrm_Bas_ItemClass.InsertOldMaster(ItemCode: string);
begin
  Lc_OldMaster.Add(ItemCode);
//  ListBOX1.ItemS:=lC_OLDMaster;
end;

procedure TFrm_Bas_ItemClass.GetOldMaster;
begin
  if Lc_OldMaster.Count>1 then
  begin
    if Lc_OldMaster.Strings[Lc_OldMaster.Count-1]=Edt_Ite_ItemCode.Text then
    begin
      Lc_OldMaster.Delete(Lc_OldMaster.Count-1);
    end;
  end;

//  if Lc_OldMaster.Count<>0 then
//  begin
//    Edt_Ite_ItemCode.Text:=Lc_OldMaster.Strings[Lc_OldMaster.Count-1];
    with AdoQry_tmp do
    begin
      Close;
      sql.Text :='select * from ItemClass where ClassCode='''+edt_ite_ItemCode.Text+'''';
      open;
      edt_ite_ItemCode.Text :=fieldbyname('pClassCode').asstring;
    end;
    SetPnl_Head(Edt_Ite_ItemCode.Text);
    GetSlave(Edt_Ite_ItemCode.Text);
    //删除旧的记录
{    if Lc_OldMaster.Count<>1 then
    begin
      Lc_OldMaster.Delete(Lc_OldMaster.Count-1);
    end;  }
//    ListBOX1.ItemS:=lC_OLDMaster;
//  end;
end;

procedure TFrm_Bas_ItemClass.Action2Execute(Sender: TObject);
begin
  inherited;
  GetOldMaster;
end;
procedure TFrm_Bas_ItemClass.InitReport;
begin
  inherited;
  ExtPrintReport.Subtitle2:='  '+Lbl_iteCode.Caption+' '+Edt_ite_ItemCode.Text+' '+Lbl_Name.Caption+' '+lbl_Name_D.Caption ;
end;

procedure TFrm_Bas_ItemClass.Edt_Ite_ItemCodeChange(Sender: TObject);
begin
  inherited;
  if edt_ite_ItemCode.Text='' then
     lbl_Name_D.Caption :='';
end;

end.

⌨️ 快捷键说明

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