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