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

📄 ubom.pas

📁 这个程序软件很不错很不错的
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -