|
@@ -380,6 +380,45 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TStageData.sddStageAfterValueChanged(AValue: TsdValue);
|
|
|
+
|
|
|
+ function LeafCurHasMeasure(ANode: TMeasureBillsIDTreeNode): Boolean;
|
|
|
+ begin
|
|
|
+ Result := Assigned(ANode.StageRec) and
|
|
|
+ ((ANode.StageRec.DealQuantity.AsFloat <> 0) or
|
|
|
+ (ANode.StageRec.DealTotalPrice.AsFloat <> 0) or
|
|
|
+ (ANode.StageRec.QcQuantity.AsFloat <> 0) or
|
|
|
+ (ANode.StageRec.QcTotalPrice.AsFloat <> 0) or
|
|
|
+ (ANode.StageRec.PcQuantity.AsFloat <> 0) or
|
|
|
+ (ANode.StageRec.PcTotalPrice.AsFloat <> 0));
|
|
|
+ end;
|
|
|
+
|
|
|
+ function ParentCurHasMeasure(ANode: TBillsIDTreeNode): Boolean;
|
|
|
+ var
|
|
|
+ i: Integer;
|
|
|
+ vChild: TBillsIDTreeNode;
|
|
|
+ begin
|
|
|
+ Result := False;
|
|
|
+ for i := 0 to ANode.ChildCount - 1 do
|
|
|
+ begin
|
|
|
+ vChild := TMeasureBillsIDTreeNode(ANode.ChildNodes[i]);
|
|
|
+ if vChild.Rec.CurHasMeasure.AsBoolean then
|
|
|
+ begin
|
|
|
+ Result := True;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure RecalcNodeCurHasMeasure(ANode: TBillsIDTreeNode);
|
|
|
+ begin
|
|
|
+ if not Assigned(ANode) then Exit;
|
|
|
+ if ANode.HasChildren then
|
|
|
+ ANode.Rec.CurHasMeasure.AsBoolean := ParentCurHasMeasure(ANode)
|
|
|
+ else
|
|
|
+ ANode.Rec.CurHasMeasure.AsBoolean := LeafCurHasMeasure(TMeasureBillsIDTreeNode(ANode));
|
|
|
+ RecalcNodeCurHasMeasure(TBillsIDTreeNode(ANode.Parent));
|
|
|
+ end;
|
|
|
+
|
|
|
var
|
|
|
iBillsID: Integer;
|
|
|
stnNode: TsdIDTreeNode;
|
|
@@ -404,6 +443,8 @@ begin
|
|
|
if (AValue.FieldName = 'DealQuantity') or
|
|
|
(AValue.FieldName = 'QcQuantity') then
|
|
|
UpdateProjectGL(iBillsID);
|
|
|
+
|
|
|
+ RecalcNodeCurHasMeasure(TBillsIDTreeNode(stnNode));
|
|
|
end;
|
|
|
|
|
|
function TStageData.GetMainBillsTree: TBillsIDTree;
|