Jelajahi Sumber

1. 删除中间计量,应删除用户输入的历史记录
2. 中间计量,详细,刷新问题,删除中间计量后,应刷新

MaiXinRong 7 tahun lalu
induk
melakukan
fb7a0b1d47
4 mengubah file dengan 48 tambahan dan 11 penghapusan
  1. 1 0
      DataModules/ZJJLDm.dfm
  2. 40 3
      DataModules/ZJJLDm.pas
  3. 0 1
      Frames/ZJJLFme.dfm
  4. 7 7
      Frames/ZJJLFme.pas

+ 1 - 0
DataModules/ZJJLDm.dfm

@@ -126,6 +126,7 @@ object ZJJLData: TZJJLData
       end>
     AfterDeleteRecord = sdvZJJLAfterDeleteRecord
     BeforeValueChange = sdvZJJLBeforeValueChange
+    OnCurrentChanged = sdvZJJLCurrentChanged
     Left = 40
     Top = 144
   end

+ 40 - 3
DataModules/ZJJLDm.pas

@@ -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.

+ 0 - 1
Frames/ZJJLFme.dfm

@@ -104,7 +104,6 @@ object ZJJLFrame: TZJJLFrame
       Selection.TransparentColor = False
       FrozenCol = 0
       FrozenRow = 0
-      OnCurrentChanged = zgZJJLCurrentChanged
       OnMouseDown = zgZJJLMouseDown
       Align = alClient
     end

+ 7 - 7
Frames/ZJJLFme.pas

@@ -56,7 +56,6 @@ type
     procedure actnGenerateUpdate(Sender: TObject);
     procedure zgDetailInfoGetCellText(Sender: TObject;
       const ACoord: TPoint; var Value: String; DisplayText: Boolean);
-    procedure zgZJJLCurrentChanged(Sender: TObject; Col, Row: Integer);
     procedure zgDetailInfoSetCellText(Sender: TObject;
       const ACoord: TPoint; var Value: String; DisplayText: Boolean);
     procedure zgDetailInfoCellCanEdit(Sender: TObject;
@@ -68,6 +67,7 @@ type
     procedure SetDataReadOnly(const Value: Boolean);
 
     procedure RefreshTitle;
+    procedure RefreshDetailGrid;
     procedure GenerateZJJL;
 
     procedure InitDetailGrid;
@@ -100,6 +100,7 @@ begin
       lePreText.Text := ZJJLPreText;
   end;
   RefreshTitle;
+  FZJJLData.RefreshDetailGrid := RefreshDetailGrid; 
 end;
 
 destructor TZJJLFrame.Destroy;
@@ -282,12 +283,6 @@ begin
   zgDetailInfo.Cells[0, Integer(riRelaFileValue)].Align := gaTopLeft;
 end;
 
-procedure TZJJLFrame.zgZJJLCurrentChanged(Sender: TObject; Col,
-  Row: Integer);
-begin
-  zgDetailInfo.Invalidate;
-end;
-
 procedure TZJJLFrame.zgDetailInfoSetCellText(Sender: TObject;
   const ACoord: TPoint; var Value: String; DisplayText: Boolean);
 var
@@ -323,4 +318,9 @@ begin
   end;
 end;
 
+procedure TZJJLFrame.RefreshDetailGrid;
+begin
+  zgDetailInfo.Invalidate;
+end;
+
 end.