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

📄 bas_qry_bomtreeview.pas

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

unit Bas_Qry_BomTreeview;

Interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Base_Panel, ActnList, Db, AdODB, ExtCtrls, ComCtrls, ToolWin, StdCtrls,
  jpeg;

Type
  TFrm_Bas_Qry_BomTreeview = Class(TFrm_Base_Panel)
    Treeview: TTreeview;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Label19: TLabel;
    Label20: TLabel;
    AdoQry_Main: TAdoQuery;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    Action4: TAction;
    Panel1: TPanel;
    Label21: TLabel;
    Edt_ItemCode: TEdit;
    Label22: TLabel;
    Lbl_ItemName: TLabel;
    CheckBox1: TCheckBox;
    procedure TreeviewClick(Sender: TObject);
    procedure TreeviewEnter(Sender: TObject);
    procedure TreeviewKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TreeviewExpanded(Sender: TObject; Node: TTreeNode);
    procedure Edt_ItemCodeExit(Sender: TObject);
    procedure Action4Execute(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    oldstr:string;
    FChange:boolean;                                       //是否选择最终产品的Bom结构;
    function HaveSlave(r_Code:string):boolean;
    procedure Expand(node:TtreeNode);
    procedure ExpandNext(aNode:TtreeNode;MasterCode:string);
    procedure SetMasterPnl(ItemCode:string);
    procedure SetSlavePnl(ite_ItemCode,ItemCode:string);
    procedure clearLabel;
    function SlaveCodeUsable(R_ItemCode:String):Boolean;
    function PickSlaveCode(InitCode:String):string;
    procedure SetPnl_Head(ItemCode:String);                    //显示输入物料其它属性 ;
  public
    { Public declarations }
    procedure InitForm(AdoConnection:TAdoConnection);
    //function haveslave(r_Code:string):boolean;
  end;

var
  Frm_Bas_Qry_BomTreeview: TFrm_Bas_Qry_BomTreeview;

implementation

uses Sys_Global;

{$R *.DFM}

{ TFrm_Base_BomTreeview }

procedure TFrm_Bas_Qry_BomTreeview.expandnext(aNode: Ttreenode;
  MasterCode: string);
var
  Mynode:Ttreenode;
  Icstring:string;
begin
  try
    Screen.Cursor:=CrSQLWait;
    with AdoQry_Main do
    begin
      Close;
      if MasterCode<>'' then
      begin
        sql.clear;
        sql.Add('select Item.ItemCode,'+
                '       Item.ItemName '+
                'from Bom left join (select ItemCode,ItemName from Item where ItemUsable=1) Item '+
                '     on Bom.ItemCode=Item.ItemCode '+
                'where Bom.ite_ItemCode='''+MasterCode+''' '+
                'Order by Bom.ItemCode ');
      end
      else
      begin
        sql.clear;
        sql.Add('select Item.ItemCode,'+
                '       Item.ItemName '+
                'from Bom left join (select ItemCode,ItemName from Item where ItemUsable=1) Item '+
                '     on Bom.ItemCode=Item.ItemCode '+
                'where Bom.ite_ItemCode is null '+
                'Order by Bom.ItemCode ');
        end;
        open;
        while not eof do
        begin
          IcString:=fieldbyname('ItemCode').asstring+' '+fieldbyname('ItemName').asstring;
          MyNode:=Treeview.Items.Addchild(aNode,IcString);
          IcString:=fieldbyname('ItemCode').asstring;
          if HaveSlave(Icstring) then
            Treeview.Items.Addchild(MyNode,'');
          next;
        end;
    end;
  finally
    Screen.Cursor:=crDefault;
  end;
end;

procedure TFrm_Bas_Qry_BomTreeview.initform(AdoConnection: TAdoConnection);
begin
  SetDBConnect(AdoConnection);
  AdoQry_Main.Connection:=AdoConnection;
  checkbox1.Checked :=False;
  //InitTreeview;
  FChange:=False;
  oldstr:='';
  clearLabel;
end;


procedure TFrm_Bas_Qry_BomTreeview.SetMasterPnl(ItemCode: string);
begin
  if ItemCode='' then
  begin
    Label2.Caption:='';
    Label4.Caption:='';
    Label6.Caption:='';
  end
  else
  begin
    with AdoQry_Tmp do
    begin
      Close;
      sql.clear;
      sql.Add('select Item.ItemCode,'+
          ' Item.ItemName, '+
          ' Uom.UomName '+
          'from Item left join Uom '+
          ' on Item.UomCode=Uom.UomCode '+
          'where Item.ItemCode='''+ItemCode+'''');
      open;
      label2.Caption:=fieldbyname('ItemCode').asstring;
      label4.Caption:=fieldbyname('ItemName').asstring;
      label6.Caption:=fieldbyname('UomName').asstring;
    end;
  end;
end;

procedure TFrm_Bas_Qry_BomTreeview.setSlavePnl(ite_ItemCode,ItemCode:string);
var
  s:integer;
  str:string;
begin
  with AdoQry_Tmp do
  begin
    Close;
    sql.clear;
    if ite_ItemCode<>'' then
    begin
      sql.Add('select Item.ItemCode,'+
          ' Item.ItemName, '+
          ' Uom.UomName ,'+
          ' Bom.BomItemType ,'+
          ' Bom.Bomqty ,'+
          ' Bom.BomScrAp_Percent ,'+
          ' Bom.Bomstatus '+
         ' from Item left join Uom '+
          ' on Item.UomCode=Uom.UomCode '+
          ' left join Bom '+
          ' on Item.ItemCode=Bom.ItemCode '+
          ' where Bom.ItemCode='''+ItemCode+''' '+
          '   and Bom.ite_ItemCode='''+ite_ItemCode+'''');
    end
    else
    begin
      sql.Add('select Item.ItemCode,'+
          ' Item.ItemName, '+
          ' Uom.UomName ,'+
          ' Bom.BomItemType ,'+
          ' Bom.Bomqty ,'+
          ' Bom.BomScrAp_Percent ,'+
          ' Bom.Bomstatus '+
         ' from Item left join Uom '+
          ' on Item.UomCode=Uom.UomCode '+
          ' left join Bom '+
          ' on Item.ItemCode=Bom.ItemCode '+
          ' where Bom.ItemCode='''+ItemCode+''' '+
          '   and Bom.ite_ItemCode is null ');
    end;
    open;
    Label8.Caption:=fieldbyname('ItemCode').asstring;
    Label10.Caption:=fieldbyname('ItemName').asstring;
    Label12.Caption:=fieldbyname('UomName').asstring;
    //Label14.Caption:=fieldbyname('BomItemType').asstring;
    s:=fieldbyname('BomItemType').asinteger;
    case s of
      0: str:='普通物料';
      1: str:='工作中心';
      2: str:='工具';
      3: str:='结构虚项';
      4: str:='副产品';
      5: str:='成本中心';
      6: str:='替代虚项';
    end;
    Label14.Caption:=str;
    Label16.Caption:=floattostr(fieldbyname('BomQty').asfloat);
    Label18.Caption:=FormatFloat('0.#####',fieldbyname('BomScrAp_Percent').asfloat)+'%';
    s:=fieldbyname('Bomstatus').asinteger;
    case s of
      0: str:='正常';
      1: str:='未生效';
      2: str:='暂定';
      3: str:='暂停使用';
    end;
    Label20.Caption:=str;
end;

end;

procedure TFrm_Bas_Qry_BomTreeview.TreeviewClick(Sender: TObject);
var
  SelNode: TTreeNode;
  ParentNode: TTreeNode;
  SlaveCode,MasterCode:string;
begin
  inherited;
  SelNode:=Treeview.selected ;
  if SelNode<>nil then
  begin
    SlaveCode:=Trim(copy(SelNode.text,1,pos(' ',SelNode.text)-1));
    ParentNode :=SelNode.Parent;
    if ParentNode<>nil then
      MasterCode:=Trim(copy(ParentNode.text,1,pos(' ',ParentNode.text)-1))
    else
      MasterCode:=Trim(Edt_ItemCode.text);
    SetMasterPnl(MasterCode);
    SetSlavePnl(MasterCode,SlaveCode);
  end;
end;

function TFrm_Bas_Qry_BomTreeview.haveslave( r_Code: string): boolean;
begin
  with AdoQry_Tmp do
   begin
     Close;
     sql.clear;
     sql.Add('select Count(*) as a'+
        ' from Bom '+
        ' where ite_ItemCode='''+r_Code+'''');
     open;
     if fieldbyname('a').Value>0 then
       Result:=True
     else
       Result:=False;
   end;
end;

procedure TFrm_Bas_Qry_BomTreeview.Expand(Node: TTreeNode);
var
  S:string;
begin
  if (node.haSchildren) and (node.Item[0].text='') then
  begin
    node.Item[0].Delete;
    s:=Trim(copy(node.text,1,pos(' ',node.text)-1));
    Expandnext(Node,S);
  end;
end;

procedure TFrm_Bas_Qry_BomTreeview.clearLabel;
begin
  Label2.Caption:='';
  Label4.Caption:='';
  Label6.Caption:='';
  Label8.Caption:='';
  Label10.Caption:='';
  Label12.Caption:='';
  Label14.Caption:='';
  Label16.Caption:='';
  Label18.Caption:='';
  Label20.Caption:='';
end;
procedure TFrm_Bas_Qry_BomTreeview.TreeviewEnter(Sender: TObject);
begin
  inherited;
  Treeview.ReadOnly:=True;
end;

procedure TFrm_Bas_Qry_BomTreeview.TreeviewKeyUp(Sender: TObject;
  var Key: Word; Shift: TShiftState);
var
  SelNode: TTreeNode;
  ParentNode: TTreeNode;
  SlaveCode,MasterCode:string;
begin
  inherited;
  SelNode:=Treeview.selected ;
  if SelNode<>nil then
  begin
    SlaveCode:=Trim(copy(SelNode.text,1,pos(' ',SelNode.text)-1));
    ParentNode :=SelNode.Parent;
    if ParentNode<>nil then
      MasterCode:=Trim(copy(ParentNode.text,1,pos(' ',ParentNode.text)-1))
    else
      MasterCode:=Trim(Edt_ItemCode.text);
    SetMasterPnl(MasterCode);
    SetSlavePnl(MasterCode,SlaveCode);
  end;
end;


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

procedure TFrm_Bas_Qry_BomTreeview.TreeviewExpanded(Sender: TObject;
  Node: TTreeNode);
begin
  inherited;
  Expand(Node);
end;

procedure TFrm_Bas_Qry_BomTreeview.Edt_ItemCodeExit(Sender: TObject);
var
  LocalNode:TtreeNode;
begin
  inherited;
  if  Trim(Edt_ItemCode.text)=oldstr then
    abort;
  if Trim(Edt_ItemCode.text)='' then
  begin
    if ( activecontrol.Name='CheckBox1') then
      abort;
  end;
  if not SlaveCodeUsable(Trim(Edt_ItemCode.Text)) then
  begin
    DispInfo('代码没找到,请输入!',1);
    Edt_ItemCode.SetFocus;
    Abort;
  end;
  SetPnl_Head(Trim(Edt_ItemCode.text));
  Lbl_ItemName.Refresh;
  LocalNode:=nil;
  Treeview.Items.clear ;
  //Treeview.Items.AddFirst(LocalNode,Trim(Edt_ItemCode.text)) ;
  ExpandNext(LocalNode,Trim(Edt_ItemCode.text));
  oldstr:=Trim(Edt_ItemCode.text);
  clearLabel;
  ControlBar.SetFocus ;
end;

function TFrm_Bas_Qry_BomTreeview.SlaveCodeUsable(
  R_ItemCode: String): Boolean;
var
  T_Count:integer;
  T_Sql:string;
begin
   T_Sql:=
    'Select Count(*) as RecordCount '+
    'from Item '+
    'where ItemCode='''+R_ItemCode+''' '+
    '  and ItemUsable=1';
    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_Qry_BomTreeview.PickSlaveCode(InitCode: String): string;
begin
  if FChange then
    Result:=GetCodeHint(
        AdoQry_Tmp,
        'ItemName','项目描述',
        'ItemCode','项目代码',
        'Item',InitCode,'ItemCode in (select ItemCode from Bom where Ite_ItemCode is null and ItemUsable=1)')
   else
    Result:=GetCodeHint(
            AdoQry_Tmp,
            'ItemName','项目描述',
            'ItemCode','项目代码',
            'Item',InitCode,'ItemUsable=1');

end;

procedure TFrm_Bas_Qry_BomTreeview.Action4Execute(Sender: TObject);
begin
  inherited;
  if ActiveControl.Name='Edt_ItemCode' then
  begin
    Edt_ItemCode.Text:=PickSlaveCode(Trim(Edt_ItemCode.Text));
    Edt_ItemCode.SetFocus;
  end;
end;

procedure TFrm_Bas_Qry_BomTreeview.SetPnl_Head(ItemCode: String);
begin
  with AdoQry_Tmp do
  begin
    Close;
    Sql.clear;
    Sql.Add('select Item.ItemName ,'+
                    ' Uom.UomName,'+
                    ' Item.ItemShortName,'+
                    ' ItemType '+
                    ' from Item left join Uom '+
                    ' on Item.UomCode=Uom.UomCode '+
                    ' where  ItemCode= '+''''+Trim(ItemCode)+'''');
    Prepared;
    open;
    Lbl_ItemName.Caption:=fieldbyname('ItemName').AsString;
  end;
end;

procedure TFrm_Bas_Qry_BomTreeview.CheckBox1Click(Sender: TObject);
begin
  inherited;
  if checkbox1.State=cbChecked	 then
    FChange:=True
  else
    FChange:=False;
end;

procedure TFrm_Bas_Qry_BomTreeview.FormDestroy(Sender: TObject);
begin
  inherited;
  Frm_Bas_Qry_BomTreeview:=nil;
end;

end.

⌨️ 快捷键说明

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