📄 ubom.pas
字号:
end;
procedure TfrmBaseBOM.dsBOMStateChange(Sender: TObject);
begin
inherited;
{设置功能按钮的有效性}
if QBOM.State in [dsInsert,dsEdit] then
begin
acSave.Enabled :=True;
SetControlEnabled;
end;
end;
procedure TfrmBaseBOM.dsspBomDataChange(Sender: TObject; Field: TField);
begin
inherited;
acFullExpand.Enabled := Not Varisnull(spBom.FieldValues['fParentID']);
acFullCollapse.Enabled := acFullExpand.Enabled;
end;
procedure TfrmBaseBOM.FormCreate(Sender: TObject);
begin
inherited;
//GetPermiss;
SetControlEnabled;
dsBomParent.Enabled :=False;
if Not QBomParent.Active then QBomParent.Open ;
if Not QBom.Active then QBom.Open ;
end;
procedure TfrmBaseBOM.QBOMBeforePost(DataSet: TDataSet);
begin
inherited;
if varisnull(QBom.FieldValues['fPartID']) then
begin
messagedlg('请指定一个子件!',mtError,[mbOk],0);
Abort;
end;
iPartID:= QBom.FieldbyName('fPartID').asInteger;
end;
procedure TfrmBaseBOM.QBOMfPartIDValidate(Sender: TField);
begin
inherited;
{检验子件是否合格}
if (Sender as TField).AsInteger = iParentID then
begin
MessageDlg('不能与父件相同!',mtError,[mbOk],0);
Abort;
end;
With spBomPartCheck do
Begin
parameters.ParamValues['@ParentID']:=iParentID;
parameters.ParamValues['@PartID']:=(Sender as TField).AsInteger;
ExecProc;
end;
Case spBomPartCheck.Parameters.ParamValues['@RETURN_VALUE'] of
1: //1.当前父件已有此子件
begin
MessageDlg('当前子件已经存在!',mtError,[mbOk],0);
Abort;
end;
2: //1.当前子件是当前父件的父类
begin
MessageDlg('选择的子件是当前产品的父类!',mtError,[mbOk],0);
Abort;
end;
end;
QBOM.FieldByName('fQty').AsFloat :=1;
QBOM.FieldByName('fNotes').asString:='';
end;
procedure TfrmBaseBOM.edtCodeKeyPress(Sender: TObject; var Key: Char);
begin
inherited;
if (key=#13) and (edtCode.text<>'') then
if QProduct.Locate('fCode',trim(edtCode.Text),[]) then
begin
//如果为原料,不能建造BOM
{if QProduct.FieldByName('fTypeID').AsInteger = 0 then
begin
MessageDlg('该物件的类型为原料,不能建造BOM!',mtError,[mbOk],0);
Exit;
end; }
iBomID :=QProduct.fieldbyName('fID').AsInteger ;
iParentID:=iBomID;
With QIsExists do
begin
parameters.paramValues['ParentID']:= iBomID;
if Active then Requery else Open;
//判断该产品的BOM是否已经存在
if Fields[0].AsInteger > 0 then
if messagedlg('所选择的产品BOM已经建立,不能重复定义!'+#13#10
+'是否调出该产品的BOM资料!',mtWarning,[mbOk,mbCancel],0)=mrOk then
begin
//取消编辑
QBom.CancelBatch();
//设置可操作状态
acSave.Enabled :=False;
SetControlEnabled();
//
pnlBOMParentView.Visible :=True;
pnlBOMParentAppend.Visible :=False;
//调出当前产品的BOM
QBomParent.Locate('fID',iBomID,[]);
dsBomParent.Enabled :=True;
With spBom do
begin
parameters.ParamValues['@intProdID']:=iBomID;
if Active then Requery else Open;
end;
Exit;
end
Else
Exit;
end;
//设定父产品
QBom.FieldByName('fParentID').asInteger:=iParentID;
//设定spBOM的参数为新建的BOM父ID
With spBom do
begin
parameters.ParamValues['@intProdID']:=iBomID;
//if Active then Requery else Open;
end;
end
else
MessageDlg('档案库中无此产品!',mtInformation,[mbOk],0);
end;
procedure TfrmBaseBOM.acFullExpandExecute(Sender: TObject);
begin
inherited;
dxDBTreeBom.FullExpand;
end;
procedure TfrmBaseBOM.acFullCollapseExecute(Sender: TObject);
begin
inherited;
dxDBTreeBom.FullCollapse;
end;
procedure TfrmBaseBOM.acOpenExecute(Sender: TObject);
begin
inherited;
if QBomParent.Active then QBomParent.Requery() else QBomParent.Open ;
if wwLookupDlgBomParent.Execute then
begin
dsBomParent.Enabled :=True;
iBomID:=QBomParent.fieldbyname('fID').AsInteger;
iParentID:=iBomID;
With spBom do
begin
parameters.ParamValues['@intProdID']:=iBomID;
if Active then Requery else Open;
end;
//清空BOM里的数据
BomRequery(iParentID);
end
end;
procedure TfrmBaseBOM.acDeleteExecute(Sender: TObject);
var
sMsg:String;
begin
inherited;
With QCanDelete do
begin
Parameters.ParamValues['ProductID']:=iBomID;
if Active then Requery else Open;
if Recordcount>0 then
sMsg:='该BOM资料已被其他BOM引用,'
else
sMsg:='';
end;
if messagedlg(sMsg+'您确定要删除当前BOM资料吗?',mtWarning,[mbOk,mbCancel],0)=mrOk then
begin
with CDeleteBom do
begin
Parameters.ParambyName('ProductID').value:=iBomID;
Execute();
end;
//初始化
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);
end;
end;
procedure TfrmBaseBOM.acModifyExecute(Sender: TObject);
begin
inherited;
QBom.Edit ;
end;
procedure TfrmBaseBOM.dxDBTreeBomChange(TreeView: TfcCustomTreeView;
Node: TfcTreeNode);
begin
inherited;
if Not acSave.Enabled then
if iParentID<>Getnodeid(dxDBTreeBom,dxDBTreeBom.Selected) then
begin
iParentID:=Getnodeid(dxDBTreeBom,dxDBTreeBom.Selected);
Settextvalue(iParentID);
end;
end;
function TfrmBaseBOM.foundnodebyid(T: Tfctreeview;
id: integer): Tfctreenode;
var
Count:integer;
begin
Result:=nil;
For Count:= 0 to (T.Items.Count - 1) do
begin
if integer(t.Items[Count].Data^)=id then
begin
Result:=t.Items[count];
Exit;
end;
end;
end;
function TfrmBaseBOM.getnodeid(Atree: Tfctreeview;
Inode: Tfctreenode): integer;
var
Count:integer;
begin
Result:=0;
for Count:=0 to Atree.Items.Count-1 do
begin
if Atree.Items[Count]=inode then
begin
Result:=integer(Atree.Items[count].Data^);
Exit;
end;
end;
end;
procedure TfrmBaseBOM.GetPermiss;
begin
end;
function TfrmBaseBOM.loadTree(Atreeview: Tfctreeview): integer;
var
id:pint;
node1,node2:Tfctreenode;
begin
Result:=0;
Atreeview.Items.Clear;
Atreeview.Items.BeginUpdate;
spbom.First;
while not spbom.Eof do
begin
node1:=foundnodebyid(dxDBTreeBom,spbom.fieldbyname('fparentid').AsInteger);
new(id);
id^:=spbom.fieldbyname('fpartid').AsInteger;
node2:=Atreeview.Items.AddChildObject(node1,spbom.fieldbyname('name').AsString,id);
node2.ImageIndex:=1;
node2.SelectedIndex:=0;
spbom.Next;
end;
Atreeview.Items.EndUpdate;
Atreeview.FullExpand;
end;
procedure TfrmBaseBOM.SpeedButton1Click(Sender: TObject);
begin
inherited;
iProductID:=0;
if not assigned(frmProductFilter) then
frmProductFilter:=TfrmProductFilter.Create(application);
frmProductFilter.ShowModal;
if iProductID>0 then
if QProduct.Locate('fID',iProductID,[]) then
begin
//如果为原料,不能建造BOM
//if QProduct.FieldByName('fTypeID').AsInteger = 0 then
// begin
// MessageDlg('该物件的类型为原料,不能建造BOM!',mtError,[mbOk],0);
// Exit;
// end;
iBomID :=QProduct.fieldbyName('fID').AsInteger ;
iParentID:=iBomID;
With QIsExists do
begin
parameters.paramValues['ParentID']:= iBomID;
if Active then Requery else Open;
if Fields[0].AsInteger > 0 then
if messagedlg('所选择的产品BOM已经建立,不能重复定义!'+#13#10
+'是否调出该产品的BOM资料!',mtWarning,[mbOk,mbCancel],0)=mrOk then
begin
//取消编辑
QBom.CancelBatch();
//设置可操作状态
acSave.Enabled :=False;
SetControlEnabled();
//
pnlBOMParentView.Visible :=True;
pnlBOMParentAppend.Visible :=False;
//调出当前产品的BOM
QBomParent.Locate('fID',iBomID,[]);
dsBomParent.Enabled :=True;
With spBom do
begin
parameters.ParamValues['@intProdID']:=iBomID;
if Active then Requery else Open;
end;
Exit;
end
Else
Exit;
end;
edtCode.Text := QProduct.fieldbyName('fcode').AsString ;
edtName.Text := QProduct.fieldbyName('fName').AsString ;
edtSpec.Text := QProduct.fieldbyName('fdesc').AsString ;
edtLevel.Text := QProduct.fieldbyName('fLevel').AsString ;
edtColor.Text := QProduct.fieldbyName('fColor').AsString ;
edtUnit.Text := QProduct.fieldbyName('fUnit').AsString ;
//设定父产品
QBom.FieldByName('fParentID').asInteger:=iParentID;
//设定spBOM的参数为新建的BOM父ID
With spBom do
begin
parameters.ParamValues['@intProdID']:=iBomID;
end;
end;
iProductID:=0;
end;
procedure TfrmBaseBOM.settextvalue(ParentID: Integer);
begin
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;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -