|
@@ -294,6 +294,68 @@ end;
|
|
|
|
|
|
procedure TBillsCompileData.sdvBillsCompileBeforeValueChange(
|
|
|
AValue: TsdValue; const NewValue: Variant; var Allow: Boolean);
|
|
|
+
|
|
|
+ function CheckParentExist(ANode: TBillsIDTreeNode): Boolean;
|
|
|
+ var
|
|
|
+ vParent: TBillsIDTreeNode;
|
|
|
+ begin
|
|
|
+ Result := False;
|
|
|
+ vParent := TBillsIDTreeNode(ANode.Parent);
|
|
|
+ while Assigned(vParent) and not Result do
|
|
|
+ begin
|
|
|
+ if vParent.Rec.IsGatherZJJL.AsBoolean then
|
|
|
+ Result := True;
|
|
|
+ vParent := TBillsIDTreeNode(vParent.Parent);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure CancelParentCheck(ANode: TBillsIDTreeNode);
|
|
|
+ var
|
|
|
+ vParent: TBillsIDTreeNode;
|
|
|
+ begin
|
|
|
+ vParent := TBillsIDTreeNode(ANode.Parent);
|
|
|
+ while Assigned(vParent) do
|
|
|
+ begin
|
|
|
+ if vParent.Rec.IsGatherZJJL.AsBoolean then
|
|
|
+ vParent.Rec.IsGatherZJJL.AsBoolean := False;
|
|
|
+ vParent := TBillsIDTreeNode(vParent.Parent);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ function CheckChildrenExist(ANode: TBillsIDTreeNode): Boolean;
|
|
|
+ var
|
|
|
+ iChild: Integer;
|
|
|
+ vChild: TBillsIDTreeNode;
|
|
|
+ begin
|
|
|
+ Result := False;
|
|
|
+ for iChild := 0 to ANode.ChildCount - 1 do
|
|
|
+ begin
|
|
|
+ vChild := TBillsIDTreeNode(ANode.ChildNodes[iChild]);
|
|
|
+ if vChild.Rec.IsGatherZJJL.AsBoolean or CheckChildrenExist(vChild) then
|
|
|
+ begin
|
|
|
+ Result := True;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure CancelChildrenCheck(ANode: TBillsIDTreeNode);
|
|
|
+ var
|
|
|
+ iChild: Integer;
|
|
|
+ vChild: TBillsIDTreeNode;
|
|
|
+ begin
|
|
|
+ for iChild := 0 to ANode.ChildCount - 1 do
|
|
|
+ begin
|
|
|
+ vChild := TBillsIDTreeNode(ANode.ChildNodes[iChild]);
|
|
|
+ if vChild.Rec.IsGatherZJJL.AsBoolean then
|
|
|
+ vChild.Rec.IsGatherZJJL.AsBoolean := False
|
|
|
+ else
|
|
|
+ CancelChildrenCheck(vChild);
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ vNode: TBillsIDTreeNode;
|
|
|
begin
|
|
|
if SameText(AValue.FieldName, 'OrgQuantity') or
|
|
|
SameText(AValue.FieldName, 'MisQuantity') or
|
|
@@ -306,6 +368,30 @@ begin
|
|
|
TBillsRecord(AValue.Owner).CacheOrgTP := AValue.Owner.ValueByName('OrgTotalPrice').AsFloat;
|
|
|
TBillsRecord(AValue.Owner).CacheMisTP := AValue.Owner.ValueByName('MisTotalPrice').AsFloat;
|
|
|
TBillsRecord(AValue.Owner).CacheOthTP := AValue.Owner.ValueByName('OthTotalPrice').AsFloat;
|
|
|
+ end
|
|
|
+ else if SameText(AValue.FieldName, 'IsGatherZJJL') then
|
|
|
+ begin
|
|
|
+ Allow := TProjectData(FProjectData).CanUnlockInfo;
|
|
|
+ if Allow then
|
|
|
+ begin
|
|
|
+ vNode := TBillsIDTreeNode(BillsCompileTree.FindNode(AValue.Owner.ValueByName('ID').AsInteger));
|
|
|
+ if CheckParentExist(vNode) then
|
|
|
+ begin
|
|
|
+ if QuestMessage('父项已勾选,继续将取消父项勾选。') then
|
|
|
+ CancelParentCheck(vNode)
|
|
|
+ else
|
|
|
+ Allow := False;
|
|
|
+ end
|
|
|
+ else if CheckChildrenExist(vNode) then
|
|
|
+ begin
|
|
|
+ if QuestMessage('子项已勾选,继续将取消子项勾选。') then
|
|
|
+ CancelChildrenCheck(vNode)
|
|
|
+ else
|
|
|
+ Allow := False;
|
|
|
+ end;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ WarningMessage('开始计量后,计量台账列不可编辑,如需修改,请先解锁。');
|
|
|
end;
|
|
|
end;
|
|
|
|