unit rpgBillsCalcDm; interface uses SysUtils, Classes, sdDB, sdProvider, ADODB, ProjGatherTree, CalcData; type TrpgBillsCalcData = class(TDataModule) sdpBillsCalc: TsdADOProvider; sddBillsCalc: TsdDataSet; private procedure SaveBillsNodeCalc(ANode: TProjGatherTreeNode; AProjCalc: TProjCalc; AProjIndex: Integer); procedure SaveBillsCalc(ATree: TProjGatherTree; AProjIndex: Integer); procedure SaveBillsGather(ATree: TProjGatherTree); public constructor Create(AConnection: TADOConnection); procedure SaveProjDataTo(ATree: TProjGatherTree; AProjIndex: Integer; const ATableName: string); procedure SaveGatherDataTo(ATree: TProjGatherTree; const ATableName: string); end; implementation uses CacheTree; {$R *.dfm} { TrpgBillsCalcData } constructor TrpgBillsCalcData.Create(AConnection: TADOConnection); begin inherited Create(nil); sdpBillsCalc.Connection := AConnection; end; procedure TrpgBillsCalcData.SaveBillsCalc(ATree: TProjGatherTree; AProjIndex: Integer); var iNode: Integer; vNode: TProjGatherTreeNode; begin for iNode := 0 to ATree.CacheNodes.Count - 1 do begin vNode := TProjGatherTreeNode(ATree.CacheNodes.Items[iNode]); SaveBillsNodeCalc(vNode, vNode.Proj[AProjIndex], AProjIndex); end; end; procedure TrpgBillsCalcData.SaveBillsGather(ATree: TProjGatherTree); var iNode: Integer; vNode: TProjGatherTreeNode; begin for iNode := 0 to ATree.CacheNodes.Count - 1 do begin vNode := TProjGatherTreeNode(ATree.CacheNodes.Items[iNode]); SaveBillsNodeCalc(vNode, vNode.GatherCalc, -2); end; end; procedure TrpgBillsCalcData.SaveBillsNodeCalc(ANode: TProjGatherTreeNode; AProjCalc: TProjCalc; AProjIndex: Integer); var Rec: TsdDataRecord; begin Rec := sddBillsCalc.Add; Rec.ValueByName('ID').AsInteger := ANode.ID; Rec.ValueByName('ProjID').AsInteger := AProjIndex; Rec.ValueByName('OrgQuantity').AsFloat := AProjCalc.Compile.Org.Quantity; Rec.ValueByName('OrgTotalPrice').AsFloat := AProjCalc.Compile.Org.TotalPrice; Rec.ValueByName('OrgTotalPrice_Rc').AsFloat := AProjCalc.Compile.Org.TotalPrice_Rc; Rec.ValueByName('MisQuantity').AsFloat := AProjCalc.Compile.Mis.Quantity; Rec.ValueByName('MisTotalPrice').AsFloat := AProjCalc.Compile.Mis.TotalPrice; Rec.ValueByName('MisTotalPrice_Rc').AsFloat := AProjCalc.Compile.Mis.TotalPrice_Rc; Rec.ValueByName('OthQuantity').AsFloat := AProjCalc.Compile.Oth.Quantity; Rec.ValueByName('OthTotalPrice').AsFloat := AProjCalc.Compile.Oth.TotalPrice; Rec.ValueByName('OthTotalPrice_Rc').AsFloat := AProjCalc.Compile.Oth.TotalPrice_Rc; Rec.ValueByName('Quantity').AsFloat := AProjCalc.Compile.SubTotal.Quantity; Rec.ValueByName('TotalPrice').AsFloat := AProjCalc.Compile.SubTotal.TotalPrice; Rec.ValueByName('TotalPrice_Rc').AsFloat := AProjCalc.Compile.SubTotal.TotalPrice_Rc; Rec.ValueByName('AddDealQuantity').AsFloat := AProjCalc.AddMeasure.Deal.Quantity; Rec.ValueByName('AddDealTotalPrice').AsFloat := AProjCalc.AddMeasure.Deal.TotalPrice; Rec.ValueByName('AddDealTotalPrice_Rc').AsFloat := AProjCalc.AddMeasure.Deal.TotalPrice_Rc; Rec.ValueByName('AddQcQuantity').AsFloat := AProjCalc.AddMeasure.Qc.Quantity; Rec.ValueByName('AddQcTotalPrice').AsFloat := AProjCalc.AddMeasure.Qc.TotalPrice; Rec.ValueByName('AddQcTotalPrice_Rc').AsFloat := AProjCalc.AddMeasure.Qc.TotalPrice_Rc; Rec.ValueByName('AddGatherQuantity').AsFloat := AProjCalc.AddMeasure.Gather.Quantity; Rec.ValueByName('AddGatherTotalPrice').AsFloat := AProjCalc.AddMeasure.Gather.TotalPrice; Rec.ValueByName('AddGatherTotalPrice_Rc').AsFloat := AProjCalc.AddMeasure.Gather.TotalPrice_Rc; Rec.ValueByName('CurDealQuantity').AsFloat := AProjCalc.CurMeasure.Deal.Quantity; Rec.ValueByName('CurDealTotalPrice').AsFloat := AProjCalc.CurMeasure.Deal.TotalPrice; Rec.ValueByName('CurDealTotalPrice_Rc').AsFloat := AProjCalc.CurMeasure.Deal.TotalPrice_Rc; Rec.ValueByName('CurQcQuantity').AsFloat := AProjCalc.CurMeasure.Qc.Quantity; Rec.ValueByName('CurQcTotalPrice').AsFloat := AProjCalc.CurMeasure.Qc.TotalPrice; Rec.ValueByName('CurQcTotalPrice_Rc').AsFloat := AProjCalc.CurMeasure.Qc.TotalPrice_Rc; Rec.ValueByName('CurGatherQuantity').AsFloat := AProjCalc.CurMeasure.Gather.Quantity; Rec.ValueByName('CurGatherTotalPrice').AsFloat := AProjCalc.CurMeasure.Gather.TotalPrice; Rec.ValueByName('CurGatherTotalPrice_Rc').AsFloat := AProjCalc.CurMeasure.Gather.TotalPrice_Rc; Rec.ValueByName('PreDealQuantity').AsFloat := AProjCalc.PreMeasure.Deal.Quantity; Rec.ValueByName('PreDealTotalPrice').AsFloat := AProjCalc.PreMeasure.Deal.TotalPrice; Rec.ValueByName('PreDealTotalPrice_Rc').AsFloat := AProjCalc.PreMeasure.Deal.TotalPrice_Rc; Rec.ValueByName('PreQcQuantity').AsFloat := AProjCalc.PreMeasure.Qc.Quantity; Rec.ValueByName('PreQcTotalPrice').AsFloat := AProjCalc.PreMeasure.Qc.TotalPrice; Rec.ValueByName('PreQcTotalPrice_Rc').AsFloat := AProjCalc.PreMeasure.Qc.TotalPrice_Rc; Rec.ValueByName('PreGatherQuantity').AsFloat := AProjCalc.PreMeasure.Gather.Quantity; Rec.ValueByName('PreGatherTotalPrice').AsFloat := AProjCalc.PreMeasure.Gather.TotalPrice; Rec.ValueByName('PreGatherTotalPrice_Rc').AsFloat := AProjCalc.PreMeasure.Gather.TotalPrice_Rc; Rec.ValueByName('EndDealQuantity').AsFloat := AProjCalc.EndMeasure.Deal.Quantity; Rec.ValueByName('EndDealTotalPrice').AsFloat := AProjCalc.EndMeasure.Deal.TotalPrice; Rec.ValueByName('EndDealTotalPrice_Rc').AsFloat := AProjCalc.EndMeasure.Deal.TotalPrice_Rc; Rec.ValueByName('EndQcQuantity').AsFloat := AProjCalc.EndMeasure.Qc.Quantity; Rec.ValueByName('EndQcTotalPrice').AsFloat := AProjCalc.EndMeasure.Qc.TotalPrice; Rec.ValueByName('EndQcTotalPrice_Rc').AsFloat := AProjCalc.EndMeasure.Qc.TotalPrice_Rc; Rec.ValueByName('EndGatherQuantity').AsFloat := AProjCalc.EndMeasure.Gather.Quantity; Rec.ValueByName('EndGatherTotalPrice').AsFloat := AProjCalc.EndMeasure.Gather.TotalPrice; Rec.ValueByName('EndGatherTotalPrice_Rc').AsFloat := AProjCalc.EndMeasure.Gather.TotalPrice_Rc; Rec.ValueByName('DgnQuantity1').AsFloat := AProjCalc.DgnQuantity1; Rec.ValueByName('DgnQuantity2').AsFloat := AProjCalc.DgnQuantity2; Rec.ValueByName('DealDgnQuantity1').AsFloat := AProjCalc.DealDgnQuantity1; Rec.ValueByName('DealDgnQuantity2').AsFloat := AProjCalc.DealDgnQuantity2; Rec.ValueByName('CDgnQuantity1').AsFloat := AProjCalc.CDgnQuantity1; Rec.ValueByName('CDgnQuantity2').AsFloat := AProjCalc.CDgnQuantity2; end; procedure TrpgBillsCalcData.SaveGatherDataTo(ATree: TProjGatherTree; const ATableName: string); begin sdpBillsCalc.TableName := ATableName; sddBillsCalc.Open; sddBillsCalc.BeginUpdate; try SaveBillsGather(ATree); SaveBillsNodeCalc(ATree.GatherNode, ATree.GatherNode.GatherCalc, -2); finally sddBillsCalc.EndUpdate; sddBillsCalc.Save; end; end; procedure TrpgBillsCalcData.SaveProjDataTo(ATree: TProjGatherTree; AProjIndex: Integer; const ATableName: string); begin sdpBillsCalc.TableName := ATableName; sddBillsCalc.Open; sddBillsCalc.BeginUpdate; try SaveBillsCalc(ATree, AProjIndex); SaveBillsNodeCalc(ATree.GatherNode, ATree.GatherNode.Proj[AProjIndex], AProjIndex); finally sddBillsCalc.EndUpdate; sddBillsCalc.Save; end; end; end.