📄 ubom.pas
字号:
unit ubom;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Mask, DBCtrls, wwdblook, Wwdbdlg, ActnList, DB, ADODB, dialogs,
wwDialog, wwidlg, ComCtrls, ToolWin, ImgList, Grids, Wwdbigrd, Wwdbgrid,
MDIBase, ExtCtrls, StdCtrls, fcTreeView, Base, Buttons;
type
TfrmBaseBOM = class(TfrmMDIBase)
Panel1: TPanel;
Label1: TLabel;
Label2: TLabel;
Panel2: TPanel;
Panel3: TPanel;
QBOM: TADOQuery;
dsBOM: TDataSource;
QProduct: TADOQuery;
dsProduct: TDataSource;
spBOM: TADOStoredProc;
dsspBom: TDataSource;
spBOMfParentID: TIntegerField;
spBOMfPartID: TIntegerField;
spBOMname: TWideStringField;
QIsExists: TADOQuery;
dsBomParent: TDataSource;
Splitter1: TSplitter;
ALToolbar: TActionList;
acNew: TAction;
acModify: TAction;
acDelete: TAction;
acSave: TAction;
acCancel: TAction;
acPrint: TAction;
acExit: TAction;
acAddLine: TAction;
acCopy: TAction;
acDelLine: TAction;
QBomParent: TADOQuery;
acIsExists: TAction;
wwLookupDlgBomParent: TwwLookupDialog;
ToolBar: TToolBar;
tbtNew: TToolButton;
tbtModify: TToolButton;
tbtDelete: TToolButton;
tbtDivider1: TToolButton;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
tbtSave: TToolButton;
tbtCancel: TToolButton;
tbtDivider3: TToolButton;
tbtExit: TToolButton;
acFullExpand: TAction;
acFullCollapse: TAction;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
spBomPartCheck: TADOStoredProc;
Label23: TLabel;
Label24: TLabel;
Label25: TLabel;
acOpen: TAction;
tbtOpen: TToolButton;
ToolButton8: TToolButton;
DBText1: TDBText;
DBText2: TDBText;
DBText3: TDBText;
DBText4: TDBText;
DBText5: TDBText;
QCanDelete: TADOQuery;
wwDBGrid1: TwwDBGrid;
Panel5: TPanel;
pnlBOMParentView: TPanel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
DBEdit2: TDBEdit;
pnlBOMParentAppend: TPanel;
Label9: TLabel;
Label18: TLabel;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
edtName: TEdit;
edtSpec: TEdit;
edtColor: TEdit;
edtUnit: TEdit;
edtLevel: TEdit;
Splitter2: TSplitter;
Panel6: TPanel;
Label13: TLabel;
DBMemo2: TDBMemo;
QParent: TADOQuery;
dsParent: TDataSource;
CDeleteBom: TADOCommand;
ToolButtonImages: TImageList;
dxDBTreeBom: TfcTreeView;
edtcode: TEdit;
ImageListTree: TImageList;
QBOMfid: TAutoIncField;
QBOMfparentid: TIntegerField;
QBOMfpartid: TIntegerField;
QBOMfunit: TWideStringField;
QBOMfqty: TBCDField;
QBOMfbegintime: TDateTimeField;
QBOMfendtime: TDateTimeField;
QBOMfnotes: TWideStringField;
QProductfID: TAutoIncField;
QProductfCode: TWideStringField;
QProductfName: TWideStringField;
QProductfdesc: TWideStringField;
QProductfUnit: TWideStringField;
QProductfColor: TWideStringField;
QProductfLevel: TWideStringField;
QProductfType: TWideStringField;
QBomParentfid: TIntegerField;
QBomParentfcode: TWideStringField;
QBomParentfname: TWideStringField;
QBomParentfdesc: TWideStringField;
QBomParentfColor: TWideStringField;
QBomParentfLevel: TWideStringField;
QBOMfpartcode: TStringField;
QBOMfpartname: TStringField;
QBOMfpartdesc: TStringField;
QBOMfpartunit: TStringField;
QBOMfpartcolor: TStringField;
QBOMfpartlevel: TStringField;
wwDBLookupCombo1: TwwDBLookupCombo;
SpeedButton1: TSpeedButton;
procedure acPostExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure acNewExecute(Sender: TObject);
procedure acSaveExecute(Sender: TObject);
procedure acCancelExecute(Sender: TObject);
procedure acExitExecute(Sender: TObject);
procedure acAddLineExecute(Sender: TObject);
procedure acDelLineExecute(Sender: TObject);
procedure QBOMAfterInsert(DataSet: TDataSet);
procedure dsBOMStateChange(Sender: TObject);
procedure dsspBomDataChange(Sender: TObject; Field: TField);
procedure FormCreate(Sender: TObject);
procedure QBOMBeforePost(DataSet: TDataSet);
procedure QBOMfPartIDValidate(Sender: TField);
procedure edtCodeKeyPress(Sender: TObject; var Key: Char);
procedure acFullExpandExecute(Sender: TObject);
procedure acFullCollapseExecute(Sender: TObject);
procedure acOpenExecute(Sender: TObject);
procedure acDeleteExecute(Sender: TObject);
// procedure edtCodeButtonClick(Sender: TObject; AbsoluteIndex: Integer);
procedure acModifyExecute(Sender: TObject);
procedure dxDBTreeBomChange(TreeView: TfcCustomTreeView;
Node: TfcTreeNode);
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
iParentID :Integer; //当前点的父类ID
iBomID: Integer; //当前选择的BOM基类ID
iPartID :Integer; //当前的子件
bCanNew,bCanModify,bCanDelete:Boolean;
procedure SetControlEnabled();
procedure BomRequery(ParentID:Integer);
procedure settextvalue(ParentID:Integer);
Procedure GetPermiss ; virtual; {得到当前用户的权限}
function foundnodebyid(T:Tfctreeview;id:integer):Tfctreenode;
function loadTree(Atreeview:Tfctreeview):integer;
function getnodeid(Atree:Tfctreeview;Inode:Tfctreenode):integer;
public
{ Public declarations }
end;
var
frmBaseBOM: TfrmBaseBOM;
implementation
uses Data, uProductFilter, Global;
{$R *.dfm}
//得到用户对当前窗体的操作权限
{procedure TfrmBaseBom.GetPermiss;
begin
//初始化变量
bCanNew :=G_bAdmin;
bCanModify :=G_bAdmin;
bCanDelete :=G_bAdmin;
if G_bAdmin then //判断是否为超级用户
begin
bCanNew :=G_bAdmin;
bCanModify :=G_bAdmin;
bCanDelete :=G_bAdmin;
end
else //否则查找当前用户是否有当前窗体的操作权限
with dmClient.spUserRight do
if Locate('fModuleID;fActionName',varArrayOf([iModuleID,sFunctionName]),[]) then
begin
bCanNew := FieldByName('fInsert').AsBoolean;
bCanModify := FieldByName('fEdit').AsBoolean;
bCanDelete := FieldByName('fDelete').AsBoolean;
end
end; }
procedure TfrmBaseBom.BomRequery(ParentID:integer);
begin
//清空BOM里的数据
With QBom do
begin
parameters.ParamValues['ParentID']:=ParentID;
if active then Requery Else Open;
end;
With QParent do
begin
parameters.ParamValues['ParentID']:=ParentID;
if active then Requery Else Open;
end;
loadTree(dxDBTreeBom);
end;
Procedure TfrmBaseBom.SetControlEnabled();
begin
acCancel.Enabled := acSave.Enabled ;
{acNew.Enabled := bCanNew and Not acSave.Enabled ;
acDelete.Enabled := bCanDelete and Not acSave.Enabled ;
acModify.Enabled := bCanModify and Not acSave.Enabled ;
acAddLine.Enabled := acSave.Enabled ;
acDelLine.Enabled := acSave.Enabled ;
wwDBGrid1.ReadOnly := Not acSave.Enabled ;
dbMemo2.ReadOnly := Not acSave.Enabled ; }
acNew.Enabled := Not acSave.Enabled ;
acDelete.Enabled := Not acSave.Enabled ;
acModify.Enabled := Not acSave.Enabled ;
acAddLine.Enabled := acSave.Enabled ;
acDelLine.Enabled := acSave.Enabled ;
wwDBGrid1.ReadOnly := Not acSave.Enabled ;
dbMemo2.ReadOnly := Not acSave.Enabled ;
{设置树的导航有效性}
dxDBTreeBom.Enabled := Not acSave.Enabled ;
acFullExpand.Enabled := Not acSave.Enabled ;
acFullCollapse.Enabled :=Not acSave.Enabled ;
acOpen.Enabled := Not acSave.Enabled ;
end;
procedure TfrmBaseBOM.acPostExecute(Sender: TObject);
begin
inherited;
if QBOM.State in [dsInsert,dsEdit] then
QBOM.Post ;
end;
procedure TfrmBaseBOM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
inherited;
frmBaseBOM:=nil;
end;
procedure TfrmBaseBOM.acNewExecute(Sender: TObject);
begin
inherited;
iBomID:=0;
iParentID:=iBomID;
//清空DbTree
With spBom do
begin
parameters.ParamValues['@intProdID']:=iBomID;
if Active then Requery else Open;
end;
dsBomParent.Enabled :=False;
//清空BOM里的数据
BomRequery(iParentID);
//置编辑风格
edtCode.Text := '' ;
edtName.Text := '' ;
edtSpec.Text := '' ;
edtLevel.Text := '' ;
edtColor.Text := '' ;
edtUnit.Text := '' ;
pnlBOMParentView.Visible :=False;
pnlBOMParentAppend.Visible :=True;
QBOM.Append;
edtCode.SetFocus ;
end;
procedure TfrmBaseBOM.acSaveExecute(Sender: TObject);
begin
inherited;
Screen.Cursor :=CrHourGlass;
try
QBom.UpdateBatch();
//设置可操作状态
acSave.Enabled :=False;
SetControlEnabled();
Except
On E:Exception do
begin
Screen.Cursor :=crDefault;
Raise Exception.Create('存盘失败!'+#13#10+E.Message)
end
End;
//重新检索DbTree
With spBom do
begin
if Active then Requery else Open;
Locate('fparentID;fPartID',VarArrayOf([iBomID,iPartID]),[]);
end;
//
pnlBOMParentView.Visible :=True;
pnlBOMParentAppend.Visible :=False;
BomRequery(iBomID);
Screen.Cursor :=crDefault;
end;
procedure TfrmBaseBOM.acCancelExecute(Sender: TObject);
begin
inherited;
if messagedlg('您确定要取消修改吗?',mtWarning,[mbOk,mbCancel],0)=mrOk then
begin
QBom.CancelBatch();
//设置可操作状态
acSave.Enabled :=False;
SetControlEnabled();
//
pnlBOMParentView.Visible :=True;
pnlBOMParentAppend.Visible :=False;
end;
end;
procedure TfrmBaseBOM.acExitExecute(Sender: TObject);
begin
inherited;
Close;
end;
procedure TfrmBaseBOM.acAddLineExecute(Sender: TObject);
begin
inherited;
QBom.Append ;
end;
procedure TfrmBaseBOM.acDelLineExecute(Sender: TObject);
begin
inherited;
if QBom.RecordCount >0 then
if messagedlg('您确定要删除当前子件吗?',mtWarning,[mbOk,mbCancel],0)=mrOk then
QBom.Delete ;
end;
procedure TfrmBaseBOM.QBOMAfterInsert(DataSet: TDataSet);
begin
inherited;
//设定父ID
QBOM.fieldbyName('fParentID').AsInteger := iParentID;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -