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

📄 ubom.pas

📁 进销存以及BOM管理,SQl Server数据库程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -