Browse Source

delete or regenerate Zjjl, clear history

MaiXinRong 8 years ago
parent
commit
302ab58454
3 changed files with 54 additions and 5 deletions
  1. 1 0
      DataModules/ZJJLDm.dfm
  2. 32 0
      DataModules/ZJJLDm.pas
  3. 21 5
      Frames/ZJJLFme.pas

+ 1 - 0
DataModules/ZJJLDm.dfm

@@ -108,6 +108,7 @@ object ZJJLData: TZJJLData
       item
         FieldName = 'RelaFile'
       end>
+    AfterDeleteRecord = sdvZJJLAfterDeleteRecord
     BeforeValueChange = sdvZJJLBeforeValueChange
     Left = 40
     Top = 144

+ 32 - 0
DataModules/ZJJLDm.pas

@@ -39,6 +39,7 @@ type
     sddHistory: TsdDataSet;
     procedure sdvZJJLBeforeValueChange(AValue: TsdValue;
       const NewValue: Variant; var Allow: Boolean);
+    procedure sdvZJJLAfterDeleteRecord(ARecord: TsdDataRecord);
   private
     FPhaseData: TObject;
     FCanModified: Boolean;
@@ -59,6 +60,8 @@ type
     procedure DeleteAll;
     procedure RestoreOrgData;
 
+    procedure DeleteHistory(ABillsID, AType: Integer);
+
     procedure DetailGridCellCanEdit(Sender: TObject; const ACoord: TPoint;
       var Allow: Boolean);
     procedure DetailGridCellTextChanged(Sender: TObject; Col, Row: Integer);
@@ -90,6 +93,7 @@ type
 
     procedure Open(AConnection: TADOConnection);
     procedure Save;
+    procedure ClearHistory;
 
     procedure GenerateAll;
     procedure GenerateAllByB_Code;
@@ -730,4 +734,32 @@ begin
   end;
 end;
 
+procedure TZJJLData.sdvZJJLAfterDeleteRecord(ARecord: TsdDataRecord);
+begin
+  DeleteHistory(ARecord.ValueByName('BillsID').AsInteger, ARecord.ValueByName('Type').AsInteger);
+end;
+
+procedure TZJJLData.DeleteHistory(ABillsID, AType: Integer);
+var
+  i: Integer;
+  Rec: TsdDataRecord;
+begin
+  i := 0;
+  while (i < sddHistory.RecordCount) do
+  begin
+    Rec := sddHistory.Records[i];
+
+    if (ABillsID = Rec.ValueByName('BillsID').AsInteger) and
+       (AType = Rec.ValueByName('Type').AsInteger) then
+      sddHistory.Remove(Rec)
+    else
+      Inc(i);
+  end;
+end;
+
+procedure TZJJLData.ClearHistory;
+begin
+  sddHistory.DeleteAll;
+end;
+
 end.

+ 21 - 5
Frames/ZJJLFme.pas

@@ -197,8 +197,16 @@ end;
 
 procedure TZJJLFrame.actnGenerateFxZJJLExecute(Sender: TObject);
 begin
-  TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType := 0;
-  GenerateZJJL;
+  with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
+  begin
+    if (ZJJLType = 0) or QuestMessage('当前为“总量控制”格式, 切换至“0号台账”将情况数据并重新生成,确定要切换么?') then
+    begin
+      if ZJJLType = 1 then
+        FZJJLData.ClearHistory;
+      ZJJLType := 0;
+      GenerateZJJL;
+    end;
+  end;
 end;
 
 procedure TZJJLFrame.GenerateZJJL;
@@ -213,7 +221,7 @@ begin
     0: FZJJLData.GenerateAll;
     1: FZJJLData.GenerateAllByB_Code;
   end;
-  RefreshTitle; 
+  RefreshTitle;
   if (saZJJL.DataView.RecordCount > 0) then
     saZJJL.DataView.LocateInControl(saZJJL.DataView.Records[0]);
   zgDetailInfo.Invalidate;
@@ -221,8 +229,16 @@ end;
 
 procedure TZJJLFrame.actnGenerateGclZJJLExecute(Sender: TObject);
 begin
-  TPhaseData(FZJJLData.PhaseData).PhaseProperty.ZJJLType := 1;
-  GenerateZJJL;
+  with TPhaseData(FZJJLData.PhaseData).PhaseProperty do
+  begin
+    if (ZJJLType = 1) or (QuestMessage('当前为“0号台账”格式, 切换至“总量控制”将情况数据并重新生成,确定要切换么?')) then
+    begin
+      if ZJJLType = 0 then
+        FZJJLData.ClearHistory;
+      ZJJLType := 1;
+      GenerateZJJL;
+    end;
+  end;
 end;
 
 procedure TZJJLFrame.actnGenerateUpdate(Sender: TObject);