|
@@ -8,7 +8,8 @@ uses
|
|
|
Windows, BillsTree, sdProvider, Variants;
|
|
|
|
|
|
type
|
|
|
- TZJJLType = (ztFx, ztGcl, ztGclGather);
|
|
|
+ TZJJLType = (ztFx, ztGcl, ztGclGather);
|
|
|
+ TRefreshDetailGridEvent = procedure of Object;
|
|
|
|
|
|
TZJJLNode = class
|
|
|
private
|
|
@@ -42,11 +43,13 @@ type
|
|
|
procedure sdvZJJLBeforeValueChange(AValue: TsdValue;
|
|
|
const NewValue: Variant; var Allow: Boolean);
|
|
|
procedure sdvZJJLAfterDeleteRecord(ARecord: TsdDataRecord);
|
|
|
+ procedure sdvZJJLCurrentChanged(ARecord: TsdDataRecord);
|
|
|
private
|
|
|
FPhaseData: TObject;
|
|
|
FCanModified: Boolean;
|
|
|
FNewID: Integer;
|
|
|
FOrgDataList: TList;
|
|
|
+ FRefreshDetailGrid: TRefreshDetailGridEvent;
|
|
|
|
|
|
function GetNewCode(ANewID: Integer): string;
|
|
|
procedure GenerateZJJLNode(ANode: TsdIDTreeNode; AType: Integer);
|
|
@@ -65,6 +68,7 @@ type
|
|
|
procedure RestoreOrgData;
|
|
|
|
|
|
procedure DeleteHistory(ABillsID, AType: Integer);
|
|
|
+ procedure DeleteGatherHistory(ARecord: TsdDataRecord);
|
|
|
|
|
|
procedure DetailGridCellCanEdit(Sender: TObject; const ACoord: TPoint;
|
|
|
var Allow: Boolean);
|
|
@@ -113,13 +117,15 @@ type
|
|
|
property PhaseData: TObject read FPhaseData;
|
|
|
property MainBillsTree: TsdIDTree read GetMainBillsTree;
|
|
|
property CanModified: Boolean read FCanModified write FCanModified;
|
|
|
+
|
|
|
+ property RefreshDetailGrid: TRefreshDetailGridEvent read FRefreshDetailGrid write FRefreshDetailGrid;
|
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
|
|
|
uses
|
|
|
PhaseData, ProjectData, BillsDm, UtilMethods, ProjectProperty, ZhAPI,
|
|
|
- BillsCompileDm, BillsMeasureDm, mPegFilter;
|
|
|
+ BillsCompileDm, BillsMeasureDm, mPegFilter, Math;
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
@@ -739,7 +745,10 @@ end;
|
|
|
|
|
|
procedure TZJJLData.sdvZJJLAfterDeleteRecord(ARecord: TsdDataRecord);
|
|
|
begin
|
|
|
- DeleteHistory(ARecord.ValueByName('BillsID').AsInteger, ARecord.ValueByName('Type').AsInteger);
|
|
|
+ if ARecord.ValueByName('Type').AsInteger <> Integer(ztGclGather) then
|
|
|
+ DeleteHistory(ARecord.ValueByName('BillsID').AsInteger, ARecord.ValueByName('Type').AsInteger)
|
|
|
+ else
|
|
|
+ DeleteGatherHistory(ARecord);
|
|
|
end;
|
|
|
|
|
|
procedure TZJJLData.DeleteHistory(ABillsID, AType: Integer);
|
|
@@ -896,4 +905,32 @@ begin
|
|
|
Result := sddZJJL.Locate('BillsID', ABillsID);
|
|
|
end;
|
|
|
|
|
|
+procedure TZJJLData.DeleteGatherHistory(ARecord: TsdDataRecord);
|
|
|
+var
|
|
|
+ i: Integer;
|
|
|
+ Rec: TsdDataRecord;
|
|
|
+begin
|
|
|
+ i := 0;
|
|
|
+ while (i < sddHistory.RecordCount) do
|
|
|
+ begin
|
|
|
+ Rec := sddHistory.Records[i];
|
|
|
+
|
|
|
+ if (ARecord.ValueByName('GatherBillsID').AsInteger = Rec.ValueByName('BillsID').AsInteger) and
|
|
|
+ (ARecord.ValueByName('Type').AsInteger = Rec.ValueByName('Type').AsInteger) and
|
|
|
+ (ARecord.ValueByName('B_Code').AsString = Rec.ValueByName('B_Code').AsString) and
|
|
|
+ (ARecord.ValueByName('Name').AsString = Rec.ValueByName('Name').AsString) and
|
|
|
+ (ARecord.ValueByName('Units').AsString = Rec.ValueByName('Units').AsString) and
|
|
|
+ (Abs(ARecord.ValueByName('Price').AsFloat - Rec.ValueByName('Price').AsFloat) < 0.00001) then
|
|
|
+ sddHistory.Remove(Rec)
|
|
|
+ else
|
|
|
+ Inc(i);
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TZJJLData.sdvZJJLCurrentChanged(ARecord: TsdDataRecord);
|
|
|
+begin
|
|
|
+ if Assigned(FRefreshDetailGrid) then
|
|
|
+ FRefreshDetailGrid;
|
|
|
+end;
|
|
|
+
|
|
|
end.
|