📄 unit1.pas
字号:
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 + -