123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694 |
- unit BillsMeasureFme;
- interface
- uses
- BillsMeasureDm, UtilMethods, BillsClipboard, sdIDTreeCells,
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, ZJGrid, ComCtrls, ToolWin, StdCtrls, ExtCtrls, sdGridDBA,
- sdGridTreeDBA, sdDB, ActnList, dxBar, sdIDTree, JimLabels;
- type
- TBillsMeasureFrame = class(TFrame)
- pnlExprs: TPanel;
- laEdtExprs: TLabeledEdit;
- pnlBills: TPanel;
- zgBillsMeasure: TZJGrid;
- stdBillsMeasure: TsdGridTreeDBA;
- dxpmBills: TdxBarPopupMenu;
- alBills: TActionList;
- actnCalculateAll: TAction;
- actnExportGridToExcel: TAction;
- actnSetStageBookmark: TAction;
- pnlNodeDetail: TPanel;
- pnlDealProperty: TPanel;
- labDealPropertyTitle: TJimGradLabel;
- zgDealProperty: TZJGrid;
- procedure dxpmBillsPopup(Sender: TObject);
- procedure zgBillsMeasureMouseDown(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- procedure laEdtExprsKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure laEdtExprsExit(Sender: TObject);
- procedure actnCalculateAllExecute(Sender: TObject);
- procedure zgBillsMeasureCellGetColor(Sender: TObject; ACoord: TPoint;
- var AColor: TColor);
- procedure actnExportGridToExcelExecute(Sender: TObject);
- procedure zgBillsMeasureCellButtonClick(Sender: TObject; Col,
- Row: Integer);
- procedure zgBillsMeasureCustomPaste(Sender: TObject; ABounds: TRect;
- ASourSheet: TZjSheet);
- procedure zgBillsMeasureKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- procedure actnSetStageBookmarkExecute(Sender: TObject);
- procedure zgBillsMeasureCurrentChanged(Sender: TObject; Col,
- Row: Integer);
- procedure zgDealPropertyCellGetFont(Sender: TObject; ACoord: TPoint;
- AFont: TFont);
- procedure zgDealPropertyCellTextChanged(Sender: TObject; Col,
- Row: Integer);
- procedure zgDealPropertyCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- procedure actnSetStageBookmarkUpdate(Sender: TObject);
- private
- FBillsMeasureData: TBillsMeasureData;
- FShowPriceChange: Boolean;
- FShowBGLCode: Boolean;
- FShowDesignQuantity: Boolean;
- FShowAddField: Boolean; // For Inner Test
- FShowPMField: Boolean; // For Inner Test
- FOnAfterSetBookmark: TBookmarkRefreshEvent;
- FShowAlias: Boolean;
- procedure ExpandMouseDown(AGridCell: TzjCell);
- function CheckExprsColumn: Boolean;
- procedure SetColumnVisible(const AColumn: string; AVisible: Boolean);
- procedure SetAddFieldVisible(AValue: Boolean);
- procedure SetPMFieldVisible(AValue: Boolean);
- procedure LoadDealProperty(ARec: TsdDataRecord);
- procedure BeginExpandNode;
- procedure EndExpandNode;
- procedure ResetPhaseDataReadOnly(AReadOnly: Boolean);
- procedure ResetBaseDataReadOnly(AReadOnly: Boolean);
- procedure ResetAllowInsert(AAllow: Boolean);
- procedure SetShowPriceChange(const Value: Boolean);
- procedure SetShowBGLCode(const Value: Boolean);
- procedure SetShowDesignQuantity(const Value: Boolean);
- procedure SetShowAlias(const Value: Boolean);
- public
- constructor Create(AProjectFrame: TFrame; ABillsMeasureData: TBillsMeasureData);
- destructor Destroy; override;
- procedure ExpandNodeTo(ALevel: Integer);
- procedure ExpandXmjNode;
- procedure ExpandCurPhase;
- procedure RefreshPhase_Stage;
- property ShowPriceChange: Boolean read FShowPriceChange write SetShowPriceChange;
- property ShowBGLCode: Boolean read FShowBGLCode write SetShowBGLCode;
- property ShowDesignQuantity: Boolean read FShowDesignQuantity write SetShowDesignQuantity;
- property ShowAlias: Boolean read FShowAlias write SetShowAlias;
- property OnAfterSetBookmark: TBookmarkRefreshEvent read FOnAfterSetBookmark write FOnAfterSetBookmark;
- property BillsMeasureData: TBillsMeasureData read FBillsMeasureData;
- end;
- implementation
- {$R *.dfm}
- uses
- MainFrm, ProjectFme, ProjectData, ExportExcel, BGLDm, BGLSelectFrm,
- Types, ZhAPI, BillsTree, mDataRecord;
- { TBillsFrame }
- constructor TBillsMeasureFrame.Create(AProjectFrame: TFrame;
- ABillsMeasureData: TBillsMeasureData);
- begin
- inherited Create(AProjectFrame);
- FBillsMeasureData := ABillsMeasureData;
- stdBillsMeasure.IDTree := FBillsMeasureData.BillsMeasureTree;
- zgBillsMeasure.OnExpandMouseDown := ExpandMouseDown;
- end;
- destructor TBillsMeasureFrame.Destroy;
- begin
- inherited;
- end;
- procedure TBillsMeasureFrame.dxpmBillsPopup(Sender: TObject);
- begin
- SetDxBtnAction(actnCalculateAll, MainForm.dxbtnCalculateAll);
- SetDxBtnAction(actnExportGridToExcel, MainForm.dxbtnExportGridToExcel);
- SetDxBtnAction(actnSetStageBookmark, MainForm.dxbtnSetBookmark);
- end;
- procedure TBillsMeasureFrame.zgBillsMeasureMouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- var
- vCol: TsdGridColumn;
- vViewCol: TsdViewColumn;
- begin
- if Button = mbRight then
- dxpmBills.PopupFromCursorPos
- else
- begin
- if CheckExprsColumn then
- laEdtExprs.Text := zgBillsMeasure.CurCell.EditText
- else
- laEdtExprs.Text := '';
- stdBillsMeasure.FindColumn(zgBillsMeasure.CurCol, vCol);
- laEdtExprs.ReadOnly := vCol.ReadOnly;
- end;
- end;
- procedure TBillsMeasureFrame.SetShowPriceChange(const Value: Boolean);
- begin
- FShowPriceChange := Value;
- stdBillsMeasure.Column('NewPrice').Visible := FShowPriceChange;
- stdBillsMeasure.Column('CurPcQuantity').Visible := FShowPriceChange;
- stdBillsMeasure.Column('CurPcTotalPrice').Visible := FShowPriceChange;
- stdBillsMeasure.Column('CurPcBGLCode').Visible := FShowBGLCode and FShowPriceChange;
- stdBillsMeasure.Column('EndPcQuantity').Visible := FShowPriceChange;
- stdBillsMeasure.Column('EndPcTotalPrice').Visible := FShowPriceChange;
- stdBillsMeasure.Column('AddPcQuantity').Visible := FShowPriceChange;
- stdBillsMeasure.Column('AddPcTotalPrice').Visible := FShowPriceChange;
- end;
- procedure TBillsMeasureFrame.laEdtExprsKeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if Key = VK_Return then
- begin
- zgBillsMeasure.SetFocus;
- if not TLabeledEdit(Sender).ReadOnly then
- if CheckExprsColumn then
- zgBillsMeasure.CurCell.Text := laEdtExprs.Text;
- end;
- end;
- procedure TBillsMeasureFrame.laEdtExprsExit(Sender: TObject);
- begin
- if not TLabeledEdit(Sender).ReadOnly then
- if CheckExprsColumn then
- zgBillsMeasure.CurCell.Text := laEdtExprs.Text;
- end;
- procedure TBillsMeasureFrame.actnCalculateAllExecute(Sender: TObject);
- begin
- TProjectData(FBillsMeasureData.ProjectData).CalculateAll;
- end;
- procedure TBillsMeasureFrame.zgBillsMeasureCellGetColor(Sender: TObject; ACoord: TPoint;
- var AColor: TColor);
- var
- stnNode: TMeasureBillsIDTreeNode;
- iCreatePhaseID: Integer;
- StageRec: TStageRecord;
- fDiffer: Double;
- begin
- AColor := clWindow;
- if ACoord.Y > stdBillsMeasure.IDTree.Count + 1 then Exit;
- stnNode := TMeasureBillsIDTreeNode(stdBillsMeasure.IDTree.Items[ACoord.Y - 2]);
- if not Assigned(stnNode) then Exit;
- iCreatePhaseID := stnNode.Rec.CreatePhaseID.AsInteger;
- // 根据层次底色不同
- if stnNode.ParentID = 1 then
- AColor := $00FBCAC4
- else if (stnNode.Rec.B_Code.AsString = '') and (stnNode.Level > 0) then
- AColor := $00F9E8DF;
- // 书签
- if TProjectData(FBillsMeasureData.ProjectData).ProjProperties.PhaseCount > 0 then
- begin
- StageRec := stnNode.StageRec;
- if Assigned(StageRec) and StageRec.HasBookmark.AsBoolean then
- AColor := $00CFE2F9;
- end;
- // 根据节点创建期数底色不同
- if iCreatePhaseID > 0 then
- begin
- // 当前期不存在节点,底色为灰色提示用户
- if iCreatePhaseID > TProjectData(FBillsMeasureData.ProjectData).PhaseIndex then
- AColor := $00D5D5D5
- // 当前期新增节点,底色为黄色提示用户
- else if iCreatePhaseID = TProjectData(FBillsMeasureData.ProjectData).PhaseIndex then
- AColor := $00A7FDFD;
- end;
- // 叶子节点,累计合同计量超过0号台账,整行数据的底色变为暗红提示用户
- if not stnNode.HasChildren then
- begin
- with stnNode.Rec do
- begin
- if CalcType.AsInteger = 0 then
- fDiffer := QuantityRoundTo(AddDealQuantity.AsFloat - Quantity.AsFloat)
- else
- fDiffer := TotalPriceRoundTo(AddDealTotalPrice.AsFloat - TotalPrice.AsFloat);
- if fDiffer > 0 then
- AColor := $00646AFE;
- end;
- end;
- end;
- procedure TBillsMeasureFrame.SetColumnVisible(const AColumn: string;
- AVisible: Boolean);
- begin
- if AVisible then
- stdBillsMeasure.Column(AColumn).Width := 60
- else
- stdBillsMeasure.Column(AColumn).Width := 0;
- end;
- procedure TBillsMeasureFrame.SetShowBGLCode(const Value: Boolean);
- begin
- FShowBGLCode := Value;
- if FShowBGLCode then
- stdBillsMeasure.Column('CurQcQuantity').Title.CaptionAcrossCols := '3'
- else
- stdBillsMeasure.Column('CurQcQuantity').Title.CaptionAcrossCols := '2';
- stdBillsMeasure.Column('CurQcBGLCode').Visible := FShowBGLCode;
- if FShowBGLCode then
- stdBillsMeasure.Column('CurPcQuantity').Title.CaptionAcrossCols := '3'
- else
- stdBillsMeasure.Column('CurPcQuantity').Title.CaptionAcrossCols := '2';
- stdBillsMeasure.Column('CurPcBGLCode').Visible := FShowBGLCode and FShowPriceChange;
- end;
- procedure TBillsMeasureFrame.actnExportGridToExcelExecute(Sender: TObject);
- var
- sFileName: string;
- ExcelExportor: TExcelExportor;
- begin
- if SaveFile(sFileName, '.xls') then
- begin
- ExcelExportor := TExcelExportor.Create;
- try
- ExcelExportor.ExportToFile(zgBillsMeasure, sFileName);
- finally
- ExcelExportor.Free;
- end;
- end;
- end;
- function TBillsMeasureFrame.CheckExprsColumn: Boolean;
- var
- iCol: Integer;
- begin
- iCol := zgBillsMeasure.CurCol - zgBillsMeasure.FixedColCount;
- Result := (iCol = stdBillsMeasure.VisibleCol('CurDealQuantity'))
- or (iCol = stdBillsMeasure.VisibleCol('CurDealTotalPrice'))
- or (iCol = stdBillsMeasure.VisibleCol('CurQcQuantity'))
- or (iCol = stdBillsMeasure.VisibleCol('CurQcTotalPrice'))
- or (iCol = stdBillsMeasure.VisibleCol('CurPcQuantity'))
- or (iCol = stdBillsMeasure.VisibleCol('CurPcTotalPrice'));
- end;
- procedure TBillsMeasureFrame.zgBillsMeasureCellButtonClick(Sender: TObject;
- Col, Row: Integer);
- procedure SelectAndUpdateBGL(const AType, AField: string; ANode: TsdIDTreeNode);
- var
- vOrgBGL, vNewBGL: TBGLSelectInfo;
- StageRec: TStageRecord;
- begin
- if not Assigned(ANode) then Exit;
- StageRec := TMeasureBillsIDTreeNode(ANode).StageRec;
- try
- if Assigned(StageRec) then
- begin
- vOrgBGL := TBGLSelectInfo.Create(ANode.Rec,
- StageRec.ValueByName(AType + AField).AsFloat, True);
- vOrgBGL.MergedCode := StageRec.ValueByName(AType + 'BGLCode').AsString;
- vOrgBGL.MergedNum := StageRec.ValueByName(AType + 'BGLNum').AsString;
- end
- else
- vOrgBGL := TBGLSelectInfo.Create(ANode.Rec, 0, True);
- vNewBGL := TBGLSelectInfo.Create(ANode.Rec, 0, False);
- if SelectBGLAndBGNum(vOrgBGL, vNewBGL, FBillsMeasureData.ProjectData) then
- begin
- if not Assigned(StageRec) then
- begin
- StageRec := FBillsMeasureData.StageData.AddStageRecord(ANode.ID);
- TMeasureBillsIDTreeNode(ANode).StageRec := StageRec;
- end;
- StageRec.ValueByName(AType + AField).AsFloat := vNewBGL.TotalNum;
- StageRec.ValueByName(AType + 'BGLCode').AsString := vNewBGL.MergedCode;
- StageRec.ValueByName(AType + 'BGLNum').AsString := vNewBGL.MergedNum;
- FBillsMeasureData.StageData.UpdateBGLInfo(StageRec, AType);
- FBillsMeasureData.UpdateBGLInfo(ANode.ID, StageRec, AType);
- TProjectData(FBillsMeasureData.ProjectData).BGLData.ApplyBGL(vOrgBGL, vNewBGL);
- // 重新计算合同支付所有数据
- TProjectData(FBillsMeasureData.ProjectData).PhaseData.PhasePayData.CalculateAll;
- end;
- finally
- vOrgBGL.Free;
- vNewBGL.Free;
- end;
- end;
- procedure GetTypeAndField(var AType, AField: string);
- begin
- if (Col = stdBillsMeasure.VisibleCol('CurQcQuantity') + 1) then
- begin
- AType := 'Qc';
- AField := 'Quantity';
- end
- else if (Col = stdBillsMeasure.VisibleCol('CurPcQuantity') + 1) then
- begin
- AType := 'Pc';
- AField := 'Quantity';
- end;
- end;
- var
- stnCurNode: TBillsIDTreeNode;
- sType, sField: string;
- begin
- stnCurNode := TBillsIDTreeNode(stdBillsMeasure.IDTree.Selected);
- if stnCurNode.HasChildren then Exit;
- with TProjectData(FBillsMeasureData.ProjectData) do
- if PhaseData.StageDataReadOnly then Exit;
- GetTypeAndField(sType, sField);
- if (sType = '') or (sField = '') then Exit;
- if stnCurNode.Rec.CalcType.AsInteger = 1 then
- begin
- WarningMessage('该清单不可输入数量单价,如需使用数量×单价计算,请先清空所有直接输入的金额!');
- Exit;
- end;
- SelectAndUpdateBGL(sType, sField, stnCurNode);
- end;
- procedure TBillsMeasureFrame.zgBillsMeasureCustomPaste(Sender: TObject;
- ABounds: TRect; ASourSheet: TZjSheet);
- var
- iRow, iCol: Integer;
- begin
- for iRow := ABounds.Top to ABounds.Bottom - 1 do
- begin
- if not zgBillsMeasure.RowVisible[iRow] then Continue;
- for iCol := ABounds.Left to ABounds.Right - 1 do
- with TZJGrid(Sender).Cells[iCol, iRow] do
- if CanEdit then Text := ASourSheet.Values[iCol - ABounds.Left, iRow - ABounds.Top];
- end;
- end;
- procedure TBillsMeasureFrame.SetShowDesignQuantity(const Value: Boolean);
- begin
- FShowDesignQuantity := Value;
- stdBillsMeasure.Column('DealDgnQuantity1').Visible := FShowDesignQuantity;
- stdBillsMeasure.Column('DealDgnQuantity2').Visible := FShowDesignQuantity;
- stdBillsMeasure.Column('CDgnQuantity1').Visible := FShowDesignQuantity;
- stdBillsMeasure.Column('CDgnQuantity2').Visible := FShowDesignQuantity;
- stdBillsMeasure.Column('AddDgnPrice').Visible := FShowDesignQuantity;
- end;
- procedure TBillsMeasureFrame.SetAddFieldVisible(AValue: Boolean);
- begin
- FShowAddField := AValue;
- stdBillsMeasure.Column('AddDealQuantity').Visible := AValue;
- stdBillsMeasure.Column('AddDealTotalPrice').Visible := AValue;
- stdBillsMeasure.Column('AddQcQuantity').Visible := AValue;
- stdBillsMeasure.Column('AddQcTotalPrice').Visible := AValue;
- stdBillsMeasure.Column('AddPcQuantity').Visible := AValue;
- stdBillsMeasure.Column('AddPcTotalPrice').Visible := AValue;
- stdBillsMeasure.Column('AddGatherQuantity').Visible := AValue;
- stdBillsMeasure.Column('AddGatherTotalPrice').Visible := AValue;
- end;
- procedure TBillsMeasureFrame.zgBillsMeasureKeyDown(Sender: TObject;
- var Key: Word; Shift: TShiftState);
- begin
- // For Inner Test
- if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
- and (Key in [65, 97]) // 'a', 'A'
- and (zgBillsMeasure.CurCol = 4) then
- SetAddFieldVisible(not FShowAddField);
- if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
- and (Key in [80, 112]) // 'p', 'P' - Parent
- and (zgBillsMeasure.CurCol = 5) then
- begin
- FBillsMeasureData.ShowParentData := not FBillsMeasureData.ShowParentData;
- zgBillsMeasure.Invalidate;
- end;
- if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
- and (Key in [77, 109]) // 'm', 'M' - PriceMargin
- and (zgBillsMeasure.CurCol = 5) then
- begin
- SetPMFieldVisible(not FShowPMField);
- end;
- if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
- and (Key in [67, 99]) then // 'c', 'C'
- actnCalculateAll.Execute;
- end;
- procedure TBillsMeasureFrame.actnSetStageBookmarkExecute(Sender: TObject);
- var
- vNode: TMeasureBillsIDTreeNode;
- StageRec: TStageRecord;
- begin
- vNode := TMeasureBillsIDTreeNode(FBillsMeasureData.BillsMeasureTree.Selected);
- StageRec := vNode.StageRec;
- if not Assigned(StageRec) then
- begin
- StageRec := FBillsMeasureData.StageData.AddStageRecord(stdBillsMeasure.IDTree.Selected.ID);
- vNode.StageRec := StageRec;
- end;
- if StageRec.HasBookMark.AsBoolean then
- begin
- StageRec.HasBookMark.AsBoolean := False;
- StageRec.MarkMemo.AsString := '';
- end
- else
- StageRec.HasBookMark.AsBoolean := True;
- TProjectData(FBillsMeasureData.ProjectData).BillsBookmarkData.RefreshStageBookmark;
- if Assigned(FOnAfterSetBookmark) then
- FOnAfterSetBookmark(StageRec.HasBookMark.AsBoolean);
- zgBillsMeasure.InvalidateRow(zgBillsMeasure.CurRow);
- end;
- procedure TBillsMeasureFrame.zgBillsMeasureCurrentChanged(Sender: TObject;
- Col, Row: Integer);
- var
- stnNode: TsdIDTreeNode;
- bShowDealProperty: Boolean;
- begin
- stnNode := stdBillsMeasure.IDTree.Selected;
- bShowDealProperty := False;
- if Assigned(stnNode) then
- begin
- bShowDealProperty := stnNode.Rec.ValueByName('DealCode').AsString <> '';
- pnlNodeDetail.Visible := bShowDealProperty;
- LoadDealProperty(stnNode.Rec);
- end;
- end;
- procedure TBillsMeasureFrame.LoadDealProperty(ARec: TsdDataRecord);
- var
- fHasPay, fNotPay: Double;
- begin
- zgDealProperty.OnCellTextChanged := nil;
- zgDealProperty.Cells[0, 0].Text := '合同类别';
- zgDealProperty.Cells[0, 1].Text := ARec.ValueByName('DealType').AsString;
- zgDealProperty.Cells[0, 1].Align := gaCenterLeft;
- zgDealProperty.ColWidths[0] := 80;
- zgDealProperty.Cells[1, 0].Text := '累计应扣款';
- zgDealProperty.Cells[1, 1].Text := ARec.ValueByName('AddCutTotalPrice').AsString;
- zgDealProperty.Cells[1, 1].Align := gaCenterRight;
- zgDealProperty.ColWidths[1] := 80;
- zgDealProperty.Cells[2, 0].Text := '累计应支付';
- fHasPay := TotalPriceRoundTo(
- ARec.ValueByName('AddGatherTotalPrice').AsFloat - ARec.ValueByName('AddCutTotalPrice').AsFloat);
- zgDealProperty.Cells[2, 1].Text := FloatToStr(fHasPay);
- zgDealProperty.Cells[2, 1].Align := gaCenterRight;
- zgDealProperty.ColWidths[2] := 80;
- zgDealProperty.Cells[3, 0].Text := '累计已支付';
- zgDealProperty.Cells[3, 1].Text := ARec.ValueByName('AddPayTotalPrice').AsString;
- zgDealProperty.Cells[3, 1].Align := gaCenterRight;
- zgDealProperty.ColWidths[3] := 80;
- zgDealProperty.Cells[4, 0].Text := '待支付';
- fNotPay := TotalPriceRoundTo(fHasPay - ARec.ValueByName('AddPayTotalPrice').AsFloat);
- zgDealProperty.Cells[4, 1].Text := FloatToStr(fNotPay);
- zgDealProperty.Cells[4, 1].Align := gaCenterRight;
- zgDealProperty.ColWidths[4] := 80;
- zgDealProperty.OnCellTextChanged := zgDealPropertyCellTextChanged;
- end;
- procedure TBillsMeasureFrame.zgDealPropertyCellGetFont(Sender: TObject;
- ACoord: TPoint; AFont: TFont);
- begin
- if ((ACoord.X = 2) or (ACoord.X = 4)) and (ACoord.Y = 1) then
- AFont.Color := clGrayText;
- end;
- procedure TBillsMeasureFrame.zgDealPropertyCellTextChanged(Sender: TObject;
- Col, Row: Integer);
- procedure ModifyField(ARec: TsdDataRecord; const AField: string; ACell: TzjCell);
- var
- fValue, fHasPay, fNotPay: Double;
- begin
- if (ACell.Text = '') or TryStrToFloat(ACell.Text, fValue) then
- begin
- ARec.ValueByName(AField).AsString := ACell.Text;
- // 更新显示应支付&待支付数据
- fHasPay := TotalPriceRoundTo(
- ARec.ValueByName('AddGatherTotalPrice').AsFloat - ARec.ValueByName('AddCutTotalPrice').AsFloat);
- zgDealProperty.Cells[2, 1].Text := FloatToStr(fHasPay);
- fNotPay := TotalPriceRoundTo(fHasPay - ARec.ValueByName('AddPayTotalPrice').AsFloat);
- zgDealProperty.Cells[4, 1].Text := FloatToStr(fNotPay);
- end
- else
- begin
- ErrorMessage('只允许输入数字!!');
- ACell.Text := ARec.ValueByName(AField).AsString;
- end;
- end;
- var
- Rec: TsdDataRecord;
- begin
- Rec := stdBillsMeasure.IDTree.Selected.Rec;
- case Col of
- 0: Rec.ValueByName('DealType').AsString := zgDealProperty.Cells[Col, Row].Text;
- 1: ModifyField(Rec, 'AddCutTotalPrice', zgDealProperty.Cells[Col, Row]);
- 3: ModifyField(Rec, 'AddPayTotalPrice', zgDealProperty.Cells[Col, Row]);
- end;
- end;
- procedure TBillsMeasureFrame.zgDealPropertyCellCanEdit(Sender: TObject;
- const ACoord: TPoint; var Allow: Boolean);
- begin
- Allow := (ACoord.X = 0) or (ACoord.X = 1) or (ACoord.X = 3);
- end;
- procedure TBillsMeasureFrame.SetShowAlias(const Value: Boolean);
- begin
- FShowAlias := Value;
- stdBillsMeasure.Column('Alias').Visible := FShowAlias;
- end;
- procedure TBillsMeasureFrame.actnSetStageBookmarkUpdate(Sender: TObject);
- begin
- TAction(Sender).Enabled := TProjectData(FBillsMeasureData.ProjectData).ProjProperties.PhaseCount > 0;
- end;
- procedure TBillsMeasureFrame.ExpandNodeTo(ALevel: Integer);
- begin
- BeginExpandNode;
- try
- FBillsMeasureData.ExpandNodeTo(ALevel);
- finally
- EndExpandNode;
- end;
- end;
- procedure TBillsMeasureFrame.ExpandXmjNode;
- begin
- BeginExpandNode;
- try
- FBillsMeasureData.ExpandXmjNode;
- finally
- EndExpandNode;
- end;
- end;
- procedure TBillsMeasureFrame.BeginExpandNode;
- begin
- zgBillsMeasure.BeginUpdate;
- zgBillsMeasure.OnCellGetColor := nil;
- BeginUpdateWindow(zgBillsMeasure.Handle);
- stdBillsMeasure.DisableControl;
- end;
- procedure TBillsMeasureFrame.EndExpandNode;
- begin
- stdBillsMeasure.EnableControl;
- EndUpdateWindow(zgBillsMeasure.Handle);
- zgBillsMeasure.OnCellGetColor := zgBillsMeasureCellGetColor;
- zgBillsMeasure.EndUpdate;
- end;
- procedure TBillsMeasureFrame.ExpandCurPhase;
- begin
- BeginExpandNode;
- try
- FBillsMeasureData.ExpandCurPhase;
- finally
- EndExpandNode;
- end;
- end;
- procedure TBillsMeasureFrame.RefreshPhase_Stage;
- begin
- with TProjectData(FBillsMeasureData.ProjectData) do
- begin
- ResetPhaseDataReadOnly(StageDataReadOnly);
- ResetBaseDataReadOnly(BaseDataReadOnly);
- ResetAllowInsert(AllowInsert);
- end;
- zgBillsMeasure.Invalidate;
- end;
- procedure TBillsMeasureFrame.ResetPhaseDataReadOnly(AReadOnly: Boolean);
- begin
- stdBillsMeasure.Column('CurDealQuantity').ReadOnly := AReadOnly;
- stdBillsMeasure.Column('CurDealTotalPrice').ReadOnly := AReadOnly;
- stdBillsMeasure.Column('CurQcQuantity').ReadOnly := AReadOnly;
- stdBillsMeasure.Column('CurPcQuantity').ReadOnly := AReadOnly;
- end;
- procedure TBillsMeasureFrame.ResetBaseDataReadOnly(AReadOnly: Boolean);
- begin
- stdBillsMeasure.Column('Code').ReadOnly := AReadOnly;
- stdBillsMeasure.Column('B_Code').ReadOnly := AReadOnly;
- stdBillsMeasure.Column('Name').ReadOnly := AReadOnly;
- stdBillsMeasure.Column('Units').ReadOnly := AReadOnly;
- stdBillsMeasure.Column('Price').ReadOnly := AReadOnly;
- stdBillsMeasure.Column('NewPrice').ReadOnly := AReadOnly;
- stdBillsMeasure.Column('DrawingCode').ReadOnly := AReadOnly;
- end;
- procedure TBillsMeasureFrame.ResetAllowInsert(AAllow: Boolean);
- begin
- if AAllow then
- stdBillsMeasure.Options := stdBillsMeasure.Options + [aoAllowInsert]
- else
- stdBillsMeasure.Options := stdBillsMeasure.Options - [aoAllowInsert];
- end;
- procedure TBillsMeasureFrame.SetPMFieldVisible(AValue: Boolean);
- begin
- FShowAddField := AValue;
- stdBillsMeasure.Column('PM_PreTotalPrice').Visible := AValue;
- stdBillsMeasure.Column('PM_TotalPrice').Visible := AValue;
- stdBillsMeasure.Column('PM_AddTotalPrice').Visible := AValue;
- end;
- procedure TBillsMeasureFrame.ExpandMouseDown(AGridCell: TzjCell);
- procedure CommonExpand(vNode: TsdIDTreeNode);
- begin
- AGridCell.Grid.BeginUpdate;
- vNode.Expanded := not vNode.Expanded;
- AGridCell.Grid.EndUpdate;
- AGridCell.Grid.InvalidateView(AGridCell.ViewRect);
- end;
- procedure QuikExpand(vNode: TsdIDTreeNode);
- begin
- Screen.Cursor := crHourGlass;
- BeginExpandNode;
- try
- vNode.Expanded := not vNode.Expanded;
- finally
- EndExpandNode;
- Screen.Cursor := crDefault;
- end;
- end;
- var
- stnNode: TsdIDTreeNode;
- begin
- stnNode := TsdIDTreeCell(AGridCell).TreeNode;
- if stnNode.PosterityCount > 10000 then
- QuikExpand(stnNode)
- else
- CommonExpand(stnNode);
- end;
- end.
|