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

📄 unit1.pas

📁 本程序是在实施用友ERP时根据客户要求专门为用友U8开发的生产标准生产成本的二次开发程序。
💻 PAS
📖 第 1 页 / 共 5 页
字号:
        bd,
        -2);
      Table_ProductID.FieldByName('iBInvNCost1').AsFloat := SimpleRoundTo(ADOQuery1.FieldByName('iInvNCost').AsFloat *
        bd,
        -2);
      Table_ProductID.FieldByName('iInvRCost2').AsFloat := SimpleRoundTo(ADOQuery1.FieldByName('iInvRCost').AsFloat,
        -2);
      Table_ProductID.FieldByName('iInvSprice2').AsFloat := SimpleRoundTo(ADOQuery1.FieldByName('iInvSprice').AsFloat,
        -2);
      Table_ProductID.FieldByName('iInvNCost2').AsFloat := SimpleRoundTo(ADOQuery1.FieldByName('iInvNCost').AsFloat,
        -2);
      Table_ProductID.FieldByName('iBinvRCost2').AsFloat := SimpleRoundTo(ADOQuery1.FieldByName('iInvRCost').AsFloat *
        bd,
        -2);
      Table_ProductID.FieldByName('iBInvSprice2').AsFloat := SimpleRoundTo(ADOQuery1.FieldByName('iInvSprice').AsFloat *
        bd,
        -2);
      Table_ProductID.FieldByName('iBInvNCost2').AsFloat := SimpleRoundTo(ADOQuery1.FieldByName('iInvNCost').AsFloat *
        bd,
        -2);
    End
    Else
    Begin
      Table_ProductID.FieldByName('iInvRCost1').AsFloat := 0;
      Table_ProductID.FieldByName('iInvSprice1').AsFloat := 0;
      Table_ProductID.FieldByName('iInvNCost1').AsFloat := 0;
      Table_ProductID.FieldByName('iBInvRCost1').AsFloat := 0;
      Table_ProductID.FieldByName('iBInvSprice1').AsFloat := 0;
      Table_ProductID.FieldByName('iBInvNCost1').AsFloat := 0;
      Table_ProductID.FieldByName('iInvRCost2').AsFloat := 0;
      Table_ProductID.FieldByName('iInvSprice2').AsFloat := 0;
      Table_ProductID.FieldByName('iInvNCost2').AsFloat := 0;
      Table_ProductID.FieldByName('iBInvRCost2').AsFloat := 0;
      Table_ProductID.FieldByName('iBInvSprice2').AsFloat := 0;
      Table_ProductID.FieldByName('iBInvNCost2').AsFloat := 0;
    End;
    Table_ProductID.Post;
    Table_ProductID.Next;
  End;
  Table_ProductID.Close;
  ADOQuery1.Prepared := false;
  ADOQuery1.Close;
  RzProgressBar1.Visible := false;
End;

Procedure TForm1.MakeTree(Query: TADOQuery; TableName: String; TreeView: TRzTreeView);
//Var
//  tt: integer;
  //tid, tpid, trid: integer;
Begin
  Table_ProductID.Open;
  TreeView.Items.BeginUpdate;
  list.Clear;
  If query.Active Then
  Begin
    Query.Prepared := false;
    query.Close;
  End;
  Query.SQL.Text := 'SELECT * FROM ' + TableName + ' ORDER BY newid,Newpid';
  Query.Prepared := true;
  Query.Open;
  query.DisableControls;
  TreeView.Items.Clear;
  list.Clear;
  List.Sorted := True;
  query.First;
  RzProgressBar1.Visible := true;
  RzProgressBar1.TotalParts := query.RecordCount;
  While Not Query.Eof Do
  Begin
    RzProgressBar1.PartsComplete := query.RecNo;
    addtreenode(Query, TreeView); //依次增加所有的节点
    Query.Next;
  End;
  RzProgressBar1.Visible := false;
  TreeView.Items.EndUpdate;
  query.EnableControls;
  If treeview.Items.Count < 1 Then
    exit;
  treeview.Visible := true;
  FChanged := true;
  treeview.Select(treeview.Items.Item[0]);
  treeview.SetFocus;
End;

Procedure TForm1.addtreenode(Query: TADOQuery; TreeView: TRzTreeView; bj: boolean = false);
Var
  index: integer;
  Node: TTreeNode;
Begin
  If Query.FieldByName('NewPID').AsInteger = 0 Then { ParentID=0,顶层节点 }
    //增加节点,并将本节点所对应的记录标签数据放到节点所提供的附加数据中
    Node := TreeView.Items.AddChildObject(Nil, Query.FieldByName('Name').AsString, query.GetBookmark)
  Else
  Begin
    //增加子节点,并将本节点所对应的记录标签数据放到节点所提供的附加数据中
    Index := List.IndexOf(Query.FieldByName('NewPID').AsString);
    Node := TreeView.Items.AddChildObjectFirst(TTreeNode(List.Objects[Index]),
      Query.FieldByName('Name').AsString, query.GetBookmark);
  End;
  //增加当前节点的信息到列表中,以实现在列表中快速查找节点的功能。
  List.AddObject(Query.FieldByName('NewID').AsString, Node);
  If bj Then
  Begin
    treeview.Select(node);
    treeview.SetFocus;
  End;
End;

Procedure TForm1.FormCreate(Sender: TObject);
Begin
  NewId := 1;
  FFilter := false;
  FFirst := false;
  FChanged := false;
  WorkHours1 := true;
  isLastNode := false;
End;

Procedure TForm1.PrCost;
Var
  Nid, Pid: integer;
  tt1, tt2, iprec, ii, nn: integer;
  rcost01, sprice01, ncost01, rcost02, sprice02, ncost02, bd: Double;
  zrcost, zscost, zsprice, zncost, zrcost1, zscost1, zsprice1, zncost1, zbd: Double;
  brcost01, bsprice01, bncost01, brcost02, bsprice02, bncost02: Double;
  brcost1, bsprice1, bncost1, brcost2, bsprice2, bncost2: Double;
  bbrcost, bbscost, bbsprice, bbncost, bbrcost1, bbscost1, bbsprice1, bbncost1: Double;
  Ip1, Ip2, bIp1, bIp2, bbIp1, bbIp2, zIp1, zIp2: Double;
  bb, ba: Boolean;
  ss: String;
Begin
  ADOQuery4.Close;
  ADOQuery4.Prepared := false;
  ADOQuery4.SQL.Clear;
  ADOQuery4.SQL.Add('SELECT MAX(ilevel) as ilevel from productid');
  ADOQuery4.Prepared := true;
  ADOQuery4.Open;
  ADOQuery4.First;
  nn := ADOQuery4.FieldByName('ilevel').AsInteger;
  For ii := nn Downto 0 Do
  Begin
    ss := inttostr(ii);
    ADOQuery4.Close;
    ADOQuery4.Prepared := false;
    ADOQuery4.SQL.Clear;
    ADOQuery4.SQL.Add('SELECT * from productid where ilevel=');
    ADOQuery4.SQL.Add(ss);
    ADOQuery4.Prepared := true;
    ADOQuery4.Open;
    ADOQuery4.First;
    Table_ProductID.Open;
    RzProgressBar1.Visible := true;
    RzProgressBar1.TotalParts := ADOQuery4.RecordCount;
    While Not ADOQuery4.Eof Do
    Begin
      RzProgressBar1.PartsComplete := ADOQuery4.RecNo;
      Pid := ADOQuery4.fieldbyname('newPid').AsInteger;
      Nid := ADOQuery4.fieldbyname('newid').AsInteger;
      If Nid = 171 Then
        ss := 'jjj';
      bb := Table_ProductID.Locate('newid', Nid, [loPartialKey]);
      bd := SimpleRoundTo(Table_ProductID.FieldByName('BaseQty').AsFloat, -2);
      If bd = 0 Then
        bd := 1;
      Table_ProductID.Edit;
      Table_ProductID.FieldByName('iBInvRCost1').AsFloat :=
        SimpleRoundTo(Table_ProductID.FieldByName('iProutCost1').AsFloat +
        Table_ProductID.FieldByName('iInvRCost1').AsFloat, -2);
      Table_ProductID.FieldByName('iBInvSprice1').AsFloat :=
        SimpleRoundTo(Table_ProductID.FieldByName('iProutCost1').AsFloat
        +
        Table_ProductID.FieldByName('iInvSprice1').AsFloat, -2);
      Table_ProductID.FieldByName('iBInvNCost1').AsFloat :=
        SimpleRoundTo(Table_ProductID.FieldByName('iProutCost1').AsFloat +
        Table_ProductID.FieldByName('iInvNCost1').AsFloat, -2);
      Table_ProductID.FieldByName('iBInvRCost2').AsFloat :=
        SimpleRoundTo(Table_ProductID.FieldByName('iProutCost2').AsFloat +
        Table_ProductID.FieldByName('iInvRCost2').AsFloat, -2);
      Table_ProductID.FieldByName('iBInvSprice2').AsFloat :=
        SimpleRoundTo(Table_ProductID.FieldByName('iProutCost2').AsFloat
        +
        Table_ProductID.FieldByName('iInvSprice2').AsFloat, -2);
      Table_ProductID.FieldByName('iBInvNCost2').AsFloat :=
        SimpleRoundTo(Table_ProductID.FieldByName('iProutCost2').AsFloat +
        Table_ProductID.FieldByName('iInvNCost2').AsFloat, -2);

      Table_ProductID.FieldByName('iBProutCost1').AsFloat := SimpleRoundTo(bd *
        Table_ProductID.FieldByName('iProutCost1').AsFloat, -2);
      Table_ProductID.FieldByName('iBProutCost2').AsFloat := SimpleRoundTo(bd *
        Table_ProductID.FieldByName('iProutCost2').AsFloat, -2);
      Table_ProductID.Post;
      Table_ProductID.Edit;
      Table_ProductID.FieldByName('iZInvRCost1').AsFloat :=
        SimpleRoundTo(bd * Table_ProductID.FieldByName('iBInvRCost1').AsFloat, -2);
      Table_ProductID.FieldByName('iZInvRCost2').AsFloat :=
        SimpleRoundTo(bd * Table_ProductID.FieldByName('iBInvRCost2').AsFloat, -2);
      Table_ProductID.FieldByName('iZInvSprice1').AsFloat :=
        SimpleRoundTo(bd * Table_ProductID.FieldByName('iBInvSprice1').AsFloat, -2);
      Table_ProductID.FieldByName('iZInvSprice2').AsFloat :=
        SimpleRoundTo(bd * Table_ProductID.FieldByName('iBInvSprice2').AsFloat, -2);
      Table_ProductID.FieldByName('iZInvNCost1').AsFloat :=
        SimpleRoundTo(bd * Table_ProductID.FieldByName('iBInvNCost1').AsFloat, -2);
      Table_ProductID.FieldByName('iZinvNCost2').AsFloat :=
        SimpleRoundTo(bd * Table_ProductID.FieldByName('iBInvNCost2').AsFloat, -2);
      Table_ProductID.Post;
      brcost1 := Table_ProductID.fieldbyname('iZInvRCost1').AsFloat;
      bsprice1 := Table_ProductID.fieldbyname('iZInvSPrice1').AsFloat;
      bncost1 := Table_ProductID.fieldbyname('iZInvNcost1').AsFloat;
      brcost2 := Table_ProductID.fieldbyname('iZInvRCost2').AsFloat;
      bsprice2 := Table_ProductID.fieldbyname('iZInvSPrice2').AsFloat;
      bncost2 := Table_ProductID.fieldbyname('iZInvNcost2').AsFloat;
      bb := Table_ProductID.Locate('newid', Pid, [loPartialKey]);
      If bb = true Then
      Begin
        Table_ProductID.Edit;
        bbIp1 := Table_ProductID.FieldByName('iProutCost1').AsFloat;
        bbIp2 := Table_ProductID.FieldByName('iProutCost2').AsFloat;
        rcost01 := Table_ProductID.fieldbyname('iInvRcost1').AsFloat + brcost1;
        sprice01 := Table_ProductID.fieldbyname('iInvSPrice1').AsFloat + bsprice1;
        ncost01 := Table_ProductID.fieldbyname('iInvNcost1').AsFloat + bncost1;
        rcost02 := Table_ProductID.fieldbyname('iInvRcost2').AsFloat + brcost2;
        sprice02 := Table_ProductID.fieldbyname('iInvSPrice2').AsFloat + bsprice2;
        ncost02 := Table_ProductID.fieldbyname('iInvNcost2').AsFloat + bncost2;
        Table_ProductID.fieldbyname('iInvRcost1').AsFloat := rcost01;
        Table_ProductID.fieldbyname('iInvSPrice1').AsFloat := sprice01;
        Table_ProductID.fieldbyname('iInvNcost1').AsFloat := ncost01;
        Table_ProductID.fieldbyname('iInvRcost2').AsFloat := rcost02;
        Table_ProductID.fieldbyname('iInvSPrice2').AsFloat := sprice02;
        Table_ProductID.fieldbyname('iInvNcost2').AsFloat := ncost02;
        bd := SimpleRoundTo(Table_ProductID.FieldByName('BaseQty').AsFloat, -2);
        If bd = 0 Then
          bd := 1;
        Table_ProductID.FieldByName('iBInvRCost1').AsFloat := SimpleRoundTo(bbIp1 + rcost01, -2);
        Table_ProductID.FieldByName('iBInvSprice1').AsFloat := SimpleRoundTo(bbIp1 + sprice01, -2);
        Table_ProductID.FieldByName('iBInvNCost1').AsFloat := SimpleRoundTo(bbIp1 + ncost01, -2);
        Table_ProductID.FieldByName('iBInvRCost2').AsFloat := SimpleRoundTo(bbIp2 + rcost02, -2);
        Table_ProductID.FieldByName('iBInvSprice2').AsFloat := SimpleRoundTo(bbIp2 + sprice02, -2);
        Table_ProductID.FieldByName('iBInvNCost2').AsFloat := SimpleRoundTo(bbIp2 + ncost02, -2);

        Table_ProductID.FieldByName('iZInvRCost1').AsFloat := SimpleRoundTo(bd * (bbIp1 + rcost01), -2);
        Table_ProductID.FieldByName('iZInvRCost2').AsFloat := SimpleRoundTo(bd * (bbIp2 + rcost02), -2);
        Table_ProductID.FieldByName('iZInvSprice1').AsFloat := SimpleRoundTo(bd * (bbIp1 + sprice01), -2);
        Table_ProductID.FieldByName('iZInvSprice2').AsFloat := SimpleRoundTo(bd * (bbIp2 + sprice02), -2);
        Table_ProductID.FieldByName('iZInvNCost1').AsFloat := SimpleRoundTo(bd * (bbIp1 + ncost01), -2);
        Table_ProductID.FieldByName('iZinvNCost2').AsFloat := SimpleRoundTo(bd * (bbIp2 + ncost02), -2);
        Table_ProductID.Post;
      End;
      ADOQuery4.Next;
    End;
  End;
  ADOQuery4.Prepared := false;
  ADOQuery4.Close;
  Table_ProductID.Close;
  RzProgressBar1.Visible := false;
End;
//取工艺路线

Procedure TForm1.GetProuting;
Var
  ss: String;
  bd, bn, bq, br1, br2, bc1, bc2: double;
  isCost1, iSCost2: double;
  iprec, ii: integer;
Begin
  Table_Prouting.Close;
  ADOQuery3.Close;
  ADOQuery3.SQL.Clear;
  ADOQuery3.SQL.Add('delete from Prouting');
  ADOQuery3.ExecSQL;
  ADOQuery3.Close;
  RzProgressBar1.Visible := true;
  //取全部工艺路线数据
  ADOQuery1.Close;
  ADOQuery1.Prepared := false;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT sfc_proutingpart.PRoutingId, sfc_proutingpart.PartId,');
  ADOQuery1.SQL.Add('sfc_proutingdetail.PRoutingDId, sfc_proutingdetail.OpSeq,sfc_proutingdetail.Description,');
  ADOQuery1.SQL.Add('sfc_proutingdres.PRoutingResId, sfc_proutingdres.BaseQtyN, sfc_proutingdres.BaseQtyD,sfc_resource.ResCode,');
  ADOQuery1.SQL.Add(' sfc_resource.Description AS Expr6, sfc_resource.Define7, sfc_resource.Define16 ');
  ADOQuery1.SQL.Add('FROM sfc_proutingpart INNER JOIN ');
  ADOQuery1.SQL.Add('sfc_proutingdetail ON sfc_proutingpart.PRoutingId = sfc_proutingdetail.PRoutingId INNER JOIN ');
  ADOQuery1.SQL.Add('sfc_proutingdres ON sfc_proutingdetail.PRoutingDId = sfc_proutingdres.PRoutingDId INNER JOIN ');
  ADOQuery1.SQL.Add('sfc_resource ON sfc_proutingdres.ResId = sfc_resource.ResId ');
  ADOQuery1.Prepared := true;
  ADOQuery1.Open;
  ADOQuery1.First;
  Table_Prouting.Open;
  RzProgressBar1.TotalParts := ADOQuery1.RecordCount;
  While Not ADOQuery1.Eof Do
  Begin
    RzProgressBar1.PartsComplete := ADOQuery1.RecNo;
    bd := SimpleRoundTo(aDOQuery1.FieldByName('BaseQtyD').AsFloat, -2);
    bn := SimpleRoundTo(ADOQuery1.FieldByName('BaseQtyN').AsFloat, -2);
    br1 := SimpleRoundTo(ADOQuery1.FieldByName('Define7').AsFloat, -2);
    br2 := SimpleRoundTo(ADOQuery1.FieldByName('Define16').AsFloat, -2);
    bq := 1;
    If bd <> 0 Then
      bq := SimpleRoundTo((bn / bd), -2);
    bc1 := SimpleRoundTo(bq * br1, -2);
    bc2 := SimpleRoundTo(bq * br2, -2);
    Table_Prouting.Edit;
    Table_Prouting.Append;
    Table_Prouting.FieldByName('PartId').AsInteger := ADOQuery1.FieldByName('PartId').AsInteger;
    Table_Prouting.FieldByName('ResCode').AsString := ADOQuery1.FieldByName('ResCode').AsString;
    Table_Prouting.FieldByName('Description').AsString := ADOQuery1.FieldByName('Description').AsString;
    Table_Prouting.FieldByName('OpSeq').AsString := ADOQuery1.FieldByName('OpSeq').AsString;
    Table_Prouting.FieldByName('BaseQtyD').AsFloat := bd;
    Table_Prouting.FieldByName('BaseQtyN').AsFloat := bn;
    Table_Prouting.FieldByName('BaseQty').AsFloat := bq;
    Table_Prouting.FieldByName('RDescription').AsString := ADOQuery1.FieldByName('Expr6').AsString;
    Table_Prouting.FieldByName('PRoutingId').AsInteger := ADOQuery1.FieldByName('PRoutingId').AsInteger;
    Table_Prouting.FieldByName('iRate1').AsFloat := br1;
    Table_Prouting.FieldByName('iRate2').AsFloat := br2;
    Table_Prouting.FieldByName('icost1').AsFloat := bc1;
    Table_Prouting.FieldByName('icost2').AsFloat := bc2;
    Table_Prouting.Post;
    ADOQuery1.Next;
  End;
  ADOQuery1.Prepared := false;
  ADOQuery1.Close;
  Table_Prouting.Close;
  ADOQuery4.Close;
  ADOQuery4.SQL.Clear;
  ADOQuery4.SQL.Add('SELECT DISTINCT partid,sum(icost1) as icost1,sum(icost2) as icost2 from Prouting group by partid');
  ADOQuery4.Prepared := true;
  ADOQuery4.Open;
  Table_ProductID.Open;
  ADOQuery4.First;
  RzProgressBar1.TotalParts := ADOQuery4.RecordCount;
  While Not ADOQuery4.Eof Do
  Begin
    RzProgressBar1.PartsComplete := ADOQuery4.RecNo;
    ss := ADOQuery4.FieldByName('PartId').AsString;
    isCost1 := ADOQuery4.FieldByName('iCost1').AsFloat;
    isCost2 := ADOQuery4.FieldByName('iCost2').AsFloat;
    Table_ProductID.Filtered := false;
    Table_ProductID.Filter := 'PartId=' + ss;
    Table_ProductID.Filtered := true;
    Table_ProductID.First;
    While Not Table_ProductID.Eof Do
    Begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -