expertcad/SRC/SCSNormBase/U_ResourceReport_oldVers.pas
2025-05-12 10:07:51 +03:00

18592 lines
776 KiB
ObjectPascal

unit U_ResourceReport;
interface
uses
Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ToolWin, Contnrs, Printers, Math,
U_BaseCommon, U_BaseConstants, U_Constants, U_SCSComponent, U_SCSLists, U_SCSInterfPath, U_frOLEExl, {U_PreviewReport, }ImgList, cxLookAndFeelPainters, cxButtons, XPMenu,
U_BaseSettings,
DB, kbmMemTable, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
cxDataStorage, cxEdit, cxDBData, cxSpinEdit, cxCheckBox, cxCurrencyEdit,
cxColorComboBox, cxGridCustomTableView, cxGridTableView,
cxGridDBTableView, cxGridLevel, cxClasses, cxControls, cxGridCustomView,
cxGrid, ExtCtrls, RzPanel, RzLabel, FR_Class, FR_DSet, FR_DBSet, FR_View,
FR_Desgn, FR_PrDlg, FR_Prntr, ActnList, RzButton, RzRadChk, siComp, siLngLnk, exgrid,
RapTree, FlytreePro, Treecoll, IsPlugEdit, ispinedit, Menus, RzEdit, Mask, RzSpnEdt, ShellApi,
pFIBQuery,
RzTabs, IniFiles, U_ProtectionCommon, FR_ChBox, DrawObjects, RzRadGrp;//, HTTPGet;
//Tolik
// kbmMWStreamFormat, kbmMWBinaryStreamFormat, kbmMWClientDataSet;
//
const
// Template Column Type
ttSimple = 1;
ttStamp = 2;
ttA3 = 3;
// TargetColumnIndex
tciCAD = 0;
tciReport = 1;
tciName = 2;
//Report Column Index
rciIsOn = 0;
rciName = 1;
rciSimple = 2;
rciStamp = 3;
// Section
seRepTemplate = 'RepTemplate';
// Idents
idtRepType = 'RepType';
idtReportUseKind = 'ReportUseKind';
idtTemplateType = 'TemplateType';
idtName = 'Name';
idtTemplate = 'Template';
// GroupMode
gmComponType = 0;
gmGroupName = 1;
type
TReportSortInfo = class;
TReportItemParams = class;
// added by Tolik
// íóæíî äëÿ ðàñ÷åòà ðàñõîäà êàáåëÿ èç êàòóøåê
// êàáåëü
TCables = record
Length : double; // äëèíà
Selected : boolean; // îòîáðàí
end;
// êàòóøêà
TCableReels = record
CableIDs : TIntList; // èäåíòèôèêàòîðû êàáåëåé
Rest : double; // îñòàòîê
Length : double; // èçíà÷àëüíàÿ äëèíà
Cables : array of double; // êóñêè êàáåëÿ
CanCut : boolean; // ôëàã (ìîæíè ëè åùå îòðåçàòü îò äàííîé êàòóøêè)
end;
// òèï êàáåëÿ èëè ïîñòàâêè
TCableTypes = record
Name : string; // íàèìåíîâàíèå, àðòèêóë
Length : double; // äëèíà (ðàçìåð) ïîñòàâêè
TypeName : string; // àðòèêóë (åñëè åñòü) èëè îáîçíà÷åíèå ïîñòàâêè
ReelName : string; // íàçâàíèå ïîñòàâêè (êàòóøêà, ìîòîê è ïð.)
Izm : string; // åäèíèöû èçìåðåíèÿ
Cables : array of TCables; // êàáåëè
Reels : array of TCableReels; // êàòóøêè
CableIDs : TIntList; // àéäèøíèêè êàáåëåé
CableCypher : string; // èäåíòèôèêàòîð
end;
////////////////////////////////////////////////////////////////////////////////////////////////////////////
TReportShablons = class(TMyObject)
private
FRepShablons: TStringList;
FActiveShablonID: Integer;
FMessgShablonNoExists: String;
procedure AddShablonToList(AID: Integer; AName: String; AIsActive: Boolean);
procedure DefineActiveShablonIfNoDefined;
procedure ClearRepShablons;
constructor Create;
destructor Destroy; override;
function GetActiveShablonName: string;
function GetShablonNameByID(AID: Integer): string;
procedure RemoveShablonNameByID(AID: Integer);
end;
TSortFieldLists = class(TMyObject)
private
FOwner: TReportSortInfo;
FFieldNames: TStringList;
FFieldCaptCodes: TStringList;
constructor Create(AOwner: TReportSortInfo);
destructor Destroy;
end;
TReportSortInfo = class(TMyObject)
private
FOwner: TReportItemParams;
//FAllFieldList: TSortFieldLists;
FAllFieldNames: TStringList;
FAllFieldCaptions: TStringList;
FUsedFieldNames: TStringList;
FID: Integer;
FRepKind: ShortInt;
FCaseSensitive: ShortInt;
FDescending: ShortInt;
public
property AllFieldNames: TStringList read FAllFieldNames;
property AllFieldCaptions: TStringList read FAllFieldCaptions;
property CaseSensitive: ShortInt read FCaseSensitive write FCaseSensitive;
property Descending: ShortInt read FDescending write FDescending;
property ID: Integer read FID write FID;
property Owner: TReportItemParams read FOwner write FOwner;
property RepKind: ShortInt read FRepKind write FRepKind;
property UsedFieldNames: TStringList read FUsedFieldNames write FUsedFieldNames;
procedure AddFieldInfo(const AFieldName, ACaption: String);
procedure Assign(AReportSortInfo: TReportSortInfo);
constructor Create(AOwner: TReportItemParams);
destructor Destroy;
function GetFieldCaption(const AFName: String): String;
end;
TReportItemParams = class(TMyObject)
private
FSimpleShablons: TReportShablons;
FStampShablons: TReportShablons;
FReportSortInfo: TReportSortInfo;
public
Mode: TResourceReportFormMode; // òèï îò÷åòà
ReportUseKind: TReportUseKind; // Èñïîëüçîâàíèå îò÷åòà â îïð. óñëîâèÿõ
ReportUseByProjType: TSCSTypes; // Èñïîëüçîâàíèå îò÷åòà â îïð. ïðîåêòàõ (íàïð òîëüêî äëÿ âíóòðåííåé ÑÊÑ).
// Ïóñòîå çíà÷ "[]" - îçíà÷àåò ÷òî ïðîåêò èñïîëüçóåòñÿ äëÿ âñåõ ïðîýêòîâ
RepType: Integer; // òèï îò÷åòà
CanHaveActiveComponents: Integer; // ó÷èòûâòü äåéñòâóþùèå êîìïîíåíòû
CanHaveZeroPriceComponents: Integer; // îòîáðàæàòü êîìïîíåíòû ñ íåëåâîé öåíîé
CanHaveFormMode: Integer; // ìîæíî ëè âûâåñòè îò÷åò íà ôîðìå
CanHavePageSize: Integer; // ìîæíî ëè âûáèðàòü ðàçìåð ñòðàíèöè
CanHaveDismountAccount: Integer; // Ó÷èòûâàòü äåìîíòàæ
CanHaveTemplate: Integer; // Ìîæíî ëè ñîçäàâàòü øàáëîíû
CanHaveStamp: Integer; // Îò÷åò ñî øòàìïîì
FullPathInCableJournal: Integer;
CanHaveSupplyValue: Integer; // Ó÷èòûâàòü ïîñòàâî÷íûå âåëè÷èíû
CanRoundValue: Integer; // Îêðóãëÿòü çíà÷åíèÿ
CanAsPlacingInProj: Integer; // Îòîáðàæàòü â ïàðÿäêå ðàçìåùåíèÿ
CanGroupByCompType: Integer; //Ãðóïïèðîâàòü ïî òèïó êîìïîíåíòà
CanFloorNppWithRoom: Integer; // Îòîáðàæàòü íîìåð ýòàæà ñ òåëåêîìóíèêàöèîííîé êîìíàòîé TS
CanInTwoCopies: Integer;
CanCabinetParams: Integer;
CanResources: Integer;
CanPricePrecision: Integer;
CanKolvoPrecision: Integer;
//Added by Tolik for ExplicationComponent Report
CanShowKabinet: Integer; // Îòîáðàæàòü ïîêàáèíåòíóþ ýêñïëèêàöèþ êîìïîíåíòîâ
CanShowObjHierarchy : Integer; // Îòîáðàæàòü èåðàðõèþ îáúåêòîâ
CanGroupByName : Integer; // Ãðóïïèðîâàòü êîìïîíåíòû ïî íàçâàèíþ
////Added by Tolik äëÿ ñ÷åòà-ôàêòóðû
CanShowResources : Integer;
CanShowWorks : Integer;
// Added by Tolik for GOSTCableJournal (ãàëî÷êó áóäåì âûêëþ÷àòü)
CanShowCablePaths : Integer;
///////////////
GroupMode: Integer;
constructor Create(AMode: TResourceReportFormMode; ARepType: Integer; AReportUseKind: TReportUseKind);
destructor Destroy; override;
function GetShablonsByTemplateType(ATemplateType: Integer): TReportShablons;
end;
//PReportItemParams = ^TReportItemParams;
TF_ResourceReport = class(TForm)
ImageList1: TImageList;
PrintDialog: TPrintDialog;
SaveDialog: TSaveDialog;
XPMenu: TXPMenu;
MemTable_RCable: TkbmMemTable;
MemTable_RResources: TkbmMemTable;
DataSource_MT_RCable: TDataSource;
DataSource_MT_RResources: TDataSource;
MemTable_RCableJournal: TkbmMemTable;
MemTable_RDisparityCompColor: TkbmMemTable;
DataSource_MT_RDisparityCompColor: TDataSource;
Report: TfrReport;
frDBDataSet_Master: TfrDBDataSet;
RepDesigner: TfrDesigner;
DataSource_MT_RCableJournal: TDataSource;
frDBDataSet_Detail: TfrDBDataSet;
MemTable_RTypeComponents: TkbmMemTable;
MemTable_RTypeComponentsDetail: TkbmMemTable;
DataSource_MT_RTypeComponents: TDataSource;
DataSource_MT_RTypeComponentsDetail: TDataSource;
MemTable_RSpecification: TkbmMemTable;
DataSource_MT_RSpecification: TDataSource;
MemTable_RSpecifTypeCompon: TkbmMemTable;
DataSource_MT_RSpecifTypeCompon: TDataSource;
frDBDataSet_SubDetail: TfrDBDataSet;
ActionList1: TActionList;
Act_ShowReport: TAction;
MemTable_RCableJournalExt: TkbmMemTable;
DataSource_MT_RCableJournalExt: TDataSource;
MemTable_RNorms: TkbmMemTable;
DataSource_MT_RNorms: TDataSource;
gbViewClose: TRzGroupBox;
gbTarget: TRzGroupBox;
RzGroupBox4: TRzGroupBox;
btClose: TRzBitBtn;
splitTarget: TSplitter;
btShowReport: TRzBitBtn;
Act_ShowWizardReport: TAction;
MemTable_RCableGroup: TkbmMemTable;
DataSource_MT_RCableGroup: TDataSource;
mtExplanatoryProj: TkbmMemTable;
dsrcExplanatoryProj: TDataSource;
mtExplanatoryList: TkbmMemTable;
dsrcExplanatoryList: TDataSource;
mtRCableJournalInterfaces: TkbmMemTable;
dsrcRCableJournalInterfaces: TDataSource;
mtRLegendObjectIcons: TkbmMemTable;
dsrcRLegendObjectIcons: TDataSource;
pnParamsAndModes: TRzPanel;
lng_Forms: TsiLangLinked;
tvReports: TFlyTreeViewPro;
ToolBar1: TToolBar;
btNewTemplate: TToolButton;
btEditTemplate: TToolButton;
btDelTemplate: TToolButton;
Act_NewSimpleTemplateFromStandart: TAction;
Act_NewStampTemplateFromStandart: TAction;
Act_NewSimpleTemplateFromUser: TAction;
Act_NewStampTemplateFromUser: TAction;
pmDropDownNewTemplate: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Act_EditTemplate: TAction;
Act_NewTemplate: TAction;
Act_DeleteTemplate: TAction;
Act_DropAll: TAction;
Act_EditSimpleTemplate: TAction;
Act_EditStampTemplate: TAction;
Act_DeleteSimpleTemplate: TAction;
Act_DeleteStampTemplate: TAction;
pmDropDownEditTemplate: TPopupMenu;
N6: TMenuItem;
N7: TMenuItem;
pmDropDownDelTemplate: TPopupMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
pmReports: TPopupMenu;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
RzPanel1: TRzPanel;
pmnuiNewTemplate: TMenuItem;
pmnuiEdit: TMenuItem;
pmnuiDel: TMenuItem;
RzGroupBox1: TRzGroupBox;
rbModeView: TRzRadioButton;
rbModePrint: TRzRadioButton;
rbModePacketPrint: TRzRadioButton;
tvReportTarget: TFlyTreeViewPro;
Timer_DefineReportNodeControls: TTimer;
rbModePacketPrintToExcel: TRzRadioButton;
mtReport: TkbmMemTable;
dsrcReport: TDataSource;
frDBDataSet_MasterFirst: TfrDBDataSet;
mtReportFirst: TkbmMemTable;
dsrcReportFirst: TDataSource;
RzBitBtn1: TRzBitBtn;
Act_NewMarkPage: TAction;
Act_NewMarkPageFromUser: TAction;
N12: TMenuItem;
N15: TMenuItem;
N18: TMenuItem;
N22: TMenuItem;
N20: TMenuItem;
N21: TMenuItem;
pnOtherProperties: TRzPanel;
lbOtherProperties: TRzLabel;
gbParams: TRzGroupBox;
pcRepParams: TRzPageControl;
tsProjRepParams: TRzTabSheet;
gbValues: TRzGroupBox;
cbCanRoundValue: TRzCheckBox;
cbCanHaveSupplyValue: TRzCheckBox;
gbPageSize: TRzGroupBox;
rbPageSizeA4: TRzRadioButton;
rbPageSizeA3: TRzRadioButton;
gbReportMode: TRzGroupBox;
rbRepModeDocument: TRzRadioButton;
rbRepModeForm: TRzRadioButton;
tsMarkPagesParams: TRzTabSheet;
cbFloorNppWithRoom: TRzCheckBox;
cbInTwoCopies: TRzCheckBox;
cbCanHaveActiveComponents: TRzCheckBox;
cbCanHaveZeroPriceComponents: TRzCheckBox;
cbCanHaveDismountAccount: TRzCheckBox;
cbReportWithStamp: TRzCheckBox;
cbFullPathInCableJournal: TRzCheckBox;
cbCanHaveActiveComponentsMarkPages: TRzCheckBox;
cbCanHaveDismountAccountMarkPages: TRzCheckBox;
gbNoCabinetNameShort: TRzGroupBox;
rbShowRoomName: TRzRadioButton;
rbShowString: TRzRadioButton;
edNoCabinetNameShort: TRzEdit;
lbNoCabinet: TLabel;
edNoCabinet: TRzEdit;
mtReportDetail: TkbmMemTable;
dsrcReportDetail: TDataSource;
mtReportSubDetail: TkbmMemTable;
dsrcReportSubDetail: TDataSource;
cbGroupByCompType: TRzCheckBox;
cbAsPlacingInProj: TRzCheckBox;
Timer1: TTimer;
ToolButton1: TToolButton;
btExportTemplateToFile: TToolButton;
Act_ImportTemplateFromFile: TAction;
Act_ExportTemplateToFile: TAction;
pmDropDownExportTemplate: TPopupMenu;
Act_ExportSimpleTemplateToFile: TAction;
Act_ExportStampTemplateToFile: TAction;
ActExportSimpleTemplateToFile1: TMenuItem;
ActExportSimpleTemplateToFile2: TMenuItem;
pmnuiImportTemplate: TMenuItem;
pmnuiExportTemplates: TMenuItem;
N25: TMenuItem;
N26: TMenuItem;
pmnuiExportTemplate: TMenuItem;
ToolButton2: TToolButton;
N19: TMenuItem;
Act_EditReportSortInfo: TAction;
N23: TMenuItem;
ToolButton3: TToolButton;
cbCanResources: TRzCheckBox;
pnPacketExportType: TPanel;
rbPackExportExcel: TRzRadioButton;
rbPackExportPdf: TRzRadioButton;
frCheckBoxObject1: TfrCheckBoxObject;
Timer_ShowReport: TTimer;
Act_ExportToBc3: TAction;
bc31: TMenuItem;
tsCablePathParams: TRzTabSheet;
cbCablePathShowEndObjName: TRzCheckBox;
cbCablePathShowObjName: TRzCheckBox;
cbCablePathShowConnInSeparatePaths: TRzCheckBox;
cbCablePathShowCableCanals: TRzCheckBox;
gbGroupType: TRzGroupBox;
rbGroupByComponType: TRzRadioButton;
rbGroupByGroupName: TRzRadioButton;
Label1: TLabel;
Label2: TLabel;
nePricePrecision: TRzNumericEdit;
Label3: TLabel;
Label4: TLabel;
neKolvoPrecision: TRzNumericEdit;
Timer_TimeOutExec: TTimer;
RzGroupBox2: TRzGroupBox;
cbCanShowKabinet: TRzCheckBox;
frReport1: TfrReport;
frDBDataSet1: TfrDBDataSet;
frDBDataSet2: TfrDBDataSet;
frDBDataSet3: TfrDBDataSet;
cbCanShowObjHierarchy: TRzCheckBox;
cbCanGroupByName: TRzCheckBox;
gbResources: TRzGroupBox;
cbCanShowResources: TRzCheckBox;
cbCanShowWorks: TRzCheckBox;
RzGroupBox3: TRzGroupBox;
cbShowCablePath: TRzCheckBox;
rgCableRate: TRzRadioGroup;
cbNone: TRzRadioButton;
cbMaxScrapRate: TRzRadioButton;
cbMaxEfficiency: TRzRadioButton;
MemTable_WACoordinates: TkbmMemTable;
DataSource_MT_WACoordinates: TDataSource;
procedure FormCreate(Sender: TObject);
procedure ToolButton_PrintClick(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure GT_RCableMaxLengthGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
procedure ReportGetValue(const ParName: String; var ParValue: Variant);
procedure ReportUserFunction(const Name: String; p1, p2, p3: Variant;
var Val: Variant);
procedure FormDestroy(Sender: TObject);
procedure _tvReportTargetGetSelectedIndex(Sender: TObject;
Node: TTreeNode);
procedure Act_ShowWizardReportExecute(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure gbViewCloseResize(Sender: TObject);
procedure cbCanHaveActiveComponentsClick(Sender: TObject);
procedure cbCanHaveZeroPriceComponentsClick(Sender: TObject);
procedure ReportBeginPage(pgNo: Integer);
procedure lbOtherPropertiesClick(Sender: TObject);
procedure lbOtherPropertiesMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
procedure lbOtherPropertiesMouseLeave(Sender: TObject);
procedure tvReportsCloseUp(Sender: TISPlugInplaceEdit;
Section: TISPlugSection; DropDown: TISDropDown; var Accept: Boolean);
procedure tvReportsSelectedChanged(OldNode, NewNode: TFlyNode);
procedure tvReportsDblClick(Sender: TObject);
procedure tvReportsDrawCell(Sender: TObject; aCanvas: TCanvas; ACol,
ARow: Integer; Rect: TRect; State: TExGridDrawState);
procedure Act_NewSimpleTemplateFromStandartExecute(Sender: TObject);
procedure Act_NewStampTemplateFromStandartExecute(Sender: TObject);
procedure Act_NewSimpleTemplateFromUserExecute(Sender: TObject);
procedure Act_NewStampTemplateFromUserExecute(Sender: TObject);
procedure Act_EditSimpleTemplateExecute(Sender: TObject);
procedure Act_EditStampTemplateExecute(Sender: TObject);
procedure Act_DeleteSimpleTemplateExecute(Sender: TObject);
procedure Act_DeleteStampTemplateExecute(Sender: TObject);
procedure Act_DropAllExecute(Sender: TObject);
procedure RepDesignerShow(Sender: TObject);
procedure RepDesignerSaveReport(Report: TfrReport;
var ReportName: String; SaveAs: Boolean; var Saved: Boolean);
procedure tvReportsPrepareDropDown(Sender: TISPlugInplaceEdit;
Section: TISPlugSection; Dropdown: TISDropDown);
procedure btTemplateClick(Sender: TObject);
procedure rbModeViewClick(Sender: TObject);
procedure tvReportTargetEdited(Sender: TObject; Node: TFlyNode;
var S: String);
procedure tvReportsEdited(Sender: TObject; Node: TFlyNode;
var S: String);
procedure Timer_DefineReportNodeControlsTimer(Sender: TObject);
procedure rbRepModeDocumentClick(Sender: TObject);
procedure RzBitBtn1Click(Sender: TObject);
procedure Act_NewMarkPageExecute(Sender: TObject);
procedure Act_NewMarkPageFromUserExecute(Sender: TObject);
procedure btEditTemplateClick(Sender: TObject);
procedure btDelTemplateClick(Sender: TObject);
procedure Act_EditTemplateExecute(Sender: TObject);
procedure Act_DeleteTemplateExecute(Sender: TObject);
procedure Act_ImportTemplateFromFileExecute(Sender: TObject);
procedure Act_ExportTemplateToFileExecute(Sender: TObject);
procedure Act_ExportSimpleTemplateToFileExecute(Sender: TObject);
procedure Act_ExportStampTemplateToFileExecute(Sender: TObject);
procedure btExportTemplateToFileClick(Sender: TObject);
procedure Act_EditReportSortInfoExecute(Sender: TObject);
procedure tvReportTargetCollapsing(Sender: TObject; Node: TFlyNode;
var AllowCollapse: Boolean);
procedure Timer_ShowReportTimer(Sender: TObject);
procedure Act_ExportToBc3Execute(Sender: TObject);
procedure nePricePrecisionChange(Sender: TObject);
procedure neKolvoPrecisionChange(Sender: TObject);
procedure Timer_TimeOutExecTimer(Sender: TObject);
procedure cbCanShowKabinetClick(Sender: TObject);
procedure cbAsPlacingInProjClick(Sender: TObject);
procedure cbCanGroupByNameClick(Sender: TObject);
procedure cbReportWithStampClick(Sender: TObject);
procedure cbShowCablePathClick(Sender: TObject);
// procedure ShowEtazhClick(Sender: TObject);
// procedure ShowKabinetClick(Sender: TObject);
private
FFrLocale: TfrLocale;
FFrPrintForm: TfrPrintForm;
FPrintDevice: TPrintDevice;
FUsefrDialog: Boolean; //*** þçàòü äèàëîã ïå÷àòè èç êîìïîíåíòû TfrReport
GFormMode: TResourceReportFormMode;
FReportUseKind: TReportUseKinds;
FExceedLength: Double;
FCatalog: TSCSCatalog;
FComponent: TSCSComponent;
FObjectName: string;
FReportCaption: String;
FSavedOnAppRestore: TNotifyEvent;
FSavedOnAppMinimize: TNotifyEvent;
FormList: TObjectList;
FMasterOldRecNo: Integer;
FDetailOldRecNo: Integer;
FOldRecNo: Integer;
FCurrRecNo: Integer;
FPassNum: Integer;
FTotalLaborTime: Integer;
FModifiedReportTemplate: Boolean;
//*** Äëÿ ïàêåòíîé ïå÷àòè
FReportCountToPrint: Integer;
FReportCountPrinted: integer;
FPackgeDir: string;
//FfrOLEExcelExport: TMyfrOleExl;
FCostOfProjectReportParams: TCostOfProjectReportParams;
FcbCanHaveActiveComponentsCurr: TRzCheckBox;
FcbCanHaveDismountAccountCurr: TRzCheckBox;
{ Private declarations }
procedure AddSortFieldsToReportItemParams(AReportItemParams: TReportItemParams);
procedure CorrectReport(AResourceReportFormMode: TResourceReportFormMode);
procedure ClearTVReportTemplates;
procedure CreateControls;
function DefineCurrRecNo: Integer;
procedure DefineReportModeControls;
procedure DefineReportNodeControls(ARepNode: TFlyNode; AWithTemplateInfo: Boolean);
procedure DefineReportNodeActiveShablonText(ARepNode: TFlyNode);
procedure DefineRepSortInfo;
procedure DefineRepTemplates;
procedure DelReportTemplate(ARepNode: TFlyNode; ATemplateType: Integer);
procedure ExportTemplateToFile(ATemplateType: Integer);
function GetCurrReportItemParamValues: TReportItemParams;
function GetReportFileNameByType(AReportType: Integer; ATemplateType: Integer; ACanA3: Boolean): String;
function GetReportItemParamByRepType(AReportType: Integer): TReportItemParams;
function GetTemplateTypeByColumnIndex(AColIndex: Integer): Integer;
function GetTemplateTypeByCurrOptions: Integer;
function ImportTemplateFromFile: Boolean;
function IsSimpleReportKind(AReportUseKinds: TReportUseKinds): Boolean;
procedure MakeEditReportTemplate(AMakeEdit: TMakeEdit; AMakeFromStandart: Boolean; ATemplateType: Integer);
function MakeNewReportTemplateWizard: Boolean;
procedure SortMemTableByParams(AMemTable: TkbmMemTable; AReportItemParams, AReportItemParamValues: TReportItemParams);
procedure PrepareReportFormats;
procedure RepListWrite(AName: String; AObjCount, AComponCount: Integer; AWorkCost: Double);
procedure RepObjWrite(AName: String; AItemType: TItemType; AComponCount: Integer; AWorkCost: Double);
procedure RepComponWrite(AName: String; AisCompon: Boolean; AWorkCost: Double; APref: Integer);
procedure RepResourcesWrite(AResourcesCost: Double; APref: Integer);
procedure RepResourceWrite(AName: String; AWorkCost: Double; APref: Integer);
procedure RepComplectsWrite(AComplCost: Double);
procedure LoadPortName(AIDPointComponent, AIDLineComponent: Integer; var ANppPort: Integer; var APortName: String;
aPort: Pointer=nil; aPortFromPos: PInteger=nil; aPortToPos: PInteger=nil);
function GetMultiPortNameMark(APointComponent: TSCSComponent; ARetIndexIfNoMark: Boolean): String;
function GetParallelInterfaces(AFirstConnCompon, AFirstLineCompon, ALastConnCompon, ALastLineCompon: TSCSComponent): TInterfLists;
function GetUOMLengthMin: String;
function GetUOMWithOrthographMarks: String;
function GetUOMWeight: String;
function GetUOMWeightOrthographMarks: String;
public
GForm: TForm;
FmtCableChannelGrp: TkbmMemTable;
FdsrcCableChannelGrp: TDataSource;
FmtCableChannel: TkbmMemTable;
FdsrcCableChannel: TDataSource;
FmtCrossJournal: TkbmMemTable;
FdsrcCrossJournal: TDataSource;
FmtExplicationRoom: TkbmMemTable;
FdsrcExplicationRoom: TDataSource;
FmtExplicationRoomDetail: TkbmMemTable;
FdsrcExplicationRoomDetail: TDataSource;
FmtExplicationCompon: TkbmMemTable;
FdsrcExplicationCompon: TDataSource;
FmtExplicationComponDetail: TkbmMemTable;
FdsrcExplicationComponDetail: TDataSource;
FmtExplicationComponSubDetail: TkbmMemTable;
FdsrcExplicationComponSubDetail: TDataSource;
// Tolik
//ReelsCableFlow : TStringList; // ñïèñîê ñòðîê ñ ðàñõîäîì êàáåëÿ èç êàòóøåê
FmtHouse: TkbmMemTable;
FdsrcHouse: TDataSource;
FmtApproach: TkbmMemTable;
FdsrcApproach: TDataSource;
FmtDefectAct: TkbmMemTable;
FdsrcDefectAct: TDataSource;
FmtCommerceInvoice: TkbmMemTable;
FdsrcCommerceInvoice: TDataSource;
FmtCablePaths: TkbmMemTable;
FdsrcCablePaths: TDataSource;
FmtCablePathsInfo: TkbmMemTable;
FdsrcCablePathsInfo: TDataSource;
FmtCrossConnection: TkbmMemTable;
FdsrcCrossConnection: TDataSource;
FmtMarkRoomTS: TkbmMemTable;
FdsrcMarkRoomTS: TDataSource;
FmtMarkPathPanel: TkbmMemTable;
FdsrcMarkPathPanel: TDataSource;
FmtMarkPathPanelPorts: TkbmMemTable;
FdsrcMarkPathPanelPorts: TDataSource;
FmtMarkSocket: TkbmMemTable;
FdsrcMarkSocket: TDataSource;
FmtMarkSocketPanel: TkbmMemTable;
FdsrcMarkSocketPanel: TDataSource;
FmtMarkCable: TkbmMemTable;
FdsrcMarkCable: TDataSource;
FRepMsgList: TStringList;
FPricePrecision: Integer;
FKolvoPrecision: Integer;
procedure FormMdiClose(Sender: TObject; var Action: TCloseAction);
procedure ApplMinimize(Sender: TObject);
procedure ApplRestore(Sender: TObject);
procedure frOLEExcelExportStartExportPageEvent(Sender: TObject; ACaption: string; AObjCount: Integer);
procedure frOLEExcelExportProgressExportPageEvent(Sender: TObject; var AWasCancel: Boolean;
AObjIndex, AObjectCount: Integer);
procedure frOLEExcelExportEndExportPageEvent(Sender: TObject; AWasCancel: Boolean);
procedure DefinePrecisions;
procedure DefineRepDesignLanguage;
function ExtractDirToNewReport(ADateTime: TDateTime): String;
function ExtractDirToReportTemplate(AReportName: String): String;
function GetTargetFolder: TSCSCatalog;
procedure ShowWizard(AReportUseKind: TReportUseKinds; AShow: Boolean=true);
procedure ShowPreparedReport(AParams: TReportItemParams);
procedure ShowReportByParams(AFolder: TSCSCatalog; AParams: TReportItemParams);
function ShowReportFromFile(AReportMode: TResourceReportFormMode; AParams: TReportItemParams; AReportFile: String;
APrintDevice: TPrintDevice; AIsTemplate: Boolean; AMakeEditTemplate: TMakeEdit): Boolean;
function CheckCanShowReport(ACAtalog: TSCSCatalog): Boolean;
procedure InitRepMsgList;
function PrepareCommerceInvoiceObjects(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams): TSCSCatalog;
procedure ShowListObjectReport(AIDComponList: Integer);
procedure ShowFolderResourceReport(AFolder: TSCSCatalog; AParams: TReportItemParams;
ACanHaveActiveComponents, ACanHaveDismountAccount,
AComponsWithZeroPrice,
ACanRoundValue, ACanHaveSupplyValue: Boolean);
procedure ShowFolderNormReport(AFolder: TSCSCatalog; AParams: TReportItemParams; ACanHaveActiveComponents: Boolean);
procedure ShowFolderCableReport(AFolder: TSCSCatalog; AParams: TReportItemParams;
AFormMode: TResourceReportFormMode; ACanHaveActiveComponents, ACanHaveDismountAccount: Boolean; AReportItemParamValues: TReportItemParams);
procedure ShowFolderDisparityComponReport(AFolder: TSCSCatalog; AParams: TReportItemParams;
AFormMode: TResourceReportFormMode);
procedure ShowFolderCableJournal(AFolder: TSCSCatalog; AParams: TReportItemParams; AResRepFormMode: TResourceReportFormMode; ACanHaveActiveComponents, ACanHaveDismountAccount, AFullPath: Boolean);
procedure ShowFolderCableJournalExt(AFolder: TSCSCatalog; AParams: TReportItemParams; ACanHaveActiveComponents, ACanHaveDismountAccount, AFullPath: Boolean);
procedure ShowFolderLegendObjectIcons(AFolder: TSCSCatalog; AParams: TReportItemParams; ACanHaveActiveComponents: Boolean);
procedure ShowFolderTypeComponenetsReport(AFolder: TSCSCatalog; AParams: TReportItemParams);
procedure ShowFolderSpecificationReport(AFolder: TSCSCatalog; AParams, AReportItemParamValues: TReportItemParams;
AResourceReportFormMode: TResourceReportFormMode;
ACanHaveActiveComponents, ACanHaveZeroPriceComponents,
ACanHaveDismountAccount,
ACanRoundValue, ACanHaveSupplyValue: Boolean);
procedure ShowFolderExplanatoryReport(AFolder: TSCSCatalog; AParams: TReportItemParams);
procedure ShowPriorCostOfProjectReport(AParams: TReportItemParams);
procedure ShowPriorCostOfProjectReportWizard(AMemTable, ATotalParams: TkbmMemTable;
ACostOfProjectReportParams: TCostOfProjectReportParams; AShowTotalParams, AShowTemplates: Boolean);
procedure ShowMarkPages(AFolder: TSCSCatalog; AParams: TReportItemParams; AResourceReportFormMode: TResourceReportFormMode; AReportItemParamValues: TReportItemParams);
procedure ShowExplicationRoom(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams);
procedure ShowExplicationComponent(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams;ACanHaveActiveComponents, ACanHaveDismountAccount, AComponsWithZeroPrice,
ACanRoundValue, ACanHaveSupplyValue, ACanShowKabinet, ACanShowObjHierarchy, ACanGroupByName: Boolean);
procedure ShowExplicationComponentOLD(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams);
procedure ShowComponSpecifications(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams);
procedure ShowCrossJournal(AFolder: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams; AResourceReportFormMode: TResourceReportFormMode);
procedure ShowHouse(AFolder: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams);
procedure ShowDefectAct(AFolder: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams; AResourceReportFormMode: TResourceReportFormMode);
procedure ShowDefectActForCompon(ACompon: TSCSComponent; AParams: TReportItemParams; ADefectAct: TDefectAct);
procedure ShowCommerceInvoice(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams);
procedure ShowCablePaths(AParams: TReportItemParams);
procedure ShowCrossConnection(AParams: TReportItemParams);
procedure ShowCablePathsWizard(ACable: TSCSComponent);
procedure ShowCrossConnectionWizard(ACompon: TSCSComponent);
//added by Tolik
procedure ShowWACoordinatesReport(AFolder: TSCSCatalog; AList: TStringList);
constructor Create(AOwner: TComponent; AForm: TForm);
destructor Destroy; override;
end;
{
var
F_ResourceReport: TF_ResourceReport;}
// Added by Tolik
// Procedure SortCables (var CableTypes : array of TCableTypes);
implementation
Uses U_Main, Unit_DM_SCS, FIBQuery, U_Common, U_Preview, U_ESCadClasess,
Gauges, U_MakeMarkPage, U_MasterDefectAct, U_GuideFileList, U_SCSClasses,
U_CAD;
var
ReelsCableFlow : TStringList;
{$R *.dfm}
{ TReportShablons }
// Added by Tolik
type
TCableTypeArray = array of TCableTypes;
// added dy Tolik
function GetListName(AComponent: TSCSComponent): String;
var //ListCatalog: TCatalog;
SCSList: TSCSList;
begin
Result := '';
SCSList := nil;
SCSList := AComponent.GetListOwner; //TF_Main(GForm).GSCSBase.CurrProject.GetListBySCSID(AIDList);
if Assigned(SCSList) then
Result := SCSList.GetNameForVisible(false);
//ListCatalog := TF_Main(GForm).DM.GetCatalogByComponAndItemType(AIDComponent, itList);
//Result := ListCatalog.Name;
end;
// ïðîöåäóðà çàïèñè ìàðêèðîâêè è äëèíû ëèíåéíûõ êîìïîíåòîâ ïî ïóòè êàáåëÿ â ñïèñêè
Procedure AddtoPropList(propList1,propList2:TStringList; SCSComponent : TSCSComponent);
Var
s: string;
i: integer;
SCSCatalog: TSCSCatalog;
TopComponent: TSCSComponent;
Begin
SCSCatalog := SCSComponent.GetFirstParentCatalog; //òðàññà
SCSCatalog.LoadLength;
if SCSCatalog.Length <> 0 then
begin
SCSCatalog.LoadLength;
TopComponent := SCSComponent.GetTopComponent; // ýëåìåíò, â êîòîðûé âëîæåí êàáåëü (åñëè åñòü)
TopComponent.LoadCurrLength;
//showmessage(floattostr(RoundCP(TopComponent.Length)));
s:='';
if TopComponent<>SCSComponent then // åñëè êàáåëü âëîæåí
begin
if TopComponent.NameMark = '' then //åñëè íåò ìàðêèðîâêè
begin
if TopComponent.NameShort <> '' then
s:=TopComponent.NameShort + ' ' + inttostr(TopComponent.MarkID);
end
else s := TopComponent.NameMark; // åñòü ìàðêèðîâêà
if s = '' then // íåò íè ìàðêèðîâêè íè îáîçíà÷åíèÿ - çàáèâàåì íàèìåíîâàíèå(íå áîëåå 14 ñèìâîëîâ)
begin
for i := 1 to Length(TopComponent.Name) do
begin
s:=s + TopComponent.Name[i];
if i = 14 then break;
end;
end;
//íàèìåíîâàíèå
propList1.BeginUpdate;
propList1.Add(s);
propList1.EndUpdate;
//äëèíà êîìïîíåíòà èëè òðàññû
propList2.BeginUpdate;
propList2.Add(Floattostr(RoundCP(SCSComponent.GetPartLength)));
propList2.EndUpdate;
end
else // êàáåëü ëåæèò íà òðàññå
begin
//íàèìåíîâàíèå òðàññû
propList1.BeginUpdate;
propList1.Add(SCSComponent.GetFirstParentCatalog.Name + inttostr(SCSComponent.GetFirstParentCatalog.MarkID));
propList1.EndUpdate;
//äëèíà òðàññû
propList2.BeginUpdate;
propList2.Add(floattostr(RoundCP(SCSComponent.Length-SCSComponent.LengthReserv)));
propList2.EndUpdate;
end;
end;
End; //ïèïåö
Procedure GetCablePath(SCSCompon: TSCSComponent; propList,PropList1: TStringList; ComponList: TSCSComponents);
Var
FirstCompon, LastCompon: TSCSComponent;
m,x, PortCountFrom, PortCountTo : integer;
s : string;
currTrace,NextTrace: TFigure; // òðàññû, ïî êîòîðûì ïðîõîäèò êàáåëü
currLine: TOrthoLine; // òåêóùàÿ òðàññà
FirstTraceFound, NextTraceFound: Boolean; // äâå ñîñåäíèå òðàññû
Figure: TFigure;
Ortholine: TOrtholine;
Connector1, Connector2, Connector3, Connector4: TConnectorObject; // êîííåêòîðû òðàññ
Compon1, Compon2, Compon3, Compon4: TSCSComponent; // êîìïîíåíòû, ñèäÿùèå íà êîííåêòîðàõ òðàññ
currSCSCatalog, nextSCSCatalog: TSCSCatalog;
PartSCSComponent1,PartSCSComponent2: TSCScomponent;
ListName: string;
FromNppPort1: integer;
ListOwner: TSCSList;
TraceListOwner : TSCSList;
ListCAD : TF_CAD;
Begin
FirstCompon := SCSCompon.FirstConnectedConnCompon;//.GetTopComponent;
LastCompon := SCSCompon.LastConnectedConnCompon;//.GetTopComponent;
PortCountFrom := 0;
PortCountTo := 0;
// îïðåäåëÿåì êîëè÷åñòâî ïîðòîâ ó êîíå÷íûõ îáúåêòîâ íà êàáåëå
// äëÿ îò÷åòà áåðåì ìàðêèðîâêó òîïîâîãî êîìïîíåíòà îò îáúåêòà, ó êîòîðîãî
// ïîðòîâ áîëüøå (ýòî áóäåò ïðåäïîëîýèòåëüíî, øêàô, ïàíåëü è ò.ï.)
// ó îáúåêòà, èìåþùåãî ìåíüøå ïîðòîâ áåðåì åãî ìàðêèðîâêó
if (FirstCompon <> nil) and (LastCompon <> nil) then
begin
if (FirstCompon.GetTopComponent <> nil) and (FirstCompon.GetTopComponent.IsLine <> 1) then
begin
if FirstCompon.GetTopComponent.Interfaces <> nil then
begin
if FirstCompon.GetTopComponent.Interfaces.Count = 0 then
FirstCompon.GetTopComponent.LoadInterfaces(-1, false);
PortCountFrom := GetPortsCount(FirstCompon.GetTopComponent, 1, true);
end;
end;
if (LastCompon.GetTopComponent <> nil) and (LastCompon.GetTopComponent.IsLine <> 1) then
begin
if LastCompon.GetTopComponent.Interfaces <> nil then
begin
if LastCompon.GetTopComponent.Interfaces.Count = 0 then
LastCompon.GetTopComponent.LoadInterfaces(-1, false);
PortCountTo := GetPortsCount(LastCompon.GetTopComponent, 1, true);
end;
end;
if PortCountFrom > PortCountTo then
FirstCompon := FirstCompon.GetTopComponent;
if PortCountTo > PortCountFrom then
LastCompon := LastCompon.GetTopComponent;
PropList.Add(FirstCompon.NameMark);
PropList1.Add(' ');
end;
s := '';
for x := 0 to ComponList.Count - 1 do
begin
s := '';
nextSCSCatalog := nil;
PartSCSComponent1 := ComponList[x];
ListOwner:=PartSCSComponent1.GetListOwner;
currSCSCatalog := PartSCSComponent1.GetFirstParentCatalog; // òðàññà
U_ResourceReport.AddtoPropList(propList,propList1,PartSCSComponent1); // äîáàâëÿåì òðàññó â ñïèñîê
// ïîëó÷àåì êàáåëü(÷àñòÿìè)
currSCSCatalog.LoadLength; // äëèíà òðàññû
// åñëè òðàññà íå ïîñëåäíÿÿ â ñïèñêå, òî áåðåì ñëåäóþùóþ
// è èùåì ïðåäìåò, ëåæàùèé íà ñòûêå òðàññ (åñëè åñòü)
if x <> SCSCompon.WholeComponent.Count-1 then
begin
PartSCSComponent2 := ComponList[x+1];
nextSCSCatalog := PartSCSComponent2.GetFirstParentCatalog;
nextSCSCatalog.LoadLength; // äëèíà òðàññû
TraceListOwner := currSCSCatalog.GetListOwner; //ëèñò, íà êîòîðîì íàõîäèòñÿ òðàññà
ListCad := GetListByID(TraceListOwner.SCSID); // Êàä, íà êîòîðîì íàðèñîâàíà òðàññà
currTrace := nil; // íà âñÿêèé
nextTrace := nil;
connector1 := nil;
connector2 := nil;
connector3 := nil;
connector4 := nil;
compon1 := nil;
compon2 := nil;
compon3 := nil;
compon4 := nil;
currTrace := (TOrthoLine(GetFigureByID(ListCad,currSCSCatalog.SCSID)));
// ïåðâàÿ òðàññà
// èùåì òðàññó íà Êàäå
if currTrace <> nil then //íàøëè òðàññó íà ÊÀÄå
begin
connector1 := TConnectorObject(Tortholine(CurrTrace).JoinConnector1);
if connector1.JoinedConnectorsList.Count<>0 then
begin
// ïåðâûé êîííåêòîð òðàññû
connector1:=TConnectorObject(connector1.JoinedConnectorsList[0]);
currSCSCatalog := ListOwner.GetCatalogFromReferencesBySCSID(connector1.ID);
if currSCSCatalog.SCSComponents.Count<> 0 then
Compon1:=currSCSCatalog.SCSComponents[0];
end;
// âòîðîé êîííåêòîð òðàññû
connector2 := TConnectorObject(Tortholine(CurrTrace).JoinConnector2);
if connector2.JoinedConnectorsList.Count<>0 then
begin
connector2:=TConnectorObject(connector2.JoinedConnectorsList[0]);
currSCSCatalog := ListOwner.GetCatalogFromReferencesBySCSID(connector2.ID);
if currSCSCatalog.SCSComponents.Count<> 0 then
Compon2:=currSCSCatalog.SCSComponents[0];
end;
end;
// âòîðàÿ òðàññà
TraceListOwner := nextSCSCatalog.GetListOwner; //ëèñò, íà êîòîðîì íàõîäèòñÿ òðàññà
ListCad:=GetListByID(TraceListOwner.SCSID); // Êàä, íà êîòîðîì íàðèñîâàíà òðàññà
nextTrace := (TOrthoLine(GetFigureByID(ListCad,nextSCSCatalog.SCSID)));
if nextTrace <> nil then //íàøëè òðàññó íà ÊÀÄå
begin
//ïåðâûé êîííåêòîð òðàññû
connector3 := TConnectorObject(Tortholine(nextTrace).JoinConnector1);
if connector3.JoinedConnectorsList.Count<>0 then
begin
connector3:=TConnectorObject(connector3.JoinedConnectorsList[0]);
nextSCSCatalog := ListOwner.GetCatalogFromReferencesBySCSID(connector3.ID);
if nextSCSCatalog.SCSComponents.Count<> 0 then
Compon3:=nextSCSCatalog.SCSComponents[0];
end;
// âòîðîé êîííåêòîð òðàññû
connector4 := TConnectorObject(Tortholine(nextTrace).JoinConnector2);
if connector4.JoinedConnectorsList.Count<>0 then
begin
connector4:=TConnectorObject(connector4.JoinedConnectorsList[0]);
nextSCSCatalog := ListOwner.GetCatalogFromReferencesBySCSID(connector4.ID);
if nextSCSCatalog.SCSComponents.Count<> 0 then
compon4:=nextSCSCatalog.SCSComponents[0];
end;
end;
// îïðåäåëÿåì êîìïîíåíò íà ñòûêå òðàññ
s:='';
if ((compon1 <> nil) and ((compon1 = compon3) or (compon1 = compon4))) then
begin
// åñëè åñòü êîìïîíåíò - äåëàåì ñëåäóþùåå:
// åñëè åñòü ìàðêèðîâêà - äîáàâëÿåì â ñïèñîê
// åñëè íåò - èùåì îáîçíà÷åíèå êîìïîíåíòà è èíäåêñ
// åñëè è èõ íåò - áåðåì íàçâàíèå êîìïîíåíòà è îáðåçàåì äî 14 ñèìâîëîâ,
// åñëè åãî äëèíà áîëüøå
if compon1.NameMark<>'' then
s:=compon1.NameMark
else
if compon1.NameShort<>'' then
s:=s+compon1.NameShort+inttostr(compon1.MarkID);
if s='' then
begin
for m := 0 to Length(compon1.Name) do
begin
s:=s + compon1.Name[m];
if m = 14 then
break;
end;
end;
// äîáàâëÿåì îáúåêò â ñïèñîê
propList.BeginUpdate;
propList.Add(s);
propList.EndUpdate;
propList1.BeginUpdate;
propList1.Add('');
propList1.EndUpdate;
end;
s:=''; // íà âñÿêèé ñëó÷àé
if ((compon2<>nil) and ((compon2 = compon3) or (compon2=compon4))) then
begin
if compon2.NameMark<>'' then
s:=compon2.NameMark
else
if compon2.NameShort<>'' then
s:=s+compon2.NameShort+inttostr(compon2.MarkID);
if s='' then
begin
for m := 0 to Length(compon2.Name) do
begin
s:=s + compon2.Name[m];
if m = 14 then
break;
end;
end;
// äîáàâëÿåì îáúåêò â ñïèñîê
propList.BeginUpdate;
propList.Add(s);
propList.EndUpdate;
propList1.BeginUpdate;
propList1.Add('');
propList1.EndUpdate;
end;
// ñìîòðèì, åñòü ëè ìåæýòàæíîå ïåðåêðûòèå
// if ((TOrthoLine(currTrace).FIsRaiseUpDown) and (TOrthoLine(nextTrace).FIsRaiseUpDown)) then
if PartSCSComponent1.GetListOwner <> PartSCSComponent2.GetListOwner then
begin
// åñëè çàäàíà âûñîòà ìåæýòàæíîãî ïåðåêðûòèÿ, äîáàâëÿåì åãî (òàì æå òîæå êàáåëü ïðîõîäèò)
if currSCSCatalog.ProjectOwner.Setting.HeightThroughFloor > 0 then
begin
propList.BeginUpdate;
propList.Add(cRepMsg231);
propList.EndUpdate;
propList1.BeginUpdate;
propList1.Add(FloatToStr(currSCSCatalog.ProjectOwner.Setting.HeightThroughFloor));
propList1.EndUpdate;
end;
end;
end;
end;
if (FirstCompon <> nil) and (LastCompon<>nil) then
begin
PropList.Add(LastCompon.NameMark);
PropList1.Add(' ');
end;
if ComponList <> nil then FreeAndNil(ComponList);
End; // ïèïåö
// óêðàäåíî ó Èãîðÿ by Tolik èç TSCSComponent.DefineFirstLast (ìîäóëü U_SCSComponent)
// ïðàâäà, íåìíîæêî ïåðåäåëàíî ñîâñåì
Procedure SetActualOrderInPartComponent(aComponent: TSCSComponent; ComponList : TSCSComponents; FromNppPort1 : integer; ListName : String);
Var
Component : TSCSComponent;
SortedWholeComponent: TIntList;
my_comp, ComponentToOrder: TSCSComponent;
StepComponent: TSCSComponent;
JoinedComponent: TSCSComponent;
i, j: Integer;
portcount1, portcount2 : integer;
ListOwner: TSCSList;
EndPointCad : TF_CAD;
PointComponent : TSCSComponent;
SCSCatalog : TSCSCatalog;
SCSInterfaces: TSCSInterfaces;
Begin
Component := aComponent;
// SCSCatalogs := TSCSCatalogs.Create(false);
SortedWholeComponent := TIntList.Create;
Component.DefineFirstLast;
ComponentToOrder := nil;
ListOwner := Component.GetListOwner;
my_comp := Component.FirstConnectedConnCompon.GetTopComponent;
if my_comp<>nil then
begin
SCSInterfaces := my_comp.GetInterfacesByIsPort(1, True, -1, nil);
portcount1 := SCSInterfaces.Count;
my_comp := Component.LastConnectedConnCompon.GetTopComponent;
SCSInterfaces := my_comp.GetInterfacesByIsPort(1, True, -1, nil);
portcount2 := SCSInterfaces.Count;
ComponentToOrder := Component.FirstConnectedConnCompon;
// Ñðàçó æå îïðåäåëÿåì ïîðÿäîê ëèñòîâ äëÿ îò÷åòà
// è ïîðò øêàôà
begin
if Component.FirstConnectedConnCompon.ListID = Component.LastConnectedConnCompon.ListID then
ListName := U_ResourceReport.GetListName(Component.FirstConnectedConnCompon)
else
begin
if Portcount1 >= PortCount2 then
ListName := U_ResourceReport.GetListName(Component.FirstConnectedConnCompon)+'/'+GetListName(Component.LastConnectedConnCompon)
else
ListName := U_ResourceReport.GetListName(Component.LastConnectedConnCompon)+'/'+GetListName(Component.FirstConnectedConnCompon);
end;
end;
if PortCount1 >= PortCount2 then
ComponentToOrder := Component.FirstConnectedConnCompon
else
begin
ComponentToOrder := Component.LastConnectedConnCompon;
Component.LastConnectedConnCompon := Component.FirstConnectedConnCompon;
Component.FirstConnectedConnCompon := ComponentToOrder;
end;
FromNppPort1 := Component.FirstConnectedConnCompon.MarkID ;
if Component<> nil then
begin
for i := 0 to Component.WholeComponent.Count - 1 do
begin
for j := 0 to ComponentToOrder.JoinedComponents.Count - 1 do
begin
StepComponent := ComponentToOrder.JoinedComponents[j];
if ((SortedWholeComponent.IndexOf(StepComponent.ID)= -1) and (Component.WholeComponent.IndexOf(StepComponent.ID)<> -1)) then
begin
SortedWholeComponent.Add(StepComponent.ID);
ComponList.Add(StepComponent);
ComponentToOrder := StepComponent;
SCSCatalog := StepComponent.GetFirstParentCatalog;
break;
end;
end;
end;
end;
ComponentToOrder := Component;
//*** Íå îäèí ó÷àñòîê êàáåëÿ íå óøåë â ïèçäó
if ComponentToOrder.WholeComponent.Count = SortedWholeComponent.Count then
begin
ComponentToOrder.WholeComponent.Clear;
ComponentToOrder.WholeComponent.Assign(SortedWholeComponent);
end;
SortedWholeComponent.Free;
end;
End;
//
// ñîðòèðîâêà ìàññèâà êàáåëåé ïî óáûâàíèþ â ìàññèâå òèïîâ
Procedure SortCables (var CableTypes : TCableTypeArray);
Var
i,j,l: integer;
k: double;
SortAgain: boolean;
s: string;
Begin
if Length(CableTypes) >= 1 then
begin
for i := 0 to Length(CableTypes) - 1 do
begin
// åñëè ýëåìåíòîâ ìàññèâà áîëüøå äâóõ, âûïîëíÿåì "ïóçûðüêîâóþ ñîðòèðîâêó"
if Length(CableTypes[i].Cables) > 2 then
begin
repeat
SortAgain := false;
for j := 0 to Length(CableTypes[i].Cables) - 2 do
begin
if CableTypes[i].Cables[j].Length < CableTypes[i].Cables[j + 1].Length then
begin
k := CableTypes[i].Cables[j].Length; // äëèíà êàáåëÿ
l := CableTypes[i].CableIDs[j]; // èäåíòèôèêàòîð
CableTypes[i].Cables[j].Length := CableTypes[i].Cables[j + 1].Length;
CableTypes[i].CableIDs[j] := (CableTypes[i].CableIDs[j + 1]);
CableTypes[i].Cables[j + 1].Length := k;
CableTypes[i].CableIDs[j + 1] := l;
SortAgain := true;
end;
end;
until not SortAgain;
end;
// åñëè êàáåëÿ âñåãî 2, òî, ïðè íåîáõîäèìîñòè, ìåíÿåì èõ ìåñòàìè
if Length(CableTypes[i].Cables) = 2 then
begin
if CableTypes[i].Cables[0].Length < CableTypes[i].Cables[1].Length then
begin
k := CableTypes[i].Cables[0].Length; // äëèíà êàáåëÿ
l := CableTypes[i].CableIDs[0]; // èäåíòèôèêàòîð
CableTypes[i].Cables[0].Length := CableTypes[i].Cables[1].Length;
CableTypes[i].CableIDs[0] := (CableTypes[i].CableIDs[1]);
CableTypes[i].Cables[1].Length := k;
CableTypes[i].CableIDs[1] := l;
SortAgain := true;
end;
end;
end;
end;
End;
// ôóíêöèÿ "ìîæíî ëè åùå ÷åãî îòðåçàòü îò äàííîé êàòóøêè"
Function CanCutReel (var Reel : TCableReels; var Cables : array of TCables) : boolean;
Var
i: integer;
Begin
Result := false;
for i := 0 to Length(Cables) - 1 do
begin
if not Cables[i].Selected then
// åñëè îñòàòîê êàáåëÿ â êàòóøêå áîëüøå îòðåçêà êàáåëÿ
if (Reel.Rest >= Cables[i].Length) and (Cables[i].Selected = false) then
begin
Result := true;
Reel.CanCut := true;
break;
end;
end;
If not Result then
Reel.CanCut := False; // åñëè íè÷åãî óæå íåëüçÿ îòðåçàòü, ïîìå÷àåì êàòóøêó êàê îòðàáîòàííóþ
End;
// ôóíêöèÿ äëÿ ôîðìèðîâàíèÿ ñïèñêà àéäèøíèêîâ îòîáðàííûõ êàáåëåé
Function AddCableId(var CableIdsList:TIntList; CableId : integer) : boolean;
Var
i: integer;
Begin
Result := True;
if CableIdsList <> nil then
begin
if CableIdsList.Count > 0 then
begin
for i := 0 to CableIdsList.Count - 1 do
begin
if CableIdsList[i] = CableId then
Result := False;
end;
end
else
Result := True;
end
else
begin
CableIdsList := TIntList.Create;
Result := True;
end;
if Result then
begin
CableIdsList.Add(CableId);
end;
End;
// ïðîöåäóðà çàïèñè íàèìåíîâàíèé êàòóøåê â òàáëèöó
//no comments (ñàì íå ïîíÿë,÷åãî íàïèñàë)
Procedure CableReelNamesToMemTable(aMemTable : TkbmMemTable; CableTypes : TCableTypeArray);
Var
i,j,k,l: integer;
ReelFound: boolean;
Begin
// åñëè òàáëèöà íå ïóñòàÿ
if not aMemTable.IsEmpty then
begin
// åñëè ñïèñîê êàáåëåé íå ïóñòîé
if Length(CableTypes) > 0 then
begin
aMemTable.First;
repeat
ReelFound := False;
l := aMemTable.FieldValues['ID'];
for i := 0 to Length(CableTypes) - 1 do
begin
if Length(CableTypes[i].Reels) > 0 then
begin
for j := 0 to Length(CableTypes[i].Reels) - 1 do
begin
if CableTypes[i].Reels[j].CableIDs.Count > 0 then
begin
for k := 0 to CableTypes[i].Reels[j].CableIDs.Count - 1 do
begin
if l = CableTypes[i].Reels[j].CableIDs[k] then
begin
aMemTable.Edit;
aMemTable.FieldByName('REELNAME').AsString :=' ('+ CableTypes[i].ReelName + cRepMsg234+ inttostr(j+1)+')';
ReelFound := True;
aMemTable.Post;
break;
end;
end;
end;
end;
end;
end;
if not ReelFound then
begin
aMemTable.Edit;
aMemTable.FieldByName('REELNAME').AsString := ' ('+ cRepMsg233+')';
aMemTable.Post;
end;
aMemTable.Next;
until aMemTable.Eof;
end
else
begin
aMemTable.First;
repeat
aMemTable.Edit;
aMemTable.FieldByName('REELNAME').AsString := ' ('+ cRepMsg233+')';
aMemTable.Post;
aMemTable.Next;
until aMemTable.eof;
end;
end;
End;
// ïðîöåäóðà äîáàâëåíèÿ òèïà êàáåëÿ â ñïèñîê
Procedure CableTypesAdd(SCSComponent : TSCSComponent; var CableTypes : TCableTypeArray; var CableIdsList : TIntList; CableID : Integer; aForm: TF_ResourceReport);
Var
i ,j: integer;
CableIn, TakeThisCable: boolean;
CurrSuppliesKind: TNBSuppliesKind;
k: double;
// CurrSuppliesKind : TNBSuppliesKind;
//ïðîöåäóðà çàïèñè òèïà êàáåëÿ â ñïèñîê
Procedure SaveCableType(SCSComponent : TSCSComponent; CurrSuppliesKind: TNBSuppliesKind);
// Var
// currCableTypes : TCableTypeArray;
Begin
// Setlength(currCableTypes,length(currCableTypes)+1);
// ñîõðàíÿåì âåëè÷èíó ïîñòàâêè(ïðèãîäèòñÿ)
if CheckIsTradUOM(F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure) then
begin
// F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure
SetLength(CableTypes, Length(CableTypes) + 1);
CableTypes[Length(CableTypes) - 1].Length := RoundX(FloatInUOM(CurrSuppliesKind.Data.UnitKolvoTradUOM, umFoot, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure), aForm.neKolvoPrecision.IntValue);
CableTypes[Length(CableTypes) - 1].CableIDs := TIntList.Create;
CableTypes[Length(CableTypes) - 1].Izm := GetNameUOM(F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure, true);
CableTypes[Length(CableTypes) - 1].CableCypher := SCSComponent.Cypher;
end
else
begin
SetLength(CableTypes, Length(CableTypes) + 1);
CableTypes[Length(CableTypes) - 1].Length := RoundX(FloatInUOM(CurrSuppliesKind.Data.UnitKolvo, umMetr, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure), aForm.neKolvoPrecision.IntValue);
CableTypes[Length(CableTypes) - 1].CableIDs := TIntList.Create;
CableTypes[Length(CableTypes) - 1].Izm := CurrSuppliesKind.Data.Izm; // åäèíèöû èçìåðåíèÿ
CableTypes[Length(CableTypes) - 1].CableCypher := SCSComponent.Cypher;
end;
CableTypes[Length(CableTypes) - 1].ReelName := CurrSuppliesKind.Data.Name; // íàèìåíîâàíèå ïîñòàâêè(êàòóøêà, ìîòîê, áîááèíà è ò.ï.)
// CableTypes[Length(CableTypes) - 1].Length := RoundX(FloatInUOM(CurrSuppliesKind.Data.UnitKolvoTradUOM, umFoot, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure), aForm.neKolvoPrecision.IntValue);
CableTypes[Length(CableTypes) - 1].TypeName := CurrSuppliesKind.Data.GUID; // GUIDNB
CableTypes[Length(CableTypes) - 1].Name := SCSComponent.Name + ' ' + SCSComponent.ArticulProducer;// + ' ' + SCSComponent.NameMark + ' ' + SCSComponent.ArticulProducer;
// äîáàâëÿåì îòðåçîê êàáåëÿ ê äàííîìó òèïó
SetLength(CableTypes[Length(CableTypes) - 1].Cables, Length(CableTypes[Length(CableTypes) - 1].Cables) + 1);
if CheckIsTradUOM(F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure) then
Cabletypes[Length(CableTypes) - 1].Cables[Length(Cabletypes[Length(CableTypes) - 1].Cables) - 1].Length := RoundX(FloatInUOM(SCSComponent.Length, umMetr, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure), aForm.neKolvoPrecision.IntValue)
//RoundCP(FloatInUOM(SCSComponent.Length, umMetr, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure))
else
Cabletypes[Length(CableTypes) - 1].Cables[Length(Cabletypes[Length(CableTypes) - 1].Cables) - 1].Length := RoundX(FloatInUOM(SCSComponent.Length, umMetr, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure), aForm.neKolvoPrecision.IntValue);
//RoundCP(SCSComponent.Length);
Cabletypes[Length(CableTypes) - 1].CableIDs.Add(CableID); // èäåíòèôèêàòîð êàáåëÿ
// Cabletypes[Length(CableTypes)-1].GuidNB := CurrSuppliesKind.Data.GUID;
End;
Begin
// SCSComponent.LoadWholeLength;
// SCSComponent.LoadWholeComponent(false);
// åñëè êàáåëü åùå íå âûáèðàëñÿ
if AddCableID(CableIDsList, CableId) then
begin
CableIn:=false;
CurrSuppliesKind := nil;
// ïîëó÷àåì ïàðàìåòðû ïîñòàâêè êàáåëÿ
CurrSuppliesKind := F_ProjMan.GSCSBase.CurrProject.Spravochnik.GetSuppliesKindByID(SCSComponent.IDSuppliesKind);
// åñëè çàäàí âèä ïîñòàâêè
if CurrSuppliesKind <> nil then
begin
// Åñëè äëèíà êàáåëÿ ïðåâûøàåò äëèíó ïîñòàâêè - åãî íå ñ÷èòàåì
TakeThisCable := True;
SCSComponent.LoadWholeLength; // çàãðóçèòü äëèíó êàáåëÿ ïî âñåé äëèíå
if CheckIsTradUOM(F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure) then
begin
if (RoundX(FloatInUOM(SCSComponent.Length, umMetr, umFoot), aForm.neKolvoPrecision.IntValue) >
CurrSuppliesKind.Data.UnitKolvoTradUOM) then
TakeThisCable := false;
end
else
begin
if SCSComponent.Length > CurrSuppliesKind.Data.UnitKolvo then
TakeThisCable := false;
end;
// Åñëè êàáåëü ãîäèòñÿ(äëèíà íå ïðåâûøàåò âåëè÷èíó ïîñòàâêè) - ñìîòðèì òèï è îòáèðàåì òèïû êàáåëåé
if TakeThisCable then
begin
// ïðîâåðÿåì íà íàëè÷èå òèïà êàáåëÿ
// åñëè ñïèñîê òèïîâ ïóñò - äîáàâëÿåì ñðàçó
if Length(CableTypes) = 0 then
SaveCableType(SCSComponent, CurrSuppliesKind)
else
// åñëè ñïèñîê òèïîâ íå ïóñò - ïðîâåðÿåì, íåò ëè òàêîãî â ñïèñêå
begin
CableIn := false;
for i := 0 to Length(CableTypes) - 1 do
begin
// åñòü òàêîé êàáåëü - äîáàâëÿåì ýòîò îòðåçîê êàáåëÿ â ñïèñîê ñ äàííîìó òèïó
// if CableTypes[i].TypeName = CurrSuppliesKind.Data.GUID then
if CableTypes[i].CableCypher = SCSComponent.Cypher then
begin
CableIn := true;
SetLength(CableTypes[i].cables,Length(CableTypes[i].cables) + 1);
if CheckIsTradUOM(F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure) then
// Cabletypes[Length(CableTypes) - 1].Cables[Length(Cabletypes[Length(CableTypes) - 1].Cables) - 1].Length := RoundX(FloatInUOM(SCSComponent.Length, umMetr, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure), aForm.neKolvoPrecision.IntValue)
CableTypes[i].cables[Length(CableTypes[i].cables) - 1].Length := RoundX(FloatInUOM(SCSComponent.Length, umMetr, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure), aForm.neKolvoPrecision.IntValue)
//RoundCP(FloatInUOM(SCSComponent.Length, umMetr, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure))
else
// Cabletypes[Length(CableTypes) - 1].Cables[Length(Cabletypes[Length(CableTypes) - 1].Cables) - 1].Length := RoundX(SCSComponent.Length, aForm.neKolvoPrecision.IntValue);//RoundCP(SCSComponent.Length);
// Cabletypes[Length(CableTypes) - 1].Cables[Length(Cabletypes[Length(CableTypes) - 1].Cables) - 1].Length := RoundX(FloatInUOM(SCSComponent.Length, umMetr, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure), aForm.neKolvoPrecision.IntValue);
CableTypes[i].Cables[Length(CableTypes[i].cables) - 1].Length := RoundX(FloatInUOM(SCSComponent.Length, umMetr, F_ProjMan.GSCSBase.CurrProject.Setting.UnitOfMeasure), aForm.neKolvoPrecision.IntValue);
CableTypes[i].CableIDs.Add(CableID); // èäåíòèôèêàòîð êàáåëÿ
break;
end;
end;
// íåò òàêîãî òèïà êàáåëÿ â ñïèñêå - äîáàâëÿåì
if not CableIn then
SaveCableType(SCSComponent,CurrSuppliesKind);
end;
end;
end // çàäàíà ïîñòàâêà
end; // êàáåëü íå âûáèðàëñÿ
End;
// îñâîáîæäåíèå ïàìÿòè, çàíÿòîé ìàññèâîì òèïîâ êàáåëåé
Procedure FreeCableTypes(CableTypes : TCableTypearray);
Var
i,j: integer;
Begin
if Length(CableTypes) > 0 then
begin
for i := 0 to Length(CableTypes) - 1 do
begin
if Length(CableTypes[i].Reels) > 0 then
begin
for j := 0 to Length(CableTypes[i].Reels) - 1 do
begin
FreeAndNil(CableTypes[i].Reels[j].CableIDs);
end;
end;
FreeAndNil(CableTypes[i].CableIDs);
end;
end;
SetLength(CableTypes,0);
End;
// ðàñ÷åò êîëè÷åñòâà êàòóøåê è ðåçêà êàáåëåé îò íèõ
Procedure CableReelCalculate(CableTypes : TCableTypeArray; MethodType : string; var ReelsCableFlow : TStringList; aForm: TF_ResourceReport );
Var
i,j,k,l : integer;
ReelsCount : integer; // òåêóùåå ðàñ÷åòíîå êîëè÷åñòâî êàòóøåê äëÿ òèïà êàáåëÿ
ReelsCounter : integer; // ñ÷åò÷èê îòðàáîòàííûõ êàòóøåê
SCSComponent : TSCSComponent;
CableIn : Boolean;
CurrSuppliesKind: TNBSuppliesKind;
CableChecks : array of boolean;
TakeThisCable : Boolean;
s : string;
// Ñáðîñ ïàðàìåòðîâ òèïîâ êàáåëåé
Procedure DropCableTypesParam(CableTypes : TCableTypes);
Var i : integer;
Begin
// ñáðàñûâàåì ïàðàìåòðû êàáåëåé äëÿ äàííîãî òèïà êàáåëÿ
if Length(CableTypes.Cables) > 0 then
begin
for i := 0 to Length(CableTypes.Cables) - 1 do
begin
CableTypes.Cables[i].Selected := False;
end;
end;
// ñáðàñûâàåì ïàðàìåòðû êàòóøåê
if Length(CableTypes.Reels) > 0 then
begin
for i := 0 to Length(CableTypes.Reels) - 1 do
begin
// îñòàòîê êàáåëÿ â êàòóøêå
CableTypes.Reels[i].Rest := CableTypes.Length;
// ñïèñîê îòðåçêîâ êàáåëåé
SetLength(CableTypes.Reels[i].Cables, 0);
// ìîæíî ëè ðåçàòü èç êàòóøêè
CableTypes.Reels[i].CanCut := True;
// ñïèñîê àéäèøíèêîâ êàáåëåé (åñëè åñòü)
if CableTypes.Reels[i].CableIDs <> nil then
begin
if CableTypes.Reels[i].CableIDs.Count > 0 then
CableTypes.Reels[i].CableIDs.Clear;
end;
end;
end;
End; // ïèïåö
// ðàñ÷åò êîëè÷åñòâà áóõò è ðàñõîäà êàáåëåé
// ðåæèì åôôåêòèâíîé ðàáîòû
Procedure MaxEfficiency(CableTypes : TCableTypeArray);
Var
i,j,k,l : integer;
Counter : integer; // ñ÷åò÷èê
AllCableLength : double;
s : string; // ñòî÷êà äëÿ îò÷åòà (êàòóøêà ¹ + ñïèñîê êàáåëåé)
CableCut : Boolean;
Begin
// åñëè ñïèñîê òèïîâ êàáåëåé íå ïóñòîé
if Length(CableTypes) > 0 then
begin
// ôîðìèðóåì êîëè÷åñòâî êàòóøåê
// äëÿ êàæäîãî òèïà êàáåëÿ
// äåëàåì ïðåäâàðèòåëüíûé ïðîñ÷åò êîëè÷åñòâà êàòóøåê
for i := 0 to Length(CableTypes) - 1 do
begin
AllCableLength := 0;
Counter := 0;
// åñëè åñòü ñïèñîê êàáåëåé
if Length(CableTypes[i].Cables) > 0 then
begin
// ïîëó÷àåì îáùóþ äëèíó êàáåëåé è èõ êîëè÷åñòâî
for j := 0 to Length(CableTypes[i].Cables) - 1 do
begin
AllCableLength := AllCableLength + CableTypes[i].Cables[j].Length;
Counter := Counter + 1;
end;
// åñëè îáùàÿ äëèíà êàáåëåé äàííîãî òèïà íå íóëåâàÿ, ìîæíî ïðîèçâîäèòü ðàñ÷åò êîëè÷åñòâà êàòóøåê
if AllCableLength > 0 then
begin
// ïîêà íå îòðåæåì âñå êàáåëè
repeat
// äîáàâëÿåì êàòóøêó (åäèíèöó ïîñòàâêè, ìîæåò áûòü è íå êàòóùêà)
SetLength(CableTypes[i].Reels,Length(CableTypes[i].Reels) + 1);
if Length(CableTypes[i].Reels) >= 10000 then
begin
showmessage(cRepMsg236);
break;
end;
// íà÷àëüíûé îñòàòîê â êàòóøêå - âåëè÷èíà ïîñòàâêè
CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest := Cabletypes[i].Length;
//ñîçäàåì ñïèñîê èäåíòèôèêàòîðîâ êàáåëåé äëÿ êàòóøêè
CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].CableIDs := TIntList.Create;
for j := 0 to Length(CableTypes[i].Cables) - 1 do
begin
// åñëè îñòàòîê êàáåëÿ â êàòóøêå áîëüøå èëè ðàâåí ðàçìåðó òåêóùåãî êàáåëÿ çàäàííîãî òèïà è êàáåëü åùå íå îòðåçàëñÿ - îòðåçàåì
if (CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest >= CableTypes[i].Cables[j].Length) and (CableTypes[i].Cables[j].Selected = false) then
begin
CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest := CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest - CableTypes[i].Cables[j].Length;
CableTypes[i].Cables[j].Selected := true;
// CableTypes[i].Reels[Length(CableTypes[i].Reels)-1].CableIDs.Add(CableTypes[i].CableIDs[j]); // èäåíòèôèêàòîð êàáåëÿ
Counter := Counter - 1; // óìåíüøàåì ñ÷åò÷èê
end;
end;
until Counter = 0;
// ñáðàñûâàåì îòìåòêè êàáåëåé
for j := 0 to Length(CableTypes[i].Cables) - 1 do
begin
CableTypes[i].Cables[j].Selected := false;
end;
//âîçâðàùàåì îñòàòêè â èñõîäíîå ïîëîæåíèå
for j := 0 to Length(CableTypes[i].Reels) - 1 do
CableTypes[i].Reels[j].Rest := CableTypes[i].Length;
end;
end;
end; // ôèíèø ïðåäâàðèòåëüíîãî ïðîñ÷åòà
// òåïåðü, åñëè åñòü êàòóøêè - ðåæåì ïî àëãîðèòìó (îò êàæäîé ïî î÷åðåäè ), ïîêà íå îòðåæåì âñå êàáåëè
// äëÿ êàæäîãî òèïà êàáåëÿ
for i := 0 to Length(CableTypes) - 1 do
begin
AllCableLength := 0;
Counter := 0;
ReelsCount := Length(CableTypes[i].Reels); // ðàñ÷åòíîå êîëè÷åñòâî êàòóøåê äàííîãî òèïà êàáåëÿ
// åñëè åñòü ñïèñîê êàáåëåé
if Length(CableTypes[i].Cables) > 0 then
begin
// ïîëó÷àåì îáùóþ äëèíó êàáåëåé è èõ êîëè÷åñòâî
for j := 0 to Length(CableTypes[i].Cables) - 1 do
begin
AllCableLength := AllCableLength + CableTypes[i].Cables[j].Length;
Counter := Counter + 1;
end;
// åñëè îáùàÿ äëèíà êàáåëåé äàííîãî òèïà íå íóëåâàÿ, ìîæíî ðåçàòü
if AllCableLength > 0 then
begin
// ñíà÷àëà äîáàâëÿåì òèï êàáåëÿ â ñïèñîê
ReelsCableFlow.Add(Cabletypes[i].Name);
repeat
for j := 0 to Length(CableTypes[i].Reels) - 1 do
begin
ReelsCounter := 0; // ñ÷åò÷èê îòðàáîòàííûõ êàòóøåê
// åñëè îò êàòóøêè ìîæíî ÷åãî îòðåçàòü ...
if CanCutReel(CableTypes[i].Reels[j],CableTypes[i].Cables) then
// òî îòðåçàåì
begin
for k := 0 to Length(CableTypes[i].Cables) - 1 do
begin
if ((CableTypes[i].Cables[k].Length <= CableTypes[i].Reels[j].Rest) and (CableTypes[i].Cables[k].Selected = False)) then
begin
// îòðåçàåì
CableTypes[i].Reels[j].Rest := CableTypes[i].Reels[j].Rest - CableTypes[i].Cables[k].Length;
// äîáàâëÿåì ê êàòóøêå èäåíòèôèêàòîð êàáåëÿ
CableTypes[i].Reels[j].CableIDs.Add(CableTypes[i].CableIDs[k]);
// äîáàâëÿåì ê êàòóøêå êàáåëü
SetLength(CableTypes[i].Reels[j].Cables, Length(CableTypes[i].Reels[j].Cables) + 1);
CableTypes[i].Reels[j].Cables[Length(CableTypes[i].Reels[j].Cables) - 1] := CableTypes[i].Cables[k].Length;
CableTypes[i].Cables[k].Selected := True; // îòìå÷àåì êàáåëü êàê îòðåçàííûé
Counter := Counter - 1; // óìåíüøàåì ñ÷åò÷èê íåîòðåçàííûõ êàáåëåé
break;
end;
end;
end
// åñëè îò êàòóøêè îòðåçàòü íè÷åãî óæå íåëüçÿ, òî óâåëè÷èâàåì ñ÷åò÷èê îòðàáîòàííûõ êàòóøåê
else
ReelsCounter := ReelsCounter + 1;
end;
// åñëè ïðèêëþ÷èëîñü òàê, ÷òî ðàñ÷åòíîãî êîëè÷åñòâà êàòóøåê íå õâàòèëî, ÷òîáû îòðåçàòü âåñü êàáåëü
// (ñ÷åòêèê îòðàáîòàííûõ êàòóøåê áóäåò ðàâåí èõ êîëè÷åñòâó, à ñ÷åò÷èê îòðåçàííûõ êàáåëåé åùå íå îáíóëèëñÿ),
// òî íóæíî äîáàâèòü êàòóøêó ê äàííîìó òèïó êàáåëåé è ñáðîñèòü ðàñ÷åòû, ÷òîáû âñå ïåðåñ÷èòàëîñü çàíîâî
if ((ReelsCounter = ReelsCount) and (Counter > 0)) then
begin
// ñáðàñûâàåì ðàñ÷åòû äëÿ äàííîãî òèïà êàáåëÿ
DropCableTypesParam(CableTypes[i]);
// äîáàâëÿåì êàòóøêó (åäèíèöó ïîñòàâêè, ìîæåò áûòü è íå êàòóùêà)
SetLength(CableTypes[i].Reels,Length(CableTypes[i].Reels) + 1);
// íà÷àëüíûé îñòàòîê â êàòóøêå - âåëè÷èíà ïîñòàâêè
CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest := Cabletypes[i].Length;
//ñîçäàåì ñïèñîê èäåíòèôèêàòîðîâ êàáåëåé äëÿ êàòóøêè
CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].CableIDs := TIntList.Create;
// îáíîâëÿåì ñ÷åò÷èê îòðåçàííûõ êàáåëåé äëÿ ïåðåðàñ÷åòà
Counter := Length(CableTypes[i].Cables);
end;
until Counter = 0;
// äîáàâëÿåì ñïèñîê êàòóøåê ñ êàáåëÿìè â ëèñò äëÿ îò÷åòà
// êàòóøêè
for j := 0 to Length(CableTypes[i].Reels) - 1 do
begin
s := ' ' + CableTypes[i].ReelName + cRepMsg234 + inttostr(j + 1)+ ': ';
for k := 0 to Length(CableTypes[i].Reels[j].Cables) - 1 do
begin
s := s + FormatFloat('0.0##', CableTypes[i].Reels[j].Cables[k]);
if k < (Length(CableTypes[i].Reels[j].Cables) - 1) then
if Length(s) <> Length(' ' + CableTypes[i].ReelName + cRepMsg234 + inttostr(j + 1)+ ': ') then
s := s + '; ';
end;
// s := s + cRepMsg235 + floattostr(Cabletypes[i].Reels[j].Rest) + CableTypes[i].Izm + cRepMsg232;
s := s + cRepMsg235 + FormatFloat('0.0##',Cabletypes[i].Reels[j].Rest) + CableTypes[i].Izm + cRepMsg232;
ReelsCableFlow.Add(s);
end;
end;
end;
end; // ïîêà íå îòðåæåì âñå êàáåëè
end;
End;
// ðàñ÷åò êîëè÷åñòâà áóõò è ðàñõîäà êàáåëåé
// ðåæèì åêîíîìèè êàáåëÿ
Procedure MaxScrapRate(CableTypes : TCableTypeArray);
Var
i,j,k,l : integer;
ReelsCount : integer;
AllCableLength : double;
rest : double;
AllCablesDistributed : boolean;
CableCut : boolean;
Counter : integer;
s : string;
Begin
// åñëè åñòü êàáåëè
if Length(CableTypes) > 0 then
begin
// for each cable type count Reels
for i := 0 to Length(CableTypes) - 1 do
begin
AllCableLength := 0;
Counter := 0;
// åñëè äëèíà êàáåëåé äàííîãî òèïà áîëüøå íîëÿ
// ìîæíî ñ÷èòàòü ðàñõîä êàáåëÿ
for j := 0 to Length(CableTypes[i].Cables) - 1 do
begin
AllCableLength := AllCableLength + CableTypes[i].Cables[j].Length;
Counter := Counter + 1;
end;
if AllCableLength > 0 then
begin
ReelsCableFlow.Add(CableTypes[i].Name);
repeat
// äîáàâëÿåì êàòóøêó
SetLength(CableTypes[i].Reels, Length(CableTypes[i].Reels) + 1);
// åñëè êîëè÷åñòâî êàòóøåê áîëüøå 10000, òî áðÿêíåìñÿ (íà âñÿêèé)
if Length(CableTypes[i].Reels) >= 10000 then
begin
showmessage(cRepMsg236);
break;
end;
// âåëè÷èíà ïîñòàâêè
CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest := CableTypes[i].Length;
//ñïèñîâ èäåíòèôèêàòîðîâ êàáåëåé â êàòóøêå
CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].CableIDs := TIntList.Create;
// íà÷èíàåì ðåçàòü îò íåå âñå, ÷òî ñìîãåì
s := ' ' + CableTypes[i].ReelName + cRepMsg234 + inttostr(Length(CableTypes[i].Reels))+ ': ';
for k := 0 to Length(CableTypes[i].Cables) - 1 do
begin
// åñëè êàáåëü ìåíüøå îñòàòêà è åùå íå îòðåçàëñÿ - îòðåçàåì
if (CableTypes[i].Cables[k].Selected = false) and (CableTypes[i].Cables[k].Length < CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest) then
begin
// îòðåçàåì îò êàòóøêè
CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest := CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest - CableTypes[i].Cables[k].Length;
// ïðè÷èñëÿåì êàáåëü ê äàííîé êàòóøêå
SetLength(CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Cables, Length(CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Cables) + 1 );
CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Cables[Length(CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Cables) - 1] := CableTypes[i].Cables[k].Length;
// äîáàâëÿåì ê êàòóøêå èäåíòèôèêàòîð êàáåëÿ
CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].CableIDs.Add(CableTypes[i].CableIDs[k]);
// îòìå÷àåì êàáåëü êàê îòðåçàííûé
CableTypes[i].Cables[k].Selected := true;
// ôîðìèðóåì ñòðîêó (äëèíû êàáåëåé â êàòóøêå)
if Length(s)<> Length(' ' + CableTypes[i].ReelName + cRepMsg234 + inttostr(Length(CableTypes[i].Reels))+ ': ') then
s := s +' ; ';
s := s + FormatFloat('0.0##', CableTypes[i].Cables[k].Length);
Counter := Counter - 1; // óìåíüøàåì ñ÷åò÷èê
end;
end;
// s := s + cRepMsg235 + floattostr(CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest) + CableTypes[i].Izm + cRepMsg232;
s := s + cRepMsg235 + FormatFloat('0.0##', CableTypes[i].Reels[Length(CableTypes[i].Reels) - 1].Rest) + CableTypes[i].Izm + cRepMsg232;
ReelsCableFlow.Add(s);
until Counter = 0;
s := '';
end;
end;
// îêðóãëÿåì îñòàòêè
{ for i := 0 to Length(CableTypes)-1 do
begin
for j := 0 to Length(CableTypes[i].Reels)-1 do
begin
CableTypes[i].Reels[j].Rest := RoundX(CableTypes[i].Reels[j].Rest , aForm.neKolvoPrecision.IntValue);
end;
end; }
end;
End;
Begin
// î÷èùàåì èëè ñîçäàåì ñïèñîê òèïîâ êàáåëåé ñ êàòóøêàìè è
// îòðåçàííûìè îò íèõ êàáåëÿìè
if ReelsCableFlow = nil then
ReelsCableFlow := TStringList.Create
else
ReelsCableFlow.Clear;
// ñîðòèðóåì êàáåëè ïî óáûâàíèþ ïî òèïàì
SortCables(CableTypes);
// ðàñ÷åò ðàñõîäà ïî çàäàííîìó àëãîðèòìó
if MethodType = 'MaxEfficiency' then
MaxEfficiency(CableTypes);
if MethodType = 'MaxScrapRate' then
MaxScrapRate(CableTypes);
End;
//////////////////////////
procedure TReportShablons.AddShablonToList(AID: Integer; AName: String;
AIsActive: Boolean);
begin
FRepShablons.AddObject(AName, TObject(AID));
if AIsActive then
FActiveShablonID := AID;
end;
procedure TReportShablons.DefineActiveShablonIfNoDefined;
begin
if FActiveShablonID = -1 then
// Åñëè â ñïèñêå åñòü åùå äðóãèå øàáëîíû, òî âûáèðàåì ïîñëåäíèé èç ñïèñêà
if FRepShablons.Count > 0 then
FActiveShablonID := Integer(FRepShablons.Objects[FRepShablons.Count-1]);
end;
procedure TReportShablons.ClearRepShablons;
begin
FRepShablons.Clear;
//AddShablonToList(0, cResourceReport_Msg9, true);
FActiveShablonID := -1;
end;
constructor TReportShablons.Create;
begin
inherited;
FActiveShablonID := -1;
FRepShablons := TStringList.Create;
FMessgShablonNoExists := cResourceReport_Msg9_2;
ClearRepShablons;
end;
destructor TReportShablons.Destroy;
begin
FreeAndNil(FRepShablons);
inherited;
end;
function TReportShablons.GetActiveShablonName: string;
begin
Result := GetShablonNameByID(FActiveShablonID);
end;
function TReportShablons.GetShablonNameByID(AID: Integer): string;
var
IndexOfID: Integer;
begin
Result := FMessgShablonNoExists;
IndexOfID := FRepShablons.IndexOfObject(TObject(AID));
if IndexOfID <> -1 then
Result := FRepShablons.Strings[IndexOfID];
end;
procedure TReportShablons.RemoveShablonNameByID(AID: Integer);
var
IndexOfID: Integer;
begin
if AID <> 0 then
begin
IndexOfID := FRepShablons.IndexOfObject(TObject(AID));
if IndexOfID <> -1 then
FRepShablons.Delete(IndexOfID);
//*** Îïðåäåëèòü íîâûé àêòèâíûé øàáëîí
if AID = FActiveShablonID then
// Åñëè ñòàíäàðòíûé åñòü â ñïèñêå, òî äåëàåì åãî àêòèâíûì
if FRepShablons.IndexOfObject(TObject(0)) <> -1 then
FActiveShablonID := 0
else
begin
FActiveShablonID := -1;
DefineActiveShablonIfNoDefined;
end;
end;
end;
{ TReportItemParams }
constructor TReportItemParams.Create(AMode: TResourceReportFormMode; ARepType: Integer; AReportUseKind: TReportUseKind);
begin
inherited Create;
Mode := AMode;
RepType := ARepType;
ReportUseKind := AReportUseKind;
ReportUseByProjType := [];
CanHaveActiveComponents := biFalse;
CanHaveZeroPriceComponents := biFalse;
CanHaveFormMode := biFalse;
CanHavePageSize := biFalse;
CanHaveDismountAccount := biFalse;
CanHaveTemplate := biTrue;
CanHaveStamp := biFalse;
FullPathInCableJournal := biFalse;
CanHaveSupplyValue := biFalse;
CanRoundValue := biFalse;
CanAsPlacingInProj := biFalse;
CanGroupByCompType := biFalse;
CanFloorNppWithRoom := biFalse;
CanInTwoCopies := biFalse;
CanCabinetParams := biFalse;
CanResources := biFalse;
CanPricePrecision := biFalse;
CanKolvoPrecision := biFalse;
//Added by Tolik for ExplicationComponent Report
CanShowKabinet :=biFalse;
CanShowObjHierarchy :=biFalse;
CanGroupByName := biFalse;
//////////////////////////////////
CanShowResources := biFalse;
CanShowWorks := biFalse;
CanShowCablePaths := biFalse;
GroupMode := biNone;
FSimpleShablons := TReportShablons.Create;
FStampShablons := TReportShablons.Create;
FReportSortInfo := TReportSortInfo.Create(Self);
end;
destructor TReportItemParams.Destroy;
begin
FreeAndNil(FSimpleShablons);
FreeAndNil(FStampShablons);
FreeAndNil(FReportSortInfo);
inherited;
end;
function TReportItemParams.GetShablonsByTemplateType(
ATemplateType: Integer): TReportShablons;
begin
Result := nil;
case ATemplateType of
ttSimple:
Result := FSimpleShablons;
ttStamp:
Result := FStampShablons;
end;
end;
{ TF_ResourceReport }
// ##### Êîíñòðóêòîð #####
constructor TF_ResourceReport.Create(AOwner: TComponent; AForm: TForm);
begin
GForm := AForm;
Inherited Create(AOwner);
end;
// ##### Äåñòðóêòîð #####
destructor TF_ResourceReport.Destroy;
begin
inherited;
end;
procedure TF_ResourceReport.FormCreate(Sender: TObject);
var
StrToAdd: String;
i: Integer;
TreeCollection: TTreeCollectionClass;
tmp: TTreeColumn;
RepParams: TReportItemParams;
PrevIconCount: Integer;
tmpKbmMemTable: TkbmMemTable;
procedure AddParamsToReportList(AItemName: String; AParams: TReportItemParams; AIsOn: Boolean = true);
var
Node: TFlyNode;
begin
Node := tvReports.Items.Add(nil, AItemName);
Node.ImageIndex := 0;
Node.SelectedIndex := Node.ImageIndex;
Node.Data := AParams;
if AIsOn then
Node.Cells[rciIsOn] := bsTrue
else
Node.Cells[rciIsOn] := bsFalse;
if AParams.CanHaveTemplate = biFalse then
begin
AParams.FSimpleShablons.FMessgShablonNoExists := '';
AParams.FStampShablons.FMessgShablonNoExists := '';
end
else
if (AParams.CanHaveStamp <> biTrue) then
AParams.FStampShablons.FMessgShablonNoExists := '';
AddSortFieldsToReportItemParams(AParams);
end;
{procedure AddListItem(AItemName: String; AItemMode: TResourceReportFormMode; ARepType: Integer;
ACanHaveActiveComponents: Integer; ACanHaveZeroPriceComponents: Integer = biFalse;
ACanHavePageSize: Integer = biFalse; ACanHaveFormMode: Integer = biFalse;
ACanHaveDismountAccount: Integer = biFalse; ACanStamp: Integer = biTrue;
AFullPathInCableJournal: Integer = biFalse);
var ListItem: TListItem;
ptrReportItemParams: TReportItemParams;
Node: TFlyNode;
StrMode: string;
StrRepType: string;
begin
//ListItem := lvReports.Items.Add;
//ListItem.Caption := AItemName;
//ListItem.ImageIndex := 21;
//GetMem(ptrReportItemParams, SizeOf(TReportItemParams));
ptrReportItemParams := TReportItemParams.Create(AItemMode, ARepType);
ptrReportItemParams.Mode := AItemMode;
ptrReportItemParams.RepType := ARepType;
ptrReportItemParams.CanHaveActiveComponents := ACanHaveActiveComponents;
ptrReportItemParams.CanHaveZeroPriceComponents := ACanHaveZeroPriceComponents;
ptrReportItemParams.CanHaveFormMode := ACanHaveFormMode;
ptrReportItemParams.CanHavePageSize := ACanHavePageSize;
ptrReportItemParams.CanHaveDismountAccount := ACanHaveDismountAccount;
ptrReportItemParams.CanHaveStamp := ACanStamp;
ptrReportItemParams.FullPathInCableJournal := AFullPathInCableJournal;
StrMode := '';
StrRepType := '';
case AItemMode of
fmUnsign: StrMode := 'fmUnsign';
fmRObject: StrMode := 'fmRObject';
fmRResources: StrMode := 'fmRResources';
fmRNorms: StrMode := 'fmRNorms';
fmRCable: StrMode := 'fmRCable';
fmRCableExceedLength: StrMode := 'fmRCableExceedLength';
fmRCableCanal: StrMode := 'fmRCableCanal';
fmRDisparityComponColor: StrMode := 'fmRDisparityComponColor';
fmRDisparityComponProducer: StrMode := 'fmRDisparityComponProducer';
fmRCableJournal: StrMode := 'fmRCableJournal';
fmRCableJournalExt: StrMode := 'fmRCableJournalExt';
fmRLegendObjectIcons: StrMode := 'fmRLegendObjectIcons';
fmRTypeComponents: StrMode := 'fmRTypeComponents';
fmRSpecification: StrMode := 'fmRSpecification';
fmRGOSTSpecification: StrMode := 'fmRGOSTSpecification';
fmRGOSTSpecificationA3: StrMode := 'fmRGOSTSpecificationA3';
fmRExplanatoryReport: StrMode := 'fmRExplanatoryReport';
end;
case ARepType of
rtResources: StrRepType := 'rtResources';
rtCable: StrRepType := 'rtCable';
rtCableCanal: StrRepType := 'rtCableCanal';
rtCableJournal: StrRepType := 'rtCableJournal';
rtCableJournalExt: StrRepType := 'rtCableJournalExt';
rtSpecification: StrRepType := 'rtSpecification';
rtGOSTSpecification: StrRepType := 'rtGOSTSpecification';
rtNorms: StrRepType := 'rtNorms';
rtExplanatoryReport: StrRepType := 'rtExplanatoryReport';
rtLegendObjectIcons: StrRepType := 'rtLegendObjectIcons';
end;
GLog.Add('RepParams := TReportItemParams.Create('+StrMode+', '+StrRepType+');');
//GLog.Add('RepParams.Mode := '+IntToStr(Ord(AItemMode))+';');
//GLog.Add('RepParams.RepType := '+IntToStr(ARepType)+';');
if ACanHaveActiveComponents = biTrue then
GLog.Add('RepParams.CanHaveActiveComponents := '+IntToStr(ACanHaveActiveComponents)+';');
if ACanHaveZeroPriceComponents = biTrue then
GLog.Add('RepParams.CanHaveZeroPriceComponents := '+IntToStr(ACanHaveZeroPriceComponents)+';');
if ACanHaveFormMode = biTrue then
GLog.Add('RepParams.CanHaveFormMode := '+IntToStr(ACanHaveFormMode)+';');
if ACanHavePageSize = biTrue then
GLog.Add('RepParams.CanHavePageSize := '+IntToStr(ACanHavePageSize)+';');
if ACanHaveDismountAccount = biTrue then
GLog.Add('RepParams.CanHaveDismountAccount := '+IntToStr(ACanHaveDismountAccount)+';');
if ACanStamp = biTrue then
GLog.Add('RepParams.CanHaveStamp := '+IntToStr(ACanStamp)+';');
if AFullPathInCableJournal = biTrue then
GLog.Add('RepParams.FullPathInCableJournal := '+IntToStr(AFullPathInCableJournal)+';');
GLog.Add('AddParamsToReportList('+AItemName+', RepParams);');
GLog.Add('');
//ListItem.Data := ptrReportItemParams;
AddParamsToReportList(AItemName, ptrReportItemParams);
//25.09.2007
//Node := tvReports.Items.Add(nil, AItemName);
//Node.ImageIndex := 21;
//Node.SelectedIndex := Node.ImageIndex;
//Node.Data := ptrReportItemParams;
//Node.Cells[rciIsOn] := bsTrue;
end;}
begin
CreateControls;
//*** tvReports
tvReports.Items.Clear;
tvReports.Columns.Clear;
//*** Êîëîíêà Âêë
TreeCollection := tvReports.Columns.Add(cResourceReport_Msg22_1, 'TTreeColumn');
//*** Êîëîíêà Âèä îò÷åòà
TreeCollection := tvReports.Columns.Add(cResourceReport_Msg22_2, 'TTreeColumn');
//*** Êîëîíêà Øàáëîí
TreeCollection := tvReports.Columns.Add(cResourceReport_Msg22_3, 'TTreeColumn');
//*** Êîëîíêà Øàáëîí ñî øòàìïîì
TreeCollection := tvReports.Columns.Add(cResourceReport_Msg22_4, 'TTreeColumn');
tvReports.StructureCol := rciName;
//tvReports.Columns[tciSimple].EditorStyle.Sections.Add;
//tvReports.Columns[tciStamp].EditorStyle.Sections.Add;
tvReports.Columns[rciIsOn].EditorStyle.AutoComplete := true;
tvReports.Columns[rciIsOn].EditorStyle.EditorType := tetCheckBox;
tvReports.Columns[rciIsOn].EditorStyle.Ctl3d := true;
tvReports.Columns[rciIsOn].Width := 30;
//tvReports.Columns[rciIsOn].EditorStyle.Sections
tvReports.Columns[rciName].AutoFit := true;
tvReports.Columns[rciName].EditorStyle.AutoComplete := true;
tvReports.Columns[rciName].EditorStyle.AutoDropDown := true;
tvReports.Columns[rciName].ReadOnly := true;
tvReports.Columns[rciName].Width := 210;
tvReports.Columns[rciSimple].EditorStyle.AutoComplete := true;
tvReports.Columns[rciSimple].Width := 100;
tvReports.Columns[rciStamp].EditorStyle.AutoComplete := true;
tvReports.Columns[rciStamp].Width := 50;
tvReports.Columns[rciSimple].EditorStyle.EditorType := tetDropDownList;
tvReports.Columns[rciStamp].EditorStyle.EditorType := tetDropDownList;
tvReports.Columns[rciSimple].EditorStyle.ButtonType := tbtDropDown;
tvReports.Columns[rciStamp].EditorStyle.ButtonType := tbtDropDown;
tvReports.Columns[rciSimple].EditorStyle.DropdownStyles := tvReports.Columns[rciSimple].EditorStyle.DropdownStyles+[ddsSized];
tvReports.Columns[rciStamp].EditorStyle.DropdownStyles := tvReports.Columns[rciStamp].EditorStyle.DropdownStyles+[ddsSized];
tvReports.ToolTips := true;
tvReports.ToolTipPause := 3000;
tvReports.StatesDrawed := false;
//*** tvReportTarget
tvReportTarget.Items.Clear;
tvReportTarget.Columns.Clear;
//*** Ïå÷àòü ëèñòà
TreeCollection := tvReportTarget.Columns.Add(cResourceReport_Msg23_1, 'TTreeColumn');
//*** Ïå÷àòü îò÷åòà
TreeCollection := tvReportTarget.Columns.Add(cResourceReport_Msg23_2, 'TTreeColumn');
//*** Íàèìåíîâàíèå îáúåêòà
TreeCollection := tvReportTarget.Columns.Add(cResourceReport_Msg23_3, 'TTreeColumn');
tvReportTarget.StructureCol := 2;
tvReportTarget.Columns[0].EditorStyle.Ctl3d := true;
tvReportTarget.Columns[0].EditorStyle.EditorType := tetCheckBox;
//tvReportTarget.Columns[0].Prompt := 'Teeeeest';
tvReportTarget.Columns[0].Width := 20;
tvReportTarget.Columns[1].EditorStyle.Ctl3d := true;
tvReportTarget.Columns[1].EditorStyle.EditorType := tetCheckBox;
tvReportTarget.Columns[1].Width := 20;
tvReportTarget.Columns[2].ReadOnly := true;
tvReportTarget.Columns[2].Width := 200;
tvReportTarget.Images.Clear;
tvReportTarget.Images.AddImages(TF_Main(GForm).DM.ImageList_Dir);
// íàñòðàèâàåì èêîíêè ñâåðòûâàíèÿ-ðàçâåðòûâàíèÿ
PrevIconCount := tvReportTarget.Images.Count;
tvReportTarget.Images.AddImages(TF_Main(GForm).DM.ImageList_FlyTree);
tvReportTarget.ButtonCollapsedIndex := tbiCollapsed + PrevIconCount;
tvReportTarget.ButtonExpandedIndex := tbiExpanded + PrevIconCount;
tvReportTarget.DefaultRowHeight := 17;
//tvReportTarget.Options := tvReportTarget.Options + [goRowSelect, goAlwaysShowEditor];
tvReportTarget.FitColumnToClientWidth := true;
tvReportTarget.ShowButtons := false;
tvReportTarget.StatesDrawed := false;
FcbCanHaveActiveComponentsCurr := nil;
FcbCanHaveDismountAccountCurr := nil;
{
AddListItem(cResourceReport_Msg1_1, fmRExplanatoryReport, rtExplanatoryReport, biFalse);
AddListItem(cResourceReport_Msg1_2, fmRSpecification, rtSpecification, biTrue, biTrue, biFalse, biFalse, biTrue, biFalse);
AddListItem(cResourceReport_Msg1_3, fmRGOSTSpecification, rtGOSTSpecification, biTrue, biFalse, biTrue, biFalse, biTrue, biFalse);
AddListItem(cResourceReport_Msg1_4, fmRCableJournal, rtCableJournal, biTrue, biFalse, biFalse, biFalse, biTrue);
//AddListItem(cResourceReport_Msg1_5_1, fmRCableJournalExt, rtCableJournalExt, biTrue, biFalse, biFalse, biFalse, biTrue);
//AddListItem(cResourceReport_Msg1_5_2, fmRCableJournalExt, rtCableJournalExt, biTrue, biFalse, biFalse, biFalse, biTrue, biTrue, biTrue);
AddListItem(cResourceReport_Msg1_5_1, fmRCableJournalExt, rtCableJournalExt, biTrue, biFalse, biFalse, biFalse, biTrue, biTrue, biTrue);
AddListItem(cResourceReport_Msg1_6, fmRResources, rtResources, biTrue, biTrue, biFalse, biTrue, biTrue);
AddListItem(cResourceReport_Msg1_7, fmRNorms, rtNorms, biTrue);
AddListItem(cResourceReport_Msg1_8, fmRCable, rtCable, biTrue, biFalse, biFalse, biFalse, biTrue);
//AddListItem('Âåäîìîñòü êàáåëåé ñ ïðåâûøàþùåé äëèíîé', fmRCableExceedLength);
AddListItem(cResourceReport_Msg1_9, fmRCableCanal, rtCableCanal, biTrue, biFalse, biFalse, biFalse, biTrue);
AddListItem(cResourceReport_Msg1_10, fmRLegendObjectIcons, rtLegendObjectIcons, biTrue);
//AddListItem('Âåäîìîñòü ñîåäèíåíèé ïî íåñîîòâåòñòâóþùèì öâåòàì', fmRDisparityComponColor);
//AddListItem('Âåäîìîñòü ñîåäèíåíèé ïî íåñîîòâåòñòâóþùèì ïðîèçâîäèòåëÿì', fmRDisparityComponProducer);
}
//*** Ïîÿñíèòåëüíàÿ çàïèñêà
RepParams := TReportItemParams.Create(fmRExplanatoryReport, rtExplanatoryReport, rkProject);
RepParams.CanHaveStamp := biTrue;
AddParamsToReportList(cResourceReport_Msg1_1, RepParams);
//*** Ñïåöèôèêàöèÿ
RepParams := TReportItemParams.Create(fmRSpecification, rtSpecification, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveZeroPriceComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanHaveSupplyValue := biTrue;
RepParams.CanRoundValue := biTrue;
RepParams.CanResources := biTrue;
RepParams.CanPricePrecision := biTrue;
RepParams.CanKolvoPrecision := biTrue;
RepParams.GroupMode := gmComponType;
AddParamsToReportList(cResourceReport_Msg1_2, RepParams);
//*** Ñïåöèôèêàöèÿ (ÃÎÑÒ 21.110-95)
RepParams := TReportItemParams.Create(fmRGOSTSpecification, rtGOSTSpecification, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveZeroPriceComponents := biTrue;
RepParams.CanHavePageSize := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanHaveSupplyValue := biTrue;
RepParams.CanRoundValue := biTrue;
RepParams.CanResources := biTrue;
RepParams.CanPricePrecision := biTrue;
RepParams.CanKolvoPrecision := biTrue;
RepParams.GroupMode := gmComponType;
AddParamsToReportList(cResourceReport_Msg1_3, RepParams);
//*** Êàáåëüíûé æóðíàë
RepParams := TReportItemParams.Create(fmRCableJournal, rtCableJournal, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanHaveStamp := biTrue;
RepParams.FullPathInCableJournal := biTrue;
AddParamsToReportList(cResourceReport_Msg1_4, RepParams);
//*** Êàáåëüíûé æóðíàë ÃÎÑÒ
RepParams := TReportItemParams.Create(fmRGOSTCableJournal, rtGOSTCableJournal, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
//RepParams.CanHaveStamp := biTrue;
//RepParams.FullPathInCableJournal := biTrue;
AddParamsToReportList(cResourceReport_Msg1_11, RepParams);
//*** Ðàñøèðåííûé êàáåëüíûé æóðíàë
RepParams := TReportItemParams.Create(fmRCableJournalExt, rtCableJournalExt, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanHaveStamp := biTrue;
RepParams.FullPathInCableJournal := biTrue;
AddParamsToReportList(cResourceReport_Msg1_5_1, RepParams);
//*** Êðîññîâûé æóðíàë
RepParams := TReportItemParams.Create(fmRCrossJournal, rtCrossJournal, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
AddParamsToReportList(cResourceReport_Msg1_21, RepParams);
//*** Êðîññîâûé æóðíàë (ÃÎÑÒ 21.110-95)
RepParams := TReportItemParams.Create(fmRGOSTCrossJournal, rtGOSTCrossJournal, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
AddParamsToReportList(cResourceReport_Msg1_22, RepParams);
//*** Âåäîìîñòü ðåñóðñîâ
RepParams := TReportItemParams.Create(fmRResources, rtResources, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveZeroPriceComponents := biTrue;
RepParams.CanHaveFormMode := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanHaveStamp := biTrue;
RepParams.CanHaveSupplyValue := biTrue;
RepParams.CanRoundValue := biTrue;
RepParams.CanPricePrecision := biTrue;
RepParams.CanKolvoPrecision := biTrue;
AddParamsToReportList(cResourceReport_Msg1_6, RepParams);
//*** Âåäîìîñòü ñìåòíûõ íîðì/ðàñöåíîê
RepParams := TReportItemParams.Create(fmRNorms, rtNorms, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveStamp := biTrue;
AddParamsToReportList(cResourceReport_Msg1_7, RepParams);
//*** Âåäîìîñòü êàáåëåé
RepParams := TReportItemParams.Create(fmRCable, rtCable, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanHaveStamp := biTrue;
RepParams.CanAsPlacingInProj := biTrue;
AddParamsToReportList(cResourceReport_Msg1_8, RepParams);
//*** Âåäîìîñòü êàáåëüíûõ êàíàëîâ
RepParams := TReportItemParams.Create(fmRCableCanal, rtCableCanal, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanHaveStamp := biTrue;
AddParamsToReportList(cResourceReport_Msg1_9, RepParams);
//*** Ëåãåíäà óñëîâíûõ îáîçíà÷åíèé
RepParams := TReportItemParams.Create(fmRLegendObjectIcons, rtLegendObjectIcons, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveStamp := biTrue;
AddParamsToReportList(cResourceReport_Msg1_10, RepParams);
//*** Ýêñïëèêàöèÿ êàáèíåòîâ
RepParams := TReportItemParams.Create(fmRExplicationRoom, rtExplicationRoom, rkProject);
RepParams.CanHaveStamp := biTrue;
AddParamsToReportList(cResourceReport_Msg1_19, RepParams);
//*** Ýêñïëèêàöèÿ êîìïîíåíòîâ
RepParams := TReportItemParams.Create(fmRExplicationComponent, rtExplicationComponent, rkProject);
{RepParams.CanHaveStamp := biTrue;
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanAsPlacingInProj := biTrue;
RepParams.CanGroupByCompType := biTrue;
}
// Changed by Tolik
RepParams.CanHaveStamp := biTrue;
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanAsPlacingInProj := biTrue;
RepParams.CanGroupByCompType := biTrue;
RepParams.CanHaveZeroPriceComponents := biTrue;
//RepParams.CanHaveFormMode := biTrue;
RepParams.CanHaveSupplyValue := biTrue;
RepParams.CanRoundValue := biTrue;
RepParams.CanPricePrecision := biTrue;
RepParams.CanKolvoPrecision := biTrue;
RepParams.CanShowKabinet :=biTrue;
RepParams.CanShowObjHierarchy :=biTrue;
RepParams.CanGroupByName:=biTrue;
AddParamsToReportList(cResourceReport_Msg1_20, RepParams);
// Ñïåöèôèêàöèÿ íà êîìïîíåíòû
RepParams := TReportItemParams.Create(fmCompoSpecification, rtCompoSpecification, rkProject);
RepParams.CanHaveStamp := biFalse;
RepParams.CanHaveTemplate := biFalse;
AddParamsToReportList(cResourceReport_Msg1_25, RepParams, false);
// Äîì ñ ïîäúåçäîì
RepParams := TReportItemParams.Create(fmRHouse, rtHouse, rkProject);
RepParams.CanHaveStamp := biTrue;
RepParams.CanAsPlacingInProj := biTrue;
AddParamsToReportList(cResourceReport_Msg1_24, RepParams, false);
// Äåôåêòíûé àêò
RepParams := TReportItemParams.Create(fmRDefectAct, rtDefectAct, rkProject);
RepParams.CanHaveStamp := biTrue;
AddParamsToReportList(cResourceReport_Msg1_23, RepParams, false);
// ñ÷åò-ôàêòóðà
RepParams := TReportItemParams.Create(fmCommerceInvoice, rtCommerceInvoice, rkProject);
RepParams.CanHaveActiveComponents := biTrue;
//added by Tolik
RepParams.CanShowResources := biTrue;
RepParams.CanShowWorks := biTrue;
// RepParams.CanHaveZeroPriceComponents := biTrue;
RepParams.CanPricePrecision := biTrue;
RepParams.CanKolvoPrecision := biTrue;
// RepParams.CanHaveFormMode := biTrue;
// RepParams.CanHaveStamp := biTrue;
// RepParams.CanHaveSupplyValue := biTrue;
// RepParams.CanRoundValue := biTrue;
// RepParams.CanPricePrecision := biTrue;
// RepParams.CanKolvoPrecision := biTrue;
//RepParams.CanHaveZeroPriceComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
//RepParams.CanRoundValue := biTrue;
AddParamsToReportList(cResourceReport_Msg1_26, RepParams, false);
//*** Ïðåäâàðèòåëüíàÿ îöåíêà ñòîèìîñòè ïðîåêòà
RepParams := TReportItemParams.Create(fmRPriorCostOfProject, rtPriorCostOfProject, rkCalc);
AddParamsToReportList(cResourceReport_Msg1_12, RepParams);
//*** Ïîëíûé ïóòü êàáåëÿ
RepParams := TReportItemParams.Create(fmRCablePaths, rtCablePaths, rkCablePath);
AddParamsToReportList(cResourceReport_Msg1_27, RepParams);
//added by Tolik
// Êîîðäèíàòû ðàáî÷èõ ìåñò
RepParams := TReportItemParams.Create(fmWACoordinates, rtWACoordinates, rkWaCoordinates);
AddParamsToReportList(cResourceReport_Msg1_29, RepParams);
//*** Êðîññîâîå ïîäêëþ÷åíèå
RepParams := TReportItemParams.Create(fmRCrossConnection, rtCrossConnection, rkCrossConnection);
AddParamsToReportList(cResourceReport_Msg1_28, RepParams);
//-------- Ìàðêèðîâî÷íûå ëèñòû --------------
// Òåëåêîìóíèêàöèîííàÿ êîìíàòà
RepParams := TReportItemParams.Create(fmRMarkRoomTS, rtMarkRoomTS, rkMarkPages);
AddParamsToReportList(cResourceReport_Msg1_13, RepParams);
// Ïàò÷-ïàíåëè
RepParams := TReportItemParams.Create(fmRMarkPathPanel, rtMarkPathPanel, rkMarkPages);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
AddParamsToReportList(cResourceReport_Msg1_14, RepParams);
// Ïîðòû ïàò÷-ïàíåëåé
RepParams := TReportItemParams.Create(fmRMarkPathPanelPorts, rtMarkPathPanelPorts, rkMarkPages);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
AddParamsToReportList(cResourceReport_Msg1_15, RepParams);
// Ðîçåòêè
RepParams := TReportItemParams.Create(fmRMarkSocket, rtMarkSocket, rkMarkPages);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanFloorNppWithRoom := biTrue;
RepParams.CanCabinetParams := biTrue;
AddParamsToReportList(cResourceReport_Msg1_16, RepParams);
// Èäåíòèôèêàòîðû òåëåêîìóíèêàöèîííûõ êîìíàò äëÿ ëèöåâûõ ïàíåëåé ðàçåòîê
RepParams := TReportItemParams.Create(fmRMarkSocketPanel, rtMarkSocketPanel, rkMarkPages);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanCabinetParams := biTrue;
AddParamsToReportList(cResourceReport_Msg1_17, RepParams);
// Êàáåëè
RepParams := TReportItemParams.Create(fmRMarkCable, rtMarkCable, rkMarkPages);
RepParams.CanHaveActiveComponents := biTrue;
RepParams.CanHaveDismountAccount := biTrue;
RepParams.CanInTwoCopies := biTrue;
RepParams.CanCabinetParams := biTrue;
AddParamsToReportList(cResourceReport_Msg1_18, RepParams);
//lvReports.Selected := lvReports.Items[0];
//RichEdit_Report.SelAttributes.Name := 'Courier';
//RichEdit_Report.Font.Name := 'Courier';//'Times New Roman';
{MemTable_RCable.Active := false;
MemTable_RCable.FieldDefs.Clear;
MemTable_RCable.FieldDefs.Add('ID', ftInteger); //*** ID ëèí. êîìïîíåíòû
MemTable_RCable.FieldDefs.Add('Name', ftString, 255);
MemTable_RCable.FieldDefs.Add('Name_Begin', ftString, 255); //*** Íà÷àëî ñîåäèíåíèÿ
MemTable_RCable.FieldDefs.Add('Name_End', ftString, 255); //*** Êîíåö ñîåäèíåíèÿ
MemTable_RCable.FieldDefs.Add('Length', ftFloat); //*** Äëèíà
MemTable_RCable.FieldDefs.Add('Max_Length', ftFloat); //*** Äëèíà
MemTable_RCable.FieldDefs.Add('Price', ftFloat); //*** Öåíà
MemTable_RCable.FieldDefs.Add('Cost', ftFloat); //*** Ñòîèìîñòü
}
{MemTable_RResources.Active := false;
MemTable_RResources.FieldDefs.Clear;
MemTable_RResources.FieldDefs.Add('ID', ftInteger); //*** ID ëèí. êîìïîíåíòû
MemTable_RResources.FieldDefs.Add('Name', ftString, 255);
MemTable_RResources.FieldDefs.Add('Kolvo', ftFloat); //*** Äëèíà
MemTable_RResources.FieldDefs.Add('Price', ftFloat); //*** Öåíà
MemTable_RResources.FieldDefs.Add('Cost', ftFloat); //*** Ñòîèìîñòü }
{MemTable_RDisparityCompColor.Active := false;
MemTable_RDisparityCompColor.FieldDefs.Clear;
MemTable_RDisparityCompColor.FieldDefs.Add('ID1', ftInteger);
MemTable_RDisparityCompColor.FieldDefs.Add('Name1', ftString, 255);
MemTable_RDisparityCompColor.FieldDefs.Add('Name_Object1', ftString, 255);
MemTable_RDisparityCompColor.FieldDefs.Add('ID2', ftInteger);
MemTable_RDisparityCompColor.FieldDefs.Add('Name2', ftString, 255);
MemTable_RDisparityCompColor.FieldDefs.Add('Name_Object2', ftString, 255);
MemTable_RDisparityCompColor.FieldDefs.Add('Name_Connect_Type', ftString, 255);}
FormList := TObjectList.Create(false);
FSavedOnAppMinimize := nil;
FSavedOnAppRestore := nil;
//*** Íàñûïàòü ïîëÿ â òàáëèöè
MemTable_RCableJournal.FieldDefs.Clear;
MemTable_RCableJournal.FieldDefs.Add(fnID, ftAutoInc);
MemTable_RCableJournal.FieldDefs.Add(fnNameList, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnNameCable, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnName, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnNameMark, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnMarkID, ftInteger);
//MemTable_RCableJournal.FieldDefs.Add(fnMarkID, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnComponentIndex, ftInteger);
MemTable_RCableJournal.FieldDefs.Add(fnIZM, ftString, 20);
MemTable_RCableJournal.FieldDefs.Add(fnCategory, ftString, 20);
MemTable_RCableJournal.FieldDefs.Add(fnLength, ftFloat);
MemTable_RCableJournal.FieldDefs.Add(fnNameFrom, ftString, 255);
//MemTable_RCableJournal.FieldDefs.Add(fnPortNameFrom, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnPortNameFrom, ftInteger);
MemTable_RCableJournal.FieldDefs.Add(fnPortTypeFrom, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnNameTo, ftString, 255);
//MemTable_RCableJournal.FieldDefs.Add(fnPortNameTo, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnPortNameTo, ftInteger);
MemTable_RCableJournal.FieldDefs.Add(fnPortTypeTo, ftString, 255);
// added by tolik
MemTable_RCableJournal.FieldDefs.Add(fnLengthReserv, ftFloat); // çàïàñ êàáåëÿ
MemTable_RCableJournal.FieldDefs.Add(fnReelName,ftString,255); // íàèìåíîâàíèå êàòóøêè èç êîòîðîé îòðåçàí êàáåëü
MemTable_RCableJournalExt.FieldDefs.Clear;
MemTable_RCableJournalExt.FieldDefs.Add('ID', ftAutoInc);
MemTable_RCableJournalExt.FieldDefs.Add('NumCable', ftInteger);
MemTable_RCableJournalExt.FieldDefs.Add('CableData', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('NameMark', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('IZM', ftString, 20);
MemTable_RCableJournalExt.FieldDefs.Add('NumThread', ftInteger);
MemTable_RCableJournalExt.FieldDefs.Add('From_Building', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add(fnFromDevice, ftString, 60);
MemTable_RCableJournalExt.FieldDefs.Add(fnFromDeviceSecond, ftString, 60);
MemTable_RCableJournalExt.FieldDefs.Add(fnFromDeviceThird, ftString, 60);
MemTable_RCableJournalExt.FieldDefs.Add(fnFromDeviceFourth, ftString, 60);
MemTable_RCableJournalExt.FieldDefs.Add('From_Element', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('From_InterfName', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('From_NppPort', ftInteger);
MemTable_RCableJournalExt.FieldDefs.Add('From_PortMark', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('From_WeldingCable', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('From_NumThread', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('To_Building', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add(fnToDevice, ftString, 60);
MemTable_RCableJournalExt.FieldDefs.Add(fnToDeviceSecond, ftString, 60);
MemTable_RCableJournalExt.FieldDefs.Add(fnToDeviceThird, ftString, 60);
MemTable_RCableJournalExt.FieldDefs.Add(fnToDeviceFourth, ftString, 60);
MemTable_RCableJournalExt.FieldDefs.Add('To_Element', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('To_InterfName', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('To_NppPort', ftInteger);
MemTable_RCableJournalExt.FieldDefs.Add('To_PortMark', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('To_WeldingCable', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('To_NumThread', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('TraceCabling', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('Sign', ftString, 200);
MemTable_RCableJournalExt.FieldDefs.Add('Kolvo', ftInteger);
MemTable_RCableJournalExt.FieldDefs.Add('Diameter', ftFloat);
MemTable_RCableJournalExt.FieldDefs.Add('Length', ftFloat);
MemTable_RCableJournalExt.FieldDefs.Add('Note', ftString, 200);
// added by Tolik
MemTable_RCableJournalExt.FieldDefs.Add(fnMarks,ftMemo); // ïóòü ïðîõîæäåíèÿ êàáåëÿ
MemTable_RCableJournalExt.FieldDefs.Add(fnPrices,ftMemo); // äëèíû êóñêîâ êàáåëÿ ïî ìàðøðóòó (íà íàçâàíèå íå ñìîòðèì, òàì íå öåíà)
{tmpKbmMemTable := MemTable_RCable;
for i := 0 to tmpKbmMemTable.FieldDefs.Count - 1 do
begin
StrToAdd := tmpKbmMemTable.Name + '.FieldDefs.Add('''+tmpKbmMemTable.FieldDefs[i].Name+'''';
case tmpKbmMemTable.FieldDefs[i].DataType of
ftAutoInc:
StrToAdd := StrToAdd +', ftAutoInc';
ftBoolean:
StrToAdd := StrToAdd +', ftBoolean';
ftFloat:
StrToAdd := StrToAdd +', ftFloat';
ftInteger:
StrToAdd := StrToAdd +', ftInteger';
ftString:
StrToAdd := StrToAdd +', ftString, '+IntToStr(tmpKbmMemTable.FieldDefs[i].Size);
end;
StrToAdd := StrToAdd + ');';
GLog.Add(StrToAdd);
end;}
mtExplanatoryProj.FieldDefs.Add(fnID, ftInteger);
mtExplanatoryProj.FieldDefs.Add(fnMarkID, ftInteger);
mtExplanatoryProj.FieldDefs.Add(fnName, ftString, 255);
mtExplanatoryProj.FieldDefs.Add(fnCurrencyMName, ftString, 255);
mtExplanatoryProj.FieldDefs.Add(fnCurrencySName, ftString, 255);
mtExplanatoryProj.FieldDefs.Add(fnNDS, ftFloat);
mtExplanatoryProj.FieldDefs.Add(fnCustomerName, ftString, 255);
mtExplanatoryProj.FieldDefs.Add(fnContractorName, ftString, 255);
mtExplanatoryProj.FieldDefs.Add(fnHeightThroughFloor, ftFloat);
mtExplanatoryProj.FieldDefs.Add(fnIsVisible, ftBoolean);
// added by Tolik
mtExplanatoryProj.FieldDefs.Add(fnMaterialsCost, ftFloat); // ñòîèìîñòü ìàòåðèàëîâ
mtExplanatoryProj.FieldDefs.Add(fnResourcesCost, ftFloat); // ñòîèìîñòüðåñóðñîâ
mtExplanatoryProj.FieldDefs.Add(fnWorksCost, ftFloat); // ñòîèìîñòüðàáîò
mtExplanatoryProj.FieldDefs.Add(fnTotalCOst, ftFloat); // îáùàÿ ñòîèìîñòü ïðîåêòà
//
//*** Ëèñò
//Âêëàäêà îáùèå
mtExplanatoryList.FieldDefs.Add(fnID, ftInteger);
mtExplanatoryList.FieldDefs.Add(fnProjectID, ftInteger);
mtExplanatoryList.FieldDefs.Add(fnMarkID, ftInteger);
mtExplanatoryList.FieldDefs.Add(fnName, ftString, 255);
mtExplanatoryList.FieldDefs.Add(fnHeightRoom, ftFloat); //Âûñîòà ýòàæà
mtExplanatoryList.FieldDefs.Add(fnHeightCeiling, ftFloat); //Âûñîòà ôàëüø ïîòîëêà
mtExplanatoryList.FieldDefs.Add(fnHeightSocket, ftFloat); //Âûñîòà ðàçìåù òî÷ îáúåêòîâ
mtExplanatoryList.FieldDefs.Add(fnHeightCorob, ftFloat); //Âûñîòà ðàçìåù òðàññ
mtExplanatoryList.FieldDefs.Add(fnCableCanalFullnessKoef, ftFloat); //Êîýôôèöèåíò çàïîëíåííîñòè êàáåëüíûõ êàíàëîâ
mtExplanatoryList.FieldDefs.Add(fnLengthKoef, ftFloat); //Ïðîöåíò çàïàñà äëèíû êàáåëÿ
mtExplanatoryList.FieldDefs.Add(fnPortReserv, ftFloat); //Ðåçåðâ ñî ñòîðîíû ïîðòà
mtExplanatoryList.FieldDefs.Add(fnMultiportReserv, ftFloat); //Ðåçåðâ ñî ñòîðîíû ìóëüòèïîðòà
mtExplanatoryList.FieldDefs.Add(fnTwistedPairMaxLength, ftFloat); //Îãðàíè÷åíèå ïî ìàêñèìàëüíîé äëèíå (äëÿ âèòîé ïàðû)
mtExplanatoryList.MasterSource := dsrcExplanatoryProj;
mtExplanatoryList.DetailFields := fnProjectID;
// added by Tolik
mtExplanatoryList.FieldDefs.Add(fnMaterialsCost, ftFloat); // ñòîèìîñòü ìàòåðèàëîâ
mtExplanatoryList.FieldDefs.Add(fnResourcesCost, ftFloat); // ñòîèìîñòüðåñóðñîâ
mtExplanatoryList.FieldDefs.Add(fnWorksCost, ftFloat); // ñòîèìîñòüðàáîò
mtExplanatoryList.FieldDefs.Add(fnTotalCOst, ftFloat); // îáùàÿ ñòîèìîñòü ïðîåêòà
//
mtRLegendObjectIcons.FieldDefs.Add(fnName, ftString, 255);
mtRLegendObjectIcons.FieldDefs.Add(fnPicture, ftBlob);
//added by Tolik for WA Coordinates Report
//MemTable_WACoordinates.FieldDefs.Add(fnNameList, ftString, 255); // ëèñò
//MemTable_WACoordinates.FieldDefs.Add(fnName, ftstring, 255); // êîìïîíåíò
//MemTable_WACoordinates.FieldDefs.Add('NameMark', ftstring, 255); // êîìïîíåíò
//MemTable_WACoordinates.FieldDefs.Add(fnX, ftstring, 255); // êîîðäèíàòû
//MemTable_WACoordinates.FieldDefs.Add(fnY, ftstring, 255);
//MemTable_WACoordinates.FieldDefs.Add(fnZ, ftstring, 255);
FFrLocale := frLocale;
DefineRepDesignLanguage;
FFrPrintForm := nil;
FPrintDevice := pdScreen;
FUsefrDialog := true;
//FfrOLEExcelExport := nil;
{
LengthKoef: Double;
PortReserv: Double;
MultiportReserv: Double;
CableCanalFullnessKoef: Double; //*** % çàïîëíåííîñòè êàáåëüíîãî êàíàëà
TwistedPairMaxLength: Double;
CADBlockStep: Double;
CADClickObjectType: TClickType;
CADTraceColor: TColor;
CADTraceStyle: TPenStyle;
CADTraceWidth: Integer;
CADShowObjectNotesType: TShowType;
CADStampType: TStampType;
CADShowRaise: Boolean;
ShowObjectTypePM: TShowType; //*** îòîáðàæàòü ïîëíîå èëè êðàòêîå íàçâàíèå â ÌÏ
ShowObjectTypeCAD: TShowType; //*** îòîáðàæàòü ïîëíîå èëè êðàòêîå íàçâàíèå íà ÊÀÄå
//ShowObjectMarking: Boolean; //*** Îòîáðàæàòü ìàðêèðîâêè îáúêòîâ
GroupListObjectsByType: Boolean; //*** Ãðóïïèðîâàòü îáúåêòû
ControlJoinByNetType: Boolean;
ControlComplectJoinByProducer: Boolean;
ShowLineObjectLength: Boolean; // Îòîáðàæàòü äëèíó ëèíåéíûõ îáúåêòîâ
ShowLineObjectNote: Boolean; // Îòîáðàæàòü ïîäïèñè ê ëèíåéíûì îáúåêòàì
ShowConnObjectNote: Boolean; // Îòîáðàæàòü ïîäïèñè ê òî÷å÷íûì îáúåêòàì
ShowLineObjectCaption: Boolean; // Îòîáðàæàòü ïîäïèñè ê ëèíåéíûì îáúåêòàì
ShowConnObjectCaption: Boolean;
PutCableInTrace: Boolean; // Ëîæèòü êàáåëü íà òðàññó
NoteCountPrefix: string[1];
CADGridStep: Double;
CADHeight: Double;
CADPageOrient: TPageOrient;
CADPageSizeIndex: Integer;
CADWidth: Double;
ListType: TListType; // Òèï ëèñòà (îáû÷íûé, îòîáðàæåíèå êîìïîíåíòû (Øêàôà))
IDFigureForDesignList: Integer; // Ñâÿçü ñ îáúåêòîì, â êîòîðîì íàõîäèòñÿ Øêàô
IDListForDesignList: Integer; // Ñâÿçü ñ ëèñòîì, â êîòîðîì íàõîäèòñÿ Øêàô
//2006_02_10
ControlComplectByProperties: Boolean;
ControlJoinByProperties: Boolean;
//2006_05_10
CADStampLang: TStampLang;
}
//tvReports.Images := TF_Main(GForm).DM.ImageList_Tree;
//tvReports.Images.Clear;
//tvReports.Images.AddImages(TF_Main(GForm).DM.ImageList_Tree);
InitRepMsgList;
rbModeView.Checked := true;
{$IF Defined(SCS_PE) or Defined(SCS_PANDUIT)}
cbShowCablePath.Checked := true;
{$IFEND}
cbCanHaveZeroPriceComponents.Checked := true;
end;
procedure TF_ResourceReport.FormDestroy(Sender: TObject);
begin
//ClearListViewObjects(lvReports);
DeactiveDataSets(Self);
Application.OnMinimize := FSavedOnAppMinimize;
Application.OnRestore := FSavedOnAppRestore;
if FFrPrintForm <> nil then
FreeAndNil(FFrPrintForm);
FormList.Free;
//FFrLocale.Free;
if FRepMsgList <> nil then
begin
FreeStringsObjects(FRepMsgList, true);
FreeAndNil(FRepMsgList);
end;
end;
procedure TF_ResourceReport.FormShow(Sender: TObject);
begin
if Not Assigned(FSavedOnAppRestore) then
FSavedOnAppRestore := Application.OnRestore;
if Not Assigned(FSavedOnAppMinimize) then
FSavedOnAppMinimize := Application.OnMinimize;
Application.OnRestore := ApplRestore;
Application.OnMinimize := ApplMinimize;
{GroupBox1.Visible := false;
Panel_RCable.Visible := false;
Panel_RResouces.Visible := false;
Panel_RDisparityCompColor.Visible := false;
}
case GFormMode of
fmRCable, fmRCableExceedLength, fmRCableCanal:
begin
case GFormMode of
// added by Toik
fmWaCoordinates :
begin
Caption := cResourceReport_Msg1_29;
end;
fmRCable:
begin
Caption := cResourceReport_Msg2_1;
//GT_RCableNameBegin.Visible := true;
//GT_RCableNameEnd.Visible := true;
//GT_RCableMaxLength.Visible := true;
end;
fmRCableExceedLength:
begin
Caption := cResourceReport_Msg2_2;
//GT_RCableNameBegin.Visible := true;
//GT_RCableNameEnd.Visible := true;
//GT_RCableMaxLength.Visible := true;
end;
fmRCableCanal:
begin
Caption := cResourceReport_Msg2_3;
//GT_RCableNameBegin.Visible := false;
//GT_RCableNameEnd.Visible := false;
//GT_RCableMaxLength.Visible := false;
end;
end;
//Panel_RCable.Visible := true;
//GT_RCablePrice.Caption := 'Öåíà çà 1ì, ' + GCurrency.Name_Brief;
//GT_RCableCost.Caption := 'Ñòîèìîñòü, ' + GCurrency.Name_Brief;
end;
fmRResources:
begin
Caption := cResourceReport_Msg2_4;
//Panel_RResouces.Visible := true;
//GT_RResourcesPrice.Caption := 'Öåíà çà 1ì, ' + GCurrency.Name_Brief;
//GT_RResourcesCost.Caption := 'Ñòîèìîñòü, ' + GCurrency.Name_Brief;
end;
fmRDisparityComponColor, fmRDisparityComponProducer:
begin
case GFormMode of
fmRDisparityComponColor:
Caption := cResourceReport_Msg2_5;
fmRDisparityComponProducer:
Caption := cResourceReport_Msg2_6;
end;
//Panel_RDisparityCompColor.Visible := True;
end;
end;
gbViewCloseResize(gbViewClose);
end;
function TF_ResourceReport.DefineCurrRecNo: Integer;
var
RecNoDelta: Integer;
begin
FOldRecNo := FCurrRecNo;
if frDBDataSet_Detail.DataSource <> nil then
begin
if frDBDataSet_Master.DataSource.DataSet.RecNo = FMasterOldRecNo then
begin
RecNoDelta := Abs(frDBDataSet_Detail.DataSource.DataSet.RecNo - FDetailOldRecNo);
if RecNoDelta > 0 then
begin
FCurrRecNo := FCurrRecNo + 1;
FDetailOldRecNo := frDBDataSet_Detail.DataSource.DataSet.RecNo;
end;
end;
end;
RecNoDelta := Abs(frDBDataSet_Master.DataSource.DataSet.RecNo - FMasterOldRecNo);
if RecNoDelta > 0 then
begin
FCurrRecNo := FCurrRecNo + 1;
FMasterOldRecNo := frDBDataSet_Master.DataSource.DataSet.RecNo;
end;
Result := FCurrRecNo;
end;
procedure TF_ResourceReport.DefineReportModeControls;
var
i: Integer;
Node: TFlyNode;
NodeObj: TObject;
begin
tvReportTarget.Columns[tciCAD].Visible := rbModePacketPrint.Checked and Not(rkMarkPages in FReportUseKind);
tvReportTarget.Columns[tciReport].Visible := (rbModePacketPrint.Checked or rbModePacketPrintToExcel.Checked);
tvReports.Columns[rciIsOn].Visible := rbModePacketPrint.Checked or rbModePacketPrintToExcel.Checked;
//tvReports.Columns[0].Visible
//*** ðàçðåøèòü îïöèè ïðîåêòà
//rbPageSizeA3.Enabled := Not rbModePacketPrint.Checked;
//rbPageSizeA4.Checked := Not rbPageSizeA3.Enabled;
gbReportMode.Visible := Not rbModePacketPrint.Checked;
DefineReportNodeControls(tvReports.Selected, false);
//*** Îïðåäåëèòü âèäèìûå âåòâè
Node := tvReportTarget.Items[0];
while Node <> nil do
begin
NodeObj := TObject(Node.Data);
if NodeObj <> nil then
if NodeObj is TSCSList then
Node.Hidden := (rbModePacketPrint.Checked = false) and (TSCSList(NodeObj).IsNormalType = false);
Node := Node.GetNext;
end;
{
for i := 0 to tvReportTarget.Items.Count - 1 do
begin
Node := tvReportTarget.Items[0];
NodeObj := TObject(Node.Data);
if NodeObj <> nil then
if NodeObj is TSCSList then
Node.Hidden := (rbModePacketPrint.Checked = false) and (TSCSList(NodeObj).IsNormalType = false);
end;}
pnPacketExportType.Enabled := rbModePacketPrintToExcel.Checked;
rbPackExportExcel.Enabled := pnPacketExportType.Enabled;
rbPackExportPdf.Enabled := pnPacketExportType.Enabled;
if Not rbModePacketPrint.Checked then
begin
end
else
begin
end;
end;
procedure TF_ResourceReport.DefineReportNodeControls(ARepNode: TFlyNode; AWithTemplateInfo: Boolean);
var
ReportItemParams: TReportItemParams;
RepNode: TFlyNode;
RepNodeParams: TReportItemParams;
//StrNode: String;
CanHaveTemplateBool: Boolean;
CanHaveStampBool: Boolean;
HaveUserTemplate: Boolean;
HaveUserStampTemplate: Boolean;
CanHaveActiveComponents: Integer;
CanHaveDismountAccount: Integer;
CanHaveZeroPriceComponents: Integer;
CanHaveStamp: Integer;
FullPathInCableJournal: Integer;
CanHaveSupplyValue: Integer;
CanRoundValue: Integer;
CanAsPlacingInProj: Integer;
CanGroupByCompType: Integer;
CanFloorNppWithRoom: Integer;
CanInTwoCopies: Integer;
CanCabinetParams: Integer;
CanResources: Integer;
CanPricePrecision: Integer;
CanKolvoPrecision: Integer;
// Added by Tolik for ExplicationComponent Report
CanShowKabinet: Integer;
CanShowObjHierarchy : Integer;
CanGroupByName : Integer;
//Added by Tolik äëÿ ñ÷åòà-ôàêòóðû
CanShowResources : Integer;
CanShowWorks : Integer;
// Added by Tolik for GOSTCableJournal
CanShowCablePaths : Integer;
//////////////////////////////////////
GroupMode: Integer;
IsPackageMode: Boolean;
ExistsActiveTemplate: Boolean;
ExistsActiveStampTemplate: Boolean;
procedure LoadRepShablonsToColumn(AReportShablons: TReportShablons; AColNumber: Integer);
var
i: Integer;
TemplateNode: TFlyNode;
begin
for i := 0 to AReportShablons.FRepShablons.Count - 1 do
begin
TemplateNode := tvReports.Columns[AColNumber].EditorStyle.Sections[0].Items.Add(nil, AReportShablons.FRepShablons[i]);
TemplateNode.Data := Pointer(AReportShablons.FRepShablons.Objects[i]);
end;
end;
procedure HandleOption(AOptionValue: Integer; ACheckBox: TObject);
var
SavedOnClick: TNotifyEvent;
begin
//24.04.2009 if (rkProject in FReportUseKind) or (rkMarkPages in FReportUseKind) then
if ACheckBox <> nil then
begin
SavedOnClick := TRzCheckBox(ACheckBox).OnClick;
TRzCheckBox(ACheckBox).OnClick := nil;
try
if ACheckBox=cbcanShowObjHierarchy then
cbCanShowObjHierarchy.Enabled:=((cbCanShowKabinet.Enabled) and (cbCanShowKabinet.Checked))
else
begin
if ACheckBox = cbAsPlacingInProj then
cbAsPlacingInProj.Enabled := not cbCanShowKabinet.Checked
else
TRzCheckBox(ACheckBox).Enabled := AOptionValue = biTrue;
if ACheckBox = cbReportWithStamp then
begin
{if cbShowCablePath.Visible then
begin
//cbShowCablePath.Enabled := not cbReportWithStamp.Checked;
cbReportWithStamp.enabled := not cbShowCablePath.checked;
end;}
if RZGroupBox3.Visible then
begin
if AOptionValue = biTrue then
begin
cbShowCablePath.Enabled := not cbReportWithStamp.Checked;
if cbShowCablePath.Enabled and cbShowCablePath.Checked then
cbReportWithStamp.Enabled := false;
end;
end;
end;
{ if ACheckBox = cbReportWithStamp then
begin
cbReportWithStamp.Enabled := not cbCanShowKabinet.Checked and not cbCanGroupByName.Checked;
if cbCanShowKabinet.Checked then
cbReportWithStamp.Checked := false;
if cbCanGroupByName.Checked then
cbReportWithStamp.Checked := false;
end }
end;
//TRzCheckBox(ACheckBox).Checked := AOptionValue = biTrue;
//TRzCheckBox(ACheckBox).Enabled := AOptionValue <> biNone;
finally
TRzCheckBox(ACheckBox).OnClick := SavedOnClick;
end;
end;
end;
begin
ReportItemParams := nil;
if ARepNode <> nil then
begin
ReportItemParams := TReportItemParams(ARepNode.Data);
end;
if ARepNode = nil then
ClearTVReportTemplates;
{StrNode := cResourceReport_Msg9;
if NewNode <> nil then
StrNode := StrNode +' '+IntToStr(NewNode.Index);
TemplateNode := tvReports.Columns[tciSimple].EditorStyle.Sections[0].Items.Add(nil, StrNode);
TemplateNode := tvReports.Columns[tciSimple].EditorStyle.Sections[0].Items.Add(nil, StrNode);
TemplateNode.Data := Pointer(10);
//*** Øàáëîí ñî øòàìïîì
TemplateNode := tvReports.Columns[tciStamp].EditorStyle.Sections[0].Items.Add(nil, cResourceReport_Msg9);
TemplateNode.Data := Pointer(10); }
CanHaveTemplateBool := true;
CanHaveStampBool := false;
HaveUserTemplate := false;
HaveUserStampTemplate := false;
ExistsActiveTemplate := false;
ExistsActiveStampTemplate := false;
CanCabinetParams := biFalse;
GroupMode := biNone;
if ReportItemParams <> nil then
begin
// added by Toilk
if ReportItemParams.RepType = rtExplicationComponent then
RzGroupBox2.Visible := true
else
RzGroupBox2.Visible := false;
if ReportItemParams.RepType = rtCommerceInvoice then
gbResources.Visible := true
else
gbResources.Visible := false;
if (ReportItemParams.RepType = rtCableJournal) or ( ReportItemParams.RepType = rtCableJournalExt) then
begin
RzGroupBox3.Enabled := true;
RzGroupBox3.Visible := true;
cbShowCablePath.Enabled := not cbReportWithStamp.Checked;
// cbReportWithStamp.Enabled := not cbShowCablePath.Checked;
if cbShowCablePath.Enabled and cbShowCablePath.Checked then
cbReportWithStamp.Enabled := false;
end
else
RzGroupBox3.Visible := false;
if ReportItemParams.RepType = rtGOSTCableJournal then
RzGroupBox3.Enabled := false;
if ((ReportItemParams.RepType = rtCableJournal) or (ReportItemParams.RepType = rtCable)) then
rgCableRate.Visible := true
else
rgCableRate.Visible := false;
//
if AWithTemplateInfo then
begin
ClearTVReportTemplates;
//*** Íàñûïàòü øàáëîíû ïðîñòûõ îò÷åòîâ â äåðåâî
LoadRepShablonsToColumn(ReportItemParams.FSimpleShablons, rciSimple);
//*** Íàñûïàòü øàáëîíû îò÷åòîâ ñî øòàìïàìè â äåðåâî
LoadRepShablonsToColumn(ReportItemParams.FStampShablons, rciStamp);
DefineReportNodeActiveShablonText(ARepNode);
end;
//*** Îïðåäåëèòü àêòèâíûå ïàðàìåòðû îò÷åòà
CanHaveActiveComponents := biFalse;
CanHaveDismountAccount := biFalse;
CanHaveZeroPriceComponents := biFalse;
CanHaveStamp := biFalse;
FullPathInCableJournal := biFalse;
CanHaveSupplyValue := biFalse;
CanRoundValue := biFalse;
CanAsPlacingInProj := biFalse;
CanGroupByCompType := biFalse;
CanResources := biFalse;
CanPricePrecision := biFalse;
CanKolvoPrecision := biFalse;
CanShowKabinet := biFalse;
CanShowObjHierarchy :=biFalse;
CanGroupByName :=biFalse;
//Added by Tolik äëÿ ñ÷åòà-ôàêòóðû
CanShowResources :=biFalse;
CanShowWorks := biFalse;
CanShowCablePaths := biTrue;
//
CanFloorNppWithRoom := biFalse;
CanInTwoCopies := biFalse;
IsPackageMode := rbModePacketPrint.Checked or rbModePacketPrintToExcel.Checked;
if Not IsPackageMode then
begin
CanHaveActiveComponents := ReportItemParams.CanHaveActiveComponents;
CanHaveDismountAccount := ReportItemParams.CanHaveDismountAccount;
CanHaveZeroPriceComponents := ReportItemParams.CanHaveZeroPriceComponents;
CanHaveStamp := ReportItemParams.CanHaveStamp;
FullPathInCableJournal := ReportItemParams.FullPathInCableJournal;
CanHaveSupplyValue := ReportItemParams.CanHaveSupplyValue;
CanRoundValue := ReportItemParams.CanRoundValue;
CanAsPlacingInProj := ReportItemParams.CanAsPlacingInProj;
CanGroupByCompType := ReportItemParams.CanGroupByCompType;
CanResources := ReportItemParams.CanResources;
CanFloorNppWithRoom := ReportItemParams.CanFloorNppWithRoom;
CanInTwoCopies := ReportItemParams.CanInTwoCopies;
CanCabinetParams := ReportItemParams.CanCabinetParams;
CanPricePrecision := ReportItemParams.CanPricePrecision;
CanKolvoPrecision := ReportItemParams.CanKolvoPrecision;
// added by Tolik for ExplicationComponent Report
CanShowKabinet := ReportItemParams.CanShowKabinet;
CanShowObjHierarchy :=ReportItemParams.CanShowObjHierarchy;
CanGroupByName :=ReportItemParams.CanGroupByName;
//////////////////////////
//Added by Tolik äëÿ ñ÷åòà-ôàêòóðû
CanShowResources := ReportItemParams.CanShowResources;
CanShowWorks := ReportItemParams.CanShowWorks;
GroupMode := ReportItemParams.GroupMode;
end
else
begin
RepNode := tvReports.Items[0];
while RepNode <> nil do
begin
if Not RepNode.Hidden then
if RepNode.Cells[rciIsOn] = bsTrue then
begin
RepNodeParams := TReportItemParams(RepNode.Data);
if RepNodeParams.CanHaveActiveComponents = biTrue then
CanHaveActiveComponents := biTrue;
// Added by Tolik
if RepNodeParams.CanShowKabinet = biTrue then
CanShowKabinet := biTrue;
if RepNodeParams.CanShowObjHierarchy = biTrue then
if (cbCanShowObjHierarchy.Checked and cbCanShowObjHierarchy.Enabled) then
CanShowObjHierarchy := biTrue
else CanShowObjHierarchy := biFalse;
if RepNodeParams.CanGroupByName = biTrue then
CanGroupByName := biTrue;
if RepNodeParams.CanShowResources = biTrue then
CanShowResources := biTrue;
if RepNodeParams.CanShowWorks = biTrue then
CanShowWorks := biTrue;
///////////////////////////////////////////////
if RepNodeParams.CanHaveDismountAccount = biTrue then
CanHaveDismountAccount := biTrue;
if RepNodeParams.CanHaveZeroPriceComponents = biTrue then
CanHaveZeroPriceComponents := biTrue;
if RepNodeParams.CanHaveStamp = biTrue then
begin
if RzGroupBox3.Visible then
begin
if cbShowCablePath.Checked then
CanHaveStamp := biFalse
else
CanHaveStamp := biTrue
end
else
CanHaveStamp := biTrue
end;
if RepNodeParams.FullPathInCableJournal = biTrue then
FullPathInCableJournal := biTrue;
if RepNodeParams.CanHaveSupplyValue = biTrue then
CanHaveSupplyValue := biTrue;
if RepNodeParams.CanRoundValue = biTrue then
CanRoundValue := biTrue;
if RepNodeParams.CanAsPlacingInProj = biTrue then
CanAsPlacingInProj := biTrue;
if RepNodeParams.CanGroupByCompType = biTrue then
CanGroupByCompType := biTrue;
if RepNodeParams.CanResources = biTrue then
CanResources := biTrue;
if RepNodeParams.CanFloorNppWithRoom = biTrue then
CanFloorNppWithRoom := biTrue;
if RepNodeParams.CanInTwoCopies = biTrue then
CanInTwoCopies := biTrue;
if RepNodeParams.CanCabinetParams = biTrue then
CanCabinetParams := biTrue;
if RepNodeParams.CanPricePrecision = biTrue then
CanPricePrecision := biTrue;
if RepNodeParams.CanKolvoPrecision = biTrue then
CanKolvoPrecision := biTrue;
if RepNodeParams.GroupMode <> biNone then
GroupMode := ReportItemParams.GroupMode;
end;
RepNode := RepNode.GetNext;
end;
end;
HandleOption(CanHaveActiveComponents, FcbCanHaveActiveComponentsCurr);
HandleOption(CanHaveDismountAccount, FcbCanHaveDismountAccountCurr);
HandleOption(CanHaveZeroPriceComponents, cbCanHaveZeroPriceComponents);
HandleOption(CanHaveStamp, cbReportWithStamp);
HandleOption(FullPathInCableJournal, cbFullPathInCableJournal);
HandleOption(CanHaveSupplyValue, cbCanHaveSupplyValue);
HandleOption(CanRoundValue, cbCanRoundValue);
HandleOption(CanAsPlacingInProj, cbAsPlacingInProj);
HandleOption(CanGroupByCompType, cbGroupByCompType);
HandleOption(CanResources, cbCanResources);
// added by Tolik for ExplicationComponent Report
HandleOption(CanShowKabinet, cbCanShowKabinet);
HandleOption(CanShowObjHierarchy,cbCanShowObjHierarchy);
HandleOption(CanGroupByName,cbCanGroupByName);
/////////
//Added by Tolik äëÿ ñ÷åòà-ôàêòóðû
HandleOption(CanShowResources,cbCanShowResources);
HandleOption(CanShowWorks,cbCanShowWorks);
//
HandleOption(CanFloorNppWithRoom, cbFloorNppWithRoom);
HandleOption(CanInTwoCopies, cbInTwoCopies);
gbReportMode.Enabled := (ReportItemParams.CanHaveFormMode = biTrue) and rbModeView.Checked;
//gbPageSize.Enabled := (ReportItemParams.CanHavePageSize = biTrue) and (Not IsPackageMode);
gbPageSize.Enabled := (ReportItemParams.CanHavePageSize = biTrue) and rbModeView.Checked;
gbValues.Enabled := (Not rbModeView.Checked) or (ReportItemParams.CanHaveFormMode = biFalse) or rbRepModeDocument.Checked;
gbGroupType.Enabled := GroupMode <> biNone;
CanHaveStampBool := CanHaveStamp = biTrue;
CanHaveTemplateBool := ReportItemParams.CanHaveTemplate = biTrue;
HaveUserTemplate := ReportItemParams.FSimpleShablons.FActiveShablonID > 0;
HaveUserStampTemplate := ReportItemParams.FStampShablons.FActiveShablonID > 0;
ExistsActiveTemplate := ReportItemParams.FSimpleShablons.FActiveShablonID <> -1;
ExistsActiveStampTemplate := ReportItemParams.FStampShablons.FActiveShablonID <> -1;
{HandleOption(ReportItemParams.CanHaveActiveComponents, cbCanHaveActiveComponents);
HandleOption(ReportItemParams.CanHaveDismountAccount, cbCanHaveDismountAccount);
HandleOption(ReportItemParams.CanHaveZeroPriceComponents, cbCanHaveZeroPriceComponents);
HandleOption(ReportItemParams.CanHaveStamp, cbReportWithStamp);
HandleOption(ReportItemParams.FullPathInCableJournal, cbFullPathInCableJournal);
gbReportMode.Enabled := ReportItemParams.CanHaveFormMode = biTrue;
gbPageSize.Enabled := ReportItemParams.CanHavePageSize = biTrue;
CanHaveStampBool := ReportItemParams.CanHaveStamp = biTrue;
HaveUserTemplate := ReportItemParams.FSimpleShablons.FActiveShablonID <> 0;
HaveUserStampTemplate := ReportItemParams.FStampShablons.FActiveShablonID <> 0;}
end
else
begin
HandleOption(biNone, FcbCanHaveActiveComponentsCurr);
HandleOption(biNone, FcbCanHaveDismountAccountCurr);
HandleOption(biNone, cbCanHaveZeroPriceComponents);
HandleOption(biNone, cbReportWithStamp);
HandleOption(biNone, cbFullPathInCableJournal);
HandleOption(biNone, cbCanHaveSupplyValue);
HandleOption(biNone, cbCanRoundValue);
HandleOption(biNone, cbAsPlacingInProj);
HandleOption(biNone, cbGroupByCompType);
HandleOption(biNone, cbCanResources);
HandleOption(biNone, cbFloorNppWithRoom);
HandleOption(biNone, cbInTwoCopies);
HandleOption(biNone, cbCanShowKabinet);
HandleOption(biNone, cbCanshowObjHierarchy);
HandleOption(biNone, cbCanGroupByName);
HandleOption(biNone, cbCanShowResources);
HandleOption(biNone, cbCanShowWorks);
gbReportMode.Enabled := false;
gbPageSize.Enabled := false;
gbGroupType.Enabled := false;
//rbGroupByComponType.Checked := GroupMode = gmComponType;
//rbGroupByGroupName.Checked := GroupMode = gmGroupName;
end;
// Ñâîéñòâà Îòîáðàæåíèå êàáèíåòîâ
gbNoCabinetNameShort.Enabled := CanCabinetParams = biTrue;
lbNoCabinet.Enabled := CanCabinetParams = biTrue;
edNoCabinet.Enabled := CanCabinetParams = biTrue;
nePricePrecision.Enabled := CanPricePrecision = biTrue;
neKolvoPrecision.Enabled := CanKolvoPrecision = biTrue;
//*** Øàáëîí ñî øòàìïîì
tvReports.Columns[rciSimple].ReadOnly := Not ExistsActiveTemplate;
tvReports.Columns[rciStamp].ReadOnly := (CanHaveStampBool = False) or Not ExistsActiveStampTemplate;
Act_NewSimpleTemplateFromStandart.Enabled := CanHaveTemplateBool; //true;
Act_NewSimpleTemplateFromUser.Enabled := HaveUserTemplate;
Act_NewStampTemplateFromStandart.Enabled := CanHaveStampBool;
Act_NewStampTemplateFromUser.Enabled := CanHaveStampBool and HaveUserStampTemplate;
Act_NewMarkPageFromUser.Enabled := ExistsActiveTemplate;
Act_ExportSimpleTemplateToFile.Enabled := HaveUserTemplate;
Act_ExportStampTemplateToFile.Enabled := HaveUserStampTemplate;
Act_EditSimpleTemplate.Enabled := HaveUserTemplate;
Act_EditStampTemplate.Enabled := HaveUserStampTemplate;
Act_DeleteSimpleTemplate.Enabled := HaveUserTemplate;
Act_DeleteStampTemplate.Enabled := HaveUserStampTemplate;
btExportTemplateToFile.Enabled := ExistsActiveTemplate or Not (rkMarkPages in FReportUseKind);
Act_ImportTemplateFromFile.Enabled := CanHaveTemplateBool;
btEditTemplate.Enabled := ExistsActiveTemplate or Not (rkMarkPages in FReportUseKind);
btDelTemplate.Enabled := ExistsActiveTemplate or Not (rkMarkPages in FReportUseKind);
Act_ExportTemplateToFile.Enabled := btExportTemplateToFile.Enabled;
Act_EditTemplate.Enabled := btEditTemplate.Enabled;
Act_DeleteTemplate.Enabled := btDelTemplate.Enabled;
Act_EditReportSortInfo.Enabled := (ReportItemParams <> nil) and (ReportItemParams.FReportSortInfo.FAllFieldNames.Count > 0);
Act_ExportToBc3.Visible := (ReportItemParams <> nil) and (ReportItemParams.Mode = fmCommerceInvoice);
end;
procedure TF_ResourceReport.DefineReportNodeActiveShablonText(ARepNode: TFlyNode);
var
ReportItemParams: TReportItemParams;
begin
ReportItemParams := nil;
if (ARepNode <> nil) and (ARepNode.Data <> nil) then
ReportItemParams := ARepNode.Data;
if ReportItemParams <> nil then
begin
ARepNode.Cells[rciSimple] := ReportItemParams.FSimpleShablons.GetActiveShablonName;
ARepNode.Cells[rciStamp] := ReportItemParams.FStampShablons.GetActiveShablonName;
end;
end;
procedure TF_ResourceReport.AddSortFieldsToReportItemParams(AReportItemParams: TReportItemParams);
function GetCaptFrom(ACaptCode: String): String;
var
Res: Variant;
begin
Result := '';
ReportUserFunction('GETCAPT', ACaptCode, '', '', Res);
if Res <> null then
Result := Res;
end;
begin
if AReportItemParams <> nil then
case AReportItemParams.RepType of
rtResources:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnName, cRepMsg06);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnArticulProducer, cRepMsg48);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnArticulDistributor, cRepMsg49);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnProducerName, cRepMsg50);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnIzm, cRepMsg26);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnKolvo, cRepMsg51);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPrice, cRepMsg30);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCost, cRepMsg31);
end;
rtCable:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnName, cRepMsg06); //NAME
AReportItemParams.FReportSortInfo.AddFieldInfo(fnIzm, cRepMsg26); //UOM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnMarkID, cRepMsg163);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameBeginFull, cRepMsg38); //CONNECTBEGINSH
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameEndFull, cRepMsg39); //CONNECTENDSH
AReportItemParams.FReportSortInfo.AddFieldInfo(fnLength, cRepMsg154); //LENGTH
AReportItemParams.FReportSortInfo.AddFieldInfo(fnLengthReserv, cRepMsg155); //RESERVE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPrice, cRepMsg30); //PRICE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCost, cRepMsg31); //COST
end;
rtCableCanal:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnName, cRepMsg06); //NAME
AReportItemParams.FReportSortInfo.AddFieldInfo(fnIzm, cRepMsg26); //UOM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnMarkID, cRepMsg163);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnFilling, cRepMsg27); //FULLNESSPERC
AReportItemParams.FReportSortInfo.AddFieldInfo(fnLength, cRepMsg154); //LENGTH
AReportItemParams.FReportSortInfo.AddFieldInfo(fnLengthReserv, cRepMsg155); //RESERVE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPrice, cRepMsg30); //PRICE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCost, cRepMsg31); //COST
end;
rtCableJournal:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameList, cRepMsg83); //ROOM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameCable, cRepMsg84); //CABLE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnIzm, cRepMsg26); //UOM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnMarkID, cRepMsg163);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCategory, cRepMsg85); //CATEGORY
AReportItemParams.FReportSortInfo.AddFieldInfo(fnLength, cRepMsg154); //LENGTH
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameFrom, cRepMsg86+'.'+cRepMsg88); //FROM WORKPLACE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPortNameFrom, cRepMsg86+'.'+cRepMsg89); //FROM PORT
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPortTypeFrom, cRepMsg86+'.'+cRepMsg90); //FROM TYPE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameTo, cRepMsg87+'.'+cRepMsg88); //TO WORKPLACE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPortNameTo, cRepMsg87+'.'+cRepMsg89); //TO PORT
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPortTypeTo, cRepMsg87+'.'+cRepMsg90); //TO TYPE
end;
rtCableJournalExt:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNumCable, cRepMsg58); //NUMCABLE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCableData, cRepMsg59); //CABLEDATA
AReportItemParams.FReportSortInfo.AddFieldInfo(fnIzm, cRepMsg26); //UOM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnFromBuilding, cRepMsg61+'.'+cRepMsg63); //GOFROM BUILDING
AReportItemParams.FReportSortInfo.AddFieldInfo(fnFromDevice+';'+fnFromDeviceSecond+';'+fnFromDeviceThird+';'+fnFromDeviceFourth, cRepMsg61+'.'+cRepMsg64); //GOFROM DEVICE_RACK
AReportItemParams.FReportSortInfo.AddFieldInfo(fnFromElement, cRepMsg61+'.'+cRepMsg65); //GOFROM ELEMENT_PANEL
AReportItemParams.FReportSortInfo.AddFieldInfo(fnToBuilding, cRepMsg62+'.'+cRepMsg63); //GOWHERE BUILDING
AReportItemParams.FReportSortInfo.AddFieldInfo(fnToDevice+';'+fnToDeviceSecond+';'+fnToDeviceThird+';'+fnToDeviceFourth, cRepMsg62+'.'+cRepMsg64); //GOWHERE DEVICE_RACK
AReportItemParams.FReportSortInfo.AddFieldInfo(fnToElement, cRepMsg62+'.'+cRepMsg65); //GOWHERE ELEMENT_PANEL
AReportItemParams.FReportSortInfo.AddFieldInfo(fnTraceCabling, cRepMsg70); //CABLINGTRACE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnSign, cRepMsg07); //INDICATION
AReportItemParams.FReportSortInfo.AddFieldInfo(fnKolvo, cRepMsg51); //QUANTITY
AReportItemParams.FReportSortInfo.AddFieldInfo(fnDiameter, cRepMsg156); //CABLEDIAMETER
AReportItemParams.FReportSortInfo.AddFieldInfo(fnLength, cRepMsg157+' '+cRepMsg158); //CABLELEN BUILDING_S
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNote, cRepMsg74); //NOTE
end;
rtSpecification:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameShort, cRepMsg07); //INDICATION
AReportItemParams.FReportSortInfo.AddFieldInfo(fnName, cRepMsg06); //NAME
AReportItemParams.FReportSortInfo.AddFieldInfo(fnArticulProducer, cRepMsg48); //PRODMARKNUMSH
AReportItemParams.FReportSortInfo.AddFieldInfo(fnArticulDistributor, cRepMsg49); //DISTRIBMARKNUMSH
AReportItemParams.FReportSortInfo.AddFieldInfo(fnProducerName, cRepMsg94); //VENDOR
AReportItemParams.FReportSortInfo.AddFieldInfo(fnIzm, cRepMsg26); //UOM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnKolvo, cRepMsg51); //QUANTITY
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPrice, cRepMsg30); //PRICEWITHVAT
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCost, cRepMsg31); //COSTWITHVAT
end;
rtGOSTSpecification:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnName, cRepMsg06); //NAME
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameShort, cRepMsg103); //DOCTYPEMARKINDICAT
AReportItemParams.FReportSortInfo.AddFieldInfo(fnArticulProducer, cRepMsg104); // CODEOFEQUIPMMATERIAL
AReportItemParams.FReportSortInfo.AddFieldInfo(fnProducerName, cRepMsg105); //FACTORYPRODUCER
AReportItemParams.FReportSortInfo.AddFieldInfo(fnIzm, cRepMsg106); //UNITOFMEASURE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnKolvo, cRepMsg51); //QUANTITY
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNotice, cRepMsg74); //NOTE
end;
rtNorms:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCypher, cRepMsg45); //CODE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnName, cRepMsg06); //NAME
AReportItemParams.FReportSortInfo.AddFieldInfo(fnIzm, cRepMsg26); //UOM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnExpense, cRepMsg46); //VOLUME
end;
rtExplanatoryReport:
begin
end;
rtLegendObjectIcons:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnName, cRepMsg06); //NAME
end;
rtGOSTCableJournal:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameMark, cRepMsg58); //AReportItemParams.FReportSortInfo.AddFieldInfo(fnMarkID, cRepMsg58); //NUMCABLE //AReportItemParams.FReportSortInfo.AddFieldInfo(fnMarkID, cRepMsg58); //NUMCABLE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnComponentIndex, cResourceReport_Msg42); // èíäåêñ êàáåëÿ
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameCable, cRepMsg77); //CABLETYPE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameTo, cRepMsg78); //NUMSWITCHBOARD
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPortNameTo, cRepMsg79); //NUMSWITCHBOARDPORT
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameList, cRepMsg80); //COMESFROM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameFrom, cRepMsg81); //NUMOUTLETORSWITCHBOARD
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPortNameFrom, cRepMsg82); //NUMOUTLETORSWITCHBOARDPORT
end;
rtPriorCostOfProject:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnName, cRepMsg06); //NAME
AReportItemParams.FReportSortInfo.AddFieldInfo(fnArticul, cRepMsg161); //ARTICUL
AReportItemParams.FReportSortInfo.AddFieldInfo(fnKolvo, cRepMsg51); //QUANTITY
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPrice, cRepMsg30); //PRICE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCost, cRepMsg31); //COST
end;
rtCommerceInvoice:
begin
end;
rtMarkRoomTS: RzGroupBox2.Visible:=false;
rtMarkPathPanel: RzGroupBox2.Visible:=false;
rtMarkPathPanelPorts: RzGroupBox2.Visible:=false;
rtMarkSocket: RzGroupBox2.Visible:=false;
rtMarkSocketPanel: RzGroupBox2.Visible:=false;
rtMarkCable: RzGroupBox2.Visible:=false;
rtExplicationRoom:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnRoomNum, cRepMsg128); //ROOMNUM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameShort, cRepMsg07); //INDICATION
AReportItemParams.FReportSortInfo.AddFieldInfo(fnAppointmentRoom, cRepMsg129); //APPOINTMENTROOM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnSquareInside, cRepMsg130); //SQUAREINSIDE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnHeightRoom, cRepMsg138); //HEIGHT
end;
rtExplicationComponent:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnFloor, cRepMsg126); //FLOOR
AReportItemParams.FReportSortInfo.AddFieldInfo(fnRoomNum, cRepMsg128); //ROOMNUM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnMarkID, cRepMsg141); //COMPONNUM
AReportItemParams.FReportSortInfo.AddFieldInfo(fnName, cRepMsg06); //NAME
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameMark, cRepMsg142); //NAMEMARK
end;
rtCrossJournal, rtGOSTCrossJournal:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameList+';'+fnRoomNum, cRepMsg80); //COMESFROM
//05.02.2011 AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameFrom, cRepMsg81); //NUMOUTLETORSWITCHBOARD
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNumFrom, cRepMsg81); //NUMOUTLETORSWITCHBOARD
//05.02.2011 AReportItemParams.FReportSortInfo.AddFieldInfo(fnNameTo, cRepMsg78); //NUMSWITCHBOARD
AReportItemParams.FReportSortInfo.AddFieldInfo(fnNumTo, cRepMsg78); //NUMSWITCHBOARD
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPortNameTo, cRepMsg79); //NUMSWITCHBOARDPORT
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCableNameShort, cRepMsg77); //CABLETYPE
//05.02.2011 AReportItemParams.FReportSortInfo.AddFieldInfo(fnCableNameMark, cRepMsg58); //NUMCABLE
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCableNum, cRepMsg58); //05.02.2011 NUMCABLE
end;
rtHouse:
begin
AReportItemParams.FReportSortInfo.AddFieldInfo(fnName, cRepMsg06);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnMarkID, cRepMsg141);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnBoxInstalled, cRepMsg186);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnPresencePower200WFromNetwork, cRepMsg187);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnCableSetToBox, cRepMsg188);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnFiberOpticWelded, cRepMsg189);
AReportItemParams.FReportSortInfo.AddFieldInfo(fnEquipmentInstalled, cRepMsg190);
end;
rtDefectAct:
begin
end;
end;
end;
procedure TF_ResourceReport.CorrectReport(AResourceReportFormMode: TResourceReportFormMode);
var
i, j: Integer;
FrPage: TfrPage;
FrObject: TObject;
FrView: TfrView;
//FrMemoView: TfrMemoView;
//frBandView: TfrBandView;
FracDelimetrCode: Integer;
begin
for i := 0 to Report.Pages.Count - 1 do
begin
FrPage := Report.Pages[i];
for j := 0 to FrPage.Objects.Count - 1 do
begin
FrObject := TObject(FrPage.Objects[j]);
if FrObject is TFrView then
begin
FrView := TfrView(FrObject);
case AResourceReportFormMode of
fmRCableCanal:
begin
ReplaceTextInStringList('MemTable_RCableGroup', 'FmtCableChannelGrp', FrView.Memo, true);
ReplaceTextInStringList('MemTable_RCableGroup', 'FmtCableChannelGrp', FrView.Script, true);
ReplaceTextInStringList('MemTable_RCable', 'FmtCableChannel', FrView.Memo, true);
ReplaceTextInStringList('MemTable_RCable', 'FmtCableChannel', FrView.Script, true);
end;
fmRGOSTCableJournal:
begin
ReplaceTextInStringList(fnMarkID, fnNameMark, FrView.Memo, true);
ReplaceTextInStringList(fnMarkID, fnNameMark, FrView.Script, true);
end;
fmRCrossJournal, fmRGOSTCrossJournal:
begin
ReplaceTextInStringList('mtReport', 'FmtCrossJournal', FrView.Memo, true);
ReplaceTextInStringList('mtReport', 'FmtCrossJournal', FrView.Script, true);
end;
fmRExplicationRoom:
begin
ReplaceTextInStringList('mtReport', 'FmtExplicationRoom', FrView.Memo, true);
ReplaceTextInStringList('mtReport', 'FmtExplicationRoom', FrView.Script, true);
ReplaceTextInStringList('mtReportDetail', 'FmtExplicationRoomDetail', FrView.Memo, true);
ReplaceTextInStringList('mtReportDetail', 'FmtExplicationRoomDetail', FrView.Script, true);
end;
fmRExplicationComponent:
begin
ReplaceTextInStringList('mtReport', 'FmtExplicationCompon', FrView.Memo, true);
ReplaceTextInStringList('mtReport', 'FmtExplicationCompon', FrView.Script, true);
ReplaceTextInStringList('mtReportDetail', 'FmtExplicationComponDetail', FrView.Memo, true);
ReplaceTextInStringList('mtReportDetail', 'FmtExplicationComponDetail', FrView.Script, true);
ReplaceTextInStringList('mtReportSubDetail', 'FmtExplicationComponSubDetail', FrView.Memo, true);
ReplaceTextInStringList('mtReportSubDetail', 'FmtExplicationComponSubDetail', FrView.Script, true);
end;
fmRMarkRoomTS:
begin
ReplaceTextInStringList('mtReport', 'FmtMarkRoomTS', FrView.Memo, true);
ReplaceTextInStringList('mtReport', 'FmtMarkRoomTS', FrView.Script, true);
end;
fmRMarkPathPanel:
begin
ReplaceTextInStringList('mtReport', 'FmtMarkPathPanel', FrView.Memo, true);
ReplaceTextInStringList('mtReport', 'FmtMarkPathPanel', FrView.Script, true);
end;
fmRMarkPathPanelPorts:
begin
ReplaceTextInStringList('mtReport', 'FmtMarkPathPanelPorts', FrView.Memo, true);
ReplaceTextInStringList('mtReport', 'FmtMarkPathPanelPorts', FrView.Script, true);
end;
fmRMarkSocket:
begin
ReplaceTextInStringList('mtReport', 'FmtMarkSocket', FrView.Memo, true);
ReplaceTextInStringList('mtReport', 'FmtMarkSocket', FrView.Script, true);
end;
fmRMarkSocketPanel:
begin
ReplaceTextInStringList('mtReport', 'FmtMarkSocketPanel', FrView.Memo, true);
ReplaceTextInStringList('mtReport', 'FmtMarkSocketPanel', FrView.Script, true);
end;
fmRMarkCable:
begin
ReplaceTextInStringList('mtReport', 'FmtMarkCable', FrView.Memo, true);
ReplaceTextInStringList('mtReport', 'FmtMarkCable', FrView.Script, true);
end;
{fmCommerceInvoice:
begin
end;}
end;
end;
end;
end;
end;
procedure TF_ResourceReport.ClearTVReportTemplates;
begin
//*** Øàáëîí
tvReports.Columns[rciSimple].EditorStyle.Sections[0].Items.Clear;
//*** Øàáëîí ñî øòàìïîì
tvReports.Columns[rciStamp].EditorStyle.Sections[0].Items.Clear;
end;
procedure TF_ResourceReport.CreateControls;
begin
try
// Âåäîìîñòü êàáåëåé
MemTable_RCable.FieldDefs.Clear;
MemTable_RCable.FieldDefs.Add(fnID, ftInteger);
MemTable_RCable.FieldDefs.Add(fnName, ftString, 255);
MemTable_RCable.FieldDefs.Add(fnNameSimple, ftString, 255);
MemTable_RCable.FieldDefs.Add(fnNameMark, ftString, 255);
MemTable_RCable.FieldDefs.Add(fnMarkID, ftInteger);
MemTable_RCable.FieldDefs.Add(fnIzm, ftString, 20);
MemTable_RCable.FieldDefs.Add(fnNameBegin, ftString, 255);
MemTable_RCable.FieldDefs.Add(fnNameBeginCompon, ftString, 255);
MemTable_RCable.FieldDefs.Add(fnNameBeginFull, ftString, 255);
MemTable_RCable.FieldDefs.Add(fnNameEnd, ftString, 255);
MemTable_RCable.FieldDefs.Add(fnNameEndCompon, ftString, 255);
MemTable_RCable.FieldDefs.Add(fnNameEndFull, ftString, 255);
MemTable_RCable.FieldDefs.Add(fnFilling, ftFloat);
MemTable_RCable.FieldDefs.Add(fnLength, ftFloat);
MemTable_RCable.FieldDefs.Add(fnLengthReserv, ftFloat);
MemTable_RCable.FieldDefs.Add(fnMaxLength, ftFloat);
MemTable_RCable.FieldDefs.Add(fnPrice, ftFloat);
MemTable_RCable.FieldDefs.Add(fnCost, ftFloat);
MemTable_RCable.FieldDefs.Add(fnExceedLength, ftBoolean);
MemTable_RCable.FieldDefs.Add(fnIDGroup, ftInteger);
MemTable_RCable.FieldDefs.Add(fnReelName, ftString, 255);
//24.09.2010
MemTable_RNorms.FieldDefs.Clear;
MemTable_RNorms.FieldDefs.Add(fnCypher, ftString, 255);
MemTable_RNorms.FieldDefs.Add(fnName, ftString, 255);
MemTable_RNorms.FieldDefs.Add(fnExpense, ftFloat); // Îáúåì/ðàñõîä
MemTable_RNorms.FieldDefs.Add(fnIzm, ftString, 255);
MemTable_RNorms.FieldDefs.Add(fnPrice, ftFloat); // Öåíà
MemTable_RNorms.FieldDefs.Add(fnTotalCost, ftFloat); // Ñòîèìîñòü
//19.11.2013
MemTable_RNorms.FieldDefs.Add(fnLaborTime, ftString, 255); // Âðåìÿ âûïîëíåíèÿ ðàáîòû (èç ÍÁ)
MemTable_RNorms.FieldDefs.Add(fnPricePerTime, ftFloat); // Âðåìÿ âûïîëíåíèÿ ðàáîòû (èç ÍÁ)
MemTable_RNorms.FieldDefs.Add(fnTotalLaborTime, ftString, 255); // Âðåìÿ âûïîëíåíèÿ ðàáîòû
// Äëÿ êàá êàíàëîâ
FmtCableChannelGrp := TkbmMemTable.Create(Self);
FmtCableChannelGrp.Name := 'FmtCableChannelGrp';
//FmtCableChannelGrp.FieldDefs.Assign(MemTable_RCableGroup.FieldDefs);
FmtCableChannelGrp.FieldDefs.Add(fnID, ftAutoInc);
FmtCableChannelGrp.FieldDefs.Add(fnGUID, ftString, cnstGUIDLength);
FmtCableChannelGrp.FieldDefs.Add(fnName, ftString, 255);
FmtCableChannelGrp.FieldDefs.Add(fnLength, ftFloat);
FmtCableChannelGrp.FieldDefs.Add(fnLengthReserv, ftFloat);
FmtCableChannelGrp.FieldDefs.Add(fnCost, ftFloat);
FmtCableChannel := TkbmMemTable.Create(Self);
FmtCableChannel.Name := 'FmtCableChannel';
FmtCableChannel.FieldDefs.Assign(MemTable_RCable.FieldDefs);
FdsrcCableChannelGrp := TDataSource.Create(Self);
FdsrcCableChannelGrp.Name := 'FdsrcCableChannelGrp';
FdsrcCableChannelGrp.DataSet := FmtCableChannelGrp;
FdsrcCableChannel := TDataSource.Create(Self);
FdsrcCableChannel.Name := 'FdsrcCableChannel';
FdsrcCableChannel.DataSet := FmtCableChannel;
// äëÿ Êðîññîâîãî æóðíàëà
FmtCrossJournal := TkbmMemTable.Create(Self);
FmtCrossJournal.Name := 'FmtCrossJournal';
FdsrcCrossJournal := TDataSource.Create(Self);
FdsrcCrossJournal.Name := 'FdsrcCrossJournal';
FdsrcCrossJournal.DataSet := FmtCrossJournal;
// Ýêñïëèêàöèÿ êàáèíåòîâ
FmtExplicationRoom := TkbmMemTable.Create(Self);
FmtExplicationRoom.Name := 'FmtExplicationRoom';
FdsrcExplicationRoom := TDataSource.Create(Self);
FdsrcExplicationRoom.Name := 'FdsrcExplicationRoom';
FdsrcExplicationRoom.DataSet := FmtExplicationRoom;
FmtExplicationRoomDetail := TkbmMemTable.Create(Self);
FmtExplicationRoomDetail.Name := 'FmtExplicationRoomDetail';
FdsrcExplicationRoomDetail := TDataSource.Create(Self);
FdsrcExplicationRoomDetail.Name := 'FdsrcExplicationRoomDetail';
FdsrcExplicationRoomDetail.DataSet := FmtExplicationRoomDetail;
// Ýêñïëèêàöèÿ êîìïîíåíòîâ
FmtExplicationCompon := TkbmMemTable.Create(Self);
FmtExplicationCompon.Name := 'FmtExplicationCompon';
FdsrcExplicationCompon := TDataSource.Create(Self);
FdsrcExplicationCompon.Name := 'FdsrcExplicationCompon';
FdsrcExplicationCompon.DataSet := FmtExplicationCompon;
FmtExplicationComponDetail := TkbmMemTable.Create(Self);
FmtExplicationComponDetail.Name := 'FmtExplicationComponDetail';
FdsrcExplicationComponDetail := TDataSource.Create(Self);
FdsrcExplicationComponDetail.Name := 'FdsrcExplicationComponDetail';
FdsrcExplicationComponDetail.DataSet := FmtExplicationComponDetail;
FmtExplicationComponSubDetail := TkbmMemTable.Create(Self);
FmtExplicationComponSubDetail.Name := 'FmtExplicationComponSubDetail';
FdsrcExplicationComponSubDetail := TDataSource.Create(Self);
FdsrcExplicationComponSubDetail.Name := 'FdsrcExplicationComponSubDetail';
FdsrcExplicationComponSubDetail.DataSet := FmtExplicationComponSubDetail;
// Äîì.ïîäúåçä
FmtHouse := TkbmMemTable.Create(Self);
FmtHouse.Name := 'FmtHouse';
FdsrcHouse := TDataSource.Create(Self);
FdsrcHouse.Name := 'FdsrcHouse';
FdsrcHouse.DataSet := FmtHouse;
FmtApproach := TkbmMemTable.Create(Self);
FmtApproach.Name := 'FmtApproach';
FdsrcApproach := TDataSource.Create(Self);
FdsrcApproach.Name := 'FdsrcApproach';
FdsrcApproach.DataSet := FmtApproach;
FmtHouse.FieldDefs.Add(fnID, ftInteger);
FmtHouse.FieldDefs.Add(fnName, ftString, 255);
FmtHouse.FieldDefs.Add(fnMarkID, ftInteger);
FmtHouse.FieldDefs.Add(fnCooperative, ftString, 255);
FmtHouse.FieldDefs.Add(fnHEO, ftString, 255);
FmtHouse.FieldDefs.Add(fnAgreed, ftInteger);
FmtApproach.FieldDefs.Add(fnID, ftInteger);
FmtApproach.FieldDefs.Add(fnIDComponent, ftInteger);
FmtApproach.FieldDefs.Add(fnName, ftString, 255);
FmtApproach.FieldDefs.Add(fnMarkID, ftInteger);
FmtApproach.FieldDefs.Add(fnBoxInstalled, ftInteger);
FmtApproach.FieldDefs.Add(fnPresencePower200WFromNetwork, ftInteger);
FmtApproach.FieldDefs.Add(fnCableSetToBox, ftInteger);
FmtApproach.FieldDefs.Add(fnFiberOpticWelded, ftInteger);
FmtApproach.FieldDefs.Add(fnEquipmentInstalled, ftInteger);
// Äåôåêòíûé àêò
FmtDefectAct := TkbmMemTable.Create(Self);
FmtDefectAct.Name := 'FmtDefectAct';
FdsrcDefectAct := TDataSource.Create(Self);
FdsrcDefectAct.Name := 'FdsrcDefectAct';
FdsrcDefectAct.DataSet := FmtDefectAct;
FmtDefectAct.FieldDefs.Add(fnName, ftString, 255);
FmtDefectAct.FieldDefs.Add(fnFindDefectChecked, ftBoolean);
FmtDefectAct.FieldDefs.Add(fnFindDefectAdress, ftMemo);
FmtDefectAct.FieldDefs.Add(fnFindDefectDescription, ftMemo);
FmtDefectAct.FieldDefs.Add(fnLinkTransportChecked, ftBoolean);
FmtDefectAct.FieldDefs.Add(fnLinkTransportPointA, ftMemo);
FmtDefectAct.FieldDefs.Add(fnLinkTransportPointB, ftMemo);
FmtDefectAct.FieldDefs.Add(fnLinkTransportCable, ftFloat);
FmtDefectAct.FieldDefs.Add(fnLinkTransportMaterials, ftMemo);
FmtDefectAct.FieldDefs.Add(fnSetEquipmentChecked, ftBoolean);
FmtDefectAct.FieldDefs.Add(fnSetEquipmentAddress, ftMemo);
FmtDefectAct.FieldDefs.Add(fnSetEquipmentEqipm, ftMemo);
FmtDefectAct.FieldDefs.Add(fnSetEquipmentMaterial, ftMemo);
FmtDefectAct.FieldDefs.Add(fnMoveEquipmentChecked, ftBoolean);
FmtDefectAct.FieldDefs.Add(fnMoveEquipmentPointA, ftMemo);
FmtDefectAct.FieldDefs.Add(fnMoveEquipmentPointB, ftMemo);
FmtDefectAct.FieldDefs.Add(fnMoveEquipmentEqipm, ftMemo);
FmtDefectAct.FieldDefs.Add(fnMoveEquipmentMaterial, ftMemo);
FmtDefectAct.FieldDefs.Add(fnContractorName, ftMemo);
FmtDefectAct.FieldDefs.Add(fnDateGetting, ftDateTime);
FmtDefectAct.FieldDefs.Add(fnDateExecution, ftDateTime);
// Ìàðêèðîâî÷íûå ëèñòû
FmtMarkRoomTS := TkbmMemTable.Create(Self);
FmtMarkRoomTS.Name := 'FmtMarkRoomTS';
FdsrcMarkRoomTS := TDataSource.Create(Self);
FdsrcMarkRoomTS.Name := 'FdsrcMarkRoomTS';
FdsrcMarkRoomTS.DataSet := FmtMarkRoomTS;
FmtMarkPathPanel := TkbmMemTable.Create(Self);
FmtMarkPathPanel.Name := 'FmtMarkPathPanel';
FdsrcMarkPathPanel := TDataSource.Create(Self);
FdsrcMarkPathPanel.Name := 'FdsrcMarkPathPanel';
FdsrcMarkPathPanel.DataSet := FmtMarkPathPanel;
FmtMarkPathPanelPorts := TkbmMemTable.Create(Self);
FmtMarkPathPanelPorts.Name := 'FmtMarkPathPanelPorts';
FdsrcMarkPathPanelPorts := TDataSource.Create(Self);
FdsrcMarkPathPanelPorts.Name := 'FdsrcMarkPathPanelPorts';
FdsrcMarkPathPanelPorts.DataSet := FmtMarkPathPanelPorts;
FmtMarkSocket := TkbmMemTable.Create(Self);
FmtMarkSocket.Name := 'FmtMarkSocket';
FdsrcMarkSocket := TDataSource.Create(Self);
FdsrcMarkSocket.Name := 'FdsrcMarkSocket';
FdsrcMarkSocket.DataSet := FmtMarkSocket;
FmtMarkSocketPanel := TkbmMemTable.Create(Self);
FmtMarkSocketPanel.Name := 'FmtMarkSocketPanel';
FdsrcMarkSocketPanel := TDataSource.Create(Self);
FdsrcMarkSocketPanel.Name := 'FdsrcMarkSocketPanel';
FdsrcMarkSocketPanel.DataSet := FmtMarkSocketPanel;
FmtMarkCable := TkbmMemTable.Create(Self);
FmtMarkCable.Name := 'FmtMarkCable';
FdsrcMarkCable := TDataSource.Create(Self);
FdsrcMarkCable.Name := 'FdsrcMarkCable';
FdsrcMarkCable.DataSet := FmtMarkCable;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.CreateControls', E.Message);
end;
end;
procedure TF_ResourceReport.DefineRepSortInfo;
var
RepSortInfoList: TObjectList;
RepNode: TFlyNode;
ReportItemParams: TReportItemParams;
ReportSortInfo: TReportSortInfo;
i, j: Integer;
begin
try
RepSortInfoList := TF_Main(GForm).DM.GetReportSortInfoList;
for i := 0 to tvReports.Items.Count - 1 do
begin
RepNode := tvReports.Items[i];
ReportItemParams := TReportItemParams(RepNode.Data);
for j := 0 to RepSortInfoList.Count - 1 do
begin
ReportSortInfo := TReportSortInfo(RepSortInfoList[j]);
if ReportSortInfo.RepKind = ReportItemParams.RepType then
begin
ReportItemParams.FReportSortInfo.Assign(ReportSortInfo);
FreeAndNil(ReportSortInfo);
RepSortInfoList[j] := nil;
end;
end;
RepSortInfoList.Pack;
end;
RepSortInfoList.OwnsObjects := true;
FreeAndNil(RepSortInfoList);
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.DefineRepSortInfo', E.Message);
end;
end;
procedure TF_ResourceReport.DefineRepTemplates;
var
RepNode: TFlyNode;
TemplateNode: TFlyNode;
ReportItemParams: TReportItemParams;
ActualReportShablons: TReportShablons;
UserReportsInfo: TList;
ptrUserReportInfo: PUserReportInfo;
i, j: Integer;
begin
ClearTVReportTemplates;
TemplateNode := tvReports.Columns[rciSimple].EditorStyle.Sections[0].Items.Add(nil, cResourceReport_Msg9);
TemplateNode.Data := Pointer(10);
//*** Øàáëîí ñî øòàìïîì
TemplateNode := tvReports.Columns[rciStamp].EditorStyle.Sections[0].Items.Add(nil, cResourceReport_Msg9);
TemplateNode.Data := Pointer(10);
//*** Îïðåäåëèòü âñå øàáëîíû îò÷åòîâ
UserReportsInfo := TF_Main(GForm).DM.GetUserReportsInfo;
//*** Îïðåäåëèòü àêòèâíûå øàáëîíû îò÷åòîâ äëÿ îòîáðàäåíèÿ
for i := 0 to tvReports.Items.Count - 1 do
begin
RepNode := tvReports.Items[i];
ReportItemParams := TReportItemParams(RepNode.Data);
ReportItemParams.FSimpleShablons.ClearRepShablons;
ReportItemParams.FStampShablons.ClearRepShablons;
//Âíåñòè ñòàíäàðòíûå íàáëîíû
if (rkProject in FReportUseKind) or
//24.02.2011 (rkCalc in FReportUseKind)
IsSimpleReportKind(FReportUseKind)
then
begin
if ReportItemParams.CanHaveTemplate = biTrue then
begin
ReportItemParams.FSimpleShablons.AddShablonToList(0, cResourceReport_Msg9, true);
if ReportItemParams.CanHaveStamp = biTrue then
ReportItemParams.FStampShablons.AddShablonToList(0, cResourceReport_Msg9, true);
end;
end;
//*** Âêèíóòü âñå øàáëîíû â òåê. îò÷åò
j := 0;
while j <= UserReportsInfo.Count - 1 do
begin
ptrUserReportInfo := UserReportsInfo[j];
if ptrUserReportInfo.RepKind = ReportItemParams.RepType then
begin
//*** Îïðåäåëèòü òèï øàáëîíà - ïðîñòîé èëè ñî øòàìïîì
ActualReportShablons := ReportItemParams.GetShablonsByTemplateType(ptrUserReportInfo.TemplateType);
if ActualReportShablons <> nil then
begin
ActualReportShablons.AddShablonToList(ptrUserReportInfo.ID,
ptrUserReportInfo.Name, ptrUserReportInfo.UseAsShablon = biTrue);
FreeMem(ptrUserReportInfo);
UserReportsInfo.Delete(j);
end;
end
else
Inc(j);
end;
// Åñëè øàáëîí íå îïðåäåëåí (-1), à âñïèñêå åùå åñòü, òî îïðåäåëÿåì èç ñïèñêà
ReportItemParams.FSimpleShablons.DefineActiveShablonIfNoDefined;
ReportItemParams.FStampShablons.DefineActiveShablonIfNoDefined;
DefineReportNodeActiveShablonText(RepNode);
//RepNode.Cells[1] := ReportItemParams.FSimpleShablons.GetActiveShablonName;
//RepNode.Cells[2] := ReportItemParams.FStampShablons.GetActiveShablonName;
end;
DefineReportNodeControls(tvReports.Selected, true);
FreeList(UserReportsInfo);
end;
procedure TF_ResourceReport.DelReportTemplate(ARepNode: TFlyNode; ATemplateType: Integer);
var
ReportItemParams: TReportItemParams;
ReportShablons: TReportShablons;
TemplateName: String;
begin
TemplateName := '';
ReportItemParams := nil;
ReportShablons := nil;
if (ARepNode <> nil) and (ARepNode.Data <> nil) then
ReportItemParams := ARepNode.Data;
if ReportItemParams <> nil then
begin
ReportShablons := ReportItemParams.GetShablonsByTemplateType(ATemplateType);
if (ReportShablons <> nil) and (ReportShablons.FActiveShablonID > 0) then
begin
TemplateName := ReportShablons.GetActiveShablonName;
if MessageModal(cResourceReport_Msg16 + TemplateName+'?', ApplicationName, MB_ICONQUESTION or MB_YESNO) = IDYES then
begin
if tvReports.EditorMode then
tvReports.EditorMode := false; //tvReports.UpdateControlState Refresh; //tvReports.Update;
TF_Main(GForm).DM.DeleteRecordFromTableByID(tnUserReports, ReportShablons.FActiveShablonID, qmPhisical);
ReportShablons.RemoveShablonNameByID(ReportShablons.FActiveShablonID);
if ARepNode.Cells[rciIsOn] = bsTrue then
if TReportItemParams(ARepNode.Data).FSimpleShablons.FActiveShablonID = -1 then
ARepNode.Cells[rciIsOn] := bsFalse;
DefineReportNodeControls(ARepNode, true);
end;
end;
end;
end;
procedure TF_ResourceReport.ExportTemplateToFile(ATemplateType: Integer);
var
Node: TFlyNode;
ReportItemParams: TReportItemParams;
CurrReportShablons: TReportShablons;
ReportFileName: String;
ReportFilePath: String;
IniPath: String;
SaveDialog: TSaveDialog;
IniFile: TIniFile;
IniFileStream: TFileStream;
FrfFileStream: TFileStream;
ReportTemplateStream: TFileStream;
RepTemplateSignature: string;
begin
try
Node := tvReports.Selected;
if Node <> nil then
ReportItemParams := TReportItemParams(Node.Data);
if ReportItemParams <> nil then
begin
CurrReportShablons := ReportItemParams.GetShablonsByTemplateType(ATemplateType);
ReportFileName := GetReportFileNameByType(ReportItemParams.RepType, ATemplateType, false);
if (ReportFileName <> '') and (CurrReportShablons <> nil) then
begin
SaveDialog := TSaveDialog.Create(Self);
try
SaveDialog.Title := cResourceReport_Msg32;
SaveDialog.InitialDir := ExtractDirToReportTemplate(Node.Text);
SaveDialog.DefaultExt := '*.'+enSrt;
SaveDialog.FileName := FileNameCorrect(CurrReportShablons.GetActiveShablonName);
SaveDialog.Filter := GetDialogFilter(exdSbk, enSrt); //ExtName+' ('+FullExtName+')|'+FullExtName;
SaveDialog.Options := SaveDialog.Options - [ofNoChangeDir] + [ofOverwritePrompt];
if SaveDialog.Execute then
begin
//*** Îïðåäåëèòü èìÿ ôàéëà ïîëüçîâàòåëüñêîãî îò÷åòà
ReportFilePath := GetPathToSCSTmpDir + '\' + ReportFileName;
if FileExists(ReportFilePath) then
if Not DeleteFile(ReportFilePath) then
ReportFilePath := GetNoExistsFileNameForCopy(ReportFilePath);
if CurrReportShablons.FActiveShablonID > 0 then
TF_Main(GForm).DM.SaveUserReportByIDToFile(CurrReportShablons.FActiveShablonID, ReportFilePath);
if FileExists(ReportFilePath) then
begin
IniPath := GetNoExistsFileNameForCopy(GetPathToSCSTmpDir + '\' + fnRepTemplateTmp);
IniFile := TIniFile.Create(IniPath);
FrfFileStream := TFileStream.Create(ReportFilePath, fmOpenRead);
IniFile.WriteInteger(seRepTemplate, idtRepType, ReportItemParams.RepType);
IniFile.WriteInteger(seRepTemplate, idtReportUseKind, Ord(ReportItemParams.ReportUseKind));
IniFile.WriteString(seRepTemplate, idtName, CurrReportShablons.GetActiveShablonName);
IniFile.WriteInteger(seRepTemplate, idtTemplateType, ATemplateType);
IniFile.WriteBinaryStream(seRepTemplate, idtTemplate, FrfFileStream);
FreeAndNil(FrfFileStream);
FreeAndNil(IniFile);
PakFile(IniPath);
IniFileStream := TFileStream.Create(IniPath, fmOpenRead);
ReportTemplateStream := TFileStream.Create(SaveDialog.FileName, fmCreate);
//RepTemplateSignature := PChar(guidRepTemplateSignature);
//ReportTemplateStream.WriteBuffer(RepTemplateSignature^, Length(guidRepTemplateSignature));
ReportTemplateStream.WriteBuffer(PChar(guidRepTemplateSignature)^, Length(guidRepTemplateSignature));
ReportTemplateStream.CopyFrom(IniFileStream, 0);
RepTemplateSignature := '111111111111111111111111111111111111111111111111111';
RepTemplateSignature := '';
SetLength(RepTemplateSignature, 32);
ReportTemplateStream.Position := 0;
ReportTemplateStream.ReadBuffer(RepTemplateSignature[1], Length(guidRepTemplateSignature));
FreeAndNil(ReportTemplateStream);
FreeAndNil(IniFileStream);
DeleteFile(ReportFilePath);
DeleteFile(IniPath);
end;
end;
finally
FreeAndNil(SaveDialog);
end;
end;
end;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ExportTemplateToFile', E.Message);
end;
end;
function TF_ResourceReport.GetCurrReportItemParamValues: TReportItemParams;
begin
Result := TReportItemParams.Create(fmUnsign, -1, rkProject);
if cbReportWithStamp.Enabled then
Result.CanHaveStamp := BoolToInt(cbReportWithStamp.Checked);
if FcbCanHaveActiveComponentsCurr.Enabled then
Result.CanHaveActiveComponents := BoolToInt(FcbCanHaveActiveComponentsCurr.Checked);
if FcbCanHaveDismountAccountCurr.Enabled then
Result.CanHaveDismountAccount := BoolToInt(FcbCanHaveDismountAccountCurr.Checked);
if cbCanHaveZeroPriceComponents.Enabled then
Result.CanHaveZeroPriceComponents := BoolToInt(cbCanHaveZeroPriceComponents.Checked);
if cbFullPathInCableJournal.Enabled then
Result.FullPathInCableJournal := BoolToInt(cbFullPathInCableJournal.Checked);
if cbCanRoundValue.Enabled then
Result.CanRoundValue := BoolToInt(cbCanRoundValue.Checked);
if cbCanHaveSupplyValue.Enabled then
Result.CanHaveSupplyValue := BoolToInt(cbCanHaveSupplyValue.Checked);
if gbPageSize.Enabled then
begin
if rbPageSizeA4.Checked then
Result.CanHavePageSize := 0;
if rbPageSizeA3.Checked then
Result.CanHavePageSize := 1;
end;
if gbReportMode.Enabled then
begin
if rbRepModeDocument.Checked then
Result.CanHaveFormMode := 0;
if rbRepModeForm.Checked then
Result.CanHaveFormMode := 1;
end;
if cbAsPlacingInProj.Enabled then
Result.CanAsPlacingInProj := BoolToInt(cbAsPlacingInProj.Checked);
if cbGroupByCompType.Enabled then
Result.CanGroupByCompType := BoolToInt(cbGroupByCompType.Checked);
if cbCanResources.Enabled then
Result.CanResources := BoolToInt(cbCanResources.Checked);
if cbFloorNppWithRoom.Enabled then
Result.CanFloorNppWithRoom := BoolToInt(cbFloorNppWithRoom.Checked);
if cbInTwoCopies.Enabled then
Result.CanInTwoCopies := BoolToInt(cbInTwoCopies.Checked);
if rbGroupByComponType.Checked then
Result.GroupMode := gmComponType
else if rbGroupByGroupName.Checked then
Result.GroupMode := gmGroupName;
// added by Tolik
if (cbCanShowKabinet.Checked and cbCanShowKabinet.Enabled) then
Result.CanShowKabinet:=BoolToInt(cbCanShowKabinet.Checked);
if (cbCanShowObjHierarchy.Checked and cbCanShowObjHierarchy.Enabled) then
Result.CanShowObjHierarchy:=BoolToInt(cbCanShowObjHierarchy.Checked);
if (cbCanGroupByName.Checked and cbCanGroupByName.Enabled) then
Result.CanGroupByName:=BoolToInt(cbCanGroupByName.Checked);
if cbCanShowResources.Enabled then
Result.CanShowResources:=BoolToInt(cbCanShowResources.Checked);
if cbCanShowWorks.Enabled then
Result.CanShowWorks:=BoolToInt(cbCanShowWorks.Checked);
end;
function TF_ResourceReport.GetReportFileNameByType(AReportType: Integer; ATemplateType: Integer; ACanA3: Boolean): String;
begin
Result := '';
case AReportType of
rtResources:
begin
if ATemplateType = ttSimple then
Result := Result + fnReportResources
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPResources;
end;
rtCable:
begin
if ATemplateType = ttSimple then
Result := Result + fnReportCable
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPCable;
end;
rtCableCanal:
begin
if ATemplateType = ttSimple then
Result := Result + fnReportCableCanal
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPCableCanal;
end;
rtCableJournal:
begin
if ATemplateType = ttSimple then
Result := Result + fnRCableJournal
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPCableJournal;
end;
rtCableJournalExt:
begin
if ATemplateType = ttSimple then
Result := Result + fnRCableJournalExt
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPCableJournalExt;
end;
rtCablePaths:
begin
Result := Result + fnRCablePaths;
end;
rtCrossConnection:
Result := Result + fnRCrossConnection;
rtGOSTCableJournal:
begin
Result := Result + fnRGOSTCableJournal;
end;
rtSpecification:
Result := Result + fnRSpecification;
rtGOSTSpecification:
begin
if ATemplateType = ttSimple then
Result := Result + fnRGOSTSpecification
else
if (ATemplateType = ttA3) or ACanA3 then
Result := Result + fnRGOSTSpecificationA3;
end;
rtNorms:
begin
if ATemplateType = ttSimple then
Result := Result + fnRNorms
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPNorms;
end;
rtExplanatoryReport:
begin
if ATemplateType = ttSimple then
Result := Result + fnRExplanatoryReport
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPExplanatoryReport;
end;
rtExplicationRoom:
begin
if ATemplateType = ttSimple then
Result := Result + fnRExplicationRoom
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPExplicationRoom;
end;
rtExplicationComponent:
begin
if ATemplateType = ttSimple then
Result := Result + fnRExplicationComponent
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPExplicationComponent;
end;
rtCrossJournal:
Result := Result + fnRCrossJournal;
rtGOSTCrossJournal:
begin
Result := Result + fnRGOSTCrossJournal;
end;
rtLegendObjectIcons:
begin
if ATemplateType = ttSimple then
Result := Result + fnRLegendObjectIcons
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPLegendObjectIcons;
end;
rtHouse:
begin
if ATemplateType = ttSimple then
Result := Result + fnRHouse
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPHouse;
end;
rtDefectAct:
begin
if ATemplateType = ttSimple then
Result := Result + fnRDefectAct
else
if ATemplateType = ttStamp then
Result := Result + fnRSTAMPDefectAct;
end;
rtPriorCostOfProject:
begin
Result := Result + fnRPriorCostOfProject;
end;
rtCommerceInvoice:
begin
Result := Result + fnRCommerceInvoice;
end;
rtMarkRoomTS:
Result := Result + fnRMarkRoomTS;
rtMarkPathPanel:
Result := Result + fnRMarkPathPanel;
rtMarkPathPanelPorts:
Result := Result + fnRMarkPathPanelPorts;
rtMarkSocket:
Result := Result + fnRMarkSocket;
rtMarkSocketPanel:
Result := Result + fnRMarkSocketPanel;
rtMarkCable:
Result := Result + fnRMarkCable;
rtWACoordinates:
Result := Result + fnRWACoordinates;
end;
end;
function TF_ResourceReport.GetReportItemParamByRepType(AReportType: Integer): TReportItemParams;
var
Node: TFlyNode;
ReportItemParams: TReportItemParams;
begin
Result := nil;
Node := GetFirstNodeFromFlyTree(tvReports);
while Node <> nil do
begin
ReportItemParams := TReportItemParams(Node.Data);
if ReportItemParams.RepType = AReportType then
begin
Result := ReportItemParams;
Break; //// BREAK ////
end;
Node := Node.GetNext;
end;
end;
function TF_ResourceReport.GetTemplateTypeByColumnIndex(AColIndex: Integer): Integer;
begin
Result := 0;
case AColIndex of
rciSimple:
Result := ttSimple;
rciStamp:
Result := ttStamp;
end;
end;
function TF_ResourceReport.GetTemplateTypeByCurrOptions: Integer;
begin
Result := 0;
if Not cbReportWithStamp.Checked then
Result := ttSimple
else
Result := ttStamp;
end;
function TF_ResourceReport.ImportTemplateFromFile: Boolean;
var
OpenDialog: TOpenDialog;
ReportTemplateStream: TfileStream;
ReportTemplateStreamSize: Integer;
RepTemplateSignature: string;
IniPath: String;
IniFileStream: TFileStream;
IniFile: TMemIniFile;
ReportFilePath: String;
FrfFileStream: TFileStream;
IsNoReportTemplate: Boolean;
CurrReportItemParams: TReportItemParams;
CurrReportShablons: TReportShablons;
DestReportItemParams: TReportItemParams;
DestReportShablons: TReportShablons;
RepType: Integer;
TemplateType: Integer;
NewTemplateName: String;
NewUserReportInfo: TUserReportInfo;
begin
Result := false;
try
OpenDialog := TOpenDialog.Create(Self);
try
OpenDialog.Title := cResourceReport_Msg33;
OpenDialog.InitialDir := ExtractDirToReportTemplate('');
OpenDialog.DefaultExt := '*.'+enSrt;
//OpenDialog.FileName := FileNameCorrect(CurrReportShablons.GetActiveShablonName);
OpenDialog.Filter := GetDialogFilter(exdSbk, enSrt); //ExtName+' ('+FullExtName+')|'+FullExtName;
OpenDialog.Options := SaveDialog.Options - [ofNoChangeDir];
if OpenDialog.Execute then
begin
CurrReportItemParams := nil;
CurrReportShablons := nil;
if tvReports.Selected <> nil then
CurrReportItemParams := TReportItemParams(tvReports.Selected.Data);
ReportTemplateStream := TFileStream.Create(OpenDialog.FileName, fmOpenRead);
ReportTemplateStreamSize := ReportTemplateStream.Size;
IsNoReportTemplate := false;
if ReportTemplateStreamSize > Length(guidRepTemplateSignature) then
begin
RepTemplateSignature := '';
SetLength(RepTemplateSignature, Length(guidRepTemplateSignature));
ReportTemplateStream.ReadBuffer(RepTemplateSignature[1], Length(guidRepTemplateSignature));
if RepTemplateSignature = guidRepTemplateSignature then
begin
IniPath := GetNoExistsFileNameForCopy(GetPathToSCSTmpDir + '\' + fnRepTemplateTmp);
IniFileStream := TFileStream.Create(IniPath, fmCreate);
IniFileStream.CopyFrom(ReportTemplateStream, ReportTemplateStreamSize - ReportTemplateStream.Position);
FreeAndNil(IniFileStream);
UnPakFile(IniPath);
IniFile := TMemIniFile.Create(IniPath);
// Ñîõðàíèòü frf ôàéë
ReportFilePath := GetNoExistsFileNameForCopy(GetPathToSCSTmpDir + '\' + fnReport);
FrfFileStream := TFileStream.Create(ReportFilePath, fmCreate);
IniFile.ReadBinaryStream(seRepTemplate, idtTemplate, FrfFileStream);
FreeAndNil(FrfFileStream);
RepType := IniFile.ReadInteger(seRepTemplate, idtRepType, -1);
TemplateType := IniFile.ReadInteger(seRepTemplate, idtTemplateType, -1);
NewTemplateName := IniFile.ReadString(seRepTemplate, idtName, '');
if (RepType <> -1) and (TemplateType <> -1) then
begin
DestReportItemParams := GetReportItemParamByRepType(RepType);
DestReportShablons := nil;
if DestReportItemParams <> nil then
DestReportShablons := DestReportItemParams.GetShablonsByTemplateType(TemplateType);
if DestReportShablons <> nil then
begin
if NewTemplateName = '' then
NewTemplateName := ExtractFileNameOnly(OpenDialog.FileName);
while (DestReportShablons.FRepShablons.IndexOf(NewTemplateName) <> -1) and (NewTemplateName <> '') do
begin
MessageModal(cResourceReport_Msg17_1 +' '+ NewTemplateName +' '+ cResourceReport_Msg17_2, ApplicationName, MB_ICONINFORMATION or MB_OK);
NewTemplateName := InputForm(GForm, cResourceReport_Msg33, cResourceReport_Msg10_2,
NewTemplateName, dtString);
end;
if NewTemplateName <> '' then
begin
//*** Âíåñòè øàáëîí â áàçó
ZeroMemory(@NewUserReportInfo, SizeOf(TUserReportInfo));
NewUserReportInfo.Name := NewTemplateName;
NewUserReportInfo.RepKind := RepType;
NewUserReportInfo.TemplateType := TemplateType;
NewUserReportInfo.UseAsShablon := BoolToInt(DestReportItemParams = CurrReportItemParams);
NewUserReportInfo.RepFileName := ReportFilePath;
NewUserReportInfo.ID := TF_Main(GForm).DM.InsertUserReportToBase(NewUserReportInfo);
DestReportShablons.AddShablonToList(NewUserReportInfo.ID, NewUserReportInfo.Name, IntToBool(NewUserReportInfo.UseAsShablon));
if NewUserReportInfo.UseAsShablon = biTrue then
DefineReportNodeControls(tvReports.Selected, true);
Result := true;
end;
end;
end;
DeleteFile(ReportFilePath);
DeleteFile(IniPath);
FreeAndNil(IniFile);
end
else
IsNoReportTemplate := true;
end
else
IsNoReportTemplate := true;
if IsNoReportTemplate then
MessageModal(cFileOf + OpenDialog.FileName +' '+cResourceReport_Msg36, ApplicationName, MB_ICONINFORMATION or MB_OK);
FreeAndNil(ReportTemplateStream);
end;
finally
FreeAndNil(OpenDialog);
end;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ImportTemplateFromFile', E.Message);
end;
end;
function TF_ResourceReport.IsSimpleReportKind(AReportUseKinds: TReportUseKinds): Boolean;
begin
Result := (rkCalc in AReportUseKinds) or (rkCablePath in AReportUseKinds) or (rkCrossConnection in AReportUseKinds);
end;
procedure TF_ResourceReport.MakeEditReportTemplate(AMakeEdit: TMakeEdit; AMakeFromStandart: Boolean; ATemplateType: Integer);
var
StandartReportDir: String;
UserReportDir: string;
ReportFileName: String;
ReportFilePath: String;
SrcReportFilePath: String;
NewTemplateName: String;
SrcUserTemplateName: TStringItem;
ReportItemParams: TReportItemParams;
CurrReportShablons: TReportShablons;
CanContinueMake: Boolean;
NewUserReportInfo: TUserReportInfo;
FileAttrib: Integer;
Node: TFlyNode;
begin
ReportFileName := '';
ReportFilePath := '';
SrcReportFilePath := '';
NewTemplateName := '';
ReportItemParams := nil;
CurrReportShablons := nil;
Node := tvReports.Selected;
if Node <> nil then
ReportItemParams := TReportItemParams(Node.Data);
if ReportItemParams <> nil then
begin
CurrReportShablons := ReportItemParams.GetShablonsByTemplateType(ATemplateType);
ReportFileName := GetReportFileNameByType(ReportItemParams.RepType, ATemplateType, false);
if (ReportFileName <> '') and (CurrReportShablons <> nil) then
begin
//*** Îïðåäåëèòü èìÿ ôàéëà ïîëüçîâàòåëüñêîãî îò÷åòà
ReportFilePath := GetPathToUserReportFile(ReportFileName);
//*** Îïðåäåëèòü ñòàíäàðòíóþ ïàïêó ñ îò÷åòàìè
{$if Defined(ES_GRAPH_SC)}
StandartReportDir := ExeDir + '\' + dnReports;
{$else}
StandartReportDir := ExtractFileDir(ParamStr(0))+'\'+dnReports;
{$ifend}
//*** Îïðåäåëèòü ïàïêó User  ïàïêå Reports
UserReportDir := ExtractFileDir(ReportFilePath);
if Not DirectoryExists(UserReportDir) then
if Not CreateDir(UserReportDir) then
raise Exception.Create(cResourceReport_Msg11 + UserReportDir);
if FileExists(ReportFilePath) then
if Not DeleteFile(ReportFilePath) then
ReportFilePath := GetNoExistsFileNameForCopy(ReportFilePath);
//*** Îïðåäåëèòü ðåäàêòèðóåìûé ôàéë
if AMakeEdit = meMake then
begin
CanContinueMake := true;
//*** Åñëè èñõîäíûé øàáëîí - íå ñòàíäàðòíûé, òî âûáðàòü òàêîé èç ñïèñêà
SrcUserTemplateName.FString := '';
SrcUserTemplateName.FObject := nil;
//if Not AMakeFromStandart then
//begin
// SrcUserTemplateName := InputFormCombo(GForm, cResourceReport_Msg12_1, cResourceReport_Msg12_2,
// CurrReportShablons.GetActiveShablonName, CurrReportShablons.FRepShablons);
// if Integer(SrcUserTemplateName.FObject) <> 0 then
// CanContinueMake := false;
//end;
//*** ïðîäîëæàåì ñîçäàíèå
if CanContinueMake then
begin
//*** Îïðåäåëèòü èìÿ íîâîãî øàáëîíà îò÷åòà
while True do
begin
NewTemplateName := InputForm(GForm, cResourceReport_Msg10_1, cResourceReport_Msg10_2,
cResourceReport_Msg14 +' '+ DateTimeToStr(Now), dtString);
if CurrReportShablons.FRepShablons.IndexOf(NewTemplateName) <> -1 then
MessageModal(cResourceReport_Msg17_1 +' '+ NewTemplateName +' '+ cResourceReport_Msg17_2, ApplicationName, MB_ICONINFORMATION or MB_OK)
else
Break; //// BREAK ////
end;
if NewTemplateName <> '' then
begin
if AMakeFromStandart then
begin
SrcReportFilePath := StandartReportDir + '\' + ReportFileName;
if FileExists(SrcReportFilePath) then
begin
CopyFileToByName(SrcReportFilePath, ReportFilePath);
FileAttrib := FileGetAttr(ReportFilePath);
if (FileAttrib and fatrReadOnly) = fatrReadOnly then
FileSetAttr(ReportFilePath, FileAttrib - fatrReadOnly);
end;
end
else
begin
if CurrReportShablons.FActiveShablonID > 0 then
TF_Main(GForm).DM.SaveUserReportByIDToFile(CurrReportShablons.FActiveShablonID, ReportFilePath);
end;
end;
end;
end
else
if AMakeEdit = meEdit then
begin
//SrcUserTemplateName := InputFormCombo(GForm, cResourceReport_Msg13_1, cResourceReport_Msg13_2,
// CurrReportShablons.GetActiveShablonName, CurrReportShablons.FRepShablons);
//if Integer(SrcUserTemplateName.FObject) <> 0 then
if CurrReportShablons.FActiveShablonID > 0 then
TF_Main(GForm).DM.SaveUserReportByIDToFile(CurrReportShablons.FActiveShablonID, ReportFilePath);
end;
if (ReportFilePath <> '') and FileExists(ReportFilePath) then
begin
RepDesigner.OnSaveReport := RepDesignerSaveReport;
try
if ShowReportFromFile(fmUnsign, ReportItemParams, ReportFilePath, pdDesign, true, AMakeEdit) then
begin
//*** Åñëè áûë ñîçäàí íîâûé øàáëîí
if AMakeEdit = meMake then
begin
//*** äåàêòèâèðîâàòü ñòàðûé
if CurrReportShablons.FActiveShablonID > 0 then
TF_Main(GForm).DM.UpdateIntTableFieldByID(tnUserReports, fnUseAsShablon, CurrReportShablons.FActiveShablonID, biFalse, qmPhisical);
//*** Âíåñòè øàáëîí â áàçó
ZeroMemory(@NewUserReportInfo, SizeOf(TUserReportInfo));
NewUserReportInfo.Name := NewTemplateName;
NewUserReportInfo.RepKind := ReportItemParams.RepType;
NewUserReportInfo.TemplateType := ATemplateType;
NewUserReportInfo.UseAsShablon := biTrue;
NewUserReportInfo.RepFileName := ReportFilePath;
NewUserReportInfo.ID := TF_Main(GForm).DM.InsertUserReportToBase(NewUserReportInfo);
CurrReportShablons.AddShablonToList(NewUserReportInfo.ID, NewUserReportInfo.Name, true);
DefineReportNodeControls(Node, true);
end
else
//*** Âãíåñòè îòðåäàêòèðîâàííûé øàáëîí
if CurrReportShablons.FActiveShablonID > 0 then
TF_Main(GForm).DM.UpdateBlobTableFieldByID(tnUserReports, fnRepBlob, CurrReportShablons.FActiveShablonID, nil, ReportFilePath);
end
else
begin
DeleteFile(ReportFilePath);
end;
finally
RepDesigner.OnSaveReport := nil;
end;
end;
end;
end;
end;
function TF_ResourceReport.MakeNewReportTemplateWizard: Boolean;
var
Node: TFlyNode;
ReportItemParams: TReportItemParams;
CurrReportShablons: TReportShablons;
ReportFilePath: String;
NewUserReportInfo: TUserReportInfo;
frPage: TfrPage;
frView: TfrView;
frMemoView: TfrMemoView;
frBandView: TfrBandView;
MilimetrKoeff: Double;
MarginLeft: Integer;
MarginRight: Integer;
MarginTop: Integer;
MarginBottom: Integer;
TitleCellHeight: integer;
CellHeight: Integer;
CellWidth: Integer;
CellGap: Integer;
RegionWitdh: Integer;
IndexOfPaperSize: integer;
PageFooterHeight: Integer;
PageFooterBandTop: Integer;
function AddPage: TfrPage;
begin
Report.Pages.Add;
Result := Report.Pages[Report.Pages.Count - 1];
Result.UseMargins := true;
Result.pgMargins.Left := MarginLeft;
Result.pgMargins.Right := MarginRight;
Result.pgMargins.Top := MarginTop;
Result.pgMargins.Bottom := MarginBottom;
end;
procedure SetfrMemoAligments(AFrMemoView: TfrMemoView);
begin
// Öåíòðèðîâàòü òåêñò ïî ãîðèçîíòàëè
AFrMemoView.Alignment := (AFrMemoView.Alignment and $FC) + (13 - 11);
// Öåíòðèðîâàòü òåêñò ïî âåðòèêàëè
AFrMemoView.Alignment := (AFrMemoView.Alignment and $E7) + Word(true) * 8 + Word(false) * $10;
end;
begin
Result := false;
TF_Main(GForm).CreateFMakeMarkPage; //04.01.2011
Node := tvReports.Selected;
if Node <> nil then
ReportItemParams := TReportItemParams(Node.Data);
if ReportItemParams <> nil then
begin
CurrReportShablons := ReportItemParams.GetShablonsByTemplateType(ttSimple);
//*** Îïðåäåëèòü èìÿ ôàéëà ïîëüçîâàòåëüñêîãî îò÷åòà
ReportFilePath := GetNoExistsFileNameForCopy(GetPathToUserReportFile('ReportTemplate.frf'));
if (ReportFilePath <> '') and Not FileExists(ReportFilePath) then
if TF_Main(GForm).F_MakeMarkPage.Execute(ReportItemParams.RepType) then
begin
Report.Clear;
// Íàñòðîèòü ðàçìåðû ñòðàíèöè
MilimetrKoeff := 3.6;
with TF_Main(GForm).F_MakeMarkPage do
begin
MarginLeft := Round(GetSpinEditValueMM(seMarginLeft) * MilimetrKoeff);
MarginRight := Round(GetSpinEditValueMM(seMarginRight) * MilimetrKoeff);
MarginTop := Round(GetSpinEditValueMM(seMarginTop) * MilimetrKoeff);
MarginBottom := Round(GetSpinEditValueMM(seMarginBottom) * MilimetrKoeff);
CellHeight := Round(GetSpinEditValueMM(seCellHeight) * MilimetrKoeff);
CellWidth := Round(GetSpinEditValueMM(seCellWidth) * MilimetrKoeff);
CellGap := Round(GetSpinEditValueMM(seCellGap) * MilimetrKoeff);
end;
// Òèòóëêà
if TF_Main(GForm).F_MakeMarkPage.cbCreateTitlePage.Checked then
begin
frPage := AddPage;
IndexOfPaperSize := Prn.PaperNames.IndexOf('A4');
if IndexOfPaperSize <> -1 then
frPage.ChangePaper(Prn.PaperSizes[IndexOfPaperSize], 0, 0, -1, poPortrait);
RegionWitdh := frPage.PrnInfo.Pgw - MarginLeft - MarginRight;
TitleCellHeight := 40;
frMemoView := TfrMemoView(frCreateObject(gtMemo, ''));
frPage.Objects.Add(frMemoView);
//frMemoView.SetBounds(MarginLeft, MarginTop*5, RegionWitdh, CellHeight);
//frMemoView.SetBounds(
// MarginLeft,
// Round((frPage.PrnInfo.Pgh/2) - (TitleCellHeight/2)), //Top
// RegionWitdh, TitleCellHeight);
frMemoView.SetBounds(
MarginLeft, MarginTop,
RegionWitdh, frPage.PrnInfo.Pgh - MarginTop - MarginBottom);
SetfrMemoAligments(frMemoView);
frMemoView.Font.Name := TF_Main(GForm).F_MakeMarkPage.FResFont.Name;
frMemoView.Font.Size := 28;
frMemoView.Font.Style := frMemoView.Font.Style + [fsBold, fsItalic];
frMemoView.Memo.Add(tvReports.Selected.Text);
end;
// Ñòðàíèöà ñ äàííûìè
frPage := AddPage;
IndexOfPaperSize := Prn.PaperNames.IndexOf(TF_Main(GForm).F_MakeMarkPage.cbPageSize.Text);
if IndexOfPaperSize <> -1 then
frPage.ChangePaper(Prn.PaperSizes[IndexOfPaperSize], 0, 0, -1, TF_Main(GForm).F_MakeMarkPage.FResPrinterOrientation);
RegionWitdh := frPage.PrnInfo.Pgw - MarginLeft - MarginRight;
frBandView := TfrBandView(frCreateObject(gtBand, ''));
frPage.Objects.Add(frBandView);
frBandView.SetBounds(0, MarginTop, 0, CellHeight);
frBandView.BandType := btMasterData;
frBandView.DataSet := frDBDataSet_Master.Name;
//frBandView.Flags := flStretched;
//frBandView.FrameStyle := Ord(psDashDot);
// Øèðèíà ïå÷àòàåìîé îáëàñòè
if CellWidth < RegionWitdh then
begin
frBandView.Columns := Trunc(RegionWitdh / (CellWidth + CellGap));
frBandView.ColumnWidth := CellWidth;
frBandView.ColumnGap := CellGap;
end;
frMemoView := TfrMemoView(frCreateObject(gtMemo, ''));
frPage.Objects.Add(frMemoView);
frMemoView.SetBounds(MarginLeft, MarginTop, CellWidth, CellHeight);
SetfrMemoAligments(frMemoView);
frMemoView.Memo.Add('[mtReport."Name_Mark"]');
frMemoView.FillColor := clWhite;
frMemoView.Font.Name := TF_Main(GForm).F_MakeMarkPage.FResFont.Name;
frMemoView.Font.Size := TF_Main(GForm).F_MakeMarkPage.FResFont.Size;
frMemoView.Font.Style := TF_Main(GForm).F_MakeMarkPage.FResFont.Style;
frMemoView.FrameColor := TF_Main(GForm).F_MakeMarkPage.ceLineColor.SelectedColor;
frMemoView.FrameStyle := TF_Main(GForm).F_MakeMarkPage.FResFrameStyle; //Ord(psDashDot);
frMemoView.FrameTyp := TF_Main(GForm).F_MakeMarkPage.FResFrameTyp;
frMemoView.FrameWidth := TF_Main(GForm).F_MakeMarkPage.FResFrameWidth;
frMemoView.Flags := flStretched {+ flWordWrap};
// Íîìåðà ñòðàíèö
if TF_Main(GForm).F_MakeMarkPage.cbShowPageNumber.Checked then
begin
PageFooterHeight := 18;
PageFooterBandTop := frPage.PrnInfo.Pgh - MarginBottom - PageFooterHeight;
// Áºíä âíèçó ñòðàíèöè
frBandView := TfrBandView(frCreateObject(gtBand, ''));
frPage.Objects.Add(frBandView);
frBandView.SetBounds(0, PageFooterBandTop, 0, PageFooterHeight);
frBandView.BandType := btPageFooter;
frMemoView := TfrMemoView(frCreateObject(gtMemo, ''));
frPage.Objects.Add(frMemoView);
frMemoView.SetBounds(MarginLeft, PageFooterBandTop, frPage.PrnInfo.Pgw - MarginLeft - MarginRight, PageFooterHeight);
SetfrMemoAligments(frMemoView);
frMemoView.Font.Name := TF_Main(GForm).F_MakeMarkPage.FResFont.Name;
frMemoView.Font.Size := 10;
frMemoView.Memo.Add('-[PAGE#]-');
end;
Report.SaveToFile(ReportFilePath);
if FileExists(ReportFilePath) then
begin
//*** äåàêòèâèðîâàòü ñòàðûé
if CurrReportShablons.FActiveShablonID > 0 then
TF_Main(GForm).DM.UpdateIntTableFieldByID(tnUserReports, fnUseAsShablon, CurrReportShablons.FActiveShablonID, biFalse, qmPhisical);
//*** Âíåñòè øàáëîí â áàçó
ZeroMemory(@NewUserReportInfo, SizeOf(TUserReportInfo));
NewUserReportInfo.Name := cResourceReport_Msg14 +' '+ DateTimeToStr(Now);
NewUserReportInfo.RepKind := ReportItemParams.RepType;
NewUserReportInfo.TemplateType := ttSimple;
NewUserReportInfo.UseAsShablon := biTrue;
NewUserReportInfo.RepFileName := ReportFilePath;
NewUserReportInfo.ID := TF_Main(GForm).DM.InsertUserReportToBase(NewUserReportInfo);
CurrReportShablons.AddShablonToList(NewUserReportInfo.ID, NewUserReportInfo.Name, true);
DefineReportNodeControls(Node, true);
Result := True;
if TF_Main(GForm).F_MakeMarkPage.cbOpenInDesigner.Checked then
MakeEditReportTemplate(meEdit, false, ttSimple);
//ShowReport(fmUnsign, ReportFilePath, pdDesign);
end;
DeleteFile(ReportFilePath);
end;
end;
end;
procedure TF_ResourceReport.SortMemTableByParams(AMemTable: TkbmMemTable;
AReportItemParams, AReportItemParamValues: TReportItemParams);
var
StrSortFields: String;
i, j: Integer;
MemTableCompareOptions: TkbmMemTableCompareOptions;
Stream : TStream;
FieldNamesDivided: TStringList;
begin
StrSortFields := '';
if AReportItemParamValues <> nil then
begin
// Åñëè îâ ïîðÿäêå ðàçìåùåíèÿ íà ïðîåêòå, òî íåâûïîëíÿåì ñîðòèðîâêó
if (AReportItemParams.CanAsPlacingInProj = biTrue) and
(AReportItemParamValues.CanAsPlacingInProj = biTrue) then
Exit; ///// EXIT /////
end;
for i := 0 to AReportItemParams.FReportSortInfo.FUsedFieldNames.Count - 1 do
begin
if AMemTable.FieldDefs.IndexOf(AReportItemParams.FReportSortInfo.FUsedFieldNames[i]) <> -1 then
begin
if StrSortFields <> '' then
StrSortFields := StrSortFields + ';';
StrSortFields := StrSortFields + AReportItemParams.FReportSortInfo.FUsedFieldNames[i];
end
else
begin
FieldNamesDivided := GetStringsFromStr(AReportItemParams.FReportSortInfo.FUsedFieldNames[i], ';', false);
for j := 0 to FieldNamesDivided.Count - 1 do
if AMemTable.FieldDefs.IndexOf(FieldNamesDivided[j]) <> -1 then
begin
if StrSortFields <> '' then
StrSortFields := StrSortFields + ';';
StrSortFields := StrSortFields + FieldNamesDivided[j];
end;
FreeAndNil(FieldNamesDivided);
end;
end;
if StrSortFields <> '' then
begin
MemTableCompareOptions := [];
if AReportItemParams.FReportSortInfo.CaseSensitive = biFalse then
MemTableCompareOptions := MemTableCompareOptions + [mtcoCaseInsensitive];
if AReportItemParams.FReportSortInfo.Descending = biTrue then
MemTableCompareOptions := MemTableCompareOptions + [mtcoDescending];
//AMemTable.SortOn(StrSortFields, MemTableCompareOptions);
AMemTable.SortOn(StrSortFields, []);
end;
end;
function TF_ResourceReport.PrepareCommerceInvoiceObjects(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams): TSCSCatalog;
const
// Position Type
ptGroup = 1;
ptEndGroup = 2;
ptCompon = 3;
ptGroupTotal = 4;
ptBreak = 5;
var
i, j: integer;
//NBPath: TStringList;
CatalogOwnerPathID: TIntList;
Compon: TSCSComponent;
ComponIDNB: Integer;
RootCatalog: TSCSCatalog; // Êîðíåâîé îáúåêò
ComponCatalog: TSCSCatalog; // Îáúåêò äëÿ êîìïîíåíòà
CatalogWithNoDefined: TSCSCatalog; // Îáúåêò ñ êîìïîíåíòàìè, êîòîðûõ íåòó â ÁÄ
MaxPathLen: Integer; // Ìèíèìàëüíàÿ äëèíà ïóòè
//ptrComponTotalQt: PDouble; // ïåðåìåííàÿ èç ñïèñêà, â êîòîðîé õðàíèòñÿ îáùåå êîë-âî
//ComponentQt: Double; // Êîëâî îäíîé êîìïîíåíòû
GroupCompon: TSCSComponent;
GroupComponList: TSCSComponents;
LookedWholeID: TIntList;
Catalogs: TSCSCatalogs;
LevelColors: TIntList;
GenCatalogNum: Integer;
// Ñîçäàñò îáúåêò êàòàëîãà
function CreateCatalogContainer(ANBID: Integer=0; AParentContainer: TSCSCatalog=nil): TSCSCatalog;
begin
Result := TSCSCatalog.Create(GForm);
//Result.Level := ALevel;
//Result.SCSComponents.OwnsObjects := false;
if ANBID <> 0 then
begin
Result.ID := ANBID;
Result.Name := TF_Main(GForm).FNormBase.DM.GetStringFromTableByID(tnCatalog, fnName, Result.ID, qmPhisical);
end;
if AParentContainer <> nil then
AParentContainer.AddChildCatalogToList(Result);
end;
// Ñòðîèò ñòðóêòóðó (ïóòü) îáúåêòîâ èç ïóòè ID, âåðíåò ñàìûé âíóòðåííèé êàòàëîã
function CatalogPathIDToObject(ACatalogPathID: TIntList): TSCSCatalog;
var
i: Integer;
CurrCatalog: TSCSCatalog;
ChildCatalog: TSCSCatalog;
begin
CurrCatalog := RootCatalog;
for i := 0 to ACatalogPathID.Count - 1 do
begin
ChildCatalog := CurrCatalog.ChildCatalogs.GetByID(ACatalogPathID[i]);
if ChildCatalog = nil then
ChildCatalog := CreateCatalogContainer(ACatalogPathID[i], CurrCatalog);
CurrCatalog := ChildCatalog;
//if (i+1) > MaxCatalogLevel then
// MaxCatalogLevel := i+1;
end;
if (MaxPathLen = 0) or (MaxPathLen < ACatalogPathID.Count) then
MaxPathLen := ACatalogPathID.Count;
Result := CurrCatalog;
end;
// Óáèðàåò îáùèå âåðõíèå îáúåêòû - òå ó êîòîðûõ îäèí äî÷åðíèé ïîäîáúåêò
// ñìîòðèì ÷òîáû äëÿ êîìïîíåíòîâ áûë õîòÿ áû îäèí óðîâåíü
// è äëÿ ñàìîãî ãëóáîêîãî ïî âîçìîæíîñòè - ìèíèìêì òðè óðîâíÿ
procedure RemoveTopCommonObjects;
var
CurrTopCatalog: TSCSCatalog;
//CatalogToRemove: TSCSCatalog;
RemovedCount: Integer;
begin
CurrTopCatalog := RootCatalog;
RemovedCount := 0;
//while (MaxPathLen - RemovedCount) >= 3 do
while true do
begin
// Ïðîâåðêè äëÿ âûõîäà èç öûêëà
if (CurrTopCatalog.ChildCatalogs.Count > 1) or // åñëè íåñêîëüêî îáúåêòîâ, òîâûõîäèì
(CurrTopCatalog.SCSComponents.Count > 0) or // åñëè åñòü êîìïîíåíòû, òî âûõîäèì
(CurrTopCatalog.ChildCatalogs.Count = 0) or // íà âñÿêèé ñëó÷àé
//((MaxPathLen-RemovedCount) <= 3) then
((MaxPathLen-RemovedCount) <= 3) then
begin
EmptyProcedure;
Break; //// BREAK ////
end;
RootCatalog := CurrTopCatalog.ChildCatalogs[0];
//RootCatalog.Parent := nil;
CurrTopCatalog.RemoveChildCatalogFromList(RootCatalog);
CurrTopCatalog.Free;
CurrTopCatalog := RootCatalog;
RemovedCount := RemovedCount + 1;
end;
end;
procedure DefineCatalogCodes(AParentCatalogs: TSCSCatalogs; ALevel: Integer=-1);
var
i, j: Integer;
ChildLevelCatalogs: TSCSCatalogs;
Catalog: TSCSCatalog;
begin
ChildLevelCatalogs := TSCSCatalogs.Create(false);
// Îïðåäåëÿåì íîìåðà Êàòàëîãîâ
for i := 0 to AParentCatalogs.Count - 1 do
begin
Catalog := AParentCatalogs[i];
Catalog.Level := ALevel;
GenCatalogNum := GenCatalogNum + 1;
Catalog.MarkID := GenCatalogNum;
Catalog.NameMark := IntToStrF(Catalog.MarkID, 2);
// Îïðåäåëÿåì ñïèñîê êàòàëîãîâ óðîâíåì íèæå
for j := 0 to Catalog.ChildCatalogs.Count - 1 do
ChildLevelCatalogs.Add(Catalog.ChildCatalogs[j]);
end;
if ChildLevelCatalogs.Count > 0 then
DefineCatalogCodes(ChildLevelCatalogs, ALevel+1);
FreeAndNil(ChildLevelCatalogs);
end;
function GetGrpCompon(AProjCompon: TSCSComponent): TSCSComponent;
var
Compon: TSCSComponent;
Izm: String;
i: Integer;
begin
Result := nil;
Izm := AProjCompon.Izm;
if CheckPriceTransformToUOMByCompType(@AProjCompon.ComponentType) then
Izm := GetNameUOM(umMetr, true);
for i := 0 to GroupComponList.Count - 1 do
begin
Compon := GroupComponList[i];
if (Compon.ArticulProducer = AProjCompon.ArticulProducer) and
(Abs(Compon.Price - AProjCompon.Price) < cnstCmpPriceDelta) and
(Compon.Izm = Izm) and
(Compon.GUIDProducer = AProjCompon.GUIDProducer) and
(Compon.Name = AProjCompon.Name) and
(Compon.IsLine = AProjCompon.IsLine) then
begin
Result := Compon;
Break; //// BREAK ////
end;
end;
end;
begin
Result := nil;
try
RootCatalog := CreateCatalogContainer;
RootCatalog.Name := '';
LookedWholeID := TIntList.Create;
GroupComponList := TSCSComponents.Create(false); // ãðóïïîâûå êîáúåêòû áóäóò óäàëÿòüñÿ èç êàòàëîãîâ
//LevelColors := TIntList.Create;
try
CatalogWithNoDefined := nil;
MaxPathLen := 0;
for i := 0 to ACatalog.ComponentReferences.Count - 1 do
begin
Compon := ACatalog.ComponentReferences[i];
// Ìîæåì ëè èñïîëüçîâàòü ýòîò êîìïîíåíò ïî ïàðàìåòðàì
if ((Compon.Isline = biFalse) or (LookedWholeID.IndexOf(Compon.Whole_ID) = -1)) and
CheckCanLookComponInReportRsrc(Compon, AReportItemParamValues.CanHaveActiveComponents=biTrue,
AReportItemParamValues.CanHaveDismountAccount=biTrue) then
begin
GroupCompon := GetGrpCompon(Compon);
if GroupCompon = nil then
begin
GroupCompon := TSCSComponent.Create(GForm);
GroupCompon.AssignOnlyComponent(Compon);
GroupCompon.Length := 0;
if CheckPriceTransformToUOMByCompType(@GroupCompon.ComponentType) then
GroupCompon.Izm := GetNameUOM(umMetr, true);
CatalogOwnerPathID := nil;
ComponIDNB := TF_Main(GForm).FNormBase.DM.GetIntFromTableByGUID(tnComponent, fnID, Compon.GuidNB, qmPhisical);
if ComponIDNB <> 0 then
CatalogOwnerPathID := GetComponCatalogOwnerPathIDByLevel(ComponIDNB, 0, TF_Main(GForm).FNormBase.DM.Query_Select);
// Åñëè åñòü ïàïêà â ÍÁ, òî êèäàåì â îáúåêò ýòîé ïàïêè
if (CatalogOwnerPathID <> nil) and (CatalogOwnerPathID.Count > 0) then
begin
ComponCatalog := CatalogPathIDToObject(CatalogOwnerPathID);
//ComponCatalog.SCSComponents.Add(Compon);
ComponCatalog.AddComponentToList(GroupCompon);
end
else
// Èíà÷å êèäàåì â ñïåö. ïàïêó ñ êîìïîíåíòàìè êîòîðûõ íåòó â ÍÁ
begin
if CatalogWithNoDefined = nil then
begin
CatalogWithNoDefined := CreateCatalogContainer;
CatalogWithNoDefined.Name := cResourceReport_Msg43;
//08.08.2012 CatalogWithNoDefined.AddComponentToList(GroupCompon);
end;
CatalogWithNoDefined.AddComponentToList(GroupCompon);
end;
GroupComponList.Add(GroupCompon);
end;
GroupCompon.Length := GroupCompon.Length + GetComponQuantityByParams(Compon, AReportItemParamValues.CanHaveDismountAccount=biTrue);
// Çàïîìèíàåì êàáåëü
//02.08.2012 if (Compon.Isline = biTrue) and (Compon.Whole_ID <> 0) then
//02.08.2012 LookedWholeID.Add(Compon.Whole_ID);
end;
end;
RemoveTopCommonObjects;
RootCatalog.AddChildCatalogToList(CatalogWithNoDefined);
// Îïðåäåëÿåì êîäû (íîìåðà ïàïîê) ïî óðîâíÿì
GenCatalogNum := -1;
Catalogs := TSCSCatalogs.Create(false);
Catalogs.Add(RootCatalog);
DefineCatalogCodes(Catalogs);
FreeAndNil(Catalogs);
// Öâåòà BGR - blue green red
//LevelColors.Add($FFCC99);
//LevelColors.Add($CCFFCC);
////LevelColors.Add($CCFFFF);
// íàñûïàåì MemTable
//ObjectstsToMT(RootCatalog);
Result := RootCatalog;
finally
//FreeAndNil(LevelColors);
FreeAndNil(GroupComponList);
FreeAndNil(LookedWholeID);
//FreeAndNil(RootCatalog);
end;
except
on E: Exception do AddExceptionToLogExt(ClassName, 'PrepareCommerceInvoiceObjects', E.Message);
end;
end;
procedure TF_ResourceReport.PrepareReportFormats;
var
i, j: Integer;
FrPage: TfrPage;
FrObject: TObject;
FrMemoView: TfrMemoView;
FracDelimetrCode: Integer;
begin
for i := 0 to Report.Pages.Count - 1 do
begin
FrPage := Report.Pages[i];
for j := 0 to FrPage.Objects.Count - 1 do
begin
FrObject := TObject(FrPage.Objects[j]);
if FrObject is TFrMemoView then
begin
FrMemoView := TfrMemoView(FrObject);
// Ïðîâåðèòü ðàçäåëèòåëü
// Êîä ðàçäåëèòåëÿ õðàíèòñÿ â 2-õ ïåðâûõ áàéòàõ
if FrMemoView.Format <> 0 then
begin
FracDelimetrCode := (FrMemoView.Format and $FF);
if Chr(FracDelimetrCode) <> DecimalSeparator then
begin
// Óáåðàåì ñòàðûé êîä ðàçäåëèòåëÿ
FrMemoView.Format := FrMemoView.Format - FracDelimetrCode;
// Äîáàâëÿåì íîâûé êîä ðàçäåëèòåëÿ
FrMemoView.Format := FrMemoView.Format + Ord(DecimalSeparator);
end;
end;
// currenct charset
FrMemoView.Font.Charset := F_LNG.GetActiveCharset;
end;
end;
end;
end;
procedure TF_ResourceReport.RepListWrite(AName: String; AObjCount,
AComponCount: Integer; AWorkCost: Double);
begin
{RichEdit_Report.SelAttributes.Size := 15;
RichEdit_Report.Lines.Add('Ëèñò "'+AName+'" ');
RichEdit_Report.SelAttributes.Size := 14;
RichEdit_Report.Lines.Add(' Îáúåêòîâ '+IntToStr(AObjCount)+'; Êîìïîíåíò '+IntToStr(AComponCount)+'; Ñòîèìîñòü ðåñóðñîâ '+FloatToStr(RoundIBD(AWorkCost, 2))+' '+GCurrency.Name_Brief);
}
end;
procedure TF_ResourceReport.RepObjWrite(AName: String;
AItemType: TItemType; AComponCount: Integer; AWorkCost: Double);
begin
{
RichEdit_Report.SelAttributes.Size := 13;
RichEdit_Report.Lines.Add('');
RichEdit_Report.Lines.Add(' Îáúåêò "'+AName+'" ');
RichEdit_Report.SelAttributes.Size := 12;
RichEdit_Report.Lines.Add(' Êîìïîíåíò '+IntToStr(AComponCount)+'; Ñòîèìîñòü ðåñóðñîâ '+FloatToStr(RoundIBD(AWorkCost, 2))+' '+GCurrency.Name_Brief);
}
end;
procedure TF_ResourceReport.RepComponWrite(AName: String;
AisCompon: Boolean; AWorkCost: Double; Apref: Integer);
var BeforeName: String;
begin
{
BeforeName := '';
if AisCompon then
BeforeName := 'Êîìïîíåíò';
RichEdit_Report.SelAttributes.Size := 12;
RichEdit_Report.Lines.Add(DupStr(' ', APref)+ BeforeName +'"'+AName+'" (Ñòîèìîñòü âñåõ ðåñóðñîâ '+FloatToStr(RoundIBD(AWorkCost, 2))+' '+GCurrency.Name_Brief+')');
//RichEdit_Report.Lines.Add(' Êîìïîíåíò "'+AName+'" (Ñòîèìîñòü âñåõ ðåñóðñîâ '+FloatToStr(RoundIBD(AWorkCost, 2))+' '+GCurrency.Name_Brief+')');
//RichEdit_Report.SelAttributes.Size := 11;
//RichEdit_Report.Lines.Add(' Ñòîèìîñòü âñåõ ðåñóðñîâ '+FloatToStr(RoundIBD(AWorkCost, 2))+' '+GCurrency.Name_Brief);
}
end;
procedure TF_ResourceReport.RepResourcesWrite(AResourcesCost: Double; APref: Integer);
begin
{
RichEdit_Report.SelAttributes.Size := 12;
RichEdit_Report.Lines.Add(DupStr(' ', APref) + 'Ðåñóðñû: (Ñòîèìîñòü '+FloatToStr(RoundIBD(AResourcesCost, 2))+' '+GCurrency.Name_Brief+') ');
//RichEdit_Report.SelAttributes.Size := 11;
//RichEdit_Report.Lines.Add(' Ñòîèìîñòü âñåõ ðåñóðñîâ '+FloatToStr(RoundIBD(AWorkCost, 2))+' '+GCurrency.Name_Brief);
}
end;
procedure TF_ResourceReport.RepResourceWrite(AName: String; AWorkCost: Double; APref: Integer);
begin
{
RichEdit_Report.SelAttributes.Size := 12;
RichEdit_Report.Lines.Add(DupStr(' ', APref) + '"'+AName+'", ñòîèìîñòü '+FloatToStr(RoundIBD(AWorkCost, 2))+' '+GCurrency.Name_Brief);
//RichEdit_Report.SelAttributes.Size := 11;
//RichEdit_Report.Lines.Add(' Ñòîèìîñòü âñåõ ðåñóðñîâ '+FloatToStr(RoundIBD(AWorkCost, 2))+' '+GCurrency.Name_Brief);
}
end;
procedure TF_ResourceReport.RepComplectsWrite(AComplCost: Double);
begin
{
RichEdit_Report.SelAttributes.Size := 12;
RichEdit_Report.Lines.Add(DupStr(' ', 15) + 'Êîìïëåêòóþùèå: (Ñòîèìîñòü '+FloatToStr(RoundIBD(AComplCost, 2))+' '+GCurrency.Name_Brief+') ');
}
end;
procedure TF_ResourceReport.LoadPortName(AIDPointComponent, AIDLineComponent: Integer; var ANppPort: Integer; var APortName: String;
aPort: Pointer=nil; aPortFromPos: PInteger=nil; aPortToPos: PInteger=nil);
var //SCSComponent: TSCSComponent;
i, j: Integer;
Interfac: TSCSInterface;
InterfacLineComponent: TSCSInterface;
InterfLists: TInterfLists;
Interfaces: TList;
PointComponent: TSCSComponent;
LineComponent: TSCSComponent;
Port: TSCSInterface;
//RelInterfConnPositions: TList;
PortFromPos, PortToPos: Integer;
begin
//SCSComponent := nil;
//04.10.2013
if aPort <> nil then
TObject(aPort^) := nil;
if aPortFromPos <> nil then
aPortFromPos^ := 0;
if aPortToPos <> nil then
aPortToPos^ := 0;
ANppPort := 0;
APortName := '';
with F_ProjMan do
begin
PointComponent := GSCSBase.CurrProject.GetComponentFromReferences(AIDPointComponent);
LineComponent := GSCSBase.CurrProject.GetComponentFromReferences(AIDLineComponent);
if Assigned(PointComponent) and
Assigned(LineComponent) then
begin
Interfaces := Tlist.Create;
try
InterfLists := PointComponent.GetInterfacesThatConnectComponent(LineComponent);
if Assigned(InterfLists.InterfList1) then
Interfaces.Assign(InterfLists.InterfList1, laOr);
if Assigned(InterfLists.InterfList2) then
Interfaces.Assign(InterfLists.InterfList2, laOr);
for i := 0 to Interfaces.Count - 1 do
begin
Interfac := TSCSInterface(Interfaces[i]);
if Interfac.ComponentOwner = PointComponent then
begin
Port := nil;
if Interfac.IsPort = biTrue then
Port := Interfac
else
Port := Interfac.PortOwner;
//*** Íàéòè èíòåðôåéñ îò ëèíåéíîé êîìïîíåíòû
InterfacLineComponent := nil;
for j := 0 to LineComponent.Interfaces.Count - 1 do
if Interfac.ConnectedInterfaces.IndexOf(LineComponent.Interfaces[j]) <> -1 then
begin
InterfacLineComponent := LineComponent.Interfaces[j];
Break; //// BREAK ////
end;
if InterfacLineComponent <> nil then
begin
//RelInterfConnPositions :=
if Assigned(Port) then
begin
ANppPort := GetNppPortByConnected(Port, Interfac, InterfacLineComponent, -1, @PortFromPos, @PortToPos); //Port.NppPort;
APortName := Port.LoadName;
//05.10.2013 - åñëè ïîäêëþ÷åíû êàáåëåì ê èíòåðôåéñó, òî âåðíåì åãî ïîðò ñ ïîçèöèÿìès
if Interfac.IsPort = biFalse then
begin
if aPort <> nil then
TObject(aPort^) := Port;
if aPortFromPos <> nil then
aPortFromPos^ := PortFromPos;
if aPortToPos <> nil then
aPortToPos^ := PortToPos;
end;
Break; ///// BREAK /////
end;
//FreeAndNil(RelInterfConnPositions);
end;
end;
end;
finally
Interfaces.Free;
end;
end;
//SCSComponent := GSCSBase.CurrProject.GetComponentFromReferences(AIDPointComponent);
{if Assigned(SCSComponent) then
for i := 0 to SCSComponent.Interfaces.Count - 1 do
begin
Interfac := SCSComponent.Interfaces[i];
if Interfac.IsPort = biTrue then
begin
ANppPort := Interfac.NppPort;
APortName := DM.GetInterfName(Interfac.ID_Interface);
end;
end;}
end;
end;
function TF_ResourceReport.GetMultiPortNameMark(APointComponent: TSCSComponent; ARetIndexIfNoMark: Boolean): String;
var
CurrParentComponent: TSCSComponent;
ResComponent: TSCSComponent;
begin
Result := '';
if APointComponent <> nil then
begin
ResComponent := APointComponent;
CurrParentComponent := APointComponent;
while CurrParentComponent <> nil do
begin
if CurrParentComponent.ComponentType.PortKind = pkMultiPort then
begin
ResComponent := CurrParentComponent;
Break; //// BREAK ////
end;
CurrParentComponent := CurrParentComponent.GetParentComponent;
end;
if ResComponent.NameMark <> '' then
Result := ResComponent.NameMark
else
if ARetIndexIfNoMark then
Result := ResComponent.NameMark; //IntToStr(ResComponent.MarkID);
end;
end;
function TF_ResourceReport.GetParallelInterfaces(AFirstConnCompon, AFirstLineCompon, ALastConnCompon, ALastLineCompon: TSCSComponent): TInterfLists;
var InterfacesFirst: TList;
InterfacesLast: TList;
ConnectedInterfFirst: TInterfLists;
ConnectedInterfLast: TInterfLists;
ptrInterfFirst: TSCSInterface;
ptrInterfLast: TSCSInterface;
i, j: Integer;
begin
Result.InterfList1 := nil;
Result.InterfList2 := nil;
Result.InterfList1 := TList.Create;
Result.InterfList2 := TList.Create;
ConnectedInterfFirst := AFirstConnCompon.GetConnectedInterfacesToCompon(AFirstLineCompon);
ConnectedInterfLast := ALastConnCompon.GetConnectedInterfacesToCompon(ALastLineCompon);
//*** Ïîðòû â ïåðâóþ î÷åðåäü
for i := 0 to ConnectedInterfFirst.InterfList1.Count - 1 do
begin
ptrInterfFirst := ConnectedInterfFirst.InterfList1[i];
if Result.InterfList1.IndexOf(ptrInterfFirst) = -1 then
if ptrInterfFirst.IDConnected <> 0 then
for j := 0 to ConnectedInterfLast.InterfList1.Count - 1 do
if TSCSInterface(ConnectedInterfLast.InterfList1[j]).ID = ptrInterfFirst.IDConnected then
if Result.InterfList2.IndexOf(ConnectedInterfLast.InterfList1[j]) = -1 then
begin
Result.InterfList1.Add(ptrInterfFirst);
Result.InterfList2.Add(ConnectedInterfLast.InterfList1[j]);
Break; ///// BREAK /////
end;
end;
for i := 0 to ConnectedInterfFirst.InterfList1.Count - 1 do
begin
ptrInterfFirst := ConnectedInterfFirst.InterfList1[i];
if Result.InterfList1.IndexOf(ptrInterfFirst) = -1 then
if ptrInterfFirst.IDConnected = 0 then
for j := 0 to ConnectedInterfLast.InterfList1.Count - 1 do
if TSCSInterface(ConnectedInterfLast.InterfList1[j]).ID_Interface = ptrInterfFirst.ID_Interface then
if Result.InterfList2.IndexOf(ConnectedInterfLast.InterfList1[j]) = -1 then
begin
Result.InterfList1.Add(ptrInterfFirst);
Result.InterfList2.Add(ConnectedInterfLast.InterfList1[j]);
Break; ///// BREAK /////
end;
end;
//*** Äîáàâèòü èíòåðôåéñû êîòîðûå íå çàíåñåíû â ñïèñêè
for i := 0 to ConnectedInterfFirst.InterfList1.Count - 1 do
if Result.InterfList1.IndexOf(ConnectedInterfFirst.InterfList1[i]) = -1 then
Result.InterfList1.Add(ConnectedInterfFirst.InterfList1[i]);
for i := 0 to ConnectedInterfLast.InterfList1.Count - 1 do
if Result.InterfList2.IndexOf(ConnectedInterfLast.InterfList1[i]) = -1 then
Result.InterfList2.Add(ConnectedInterfLast.InterfList1[i]);
end;
function TF_ResourceReport.GetUOMLengthMin: String;
begin
Result := '';
if CheckIsTradUOM(TF_Main(GForm).FUOM) then
Result := GetNameUOM(umInch, true)
else
Result := GetNameUOM(umMillimetr, true);
end;
function TF_ResourceReport.GetUOMWithOrthographMarks: String;
begin
Result := ', ('+GetNameUOM(TF_Main(GForm).FUOM, true)+')';
end;
function TF_ResourceReport.GetUOMWeight: String;
begin
Result := '';
if CheckIsTradUOM(TF_Main(GForm).FUOM) then
Result := GetNameUOM(umPound, true)
else
Result := GetNameUOM(umKg, true);
end;
function TF_ResourceReport.GetUOMWeightOrthographMarks: String;
begin
Result := ', '+GetUOMWeight;
end;
procedure TF_ResourceReport.FormMdiClose(Sender: TObject; var Action: TCloseAction);
begin
FormList.Remove(Sender);
//if Report.Preview = TF_Preview(Sender).frPreview1 then
// Report.Preview := nil;
Action := caFree;
end;
procedure TF_ResourceReport.ApplMinimize(Sender: TObject);
var
i: integer;
//SavedOnAppMinimize: TNotifyEvent;
begin
for i := 0 to FormList.Count - 1 do
begin
TF_Preview(FormList.Items[i]).Hide; // WindowState := wsMinimized;
end;
//SavedOnAppMinimize := Application.OnMinimize;
//Application.OnMinimize := nil;
try
if Assigned(FSavedOnAppMinimize) then
FSavedOnAppMinimize(nil);
except
end;
//Application.OnMinimize := SavedOnAppMinimize;
end;
procedure TF_ResourceReport.ApplRestore(Sender: TObject);
var
i: integer;
//SavedOnAppRestore: TNotifyEvent;
begin
for i := 0 to FormList.Count - 1 do
begin
TF_Preview(FormList.Items[i]).Show; // WindowState := wsMinimized;
end;
//SavedOnAppRestore := Application.OnRestore;
//Application.OnRestore := nil;
try
if Assigned(FSavedOnAppRestore) then
FSavedOnAppRestore(nil);
except
end;
//Application.OnRestore := SavedOnAppRestore;
end;
procedure TF_ResourceReport.DefinePrecisions;
begin
FPricePrecision := 3;
FKolvoPrecision := 3;
if nePricePrecision.Enabled then
FPricePrecision := nePricePrecision.IntValue;
if neKolvoPrecision.Enabled then
FKolvoPrecision := neKolvoPrecision.IntValue;
end;
procedure TF_ResourceReport.DefineRepDesignLanguage;
begin
if FileExists(GetPathToRepDesignLang) then
begin
FFrLocale.UnloadDll;
FFrLocale.LoadDll(GetPathToRepDesignLang);
end;
end;
function TF_ResourceReport.ExtractDirToNewReport(ADateTime: TDateTime): String;
var
CurrDateTime: TDateTime;
begin
Result := '';
try
CurrDateTime := ADateTime;
if CurrDateTime = 0 then
CurrDateTime := Now;
if (rkProject in FReportUseKind) or (rkMarkPages in FReportUseKind) then
begin
if rkProject in FReportUseKind then
Result := ExtractSaveDir + '\'+cResourceReport_Msg28
else
if rkMarkPages in FReportUseKind then
Result := ExtractSaveDir + '\'+cResourceReport_Msg37;
if Not DirectoryExists(Result) then
CreateDir(Result);
end
else
//24.02.2011 if rkCalc in FReportUseKind then
if IsSimpleReportKind(FReportUseKind) then
begin
Result := ExtractSaveDirSimple +'\!'+cResourceReport_Msg1_12;
if Not DirectoryExists(Result) then
CreateDir(Result);
if DirectoryExists(Result) then
begin
Result := Result +'\'+ FileNameCorrect(DateToStr(CurrDateTime));
if Not DirectoryExists(Result) then
CreateDir(Result);
end;
end;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ExtractDirToNewReport', E.Message);
end;
end;
function TF_ResourceReport.ExtractDirToReportTemplate(AReportName: String): String;
var
DirNameFromUseKind: String;
begin
Result := '';
Result := ExtractSaveDirSimple;
DirNameFromUseKind := '';
if (rkProject in FReportUseKind) or
//24.02.2011 (rkCalc in FReportUseKind)
IsSimpleReportKind(FReportUseKind)
then
DirNameFromUseKind := cResourceReport_Msg31
else
if rkMarkPages in FReportUseKind then
DirNameFromUseKind := cResourceReport_Msg35;
DirNameFromUseKind := FileNameCorrect(DirNameFromUseKind);
if DirNameFromUseKind <> '' then
begin
Result := Result + '\!'+DirNameFromUseKind;
if Not DirectoryExists(Result) then
CreateDir(Result);
if DirectoryExists(Result) then
if AReportName <> '' then
begin
Result := Result + '\' + FileNameCorrect(AReportName);
if Not DirectoryExists(Result) then
CreateDir(Result);
end;
end;
end;
function TF_ResourceReport.GetTargetFolder: TSCSCatalog;
begin
Result := nil;
if Assigned(tvReportTarget.Selected) then
Result := TSCSCatalog(tvReportTarget.Selected.Data)
end;
procedure TF_ResourceReport.ShowWizard(AReportUseKind: TReportUseKinds; AShow: Boolean=true);
var
CanReport: Boolean;
ProjectNode: TFlyNode;
NodeToSelect: TFlyNode;
ListNode: TFlyNode;
SCSObject: TSCSCatalog;
SCSList: TSCSList;
i: Integer;
SelItemType: Integer;
SelObjectID: Integer;
ProjManNode: TTreeNode;
ProjManNodeDat: PObjectData;
FlyNodes: TFlyNodes;
ReportNode: TFlyNode;
RepObjects: TSCSCatalogs;
function AddObjectToTree(AParentNode: TFlyNode; AObject: TSCSCatalog): TFlyNode;
var
SCSList: TSCSList;
begin
Result := tvReportTarget.Items.AddChild(AParentNode, AObject.GetNameForVisible(false));
//Result.ImageIndex := tciiList;
Result.ImageIndex := TF_Main(GForm).GetImageIndexByObjectData(nil, AObject.ItemType, ekNone, AObject);
Result.SelectedIndex := Result.ImageIndex;
Result.Data := AObject;
Result.Cells[tciCAD] := bsTrue;
SCSList := nil;
if AObject is TSCSList then
SCSList := TSCSList(AObject);
if Assigned(SCSList) {and CheckListNormalType(SCSList.CurrID)} then
begin
SCSList.IsNormalType := CheckListNormalType(SCSList.CurrID);
if Not SCSList.IsNormalType then
Result.Cells[tciReport] := bsGray;
//Result.Hidden := SCSList.IsNormalType;
end;
// Äëÿ ïàïêè ëî÷èì ïå÷àòü ëèòà
if AObject.ItemType = itDir then
Result.Cells[tciCAD] := bsGray;
// Åñëè îáúåêò äîáàâëÿåì â ïàïêó, òî äåëàåì åãî îòêëþ÷åííûì ïî óìîë÷àíèþ äëÿ ïàêåòíîé ïå÷àòè
//if TObject(AParentNode.Data) is TSCSCatalog then
// if TSCSCatalog(AParentNode.Data).ItemType = itDir then
// Result.Cells[tciReport] := bsFalse;
if (AObject.ItemType = SelItemType) and (AObject.ID = SelObjectID) then
NodeToSelect := Result;
if Not AParentNode.Expanded then
AParentNode.Expanded := true;
end;
procedure AddChildObjectsToTree(AObjectNode: TFlyNode; AObject: TSCSCatalog; ALevel: Integer);
var
ChildCatalogs: TSCSCatalogs;
ChildCatalog: TSCSCatalog;
ChildCatalogNode: TFlyNode;
i: Integer;
begin
ChildCatalogs := TSCSCatalogs.Create(false);
TF_Main(GForm).LoadCatalogs(AObject.ID, ALevel, ChildCatalogs, qmMemory);
for i := 0 to ChildCatalogs.Count - 1 do
begin
ChildCatalog := ChildCatalogs[i];
if (ChildCatalog.ItemType = itList) or (ChildCatalog.ItemType = itDir) then
begin
ChildCatalogNode := AddObjectToTree(AObjectNode, ChildCatalog);
AddChildObjectsToTree(ChildCatalogNode, ChildCatalog, ALevel+1);
end;
end;
FreeAndNil(ChildCatalogs);
end;
begin
FReportUseKind := AReportUseKind;
// Form Caption
if (rkProject in AReportUseKind) or
//24.02.2011 (rkCalc in AReportUseKind)
IsSimpleReportKind(AReportUseKind)
then
begin
Caption := cResourceReport_Msg28;
tvReports.Columns[rciStamp].Visible := true;
btExportTemplateToFile.Style := ComCtrls.tbsDropDown;
btEditTemplate.Style := ComCtrls.tbsDropDown;
btDelTemplate.Style := ComCtrls.tbsDropDown;
pmnuiExportTemplates.Visible := true;
pmnuiEdit.Visible := true;
pmnuiDel.Visible := true;
Act_ExportTemplateToFile.Visible := false;
Act_EditTemplate.Visible := false;
Act_DeleteTemplate.Visible := false;
Act_EditReportSortInfo.Visible := true;
Act_NewSimpleTemplateFromStandart.Visible := true;
Act_NewSimpleTemplateFromUser.Visible := true;
Act_NewStampTemplateFromStandart.Visible := true;
Act_NewStampTemplateFromUser.Visible := true;
Act_ExportSimpleTemplateToFile.Visible := true;
Act_ExportStampTemplateToFile.Visible := true;
Act_EditSimpleTemplate.Visible := true;
Act_EditStampTemplate.Visible := true;
Act_DeleteSimpleTemplate.Visible := true;
Act_DeleteStampTemplate.Visible := true;
Act_NewMarkPage.Visible := false;
Act_NewMarkPageFromUser.Visible := false;
//pmnuiImportTemplate.MenuIndex := pmnuiNewTemplate.MenuIndex + 1;
if rkCablePath in AReportUseKind then
pcRepParams.ActivePage := tsCablePathParams
else
pcRepParams.ActivePage := tsProjRepParams;
FcbCanHaveActiveComponentsCurr := cbCanHaveActiveComponents;
FcbCanHaveDismountAccountCurr := cbCanHaveDismountAccount;
//tvReports.Options := tvReports.Options - [goRowSizing];
//tvReports.WordWrap := false;
//tvReports.FitToHeight := false;
//tvReports.WordWrap := false;
end
else
if rkMarkPages in AReportUseKind then
begin
Caption := cResourceReport_Msg29;
tvReports.Columns[rciStamp].Visible := false;
btExportTemplateToFile.Style := tbsButton;
btEditTemplate.Style := tbsButton;
btDelTemplate.Style := tbsButton;
pmnuiExportTemplates.Visible := false;
pmnuiEdit.Visible := false;
pmnuiDel.Visible := false;
Act_ExportTemplateToFile.Visible := true;
Act_EditTemplate.Visible := true;
Act_DeleteTemplate.Visible := true;
Act_EditReportSortInfo.Visible := false;
Act_NewSimpleTemplateFromStandart.Visible := false;
Act_NewSimpleTemplateFromUser.Visible := false;
Act_NewStampTemplateFromStandart.Visible := false;
Act_NewStampTemplateFromUser.Visible := false;
Act_ExportSimpleTemplateToFile.Visible := false;
Act_ExportStampTemplateToFile.Visible := false;
Act_EditSimpleTemplate.Visible := false;
Act_EditStampTemplate.Visible := false;
Act_DeleteSimpleTemplate.Visible := false;
Act_DeleteStampTemplate.Visible := false;
Act_NewMarkPage.Visible := true;
Act_NewMarkPageFromUser.Visible := true;
//pmnuiImportTemplate.MenuIndex := pmnuiExportTemplate.MenuIndex - 1;
pcRepParams.ActivePage := tsMarkPagesParams;
FcbCanHaveActiveComponentsCurr := cbCanHaveActiveComponentsMarkPages;
FcbCanHaveDismountAccountCurr := cbCanHaveDismountAccountMarkPages;
//tvReports.Options := tvReports.Options + [goRowSizing];
//tvReports.WordWrap := true;
//tvReports.FitToHeight := true;
//tvReports.WordWrap := true;
end;
rbModeView.Checked := true;
FReportCaption := '';
CanReport := true;
if (rkProject in AReportUseKind) or (rkMarkPages in AReportUseKind) then
begin
//*** Íàòè áîëåå ïîäõîäÿùèé îáúåêò äëÿ îò÷åòà, â çàâèñèñìîñòè, ãäå âûäåëåíèå â ÌÏ
SelItemType := -1;
SelObjectID := -1;
with TF_Main(GForm) do
begin
SelItemType := itProject;
SelObjectID := GSCSBase.CurrProject.ID;
ProjManNode := nil;
ProjManNode := GetParentNodeByItemType(Tree_Catalog.Selected, [itList]);
ProjManNodeDat := nil;
if ProjManNode <> nil then
ProjManNodeDat := ProjManNode.Data;
if ProjManNodeDat <> nil then
if ProjManNodeDat.ItemType = itList then
begin
SelItemType := ProjManNodeDat.ItemType;
SelObjectID := ProjManNodeDat.ObjectID;
end;
end;
CanReport := false;
//ClearTreeView(tvReportTarget);
tvReportTarget.Items.Clear;
with F_ProjMan do
if Assigned(GSCSBase) then
if Assigned(GSCSBase.CurrProject) then
if GSCSBase.CurrProject.Active then
begin
ProjectNode := tvReportTarget.Items.Add(nil, GSCSBase.CurrProject.GetNameForVisible(false));
ProjectNode.ImageIndex := tciiProject;
ProjectNode.SelectedIndex := ProjectNode.ImageIndex;
ProjectNode.Data := GSCSBase.CurrProject;
ProjectNode.Cells[tciCAD] := bsGray;
ProjectNode.Cells[tciReport] := bsTrue;
NodeToSelect := ProjectNode;
{RepObjects := GetChildCatalogsInPlacingOrder(GSCSBase.CurrProject, [itDir, itList]);
for i := 0 to RepObjects.Count - 1 do
begin
SCSObject := RepObjects[i]; //GSCSBase.CurrProject.ProjectLists[i];
ListNode := tvReportTarget.Items.AddChild(ProjectNode, SCSObject.GetNameForVisible(false));
ListNode.ImageIndex := tciiList;
ListNode.SelectedIndex := ListNode.ImageIndex;
ListNode.Data := SCSObject;
ListNode.Cells[tciCAD] := bsTrue;
SCSList := nil;
if SCSObject is TSCSList then
SCSList := TSCSList(SCSObject);
if Assigned(SCSList) //and CheckListNormalType(SCSList.CurrID) then
begin
SCSList.IsNormalType := CheckListNormalType(SCSList.CurrID);
if Not SCSList.IsNormalType then
ListNode.Cells[tciReport] := bsGray;
//ListNode.Hidden := SCSList.IsNormalType;
end;
if (SCSObject.ItemType = SelItemType) and (SCSObject.ID = SelObjectID) then
NodeToSelect := ListNode;
end;
FreeAndNil(RepObjects);}
AddChildObjectsToTree(ProjectNode, GSCSBase.CurrProject, 0);
ProjectNode.Expanded := true;
tvReportTarget.Selected := NodeToSelect;
CanReport := true;
end;
end;
gbTarget.Visible := (rkProject in AReportUseKind) or (rkMarkPages in AReportUseKind);
splitTarget.Visible := gbTarget.Visible;
//gbParams.Enabled := (rkProject in AReportUseKind);
gbParams.Enabled := (rkProject in AReportUseKind) or (rkMarkPages in AReportUseKind) or (rkCablePath in AReportUseKind) or (rkCrossConnection in AReportUseKind);
nePricePrecision.IntValue := GSCSIni.PM.RepPricePrecision;
neKolvoPrecision.IntValue := GSCSIni.PM.RepKolvoPrecision;
if CanReport then
begin
// Îïðåäåëèòü øàáëîíû îò÷åòîâ
DefineRepTemplates;
// Ïîäãðóçèòü èíôó äëÿ ñîðòèðîâêè äàííûõ â îò÷åòàõ
if Not (rkMarkPages in AReportUseKind) then
DefineRepSortInfo;
DefineReportModeControls;
// Íàñòðîèòü âèäèìîñòü îò÷åòîâ
tvReports.OnSelectedChanged := nil;
try
for i := 0 to tvReports.Items.Count - 1 do
begin
ReportNode := tvReports.Items[i];
if TReportItemParams(ReportNode.Data).ReportUseKind in AReportUseKind then
begin
ReportNode.Show(false);
// Åñëè îò÷åò îòìå÷åí è áåç øàáëîíà, òî ñíÿòü îòìåòêó
if ReportNode.Cells[rciIsOn] = bsTrue then
if TReportItemParams(ReportNode.Data).FSimpleShablons.FActiveShablonID = -1 then
ReportNode.Cells[rciIsOn] := bsFalse;
end
else
ReportNode.Hide;
{$IF Defined(NORMSCS_PE) or Defined(SCS_SPA)}
case TReportItemParams(ReportNode.Data).RepType of
rtNorms:
ReportNode.Hide;
end;
{$IFEND}
{$IF Defined(SCS_PE) or Defined(SCS_PANDUIT) or Defined(SCS_SPA)}
case TReportItemParams(ReportNode.Data).RepType of
rtHouse, rtDefectAct:
ReportNode.Hide;
end;
{$IFEND}
end;
finally
tvReports.OnSelectedChanged := tvReportsSelectedChanged;
end;
DefineReportNodeControls(tvReports.Selected, true);
if AShow then
ShowModal
else
Act_ShowWizardReport.Execute;
end
else
ShowMessageByType(Self.Handle, smtDisplay, cResourceReport_Msg3, Application.Title, MB_OK or MB_ICONINFORMATION);
end;
procedure TF_ResourceReport.ShowPreparedReport(AParams: TReportItemParams);
var
ReportItemParams: TReportItemParams;
CurrReportShablons: TReportShablons;
TemplateType: Integer;
ReportFileName: String;
ReportFilePath: String;
IsTemplate: Boolean;
begin
ReportFileName := '';
ReportFilePath := '';
//*** Îïðåäåëèòü øàáëîí îò÷åòà
ReportItemParams := nil;
//if tvReports.Selected <> nil then
// ReportItemParams := TReportItemParams(tvReports.Selected.Data);
ReportItemParams := AParams;
IsTemplate := false;
if ReportItemParams <> nil then
begin
//*** Îïðååëèòü òåêóùèé òèï øàáëîíà
TemplateType := ttSimple;
if cbReportWithStamp.Enabled and cbReportWithStamp.Checked then
TemplateType := ttStamp;
//*** Îïðåäåëèòü ïàðàìåòðû òåêùåãî øàáëîíà
CurrReportShablons := ReportItemParams.GetShablonsByTemplateType(TemplateType);
//*** Åñëè øàáëîí íå ñòàíäàðòíûé, òî èçâëå÷ åãî â ôàéë
if (CurrReportShablons <> nil) and (CurrReportShablons.FActiveShablonID > 0) then
begin
IsTemplate := true;
ReportFileName := GetReportFileNameByType(ReportItemParams.RepType, TemplateType, false);
//showmessage(ReportFileName);
if ReportFileName <> '' then
ReportFilePath := GetPathToUserReportFile(ReportFileName);
if ReportFilePath <> '' then
begin
if FileExists(ReportFilePath) then
if Not DeleteFile(ReportFilePath) then
ReportFilePath := GetNoExistsFileNameForCopy(ReportFilePath);
if ReportFilePath <> '' then
TF_Main(GForm).DM.SaveUserReportByIDToFile(CurrReportShablons.FActiveShablonID, ReportFilePath);
end;
end;
end;
//ShowReport(GFormMode, ReportFilePath, pdScreen);
ShowReportFromFile(GFormMode, AParams, ReportFilePath, FPrintDevice, IsTemplate, meNone);
end;
procedure TF_ResourceReport.ShowReportByParams(AFolder: TSCSCatalog; AParams: TReportItemParams);
var
CanHaveActiveComponents: Boolean;
CanHaveZeroPriceComponents: Boolean;
CanHaveDismountAccount: Boolean;
ComponsWithZeroPrice: Boolean;
CanRoundValue: Boolean;
CanHaveSupplyValue: Boolean;
CanShowKabinet : Boolean;
CanShowObjHierarchy : Boolean;
CanGroupByName : Boolean;
CanShowResources : Boolean;
CanShowworks : Boolean;
FormMode: TResourceReportFormMode;
FullPathInCableJournal: Boolean;
CurrReportItemParamValues: TReportItemParams;
TestRep: Boolean;
begin
if AFolder is TSCSProject then
TSCSProject(AFolder).NotifyBeforeReport;
CanHaveActiveComponents := FcbCanHaveActiveComponentsCurr.Checked; //ptrReportItemParams^.CanHaveActiveComponents = biTrue;
CanHaveZeroPriceComponents := cbCanHaveZeroPriceComponents.Checked; //ptrReportItemParams^.CanHaveZeroPriceComponents = biTrue;
CanHaveDismountAccount := FcbCanHaveDismountAccountCurr.Checked;
ComponsWithZeroPrice := cbCanHaveZeroPriceComponents.Checked;
CanRoundValue := cbCanRoundValue.Checked;
CanHaveSupplyValue := cbCanHaveSupplyValue.Checked;
// added by Tolik
CanShowKabinet := (cbCanShowKabinet.Checked and cbCanShowKabinet.Enabled);
CanShowObjHierarchy :=(cbCanShowObjHierarchy.Checked and cbCanShowObjHierarchy.Enabled);
CanGroupByName := (cbCanGroupByName.Checked and cbCanGroupByName.Enabled);
CanShowResources := cbCanShowResources.Checked;
CanShowWorks := cbCanShowWorks.Checked;
/////////
CurrReportItemParamValues := GetCurrReportItemParamValues;
if (AParams <> nil) and (Assigned(AFolder) or
//24.02.2011 (rkCalc in FReportUseKind)
IsSimpleReportKind(FReportUseKind)) then
begin
FormMode := AParams.Mode;
FullPathInCableJournal := cbFullPathInCableJournal.Checked; //ptrReportItemParams.FullPathInCableJournal = biTrue;
case AParams.Mode of
fmRResources:
if rbRepModeDocument.Checked then
ShowFolderResourceReport(AFolder, AParams, CanHaveActiveComponents, CanHaveDismountAccount,
ComponsWithZeroPrice, CanRoundValue, CanHaveSupplyValue)
else
if rbRepModeForm.Checked then
begin
TF_Main(GForm).CreateFReportForm;
TF_Main(GForm).F_ReportForm.Execute(AFolder, FReportCaption,
AParams.Mode, true, true, true);
end;
fmRCable, fmRCableExceedLength, fmRCableCanal:
ShowFolderCableReport(AFolder, AParams , AParams.Mode, CanHaveActiveComponents, CanHaveDismountAccount, CurrReportItemParamValues);
//fmRDisparityComponColor, fmRDisparityComponProducer:
//ShowFolderDisparityComponReport(SCSCatalog, ptrReportItemParams.Mode);
fmRCableJournal:
begin
ShowFolderCableJournal(AFolder, AParams, FormMode, CanHaveActiveComponents, CanHaveDismountAccount, FullPathInCableJournal);
end;
fmRCableJournalExt:
ShowFolderCableJournalExt(AFolder, AParams, CanHaveActiveComponents, CanHaveDismountAccount, FullPathInCableJournal);
fmRGOSTCableJournal:
ShowFolderCableJournal(AFolder, AParams, FormMode, CanHaveActiveComponents, CanHaveDismountAccount, false);
fmRSpecification, fmRGOSTSpecification:
begin
if FormMode = fmRGOSTSpecification then
if rbPageSizeA3.Checked then
FormMode := fmRGOSTSpecificationA3
else
if rbPageSizeA4.Checked then
FormMode := fmRGOSTSpecification;
ShowFolderSpecificationReport(AFolder, AParams, CurrReportItemParamValues, FormMode,
CanHaveActiveComponents, CanHaveZeroPriceComponents, CanHaveDismountAccount, CanRoundValue, CanHaveSupplyValue);
end;
//fmRTypeComponents:
//ShowFolderTypeComponenetsReport(SCSCatalog);
fmRNorms:
ShowFolderNormReport(AFolder, AParams, CanHaveActiveComponents);
fmRExplanatoryReport:
ShowFolderExplanatoryReport(AFolder, AParams);
fmRLegendObjectIcons:
ShowFolderLegendObjectIcons(AFolder, AParams, CanHaveActiveComponents);
fmRExplicationRoom:
ShowExplicationRoom(AFolder, AParams, CurrReportItemParamValues);
fmRExplicationComponent:
begin
// Äîáàâëåíû ïàðàìåòðû îò÷åòà (ôëàãè äëÿ ïåðåñ÷åòà ñòîèìîñòè êîìïîíåíò è âûâîäà èåðàðõèè îáúåêòîâ) Tolik
TestRep := False;
if TestRep then
ShowExplicationComponentOLD(AFolder, AParams, CurrReportItemParamValues)
else
ShowExplicationComponent(AFolder, AParams, CurrReportItemParamValues,CanHaveActiveComponents, CanHaveDismountAccount,
ComponsWithZeroPrice,CanRoundValue, CanHaveSupplyValue, CanShowKabinet, CanShowObjHierarchy, CanGroupByName);
end;
fmRCrossJournal, fmRGOSTCrossJournal:
ShowCrossJournal(AFolder, AParams, CurrReportItemParamValues, AParams.Mode);
fmCommerceInvoice:
ShowCommerceInvoice(AFolder, AParams, CurrReportItemParamValues);
fmRHouse:
ShowHouse(AFolder, AParams, CurrReportItemParamValues);
fmRDefectAct:
ShowDefectAct(AFolder, AParams, CurrReportItemParamValues, AParams.Mode);
fmRPriorCostOfProject:
ShowPriorCostOfProjectReport(AParams);
fmCompoSpecification:
ShowComponSpecifications(AFolder, AParams, CurrReportItemParamValues);
fmRCablePaths:
ShowCablePaths(AParams);
fmRCrossConnection:
ShowCrossConnection(AParams);
fmRMarkRoomTS, fmRMarkPathPanel, fmRMarkPathPanelPorts, fmRMarkSocket, fmRMarkSocketPanel, fmRMarkCable:
ShowMarkPages(AFolder, AParams, AParams.Mode, CurrReportItemParamValues);
end;
end;
FreeAndNil(CurrReportItemParamValues);
end;
function TF_ResourceReport.ShowReportFromFile(AReportMode: TResourceReportFormMode; AParams: TReportItemParams;
AReportFile: String; APrintDevice: TPrintDevice; AIsTemplate: Boolean; AMakeEditTemplate: TMakeEdit): Boolean;
var
SCSDir: String;
ReportFile: String;
DocName: String;
i: Integer;
//frOLEExcelExport: TMyfrOleExl;
frExport: TfrBasicExpFilter;
ProgressCaption: String;
ExtensionName: String;
begin
Result := false;
try
frExport := nil;
ReportFile := '';
if (AReportFile <> '') and FileExists(AReportFile) then
ReportFile := AReportFile
else
begin
{$if Defined(ES_GRAPH_SC)}
SCSDir := ExeDir + '\';
{$else}
SCSDir := ExtractFilePath(paramstr(0));
{$ifend}
ReportFile := GetReportFileNameByType(AParams.RepType, GetTemplateTypeByCurrOptions, rbPageSizeA3.Checked);
ReportFile := SCSDir + dnReports + '\'+ReportFile;
end;
if FileExists(ReportFile) then
begin
frDBDataSet_Detail.DataSource := nil;
case GFormMode of
//added by Tolik
fmWACoordinates:
FReportCaption := cResourceReport_Msg1_29;
fmRResources:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnReportResources
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPResources;
frDBDataSet_Master.DataSource := DataSource_MT_RResources;
end;
fmRCable:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnReportCable
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPCable;
frDBDataSet_Master.DataSource := DataSource_MT_RCable;
end;
fmRCableExceedLength:
begin
//29.01.2009 ReportFile := ReportFile + fnReportCableExceedLength;
frDBDataSet_Master.DataSource := DataSource_MT_RCable;
end;
fmRCableCanal:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnReportCableCanal
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPCableCanal;
frDBDataSet_Master.DataSource := FdsrcCableChannelGrp; //DataSource_MT_RCableGroup;
frDBDataSet_Detail.DataSource := FdsrcCableChannel; //DataSource_MT_RCable;
end;
fmRDisparityComponColor:
begin
//29.01.2009 ReportFile := ReportFile + fnReportDisparityComponColor;
frDBDataSet_Master.DataSource := DataSource_MT_RDisparityCompColor;
end;
fmRDisparityComponProducer:
begin
//29.01.2009 ReportFile := ReportFile + fnRDisparityComponProducer;
frDBDataSet_Master.DataSource := DataSource_MT_RDisparityCompColor;
end;
fmRCableJournal:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnRCableJournal
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPCableJournal;
frDBDataSet_Master.DataSource := DataSource_MT_RCableJournal;
end;
fmRCableJournalExt:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnRCableJournalExt
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPCableJournalExt;
frDBDataSet_Master.DataSource := DataSource_MT_RCableJournalExt;
frDBDataSet_Detail.DataSource := dsrcRCableJournalInterfaces;
end;
fmRGOSTCableJournal:
begin
//29.01.2009 ReportFile := ReportFile + fnRGOSTCableJournal;
frDBDataSet_Master.DataSource := DataSource_MT_RCableJournal;
end;
fmRTypeComponents:
begin
//29.01.2009 ReportFile := ReportFile + fnRTypeComponents;
frDBDataSet_Master.DataSource := DataSource_MT_RTypeComponents;
frDBDataSet_Detail.DataSource := DataSource_MT_RTypeComponentsDetail;
end;
fmRSpecification, fmRGOSTSpecification, fmRGOSTSpecificationA3:
begin
//29.01.2009 if GFormMode = fmRSpecification then
//29.01.2009 ReportFile := ReportFile + fnRSpecification;
//29.01.2009 if GFormMode = fmRGOSTSpecification then
//29.01.2009 ReportFile := ReportFile + fnRGOSTSpecification;
//29.01.2009 if GFormMode = fmRGOSTSpecificationA3 then
//29.01.2009 ReportFile := ReportFile + fnRGOSTSpecificationA3;
//29.01.2009 if ReportFile <> '' then
begin
frDBDataSet_Master.DataSource := DataSource_MT_RSpecifTypeCompon;
frDBDataSet_Detail.DataSource := DataSource_MT_RSpecification;
end;
end;
fmRNorms:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnRNorms
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPNorms;
frDBDataSet_Master.DataSource := DataSource_MT_RNorms;
end;
fmRExplanatoryReport:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnRExplanatoryReport
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPExplanatoryReport;
frDBDataSet_Master.DataSource := dsrcExplanatoryProj;
frDBDataSet_Detail.DataSource := dsrcExplanatoryList;
end;
fmRLegendObjectIcons:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnRLegendObjectIcons
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPLegendObjectIcons;
frDBDataSet_Master.DataSource := dsrcRLegendObjectIcons;
end;
fmRExplicationRoom:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnRExplicationRoom
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPExplicationRoom;
frDBDataSet_Master.DataSource := FdsrcExplicationRoom; //dsrcReport;
frDBDataSet_Detail.DataSource := FdsrcExplicationRoomDetail; //dsrcReportDetail;
end;
fmRExplicationComponent:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnRExplicationComponent
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPExplicationComponent;
frDBDataSet_Master.DataSource := FdsrcExplicationCompon; //dsrcReport;
frDBDataSet_Detail.DataSource := FdsrcExplicationComponDetail; //dsrcReportDetail;
frDBDataSet_SubDetail.DataSource := FdsrcExplicationComponSubDetail; //dsrcReportSubDetail;
end;
fmRCrossJournal, fmRGOSTCrossJournal:
begin
//29.01.2009 if GFormMode = fmRCrossJournal then
//29.01.2009 ReportFile := ReportFile + fnRCrossJournal
//29.01.2009 else
//29.01.2009 if GFormMode = fmRGOSTCrossJournal then
//29.01.2009 ReportFile := ReportFile + fnRGOSTCrossJournal;
frDBDataSet_Master.DataSource := FdsrcCrossJournal; //dsrcReport;
end;
fmCommerceInvoice:
begin
frDBDataSet_Master.DataSource := FdsrcCommerceInvoice;
frDBDataSet1.DataSource := DataSource_MT_RNorms;
frDBDataSet2.DataSource := DataSource_MT_RResources;
end;
fmRCablePaths:
begin
frDBDataSet_Master.DataSource := FdsrcCablePaths;
frDBDataSet_Detail.DataSource := FdsrcCablePathsInfo;
end;
fmRCrossConnection:
frDBDataSet_Master.DataSource := FdsrcCrossConnection;
fmRHouse:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnRHouse
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPHouse;
frDBDataSet_Master.DataSource := FdsrcHouse;
frDBDataSet_Detail.DataSource := FdsrcApproach;
end;
fmRDefectAct:
begin
//29.01.2009 if Not cbReportWithStamp.Checked then
//29.01.2009 ReportFile := ReportFile + fnRDefectAct
//29.01.2009 else
//29.01.2009 ReportFile := ReportFile + fnRSTAMPDefectAct;
frDBDataSet_Master.DataSource := FdsrcDefectAct;
end;
fmRPriorCostOfProject:
begin
//29.01.2009 ReportFile := ReportFile + fnRPriorCostOfProject;
frDBDataSet_Master.DataSource := dsrcReport;
frDBDataSet_MasterFirst.DataSource := dsrcReportFirst;
end;
fmRMarkRoomTS, fmRMarkPathPanel, fmRMarkPathPanelPorts,
fmRMarkSocket, fmRMarkSocketPanel, fmRMarkCable:
begin
//frDBDataSet_Master.DataSource := dsrcReport;
case GFormMode of
fmRMarkRoomTS:
frDBDataSet_Master.DataSource := FdsrcMarkRoomTS;
fmRMarkPathPanel:
frDBDataSet_Master.DataSource := FdsrcMarkPathPanel;
fmRMarkPathPanelPorts:
frDBDataSet_Master.DataSource := FdsrcMarkPathPanelPorts;
fmRMarkSocket:
frDBDataSet_Master.DataSource := FdsrcMarkSocket;
fmRMarkSocketPanel:
frDBDataSet_Master.DataSource := FdsrcMarkSocketPanel;
fmRMarkCable:
frDBDataSet_Master.DataSource := FdsrcMarkCable;
end;
end;
//else
// Exit; //// EXIT ////
end;
frDBDataSet_MasterFirst.DataSource := dsrcReportFirst;
end;
//if (AReportFile <> '') and FileExists(AReportFile) then
// ReportFile := AReportFile;
if FileExists(ReportFile) then
begin
Application.ProcessMessages;
FMasterOldRecNo := 0;
FDetailOldRecNo := 0;
FOldRecNo := 0;
FCurrRecNo := 0;
FPassNum := 1;
FModifiedReportTemplate := false;
DocName := FReportCaption;
//DocName := ApplicationName + ' - ['+lvReports.Selected.Caption+']';
Report.Title := DocName;
Report.LoadFromFile(ReportFile);
CorrectReport(GFormMode);
if (Not AIsTemplate) or (AMakeEditTemplate = meMake) then
begin
PrepareReportFormats;
// Åñëè èäåò ñîçäàíèå øàáëîíà, òî ñîõðàíèòü â ôàéë ïîñëå êîððåêöèè ðàçäåëèòåëÿ çàïÿòîé
if AMakeEditTemplate = meMake then
if ReportFile <> '' then
Report.SaveToFile(ReportFile);
end;
//Report.Pages[0].ColWidth
//Report.Preview.col
case APrintDevice of
pdDesign:
begin
FModifiedReportTemplate := true;
//RepDesigner.CloseQuery := false;
Report.DesignReport;
Result := FModifiedReportTemplate;
end;
pdScreen{, pdPrinter}:
with TF_Main(GForm) do
begin
if FormList.Count + 1 > 5 then
begin
try
F_Preview := TF_Preview(FormList.First);
F_Preview.Free;
FormList.Remove(FormList.First);
except
end;
for i := 0 to FormList.Count-1 do
begin
F_Preview := TF_Preview(FormList.Items[i]);
F_Preview.Caption := Copy(F_Preview.Caption, 0, pos('¹', F_Preview.Caption));
F_Preview.Caption := F_Preview.Caption + IntToStr(i+1);
end;
end;
F_Preview := TF_Preview.Create(Application, GForm);
i := FormList.Add(F_Preview);
Report.Preview := F_Preview.frPreview1;
if ExtractFileName(Report.FileName)='RExplicationComponent.frf' then
begin
if (cbCanShowKabinet.Checked and cbCanShowKabinet.Enabled) then
begin
if Report.Pages.Count > 1 then
begin
Report.CanRebuild := true;
Report.Pages.Pages[0].Visible := false;
Report.Pages.Pages[1].Visible := true;
frDbDataset_master.First;
end
else
begin
ShowMessage(cMain_Mes142);
end;
end
else
begin
if Report.Pages.Count > 1 then
begin
Report.Pages.Pages[0].Visible := true;
Report.Pages.Pages[1].Visible := false;
end;
end;
end;
if ExtractFileName(Report.FileName)='RSTAMPExplicationComponent.frf' then
begin
if (cbCanShowKabinet.Checked and cbCanShowKabinet.Enabled) then
begin
if Report.Pages.Count > 2 then
begin
Report.CanRebuild := true;
Report.Pages.Pages[0].Visible := true;
Report.Pages.Pages[1].Visible := false;
Report.Pages.Pages[2].Visible := true;
frDbDataset_master.First;
end
else
begin
ShowMessage(cMain_Mes142);
end;
end
else
begin
if Report.Pages.Count > 2 then
begin
Report.Pages.Pages[0].Visible := true;
Report.Pages.Pages[1].Visible := true;
Report.Pages.Pages[2].Visible := false;
end;
end;
end;
// added by Tolik
if ExtractFileName(Report.FileName)='RCableJournal.frf' then
begin
if cbShowCablePath.Checked then
begin
if Report.Pages.Count>1 then
begin
Report.Pages.Pages[0].Visible:=false;
Report.Pages.Pages[1].Visible:=true;
end
end
else
begin
if Report.Pages.Count>1 then
begin
Report.Pages.Pages[1].Visible:=false;
Report.Pages.Pages[0].Visible:=true;
end
end;
//
end;
if ExtractFileName(Report.FileName)='RCableJournalExt.frf' then
begin
if cbShowCablePath.Checked then
begin
if Report.Pages.Count>1 then
begin
Report.Pages.Pages[0].Visible:=false;
Report.Pages.Pages[1].Visible:=true;
end
end
else
begin
if Report.Pages.Count>1 then
begin
Report.Pages.Pages[1].Visible:=false;
Report.Pages.Pages[0].Visible:=true;
end
end;
//
end;
Report.ShowReport;
if APrintDevice = pdPrinter then
F_Preview.frPreview1.Print;
//CurentReport := ReportKind;
F_Preview.Caption := ConcatStrWithDefis(DocName, cResourceReport_Msg4 + IntToStr(i+1), 1);
F_Preview.OnClose := {F_FR.}FormMdiClose;
F_Preview.ReportFileName := {F_FR.}Report.FileName;
F_Preview.ReportCaption := DocName;
if Assigned(F_Preview.frPreview1.OnMouseDown) then
EmptyProcedure;
//Report.PrintPreparedReportDlg;
case APrintDevice of
pdScreen:
begin //Screen.ActiveForm
F_Preview.Show;
//SetActiveWindow(F_Preview.Handle);
//ShowWindow(F_Preview.Handle, SW_MINIMIZE);
//ShowWindow(F_Preview.Handle, SW_RESTORE);
//SetForegroundWindow(F_Preview.Handle);
end;
pdPrinter:
F_Preview.Close;
end;
Result := true;
end;
pdExcel, pdPdf:
begin
{if FReportCountPrinted = 0 then
begin
frOLEExcelExportStartExportPageEvent(nil, cResourceReport_Msg21, 1);
TF_Main(GForm).F_ProgressExp.HideGauges;
TF_Main(GForm).F_ProgressExp.Message1.Caption := cProgressExp_Msg5;
TF_Main(GForm).F_ProgressExp.Message1.Visible := True;
Application.ProcessMessages;
end;
Report.Preview := nil;
Report.PrepareReport;
if FfrOLEExcelExport = nil then
begin
FfrOLEExcelExport := TF_Main(GForm).F_ProgressExp.CreateMyfrOleExl;
FfrOLEExcelExport.Caption := cResourceReport_Msg21;
FfrOLEExcelExport.OnStartExportPageEvent := frOLEExcelExportStartExportPageEvent;
FfrOLEExcelExport.OnProgressExportPageEvent := frOLEExcelExportProgressExportPageEvent;
FfrOLEExcelExport.OnEndExportPageEvent := frOLEExcelExportEndExportPageEvent;
end;
try
Report.ExportTo(FfrOLEExcelExport,
GetNoExistsFileNameForCopy(FPackgeDir + FileNameCorrect(FReportCaption)+' ('+FObjectName+').'+enXls));
finally
FreeAndNil(FfrOLEExcelExport);
end;}
ProgressCaption := '';
ExtensionName := '';
if APrintDevice = pdExcel then
begin
ProgressCaption := cResourceReport_Msg21;
ExtensionName := enXls;
end
else
if APrintDevice = pdPdf then
begin
ProgressCaption := cResourceReport_Msg39;
ExtensionName := enPdf;
end;
if FReportCountPrinted = 0 then
begin
frOLEExcelExportStartExportPageEvent(nil, ProgressCaption, 1);
TF_Main(GForm).F_ProgressExp.HideGauges;
TF_Main(GForm).F_ProgressExp.Message1.Caption := cProgressExp_Msg5;
TF_Main(GForm).F_ProgressExp.Message1.Visible := True;
Application.ProcessMessages;
end;
Report.Preview := nil;
Report.PrepareReport;
if frExport = nil then
begin
if APrintDevice = pdExcel then
frExport := TF_Main(GForm).F_ProgressExp.CreateMyfrOleExl
else
if APrintDevice = pdPdf then
frExport := TfrPDFExport.Create(Self);
frExport.FileCaption := ProgressCaption;
frExport.Title := DocName;
frExport.OnStartExportPageEvent := frOLEExcelExportStartExportPageEvent;
frExport.OnProgressExportPageEvent := frOLEExcelExportProgressExportPageEvent;
frExport.OnEndExportPageEvent := frOLEExcelExportEndExportPageEvent;
end;
try
Report.ExportTo(frExport,
GetNoExistsFileNameForCopy(FPackgeDir + FileNameCorrect(FReportCaption)+' ('+FObjectName+').'+ExtensionName));
finally
FreeAndNil(frExport);
end;
end;
pdPrinter:
begin
Report.Preview := nil;
Report.PrepareReport;
if FFrPrintForm = nil then
Report.PrintPreparedReportDlg
else
begin
Report.PrintPreparedReport('', StrToInt(FFrPrintForm.E1.Text),
FFrPrintForm.CollateCB.Checked, TfrPrintPages(FFrPrintForm.CB2.ItemIndex));
end;
end;
end;
//Report.ShowReport;
end;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowReport: '+E.Message);
end;
end;
function TF_ResourceReport.CheckCanShowReport(ACAtalog: TSCSCatalog): Boolean;
begin
Result := false;
if CheckIsOpenProject(true) then
if ACatalog.ItemType in [itProject, itList, itDir] then
Result := true
else
ShowMessageByType(Self.Handle, smtDisplay, cResourceReport_Msg5+' "'+ACAtalog.Name+'"', Application.Title, MB_OK or MB_ICONINFORMATION);
end;
procedure TF_ResourceReport.InitRepMsgList;
begin
if FRepMsgList = nil then
begin
FRepMsgList := CreateStringListSorted;
AddStrObjToStrings(FRepMsgList, 'COMMERCEINVOICE', cRepMsg193);
AddStrObjToStrings(FRepMsgList, 'INVOICE_BUDGET', cRepMsg194);
AddStrObjToStrings(FRepMsgList, 'INVOICE_CODE', cRepMsg195);
AddStrObjToStrings(FRepMsgList, 'INVOICE_NAT', cRepMsg196);
AddStrObjToStrings(FRepMsgList, 'INVOICE_UOM', cRepMsg197);
AddStrObjToStrings(FRepMsgList, 'INVOICE_NAME', cRepMsg198);
AddStrObjToStrings(FRepMsgList, 'INVOICE_QT', cRepMsg199);
AddStrObjToStrings(FRepMsgList, 'INVOICE_PRICE', cRepMsg200);
AddStrObjToStrings(FRepMsgList, 'INVOICE_COST', cRepMsg201);
// Cable Paths
AddStrObjToStrings(FRepMsgList, 'CABPATH_REPNAME', cRepMsg202);
AddStrObjToStrings(FRepMsgList, 'CABPATH_NAME', cRepMsg203);
AddStrObjToStrings(FRepMsgList, 'CABPATH_FOR', cRepMsg204);
//Cross-connection
AddStrObjToStrings(FRepMsgList, 'CROSSCONNECTION_REPNAME', cRepMsg205);
AddStrObjToStrings(FRepMsgList, 'CROSSCONNECTION_WITH', cRepMsg206);
//19.11.2013 Labor time
AddStrObjToStrings(FRepMsgList, 'LABOR_TIME', cRepMsg207);
AddStrObjToStrings(FRepMsgList, 'PRICE_PER_TIME_BEFORE', cRepMsg208_1);
AddStrObjToStrings(FRepMsgList, 'PRICE_PER_TIME_AFTER', cRepMsg208_2);
AddStrObjToStrings(FRepMsgList, 'TOTAL_LABOR_TIME', cRepMsg209);
AddStrObjToStrings(FRepMsgList, 'VOLUME_QTY', cRepMsg210);
AddStrObjToStrings(FRepMsgList, 'TOTALCOSTTAX', cRepMsg211);
end;
end;
// ##### Ïîêàçûâàåò îò÷åò âåäîìîñòè îáúåêòîâ Ëèñòà #####
procedure TF_ResourceReport.ShowListObjectReport(AIDComponList: Integer);
(*
var ListSCSObjects: TList;
ptrSCSObject: PSCSCatalog;
SCSList: TSCSCatalog;
ptrSCSNorm: PSCSNorm;
ptrSCSComponent: PSCSComponent;
ptrSCSComplect: PSCSComponent;
i, j, k, l: Integer;
ListWorkCost: Double;
ComponCount: integer;
ObjectLength: Double;
procedure ResourcesWrite(ACompon: PSCSComponent; AIsCompon: Boolean; APref: Integer);
var i, j: integer;
ptrSCSNorm: PSCSNorm;
// ptrResource: PResource;
begin
(* if AIsCompon then
RepComponWrite(ACompon.Name, AIsCompon, ACompon.TotalCost, APref)
else
RepComponWrite(ACompon.Name, AIsCompon, ACompon.ResourcesCost, APref);
RepResourcesWrite(ACompon.ResourcesCost {- ACompon.PRICE_CALC + ACompon.PRICE}, APref + 4);
for i := 0 to ACompon.Norms.Count - 1 do
begin
ptrSCSNorm := ACompon.Norms.Items[i];
if ptrSCSNorm.IsOn = biTrue then
for j := 0 to ptrSCSNorm.Resources.Count - 1 do
begin
ptrResource := ptrSCSNorm.Resources.Items[j];
if ptrResource.IsOn = biTrue then
RepResourceWrite(ptrResource.Name, ptrSCSNorm.Kolvo * ptrResource.Cost, APref + Round(APref / 3) + 4);
end;
end;
if ACompon.Norms.Count > 0 then
RepResourceWrite(ACompon.Name , ACompon.Price * TSCSNorm(ACompon.Norms[0]^).Kolvo, APref + Round(APref / 3) + 4);
end;
*)
begin
(*if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
try
try
with TF_Main(GForm).DM do
begin
SCSList := TSCSCatalog.Create(GForm);
SCSList.LoadCatalogByID(AIDComponList, false);
//*** Îòîáðàòü âñå îáúåêòû Ëèñòà
SetSQLToQuery(scsQSelect, ' select id from katalog '+
' where (parent_id = '''+IntToStr(AIDComponList)+''') and (( id_item_type = '''+IntToStr(itSCSLine)+''') or ( id_item_type = '''+IntToStr(itSCSConnector)+''') ) ');
ListSCSObjects := TList.Create;
//*** Çàãðóçêà îáúåêòîâ â ñïèñîê
while Not scsQSelect.Eof do
begin
New(ptrSCSObject);
ptrSCSObject^ := TSCSCatalog.Create(GForm);
ptrSCSObject.ID := scsQSelect.FN('id').AsInteger;
ptrSCSObject.ItemType := itList;
ListSCSObjects.Add(ptrSCSObject);
scsQSelect.Next;
end;
//*** Çàãðóçèòü êîìïîíåíòû îáúåêòîâ
ListWorkCost := 0;
ComponCount := 0;
for i := 0 to ListSCSObjects.Count - 1 do
begin
ObjectLength := 0;
ptrSCSObject := ListSCSObjects.Items[i];
//*** Çàãðóçèòü Îáúåêò
ptrSCSObject.LoadCatalogByID(ptrSCSObject.ID, true, false);
if ptrSCSObject.ItemType = itSCSLine then
ObjectLength := TF_Main(GForm).GetPropertyValueAsFloat(tkCatalog, ptrSCSObject.ID, pnLength, -1);
//*** Çàãðóçèòü Êîìïîíåíòû äëÿ ýòîãî îáúåêòà
for j := 0 to ptrSCSObject.SCSComponents.Count - 1 do
begin
ptrSCSComponent := ptrSCSObject.SCSComponents.Items[j];
if ptrSCSComponent.IsLine = bitrue then
ptrSCSComponent.Length := ObjectLength;
//*** Çàãðóçèòü Íîðìû äëÿ êîìïîíåíòû è ïîñ÷èòàòü
// ñòîèìîñòü êîìïîíåíòû, åå êîìïëåêòóþùèõ, è ðåñóðñîâ
ptrSCSComponent.NormsResources.CalcResourcesCost(true, true);
//*** Çàãðóçèòü âñå Êîìïëåêòóþùèå c íîðìàìè ýòîé êîìïîíåíòû
ptrSCSComponent.LoadAllSCSComplects(cdNorms or cdCalcResCost);
ptrSCSComponent.AddToTotalCostComplResourcesCost;
end;
ptrSCSObject.CalcResourcesCost(false, false, false);
ListWorkCost := ListWorkCost + ptrSCSObject.ResourcesCost;
ComponCount := ComponCount + ptrSCSObject.SCSComponents.Count;
end;
//*** Ôîðìèðîâàíèå îò÷åòà
RichEdit_Report.Lines.Clear; //*** Âûâåñòè Ëèñò
RepListWrite(SCSList.Name, ListSCSObjects.Count, ComponCount, ListWorkCost);
for i := 0 to ListSCSObjects.Count - 1 do
begin
ptrSCSObject := ListSCSObjects.Items[i];
//*** Âûâåñòè Îáúåêòû
RepObjWrite(ptrSCSObject.Name, ptrSCSObject.ItemType, ptrSCSObject.SCSComponents.Count, ptrSCSObject.ResourcesCost);
for j := 0 to ptrSCSObject.SCSComponents.Count - 1 do
begin
ptrSCSComponent := ptrSCSObject.SCSComponents.Items[j];
//*** Âûâåñòè êîìïîíåíòû
//RepComponWrite(ptrSCSComponent.Name, true, ptrSCSComponent.TotalCost, 11);
//ResourcesWrite(ptrSCSComponent, 15);
ResourcesWrite(ptrSCSComponent, true, 11);
//*** Âûâåñòè êîìïëåêòóþùèå
//RepComplectsWrite(ptrSCSComponent.PriceComponWithComplects - ptrSCSComponent.Price);
RepComplectsWrite(ptrSCSComponent.ComplResourcesCost);
for k := 0 to ptrSCSComponent.AllSCSComplects.Count - 1 do
begin
ptrSCSComplect := ptrSCSComponent.AllSCSComplects.Items[k];
ResourcesWrite(ptrSCSComplect, false, 19);
end;
{RepResourcesWrite(ptrSCSComponent.ResourcesCost, 15);
for k := 0 to ptrSCSComponent.Norms.Count - 1 do
begin
ptrSCSNorm := ptrSCSComponent.Norms.Items[k];
if ptrSCSNorm.IsOn = biTrue then
for l := 0 to ptrSCSNorm.Resources.Count - 1 do
begin
ptrResource := ptrSCSNorm.Resources.Items[l];
if ptrResource.IsOn = biTrue then
RepResourceWrite(ptrResource.Name, ptrResource.Cost, 19);
end;
end;
RepResourceWrite(ptrSCSComponent.Name , ptrSCSComponent.Price, 19); }
end;
end;
Caption := 'Âåäîìîñòü îáúåêòîâ';
GFormMode := fmRObject;
ShowModal;
end;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowListResourceReport: '+E.Message);
end;
finally
if ListSCSObjects <> nil then
begin
//FreeAndNil(SCSList);
//SCSList.Destroy;
SCSList.Free;
for i := 0 to ListSCSObjects.Count - 1 do
begin
ptrSCSObject := ListSCSObjects.Items[i];
ptrSCSObject^.Free;
//ptrSCSObject^.Free;
end;
FreeList(ListSCSObjects);
end;
end; *)
end;
// Âåäîìîñòü ðåñóðñîâ
procedure TF_ResourceReport.ShowFolderResourceReport(AFolder: TSCSCatalog; AParams: TReportItemParams;
ACanHaveActiveComponents, ACanHaveDismountAccount, AComponsWithZeroPrice,
ACanRoundValue, ACanHaveSupplyValue: Boolean);
var
NormResources: TSCSNormsResources;
i,j : Integer;
ResourceRel: TSCSResourceRel;
ResourceCompon: TSCSComponent;
SprSuppliesKind: TNBSuppliesKind;
ProjectOwner: TSCSProject;
OldTick, CurrTick: Cardinal;
TotalCost: Double;
// Added by Tolik
CableTypes : TCableTypeArray;
CableIdsList : TIntList;
SCSComponent : TSCSComponent;
CableTypeFound : boolean;
{const CmpDelta = 0.001;
var //Folder: TSCSCatalog;
SCSCatalog: TSCSCatalog;
SCSComponent: TSCSComponent;
PartComponent: TSCSComponent;
LookedResources: TSCSResources;
GroupList: TList;
GroupListFromNorm: TList;
GroupResource: TSCSResourceRel;
GroupComponentsList: TSCSComponents;
LookedComponents: TSCSComponents;
i, j, k: Integer;
TotalCost: Double;}
{
procedure AddComponentToGroup(AComponent: TSCSComponent);
var GrComponent: TSCSComponent;
i: Integer;
ExistsGroup: Boolean;
begin
GrComponent := nil;
if Assigned(AComponent) then
if LookedComponents.IndexOf(AComponent) = -1 then
if AComponent.Price > 0 then
begin
ExistsGroup := false;
for i := 0 to GroupComponentsList.Count - 1 do
begin
GrComponent := GroupComponentsList[i];
if (GrComponent.GuidNB = AComponent.GuidNB) and
(Abs(GrComponent.Price - AComponent.Price) < CmpDelta) then
begin
if GrComponent.IsLine = biFalse then
GrComponent.Length := GrComponent.Length + 1
else
GrComponent.Length := GrComponent.Length + AComponent.Length;
ExistsGroup := true;
end;
end;
if Not ExistsGroup then
begin
GrComponent := TSCSComponent.Create(GForm);
GrComponent.AssignOnlyComponent(AComponent);
if GrComponent.isLine = biFalse then
GrComponent.Length := 1
else
GrComponent.Length := AComponent.Length;
GroupComponentsList.Add(GrComponent);
end;
end;
end;
procedure AddResourceToGroup(AResourceRel: TSCSResourceRel; AGroupList: Tlist);
var GrResource: TSCSResourceRel;
ExistsGroup: Boolean;
i: integer;
begin
if (AResourceRel = nil) or (AGroupList = nil) then
Exit; //// EXIT ////
if AResourceRel.IsOn = biFalse then
Exit; //// EXIT ////
if AResourceRel.Cost = 0 then
Exit; //// EXIT ////
if LookedResources.IndexOf(AResourceRel) = -1 then
begin
//*** Íàéòè íóæíóþ ãðóïïó
ExistsGroup := false;
GrResource := nil;
for i := 0 to AGroupList.Count - 1 do
begin
GrResource := AGroupList[i];
if (GrResource.GuidNB = AResourceRel.GuidNB) and
(GrResource.TableKindNB = AResourceRel.TableKindNB) and
(Abs(GrResource.Price - AResourceRel.Price) < CmpDelta) then
begin
ExistsGroup := true;
GrResource.Kolvo := GrResource.Kolvo + AResourceRel.Kolvo;
GrResource.Cost := GrResource.Cost + AResourceRel.Cost;
end;
end;
if Not ExistsGroup then
begin
GrResource := TSCSResourceRel.Create(GForm, ntProj);
GrResource.Assign(AResourceRel);
AGroupList.Add(GrResource);
end;
LookedResources.IndexOf(AResourceRel);
end;
end;
procedure AddNormResourcesToGroup(ANormsResources: TSCSNormsResources);
var i, j: Integer;
ResourceRel: TSCSResourceRel;
SCSNorm: TSCSNorm;
begin
if ANormsResources = nil then
Exit; ///// EXIT /////
for i := 0 to ANormsResources.Resources.Count - 1 do
begin
ResourceRel := ANormsResources.Resources[i];
AddResourceToGroup(ResourceRel, GroupList);
end;
for i := 0 to ANormsResources.Norms.Count - 1 do
begin
SCSNorm := ANormsResources.Norms[i];
for j := 0 to SCSNorm.Resources.Count - 1 do
begin
ResourceRel := SCSNorm.Resources[j];
AddResourceToGroup(ResourceRel, GroupListFromNorm);
end;
end;
end;
procedure LoadComponentsToMT(AComponents: TSCSComponents);
var i: Integer;
GrComponent: TSCSComponent;
ComponentCost: Double;
begin
if Assigned(AComponents) then
for i := 0 to AComponents.Count - 1 do
begin
GrComponent := AComponents[i];
ComponentCost := 0;
ComponentCost := GrComponent.Length * GrComponent.Price;
MemTable_RResources.Append;
MemTable_RResources.FieldByName('ID').AsInteger := GrComponent.IDNormBase;
MemTable_RResources.FieldByName('NAME').AsString := GrComponent.Name;
MemTable_RResources.FieldByName(fnIzm).AsString := GrComponent.Izm;
MemTable_RResources.FieldByName('Kolvo').AsFloat := RoundX(GrComponent.Length, 2);
MemTable_RResources.FieldByName('Price').AsFloat := RoundX(GrComponent.Price, 2);
MemTable_RResources.FieldByName('Cost').AsFloat := RoundX(ComponentCost, 2);
MemTable_RResources.Post;
TotalCost := TotalCost + ComponentCost;
end;
end; }
procedure LoadResourcesToMT(AResources: TSCSResources);
var i: Integer;
ResourceRel: TSCSResourceRel;
Kolvo, Price, Cost: Double;
begin
for i := 0 to AResources.Count - 1 do
begin
ResourceRel := AResources[i];
MemTable_RResources.Append;
MemTable_RResources.FieldByName('ID').AsInteger := ResourceRel.ID;
MemTable_RResources.FieldByName(fnName).AsString := ResourceRel.Name;
MemTable_RResources.FieldByName(fnArticulProducer).AsString := ResourceRel.ArtProducer;
MemTable_RResources.FieldByName(fnArticulDistributor).AsString := ResourceRel.ArtDistributor;
MemTable_RResources.FieldByName(fnProducerName).AsString := TF_Main(GForm).FNormBase.DM.GetStringFromTableByGUID(tnProducers, fnName, ResourceRel.GUIDProducer, qmPhisical);
MemTable_RResources.FieldByName(fnIzm).AsString := ResourceRel.Izm;
{//21.03.2012
MemTable_RResources.FieldByName('Kolvo').AsFloat := Round3(ResourceRel.Kolvo);
MemTable_RResources.FieldByName('Price').AsFloat := Round3(ResourceRel.Price);
MemTable_RResources.FieldByName('Cost').AsFloat := Round3(ResourceRel.Cost);
MemTable_RResources.Post;
TotalCost := TotalCost + Round3(ResourceRel.Cost);
//TotalCost := TotalCost + ResourceRel.Cost;
}
Kolvo := RoundX(ResourceRel.Kolvo, FKolvoPrecision);
Price := RoundX(ResourceRel.Price, FPricePrecision);
Cost := RoundX(Kolvo * Price, Max(FKolvoPrecision, FPricePrecision) );
MemTable_RResources.FieldByName('Kolvo').AsFloat := Kolvo;
MemTable_RResources.FieldByName('Price').AsFloat := Price;
MemTable_RResources.FieldByName('Cost').AsFloat := Cost;
MemTable_RResources.Post;
TotalCost := TotalCost + Cost;
end;
MemTable_RResources.SortOn(fnName, []);
end;
begin
CableIdsList := nil;
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
if Not CheckCanShowReport(AFolder) then
Exit; ///// EXIT /////
OldTick := GetTickCount;
TotalCost := 0;
if Assigned(AFolder) then
begin
// Added by Tolik
// Ðàñ÷åò ðàñõîäà êàáåëÿ â ïîñòàâî÷íûõ âåëè÷èíàõ
// Åñëè çàäàíî âûâåñòè îò÷åò â ïîñòàâî÷íûõ âåëè÷èíàõ,
// òî ïîñ÷èòàåì ðàñõîä êàáåëÿ â ïîñòàâî÷íûõ âåëè÷èíàõ
// Åñëè çàäàí ó÷åò ïîñòàâî÷íûõ âåëè÷èí, ôîðìèðóåì ñïèñîê êàáåëåé
if ACanHaveSupplyValue then
begin
SetLength(CableTypes, 0);
if CableIdsList = nil then
CableIDsList := TIntList.Create;
for i := 0 to AFolder.ComponentReferences.Count - 1 do
begin
SCSComponent := AFolder.ComponentReferences[i]; // êîìïîíåíò
// åñëè êàáåëü
if (SCSComponent.IsLine = biTrue) and
CheckCanLookComponInReportCable(SCSComponent, ACanHaveDismountAccount)
and CheckSysNameIsCable(SCSComponent.ComponentType.SysName) then
begin
SCSComponent.RefreshWholeLengthIfNecessary;
// öåïëÿåì ê ñïèñê êàáåëåé
// CableTypesAdd(SCSComponent, CableTypes, CableIdsList,SCSComponent.ID);
CableTypesAdd(SCSComponent, CableTypes, CableIdsList,SCSComponent.Whole_ID, Self);
end;
end;
// åñëè íà ïðîåêòå åñòü êàáåëè
if Length(CableTypes) > 0 then
// ðàñ÷åò ðàñõîäà êàáåëÿ
CableReelCalculate(CableTypes, 'MaxScrapRate', ReelsCableFlow, Self)
// åñëè íåò - ñáðîñèì ðåçóëüòàòû ïðåäèäóùèõ ðàñ÷åòîâ,
// â ñëó÷àå íàëè÷èÿ òàêîâûõ
else
if ReelsCableFlow <> nil then
begin
ReelsCableFlow.Clear;
if Length(CableTypes) > 0 then
SetLength(CableTypes, 0); // íà âñÿêèé õ
end;
end; // ïèïåö
try
FCatalog := AFolder;
ProjectOwner := AFolder.GetProject;
DefinePrecisions;
NormResources := nil;
BeginProgress(pcPreparingReport);
try
NormResources := AFolder.GetAllNormsResources([nrResources, nrAccessories, nrComponents], false,
ACanHaveActiveComponents,
ACanHaveDismountAccount,
AComponsWithZeroPrice, false, true, ACanHaveSupplyValue);
//if ACanHaveSupplyValue or ACanRoundValue then
for i := 0 to NormResources.Resources.Count - 1 do
begin
ResourceRel := NormResources.Resources[i];
ResourceCompon := nil;
if Not ResourceRel.ServIsResource then
if TSCSResourceGroup(ResourceRel).ObjectList.Count > 0 then
if TSCSResourceGroup(ResourceRel).ObjectList[0] is TSCSComponent then
begin
ResourceCompon := TSCSComponent(TSCSResourceGroup(ResourceRel).ObjectList[0]);
end;
if ResourceCompon <> nil then
begin
SprSuppliesKind := nil;
if ACanHaveSupplyValue then
if ResourceRel.GUIDSuppliesKind <> '' then
SprSuppliesKind := ProjectOwner.Spravochnik.GetSuppliesKindByGUID(ResourceRel.GUIDSuppliesKind);
//*** Ó÷èòûâàòü ïîñòàâî÷íûå âåëå÷èíû
if SprSuppliesKind <> nil then
begin
{ResourceRel.Izm := SprSuppliesKind.Data.Name_;
ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvo;
ResourceRel.Price := ResourceRel.Price * SprSuppliesKind.Data.UnitKolvo;
ResourceRel.CalcCost;}
if CheckIsTradUOM(TF_Main(GForm).FUOM) then
begin
ResourceRel.Izm := SprSuppliesKind.Data.NameTradUOM;
if CheckPriceTransformToUOMByCompType(@ResourceCompon.ComponentType) then
begin
// Äëÿ êàáåëåé è êàíàëîâ â òðàäèöèîííîé ñèñòåìû ÑØÀ íóæíî þçàòü ÔÓÒÛ
{
ResourceRel.Kolvo := FloatInUOM(ResourceRel.Kolvo, umMetr, umFoot) / SprSuppliesKind.Data.UnitKolvoTradUOM;
ResourceRel.Price := FloatInUOM(ResourceRel.Price, umFoot, umMetr) * SprSuppliesKind.Data.UnitKolvoTradUOM;}
// Added by Tolik
if Length(Cabletypes) > 0 then
begin
CableTypeFound := false;
for j := 0 to Length(CableTypes) - 1 do
begin
// if ResourceRel.GuidNB = CableTypes[j].GuidNB then
if ResourceCompon.GUIDSuppliesKind = CableTypes[j].TypeName then
begin
ResourceRel.Kolvo := Length(CableTypes[j].Reels);
CableTypeFound := true;
end
end;
if not CableTypeFound then
ResourceRel.Kolvo := FloatInUOM(ResourceRel.Kolvo, umMetr, umFoot) / SprSuppliesKind.Data.UnitKolvoTradUOM;
end;
//
ResourceRel.Price := FloatInUOM(ResourceRel.Price, umFoot, umMetr) * SprSuppliesKind.Data.UnitKolvoTradUOM;
end
else
begin
// Added by Tolik
if Length(Cabletypes) > 0 then
begin
CableTypeFound := false;
for j := 0 to Length(CableTypes) - 1 do
begin
// if ResourceRel.GuidNB = CableTypes[j].GuidNB then
if ResourceCompon.GUIDSuppliesKind = CableTypes[j].TypeName then
begin
ResourceRel.Kolvo := Length(CableTypes[j].Reels);
CableTypeFound := true;
end
end;
if not CabletypeFound then
ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvoTradUOM;
end;
//
// ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvoTradUOM;
ResourceRel.Price := ResourceRel.Price * SprSuppliesKind.Data.UnitKolvoTradUOM;
end;
end
else
begin
ResourceRel.Izm := SprSuppliesKind.Data.Name;
// Added by Tolik
if Length(Cabletypes) > 0 then
begin
CableTypeFound := false;
for j := 0 to Length(CableTypes) - 1 do
begin
// if ResourceRel.GuidNB = CableTypes[j].GuidNB then
if ResourceCompon.GUIDSuppliesKind = CableTypes[j].TypeName then
begin
ResourceRel.Kolvo := Length(CableTypes[j].Reels);
CableTypeFound := true;
end
end;
if not CabletypeFound then
ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvo;
end;
//
// ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvo;
ResourceRel.Price := ResourceRel.Price * SprSuppliesKind.Data.UnitKolvo;
end;
ResourceRel.CalcCost;
end
else
begin
if CheckPriceTransformToUOMByCompType(@ResourceCompon.ComponentType) then
begin
ResourceRel.Izm := GetNameUOM(TF_Main(GForm).FUOM, true);
if TF_Main(GForm).FUOM <> umMetr then
begin
ResourceRel.Kolvo := FloatInUOM(ResourceRel.Kolvo, umMetr, TF_Main(GForm).FUOM);
ResourceRel.Price := FloatInUOM(ResourceRel.Price, TF_Main(GForm).FUOM, umMetr);
ResourceRel.CalcCost;
end;
end;
end;
end;
//*** Ó÷èòûâàòü ôëàã îêðóãëåíèÿ â áîëüøóþ ñòîðîíó
if ACanRoundValue then
begin
ResourceRel.Kolvo := RoundUp(ResourceRel.Kolvo);
ResourceRel.CalcCost;
end;
end;
MemTable_RResources.Active := false;
MemTable_RResources.Active := true;
//TotalCost := 0;
LoadResourcesToMT(NormResources.Resources);
//LoadComponentsToMT(GroupComponentsList);
//LoadResourcesToMT(GroupList);
//LoadResourcesToMT(GroupListFromNorm);
//Label_TotalCost.Caption := FloatToStr(RoundX(TotalCost, 2)) +' '+GCurrency.Name_Brief;
//MemTable_RResources.SortOn(fnProducerName+';'+fnIzm, []);
SortMemTableByParams(MemTable_RResources, AParams, nil);
finally
EndProgress;
if NormResources <> nil then
FreeAndNil(NormResources);
FreeCableTypes(CableTypes);
end;
GFormMode := fmRResources;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
//ShowModal;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowListResourceReport: '+E.Message);
end;
end;
CurrTick := GetTickCount - OldTick;
CurrTick := GetTickCount - OldTick;
(*
if Assigned(AFolder) then
begin
BeginProgress(pcPreparingReport);
try
try
FCatalog := AFolder;
GroupList := TList.Create;
GroupListFromNorm := TList.Create;
GroupComponentsList := TSCSComponents.Create(true);
LookedComponents := TSCSComponents.Create(false);
LookedResources := TSCSResources.Create(false);
//Folder := TSCSCatalog.Create(GForm);
//Folder.LoadCatalogByID(AFolder.ID, false, false);
//LoadFolderResources(Folder);
for i := 0 to AFolder.ChildCatalogReferences.Count - 1 do
begin
SCSCatalog := AFolder.ChildCatalogReferences[i];
if Assigned(SCSCatalog) then
begin
if SCSCatalog.IsLine = biTrue then
SCSCatalog.LoadLength;
SCSCatalog.NormsResources.CalcResourcesCost(true, true);
if SCSCatalog.ItemType in [itSCSConnector, itSCSLine] then
AddNormResourcesToGroup(SCSCatalog.NormsResources);
end;
end;
for i := 0 to AFolder.ComponentReferences.Count - 1 do
begin
SCSComponent := AFolder.ComponentReferences[i];
if Assigned(SCSComponent) then
begin
if SCSComponent.IsLine = biTrue then
begin
SCSComponent.RefreshWholeLengthIfNecessary;
SCSComponent.Length := SCSComponent.GetPropertyValueAsFloat(pnLength);
end;
SCSComponent.NormsResources.CalcResourcesCost(true, true);
AddComponentToGroup(SCSComponent);
AddNormResourcesToGroup(SCSComponent.NormsResources);
LookedComponents.Add(SCSComponent);
if SCSComponent.IsLine = biTrue then
begin
SCSComponent.LoadWholeComponent(false);
for j := 0 to SCSComponent.WholeComponent.Count - 1 do
begin
PartComponent := AFolder.GetComponentFromReferences(Integer(SCSComponent.WholeComponent[j]^));
if Assigned(PartComponent) then
if PartComponent <> SCSComponent then
LookedComponents.Add(PartComponent);
end;
{for j := 0 to SCSComponent.WholeComponent.Count - 1 do
begin
PartComponent := AFolder.GetComponentFromReferences(Integer(SCSComponent.WholeComponent[j]^));
if Assigned(PartComponent) then
if PartComponent <> SCSComponent then
if PartComponent.NormsResources.Resources.Count > 0 then
LookedResources.Add(PartComponent.NormsResources.Resources[0]);
end; }
end;
end;
end;
MemTable_RResources.Active := false;
MemTable_RResources.Active := true;
TotalCost := 0;
LoadComponentsToMT(GroupComponentsList);
LoadResourcesToMT(GroupList);
LoadResourcesToMT(GroupListFromNorm);
//Label_TotalCost.Caption := FloatToStr(RoundX(TotalCost, 2)) +' '+GCurrency.Name_Brief;
finally
EndProgress;
//Folder.Free;
//*** Óäàëèòü Ãðóïïû
LookedResources.Free;
for i := 0 to GroupList.Count - 1 do
begin
GroupResource := GroupList.Items[i];
GroupResource.Free;
end;
GroupList.Free;
for i := 0 to GroupListFromNorm.Count - 1 do
begin
GroupResource := GroupListFromNorm.Items[i];
GroupResource.Free;
end;
GroupListFromNorm.Free;
GroupComponentsList.Free;
LookedComponents.Free;
//Freelist(ListWithLookedWholeID);
end;
GFormMode := fmRResources;
Act_ShowReport.Execute;
//ShowModal;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowListResourceReport: '+E.Message);
end;
end; *)
end;
(*
procedure TF_ResourceReport.ShowFolderResourceReport(AFolder: TSCSCatalog);
var Folder: TSCSCatalog;
GroupList: TList;
GroupListFromNorm: TList;
GroupResource: TSCSResourceRel;
ListWithLookedWholeID: TList;
i: Integer;
TotalCost: Double;
procedure AddResourceToGroup(AResourceRel: TSCSResourceRel; AGroupList: Tlist);
const CmpDelta = 0.001;
var GrResource: TSCSResourceRel;
ExistsGroup: Boolean;
i: integer;
begin
if (AResourceRel = nil) or (AGroupList = nil) then
Exit; //// EXIT ////
if AResourceRel.IsOn = biFalse then
Exit; //// EXIT ////
if AResourceRel.Cost = 0 then
Exit; //// EXIT ////
//*** Íàéòè íóæíóþ ãðóïïó
ExistsGroup := false;
GrResource := nil;
for i := 0 to AGroupList.Count - 1 do
begin
GrResource := AGroupList[i];
if (GrResource.IDNB = AResourceRel.IDNB) and
(GrResource.TableKindNB = AResourceRel.TableKindNB) and
(Abs(GrResource.Price - AResourceRel.Price) < CmpDelta) then
begin
ExistsGroup := true;
GrResource.Kolvo := GrResource.Kolvo + AResourceRel.Kolvo;
GrResource.Cost := GrResource.Cost + AResourceRel.Cost;
end;
end;
if Not ExistsGroup then
begin
GrResource := TSCSResourceRel.Create(GForm, ntProj);
GrResource.Assign(AResourceRel);
AGroupList.Add(GrResource);
end;
end;
procedure AddNormResourcesToGroup(ANormsResources: TSCSNormsResources);
var i, j: Integer;
ResourceRel: TSCSResourceRel;
SCSNorm: TSCSNorm;
begin
if ANormsResources = nil then
Exit; ///// EXIT /////
for i := 0 to ANormsResources.Resources.Count - 1 do
begin
ResourceRel := ANormsResources.Resources[i];
AddResourceToGroup(ResourceRel, GroupList);
end;
for i := 0 to ANormsResources.Norms.Count - 1 do
begin
SCSNorm := ANormsResources.Norms[i];
for j := 0 to SCSNorm.Resources.Count - 1 do
begin
ResourceRel := SCSNorm.Resources[j];
AddResourceToGroup(ResourceRel, GroupListFromNorm);
end;
end;
end;
procedure LoadFolderResources(AParentFolder: TSCSCatalog); //Resources
var SCSCatalog: TSCSCatalog;
SCSComponent: TSCSComponent;
i: Integer;
ptrID: ^Integer;
begin
AParentFolder.LoadLength;
AParentFolder.NormsResources.CalcResourcesCost(true, true);
//*** Çàãðóçêà ðåñóðñîâ è íîðì ïàïêè â ãðóïïû
AddNormResourcesToGroup(AParentFolder.NormsResources);
AParentFolder.LoadAllComponents(AParentFolder.ID, false);
for i := 0 to AParentFolder.SCSComponents.Count - 1 do
begin
SCSComponent := AParentFolder.SCSComponents[i];
if (( SCSComponent.IsLine = biTrue) and
( CheckNoIDinList(SCSComponent.Whole_ID, ListWithLookedWholeID) )) or
(SCSComponent.IsLine = biFalse) then
begin
if SCSComponent.IsLine = biTrue then
begin
New(ptrID);
ptrID^ := SCSComponent.Whole_ID;
ListWithLookedWholeID.Add(ptrID);
SCSComponent.LoadWholeComponent(false);
SCSComponent.LoadWholeLength(true);
end;
SCSComponent.NormsResources.CalcResourcesCost(true, true);
//*** Çàãðóçêà ðåñóðñîâ è íîðì êîìïîíåíòû â ãðóïïû
AddNormResourcesToGroup(SCSComponent.NormsResources);
end;
end;
//AParentFolder.ClearListWithObjects(AParentFolder.SCSComponents);
AParentFolder.SCSComponents.Clear;
//*** Ïðîéòè ïî âíóòðåííûì ïàïêàì
AParentFolder.LoadChildCatalogs(false);
for i := 0 to AParentFolder.ChildCatalogs.Count - 1 do
begin
SCSCatalog := AParentFolder.ChildCatalogs[i];
LoadFolderResources(SCSCatalog);
end;
//AParentFolder.ClearListWithObjects(AParentFolder.ChildCatalogs);
AParentFolder.ChildCatalogs.Clear;
end;
procedure LoadResourcesToMT(AResources: TList);
var i: Integer;
ResourceRel: TSCSResourceRel;
begin
for i := 0 to AResources.Count - 1 do
begin
ResourceRel := AResources[i];
MemTable_RResources.Append;
MemTable_RResources.FieldByName('ID').AsInteger := ResourceRel.ID;
MemTable_RResources.FieldByName('NAME').AsString := ResourceRel.Name;
MemTable_RResources.FieldByName('Kolvo').AsFloat := RoundX(ResourceRel.Kolvo, 3);
MemTable_RResources.FieldByName('Price').AsFloat := RoundX(ResourceRel.Price, 3);
MemTable_RResources.FieldByName('Cost').AsFloat := RoundX(ResourceRel.Cost, 3);
MemTable_RResources.Post;
TotalCost := TotalCost + ResourceRel.Cost;
end;
end;
begin
try
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
if Not CheckCanShowReport(AFolder) then
Exit; ///// EXIT /////
try
Screen.Cursor := crHourGlass;
try
GroupList := TList.Create;
GroupListFromNorm := TList.Create;
ListWithLookedWholeID := TList.Create;
Folder := TSCSCatalog.Create(GForm);
Folder.LoadCatalogByID(AFolder.ID, false, false);
LoadFolderResources(Folder);
MemTable_RResources.Active := false;
MemTable_RResources.Active := true;
TotalCost := 0;
LoadResourcesToMT(GroupList);
LoadResourcesToMT(GroupListFromNorm);
Label_TotalCost.Caption := FloatToStr(RoundX(TotalCost, 3)) +' '+GCurrency.Name_Brief;
GFormMode := fmRResources;
finally
Screen.Cursor := crDefault;
end;
Act_ShowReport.Execute;
//ShowModal;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowListResourceReport: '+E.Message);
end;
finally
Folder.Free;
//*** Óäàëèòü Ãðóïïû
for i := 0 to GroupList.Count - 1 do
begin
GroupResource := GroupList.Items[i];
GroupResource.Free;
end;
GroupList.Free;
for i := 0 to GroupListFromNorm.Count - 1 do
begin
GroupResource := GroupListFromNorm.Items[i];
GroupResource.Free;
end;
GroupListFromNorm.Free;
Freelist(ListWithLookedWholeID);
end;
end;
*)
(*
procedure TF_ResourceReport.ShowFolderResourceReport(AFolder: TSCSCatalog);
var FolderIDComponList: TList;
ListWithBusyCompons: TList;
i, j: Integer;
Group: PSCSCatalog;
GroupList: TList;
GroupComponent: PSCSComponent;
GroupLength: Double;
GroupCost: Double;
TotalCost: Double;
strLength: String;
LengthFromStr: Double;
StrToShow: String;
procedure FillFolderComponList(AIDRoot: Integer);
var ChildFolders: TList;
i: Integer;
CurrCatalog: TSCSCatalog;
ptrSCSComponent: PSCSComponent;
ptrNewID: ^Integer;
begin
CurrCatalog := TSCSCatalog.Create(GForm);
CurrCatalog.LoadAllComponents(AIDRoot, false);
for i := 0 to CurrCatalog.SCSComponents.Count - 1 do
begin
ptrSCSComponent := CurrCatalog.SCSComponents.Items[i];
New(ptrNewID);
ptrNewID^ := ptrSCSComponent.ID;
FolderIDComponList.Add(ptrNewID);
end;
CurrCatalog.Free;
ChildFolders := TList.Create;
with TF_Main(GForm).DM do
begin
SetSQLToQuery(scsQSelect, ' select id from katalog where parent_id = '''+IntToStr(AIDRoot)+''' ');
IntFieldToList(ChildFolders, scsQSelect, 'ID');
for i := 0 to ChildFolders.Count - 1 do
FillFolderComponList(Integer(ChildFolders.Items[i]^));
end;
FreeList(ChildFolders);
end;
procedure AddToGroups(AIDComponent: Integer);
var ptrNewSCSComponent: PSCSComponent;
Compon: TSCSComponent;
i: Integer;
ptrGroup: PSCSCatalog;
ptrGroupForReceiveCompon: PSCSCatalog;
WholeLineCompon: TList; //*** Öåëüíûé ëèíåéíûé êîìïîíåíò
Length: Double;
strLength: String;
LengthFromStr: Double;
ptrIDBusy: ^Integer;
begin
if CheckNoIDinList(AIDComponent, ListWithBusyCompons) then
begin
New(ptrNewSCSComponent);
ptrNewSCSComponent^ := TSCSComponent.Create(GForm);
ptrNewSCSComponent.LoadComponentByID(AIDComponent, false);
case ptrNewSCSComponent.IsLine of
biTrue:
begin
ptrNewSCSComponent.LoadWholeComponent(true);
ptrNewSCSComponent.LoadWholeLength(true);
//*** Çàíåñòè â ñïèñîê çàíÿòûõ
for i := 0 to ptrNewSCSComponent.WholeComponent.Count - 1 do
begin
New(ptrIDBusy);
ptrIDBusy^ := Integer(ptrNewSCSComponent.WholeComponent[i]^);
ListWithBusyCompons.Add(ptrIDBusy);
end;
end;
end;
ptrNewSCSComponent.LoadNorms(false);
ptrNewSCSComponent.CalcResourcesCost(true, true);
if ptrNewSCSComponent.ResourcesCost = 0 then
begin
ptrNewSCSComponent.Free;
FreeMem(ptrNewSCSComponent);
Exit; //// EXIT ////
end;
ptrGroupForReceiveCompon := nil;
//*** Íàéòè ãðóïïó äëÿ êîìïîíåíòû
for i := 0 to GroupList.Count - 1 do
begin
ptrGroup := GroupList.Items[i];
if ptrGroup.SCSComponents.Count > 0 then
if TSCSComponent(ptrGroup.SCSComponents.Items[0]^).IDNormBase = ptrNewSCSComponent.IDNormBase then
begin
ptrGroupForReceiveCompon := ptrGroup;
Break;
end;
end;
//*** Ñîçäàòü íîâóþ ãðóïïó
if ptrGroupForReceiveCompon = nil then
begin
New(ptrGroup);
ptrGroup^ := TSCSCatalog.Create(GForm);
GroupList.Add(ptrGroup);
ptrGroupForReceiveCompon := ptrGroup;
end;
//*** Äîáàâèòü êîìïîíåíò â ãðóïïó
if ptrGroupForReceiveCompon <> nil then
begin
ptrNewSCSComponent.LoadNorms(false);
ptrNewSCSComponent.CalcResourcesCost(true, true);
if ptrNewSCSComponent.IsLine = biFalse then
begin
New(ptrIDBusy);
ptrIDBusy^ := ptrNewSCSComponent.ID;
ListWithBusyCompons.Add(ptrIDBusy);
end;
//*** Äîáàâëåíèå â ãðóïïó
if ptrNewSCSComponent.ResourcesCost > 0 then
ptrGroupForReceiveCompon.SCSComponents.Add(ptrNewSCSComponent)
else
ptrNewSCSComponent.Free;
end;
end;
end;
begin
try
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
try
FolderIDComponList := Tlist.Create;
ListWithBusyCompons := TList.Create;
GroupList := TList.Create;
//*** Íàéòè âñå êìîïîíåíòû ïàïêè
//FillFolderComponList(AFolder.ID);
FolderIDComponList := GetFolderComponList(GForm, AFolder.ID, [itSCSLine, itSCSConnector]);
if FolderIDComponList = nil then
Exit; //// EXIT /////
//*** Ðàçáèòü êîìïîíåíòû ïî ãðóïïàì îòíîñèòåëüíî IDNormBase
for i := 0 to FolderIDComponList.Count - 1 do
AddToGroups(Integer(FolderIDComponList.Items[i]^));
//*** Ôîðìèðîâàíèå îò÷åòà
Caption := 'Âåäîìîñòü ðåñóðñîâ äëÿ "'+AFolder.Name+'" ';
TotalCost := 0;
MemTable_RResources.Active := false;
MemTable_RResources.Active := true;
for i := 0 to GroupList.Count - 1 do
begin
Group := GroupList.Items[i];
GroupLength := 0;
GroupCost := 0;
if Group.SCSComponents.Count > 0 then
begin
StrToShow := '';
for j := 0 to Group.SCSComponents.Count - 1 do
begin
GroupComponent := Group.SCSComponents.Items[j];
GroupCost := GroupCost + GroupComponent.ResourcesCost;
if GroupComponent.IsLine = biTrue then
begin
{strLength := GroupComponent.GetPropertyValueBySysName('LENGTH');
if strLength <> '' then
begin
LengthFromStr := StrToFloat_My(strLength);
GroupLength := GroupLength + LengthFromStr;
end;}
GroupLength := GroupLength + GroupComponent.Length;
end;
end;
GroupComponent := Group.SCSComponents.Items[0];
MemTable_RResources.Append;
MemTable_RResources.FieldByName('ID').AsInteger := GroupComponent.ID;
MemTable_RResources.FieldByName('NAME').AsString := GroupComponent.Name;
{StrToShow := DupStr(#9, 1);
StrToShow := StrToShow + GroupComponent.Name;}
case GroupComponent.IsLine of
biTrue:
begin
MemTable_RResources.FieldByName('Kolvo').AsFloat := RoundX(GroupLength, 3);
MemTable_RResources.FieldByName('Price').AsFloat := RoundX(GroupComponent.ResourcesCostPerOneNorm, 3);
//StrToShow := StrToShow + DupStr(#9, 2) + 'öåíà '+FloatToStr(RoundX(GroupComponent.ResourcesCostPerOneNorm, 3)) + ' ' +GCurrency.Name_Brief;
//StrToShow := StrToShow + DupStr(#9, 1) + 'äëèíà '+FloatToStr(GroupLength)+ ' ì';
end;
biFalse:
begin
MemTable_RResources.FieldByName('Kolvo').AsFloat := RoundX(Group.SCSComponents.Count, 3);
MemTable_RResources.FieldByName('Price').AsFloat := RoundX(GroupComponent.ResourcesCost, 3);
//StrToShow := StrToShow + DupStr(#9, 2) + 'öåíà '+FloatToStr(RoundX(GroupComponent.ResourcesCost, 3)) + ' ' +GCurrency.Name_Brief;
//StrToShow := StrToShow + DupStr(#9, 1) + 'êîëè÷åñòâî '+FloatToStr(Group.SCSComponents.Count);
end;
end;
MemTable_RResources.FieldByName('Cost').AsFloat := RoundX(GroupCost, 3);
MemTable_RResources.Post;
TotalCost := TotalCost + GroupCost;
//StrToShow := StrToShow + DupStr(#9, 1) + 'ñòîèìîñòü '+FloatToStr(RoundX(GroupCost, 3)) + ' ' +GCurrency.Name_Brief;
//RichEdit_Report.Lines.Add(StrToShow);
//RichEdit_Report.Lines.Add('');
end;
end;
Label_TotalCost.Caption := FloatToStr(RoundX(TotalCost, 3)) +' '+GCurrency.Name_Brief;
//RichEdit_Report.Lines.Add('Îáùàÿ ñòîèìîñòü '+FloatToStr(RoundX(TotalCost, 3)) +' '+GCurrency.Name_Brief);
GFormMode := fmRResources;
//ShowModal;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowListResourceReport: '+E.Message);
end;
finally
//*** Óäàëèòü Ãðóïïû
for i := 0 to GroupList.Count - 1 do
begin
Group := GroupList.Items[i];
Group.Free;
end;
FreeList(GroupList);
FreeList(ListWithBusyCompons);
FreeList(FolderIDComponList);
end;
end; *)
procedure TF_ResourceReport.ShowFolderNormReport(AFolder: TSCSCatalog; AParams: TReportItemParams; ACanHaveActiveComponents: Boolean);
var i, j, k: Integer;
//LookedInterfaces: TList;
InterfaceNormList: TList;
CurrInterfaceNormList: TList;
TempList: TList;
SCSComponent: TSCSComponent;
SCSCatalog: TSCSCatalog;
TraceLength: Double;
Interfac: TSCSInterface;
ptrJoinedInterf: TSCSInterface;
ptrComplectInterf: TSCSInterface;
ptrResultInterface: TSCSInterface;
//IOfIRel: TSCSIOfIRel;
ptrInterfaceNormInfo: PInterfaceNormInfo;
ptrInterfaceNormInfoI: PInterfaceNormInfo;
ptrInterfaceNormInfoJ: PInterfaceNormInfo;
GroupedNorms: TSCSNormsResources;
GroupNorm: TSCSNorm;
NormTotalLaborTime: Integer;
begin
try
FTotalLaborTime := 0;
if Assigned(AFolder) then
begin
//LookedInterfaces := TList.Create;
//InterfaceNormList := TList.Create;
//GroupedNorms := TSCSNorms.Create(true);
FCatalog := AFolder;
BeginProgress(pcPreparingReport);
try
//GroupedNorms := AFolder.GetAllNormsResources(nrAll, false, ACanHaveActiveComponents, false, true);
//24.09.2010 GroupedNorms := AFolder.GetAllNormsResources([nrNorms], false, ACanHaveActiveComponents, false, true);
GroupedNorms := AFolder.GetAllNormsResources([nrNorms], false, ACanHaveActiveComponents,
false, true, false, true, false, True); ////24.09.2010 aAllowNormPriceForGroup = True
//*** Çàñûïàòü íîðìû â MemTable
MemTable_RNorms.Active := false;
MemTable_RNorms.Active := true;
for i := 0 to GroupedNorms.Norms.Count - 1 do
begin
GroupNorm := GroupedNorms.Norms[i];
MemTable_RNorms.Append;
MemTable_RNorms.FieldByName(fnCypher).AsString := GroupNorm.Cypher;
MemTable_RNorms.FieldByName(fnName).AsString := GroupNorm.Name;
MemTable_RNorms.FieldByName(fnExpense).AsFloat := RoundX(GroupNorm.Kolvo, PrecisionNormKolvo);
MemTable_RNorms.FieldByName(fnIzm).AsString := GroupNorm.Izm_;
//24.09.2010
MemTable_RNorms.FieldByName(fnPrice).AsFloat := RoundX(GroupNorm.Price, PrecisionNormKolvo);
MemTable_RNorms.FieldByName(fnTotalCost).AsFloat := RoundX(GroupNorm.TotalCost, PrecisionNormKolvo);
//19.11.2013
NormTotalLaborTime := Round(GroupNorm.LaborTime*GroupNorm.Kolvo);
MemTable_RNorms.FieldByName(fnLaborTime).AsString := GetDisplayTextToNORMLaborTime(IntToStr(GroupNorm.LaborTime));
MemTable_RNorms.FieldByName(fnPricePerTime).AsFloat := RoundX(GroupNorm.PricePerTime, PrecisionNormKolvo);
MemTable_RNorms.FieldByName(fnTotalLaborTime).AsString := GetDisplayTextToNORMLaborTime(IntToStr(NormTotalLaborTime));
MemTable_RNorms.Post;
FTotalLaborTime := FTotalLaborTime + NormTotalLaborTime;
end;
//MemTable_RNorms.SortOn(fnCypher, []);
SortMemTableByParams(MemTable_RNorms, AParams, nil);
finally
EndProgress;
FreeAndNil(GroupedNorms);
//FreeList(InterfaceNormList);
//FreeAndNil(LookedInterfaces);
end;
GFormMode := fmRNorms;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
end;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowFolderNormReport: '+E.Message);
end;
end;
// îò÷åò âåäîìîñòü êàáåëåé
procedure TF_ResourceReport.ShowFolderCableReport(AFolder: TSCSCatalog; AParams: TReportItemParams;
AFormMode: TResourceReportFormMode; ACanHaveActiveComponents, ACanHaveDismountAccount: Boolean;AReportItemParamValues : TReportItemParams);
//const CmpDelta = 0.01;
var //FolderIDComponList: TList;
List: TSCSList;
ListWithLookedCompons: TList;
CurrIDCompon: Integer;
i, j: Integer;
Component: TSCSComponent;
FirstObjName: String;
FirstComponName: String;
LastObjName: String;
LastComponName: String;
ptrID: ^Integer;
WholeComponent: Tlist; //*** Öåëüíûé êàáåëü
TextLine: String;
CableCanalCost: Double;
ComponSignType: Integer;
ComponLength: Double;
ComponMaxLength: Double;
ComponLengthReserv: Double;
ComponPrice: Double;
MemTableOprions: TkbmMemTableCompareOptions;
CurrMTGrp: TKbmMemTable;
CurrMT: TKbmMemTable;
CableTypes : TCableTypeArray;
CableIDsList : TIntList;
//Tolik
currCad : TF_CAD;
Figure : TFigure;
currCatalog : TSCSCatalog;
{function GetNameAndIndexByTCatalog(ACatalog: TCatalog): String;
begin
Result := '';
Result := TF_Main(GForm).GetNameAndIndex(ACatalog.Name, ACatalog.ItemType, ACatalog.IndexPointObj,
ACatalog.IndexConnector,
ACatalog.IndexLine);
end;}
function GetObjNameByIDCompon(AIDComponent: Integer; var AComponName: String): String;
var
SCSComponent: TSCSComponent;
SCSObject: TSCSCatalog;
SCSList: TSCSList;
begin
Result := '';
AComponName := '';
SCSComponent := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(AIDComponent);
if Assigned(SCSComponent) then
if CheckCanLookComponInReportCable(SCSComponent, ACanHaveDismountAccount) then
begin
AComponName := SCSComponent.NameMark;
SCSObject := SCSComponent.GetFirstParentCatalog;
if Assigned(SCSObject) then
begin
SCSList := SCSObject.GetListOwner;
if SCSList <> nil then
begin
Result := SCSList.GetNameForVisible + '/' + SCSObject.GetNameForVisible;
end;
end;
end;
end;
procedure DefineBeginEnd(AComponent: TSCSComponent; var AFirstConObj, AFirstConCompon: string;
var ALastConObj, ALastConCompon: string);
var ConnectedObjFirst: TSCSCatalog;
ConnectedObjLast: TSCSCatalog;
CatalogFirst: TCatalog;
CatalogLast: TCatalog;
Buf: Integer;
WasReplace: Boolean;
i, j, k, FICount, LICount: integer;
s: string;
currCompon, connCompon, FirstCompon, LastCompon : TSCSComponent;
FirstCatalog, LastCatalog : TSCSCatalog;
AllConnectedCompons : TSCSComponents;
IntCounts : TIntList;
tmpstr: string;
begin
try
AFirstConObj := cResourceReport_Msg38;
AFirstConCompon := '';
ALastConObj := AFirstConObj;
ALastConCompon := '';
FICount := 0;
LICount := 0;
FirstCompon := nil;
LastCompon := nil;
IntCounts := TIntList.Create;
AllConnectedCompons := TSCSComponents.Create(false);
if (AComponent.FirstIDConnectedConnCompon <> 0) and (AComponent.FirstIDCompon <> 0) then
AFirstConObj := GetObjNameByIDCompon(AComponent.FirstIDConnectedConnCompon, AFirstConCompon); //TF_Main(GForm).DM.GetNameObjectConnectedToLineCompon(AComponent.FirstIDConnectedConnCompon, AComponent.FirstIDCompon);
if (AComponent.LastIDConnectedConnCompon <> 0) and (AComponent.LastIDCompon <> 0) then
ALastConObj := GetObjNameByIDCompon(AComponent.LastIDConnectedConnCompon, ALastConCompon); //TF_Main(GForm).DM.GetNameObjectConnectedToLineCompon(AComponent.LastIDConnectedConnCompon, AComponent.LastIDCompon);
// added by Tolik
if ((AComponent.IDNetType in [3,4,5,7])) then
begin
if (AComponent.FirstIDConnectedConnCompon <> 0) and (AComponent.LastIDConnectedConnCompon <> 0) then
begin
//FirstCompon := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(AComponent.FirstIDConnectedConnCompon);
// âñå êîìïîíåíòû íà êàáåëå
for i := 0 to AComponent.WholeComponent.Count -1 do
begin
currCompon := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(AComponent.WholeComponent[i]);
// áåðåì âñå ïîäêëþ÷åííûé òî÷å÷íûå
// ó÷àñòîê Êàáåëÿ
currCompon.LoadConections;
for j := 0 to currCompon.JoinedComponents.Count - 1 do
begin
if currCompon.JoinedComponents[j].IsLine = biFalse then
begin
connCompon := currCompon.JoinedComponents[j];
//while not connCompon.IsTop do
// connCompon := connCompon.GetParentComponent;
AllConnectedCompons.Add(connCompon);
end;
end;
end;
// ñ÷èòàåì êîëè÷åñòâî èíòåðôåéñîâ íà êàæäîì ïîäêëþ÷åííîì òî÷å÷íîì êîìïîíåíòå
for i := 0 to AllConnectedCompons.Count -1 do
begin
currCompon := AllConnectedCompons[i];
While not currCompon.IsTop do
currCompon := currCompon.GetParentComponent;
FICount := 0;
for j := 0 to currCompon.Interfaces.Count - 1 do
begin
if currCompon.Interfaces[j].TypeI = itFunctional then
inc(FICount);
end;
for j := 0 to currCompon.ChildReferences.Count - 1 do
begin
for k := 0 to currCompon.ChildReferences[j].Interfaces.Count - 1 do
begin
if currCompon.ChildReferences[j].Interfaces[k].TypeI = itFunctional then
inc(FICount);
end;
end;
IntCounts.Add(FICount);
end;
// Èùåì êîìïîíåíò ñ íàèáîëüøèì êîëè÷åñòâîì èíòåðôåéñîâ
LICount := 0;
FICount := IntCounts[0];
for i := 1 to AllConnectedCompons.Count - 1 do
begin
if FICount < IntCounts[i] then
begin
FICount := IntCounts[i];
LICount := i;
end;
end;
// ïåðâûé ïîäêëþ÷åííûé
FirstCompon := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(AllConnectedCompons[LICount].ID);
AFirstConObj := GetObjNameByIDCompon(FirstCompon.id, AFirstConCompon);
// âòîðîé (èëè ñïèñîê, åñëè èõ íåñêîëüêî)
if AllConnectedCompons.Count = 2 then
begin
for i := 0 to AllConnectedCompons.Count - 1 do
if AllConnectedCompons[i] <> FirstCompon then
LastCompon := AllConnectedCompons[i];
ALastConObj := GetObjNameByIDCompon(LastCompon.id, ALastConCompon);
if ALastConCompon <> '' then
ALastConObj := ALastConObj + '/' + ALastConCompon;
end
else
begin
ALastConObj := '';
for i := 0 to AllConnectedCompons.Count -1 do
begin
currCompon := AllConnectedCompons[i];
//While not currCompon.IsTop do
// currCompon := currCompon.GetParentComponent;
if currCompon <> FirstCompon then
begin
tmpstr := GetObjNameByIDCompon(currCompon.id, ALastConCompon);
if ALastConCompon <> '' then
tmpstr := tmpstr + '/' + ALastConCompon;
if ALastConObj = '' then
ALastConObj := tmpstr
else
ALastConObj := ALastConObj + #13#10 + tmpstr;
end;
end;
end;
{ LastCompon := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(AComponent.LastIDConnectedConnCompon);
if ((FirstCompon <> nil) and (LastCompon <> nil)) then
begin
if ((FirstCompon <> nil) and (LastCompon <> nil)) then
begin
While not FirstCompon.IsTop do
FirstCompon := FirstCompon.GetParentComponent;
While not LastCompon.IsTop do
LastCompon := LastCompon.GetParentComponent;
// êîëè÷åñòâî èíòåðôåéñîâ íà êîíöàõ ñîåäèíåíèÿ
for i := 0 to FirstCompon.Interfaces.Count - 1 do
begin
if FirstCompon.Interfaces[i].TypeI = itFunctional then
inc(FICount);
end;
for i := 0 to FirstCompon.ChildReferences.Count - 1 do
begin
for j := 0 to FirstCompon.ChildReferences[i].Interfaces.Count - 1 do
begin
if FirstCompon.ChildReferences[i].Interfaces[j].TypeI = itFunctional then
inc(FICount);
end;
end;
for i := 0 to LastCompon.Interfaces.Count - 1 do
begin
if LastCompon.Interfaces[i].TypeI = itFunctional then
inc(LICount);
end;
for i := 0 to LastCompon.ChildReferences.Count - 1 do
begin
for j := 0 to LastCompon.ChildReferences[i].Interfaces.Count - 1 do
begin
if LastCompon.ChildReferences[i].Interfaces[j].TypeI = itFunctional then
inc(LICount);
end;
end;
if LICount > FICount then
begin
s := ALastConObj;
ALastConObj := AFirstConObj;
AFirstConObj := s;
end;
end;
end;}
end;
end;
//*******
{CatalogFirst.ID := 0;
CatalogFirst.Name := '';
CatalogLast.ID := 0;
CatalogLast.Name := '';
WasReplace := false;
if AComponent.FirstIDConnectedConnCompon <> -1 then
CatalogFirst := TF_Main(GForm).DM.GetCatalogByCompon(AComponent.FirstIDConnectedConnCompon);
if AComponent.LastIDConnectedConnCompon <> -1 then
CatalogLast := TF_Main(GForm).DM.GetCatalogByCompon(AComponent.LastIDConnectedConnCompon);
ConnectedObjFirst := TSCSCatalog.Create(GForm);
ConnectedObjLast := TSCSCatalog.Create(GForm);
if CatalogFirst.ID <> 0 then
ConnectedObjFirst.LoadAllComponents(CatalogFirst.ID, false);
if CatalogLast.ID <> 0 then
ConnectedObjLast.LoadAllComponents(CatalogLast.ID, false);
if CatalogFirst.Name <> '' then
AFirstConObj := GetNameAndIndexByTCatalog(CatalogFirst);
if CatalogLast.Name <> '' then
ALastConObj := GetNameAndIndexByTCatalog(CatalogLast);
}
{
if ConnectedObjLast.SCSComponents.Count < ConnectedObjFirst.SCSComponents.Count then
begin
Buf := AComponent.FirstIDConnectedConnCompon;
AComponent.FirstIDConnectedConnCompon := AComponent.LastIDConnectedConnCompon;
AComponent.LastIDConnectedConnCompon := Buf;
WasReplace := true;
end;
case WasReplace of
True:
begin
if CatalogLast.Name <> '' then
AFirstConObj := GetNameAndIndexByTCatalog(CatalogLast);
if CatalogFirst.Name <> '' then
ALastConObj := GetNameAndIndexByTCatalog(CatalogFirst);
end;
False:
begin
if CatalogFirst.Name <> '' then
AFirstConObj := GetNameAndIndexByTCatalog(CatalogFirst);
if CatalogLast.Name <> '' then
ALastConObj := GetNameAndIndexByTCatalog(CatalogLast);
end;
end; }
finally
//ConnectedObjFirst.Free;
//ConnectedObjLast.Free;
IntCounts.Free;
FreeAndNil(AllConnectedCompons);
end;
end;
procedure AddTextToLine(AText: String);
const PartLength = 17;
var TextPart: String[PartLength];
TextLength: Integer;
i: Integer;
begin
TextPart := AText;
TextLength := Length(TextPart);
if TextLength < PartLength then
begin
SetLength(TextPart, PartLength);
for i := TextLength + 1 to PartLength do
TextPart[i] := ' ';
end;
TextPart[PartLength] := ' ';
TextLine := TextLine + TextPart;
end;
begin
SetLength(CableTypes,0);
CableIdsList := TintList.Create;
try
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
if Not CheckCanShowReport(AFolder) then
Exit; ///// EXIT /////
FCatalog := AFolder;
//FolderIDComponList := Tlist.Create;
ListWithLookedCompons := TList.Create;
WholeComponent := nil;
//Component := TSCSComponent.Create(GForm);
//FolderIDComponList := GetFolderComponList(GForm, AFolder, [itSCSLine]);
//if FolderIDComponList = nil then
// Exit; ///// EXIT /////
{RichEdit_Report.Lines.Clear;
RichEdit_Report.DefAttributes.Size := 10;
RichEdit_Report.DefAttributes.Name := 'Courier New';
RichEdit_Report.Lines.Add(DupStr('-', 100));
RichEdit_Report.Lines.Add('Êîìïîíåíò Íà÷àëî ñîåä. Êîíåö ñîåä. Äëèíà Öåíà Ñòîèìîñòü ');
RichEdit_Report.Lines.Add(DupStr('-', 100)); }
{CurrMT.MasterSource := nil;
CurrMT.Active := false;
CurrMT.Active := True;
CurrMTGrp.Active := false;
CurrMTGrp.Active := True;
if AFormMode = fmRCableCanal then
begin
CurrMT.MasterSource := DataSource_MT_RCableGroup;
CurrMT.MasterFields := fnID;
CurrMT.DetailFields := fnIDGroup;
end;
}
CurrMTGrp := nil;
CurrMT := nil;
if AFormMode = fmRCable then
begin
CurrMTGrp := MemTable_RCableGroup;
CurrMT := MemTable_RCable;
end
else
if AFormMode = fmRCableCanal then
begin
CurrMTGrp := FmtCableChannelGrp;
CurrMT := FmtCableChannel;
end;
CurrMT.MasterSource := nil;
CurrMT.Active := false;
//CurrMT.Active := True;
CurrMTGrp.Active := false;
//CurrMTGrp.Active := True;
if AFormMode = fmRCableCanal then
begin
CurrMT.MasterSource := FdsrcCableChannelGrp; //DataSource_MT_RCableGroup;
CurrMT.MasterFields := fnID;
CurrMT.DetailFields := fnIDGroup;
end;
CurrMTGrp.Active := True;
CurrMT.Active := True;
BeginProgress(pcPreparingReport);
try
{FExceedLength := 0;
//if AFormMode = fmRCableExceedLength then
begin
List := TF_Main(GForm).GSCSBase.CurrProject.GetListBySCSID(AFolder.ListID);
if Assigned(List) then
FExceedLength := List.Setting.TwistedPairMaxLength;
end; }
with TF_Main(GForm).DM do
//for i := 0 to FolderIDComponList.Count - 1 do
for i := 0 to AFolder.ComponentReferences.Count - 1 do
begin
Component := AFolder.ComponentReferences[i];
//CurrIDCompon := Integer(FolderIDComponList.Items[i]^);
if Assigned(Component) and CheckNoIDinList(Component.ID, ListWithLookedCompons) then
begin
ComponSignType := Component.GetPropertyValueAsInteger(pnSignType);
//Component.LoadComponentByID(CurrIDCompon, false);
if ((Component.IsLine = biTrue) and ((ComponSignType = oitProjectible) or (ACanHaveActiveComponents)) and
( not ( Component.IDNetType in [3,4,5,7])) and CheckCanLookComponInReportCable(Component, ACanHaveDismountAccount)) then
begin
Component.RefreshWholeLengthIfNecessary;
case AFormMode of
fmRCable, fmRCableExceedLength:
if CheckSysNameIsCable(Component.ComponentType.SysName) then
begin
// Added by Tolik
if not cbNone.Checked then
// CableTypesAdd(Component, CableTypes, CableIdsList,MemTable_RCableJournal.AutoIncValue+1);
CableTypesAdd(Component, CableTypes, CableIdsList,Component.ID, Self);
//*** Åñòü ëè ôóíêöèîíàëüíûå èíòåðôåéñû
//if HaveComponFunctionalInterfaces(scsQSelect, CurrIDCompon) then
if Component.HaveInterfaceByType(itFunctional) then
begin
FExceedLength := 0;
List := Component.GetListOwner;
if Assigned(List) then
FExceedLength := List.Setting.TwistedPairMaxLength;
Component.LoadWholeComponent(false);
Component.LoadWholeLength;
//Component.LoadInterfaces;
//if (AFormMode = fmRCable) or
// ((AFormMode = fmRCableExceedLength) and (Component.HaveInterfaceByIDInterface(iidTwistedPair)) and (Component.Length - FExceedLength > CmpDelta)) then
// //((AFormMode = fmRCableExceedLength) and (Component.MaxLength > 0) and (Component.Length - Component.MaxLength > CmpDelta) ) then
if Not ACanHaveDismountAccount or
Not CheckHaveWholeComponentDismounted(FCatalog, Component.WholeComponent) then
begin
DefineBeginEnd(Component, FirstObjName, FirstComponName, LastObjName, LastComponName);
//Component.NormsResources.CalcResourcesCost(true, true);
CurrMT.Append;
CurrMT.FieldByName(fnID).AsInteger := Component.ID;
CurrMT.FieldByName(fnMarkID).AsInteger := Component.MarkID;
CurrMT.FieldByName(fnName).AsString := GetComponNameForVisible(Component.Name, Component.NameMark);
CurrMT.FieldByName(fnNameSimple).AsString := Component.Name;
CurrMT.FieldByName(fnNameMark).AsString := Component.NameMark;
ComponLength := 0;
ComponLengthReserv := 0;
ComponMaxLength := 0;
ComponPrice := 0;
if CheckPriceTransformToUOMByCompType(@Component.ComponentType) then
begin
CurrMT.FieldByName(fnIzm).AsString := GetNameUOM(TF_Main(GForm).FUOM, true);
ComponLength := FloatInUOM(Component.Length, umMetr, TF_Main(GForm).FUOM);
ComponLengthReserv := FloatInUOM(Component.LengthReserv, umMetr, TF_Main(GForm).FUOM);
ComponMaxLength := FloatInUOM(Component.MaxLength, umMetr, TF_Main(GForm).FUOM);
ComponPrice := FloatInUOM(Component.Price, TF_Main(GForm).FUOM, umMetr);
end
else
begin
CurrMT.FieldByName(fnIzm).AsString := Component.Izm;
ComponLength := Component.Length;
ComponLengthReserv := Component.LengthReserv;
ComponMaxLength := Component.MaxLength;
ComponPrice := Component.Price;
end;
CurrMT.FieldByName(fnNameBegin).AsString := FirstObjName;
CurrMT.FieldByName(fnNameBeginCompon).AsString := FirstComponName;
// Ïîëå äëÿ ñîðòèðîâêè
if FirstComponName = '' then
CurrMT.FieldByName(fnNameBeginFull).AsString := FirstObjName
else
CurrMT.FieldByName(fnNameBeginFull).AsString := FirstObjName+'/'+FirstComponName;
CurrMT.FieldByName(fnNameEnd).AsString := LastObjName;
CurrMT.FieldByName(fnNameEndCompon).AsString := LastComponName;
// Ïîëå äëÿ ñîðòèðîâêè
if LastComponName = '' then
CurrMT.FieldByName(fnNameEndFull).AsString := LastObjName
else
CurrMT.FieldByName(fnNameEndFull).AsString := LastObjName +'/'+LastComponName;
CurrMT.FieldByName('Length').AsFloat := RoundCP(ComponLength);
CurrMT.FieldByName('Length_Reserv').AsFloat := RoundCP(ComponLengthReserv);
CurrMT.FieldByName('Max_Length').AsFloat := RoundCP(ComponMaxLength);
CurrMT.FieldByName('Price').AsFloat := RoundCP(ComponPrice); //RoundX(Component.NormsResources.ResourcesCostPerOneNorm, 2);
CurrMT.FieldByName('Cost').AsFloat := RoundCP(ComponPrice*ComponLength); //RoundX(Component.NormsResources.ResourcesCost, 2);
//*** Äëèíà ïðåâûøàåò ãðàíè÷íîå çíà÷åíèå.
if (Component.HaveInterfaceByGUIDInterface(guidTwistedPair)) and
(Component.Length - FExceedLength > cnstCmpLenDelta) then
CurrMT.FieldByName('ExceedLength').AsBoolean := true
else
CurrMT.FieldByName('ExceedLength').AsBoolean := false;
CurrMT.Post;
{TextLine := '';
AddTextToLine(Component.Name);
AddTextToLine(FirstName);
AddTextToLine(LastName);
AddTextToLine(FloatToStr(RoundX(Component.Length, 3)) +' ì');
AddTextToLine(FloatToStr(RoundX(Component.ResourcesCostPerOneNorm, 3)) +' '+GCurrency.Name_Brief);
AddTextToLine(FloatToStr(RoundX(Component.ResourcesCost, 2)) +' '+GCurrency.Name_Brief);
RichEdit_Report.Lines.Add(TextLine);
}
{RichEdit_Report.Lines.Add(Component.Name + DupStr(' ', 2) +
FirstName + DupStr(' ', 2) + LastName + DupStr(' ', 2) +
FloatToStr(RoundX(Component.Length, 2)) + DupStr(' ', 2)+
FloatToStr(RoundX(Component.ResourcesCostPerOneNorm, 2)) + DupStr(' ', 2)+
FloatToStr(RoundX(Component.ResourcesCost, 2)) );}
end;
end;
for j := 0 to Component.WholeComponent.Count - 1 do
begin
New(ptrID);
ptrID^ := Component.WholeComponent.Items[j];
ListWithLookedCompons.Add(ptrID);
end;
end;
fmRCableCanal:
if CheckSysNameIsCableChannel(Component.ComponentType.SysName) then
begin
Component.LoadCurrLength;
//Component.NormsResources.CalcResourcesCost(true, true);
//*** Íàéòè/Ñîçäàòü Ãðóïïó
if Not CurrMTGrp.Locate(fnGUID, Component.GuidNB, []) then
begin
CurrMTGrp.Append;
CurrMTGrp.FieldByName(fnGUID).AsString := Component.GuidNB;
CurrMTGrp.FieldByName(fnName).AsString := Component.GetNameForVisible(false);
CurrMTGrp.FieldByName(fnLength).AsFloat := 0;
CurrMTGrp.FieldByName(fnLengthReserv).AsFloat := 0;
CurrMTGrp.FieldByName(fnCost).AsFloat := 0;
CurrMTGrp.Post;
end;
if CurrMTGrp.Locate(fnGUID, Component.GuidNB, []) then
begin
CurrMT.Append;
CurrMT.FieldByName(fnID).AsInteger := Component.ID;
CurrMT.FieldByName(fnMarkID).AsInteger := Component.MarkID;
CurrMT.FieldByName(fnName).AsString := Component.GetNameForVisible(false); //GetComponNameForVisible(Component.Name, Component.NameMark);
CurrMT.FieldByName(fnNameSimple).AsString := Component.Name;
CurrMT.FieldByName(fnNameMark).AsString := Component.NameMark;
ComponLength := 0;
ComponLengthReserv := 0;
ComponPrice := 0;
if CheckPriceTransformToUOMByCompType(@Component.ComponentType) then
begin
CurrMT.FieldByName(fnIzm).AsString := GetNameUOM(TF_Main(GForm).FUOM, true);
ComponLength := FloatInUOM(Component.Length, umMetr, TF_Main(GForm).FUOM);
ComponLengthReserv := FloatInUOM(Component.LengthReserv, umMetr, TF_Main(GForm).FUOM);
ComponPrice := FloatInUOM(Component.Price, TF_Main(GForm).FUOM, umMetr);
end
else
begin
CurrMT.FieldByName(fnIzm).AsString := Component.Izm;
ComponLength := Component.Length;
ComponLengthReserv := Component.LengthReserv;
ComponPrice := Component.Price;
end;
CableCanalCost := ComponPrice * ComponLength;
CurrMT.FieldByName('FILLING').AsFloat := Component.GetFullnessPercentCableCanal;
CurrMT.FieldByName('Length').AsFloat := RoundCP(ComponLength);
CurrMT.FieldByName(fnLengthReserv).AsFloat := RoundCP(ComponLengthReserv);
CurrMT.FieldByName('Price').AsFloat := RoundCP(ComponPrice); //Component.NormsResources.ResourcesCostPerOneNorm;
CurrMT.FieldByName('Cost').AsFloat := RoundCP(CableCanalCost); //Component.NormsResources.ResourcesCost;
CurrMT.Post;
CurrMTGrp.Edit;
CurrMTGrp.FieldByName(fnLength).AsFloat := CurrMTGrp.FieldByName(fnLength).AsFloat + RoundCP(ComponLength);
CurrMTGrp.FieldByName(fnLengthReserv).AsFloat := CurrMTGrp.FieldByName(fnLengthReserv).AsFloat + RoundCP(ComponLengthReserv);
CurrMTGrp.FieldByName(fnCost).AsFloat := CurrMTGrp.FieldByName(fnCost).AsFloat + RoundCP(CableCanalCost);
CurrMTGrp.Post;
//*** ñîðòèðîâàòü êàáåëüíûå êàíàëû â ãðóïïå
CurrMT.SortOn(fnMarkID, []);
end;
end;
end; // Case End
end;
end;
end; // ïåðâûé ïðîõîä
// âòîðîé ïðîõîä
// ñìîòðèì åëåêòðîñåòü, òåëåâèç., è ò.ï. è çàñûïàåì â òàáëèöó
for i := 0 to AFolder.ComponentReferences.Count - 1 do
begin
Component := AFolder.ComponentReferences[i];
if Assigned(Component) and CheckNoIDinList(Component.ID, ListWithLookedCompons) then
begin
ComponSignType := Component.GetPropertyValueAsInteger(pnSignType);
if ((Component.IsLine = biTrue) and ((ComponSignType = oitProjectible) or (ACanHaveActiveComponents)) and
( (Component.IDNetType in [3,4,5,7])) and CheckCanLookComponInReportCable(Component, ACanHaveDismountAccount)) then
begin
Component.RefreshWholeLengthIfNecessary;
case AFormMode of
fmRCable, fmRCableExceedLength:
if CheckSysNameIsCable(Component.ComponentType.SysName) then
begin
// Added by Tolik
if not cbNone.Checked then
// CableTypesAdd(Component, CableTypes, CableIdsList,MemTable_RCableJournal.AutoIncValue+1);
CableTypesAdd(Component, CableTypes, CableIdsList,Component.ID, Self);
//*** Åñòü ëè ôóíêöèîíàëüíûå èíòåðôåéñû
//if HaveComponFunctionalInterfaces(scsQSelect, CurrIDCompon) then
if Component.HaveInterfaceByType(itFunctional) then
begin
Component.LoadWholeComponent(false);
Component.LoadWholeLength;
if Not ACanHaveDismountAccount or
Not CheckHaveWholeComponentDismounted(FCatalog, Component.WholeComponent) then
begin
DefineBeginEnd(Component, FirstObjName, FirstComponName, LastObjName, LastComponName);
CurrMT.Append;
CurrMT.FieldByName(fnID).AsInteger := Component.ID;
CurrMT.FieldByName(fnMarkID).AsInteger := Component.MarkID;
CurrMT.FieldByName(fnName).AsString := GetComponNameForVisible(Component.Name, Component.NameMark);
CurrMT.FieldByName(fnNameSimple).AsString := Component.Name;
CurrMT.FieldByName(fnNameMark).AsString := Component.NameMark;
ComponLength := 0;
ComponLengthReserv := 0;
ComponMaxLength := 0;
ComponPrice := 0;
if CheckPriceTransformToUOMByCompType(@Component.ComponentType) then
begin
CurrMT.FieldByName(fnIzm).AsString := GetNameUOM(TF_Main(GForm).FUOM, true);
ComponLength := FloatInUOM(Component.Length, umMetr, TF_Main(GForm).FUOM);
ComponLengthReserv := FloatInUOM(Component.LengthReserv, umMetr, TF_Main(GForm).FUOM);
ComponMaxLength := FloatInUOM(Component.MaxLength, umMetr, TF_Main(GForm).FUOM);
ComponPrice := FloatInUOM(Component.Price, TF_Main(GForm).FUOM, umMetr);
end
else
begin
CurrMT.FieldByName(fnIzm).AsString := Component.Izm;
ComponLength := Component.Length;
ComponLengthReserv := Component.LengthReserv;
ComponMaxLength := Component.MaxLength;
ComponPrice := Component.Price;
end;
CurrMT.FieldByName(fnNameBegin).AsString := FirstObjName;
CurrMT.FieldByName(fnNameBeginCompon).AsString := FirstComponName;
// Ïîëå äëÿ ñîðòèðîâêè
if FirstComponName = '' then
CurrMT.FieldByName(fnNameBeginFull).AsString := FirstObjName
// commentsd by Tolik
else
CurrMT.FieldByName(fnNameBeginFull).AsString := FirstObjName+'/'+FirstComponName;
CurrMT.FieldByName(fnNameEnd).AsString := LastObjName;
CurrMT.FieldByName(fnNameEndCompon).AsString := '';//LastComponName;
// Ïîëå äëÿ ñîðòèðîâêè
if LastComponName = '' then
CurrMT.FieldByName(fnNameEndFull).AsString := LastObjName;
//commented by Tolik
//else
// CurrMT.FieldByName(fnNameEndFull).AsString := LastObjName +'/'+LastComponName;
CurrMT.FieldByName('Length').AsFloat := RoundCP(ComponLength);
CurrMT.FieldByName('Length_Reserv').AsFloat := RoundCP(ComponLengthReserv);
CurrMT.FieldByName('Max_Length').AsFloat := RoundCP(ComponMaxLength);
CurrMT.FieldByName('Price').AsFloat := RoundCP(ComponPrice); //RoundX(Component.NormsResources.ResourcesCostPerOneNorm, 2);
CurrMT.FieldByName('Cost').AsFloat := RoundCP(ComponPrice*ComponLength); //RoundX(Component.NormsResources.ResourcesCost, 2);
CurrMT.FieldByName('ExceedLength').AsBoolean := false;
CurrMT.Post;
end;
end;
for j := 0 to Component.WholeComponent.Count - 1 do
begin
New(ptrID);
ptrID^ := Component.WholeComponent.Items[j];
ListWithLookedCompons.Add(ptrID);
end;
end;
fmRCableCanal:
if CheckSysNameIsCableChannel(Component.ComponentType.SysName) then
begin
Component.LoadCurrLength;
//*** Íàéòè/Ñîçäàòü Ãðóïïó
if Not CurrMTGrp.Locate(fnGUID, Component.GuidNB, []) then
begin
CurrMTGrp.Append;
CurrMTGrp.FieldByName(fnGUID).AsString := Component.GuidNB;
CurrMTGrp.FieldByName(fnName).AsString := Component.GetNameForVisible(false);
CurrMTGrp.FieldByName(fnLength).AsFloat := 0;
CurrMTGrp.FieldByName(fnLengthReserv).AsFloat := 0;
CurrMTGrp.FieldByName(fnCost).AsFloat := 0;
CurrMTGrp.Post;
end;
if CurrMTGrp.Locate(fnGUID, Component.GuidNB, []) then
begin
CurrMT.Append;
CurrMT.FieldByName(fnID).AsInteger := Component.ID;
CurrMT.FieldByName(fnMarkID).AsInteger := Component.MarkID;
CurrMT.FieldByName(fnName).AsString := Component.GetNameForVisible(false); //GetComponNameForVisible(Component.Name, Component.NameMark);
CurrMT.FieldByName(fnNameSimple).AsString := Component.Name;
CurrMT.FieldByName(fnNameMark).AsString := Component.NameMark;
ComponLength := 0;
ComponLengthReserv := 0;
ComponPrice := 0;
if CheckPriceTransformToUOMByCompType(@Component.ComponentType) then
begin
CurrMT.FieldByName(fnIzm).AsString := GetNameUOM(TF_Main(GForm).FUOM, true);
ComponLength := FloatInUOM(Component.Length, umMetr, TF_Main(GForm).FUOM);
ComponLengthReserv := FloatInUOM(Component.LengthReserv, umMetr, TF_Main(GForm).FUOM);
ComponPrice := FloatInUOM(Component.Price, TF_Main(GForm).FUOM, umMetr);
end
else
begin
CurrMT.FieldByName(fnIzm).AsString := Component.Izm;
ComponLength := Component.Length;
ComponLengthReserv := Component.LengthReserv;
ComponPrice := Component.Price;
end;
CableCanalCost := ComponPrice * ComponLength;
CurrMT.FieldByName('FILLING').AsFloat := Component.GetFullnessPercentCableCanal;
CurrMT.FieldByName('Length').AsFloat := RoundCP(ComponLength);
CurrMT.FieldByName(fnLengthReserv).AsFloat := RoundCP(ComponLengthReserv);
CurrMT.FieldByName('Price').AsFloat := RoundCP(ComponPrice); //Component.NormsResources.ResourcesCostPerOneNorm;
CurrMT.FieldByName('Cost').AsFloat := RoundCP(CableCanalCost); //Component.NormsResources.ResourcesCost;
CurrMT.Post;
CurrMTGrp.Edit;
CurrMTGrp.FieldByName(fnLength).AsFloat := CurrMTGrp.FieldByName(fnLength).AsFloat + RoundCP(ComponLength);
CurrMTGrp.FieldByName(fnLengthReserv).AsFloat := CurrMTGrp.FieldByName(fnLengthReserv).AsFloat + RoundCP(ComponLengthReserv);
CurrMTGrp.FieldByName(fnCost).AsFloat := CurrMTGrp.FieldByName(fnCost).AsFloat + RoundCP(CableCanalCost);
CurrMTGrp.Post;
//*** ñîðòèðîâàòü êàáåëüíûå êàíàëû â ãðóïïå
CurrMT.SortOn(fnMarkID, []);
end;
end;
end;
end;
end;
end;
if AFormMode = fmRCableCanal then
CurrMTGrp.SortOn(fnName, []);
///////////////////////////////////////////////
AParams.FReportSortInfo.FUsedFieldNames.Clear;
AParams.FReportSortInfo.FUsedFieldNames.Add(fnNameSimple);
AParams.FReportSortInfo.FUsedFieldNames.Add(fnNameBeginFull);
AParams.FReportSortInfo.FUsedFieldNames.Add(fnNameEndFull);
SortMemTableByParams(CurrMT, AParams, AReportItemParamValues);
{if AFormMode = fmRCable then
CurrMT.SortOn(fnMarkID, []);
if AFormMode = fmRCableExceedLength then
CurrMT.SortOn('ExceedLength', []);}
finally
EndProgress;
FreeList(ListWithLookedCompons);
end;
// Added by Tolik
// Åñëè òðåáóåòñÿ ïîñ÷èòàòü ðàñõîä êàáåëÿ èç êàòóøåê,
// òî ïîñ÷èòàåì
if not cbNone.Checked then
begin
if cbMaxScrapRate.Checked then
CableReelCalculate(CableTypes, 'MaxScrapRate',ReelsCableFlow, Self);
if cbMaxEfficiency.Checked then
CableReelCalculate(CableTypes, 'MaxEfficiency',ReelsCableFlow, Self);
CableReelNamesToMemTable(MemTable_RCable ,CableTypes);
end
// åñëè íåò - ñáðîñèì ðåçóëüòàòû ïðåäèäóùèõ ðàñ÷åòîâ,
// â ñëó÷àå íàëè÷èÿ òàêîâûõ
else
begin
if ReelsCableFlow <> nil then
ReelsCableFlow.Clear
else
// íåò ñòðîê äëÿ îò÷åòà - ñîçäàåì ïóñòîé ñïèñîê ()
ReelsCableFlow := TStringList.Create;
end;
FreeCableTypes(CableTypes);
GFormMode := AFormMode;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
//ShowModal;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowFolderCableReport: '+E.Message);
end;
end;
procedure TF_ResourceReport.ShowFolderDisparityComponReport(AFolder: TSCSCatalog; AParams: TReportItemParams;
AFormMode: TResourceReportFormMode);
var //FolderIDComponList: TList;
ListWithLookedCompons: TList;
ptrLookedIDs: PTwoID;
CurrIDCompon: Integer;
i, j: Integer;
Component: TSCSComponent;
OwnerCompon: TSCSCatalog;
ComponColor: Integer;
ComponColorStr: String;
ComponIDProducer: Integer;
FirstName: String;
LastName: String;
function CheckNoLookedIDs(AID1, AID2: Integer): Boolean;
var i: Integer;
begin
Result := true;
for i := 0 to ListWithLookedCompons.Count - 1 do
begin
ptrLookedIDs := ListWithLookedCompons[i];
if ( (ptrLookedIDs.ID1 = AID1) and (ptrLookedIDs.ID2 = AID2) ) or
( (ptrLookedIDs.ID1 = AID2) and (ptrLookedIDs.ID2 = AID1) ) then
begin
Result := false;
Break; //// BREAK /////
end;
end;
end;
procedure FindDisparityColorInCompRel(AComponent: TSCSComponent; AOwner: TSCSCatalog; AComponColor: Integer; ACompRelList: Tlist);
var i: integer;
ptrCompRel: PComplect;
SCSComponent: TSCSComponent;
OwnerComp: TSCSCatalog;
OppositeID: Integer;
CompColor: Integer;
CompColorStr: String;
ConnectKindStr: String;
HaveDisparity: Boolean;
begin
if AComponColor = -1 then
Exit; ///// EXIT /////
if Not Assigned(AOwner) then
Exit; ///// EXIT /////
//SCSComponent := TSCSComponent.Create(GForm);
for i := 0 to ACompRelList.Count - 1 do
begin
ptrCompRel := ACompRelList[i];
OppositeID := 0;
if ptrCompRel.ID_Child <> AComponent.ID then
OppositeID := ptrCompRel.ID_Child;
if ptrCompRel.ID_Component <> AComponent.ID then
OppositeID := ptrCompRel.ID_Component;
if OppositeID = 0 then
Exit; ///// EXIT /////
if Not CheckNoLookedIDs(AComponent.ID, OppositeID) then
Exit; ///// EXIT /////
//SCSComponent.LoadComponentByID(OppositeID, false);
SCSComponent := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(OppositeID);
if Assigned(SCSComponent) then
begin
HaveDisparity := false;
case AFormMode of
fmRDisparityComponColor:
begin
CompColor := SCSComponent.GetPropertyValueAsInteger(pnColor);
if (AComponColor <> CompColor) and (CompColor <> -1) then
HaveDisparity := true;
end;
fmRDisparityComponProducer:
if AComponent.ID_Producer <> SCSComponent.ID_Producer then
HaveDisparity := true;
end;
//*** Åñëè öâåòà íå ñîâïàäàþò, òî âûâåñòè êîìïîíåíòû â îò÷åò
if HaveDisparity then
begin
OwnerComp := SCSComponent.GetFirstParentCatalog;
if Assigned(OwnerComp) then
begin
case ptrCompRel.ConnectType of
cntComplect:
ConnectKindStr := cResourceReport_Msg6_1;
cntUnion:
ConnectKindStr := cResourceReport_Msg6_2;
end;
MemTable_RDisparityCompColor.Append;
MemTable_RDisparityCompColor.FieldByName('ID1').AsInteger := AComponent.ID;
MemTable_RDisparityCompColor.FieldByName('Name1').AsString := AComponent.GetNameForVisible(false); //GetComponNameForVisible(AComponent.Name, AComponent.NameMark);
MemTable_RDisparityCompColor.FieldByName('Name_Object1').AsString := OwnerComp.GetNameForVisible; //GetNameAndIndexByTCatalog(AOwner);
MemTable_RDisparityCompColor.FieldByName('ID2').AsInteger := SCSComponent.ID;
MemTable_RDisparityCompColor.FieldByName('Name2').AsString := SCSComponent.GetNameForVisible(false); //GetComponNameForVisible(SCSComponent.Name, SCSComponent.NameMark);
MemTable_RDisparityCompColor.FieldByName('Name_Object2').AsString := OwnerComp.GetNameForVisible; //GetNameAndIndexByTCatalog(OwnerComp);
MemTable_RDisparityCompColor.FieldByName('Name_Connect_Type').AsString := ConnectKindStr;
MemTable_RDisparityCompColor.Post;
New(ptrLookedIDs);
ptrLookedIDs.ID1 := AComponent.ID;
ptrLookedIDs.ID2 := SCSComponent.ID;
ListWithLookedCompons.Add(ptrLookedIDs);
end;
end;
end;
end;
//SCSComponent.Free;
end;
begin
try
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
if Not CheckCanShowReport(AFolder) then
Exit; ///// EXIT /////
FCatalog := AFolder;
//FolderIDComponList := Tlist.Create;
ListWithLookedCompons := TList.Create;
//WholeComponent := nil;
//Component := TSCSComponent.Create(GForm);
//FolderIDComponList := GetFolderComponList(GForm, AFolder, [itSCSLine, itSCSConnector]);
//if FolderIDComponList = nil then
// Exit; ///// EXIT /////
MemTable_RDisparityCompColor.Active := false;
MemTable_RDisparityCompColor.Active := true;
BeginProgress(pcPreparingReport);
try
with TF_Main(GForm) do
for i := 0 to AFolder.ComponentReferences.Count - 1 do //for i := 0 to FolderIDComponList.Count - 1 do
begin
//Component.LoadComponentByID(Integer(FolderIDComponList[i]^), false);
//OwnerCompon := DM.GetCatalogByCompon(Component.ID);
Component := AFolder.ComponentReferences[i];
OwnerCompon := Component.GetFirstParentCatalog;
ComponColor := clWhite;
case AFormMode of
fmRDisparityComponColor:
ComponColor := Component.GetPropertyValueAsInteger(pnColor);
{fmRDisparityComponProducer:
ComponIDProducer}
end;
//Component.LoadComplects;
FindDisparityColorInCompRel(Component, OwnerCompon, ComponColor, Component.Complects);
//Component.LoadConections;
FindDisparityColorInCompRel(Component, OwnerCompon, ComponColor, Component.Connections);
end;
finally
EndProgress;
FreeList(ListWithLookedCompons);
end;
GFormMode := AFormMode; //fmRDisparityComponColor;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
//ShowModal;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowFolderDisparityComponReport: '+E.Message);
end;
end;
procedure TF_ResourceReport.ShowFolderCableJournal(AFolder: TSCSCatalog; AParams: TReportItemParams; AResRepFormMode: TResourceReportFormMode; ACanHaveActiveComponents, ACanHaveDismountAccount, AFullPath: Boolean);
var //FolderIDComponList: TList;
ListWithLookedCompons: TList;
CatalogList : TSCSCatalogs;
currSCSCatalog,nextSCSCatalog : TSCSCatalog;
CurrIDCompon: Integer;
i, j, k,l,m,n: Integer;
SCSComponent : TSCSComponent;
PartSCSComponent1, PartSCSComponent2 : TSCSComponent; // ÷àñòè êàáåëÿ
TopSCSComponent : TSCSComponent;
ComponList: TSCSComponents;
ComponCatagoryStr: String;
ComponCatagory: Integer;
Interfaces : TSCSInterfaces;
CurrSCSCatalogs : TSCSCatalogs;
propList,propList1 : TstringList;
ListCAD : TF_CAD;
currTrace,NextTrace : TFigure; // òðàññû, ïî êîòîðûì ïðîõîäèò êàáåëü
currLine : TOrthoLine;
ppropList : ^TStringList;
FirstTraceFound, NextTraceFound : Boolean;
Figure : TFigure;
Ortholine : TOrtholine;
Connector1, Connector2, Connector3, Connector4 : TConnectorObject;
Compon1,Compon2,Compon3,Compon4 : TSCSComponent;
// ComponList : TSCSComponents;
List : TList;
LineJoins : TStringList;
indexes : ^integer;
s : string;
CableTypes : TCableTypeArray;
CableIdsList : TintList;
// SCSObject : TSCSObject;
//InterfPortsNppFrom: TStringList;
//InterfTypesFrom: TStringList;
//InterfPortsNppTo: TStringList;
//InterfTypesTo: TStringList;
ListName: String;
FirstComponent: TSCSComponent;
LastComponent: TSCSComponent;
FromNppPort, FromNppPort1: Integer;
FromNppPortFromPos: Integer;
FromNppPortToPos: Integer;
FromPortName: String;
FromPort: TSCSInterface;
ToNppPort: Integer;
ToNppPortFromPos: Integer;
ToNppPortToPos: Integer;
ToPortName: String;
ToPort: TSCSInterface;
InterfCount: Integer;
MasterID: Integer;
ComponSignType: Integer;
ComponMarkTemplate: string;
ListOwner, ListOwner1: TSCSList;
TraceListOwner : TSCSList;
RoomOwner: TSCSCatalog;
SprComponentType: TNBComponentType;
Ports: TSCSInterfaces;
Port : TSCSInterface;
childCompon : TSCSComponent;
ptrID: ^Integer;
FirstCompon, LastCompon,currCompon : TSCScomponent;
PortCountTo, PortCountFrom : Integer;
{
function GetNameFrom(AFirstConnCompon: TSCSComponent): String;
var //CompCatalog: TCatalog;
OwnerCatalog: TSCSCatalog;
TopComponent: TSCSComponent;
begin
Result := '';
if Assigned(AFirstConnCompon) then
begin
TopComponent := AFirstConnCompon.GetTopComponent;
if (TopComponent <> nil) and (TopComponent <> AFirstConnCompon) then
Result := TopComponent.NameMark;
//OwnerCatalog := AFirstConnCompon.GetFirstParentCatalog;
//if Assigned(OwnerCatalog) then
//begin
// Result := OwnerCatalog.GetNameForVisible(false);
//end;
end;
end; }
//
function GetNameTo(ALastConnCompon, ALastLineCompon: TSCSComponent; var aNppPort: Integer; var aPortName: String;
aPort: TSCSInterface=nil; aPortFromPos: Integer=0; aPortToPos: Integer=0): String;
var
//HaveParent: Boolean;
//IDCurrCompon: Integer;
//PathList: TStringList;
//i: Integer;
//ResName: String;
//LastConnCompon: TSCSComponent;
//CurrCompon: TSCSComponent;
ListOwner: TSCSList;
LastConnComponObject: TSCSCatalog;
TopComponent: TSCSComponent;
ParentComponent: TSCSComponent;
ComponPath: TSCSComponents;
DepthJoinedConnCompon: TSCSComponent;
DepthComponInterfs: TSCSInterfaces;
PrevDepthComponInterfs: TSCSInterfaces;
Interf: TSCSInterface;
NppPortList: TIntList;
PortName: String;
i,m: Integer;
InternalJoinedCompon, PrevInternalJoinedCompon: TSCSComponent;
NppFrom, NppTo: Integer;
begin
Result := '';
//LastConnComponObject := ALastConnCompon.GetFirstParentCatalog;
//if Assigned(LastConnComponObject) then
// Result := LastConnComponObject.GetNameForVisible + '\';
//Result := Result + ALastConnCompon.GetNameForVisible;
ComponPath := TSCSComponents.Create(false);
TopComponent := ALastConnCompon.GetTopComponent;
if (TopComponent <> nil) and (TopComponent <> ALastConnCompon) then
Result := TopComponent.NameMark + '\';
ListOwner := ALastConnCompon.GetListOwner;
if ListOwner <> nil then
begin
//01.08.2012 DepthJoinedConnCompon := GetDepthJoinedConnComponByConnCompon(ALastConnCompon, ComponPath, nil, nil, nil);
DepthComponInterfs := TSCSInterfaces.Create(false);
PrevDepthComponInterfs := TSCSInterfaces.Create(false);
DepthJoinedConnCompon := GetDepthJoinedConnComponByConnCompon(ALastConnCompon, ComponPath, nil, DepthComponInterfs, PrevDepthComponInterfs,
aPort, aPortFromPos, aPortToPos, true);
//01.08.2012 - îïðåäåëÿåì ïîðò âíóòðåííåãî êîìïîíåíòà
if DepthJoinedConnCompon <> ALastConnCompon then
if PrevDepthComponInterfs.Count > 0 then
begin
for i := 0 to DepthComponInterfs.Count - 1 do
begin
Interf := DepthComponInterfs[i];
NppPortList := nil;
if Interf.IsPort = biTrue then
begin
NppPortList := GetNppPortsByConnected(Interf, Interf, PrevDepthComponInterfs[0]);
PortName := Interf.LoadName;
end
else if Interf.PortOwner <> nil then
begin
NppPortList := GetNppPortsByConnected(Interf.PortOwner, Interf, PrevDepthComponInterfs[0]);
PortName := Interf.PortOwner.LoadName;
end;
if NppPortList <> nil then
begin
if NppPortList.Count > 0 then
begin
aNppPort := NppPortList[0];
aPortName := PortName;
end;
FreeAndNil(NppPortList);
end;
end;
end;
FreeAndNil(DepthComponInterfs);
FreeAndNil(PrevDepthComponInterfs);
//*** Åñëè íóæíî îòîáðàæàòü ïîëíûé ïóòü ê ócòðîéñòâó
// íà÷èíàåì ñ êîìïîíåíòû íà óðîâåíü âûøå, ò.ê DepthJoinedConnCompon áóäåò äîáàâëåíà íèæå
if AFullPath then
begin
Result := '';
//04.02.2013 ParentComponent := DepthJoinedConnCompon.GetParentComponent;
ParentComponent := ComponPath[0].GetParentComponent; // êîìïîíåíò ê êîòîðîìó ïîäêëþ÷åí êàáåëü
while ParentComponent <> nil do
begin
if ParentComponent.NameMark <> '' then
begin
if Result <> '' then
Result := '\' + Result; //04.02.2013 Result + '\';
Result := ParentComponent.NameMark + Result;
end;
ParentComponent := ParentComponent.GetParentComponent;
end;
if Result <> '' then
Result := Result + '\';
end;
//*** Åñëè âíåøíèé ÑÊÑ, òî âûâîäèì ïîëíûé ïóòü ïîäêëþ÷åíèé, èíà÷å ïîäêëþ÷åííûé êîìïîíåíò âãëóáèíå
//01.08.2012 if ListOwner.Setting.SCSType = st_External then
if (ListOwner.Setting.SCSType = st_External) or AFullPath then
begin
PrevInternalJoinedCompon := nil;
for i := 0 to ComponPath.Count - 1 do
begin
InternalJoinedCompon := ComponPath[i];
//04.02.2013 îòîáðàæàåì íîìåð ïîðòà ïðåä. âíóòðåííåãî êîìïîíåíòà, ê êîòîðîìó ïäêëþ÷åí InternalJoinedCompon
if PrevInternalJoinedCompon <> nil then
if GetPortInfoByJoinedCompons(PrevInternalJoinedCompon, InternalJoinedCompon, NppFrom, NppTo) then
begin
if NppFrom = NppTo then
Result := Result +' ('+cNamePort+' '+IntToStr(NppFrom)+')'
else
Result := Result +' ('+cNamePort+' '+IntToStr(NppFrom)+'-'+IntToStr(NppTo)+')';
end;
if i > 0 then
Result := Result + '->';
Result := Result + ComponPath[i].GetNameForVisible;
PrevInternalJoinedCompon := InternalJoinedCompon; //04.02.2013
end;
end
else
Result := Result + DepthJoinedConnCompon.GetNameForVisible;
end
else
Result := Result + ALastConnCompon.GetNameForVisible;
{ 20070709
TopComponent := ALastConnCompon.GetTopComponent;
if (TopComponent <> nil) and (TopComponent <> ALastConnCompon) then
Result := TopComponent.NameMark + '\';
Result := Result + ALastConnCompon.GetNameForVisible;
}
{PathList := TStringList.Create;
//IDCurrCompon := AIDLastConnCompon;
HaveParent := True;
//LastConnCompon := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(AIDLastConnCompon);
LastConnCompon := ALastConnCompon;
if Assigned(LastConnCompon) then
begin
CurrCompon := LastConnCompon;
while Assigned(CurrCompon) do
begin
if PathList.Count < 1 then
PathList.Insert(0, CurrCompon.GetNameForVisible(false))
else
PathList.Insert(0, CurrCompon.Name);
if CurrCompon.Parent is TSCSComponent then
CurrCompon := TSCSComponent(CurrCompon.Parent)
else
CurrCompon := nil;
end;
end;
ResName := '';
for i := 0 to PathList.Count - 1 do
begin
if i = 0 then
ResName := PathList.Strings[i]
else
ResName := ResName + ' \ ' + PathList.Strings[i];
end;
PathList.Free;
Result := ResName;}
end;
{function GetMultiPortNameMark(APointComponent: TSCSComponent): String;
var
CurrParentComponent: TSCSComponent;
ResComponent: TSCSComponent;
begin
Result := '';
if APointComponent <> nil then
begin
ResComponent := APointComponent;
CurrParentComponent := APointComponent;
while CurrParentComponent <> nil do
begin
if CurrParentComponent.ComponentType.PortKind = pkMultiPort then
begin
ResComponent := CurrParentComponent;
Break; //// BREAK ////
end;
CurrParentComponent := CurrParentComponent.GetParentComponent;
end;
if ResComponent.NameMark <> '' then
Result := ResComponent.NameMark
else
Result := IntToStr(ResComponent.MarkID);
end;
end;}
begin
try
SetLength(CableTypes,0);
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
if Not CheckCanShowReport(AFolder) then
Exit; ///// EXIT /////
FCatalog := AFolder;
//FolderIDComponList := Tlist.Create;
ListWithLookedCompons := TList.Create;
//InterfPortsNppFrom := TStringList.Create;
//InterfTypesFrom := TStringList.Create;
//InterfPortsNppTo := TStringList.Create;
//InterfTypesTo := TStringList.Create;
//WholeComponent := nil;
//Component := TSCSComponent.Create(GForm);
//FolderIDComponList := GetFolderComponList(GForm, AFolder, [itSCSLine]);
//if FolderIDComponList = nil then
// Exit; ///// EXIT /////
MemTable_RCableJournal.Active := false;
MemTable_RCableJournal.Active := true;
//MemTable_RPortToAndFrom.Active := false;
//MemTable_RPortToAndFrom.Active := true;
BeginProgress(pcPreparingReport);
// Tolik
if CableIdsList = nil then
CableIdsList := TIntList.Create
else
CableIdsList.Clear;
if not cbShowCablePath.Checked then // åñëè íå ó÷èòûâàòü ïóòü êàáåëÿ, òî ïîêàçàòü
// ñòàíäàðòíûé îò÷åò
//
begin
try
with TF_Main(GForm).DM do
for i := 0 to AFolder.ComponentReferences.Count - 1 do //for i := 0 to FolderIDComponList.Count - 1 do
begin
//CurrIDCompon := Integer(FolderIDComponList.Items[i]^);
SCSComponent := AFolder.ComponentReferences[i];
if Assigned(SCSComponent) then
begin
ComponSignType := SCSComponent.GetPropertyValueAsInteger(pnSignType);
if (SCSComponent.IsLine = biTrue) and ((ComponSignType = oitProjectible) or (ACanHaveActiveComponents)) then
if SCSComponent.HaveInterfaceByType(itFunctional) then //*** Åñòü ëè ôóíêöèîíàëüíûå èíòåðôåéñû
if ((CheckSysNameIsCable(SCSComponent.ComponentType.SysName)) and
// Tolik
(not (SCSComponent.IDNetType in [3,4,5,7])) and
//
CheckNoIDinList(SCSComponent.ID, ListWithLookedCompons)) then
begin
SCSComponent.RefreshWholeLengthIfNecessary;
SCSComponent.LoadWholeComponent(false);
SCSComponent.LoadWholeLength;
SCSComponent.DefineFirstLast;
//if (SCSComponent.FirstIDConnectedConnCompon > 0) and
// (SCSComponent.LastIDConnectedConnCompon > 0) then
if Assigned(SCSComponent.FirstConnectedConnCompon) and
Assigned(SCSComponent.LastConnectedConnCompon) and
CheckCanLookComponInReportCable(SCSComponent.FirstConnectedConnCompon, ACanHaveDismountAccount) and
CheckCanLookComponInReportCable(SCSComponent.LastConnectedConnCompon, ACanHaveDismountAccount) then
if Not ACanHaveDismountAccount or
Not CheckHaveWholeComponentDismounted(FCatalog, SCSComponent.WholeComponent) then
begin
//01.04.2009 SCSComponent.RefreshWholeLengthIfNecessary;
// Åñëè òðåáóåòñÿ ðàññ÷èòàòü ðàñõîä êàáåëÿ èç êàòóøåê
// ôîðìèðóåì ïî õîäó ñïèñîê òèïîâ êàáåëåé
if not cbNone.Checked then
CableTypesAdd(SCSComponent, CableTypes, CableIdsList, MemTable_RCableJournal.AutoIncValue+1, self);
ComponCatagoryStr := '';
ComponCatagoryStr := SCSComponent.GetPropertyValueBySysName(pnCategory);
ListName := '';
FirstComponent := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(SCSComponent.FirstIDCompon);
LastComponent := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(SCSComponent.LastIDCompon);
LoadPortName(SCSComponent.FirstIDConnectedConnCompon, SCSComponent.FirstIDCompon, FromNppPort, FromPortName, @FromPort, @FromNppPortFromPos, @FromNppPortToPos);
LoadPortName(SCSComponent.LastIDConnectedConnCompon, SCSComponent.LastIDCompon, ToNppPort, ToPortName, @ToPort, @ToNppPortFromPos, @ToNppPortToPos);
if AResRepFormMode = fmRCableJournal then
begin
if (FirstComponent <> nil) and (LastComponent <> nil) then
begin
if FirstComponent.ListID = LastComponent.ListID then
ListName := GetListName(FirstComponent)
else
ListName := GetListName(FirstComponent) + '/' + GetListName(LastComponent);
end;
MemTable_RCableJournal.Append;
MemTable_RCableJournal.FieldByName(fnNameList).AsString := ListName;
MemTable_RCableJournal.FieldByName(fnNameCable).AsString := SCSComponent.GetNameForVisible(false); //GetComponNameForVisible(Component.Name, Component.NameMark);
MemTable_RCableJournal.FieldByName(fnName).AsString := SCSComponent.Name;
MemTable_RCableJournal.FieldByName(fnNameMark).AsString := SCSComponent.NameMark;
//MemTable_RCableJournal.FieldByName(fnMarkID).AsString := IntToStr(SCSComponent.MarkID);
MemTable_RCableJournal.FieldByName(fnMarkID).AsInteger := SCSComponent.MarkID;
MemTable_RCableJournal.FieldByName(fnCategory).AsString := ComponCatagoryStr;
if CheckPriceTransformToUOMByCompType(@SCSComponent.ComponentType) then
begin
MemTable_RCableJournal.FieldByName(fnIzm).AsString := GetNameUOM(TF_Main(GForm).FUOM, true);
MemTable_RCableJournal.FieldByName(fnLength).AsFloat := FloatInUOM(SCSComponent.Length, umMetr, TF_Main(GForm).FUOM);
//MemTable_RCableJournal.FieldByName(fnLength).AsString := FormatFloat(ffMask, FloatInUOM(SCSComponent.Length, umMetr, TF_Main(GForm).FUOM));
end
else
begin
MemTable_RCableJournal.FieldByName(fnIzm).AsString := SCSComponent.Izm;
MemTable_RCableJournal.FieldByName(fnLength).AsFloat := SCSComponent.Length;
//MemTable_RCableJournal.FieldByName(fnLength).AsString := FormatFloat(ffMask, SCSComponent.Length);
end;
MemTable_RCableJournal.FieldByName(fnNameFrom).AsString := GetNameTo(SCSComponent.FirstConnectedConnCompon, FirstComponent, FromNppPort, FromPortName, FromPort, FromNppPortFromPos, FromNppPortToPos); //GetNameFrom(SCSComponent.FirstConnectedConnCompon);
MemTable_RCableJournal.FieldByName(fnNameTo).AsString := GetNameTo(SCSComponent.LastConnectedConnCompon, LastComponent, ToNppPort, ToPortName, ToPort, ToNppPortFromPos, ToNppPortToPos);
MemTable_RCableJournal.FieldByName(fnPortNameFrom).AsInteger := FromNppPort;
//
MemTable_RCableJournal.FieldByName(fnPortTypeFrom).AsString := FromPortName;
MemTable_RCableJournal.FieldByName(fnPortNameTo).AsInteger := ToNppPort;
MemTable_RCableJournal.FieldByName(fnPortTypeTo).AsString := ToPortName;
MemTable_RCableJournal.Post;
MasterID := MemTable_RCableJournal.FieldByName(fnID).AsInteger;
end
else
if AResRepFormMode = fmRGOSTCableJournal then
begin
if FirstComponent <> nil then
begin
ListName := GetListName(FirstComponent);
RoomOwner := GetComponObjectOwnerByItemType(FirstComponent, itRoom);
if RoomOwner <> nil then
ListName := ListName + '. '+ RoomOwner.GetNameForVisible;
end;
//*** Îïðåäåëèòü øàáëîí ìðêèðîâêè
ComponMarkTemplate := '';
ListOwner := nil;
if FirstComponent <> nil then
ListOwner := FirstComponent.GetListOwner
else
if LastComponent <> nil then
ListOwner := LastComponent.GetListOwner
else
ListOwner := SCSComponent.GetListOwner;
if ListOwner <> nil then
SprComponentType := ListOwner.Spravochnik.GetComponentTypeByGUID(SCSComponent.GUIDComponentType);
if SprComponentType <> nil then
ComponMarkTemplate := SprComponentType.ComponentType.MarkMask;
//*** Óäàëèòü îáîçíà÷åíèå èç
if ComponMarkTemplate <> '' then
if Pos(mteNameShort, ComponMarkTemplate) <> 0 then
Delete(ComponMarkTemplate, Pos(mteNameShort, ComponMarkTemplate), Length(mteNameShort));
MemTable_RCableJournal.Append;
//MemTable_RCableJournal.FieldByName(fnMarkID).AsString := TF_Main(SCSComponent.ActiveForm).MakeNameMarkComponent(SCSComponent, SCSComponent.GetFirstParentCatalog, false, ComponMarkTemplate); // íîìåð êàáåëÿ
MemTable_RCableJournal.FieldByName(fnNameMark).AsString := TF_Main(SCSComponent.ActiveForm).MakeNameMarkComponent(SCSComponent, SCSComponent.GetFirstParentCatalog, false, ComponMarkTemplate); // íîìåð êàáåëÿ
MemTable_RCableJournal.FieldByName(fnComponentIndex).AsInteger := SCSComponent.MarkID;
MemTable_RCableJournal.FieldByName(fnNameCable).AsString := SCSComponent.NameShort; //Òèï êàáåëÿ
MemTable_RCableJournal.FieldByName(fnNameTo).AsString := GetMultiPortNameMark(SCSComponent.LastConnectedConnCompon, true); // Íîìåð êîìóòàöèîííîé ïàíåëè
MemTable_RCableJournal.FieldByName(fnPortNameTo).AsString := IntToStr(ToNppPort); // Íîìåð ïîðòà ïàíåëè
MemTable_RCableJournal.FieldByName(fnNameList).AsString := ListName; // Îòêóäà ïðèõîäèò
MemTable_RCableJournal.FieldByName(fnNameFrom).AsString := GetMultiPortNameMark(SCSComponent.FirstConnectedConnCompon, true); // Íîìåð ðîçåòêè
MemTable_RCableJournal.FieldByName(fnPortNameFrom).AsString := IntToStr(FromNppPort);// IntToStr(FromNppPort); // íîìåð ïîðòà ðîçåòêè
MemTable_RCableJournal.Post;
MasterID := MemTable_RCableJournal.FieldByName(fnID).AsInteger;
end;
end;
for j := 0 to SCSComponent.WholeComponent.Count - 1 do
begin
New(ptrID);
ptrID^ := SCSComponent.WholeComponent.Items[j];
ListWithLookedCompons.Add(ptrID);
end;
end;
end;
end;
//*** Ñîðòèðîâêà
//if AResRepFormMode = fmRCableJournal then
// MemTable_RCableJournal.SortOn(fnMarkID, [])
//else
//if AResRepFormMode = fmRGOSTCableJournal then
// MemTable_RCableJournal.SortOn(fnMarkID, []);
//MemTable_RCableJournal.SortOn(fnMarkID, []);
SortMemTableByParams(MemTable_RCableJournal, AParams, nil);
finally
EndProgress;
FreeList(ListWithLookedCompons);
end;
end
else // Added by Tolik (Åñëè ó÷èòûâàòü ïóòü êàáåëÿ)
begin
MemTable_RCableJournal.FieldDefs.Clear;
MemTable_RCableJournal.FieldDefs.Add(fnID, ftAutoInc);
MemTable_RCableJournal.FieldDefs.Add(fnNameList, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnNameCable, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnName, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnNameMark, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnMarkID, ftInteger);
//MemTable_RCableJournal.FieldDefs.Add(fnMarkID, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnComponentIndex, ftInteger);
MemTable_RCableJournal.FieldDefs.Add(fnIZM, ftString, 20);
MemTable_RCableJournal.FieldDefs.Add(fnCategory, ftString, 20);
MemTable_RCableJournal.FieldDefs.Add(fnLength, ftFloat);
MemTable_RCableJournal.FieldDefs.Add(fnNameFrom, ftString, 255);
//MemTable_RCableJournal.FieldDefs.Add(fnPortNameFrom, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnPortNameFrom, ftInteger);
MemTable_RCableJournal.FieldDefs.Add(fnPortTypeFrom, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnNameTo, ftString, 255);
//MemTable_RCableJournal.FieldDefs.Add(fnPortNameTo, ftString, 255);
MemTable_RCableJournal.FieldDefs.Add(fnPortNameTo, ftInteger);
MemTable_RCableJournal.FieldDefs.Add(fnPortTypeTo, ftString, 255);
//Added by Tolik
MemTable_RCableJournal.FieldDefs.Add(fnMarks, ftMemo); // ìàðêèðîâêè êîìïîíåíòîâ ïî âñåìó êàáåëþ
MemTable_RCableJournal.FieldDefs.Add(fnPrices, ftMemo); // ñòîèìîñòü êàáåëÿ íà êàæäîì ó÷àñòêå
MemTable_RCableJournal.FieldDefs.Add(fnLengthReserv, ftFloat); // çàïàñ êàáåëÿ
MemTable_RCableJournal.FieldDefs.Add(fnReelName,ftString,255); // íàèìåíîâàíèå êàòóøêè, èç êîòîðîé îòðåçàí êàáåëü
MemTable_RCableJournal.Close;
MemTable_RCableJournal.Open;
//
CatalogList := TSCSCatalogs.Create(false);
CatalogList.Add(AFolder);
CatalogList.AddItems(AFolder.ChildCatalogReferences);
SortSCSObjectsByPMOrder(CatalogList);
try
with TF_Main(GForm).DM do
for i := 0 to AFolder.ComponentReferences.Count - 1 do //for i := 0 to FolderIDComponList.Count - 1 do
begin
//CurrIDCompon := Integer(FolderIDComponList.Items[i]^);
SCSComponent := AFolder.ComponentReferences[i];
if Assigned(SCSComponent) then
begin
ComponSignType := SCSComponent.GetPropertyValueAsInteger(pnSignType);
if (SCSComponent.IsLine = biTrue) and ((ComponSignType = oitProjectible) or (ACanHaveActiveComponents)) then
if SCSComponent.HaveInterfaceByType(itFunctional) then //*** Åñòü ëè ôóíêöèîíàëüíûå èíòåðôåéñû
if (CheckSysNameIsCable(SCSComponent.ComponentType.SysName) and
// Tolik
(not (SCSComponent.IDNetType in [3,4,5,7])) and
//
CheckNoIDinList(SCSComponent.ID, ListWithLookedCompons)) then
begin
SCSComponent.RefreshWholeLengthIfNecessary;
SCSComponent.LoadWholeComponent(false);
SCSComponent.LoadWholeLength;
SCSComponent.DefineFirstLast;
if Assigned(SCSComponent.FirstConnectedConnCompon) and
Assigned(SCSComponent.LastConnectedConnCompon) and
CheckCanLookComponInReportCable(SCSComponent.FirstConnectedConnCompon, ACanHaveDismountAccount) and
CheckCanLookComponInReportCable(SCSComponent.LastConnectedConnCompon, ACanHaveDismountAccount) then
if Not ACanHaveDismountAccount or
Not CheckHaveWholeComponentDismounted(FCatalog, SCSComponent.WholeComponent) then
begin
// Åñëè òðåáóåòñÿ ðàññ÷èòàòü ðàñõîä êàáåëÿ èç êàòóøåê
// ôîðìèðóåì ïî õîäó ñïèñîê òèïîâ êàáåëåé
if not cbNone.Checked then
CableTypesAdd(SCSComponent, CableTypes, CableIdsList,MemTable_RCableJournal.AutoIncValue + 1, self);
//01.04.2009 SCSComponent.RefreshWholeLengthIfNecessary;
ComponList := TSCSComponents.create(false);
//ComponList1 := TSCSComponents.create(false);
SetActualOrderInPartComponent(SCSComponent, ComponList, FromNppPort1, ListName);
propList:=tstringList.Create;
propList1:=tstringList.Create;
GetCablePath(SCSComponent,propList,propList1,ComponList);
ComponCatagoryStr := '';
ComponCatagoryStr := SCSComponent.GetPropertyValueBySysName(pnCategory);
ListOwner:=nil;
SCSComponent.LoadWholeLength;
// ListName := '';
FirstComponent := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(SCSComponent.FirstIDCompon);
LastComponent := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(SCSComponent.LastIDCompon);
LoadPortName(SCSComponent.FirstIDConnectedConnCompon, SCSComponent.FirstIDCompon, FromNppPort, FromPortName, @FromPort, @FromNppPortFromPos, @FromNppPortToPos);
LoadPortName(SCSComponent.LastIDConnectedConnCompon, SCSComponent.LastIDCompon, ToNppPort, ToPortName, @ToPort, @ToNppPortFromPos, @ToNppPortToPos);
if AResRepFormMode = fmRCableJournal then
begin
{ if (FirstComponent <> nil) and (LastComponent <> nil) then
begin
if FirstComponent.ListID = LastComponent.ListID then
ListName := GetListName(FirstComponent)
else
ListName := GetListName(FirstComponent) + '/' + GetListName(LastComponent);
end;
}
MemTable_RCableJournal.Append;
MemTable_RCableJournal.FieldByName(fnNameList).AsString := ListName;
MemTable_RCableJournal.FieldByName(fnNameCable).AsString := SCSComponent.GetNameForVisible(false); //GetComponNameForVisible(Component.Name, Component.NameMark);
MemTable_RCableJournal.FieldByName(fnName).AsString := SCSComponent.Name;
MemTable_RCableJournal.FieldByName(fnNameMark).AsString := SCSComponent.NameMark;
//MemTable_RCableJournal.FieldByName(fnMarkID).AsString := IntToStr(SCSComponent.MarkID);
MemTable_RCableJournal.FieldByName(fnMarkID).AsInteger := SCSComponent.MarkID;
MemTable_RCableJournal.FieldByName(fnCategory).AsString := ComponCatagoryStr;
if CheckPriceTransformToUOMByCompType(@SCSComponent.ComponentType) then
begin
MemTable_RCableJournal.FieldByName(fnIzm).AsString := GetNameUOM(TF_Main(GForm).FUOM, true);
MemTable_RCableJournal.FieldByName(fnLength).AsFloat := FloatInUOM(SCSComponent.Length, umMetr, TF_Main(GForm).FUOM);
MemTable_RCableJournal.FieldByName(fnLengthReserv).AsFloat := RoundCP(FloatInUOM(SCSComponent.LengthReserv, umMetr, TF_Main(GForm).FUOM));
//MemTable_RCableJournal.FieldByName(fnLength).AsString := FormatFloat(ffMask, FloatInUOM(SCSComponent.Length, umMetr, TF_Main(GForm).FUOM));
end
else
begin
MemTable_RCableJournal.FieldByName(fnIzm).AsString := SCSComponent.Izm;
MemTable_RCableJournal.FieldByName(fnLength).AsFloat := SCSComponent.Length;
MemTable_RCableJournal.FieldByName(fnLengthReserv).AsFloat := RoundCP(SCSComponent.LengthReserv);
//MemTable_RCableJournal.FieldByName(fnLength).AsString := FormatFloat(ffMask, SCSComponent.Length);
end;
// changed by Tolik
// MemTable_RCableJournal.FieldByName(fnNameFrom).AsString := GetNameTo(SCSComponent.FirstConnectedConnCompon, FirstComponent, FromNppPort, FromPortName, FromPort, FromNppPortFromPos, FromNppPortToPos); //GetNameFrom(SCSComponent.FirstConnectedConnCompon);
// ìàðêèðîâêà íà÷àëüíîãî îáúåêòà íà ïóòè êàáåëÿ
try
s:='';
if SCSComponent.FirstConnectedConnCompon.GetTopComponent.NameMark <>'' then // åñëè åñòü ìàðêèðîâêà øêàôà(èëè êðîñà èëè ÷òî òàì åùå)
s := SCSComponent.FirstConnectedConnCompon.GetTopComponent.NameMark;
if s = '' then
begin
if SCSComponent.FirstConnectedConnCompon.NameMark <> '' then // åñëè íåò - èùåì ìàðêèðîâêó ïîðòà
s := SCSComponent.FirstConnectedConnCompon.NameMark;
end;
if s = '' then
begin
if SCSComponent.FirstConnectedConnCompon.GetParentComponent.NameMark<>'' then // åñëè íåò - èùåì ìàðêèðîâêó ïàò÷ -ïàíåëè
begin
s := SCSComponent.FirstConnectedConnCompon.GetParentComponent.NameMark;
end;
end;
if s = '' then // åñëè íåò - ïèøåì èìÿ øêàôà
begin
s := SCSComponent.FirstConnectedConnCompon.GetTopComponent.Name + ' '+inttostr(SCSComponent.FirstConnectedConnCompon.GetTopComponent.MarkID)
end;
MemTable_RCableJournal.FieldByName(fnNameFrom).AsString := s;
except
// åñëè îøèáêà - áåðåì èìÿ òîï êîìïîíåíòà è íîìåð
MemTable_RCableJournal.FieldByName(fnNameFrom).AsString := SCSComponent.FirstConnectedConnCompon.GetTopComponent.Name + ' '+inttostr(SCSComponent.FirstConnectedConnCompon.GetTopComponent.MarkID);
end;
//
MemTable_RCableJournal.FieldByName(fnNameTo).AsString := GetNameTo(SCSComponent.LastConnectedConnCompon, LastComponent, ToNppPort, ToPortName, ToPort, ToNppPortFromPos, ToNppPortToPos);
MemTable_RCableJournal.FieldByName(fnPortNameFrom).AsInteger := FromNppPort1;
MemTable_RCableJournal.FieldByName(fnPortTypeFrom).AsString := FromPortName;
//
// MemTable_RCableJournal.FieldByName(fnPortNameTo).AsInteger := ToNppPort;
MemTable_RCableJournal.FieldByName(fnPortNameTo).AsInteger := ToNppPort;
//changed by Tolik
// åñëè ó ïîäêëþ÷àåìîãî ìîäóëÿ åñòü ìàðêèðîâêà - âûâîäèì,
// åñëè íåò - èùåì ðàðêèðîâêó âåðõíåãî îáúåêòà ìîäóëÿ
// åñëè è åå íåò - ïèøåì èìÿ âåðõíåãî îáúåêòà ìîäóëÿ
// MemTable_RCableJournal.FieldByName(fnPortTypeTo).AsString := ToPortName;
s:='';
if SCSComponent.LastConnectedConnCompon.NameMark<>'' then
s := SCSComponent.LastConnectedConnCompon.NameMark;
if s='' then
begin
if SCSComponent.LastConnectedConnCompon.GetTopComponent.NameMark<>'' then
s := SCSComponent.LastConnectedConnCompon.GetParentComponent.NameMark;
end;
if s='' then
begin
s :=SCSComponent.LastConnectedConnCompon.GetTopComponent.Name + ' ' + inttostr(SCSComponent.LastConnectedConnCompon.GetTopComponent.MarkID);
end;
MemTable_RCableJournal.FieldByName(fnPortTypeTo).AsString := s;
//
//added by Tolik
MemTable_RCableJournal.FieldValues[fnMarks]:=propList.Text; // ìàðêèðîâêà îáúåêòîâ ïî ïóòè êàáåëÿ
MemTable_RCableJournal.FieldValues[fnPrices]:=propList1.Text; // äëèíû ëèíåéíûõ êîìïîíåíò ïî ïóòè êàáåëÿ
//
MemTable_RCableJournal.Post;
MasterID := MemTable_RCableJournal.FieldByName(fnID).AsInteger;
end
else
if AResRepFormMode = fmRGOSTCableJournal then
begin
if FirstComponent <> nil then
begin
ListName := GetListName(FirstComponent);
RoomOwner := GetComponObjectOwnerByItemType(FirstComponent, itRoom);
if RoomOwner <> nil then
ListName := ListName + '. '+ RoomOwner.GetNameForVisible;
end;
//*** Îïðåäåëèòü øàáëîí ìðêèðîâêè
ComponMarkTemplate := '';
ListOwner := nil;
if FirstComponent <> nil then
ListOwner := FirstComponent.GetListOwner
else
if LastComponent <> nil then
ListOwner := LastComponent.GetListOwner
else
ListOwner := SCSComponent.GetListOwner;
if ListOwner <> nil then
SprComponentType := ListOwner.Spravochnik.GetComponentTypeByGUID(SCSComponent.GUIDComponentType);
if SprComponentType <> nil then
ComponMarkTemplate := SprComponentType.ComponentType.MarkMask;
//*** Óäàëèòü îáîçíà÷åíèå èç
if ComponMarkTemplate <> '' then
if Pos(mteNameShort, ComponMarkTemplate) <> 0 then
Delete(ComponMarkTemplate, Pos(mteNameShort, ComponMarkTemplate), Length(mteNameShort));
MemTable_RCableJournal.Append;
//MemTable_RCableJournal.FieldByName(fnMarkID).AsString := TF_Main(SCSComponent.ActiveForm).MakeNameMarkComponent(SCSComponent, SCSComponent.GetFirstParentCatalog, false, ComponMarkTemplate); // íîìåð êàáåëÿ
MemTable_RCableJournal.FieldByName(fnNameMark).AsString := TF_Main(SCSComponent.ActiveForm).MakeNameMarkComponent(SCSComponent, SCSComponent.GetFirstParentCatalog, false, ComponMarkTemplate); // íîìåð êàáåëÿ
MemTable_RCableJournal.FieldByName(fnComponentIndex).AsInteger := SCSComponent.MarkID;
MemTable_RCableJournal.FieldByName(fnNameCable).AsString := SCSComponent.NameShort; //Òèï êàáåëÿ
//changed by Tolik
MemTable_RCableJournal.FieldByName(fnNameTo).AsString := GetMultiPortNameMark(SCSComponent.LastConnectedConnCompon, true); // Íîìåð êîìóòàöèîííîé ïàíåëè
MemTable_RCableJournal.FieldByName(fnPortNameTo).AsString := IntToStr(ToNppPort); // Íîìåð ïîðòà ïàíåëè
MemTable_RCableJournal.FieldByName(fnNameList).AsString := ListName; // Îòêóäà ïðèõîäèò
MemTable_RCableJournal.FieldByName(fnNameFrom).AsString := GetMultiPortNameMark(SCSComponent.FirstConnectedConnCompon, true); // Íîìåð ðîçåòêè
MemTable_RCableJournal.FieldByName(fnPortNameFrom).AsString := IntToStr(FromNppPort1);
// MemTable_RCableJournal.FieldByName(fnPortNameFrom).AsString := IntToStr(FromNppPort); // íîìåð ïîðòà ðîçåòêè
MemTable_RCableJournal.Post;
MasterID := MemTable_RCableJournal.FieldByName(fnID).AsInteger;
end;
end;
for j := 0 to SCSComponent.WholeComponent.Count - 1 do
begin
New(ptrID);
ptrID^ := SCSComponent.WholeComponent.Items[j];
ListWithLookedCompons.Add(ptrID);
end;
end;
end;
end;
//*** Ñîðòèðîâêà
//if AResRepFormMode = fmRCableJournal then
// MemTable_RCableJournal.SortOn(fnMarkID, [])
//else
//if AResRepFormMode = fmRGOSTCableJournal then
// MemTable_RCableJournal.SortOn(fnMarkID, []);
//MemTable_RCableJournal.SortOn(fnMarkID, []);
SortMemTableByParams(MemTable_RCableJournal, AParams, nil);
finally
EndProgress;
FreeList(ListWithLookedCompons);
end;
end; // end else
// Åñëè òðåáóåòñÿ ïîñ÷èòàòü ðàñõîä êàáåëÿ èç êàòóøåê
// òî ïîñ÷èòàåì
if not cbNone.Checked then
begin
if cbMaxScrapRate.Checked then
CableReelCalculate(CableTypes, 'MaxScrapRate',ReelsCableFlow, Self);
if cbMaxEfficiency.Checked then
CableReelCalculate(CableTypes, 'MaxEfficiency',ReelsCableFlow, Self);
CableReelNamesToMemTable(MemTable_RCableJournal,CableTypes);
end
// åñëè íåò - ñáðîñèì ðåçóëüòàòû ïðåäèäóùèõ ðàñ÷åòîâ,
// â ñëó÷àå íàëè÷èÿ òàêîâûõ
else
begin
if ReelsCableFlow <> nil then
ReelsCableFlow.Clear
else
// íåò ñòðîê äëÿ îò÷åòà - ñîçäàåì ïóñòîé ñïèñîê ()
ReelsCableFlow := TStringList.Create;
end;
FreeCableTypes(CableTypes);
GFormMode := AResRepFormMode;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowFolderJoining: '+E.Message);
end;
end;
procedure TF_ResourceReport.ShowFolderCableJournalExt(AFolder: TSCSCatalog; AParams: TReportItemParams; ACanHaveActiveComponents, ACanHaveDismountAccount, AFullPath: Boolean);
var LookedCompons: TSCSComponents;
ptrID: ^Integer;
i, j, k, l, m, n, p, q, r, x: Integer;
CurrCompon: TSCSComponent;
ComponSignType: Integer;
ptrJoinedComponents: PJoinedComponents;
ChangeFirstLast: Boolean;
FirstConComponents: TSCSComponents;
LastConComponents: TSCSComponents;
BuffComponents: TSCSComponents;
FirstConCompon: TSCSComponent;
LastConCompon: TSCSComponent;
FirstLineCompon: TSCSComponent;
LastLineCompon: TSCSComponent;
PrevLineCompon: TSCSComponent;
CurrLineCompon: TSCSComponent;
PrevRowCompon: TSCSComponent;
CurrRowCompon: TSCSComponent;
LeftCompon: TSCSComponent;
RightCompon: TSCSComponent;
CurrRowComponObject: TSCSCatalog;
LeftComponObject: TSCSCatalog;
RightComponObject: TSCSCatalog;
BuffCompon: TSCSComponent;
BuffObject: TSCSCatalog;
BuffList: TList;
FirstObject: TSCSCatalog;
LastObject: TSCSCatalog;
InterfCount1: Integer;
InterfCount2: Integer;
ParallelInterfaces: TInterfLists;
JoinedInterfaces: TInterfLists;
JoinedInterfacesLeft: TInterfLists;
JoinedInterfacesRight: TInterfLists;
SideCompon1Left: Integer;
SideCompon2Left: Integer;
SideCompon1Right: Integer;
SideCompon2Right: Integer;
InterfacesLeft: TSCSInterfaces;
InterfacesLeftPoint: TSCSInterfaces;
InterfacesLeftJoinedToPoint: TSCSInterfaces;
InterfacesRight: TSCSInterfaces;
InterfacesRightPoint: TSCSInterfaces;
InterfacesRighJoinedToPoint: TSCSInterfaces;
InterfJoinedCount: Integer;
NppPortsLeft: TIntList;
NppPortsRight: TIntList;
NppPortsCount: Integer;
ptrWeld: PInterfLists;
ptrWeldFirst: PInterfLists;
ptrWeldLast: PInterfLists;
ptrBuffWeld: PInterfLists;
WeldList: Tlist;
InterfCount: Integer;
ptrInterfFirst: TSCSInterface;
ptrInterfLast: TSCSInterface;
ptrlineInterfFirst: TSCSInterface;
ptrLineInterfLast: TSCSInterface;
ptrPortFirst: TSCSInterface;
ptrPortLast: TSCSInterface;
CurrRow: TSCSComponents;
DeviceName: String;
DeviceNameSecond: String;
DeviceNameThird: String;
DeviceNameFourth: String;
ElementName: String;
NppPort: Integer;
CableDiametr: Double;
ShowDevNameFrom: Boolean;
ShowDevNameTo: Boolean;
// added by Tolik
currTrace,NextTrace: TFigure; // òðàññû, ïî êîòîðûì ïðîõîäèò êàáåëü
currLine: TOrthoLine; // òåêóùàÿ òðàññà
propList, propList1: TstringList; // propList - ñïèñîê òðàññ ïî ìàðøðóòó êàáåëÿ, propList1 - äëèíû êóñêîâ êàáåëÿ ñîîòâåòñòâåííî
FirstTraceFound, NextTraceFound: Boolean; // äâå ñîñåäíèå òðàññû
Figure: TFigure;
Ortholine: TOrtholine;
Connector1, Connector2, Connector3, Connector4: TConnectorObject; // êîííåêòîðû òðàññ
Compon1, Compon2, Compon3, Compon4: TSCSComponent; // êîìïîíåíòû, ñèäÿùèå íà êîííåêòîðàõ òðàññ
s: string;
currSCSCatalog, nextSCSCatalog: TSCSCatalog;
PartSCSComponent1,PartSCSComponent2: TSCScomponent;
ListName: string;
ComponList: TSCSComponents;
FromNppPort1: integer;
ListOwner: TSCSList;
TraceListOwner : TSCSList;
ListCAD : TF_CAD;
FirstCompon, LastCompon : TSCSComponent;
PortCountFrom, PortCountTo: Integer;
{
// óêðàäåíî ó Èãîðÿ by Tolik èç TSCSComponent.DefineFirstLast (ìîäóëü U_SCSComponent)
// ïðàâäà, íåìíîæêî ïåðåäåëàíî ñîâñåì
Procedure SetActualOrderInPartComponent(aComponent: TSCSComponent; ComponList : TSCSComponents; FromNppPort1 : integer);
Var
Component : TSCSComponent;
SortedWholeComponent: TIntList;
my_comp, ComponentToOrder: TSCSComponent;
StepComponent: TSCSComponent;
JoinedComponent: TSCSComponent;
i, j: Integer;
portcount1, portcount2 : integer;
ListOwner: TSCSList;
EndPointCad : TF_CAD;
PointComponent : TSCSComponent;
SCSCatalog : TSCSCatalog;
SCSInterfaces: TSCSInterfaces;
Begin
Component := aComponent;
// SCSCatalogs := TSCSCatalogs.Create(false);
SortedWholeComponent := TIntList.Create;
Component.DefineFirstLast;
ComponentToOrder := nil;
ListOwner := Component.GetListOwner;
my_comp := Component.FirstConnectedConnCompon.GetTopComponent;
if my_comp<>nil then
begin
SCSInterfaces := my_comp.GetInterfacesByIsPort(1, True, -1, nil);
portcount1 := SCSInterfaces.Count;
my_comp := Component.LastConnectedConnCompon.GetTopComponent;
SCSInterfaces := my_comp.GetInterfacesByIsPort(1, True, -1, nil);
portcount2 := SCSInterfaces.Count;
ComponentToOrder := Component.FirstConnectedConnCompon;
// Ñðàçó æå îïðåäåëÿåì ïîðÿäîê ëèñòîâ äëÿ îò÷åòà
// è ïîðò øêàôà
begin
if Component.FirstConnectedConnCompon.ListID = Component.LastConnectedConnCompon.ListID then
ListName := GetListName(Component.FirstConnectedConnCompon)
else
begin
if Portcount1 >= PortCount2 then
ListName := GetListName(Component.FirstConnectedConnCompon)+'/'+GetListName(Component.LastConnectedConnCompon)
else
ListName := GetListName(Component.LastConnectedConnCompon)+'/'+GetListName(Component.FirstConnectedConnCompon);
end;
end;
if PortCount1 >= PortCount2 then
ComponentToOrder := Component.FirstConnectedConnCompon
else
begin
ComponentToOrder := Component.LastConnectedConnCompon;
Component.LastConnectedConnCompon := Component.FirstConnectedConnCompon;
Component.FirstConnectedConnCompon := ComponentToOrder;
end;
FromNppPort1 := Component.FirstConnectedConnCompon.MarkID ;
if Component<> nil then
begin
for i := 0 to Component.WholeComponent.Count - 1 do
begin
for j := 0 to ComponentToOrder.JoinedComponents.Count - 1 do
begin
StepComponent := ComponentToOrder.JoinedComponents[j];
if ((SortedWholeComponent.IndexOf(StepComponent.ID)= -1) and (Component.WholeComponent.IndexOf(StepComponent.ID)<> -1)) then
begin
SortedWholeComponent.Add(StepComponent.ID);
ComponList.Add(StepComponent);
ComponentToOrder := StepComponent;
SCSCatalog := StepComponent.GetFirstParentCatalog;
break;
end;
end;
end;
end;
ComponentToOrder := Component;
//*** Íå îäèí ó÷àñòîê êàáåëÿ íå óøåë â ïèçäó
if ComponentToOrder.WholeComponent.Count = SortedWholeComponent.Count then
begin
ComponentToOrder.WholeComponent.Clear;
ComponentToOrder.WholeComponent.Assign(SortedWholeComponent);
end;
SortedWholeComponent.Free;
end;
End;
// }
function GetDeviceName(AComponents: TSCSComponents): String;
var TopCompon: TSCSComponent;
i: Integer;
begin
Result := '';
if Not Assigned(AComponents) then
Exit; ///// EXIT ////
TopCompon := nil;
if AComponents.Count > 0 then
TopCompon := AComponents[0].GetTopComponent;
for i := 0 to AComponents.Count - 1 do
if AComponents[i].GetTopComponent <> TopCompon then
Exit; ///// EXIT /////
if Assigned(TopCompon) then
Result := GetComponNameForVisible(TopCompon.NameShort, IntTostr(TopCompon.MarkID));
//TopCompon := ACompon.GetTopComponent;
//if Assigned(TopCompon) then
// Result := TF_Main(GForm).GetComponNameForVisible(TopCompon.NameShort, IntTostr(TopCompon.MarkID));
end;
procedure GetDeviceAndElementNamesByLineComponInterfaces(ACompon: TSCSComponent; AInterfaces: TList;
var ADevName, ADevNameSecond, ADevNameThird, ADevNameFourth, AElementName: String);
var
i: integer;
CurrPointInterfaces: TSCSInterfaces;
PointComponsInterfaces: TSCSInterfaces;
PointCompon: TSCSComponent;
PointComponents: TSCSComponents;
TopComponent: TSCSComponent;
PointTopComponents: TSCSComponents;
//PathToDepthComponent: TSCSComponent;
DevicePath: TStringList;
CurrCompon: TSCSComponent;
InternalConnComponPath: TSCSComponents;
InterrnalJoinedInterfaces: TSCSInterfaces;
InternalJoinedCompon, PrevInternalJoinedCompon: TSCSComponent;
NppFrom, NppTo: Integer;
begin
ADevName := '';
ADevNameSecond := '';
ADevNameThird := '';
ADevNameFourth := '';
AElementName := '';
if Assigned(ACompon) and Assigned(AInterfaces) then
begin
PointComponsInterfaces := TSCSInterfaces.Create(false);
PointComponents := TSCSComponents.Create(false);
PointTopComponents := TSCSComponents.Create(false);
InternalConnComponPath := TSCSComponents.Create(false);
InterrnalJoinedInterfaces := TSCSInterfaces.Create(false);
for i := 0 to AInterfaces.Count - 1 do
begin
//01.08.2012 CurrPointInterfaces := ACompon.GetInterfacesConnectedToConnCompon(AInterfaces[i], nil, nil);
CurrPointInterfaces := ACompon.GetInterfacesConnectedToConnCompon(AInterfaces[i], InternalConnComponPath, InterrnalJoinedInterfaces);
if Assigned(CurrPointInterfaces) then
begin
PointComponsInterfaces.Assign(CurrPointInterfaces, laOr);
CurrPointInterfaces.Free;
end;
end;
for i := 0 to PointComponsInterfaces.Count - 1 do
begin
PointCompon := TSCSComponent(TSCSInterface(PointComponsInterfaces[i]).ComponentOwner);
if PointComponents.IndexOf(PointCompon) = -1 then
if CheckCanLookComponInReportCable(PointCompon, ACanHaveDismountAccount) then
PointComponents.Add(PointCompon);
end;
for i := 0 to PointComponents.Count - 1 do
begin
TopComponent := PointComponents[i].GetTopComponent;
if PointTopComponents.IndexOf(TopComponent) = -1 then
PointTopComponents.Add(TopComponent);
end;
//*** Èìÿ óñòðîéñòâà c ó÷åòîì ïîëíîãî ïóòè
if Not AFullPath then
begin
if PointTopComponents.Count > 0 then
ADevName := PointTopComponents[0].NameMark; //PointTopComponents[0].NameShort + IntToStr(PointTopComponents[0].MarkID);
end
else
if PointComponents.Count > 0 then
begin
{CurrCompon := PointComponents[0];
while CurrCompon <> nil do
begin
if CurrCompon <> PointComponents[0] then
begin
if ADevName <> '' then
ADevName := '\' + ADevName;
ADevName := CurrCompon.NameMark + ADevName;
end;
CurrCompon := CurrCompon.GetParentComponent;
end;}
DevicePath := TStringList.Create;
//*** Ñîñçàòü ñïèñîê èç ïóòè êîìïîíåíòû â íîðìàëüíîì ïîðÿäêå
//04.02.2013
//CurrCompon := PointComponents[0];
//while CurrCompon <> nil do
//begin
// if CurrCompon <> PointComponents[0] then
// DevicePath.Insert(0, CurrCompon.NameMark);
// CurrCompon := CurrCompon.GetParentComponent;
//end;
//04.02.2013
CurrCompon := InternalConnComponPath[0]; // êîìïîíåíò ê êîòîðîìó ïîäêëþ÷åí êàáåëü
while CurrCompon <> nil do
begin
if CurrCompon <> InternalConnComponPath[0] then
DevicePath.Insert(0, CurrCompon.NameMark);
CurrCompon := CurrCompon.GetParentComponent;
end;
//*** Ïî ñïèñêó îïðåäåëèòü ýëåìåíòû ïîäêëþ÷åííîãî óñòðîéñòâà
for i := 0 to DevicePath.Count - 1 do
begin
if i = 0 then
ADevName := DevicePath[i]
else
if i = 1 then
ADevNameSecond := DevicePath[i]
else
if i = 2 then
ADevNameThird := DevicePath[i]
else
if i >= 3 then
begin
if ADevNameFourth <> '' then
ADevNameFourth := ADevNameFourth + '\';
ADevNameFourth := ADevNameFourth + DevicePath[i];
end;
end;
FreeAndNil(DevicePath);
end;
//01.08.2012
if AFullPath and (InternalConnComponPath.Count > 0) then
begin
PrevInternalJoinedCompon := nil;
for i := 0 to InternalConnComponPath.Count - 1 do
begin
InternalJoinedCompon := TSCSComponent(InternalConnComponPath[i]);
//04.02.2013 îòîáðàæàåì íîìåð ïîðòà ïðåä. âíóòðåííåãî êîìïîíåíòà, ê êîòîðîìó ïäêëþ÷åí InternalJoinedCompon
if PrevInternalJoinedCompon <> nil then
if GetPortInfoByJoinedCompons(PrevInternalJoinedCompon, InternalJoinedCompon, NppFrom, NppTo) then
begin
if NppFrom = NppTo then
AElementName := AElementName +' ('+cNamePort+' '+IntToStr(NppFrom)+')'
else
AElementName := AElementName +' ('+cNamePort+' '+IntToStr(NppFrom)+'-'+IntToStr(NppTo)+')';
end;
if i > 0 then
AElementName := AElementName +#13;
AElementName := AElementName + InternalJoinedCompon.NameMark;
PrevInternalJoinedCompon := InternalJoinedCompon; //04.02.2013
end;
end
else
begin
if PointComponents.Count > 0 then
AElementName := PointComponents[0].NameMark; //PointComponents[0].NameShort + IntToStr(PointComponents[0].MarkID);
end;
InterrnalJoinedInterfaces.Free;
InternalConnComponPath.Free;
PointComponents.Free;
PointTopComponents.Free;
PointComponsInterfaces.Free;
end;
end;
function DefineSidePorts(aIdx: Integer; aInterfacesSide, aInterfacesSidePoint, aInterfacesSideJoinedToPoint: TSCSInterfaces): TIntList;
begin
Result := nil;
if ((InterfacesLeft.Count - 1) >= aIdx) and ((aInterfacesSidePoint.Count - 1) >= aIdx) then
if aInterfacesSidePoint[aIdx].PortOwner <> nil then
begin
Result := GetNppPortsByConnected(aInterfacesSidePoint[aIdx].PortOwner, aInterfacesSidePoint[p], aInterfacesSideJoinedToPoint[0]);
//if Result.Count > NppPortsCount then
// NppPortsCount := Result.Count;
end
else
if aInterfacesSidePoint[aIdx].IsPort = biTrue then
begin
//Result := TIntList.Create;
//Result.Add(aInterfacesSidePoint[aIdx].NppPort);
Result := GetNppPortsByConnected(aInterfacesSidePoint[aIdx], aInterfacesSidePoint[aIdx], aInterfacesSideJoinedToPoint[0]);
end;
if Assigned(Result) then
if Result.Count > NppPortsCount then
NppPortsCount := Result.Count;
end;
function GetDeviceNameByInterface(AInterface: TSCSInterface): String;
var ComponOwner: TSCSComponent;
TopComponent: TSCSComponent;
begin
if AInterface <> nil then
if Assigned(AInterface.ComponentOwner) then
begin
ComponOwner := TSCSComponent(AInterface.ComponentOwner);
TopComponent := ComponOwner.GetTopComponent;
if Assigned(TopComponent) then
Result := TopComponent.NameShort + IntToStr(TopComponent.MarkID);
end;
end;
function GetElementName(ACompon: TSCSComponent): String;
begin
Result := '';
if Not Assigned(ACompon) then
Exit; ///// EXIT ////
Result := ACompon.NameMark; //GetComponNameForVisible(ACompon.NameShort, IntTostr(ACompon.MarkID));
end;
function GetElementNameByInterface(AInterface: TSCSInterface): String;
var ComponOwner: TSCSComponent;
begin
if AInterface <> nil then
if Assigned(AInterface.ComponentOwner) then
begin
ComponOwner := TSCSComponent(AInterface.ComponentOwner);
Result := ComponOwner.NameMark; //ComponOwner.NameShort + IntToStr(ComponOwner.MarkID);
end;
end;
function GetWelding(AInterfList: TSCSInterfaces): String;
var i: Integer;
Interfac: TSCSInterface;
ComponOwner: TSCSComponent;
begin
Result := '';
if Assigned(AInterfList) then
for i := 0 to AInterfList.Count - 1 do
begin
if i > 0 then
Result := Result + #10+#13;
Interfac := AInterfList[i];
ComponOwner := TSCSComponent(Interfac.ComponentOwner);
if Assigned(ComponOwner) then
Result := Result + ComponOwner.NameShort + IntToStr(ComponOwner.MarkID);
end;
end;
function GetNumThreads(AInterfList: TSCSInterfaces): String;
var i: Integer;
Interfac: TSCSInterface;
begin
Result := '';
if Assigned(AInterfList) then
for i := 0 to AInterfList.Count - 1 do
begin
if i > 0 then
Result := Result + #10+#13;
Interfac := AInterfList[i];
Result := Result + IntToStr(Interfac.Npp);
end;
end;
begin
try
if (TF_Main(GForm).GDBMode <> bkProjectManager) or Not(Assigned(AFolder)) then
Exit; ///// EXIT //////
if Not CheckCanShowReport(AFolder) then
Exit; //// EXIT ////
FCatalog := AFolder;
mtRCableJournalInterfaces.Active := false;
MemTable_RCableJournalExt.Active := false;
mtRCableJournalInterfaces.MasterSource := DataSource_MT_RCableJournalExt;
mtRCableJournalInterfaces.DetailFields := fnIDMaster;
mtRCableJournalInterfaces.MasterFields := fnID;
MemTable_RCableJournalExt.Active := true;
mtRCableJournalInterfaces.Active := true;
LookedCompons := TSCSComponents.Create(false);
BeginProgress(pcPreparingReport);
try
for i := 0 to AFolder.ComponentReferences.Count - 1 do
begin
CurrCompon := AFolder.ComponentReferences[i];
if Assigned(CurrCompon) then
//Tolik
// if {CurrCompon.IsLine = biTrue} CheckSysNameIsCable(CurrCompon.ComponentType.SysName) then // òàê áûëî
if {CurrCompon.IsLine = biTrue} (CheckSysNameIsCable(CurrCompon.ComponentType.SysName) and
(not (CurrCompon.IDNetType in [3,4,5,7]))) then
begin
ComponSignType := CurrCompon.GetPropertyValueAsInteger(pnSignType);
if (LookedCompons.IndexOf(CurrCompon) = -1) and
((ComponSignType = oitProjectible) or (ACanHaveActiveComponents)) then
if CurrCompon.HaveInterfaceByType(itFunctional) then
begin
CurrCompon.RefreshWholeLengthIfNecessary;
// added by Tolik
ComponList := TSCSComponents.create(false);
SetActualOrderInPartComponent(CurrCompon, ComponList, FromNppPort1, ListName);
propList:=TStringList.Create;
propList1:=TStringList.Create;
GetCablePath(CurrCompon, propList, propList1,ComponList);
CurrCompon.LoadNet;
CurrCompon.DefineLengthsOfNetThreads;
for j := 0 to CurrCompon.Net.Count - 1 do
begin
ptrJoinedComponents := CurrCompon.Net[j];
if Not ACanHaveDismountAccount or Not CheckHaveComponentDismountedInList(ptrJoinedComponents.JoinedLines) then
for k := 0 to ptrJoinedComponents.FirstConnCompons.Count - 1 do
if Assigned(ptrJoinedComponents.FirstConnCompons[k]) and
CheckCanLookComponInReportCable(ptrJoinedComponents.FirstConnCompons[k], ACanHaveDismountAccount) then
for l := 0 to ptrJoinedComponents.LastConnCompons.Count - 1 do
if Assigned(ptrJoinedComponents.LastConnCompons[l]) and
CheckCanLookComponInReportCable(ptrJoinedComponents.LastConnCompons[l], ACanHaveDismountAccount) then
begin
FirstConComponents := ptrJoinedComponents.FirstConnCompons;
LastConComponents := ptrJoinedComponents.LastConnCompons;
FirstConCompon := ptrJoinedComponents.FirstConnCompons[k];
LastConCompon := ptrJoinedComponents.LastConnCompons[l];
FirstLineCompon := ptrJoinedComponents.First;
LastLineCompon := ptrJoinedComponents.Last;
//*** Îïðåäåëèòü Èñõîäÿùèå è âõîäÿùèå îáúåêòû
ChangeFirstLast := false;
FirstObject := FirstConCompon.GetFirstParentCatalog;
LastObject := LastConCompon.GetFirstParentCatalog;
InterfCount1 := 0;
InterfCount2 := 0;
if Assigned(FirstObject) then
InterfCount1 := FirstObject.GetInterfaceCount([itFunctional]);
if Assigned(LastObject) then
InterfCount2 := LastObject.GetInterfaceCount([itFunctional]);
if InterfCount1 > InterfCount2 then
begin
ChangeFirstLast := true;
BuffComponents := FirstConComponents;
FirstConComponents := LastConComponents;
LastConComponents := BuffComponents;
BuffCompon := FirstConCompon;
FirstConCompon := LastConCompon;
LastConCompon := BuffCompon;
BuffCompon := FirstLineCompon;
FirstLineCompon := LastLineCompon;
LastLineCompon := BuffCompon;
BuffObject := FirstObject;
FirstObject := LastObject;
LastObject := BuffObject;
ptrJoinedComponents.JoinedLines.Rotate;
end;
PrevRowCompon := nil;
CurrRowCompon := nil;
// From Left(first) To Right(Last)
//if FirstLineCompon.Whole_ID <> LastLineCompon.Whole_ID then
begin
for m := 0 to ptrJoinedComponents.JoinedLines.Count - 1 do
if LookedCompons.IndexOf(ptrJoinedComponents.JoinedLines[m]) = -1 then
begin
PrevRowCompon := CurrRowCompon;
CurrRowCompon := ptrJoinedComponents.JoinedLines[m];
LeftCompon := nil;
RightCompon := nil;
if Assigned(PrevRowCompon) then
if PrevRowCompon.Whole_ID <> CurrRowCompon.Whole_ID then
LeftCompon := PrevRowCompon;
if Not Assigned(PrevRowCompon) then
LeftCompon := FirstConCompon;
//*** Êîìïîíåíò ñëåâà îïðåäåëåí ?
if Assigned(LeftCompon) then
begin
if m < ptrJoinedComponents.JoinedLines.Count - 1 then
for n := m+1 to ptrJoinedComponents.JoinedLines.Count - 1 do
if CurrRowCompon.Whole_ID <> ptrJoinedComponents.JoinedLines[n].Whole_ID then
RightCompon := ptrJoinedComponents.JoinedLines[n]
else
if n = ptrJoinedComponents.JoinedLines.Count - 1 then
RightCompon := LastConCompon;
if m = ptrJoinedComponents.JoinedLines.Count - 1 then
RightCompon := LastConCompon;
end;
//*** Îïðåäåëåíû ïîäêëþ÷åííûå êîìïîíåíòû ñëåâà è ñïðàâà
if Assigned(LeftCompon) and Assigned(RightCompon) then
begin
CurrRowCompon.LoadWholeComponent(false);
CurrRowCompon.LoadWholeLength;
CurrRowComponObject := CurrRowCompon.GetFirstParentCatalog;
LeftComponObject := LeftCompon.GetFirstParentCatalog;
RightComponObject := RightCompon.GetFirstParentCatalog;
SideCompon1Left := -1;
SideCompon2Left := -1;
SideCompon1Right := -1;
SideCompon2Right := -1;
if Assigned(CurrRowComponObject) and Assigned(LeftComponObject) and Assigned(RightComponObject) then
begin
GetSidesByConnectedFigures(CurrRowComponObject.ListID, LeftComponObject.ListID, CurrRowComponObject.SCSID, LeftComponObject.SCSID, SideCompon1Left, SideCompon2Left);
GetSidesByConnectedFigures(CurrRowComponObject.ListID, RightComponObject.ListID, CurrRowComponObject.SCSID, RightComponObject.SCSID, SideCompon1Right, SideCompon2Right);
end;
//**** Side1-Left(First), Side2-Right(Last)
ParallelInterfaces := CurrRowCompon.GetInterfacesBySides;
if (SideCompon1Left = 2) {or (SideCompon1Right = 1)} then
begin
BuffList := ParallelInterfaces.InterfList2;
ParallelInterfaces.InterfList2 := ParallelInterfaces.InterfList1;
ParallelInterfaces.InterfList1 := BuffList;
end;
ShowDevNameFrom := false;
ShowDevNameTo := false;
MemTable_RCableJournalExt.Append;
MemTable_RCableJournalExt.FieldByName('NumCable').AsInteger := CurrRowCompon.MarkID;
MemTable_RCableJournalExt.FieldByName('CableData').AsString := CurrRowCompon.Name;
MemTable_RCableJournalExt.FieldByName('NameMark').AsString := CurrRowCompon.NameMark;
//added by Tolik
MemTable_RCableJournalExt.FieldValues[fnMarks]:=propList.Text; // ìàðêèðîâêà îáúåêòîâ ïî ïóòè êàáåëÿ
MemTable_RCableJournalExt.FieldValues[fnPrices]:=propList1.Text; // äëèíû ëèíåéíûõ êîìïîíåíò ïî ïóòè êàáåëÿ
//
if CheckPriceTransformToUOMByCompType(@CurrRowCompon.ComponentType) then
begin
MemTable_RCableJournalExt.FieldByName(fnIzm).AsString := GetNameUOM(TF_Main(GForm).FUOM, true);
MemTable_RCableJournalExt.FieldByName(fnLength).AsFloat := FloatInUOM(CurrRowCompon.Length, umMetr, TF_Main(GForm).FUOM);
end
else
begin
MemTable_RCableJournalExt.FieldByName(fnIzm).AsString := CurrRowCompon.Izm;
MemTable_RCableJournalExt.FieldByName(fnLength).AsFloat := CurrRowCompon.Length;
end;
MemTable_RCableJournalExt.FieldByName('NumThread').AsInteger := 0;
MemTable_RCableJournalExt.FieldByName('From_Building').AsString := LeftCompon.GetListOwner.GetNameForVisible(false);
GetDeviceAndElementNamesByLineComponInterfaces(CurrRowCompon, ParallelInterfaces.InterfList1,
DeviceName, DeviceNameSecond, DeviceNameThird, DeviceNameFourth, ElementName);
if DeviceName = '' then
ShowDevNameFrom := true;
MemTable_RCableJournalExt.FieldByName(fnFromDevice).AsString := DeviceName; //GetDeviceName(FirstConComponents);
MemTable_RCableJournalExt.FieldByName(fnFromDeviceSecond).AsString := DeviceNameSecond;
MemTable_RCableJournalExt.FieldByName(fnFromDeviceThird).AsString := DeviceNameThird;
MemTable_RCableJournalExt.FieldByName(fnFromDeviceFourth).AsString := DeviceNameFourth;
//if LeftCompon.IsLine = biFalse then
MemTable_RCableJournalExt.FieldByName('From_Element').AsString := ElementName; //GetElementName(LeftCompon);
MemTable_RCableJournalExt.FieldByName('To_Building').AsString := RightCompon.GetListOwner.GetNameForVisible;
GetDeviceAndElementNamesByLineComponInterfaces(CurrRowCompon, ParallelInterfaces.InterfList2,
DeviceName, DeviceNameSecond, DeviceNameThird, DeviceNameFourth, ElementName);
if DeviceName = '' then
ShowDevNameTo := true;
MemTable_RCableJournalExt.FieldByName(fnToDevice).AsString := DeviceName; //GetDeviceName(LastConComponents);
MemTable_RCableJournalExt.FieldByName(fnToDeviceSecond).AsString := DeviceNameSecond;
MemTable_RCableJournalExt.FieldByName(fnToDeviceThird).AsString := DeviceNameThird;
MemTable_RCableJournalExt.FieldByName(fnToDeviceFourth).AsString := DeviceNameFourth;
//if RightCompon.IsLine = biFalse then
MemTable_RCableJournalExt.FieldByName('To_Element').AsString := ElementName; //GetElementName(RightCompon);
MemTable_RCableJournalExt.FieldByName('TraceCabling').AsString := CurrRowCompon.GetPropertyValueBySysName(pnTraceCabinig);
MemTable_RCableJournalExt.FieldByName('Sign').AsString := CurrRowCompon.NameShort + IntToStr(CurrRowCompon.MarkID);
MemTable_RCableJournalExt.FieldByName('Kolvo').AsInteger := 2;
//MemTable_RCableJournalExt.FieldByName('Diameter').AsFloat := Round3(CurrRowCompon.GetVolume(gtMale) * 10);
CableDiametr := CurrRowCompon.GetPropertyValueAsFloat(pnOutDiametr);
if CableDiametr <> 0 then
begin
CableDiametr := FLoatInUOM(CableDiametr, umMillimetr, ConvertUOMToMin(TF_Main(GForm).FUOM));
MemTable_RCableJournalExt.FieldByName(fnDiameter).AsFloat := Round2(CableDiametr);
end
else
MemTable_RCableJournalExt.FieldByName(fnDiameter).Value := null;
MemTable_RCableJournalExt.FieldByName('Note').AsString := CurrRowCompon.Notice;
MemTable_RCableJournalExt.Post;
for n := 0 to ParallelInterfaces.InterfList1.Count - 1 do
begin
ptrInterfFirst := ParallelInterfaces.InterfList1[n];
ptrInterfLast := ParallelInterfaces.InterfList2[n];
InterfacesLeftJoinedToPoint := TSCSInterfaces.Create(false);
InterfacesRighJoinedToPoint := TSCSInterfaces.Create(false);
InterfacesLeft := CurrRowCompon.GetInterfacesConnectedToInterfaceOtherCompon(ptrInterfFirst);
InterfacesLeftPoint := CurrRowCompon.GetInterfacesConnectedToConnCompon(ptrInterfFirst,
nil, InterfacesLeftJoinedToPoint);
//*** Åñëè íå íàøëèñü èíòåðôåéñû, ïîäêëþ÷åííûå ê êîìïîíåíòå â ñàìîé ãëóáè
// íàõîäèì ïîäêëþ÷åííûå îò êàáåëÿ
if InterfacesLeftJoinedToPoint.Count = 0 then
begin
FreeAndNil(InterfacesLeftJoinedToPoint);
InterfacesLeftJoinedToPoint := CurrRowCompon.GetInterfacesConnectedToEndLineCompon(ptrInterfFirst);
end;
InterfacesRight := CurrRowCompon.GetInterfacesConnectedToInterfaceOtherCompon(ptrInterfLast);
InterfacesRightPoint := CurrRowCompon.GetInterfacesConnectedToConnCompon(ptrInterfLast,
nil, InterfacesRighJoinedToPoint);
// Ñì êîìåíòàðèé äëÿ "if InterfacesLeftJoinedToPoint.Count = 0 then"
if InterfacesRighJoinedToPoint.Count = 0 then
begin
FreeAndNil(InterfacesRighJoinedToPoint);
InterfacesRighJoinedToPoint := CurrRowCompon.GetInterfacesConnectedToEndLineCompon(ptrInterfLast);
end;
//InterfacesLeft := ptrInterfFirst.ConnectedInterfaces;
//InterfacesRight := ptrInterfLast.ConnectedInterfaces;
if ((InterfacesLeft.Count > 0) or (InterfacesRight.Count > 0)) and
(InterfacesLeftPoint.Count > 0) and (InterfacesRightPoint.Count > 0) then
begin
InterfJoinedCount := 0;
//23.03.2009 if InterfacesLeftPoint.Count < InterfacesRightPoint.Count then
//23.03.2009 InterfJoinedCount := InterfacesLeftPoint.Count
//23.03.2009 else
//23.03.2009 InterfJoinedCount := InterfacesRightPoint.Count;
if InterfacesLeftPoint.Count > InterfacesRightPoint.Count then
InterfJoinedCount := InterfacesLeftPoint.Count
else
InterfJoinedCount := InterfacesRightPoint.Count;
for p := 0 to InterfJoinedCount - 1 do
begin
NppPortsCount := 1; // 1 ÷òîáû ñëåä-é öèêë îòðàáîòàë ìèíèìóì îäíó èòåðàöèþ
{//01.08.2012
NppPortsLeft := nil;
NppPortsRight := nil;
// Îïðåäåëÿåì ñïèñêè íîìåðîâ ïîðòîâ
if ((InterfacesLeft.Count - 1) >= p) and ((InterfacesLeftPoint.Count - 1) >= p) then
if InterfacesLeftPoint[p].PortOwner <> nil then
begin
NppPortsLeft := GetNppPortsByConnected(InterfacesLeftPoint[p].PortOwner, InterfacesLeftPoint[p], InterfacesLeftJoinedToPoint[0]);
if NppPortsLeft.Count > NppPortsCount then
NppPortsCount := NppPortsLeft.Count;
end;
if ((InterfacesRight.Count -1) >= p) and ((InterfacesRightPoint.Count - 1) >= p) then
if InterfacesRightPoint[p].PortOwner <> nil then
begin
NppPortsRight := GetNppPortsByConnected(InterfacesRightPoint[p].PortOwner, InterfacesRightPoint[p], InterfacesRighJoinedToPoint[0]);
if NppPortsRight.Count > NppPortsCount then
NppPortsCount := NppPortsRight.Count;
end;}
NppPortsLeft := DefineSidePorts(p, InterfacesLeft, InterfacesLeftPoint, InterfacesLeftJoinedToPoint);
NppPortsRight := DefineSidePorts(p, InterfacesRight, InterfacesRightPoint, InterfacesRighJoinedToPoint);
for q := 0 to NppPortsCount - 1 do
begin
mtRCableJournalInterfaces.Append;
mtRCableJournalInterfaces.FieldByName(fnIDMaster).AsInteger := MemTable_RCableJournalExt.FieldByName(fnID).AsInteger;
mtRCableJournalInterfaces.FieldByName('NumThread').AsInteger := ptrInterfFirst.Npp; // or ptrInterfLast
if (InterfacesLeftPoint.Count - 1) >= p then
begin
if ShowDevNameFrom then
mtRCableJournalInterfaces.FieldByName('From_Device').AsString := GetDeviceNameByInterface(InterfacesLeftPoint[p]);
mtRCableJournalInterfaces.FieldByName('From_Element').AsString := GetElementNameByInterface(InterfacesLeftPoint[p]);
end;
if ((InterfacesLeft.Count - 1) >= p) and
(TSCSComponent(TSCSInterface(InterfacesLeft[p]).ComponentOwner).IsLine = biTrue) then
begin
mtRCableJournalInterfaces.FieldByName('From_WeldingCable').AsString := GetWelding(InterfacesLeft);
mtRCableJournalInterfaces.FieldByName('From_NumThread').AsString := GetNumThreads(InterfacesLeft);
end
else
if ((InterfacesLeftPoint.Count - 1) >= p) and
(InterfacesLeftPoint[p].ComponentOwner.IsLine = biFalse) then
begin
mtRCableJournalInterfaces.FieldByName('From_InterfName').AsString := InterfacesLeftPoint[p].LoadName; //TF_MAIN(GForm).DM.GetInterfName(TSCSInterface(InterfacesLeft[0]).ID_Interface);
ptrPortFirst := InterfacesLeftPoint[p].PortOwner; //}TSCSComponent(TSCSInterface(InterfacesLeft[0]).ComponentOwner).GetPort;
//01.08.2012 if ptrPortFirst <> nil then
if (NppPortsLeft <> nil) and ((NppPortsLeft.Count-1) >= q) then
begin
if (ptrPortFirst = nil) and (InterfacesLeftPoint[p].IsPort = biTrue) then //01.08.2012
ptrPortFirst := InterfacesLeftPoint[p];
NppPort := NppPortsLeft[q]; //GetNppPortByConnected(ptrPortFirst, InterfacesLeftPoint[p], InterfacesLeftJoinedToPoint[0], p+1);
mtRCableJournalInterfaces.FieldByName('From_NppPort').AsInteger := NppPort; //ptrPortFirst.NppPort;
if NppPort <> 0 then
//mtRCableJournalInterfaces.FieldByName('From_PortMark').AsString := ConcatStrWithDefis(FirstConCompon.NameMark, IntToStr(NppPort)); //LastConCompon.NameShort + IntToStr(LastConCompon.MarkID)+'-'+IntToStr(ptrPortFirst.NppPort);
mtRCableJournalInterfaces.FieldByName('From_PortMark').AsString := ConcatStrWithDefis(ptrPortFirst.ComponentOwner.NameMark, IntToStr(NppPort));
end;
end;
if (InterfacesRightPoint.Count - 1) >= p then
begin
if ShowDevNameTo then
mtRCableJournalInterfaces.FieldByName('To_Device').AsString := GetDeviceNameByInterface(InterfacesRightPoint[p]);
mtRCableJournalInterfaces.FieldByName('To_Element').AsString := GetElementNameByInterface(InterfacesRightPoint[p]);
end;
if ((InterfacesRight.Count - 1) >= p) and (TSCSComponent(TSCSInterface(InterfacesRight[p]).ComponentOwner).IsLine = biTrue) then
begin
mtRCableJournalInterfaces.FieldByName('To_WeldingCable').AsString := GetWelding(InterfacesRight);
mtRCableJournalInterfaces.FieldByName('To_NumThread').AsString := GetNumThreads(InterfacesRight);
end
else
if ((InterfacesRightPoint.Count - 1) >= p) and
(InterfacesRightPoint[p].ComponentOwner.IsLine = biFalse) then
begin
mtRCableJournalInterfaces.FieldByName('To_InterfName').AsString := InterfacesRightPoint[p].LoadName; //TF_MAIN(GForm).DM.GetInterfName(TSCSInterface(InterfacesRight[0]).ID_Interface);
ptrPortLast := InterfacesRightPoint[p].PortOwner; //}TSCSComponent(TSCSInterface(InterfacesRight[0]).ComponentOwner).GetPort;
//01.08.2012 if ptrPortLast <> nil then
if (NppPortsRight <> nil) and ((NppPortsRight.Count-1) >= q) then
begin
if (ptrPortLast = nil) and (InterfacesRightPoint[p].IsPort = biTrue) then //01.08.2012
ptrPortLast := InterfacesRightPoint[p];
NppPort := NppPortsRight[q]; //GetNppPortByConnected(ptrPortLast, InterfacesRightPoint[p], InterfacesRighJoinedToPoint[0], p+1);
mtRCableJournalInterfaces.FieldByName('To_NppPort').AsInteger := NppPort; // //ptrPortLast.NppPort;
if NppPort <> 0 then
mtRCableJournalInterfaces.FieldByName('To_PortMark').AsString := ConcatStrWithDefis(ptrPortLast.ComponentOwner.NameMark, IntToStr(NppPort));
end;
end;
end;
if NppPortsLeft <> nil then
FreeAndNil(NppPortsLeft);
if NppPortsRight <> nil then
FreeAndNil(NppPortsRight);
{//24.03.2009
mtRCableJournalInterfaces.Append;
mtRCableJournalInterfaces.FieldByName(fnIDMaster).AsInteger := MemTable_RCableJournalExt.FieldByName(fnID).AsInteger;
mtRCableJournalInterfaces.FieldByName('NumThread').AsInteger := ptrInterfFirst.Npp; // or ptrInterfLast
if InterfacesLeft.Count > 0 then
begin
if (InterfacesLeftPoint.Count - 1) >= p then
begin
if ShowDevNameFrom then
mtRCableJournalInterfaces.FieldByName('From_Device').AsString := GetDeviceNameByInterface(InterfacesLeftPoint[p]);
mtRCableJournalInterfaces.FieldByName('From_Element').AsString := GetElementNameByInterface(InterfacesLeftPoint[p]);
end;
if ((InterfacesLeft.Count - 1) >= p) and
(TSCSComponent(TSCSInterface(InterfacesLeft[p]).ComponentOwner).IsLine = biTrue) then
begin
mtRCableJournalInterfaces.FieldByName('From_WeldingCable').AsString := GetWelding(InterfacesLeft);
mtRCableJournalInterfaces.FieldByName('From_NumThread').AsString := GetNumThreads(InterfacesLeft);
end
else
if ((InterfacesLeftPoint.Count - 1) >= p) and
(InterfacesLeftPoint[p].ComponentOwner.IsLine = biFalse) then
//if (InterfacesLeftPoint[0].ComponentOwner = LeftCompon) or
// (InterfacesLeftPoint[0].ComponentOwner = RightCompon) then
begin
mtRCableJournalInterfaces.FieldByName('From_InterfName').AsString := InterfacesLeftPoint[p].LoadName; //TF_MAIN(GForm).DM.GetInterfName(TSCSInterface(InterfacesLeft[0]).ID_Interface);
ptrPortFirst := InterfacesLeftPoint[p].PortOwner; //TSCSComponent(TSCSInterface(InterfacesLeft[0]).ComponentOwner).GetPort;
if ptrPortFirst <> nil then
begin
NppPort := GetNppPortByConnected(ptrPortFirst, InterfacesLeftPoint[p], InterfacesLeftJoinedToPoint[0], p+1);
mtRCableJournalInterfaces.FieldByName('From_NppPort').AsInteger := NppPort; //ptrPortFirst.NppPort;
if NppPort <> 0 then
//mtRCableJournalInterfaces.FieldByName('From_PortMark').AsString := ConcatStrWithDefis(FirstConCompon.NameMark, IntToStr(NppPort)); //LastConCompon.NameShort + IntToStr(LastConCompon.MarkID)+'-'+IntToStr(ptrPortFirst.NppPort);
mtRCableJournalInterfaces.FieldByName('From_PortMark').AsString := ConcatStrWithDefis(ptrPortFirst.ComponentOwner.NameMark, IntToStr(NppPort));
end;
//MemTable_RCableJournalExt.FieldByName('From_NppPort').AsInteger := TSCSInterface(InterfacesLeft[0]).NppPort;
//if TSCSInterface(InterfacesLeft[0]).NppPort <> 0 then
// MemTable_RCableJournalExt.FieldByName('From_PortMark').AsString := LastConCompon.MarkStr + IntToStr(LastConCompon.MarkID)+'-'+IntToStr(TSCSInterface(InterfacesLeft[0]).NppPort);
end;
end;
if InterfacesRight.Count > 0 then
begin
if (InterfacesRightPoint.Count - 1) >= p then
begin
if ShowDevNameTo then
mtRCableJournalInterfaces.FieldByName('To_Device').AsString := GetDeviceNameByInterface(InterfacesRightPoint[p]);
mtRCableJournalInterfaces.FieldByName('To_Element').AsString := GetElementNameByInterface(InterfacesRightPoint[p]);
end;
if ((InterfacesRight.Count - 1) >= p) and (TSCSComponent(TSCSInterface(InterfacesRight[p]).ComponentOwner).IsLine = biTrue) then
begin
mtRCableJournalInterfaces.FieldByName('To_WeldingCable').AsString := GetWelding(InterfacesRight);
mtRCableJournalInterfaces.FieldByName('To_NumThread').AsString := GetNumThreads(InterfacesRight);
end
else
if ((InterfacesRightPoint.Count - 1) >= p) and
(InterfacesRightPoint[p].ComponentOwner.IsLine = biFalse) then
//if (InterfacesRightPoint[0].ComponentOwner = RightCompon) or
// (InterfacesRightPoint[0].ComponentOwner = LeftCompon) then
begin
mtRCableJournalInterfaces.FieldByName('To_InterfName').AsString := InterfacesRightPoint[p].LoadName; //TF_MAIN(GForm).DM.GetInterfName(TSCSInterface(InterfacesRight[0]).ID_Interface);
ptrPortLast := InterfacesRightPoint[p].PortOwner; //TSCSComponent(TSCSInterface(InterfacesRight[0]).ComponentOwner).GetPort;
if ptrPortLast <> nil then
begin
NppPort := GetNppPortByConnected(ptrPortLast, InterfacesRightPoint[p], InterfacesRighJoinedToPoint[0], p+1);
mtRCableJournalInterfaces.FieldByName('To_NppPort').AsInteger := NppPort; // //ptrPortLast.NppPort;
if NppPort <> 0 then
//mtRCableJournalInterfaces.FieldByName('To_PortMark').AsString := ConcatStrWithDefis(LastConCompon.NameMark, IntToStr(NppPort)); //LastConCompon.NameShort + IntToStr(LastConCompon.MarkID)+'-'+IntToStr(ptrPortLast.NppPort);
mtRCableJournalInterfaces.FieldByName('To_PortMark').AsString := ConcatStrWithDefis(ptrPortLast.ComponentOwner.NameMark, IntToStr(NppPort));
end;
//MemTable_RCableJournalExt.FieldByName('To_NppPort').AsInteger := TSCSInterface(InterfacesRight[0]).NppPort;
//if TSCSInterface(InterfacesRight[0]).NppPort <> 0 then
// MemTable_RCableJournalExt.FieldByName('To_PortMark').AsString := LastConCompon.MarkStr + IntToStr(LastConCompon.MarkID)+'-'+IntToStr(TSCSInterface(InterfacesRight[0]).NppPort);
end;
end; }
mtRCableJournalInterfaces.Post;
end;
end;
FreeAndNil(InterfacesLeft);
FreeAndNil(InterfacesLeftPoint);
FreeAndNil(InterfacesLeftJoinedToPoint);
FreeAndNil(InterfacesRight);
FreeAndNil(InterfacesRightPoint);
FreeAndNil(InterfacesRighJoinedToPoint);
end;
end;
end;
LookedCompons.Assign(ptrJoinedComponents.JoinedLines, laOr);
end;
{for j := 0 to CurrCompon.Net.Count - 1 do
begin
ptrJoinedComponents := CurrCompon.Net[j];
if Assigned(ptrJoinedComponents.JoinedLines) then
LookedCompons.Assign(ptrJoinedComponents.JoinedLines, laOr);
end;}
end;
end;
for j := 0 to CurrCompon.Net.Count - 1 do
begin
ptrJoinedComponents := CurrCompon.Net[j];
if Assigned(ptrJoinedComponents.JoinedLines) then
LookedCompons.Assign(ptrJoinedComponents.JoinedLines, laOr);
end;
end;
end;
end;
//MemTable_RCableJournalExt.SortOn('NumCable', []);
SortMemTableByParams(MemTable_RCableJournalExt, AParams, nil);
finally
EndProgress;
LookedCompons.Free;
end;
GFormMode := fmRCableJournalExt;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowFolderCableJournalExt: '+E.Message);
end;
end;
procedure TF_ResourceReport.ShowFolderLegendObjectIcons(AFolder: TSCSCatalog; AParams: TReportItemParams; ACanHaveActiveComponents: Boolean);
var
i: Integer;
CurrCatalog: TSCSCatalog;
FirstComponent: TSCSComponent;
ComponSignType: Integer;
CurrObjIconGUID: string;
CurrObjIconType: Integer;
LookedObjectIconGUIDs: TStringList;
LookedObjectIconActTypes: TIntList;
LookedObjectIconProjTypes: TIntList;
IndexOfLooked: Integer;
SprObjectIcon: TNBObjectIcon;
ObjectIcon: TMemoryStream;
ObjectIconName: String;
ProjOwner: TSCSProject;
begin
try
FCatalog := AFolder;
mtRLegendObjectIcons.Active := false;
mtRLegendObjectIcons.Active := true;
LookedObjectIconGUIDs := TStringList.Create;
LookedObjectIconActTypes := TIntList.Create;
LookedObjectIconProjTypes := TIntList.Create;
BeginProgress(pcPreparingReport);
try
ProjOwner := AFolder.GetProject;
if ProjOwner <> nil then
for i := 0 to AFolder.ChildCatalogReferences.Count - 1 do
begin
CurrCatalog := AFolder.ChildCatalogReferences[i];
if CurrCatalog.ItemType in [itSCSLine, itSCSConnector] then
begin
//*** ID è Òèï óñëîâíîãî îáîçíà÷åíèÿ îáúåêòà
//CurrObjIconID := GetIconIDByObjectID(CurrCatalog.SCSID);
//CurrObjIconType := GetObjectTypeIDByObjectID(CurrCatalog.SCSID);
FirstComponent := CurrCatalog.GetFirstComponent;
if FirstComponent <> nil then
begin
CurrObjIconGUID := FirstComponent.GUIDObjectIcon; //CurrObjIconID := FirstComponent.IDObjectIcon;
CurrObjIconType := FirstComponent.GetPropertyValueAsInteger(pnSignType);
if (FirstComponent.GUIDObjectIcon <> '') and ((CurrObjIconType = oitProjectible) or ACanHaveActiveComponents) then
begin
IndexOfLooked := LookedObjectIconGUIDs.IndexOf(CurrObjIconGUID);
if (IndexOfLooked = -1) or
((CurrObjIconType = oitActive) and (LookedObjectIconActTypes[IndexOfLooked] = oitNone)) or
((CurrObjIconType = oitProjectible) and (LookedObjectIconProjTypes[IndexOfLooked] = oitNone)) then
begin
//ObjectIcon := nil;
//ObjectIcon := TF_Main(GForm).FNormBase.DM.GetComponIconByIconType(CurrObjIconID, CurrObjIconType, ieBMP);
//ObjectIconName := TF_Main(GForm).FNormBase.DM.GetStringFromTableByID(tnObjectIcons, fnName, CurrObjIconID, qmPhisical);
SprObjectIcon := ProjOwner.Spravochnik.GetObjectIconByGUID(CurrObjIconGUID);
if SprObjectIcon <> nil then
begin
ObjectIcon := nil;
if CurrObjIconType = oitProjectible then
ObjectIcon := SprObjectIcon.ProjBmp
else
if CurrObjIconType = oitActive then
ObjectIcon := SprObjectIcon.ActiveBmp;
if ObjectIcon <> nil then
begin
ObjectIcon.Position := 0;
mtRLegendObjectIcons.Append;
mtRLegendObjectIcons.FieldByName(fnName).AsString := SprObjectIcon.Name; //ObjectIconName;
TBlobField(mtRLegendObjectIcons.FieldByName(fnPicture)).LoadFromStream(ObjectIcon);
mtRLegendObjectIcons.Post;
//FreeAndNil(ObjectIcon);
end;
end;
if IndexOfLooked = -1 then
begin
IndexOfLooked := LookedObjectIconGUIDs.Add(CurrObjIconGUID);
LookedObjectIconActTypes.Add(oitNone);
LookedObjectIconProjTypes.Add(oitNone);
end;
case CurrObjIconType of
oitProjectible:
LookedObjectIconProjTypes[IndexOfLooked] := CurrObjIconType;
oitActive:
LookedObjectIconActTypes[IndexOfLooked] := CurrObjIconType;
end;
end;
end;
end;
end;
end;
finally
EndProgress;
LookedObjectIconGUIDs.Free;
LookedObjectIconActTypes.Free;
LookedObjectIconProjTypes.Free;
//mtRLegendObjectIcons.SortOn(fnName, []);
SortMemTableByParams(mtRLegendObjectIcons, AParams, nil);
end;
GFormMode := fmRLegendObjectIcons;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLog(': '+E.Message);
end;
end;
// ##### Âåäîìîñòü ïî òèïàì êîìïîíåíòîâ #####
procedure TF_ResourceReport.ShowFolderTypeComponenetsReport(AFolder: TSCSCatalog; AParams: TReportItemParams);
var FolderIDComponList: TList;
ListWithBusyCompons: TList;
i, j, k: Integer;
IDMaster: Integer;
TypeList: TList;
Group: TSCSCatalog;
GroupList: TList;
GroupComponent: TSCSComponent;
GroupLength: Double;
GroupCost: Double;
TotalCost: Double;
TypeCost: Double;
strLength: String;
LengthFromStr: Double;
StrToShow: String;
procedure AddToGroups(AIDComponent: Integer);
var NewSCSComponent: TSCSComponent;
Compon: TSCSComponent;
i: Integer;
Group: TSCSCatalog;
GroupForReceiveCompon: TSCSCatalog;
WholeLineCompon: TList; //*** Öåëüíûé ëèíåéíûé êîìïîíåíò
Length: Double;
strLength: String;
LengthFromStr: Double;
ptrIDBusy: ^Integer;
begin
if CheckNoIDinList(AIDComponent, ListWithBusyCompons) then
begin
NewSCSComponent := TSCSComponent.Create(GForm);
NewSCSComponent.LoadComponentByID(AIDComponent, false);
case NewSCSComponent.IsLine of
biTrue:
begin
NewSCSComponent.LoadWholeComponent(false);
NewSCSComponent.LoadWholeLength;
//*** Çàíåñòè â ñïèñîê çàíÿòûõ
for i := 0 to NewSCSComponent.WholeComponent.Count - 1 do
begin
New(ptrIDBusy);
ptrIDBusy^ := NewSCSComponent.WholeComponent[i];
ListWithBusyCompons.Add(ptrIDBusy);
end;
end;
end;
NewSCSComponent.NormsResources.CalcResourcesCost(true, true);
if NewSCSComponent.NormsResources.ResourcesCost = 0 then
begin
NewSCSComponent.Free;
Exit; //// EXIT ////
end;
GroupForReceiveCompon := nil;
//*** Íàéòè òèï äëÿ êîìïîíåíòû
GroupList := nil;
for i := 0 to TypeList.Count - 1 do
begin
//GroupList := TypeList.Items[i];
if TList(TypeList.Items[i]).Count > 0 then
begin
Group := TList(TypeList.Items[i]).Items[0]; // GroupList.Items[0];
if Group.SCSComponents.Count > 0 then
if TSCSComponent(Group.SCSComponents.Items[0]).ID_ComponentType = NewSCSComponent.ID_ComponentType then
begin
GroupList := TypeList.Items[i];
Break;
end;
end;
end;
//*** Åñëè íåò ñïèñêà ãðóïï äëÿ òåê-ãî òèïà, òî ñîçäàòü åå
if GroupList = nil then
begin
GroupList := TList.Create;
TypeList.Add(GroupList);
end;
//*** Íàéòè ãðóïïó äëÿ êîìïîíåíòû
for i := 0 to GroupList.Count - 1 do
begin
Group := GroupList.Items[i];
if Group.SCSComponents.Count > 0 then
if TSCSComponent(Group.SCSComponents.Items[0]).GuidNB = NewSCSComponent.GuidNB then
begin
GroupForReceiveCompon := Group;
Break;
end;
end;
//*** Ñîçäàòü íîâóþ ãðóïïó
if GroupForReceiveCompon = nil then
begin
Group := TSCSCatalog.Create(GForm);
GroupList.Add(Group);
GroupForReceiveCompon := Group;
end;
//*** Äîáàâèòü êîìïîíåíò â ãðóïïó
if GroupForReceiveCompon <> nil then
begin
//ptrNewSCSComponent.LoadNorms(false);
//ptrNewSCSComponent.CalcResourcesCost(true, true);
if NewSCSComponent.IsLine = biFalse then
begin
New(ptrIDBusy);
ptrIDBusy^ := NewSCSComponent.ID;
ListWithBusyCompons.Add(ptrIDBusy);
end;
//*** Äîáàâëåíèå â ãðóïïó
if NewSCSComponent.NormsResources.ResourcesCost > 0 then
GroupForReceiveCompon.SCSComponents.Add(NewSCSComponent)
else
NewSCSComponent.Free;
end;
end;
end;
begin
FolderIDComponList := nil;
try
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
if Not CheckCanShowReport(AFolder) then
Exit; ///// EXIT /////
try
FCatalog := AFolder;
FolderIDComponList := Tlist.Create;
ListWithBusyCompons := TList.Create;
TypeList := TList.Create;
//GroupList := TList.Create;
//*** Íàéòè âñå êìîïîíåíòû ïàïêè
FolderIDComponList := GetFolderComponList(GForm, AFolder, [itSCSLine, itSCSConnector]);
if FolderIDComponList = nil then
Exit; //// EXIT /////
//*** Ðàçáèòü êîìïîíåíòû ïî ãðóïïàì îòíîñèòåëüíî IDNormBase
for i := 0 to FolderIDComponList.Count - 1 do
AddToGroups(Integer(FolderIDComponList.Items[i]^));
TotalCost := 0;
MemTable_RTypeComponents.Active := false;
MemTable_RTypeComponents.Active := true;
MemTable_RTypeComponentsDetail.Active := false;
MemTable_RTypeComponentsDetail.Active := true;
Screen.Cursor := crHourGlass;
try
for i := 0 to TypeList.Count - 1 do
begin
GroupList := TypeList.Items[i];
IDMaster := -1;
TypeCost := 0;
for j := 0 to GroupList.Count - 1 do
begin
Group := GroupList.Items[j];
GroupLength := 0;
GroupCost := 0;
if Group.SCSComponents.Count > 0 then
begin
StrToShow := '';
for k := 0 to Group.SCSComponents.Count - 1 do
begin
GroupComponent := Group.SCSComponents.Items[k];
//*** Åñëè Ïåðâûé êîìïîíåíò òåêóùåãî òèïà
if (j = 0) and (k = 0) then
begin
GroupComponent.LoadComponentType;
MemTable_RTypeComponents.Append;
MemTable_RTypeComponents.FieldByName('Name_Type').AsString := GroupComponent.ComponentType.Name;
if GroupComponent.ComponentType.IsLine = biTrue then
MemTable_RTypeComponents.FieldByName('IsLine').AsString := 'Äà'
else
MemTable_RTypeComponents.FieldByName('IsLine').AsString := 'Íåò';
MemTable_RTypeComponents.Post;
IDMaster := MemTable_RTypeComponents.FieldByName('ID').AsInteger;
end;
GroupCost := GroupCost + GroupComponent.NormsResources.ResourcesCost;
if GroupComponent.IsLine = biTrue then
GroupLength := GroupLength + GroupComponent.Length;
TypeCost := TypeCost + GroupComponent.NormsResources.ResourcesCost;
end;
GroupComponent := Group.SCSComponents.Items[0];
MemTable_RTypeComponentsDetail.Append;
MemTable_RTypeComponentsDetail.FieldByName('ID').AsInteger := GroupComponent.ID;
MemTable_RTypeComponentsDetail.FieldByName('ID_MASTER').AsInteger := IDMaster;
MemTable_RTypeComponentsDetail.FieldByName('NAME').AsString := GroupComponent.Name;
case GroupComponent.IsLine of
biTrue:
begin
MemTable_RTypeComponentsDetail.FieldByName('Kolvo').AsFloat := Round3(GroupLength);
MemTable_RTypeComponentsDetail.FieldByName('Price').AsFloat := Round3(GroupComponent.NormsResources.ResourcesCostPerOneNorm);
end;
biFalse:
begin
MemTable_RTypeComponentsDetail.FieldByName('Kolvo').AsFloat := Round3(Group.SCSComponents.Count);
MemTable_RTypeComponentsDetail.FieldByName('Price').AsFloat := Round3(GroupComponent.NormsResources.ResourcesCost);
end;
end;
MemTable_RTypeComponentsDetail.FieldByName('Cost').AsFloat := Round3(GroupCost);
MemTable_RTypeComponentsDetail.Post;
TotalCost := TotalCost + GroupCost;
end;
if j = GroupList.Count - 1 then
begin
MemTable_RTypeComponents.Edit;
MemTable_RTypeComponents.FieldByName('Cost_Type').AsFloat := Round3(TypeCost);
MemTable_RTypeComponents.Post;
end;
end;
end;
//Label_TotalCost.Caption := FloatToStr(RoundX(TotalCost, 3)) +' '+GCurrency.Name_Brief;
finally
Screen.Cursor := crDefault;
end;
GFormMode := fmRTypeComponents;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowFolderTypeComponenetsReport: '+E.Message);
end;
finally
//*** Óäàëèòü Ãðóïïû
for i := 0 to TypeList.Count - 1 do
begin
GroupList := TypeList.items[i];
for j := 0 to GroupList.Count - 1 do
begin
Group := GroupList.Items[j];
Group.Free;
end;
//GroupList.Free;
end;
FreeList(TypeList);
//FreeList(GroupList);
FreeList(ListWithBusyCompons);
FreeList(FolderIDComponList);
end;
end;
// ##### Îò÷åò "Ñïåöèôèêàöèÿ" #####
procedure TF_ResourceReport.ShowFolderSpecificationReport(AFolder: TSCSCatalog; AParams, AReportItemParamValues: TReportItemParams; AResourceReportFormMode: TResourceReportFormMode;
ACanHaveActiveComponents, ACanHaveZeroPriceComponents, ACanHaveDismountAccount,
ACanRoundValue, ACanHaveSupplyValue: Boolean);
const
CmpDelta = 0.001;
var
FolderComponents: TSCSComponents;
GroupTypeComponents: TSCSComponents;
GroupTypeComponent: TSCSComponent;
GroupComponent: TSCSComponent;
ComponsFromResources: TSCSComponents;
CachedNBCompons: TSCSComponents;
NBComponent: TSCSComponent;
IDNBComponent: Integer;
SprComponent: TSCSComponent;
NormResourcesKinds: TNormResourcesKinds;
Resources: TSCSNormsResources;
ResourceRel: TSCSResourceRel;
CurrGroupComponent: TSCSComponent;
Component: TSCSComponent;
ComponTypeForGroup: TComponentType;
ComponSignType: Integer;
ComponentLengthKolvo: Double;
PartComponent: TSCSComponent;
PartLength: Double;
ExpenseForMetr: Double;
//ExpenseForSection: Double;
LengthTrace: Double;
LookedComponIDs: TIntList;
IDTypeSpecif: Integer;
ReservLength: Double;
CanAddComponToGroup: Boolean;
ProjectOwner: TSCSProject;
SprSuppliesKind: TNBSuppliesKind;
ComponIzm: String;
Kolvo, Price, Cost: Double;
TotalCost: Double;
i, j, k: Integer;
function GetComponTypeForGroup(AComponent: TSCSComponent): TComponentType;
var
PropGrpName: PProperty;
begin
ZeroMemory(@Result, SizeOf(TComponentType));
if AReportItemParamValues.GroupMode = gmComponType then
Result := AComponent.ComponentType
else if AReportItemParamValues.GroupMode = gmGroupName then
begin
PropGrpName := AComponent.GetPropertyBySysName(pnGroupName);
if PropGrpName = nil then
begin
Result.GUID := '';
Result.Name := cResourceReport_Msg44;
end
else
begin
Result.GUID := PropGrpName.Value;
Result.Name := PropGrpName.Value;
end;
Result.NamePlural := Result.Name;
end;
end;
begin
try
Component := nil;
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
if Not CheckCanShowReport(AFolder) then
Exit; ///// EXIT /////
FCatalog := AFolder;
ProjectOwner := AFolder.GetProject;
DefinePrecisions;
TotalCost := 0;
GroupTypeComponents := TSCSComponents.Create(true);
LookedComponIDs := TIntList.Create;
MemTable_RSpecifTypeCompon.Active := false;
MemTable_RSpecifTypeCompon.Active := true;
MemTable_RSpecification.Active := false;
MemTable_RSpecification.Active := true;
BeginProgress(pcPreparingReport);
try
//*** Ñãðóïïèðîâàòü êîìïîíåíòû
FolderComponents := TSCSComponents.Create(false);
FolderComponents.Assign(AFolder.ComponentReferences);
//Îïðåäåëÿåì ñãðóïïèðèðîâàííûå àêñåññóàðû è ðåñóðñû â ñïèñîê êîìïîíåíòîâ
ComponsFromResources := TSCSComponents.Create(true);
NormResourcesKinds := [nrAccessories];
if AReportItemParamValues.CanResources = biTrue then
NormResourcesKinds := NormResourcesKinds + [nrResources];
Resources := AFolder.GetAllNormsResources(NormResourcesKinds, false,
ACanHaveActiveComponents, ACanHaveDismountAccount, ACanHaveZeroPriceComponents);
CachedNBCompons := TSCSComponents.Create(true);
for i := 0 to Resources.Resources.Count - 1 do
begin
ResourceRel := Resources.Resources[i];
Component := TSCSComponent.Create(GForm);
if ResourceRel.GUIDNBComponent <> '' then
begin
// Åñëè ðåñóðñ èç êîìïîíåíòà, òî èùåì åãî â êåøå êîìïîíåíòîâ èç ÍÁ
NBComponent := GetComponByGUIDFromList(ResourceRel.GUIDNBComponent, CachedNBCompons);
if NBComponent = nil then
begin
// èùåì â ÍÁ
IDNBComponent := F_NormBase.DM.GetIntFromTableByGUID(tnComponent, fnID, ResourceRel.GUIDNBComponent, qmPhisical);
if IDNBComponent <> 0 then
begin
NBComponent := TSCSComponent.Create(F_NormBase);
NBComponent.LoadComponentByID(IDNBComponent, false);
NBComponent.LoadComponentType;
// Åñëè íà àêñåññóàð óñòàíîâëåíî ñâîéñòâî "ðàñõîä íà ìåòð", òî íå ó÷èòâàòü åãî, ò.ê.
// ýòî ñâîéñòâî óæ åñòü â àêñåññóàðå è îíî ó÷òåíî
NBComponent.SetPropertyValueAsFloat(pnExpenseForMetr, 0, false);
CachedNBCompons.Add(NBComponent);
end
else
begin
// èùåì â ñïðàâî÷íîì êîìïîíåíòå
//SprComponent := AFolder.ProjectOwner.GetSprComponentByGUID(ResourceRel.GUIDNBComponent);
SprComponent := ProjectOwner.GetSprComponentByGUID(ResourceRel.GUIDNBComponent);
if SprComponent <> nil then
NBComponent := SprComponent;
end;
end;
if NBComponent <> nil then
Component.AssignOnlyComponent(NBComponent);
end
else
begin
// Âíåñåì îòäåëüíûé òèï - ðåñóðñû
Component.GUIDComponentType := guidCompTypeResource;
Component.ComponentType.GUID := guidCompTypeResource;
Component.ComponentType.SysName := guidCompTypeResource;
Component.ComponentType.NamePlural := cBaseOptions_Msg4_1;
end;
Component.IsLine := biFalse;
Component.ComponentType.IsLine := biFalse;
Component.Name := ResourceRel.Name;
Component.Izm := ResourceRel.Izm;
Component.Price := ResourceRel.Price;
Component.Length := ResourceRel.Kolvo;
FolderComponents.Add(Component);
ComponsFromResources.Add(Component);
end;
FreeAndNil(CachedNBCompons);
FreeAndNil(Resources);
for i := 0 to FolderComponents.Count - 1 do
begin
Component := FolderComponents[i];
if Assigned(Component) then
begin
ComponIzm := Component.Izm;
if CheckPriceTransformToUOMByCompType(@Component.ComponentType) then
ComponIzm := GetNameUOM(umMetr, true);
//ComponSignType := Component.GetPropertyValueAsInteger(pnSignType);
if ((Component.ID = 0) or (LookedComponIDs.IndexOf(Component.ID) = -1)) and
CheckCanLookComponInReportRsrc(Component, ACanHaveActiveComponents, ACanHaveDismountAccount) then
//((ComponSignType = oitProjectible) or
// (ACanHaveActiveComponents or (ACanHaveDismountAccount and (Component.IsDismount = biTrue)) )) then
begin
if Component.IsLine = biTrue then
begin
Component.Length := GetComponPartLengthWithReserv(Component, ReservLength, true, true);
// 2007.03.15 Component.LoadWholeComponent(false);
//Component.RefreshWholeLengthIfNecessary;
// 2007.03.15 if AFolder.ItemType = itProject then
// 2007.03.15 begin
// 2007.03.15 Component.RefreshWholeLength;
// 2007.03.15 Component.Length := Component.GetPropertyValueAsFloat(pnLength)
// 2007.03.15 end
// 2007.03.15 else
// 2007.03.15 Component.Length := Component.GetWholeLength(false);
end;
GroupTypeComponent := nil;
GroupComponent := nil;
if (Component.Price > 0) or (ACanHaveZeroPriceComponents) then
begin
ComponTypeForGroup := GetComponTypeForGroup(Component);
//*** Íàéòè íðóïïó êîìïîíåíò ñ ñîîòâåòñòâóþùèì òèïîì êîìïîíåíòû
for j := 0 to GroupTypeComponents.Count - 1 do
if GroupTypeComponents[j].GUIDComponentType = ComponTypeForGroup.GUID then //28.02.2012 if GroupTypeComponents[j].GUIDComponentType = Component.ComponentType.GUID then
begin
GroupTypeComponent := GroupTypeComponents[j];
Break; //// BREAK ////
end;
if GroupTypeComponent = nil then
begin
GroupTypeComponent := TSCSComponent.Create(GForm);
GroupTypeComponent.GUIDComponentType := ComponTypeForGroup.GUID; //28.02.2012 Component.ComponentType.GUID;
GroupTypeComponent.ID_ComponentType := ComponTypeForGroup.ID; //28.02.2012 Component.ComponentType.ID;
GroupTypeComponent.Name := ComponTypeForGroup.NamePlural; //28.02.2012 Component.ComponentType.NamePlural;
GroupTypeComponents.Add(GroupTypeComponent);
end;
if GroupTypeComponent <> nil then
begin
//*** Íàéòè â ãðóïïå êîìïîíåíò êîòîðûé èìååò ñõîäñòâåííûå ïàðàìåòðû ñ Component
for j := 0 to GroupTypeComponent.ChildComplects.Count - 1 do
begin
CurrGroupComponent := GroupTypeComponent.ChildComplects[j];
CanAddComponToGroup := false;
if (CurrGroupComponent.ArticulProducer = Component.ArticulProducer) and
(CurrGroupComponent.ArticulDistributor = Component.ArticulDistributor) and
//(((Component.IsLine = biTrue) and (Abs(MemTable_RSpecification.FieldByName('PRICE').AsFloat - Component.NormsResources.ResourcesCostPerOneNorm) < CmpDelta)) or
// ((Component.IsLine = biFalse) and (Abs(MemTable_RSpecification.FieldByName('PRICE').AsFloat - Component.NormsResources.ResourcesCost) < CmpDelta))) and
(Abs(CurrGroupComponent.Price - Component.Price) < CmpDelta) and
(CurrGroupComponent.Izm = ComponIzm) and
(CurrGroupComponent.GUIDProducer = Component.GUIDProducer) and
(CurrGroupComponent.Name = Component.Name) and
(CurrGroupComponent.NameShort = Component.NameShort) and
((AResourceReportFormMode <> fmRGOSTSpecification) or (CurrGroupComponent.Notice = Component.Notice)) then
begin
CanAddComponToGroup := true;
//***ãðóïïèðîâêà ïî âèäàì ïîñòàâêè
if ACanHaveSupplyValue then
if (CurrGroupComponent.GUIDSuppliesKind <> '') and
(CurrGroupComponent.GUIDSuppliesKind <> Component.GUIDSuppliesKind) then
if ProjectOwner.Spravochnik.GetSuppliesKindByGUID(Component.GUIDSuppliesKind) <> nil then
CanAddComponToGroup := false;
if CanAddComponToGroup then
begin
GroupComponent := CurrGroupComponent;
Break; //// BREAK ////
end;
end;
end;
if GroupComponent = nil then
begin
GroupComponent := TSCSComponent.Create(GForm);
GroupComponent.AssignOnlyComponent(Component);
GroupComponent.Izm := ComponIzm;
GroupComponent.Length := 0;
{if GroupComponent.ArticulProducer = '' then
if GroupComponent.ArticulDistributor <> '' then
GroupComponent.ArticulProducer := GroupComponent.ArticulDistributor;
GroupComponent.Length := 0;}
//*** Íà òîò ñëó÷àé, åñëè ìåðòâàÿ ññûëêà íà âèä ïîñòàâêè
if GroupComponent.GUIDSuppliesKind <> '' then
if ProjectOwner.Spravochnik.GetSuppliesKindByGUID(GroupComponent.GUIDSuppliesKind) = nil then
GroupComponent.GUIDSuppliesKind := '';
GroupTypeComponent.ChildComplects.Add(GroupComponent);
end;
if GroupComponent <> nil then
begin
//if (GroupComponent.Notice = '') and (Component.Notice <> '') then
// GroupComponent.Notice := Component.Notice;
ComponentLengthKolvo := 0;
case GroupComponent.IsLine of
biFalse:
begin
ComponentLengthKolvo := 1;
// Åñëè ðåñóðñ, òî áåðåì êîëè÷åñòâî ýòîãî ðåñóðñà èç ïîëÿ Length
if ComponsFromResources.IndexOf(Component) <> -1 then
ComponentLengthKolvo := Component.Length;
if ((Component.ComponentType.SysName = ctsnCableChannelAccessory) or
(Component.ComponentType.SysName = ctsnAccessory)) then
begin
ExpenseForMetr := Component.GetPropertyValueAsFloat(pnExpenseForMetr);
if ExpenseForMetr > 0 then
begin
ComponentLengthKolvo := Round(Component.Length * ExpenseForMetr);
end
end;
end;
biTrue:
begin
// Ðàñõîä íà åä.äëèíû
ExpenseForMetr := Component.GetPropertyValueAsFloat(pnExpenseForMetr);
if ExpenseForMetr > 0 then
begin
//ComponentLengthKolvo := Round(Component.Length) * ExpenseForMetr;
ComponentLengthKolvo := Round(Component.Length * ExpenseForMetr);
// 2007.03.15 LengthTrace := 0;
// 2007.03.15 for k := 0 to Component.WholeComponent.Count - 1 do
// 2007.03.15 begin
// 2007.03.15 PartComponent := FCatalog.GetComponentFromReferences(Component.WholeComponent[k]);
// 2007.03.15 if PartComponent <> nil then
// 2007.03.15 begin
// 2007.03.15 PartLength := PartComponent.GetPartLength;
// 2007.03.15 LengthTrace := LengthTrace + PartLength;
// 2007.03.15 end;
// 2007.03.15 end;
// 2007.03.15 ComponentLengthKolvo := Round(LengthTrace) * ExpenseForMetr;
end
else
ComponentLengthKolvo := RoundCP(Component.Length);
// Ðàñõîä íà îòðåçîê
//ExpenseForSection := Component.GetPropertyValueAsFloat(pnExpenseForSection);
//if ExpenseForSection > 0 then
// ComponentLengthKolvo := ComponentLengthKolvo + ExpenseForSection;
end;
end;
//*** Åñëè ó÷èòûâàòü äåìîíòàæ, è êîìïîíåíò äåìîíòèðîâàí,
// òî îòíèìàòü îò îáùåãî êîëè÷åñòâà, êîë-âî ýòîé êîìïîíåíòû
if ACanHaveDismountAccount and (Component.IsDismount = biTrue) then
if Component.IsUseDismounted = biTrue then
ComponentLengthKolvo := ComponentLengthKolvo * -1
else
ComponentLengthKolvo := 0;
GroupComponent.Length := GroupComponent.Length + ComponentLengthKolvo;
end;
end;
end;
//25.02.2009 LookedComponIDs.Add(Component.ID);
// 2007.03.15
//if Component.IsLine = biTrue then
//begin
// for j := 0 to Component.WholeComponent.Count - 1 do
// if Component.WholeComponent[j] <> Component.ID then
// LookedComponIDs.Add(Component.WholeComponent[j]);
//end;
end;
end;
end;
FreeAndNil(ComponsFromResources);
FreeAndNil(FolderComponents);
//*** Çàêèíóòü ãðóïïû â MemTable
for i := 0 to GroupTypeComponents.Count - 1 do
begin
GroupTypeComponent := GroupTypeComponents[i];
MemTable_RSpecifTypeCompon.Append;
//*** ID - AutoInc
MemTable_RSpecifTypeCompon.FieldByName(fnName).AsString := GroupTypeComponent.Name;
MemTable_RSpecifTypeCompon.FieldByName(fnIDComponentType).AsInteger := GroupTypeComponent.ID_ComponentType;
MemTable_RSpecifTypeCompon.Post;
IDTypeSpecif := MemTable_RSpecifTypeCompon.FieldByName(fnID).AsInteger;
for j := 0 to GroupTypeComponent.ChildComplects.Count - 1 do
begin
GroupComponent := GroupTypeComponent.ChildComplects[j];
if GroupComponent.Length > 0 then
begin
//*** Îêðóãëèòü êîëè÷åñòâî è öåíó ãðóïïîâîé êîìïîíåíòû
//GroupComponent.Length := RoundCP(GroupComponent.Length);
//GroupComponent.Price := RoundCP(GroupComponent.Price);
//*** Ó÷èòûâàòü âèä ïîñòàâêè
SprSuppliesKind := nil;
if ACanHaveSupplyValue and (GroupComponent.GUIDSuppliesKind <> '') then
SprSuppliesKind := ProjectOwner.Spravochnik.GetSuppliesKindByGUID(GroupComponent.GUIDSuppliesKind);
// Ïîäîãíàòü ïîä âèä ïîñòàâêè
if SprSuppliesKind <> nil then
begin
if CheckIsTradUOM(TF_Main(GForm).FUOM) then
begin
GroupComponent.Izm := SprSuppliesKind.Data.NameTradUOM;
if CheckPriceTransformToUOMByCompType(@GroupComponent.ComponentType) then
begin
// Äëÿ êàáåëåé è êàíàëîâ â òðàäèöèîííîé ñèñòåìû ÑØÀ íóæíî þçàòü ÔÓÒÛ
GroupComponent.Length := FloatInUOM(GroupComponent.Length, umMetr, umFoot) / SprSuppliesKind.Data.UnitKolvoTradUOM;
GroupComponent.Price := FloatInUOM(GroupComponent.Price, umFoot, umMetr) * SprSuppliesKind.Data.UnitKolvoTradUOM;
end
else
begin
GroupComponent.Length := GroupComponent.Length / SprSuppliesKind.Data.UnitKolvoTradUOM;
GroupComponent.Price := GroupComponent.Price * SprSuppliesKind.Data.UnitKolvoTradUOM;
end;
end
else
begin
GroupComponent.Izm := SprSuppliesKind.Data.Name;
GroupComponent.Length := GroupComponent.Length / SprSuppliesKind.Data.UnitKolvo;
GroupComponent.Price := GroupComponent.Price * SprSuppliesKind.Data.UnitKolvo;
end;
end
else
begin
if CheckPriceTransformToUOMByCompType(@GroupComponent.ComponentType) then
begin
GroupComponent.Izm := GetNameUOM(TF_Main(GForm).FUOM, true);
if TF_Main(GForm).FUOM <> umMetr then
begin
GroupComponent.Length := FloatInUOM(GroupComponent.Length, umMetr, TF_Main(GForm).FUOM);
GroupComponent.Price := FloatInUOM(GroupComponent.Price, TF_Main(GForm).FUOM, umMetr);
end;
end;
end;
//*** Ó÷èòûâàòü ôëàã îêðóãëåíèÿ
if ACanRoundValue then
GroupComponent.Length := RoundUp(GroupComponent.Length);
MemTable_RSpecification.Append;
MemTable_RSpecification.FieldByName(fnID).AsInteger := GroupComponent.ID;
MemTable_RSpecification.FieldByName(fnIDMaster).AsInteger := IDTypeSpecif;
MemTable_RSpecification.FieldByName(fnName).AsString := GroupComponent.Name;
MemTable_RSpecification.FieldByName(fnNameShort).AsString := GroupComponent.NameShort;
MemTable_RSpecification.FieldByName(fnArticulProducer).AsString := GroupComponent.ArticulProducer;
MemTable_RSpecification.FieldByName(fnArticulDistributor).AsString := GroupComponent.ArticulDistributor;
MemTable_RSpecification.FieldByName(fnNotice).AsString := GroupComponent.Notice;
if GroupComponent.ArticulProducer = '' then
if GroupComponent.ArticulDistributor <> '' then
GroupComponent.ArticulProducer := GroupComponent.ArticulDistributor;
MemTable_RSpecification.FieldByName(fnIDProducer).AsInteger := GroupComponent.ID_Producer;
MemTable_RSpecification.FieldByName(fnProducerName).AsString := GroupComponent.GetProducerName;
MemTable_RSpecification.FieldByName(fnIzm).AsString := GroupComponent.Izm;
{//27.03.2012
MemTable_RSpecification.FieldByName(fnKolvo).AsFloat := RoundCP(GroupComponent.Length);
MemTable_RSpecification.FieldByName(fnPrice).AsFloat := RoundCP(GroupComponent.Price);
//MemTable_RSpecification.FieldByName(fnCost).AsFloat := Round3(Round3(GroupComponent.PRICE) * Round3(GroupComponent.Length));
MemTable_RSpecification.FieldByName(fnCost).AsFloat := RoundCP(GroupComponent.Price * GroupComponent.Length);
MemTable_RSpecification.Post;
TotalCost := TotalCost + RoundCP(GroupComponent.Price * GroupComponent.Length);}
Kolvo := RoundX(GroupComponent.Length, FKolvoPrecision);
Price := RoundX(GroupComponent.Price, FPricePrecision);
Cost := RoundX(Kolvo * Price, Max(FKolvoPrecision, FPricePrecision) );
MemTable_RSpecification.FieldByName(fnKolvo).AsFloat := Kolvo;
MemTable_RSpecification.FieldByName(fnPrice).AsFloat := Price;
MemTable_RSpecification.FieldByName(fnCost).AsFloat := Cost;
MemTable_RSpecification.Post;
TotalCost := TotalCost + Cost;
end;
end;
end;
MemTable_RSpecifTypeCompon.SortOn(fnName, []);
SortMemTableByParams(MemTable_RSpecification, AParams, nil);
finally
EndProgress;
LookedComponIDs.Free;
GroupTypeComponents.Free;
end;
GFormMode := AResourceReportFormMode; //fmRSpecification;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowFolderSpecificationReport: '+E.Message);
end;
end;
(*
procedure TF_ResourceReport.ShowFolderSpecificationReport(AFolder: TSCSCatalog; ACanHaveActiveComponents: Boolean);
const CmpDelta = 0.001;
var
ListWithLookedCompons: TList;
ptrID: ^Integer;
CurrIDCompon: Integer;
Component: TSCSComponent;
ComponSignType: Integer;
TypeSpecifList: TList;
i, j: Integer;
IDTypeSpecif: integer;
IDObject: Integer;
IDSpecification: Integer;
TypeKolvo: Double;
TypeCost: Double;
CurrKolvo: Double;
//CurrCost: Double;
begin
try
Component := nil;
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
if Not CheckCanShowReport(AFolder) then
Exit; ///// EXIT /////
FCatalog := AFolder;
ListWithLookedCompons := TList.Create;
//Component := TSCSComponent.Create(GForm);
MemTable_RSpecifTypeCompon.Active := false;
MemTable_RSpecifTypeCompon.Active := true;
MemTable_RSpecification.Active := false;
MemTable_RSpecification.Active := true;
BeginProgress(pcPreparingReport);
try
for i := 0 to AFolder.ComponentReferences.Count - 1 do
begin
Component := AFolder.ComponentReferences[i];
if Assigned(Component) then
begin
ComponSignType := Component.GetPropertyValueAsInteger(pnSignType);
if CheckNoIDinList(Component.ID, ListWithLookedCompons) and
((ComponSignType = oitProjectible) or (ACanHaveActiveComponents)) then
begin
if Component.IsLine = biTrue then
begin
Component.RefreshWholeLengthIfNecessary;
//Component.LoadWholeComponent(false);
//Component.LoadWholeLength;
end;
//Component.NormsResources.CalcResourcesCost(true, true);
//if Component.NormsResources.ResourcesCost > 0 then
if Component.Price > 0 then
begin
IDTypeSpecif := -1;
IDObject := -1;
IDSpecification := -1;
CurrKolvo := 0;
//CurrCost := 0;
//*** Íàéòè òèï ñïåöèôèêàöèè
MemTable_RSpecifTypeCompon.First;
while Not MemTable_RSpecifTypeCompon.Eof do
begin
if MemTable_RSpecifTypeCompon.FieldByName('id_component_type').AsInteger = Component.ID_ComponentType then
begin
IDTypeSpecif := MemTable_RSpecifTypeCompon.FieldByName('id').AsInteger;
Break; ///// BREAK /////
end;
MemTable_RSpecifTypeCompon.Next;
end;
//*** Åñëè òèï íå íàéäåí, òî ñîçäàòü åãî
if IDTypeSpecif = -1 then
begin
Component.RefreshComponentType;
MemTable_RSpecifTypeCompon.Append;
//*** ID - AutoInc
MemTable_RSpecifTypeCompon.FieldByName('name').AsString := Component.ComponentType.NamePlural;
MemTable_RSpecifTypeCompon.FieldByName('id_component_type').AsInteger := Component.ID_ComponentType;
MemTable_RSpecifTypeCompon.Post;
IDTypeSpecif := MemTable_RSpecifTypeCompon.FieldByName('ID').AsInteger;
end;
//*** Íàéòè ñïåöèôèêàöèþ äëÿ êîìïîíåíòû ïî ñîâïàäàþùèì àðòèê. íîìåðàì è öåíàì
while Not MemTable_RSpecification.Eof do
begin
if (MemTable_RSpecification.FieldByName('ARTICUL_PRODUCER').AsString = Component.ArticulProducer) and
(MemTable_RSpecification.FieldByName('ARTICUL_DISTRIBUTOR').AsString = Component.ArticulDistributor) and
//(((Component.IsLine = biTrue) and (Abs(MemTable_RSpecification.FieldByName('PRICE').AsFloat - Component.NormsResources.ResourcesCostPerOneNorm) < CmpDelta)) or
// ((Component.IsLine = biFalse) and (Abs(MemTable_RSpecification.FieldByName('PRICE').AsFloat - Component.NormsResources.ResourcesCost) < CmpDelta))) and
(Abs(MemTable_RSpecification.FieldByName(fnPrice).AsFloat - Component.Price) < CmpDelta) and
(MemTable_RSpecification.FieldByName('IZM').AsString = Component.Izm) and
(MemTable_RSpecification.FieldByName('ID_PRODUCER').AsInteger = Component.ID_Producer) and
(MemTable_RSpecification.FieldByName('NAME').AsString = Component.Name) and
(MemTable_RSpecification.FieldByName('NAME_SHORT').AsString = Component.NameShort) then
begin
IDSpecification := MemTable_RSpecification.FieldByName('ID').AsInteger;
TypeKolvo := MemTable_RSpecification.FieldByName('KOLVO').AsFloat;
TypeCost := MemTable_RSpecification.FieldByName('COST').AsFloat;
CurrKolvo := 0;
MemTable_RSpecification.Edit;
case Component.IsLine of
biTrue:
CurrKolvo := Component.Length;
biFalse:
CurrKolvo := CurrKolvo + 1;
end;
TypeKolvo := TypeKolvo + CurrKolvo;
MemTable_RSpecification.FieldByName('Kolvo').AsFloat := TypeKolvo;
MemTable_RSpecification.FieldByName('COST').AsFloat := TypeCost + Round3(CurrKolvo * MemTable_RSpecification.FieldByName(fnPrice).AsFloat);
MemTable_RSpecification.Post;
end;
MemTable_RSpecification.Next;
end;
//*** Åñëè íå íàéäåíà ñïåöèôèêàöèÿ, òî ñîçäàåòñÿ íîâàÿ
if IDSpecification = -1 then
begin
MemTable_RSpecification.Append;
MemTable_RSpecification.FieldByName('ID').AsInteger := Component.ID;
MemTable_RSpecification.FieldByName('ID_MASTER').AsInteger := IDTypeSpecif;
MemTable_RSpecification.FieldByName('NAME').AsString := Component.Name;
MemTable_RSpecification.FieldByName('NAME_SHORT').AsString := Component.NameShort;
MemTable_RSpecification.FieldByName('ARTICUL_PRODUCER').AsString := Component.ArticulProducer;
MemTable_RSpecification.FieldByName('ARTICUL_DISTRIBUTOR').AsString := Component.ArticulDistributor;
MemTable_RSpecification.FieldByName('ID_PRODUCER').AsInteger := Component.ID_Producer;
MemTable_RSpecification.FieldByName('PRODUCER').AsString := Component.GetProducerName;
MemTable_RSpecification.FieldByName('IZM').AsString := Component.Izm;
CurrKolvo := 1;
case Component.IsLine of
biTrue:
CurrKolvo := Component.Length;
biFalse:
CurrKolvo := 1;
end;
MemTable_RSpecification.FieldByName('Kolvo').AsFloat := CurrKolvo;
MemTable_RSpecification.FieldByName('PRICE').AsFloat := Round3(Component.PRICE);
MemTable_RSpecification.FieldByName('COST').AsFloat := Round3(Round3(Component.PRICE) * CurrKolvo);
MemTable_RSpecification.Post;
IDSpecification := MemTable_RSpecification.FieldByName('ID').AsInteger;
end;
{
//*** Íàéòè ñïåöèôèêàöèþ äëÿ êîìïîíåíòû ïî ñîâïàäàþùèì àðòèê. íîìåðàì è öåíàì
while Not MemTable_RSpecification.Eof do
begin
if (MemTable_RSpecification.FieldByName('ARTICUL_PRODUCER').AsString = Component.ArticulProducer) and
(MemTable_RSpecification.FieldByName('ARTICUL_DISTRIBUTOR').AsString = Component.ArticulDistributor) and
(((Component.IsLine = biTrue) and (Abs(MemTable_RSpecification.FieldByName('PRICE').AsFloat - Component.NormsResources.ResourcesCostPerOneNorm) < CmpDelta)) or
((Component.IsLine = biFalse) and (Abs(MemTable_RSpecification.FieldByName('PRICE').AsFloat - Component.NormsResources.ResourcesCost) < CmpDelta))) and
(MemTable_RSpecification.FieldByName('IZM').AsString = Component.Izm) and
(MemTable_RSpecification.FieldByName('ID_PRODUCER').AsInteger = Component.ID_Producer) and
(MemTable_RSpecification.FieldByName('NAME').AsString = Component.Name) and
(MemTable_RSpecification.FieldByName('NAME_SHORT').AsString = Component.NameShort) then
begin
IDSpecification := MemTable_RSpecification.FieldByName('ID').AsInteger;
CurrKolvo := MemTable_RSpecification.FieldByName('KOLVO').AsFloat;
CurrCost := MemTable_RSpecification.FieldByName('COST').AsFloat;
MemTable_RSpecification.Edit;
case Component.IsLine of
biTrue:
MemTable_RSpecification.FieldByName('Kolvo').AsFloat := RoundX(CurrKolvo + Component.Length, 2);
biFalse:
MemTable_RSpecification.FieldByName('Kolvo').AsFloat := RoundX(CurrKolvo + 1, 2);
end;
MemTable_RSpecification.FieldByName('COST').AsFloat := RoundX(CurrCost + Component.NormsResources.ResourcesCost, 2);
MemTable_RSpecification.Post;
end;
MemTable_RSpecification.Next;
end;
//*** Åñëè íå íàéäåíà ñïåöèôèêàöèÿ, òî ñîçäàåòñÿ íîâàÿ
if IDSpecification = -1 then
begin
MemTable_RSpecification.Append;
MemTable_RSpecification.FieldByName('ID').AsInteger := Component.ID;
MemTable_RSpecification.FieldByName('ID_MASTER').AsInteger := IDTypeSpecif;
MemTable_RSpecification.FieldByName('NAME').AsString := Component.Name;
MemTable_RSpecification.FieldByName('NAME_SHORT').AsString := Component.NameShort;
MemTable_RSpecification.FieldByName('ARTICUL_PRODUCER').AsString := Component.ArticulProducer;
MemTable_RSpecification.FieldByName('ARTICUL_DISTRIBUTOR').AsString := Component.ArticulDistributor;
MemTable_RSpecification.FieldByName('ID_PRODUCER').AsInteger := Component.ID_Producer;
MemTable_RSpecification.FieldByName('PRODUCER').AsString := Component.GetProducerName;
MemTable_RSpecification.FieldByName('IZM').AsString := Component.Izm;
case Component.IsLine of
biTrue:
begin
MemTable_RSpecification.FieldByName('Kolvo').AsFloat := RoundX(Component.Length, 2);
MemTable_RSpecification.FieldByName('PRICE').AsFloat := RoundX(Component.NormsResources.ResourcesCostPerOneNorm, 2);
end;
biFalse:
begin
MemTable_RSpecification.FieldByName('Kolvo').AsFloat := 1;
MemTable_RSpecification.FieldByName('PRICE').AsFloat := RoundX(Component.NormsResources.ResourcesCost, 2);
end;
end;
MemTable_RSpecification.FieldByName('COST').AsFloat := RoundX(Component.NormsResources.ResourcesCost, 2);
MemTable_RSpecification.Post;
IDSpecification := MemTable_RSpecification.FieldByName('ID').AsInteger;
end; }
case Component.IsLine of
biTrue:
for j := 0 to Component.WholeComponent.Count - 1 do
begin
New(ptrID);
ptrID^ := Component.WholeComponent[j];
ListWithLookedCompons.Add(ptrID);
end;
biFalse:
begin
New(ptrID);
ptrID^ := Component.ID;
ListWithLookedCompons.Add(ptrID);
end;
end;
end;
end;
end;
end;
MemTable_RSpecifTypeCompon.SortOn(fnName, []);
finally
EndProgress;
FreeList(ListWithLookedCompons);
end;
GFormMode := fmRSpecification;
Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLog(': '+E.Message);
end;
end; *)
(*
// ##### Îò÷åò "Ñïåöèôèêàöèÿ" #####
procedure TF_ResourceReport.ShowFolderSpecificationReport(AFolder: TSCSCatalog);
const CmpDelta = 0.0001;
var FolderIDComponList: TList;
ListWithLookedCompons: TList;
ptrID: ^Integer;
CurrIDCompon: Integer;
Component: TSCSComponent;
TypeSpecifList: TList;
i, j: Integer;
IDTypeSpecif: integer;
IDObject: Integer;
IDSpecification: Integer;
CurrKolvo: Double;
CurrCost: Double;
begin
try
try
Component := nil;
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
if Not CheckCanShowReport(AFolder) then
Exit; ///// EXIT /////
FolderIDComponList := Tlist.Create;
ListWithLookedCompons := TList.Create;
Component := TSCSComponent.Create(GForm);
//*** Íàéòè âñå êìîïîíåíòû ïàïêè
FolderIDComponList := GetFolderComponList(GForm, AFolder, [itSCSLine, itSCSConnector]);
if FolderIDComponList = nil then
Exit; //// EXIT /////
MemTable_RSpecifTypeCompon.Active := false;
MemTable_RSpecifTypeCompon.Active := true;
MemTable_RSpecification.Active := false;
MemTable_RSpecification.Active := true;
Screen.Cursor := crHourGlass;
try
for i := 0 to FolderIDComponList.Count - 1 do
begin
CurrIDCompon := Integer(FolderIDComponList.Items[i]^);
if CheckNoIDinList(CurrIDCompon, ListWithLookedCompons) then
begin
Component.LoadComponentByID(CurrIDCompon, false);
Component.LoadOwnerCatalog(false);
if Component.IsLine = biTrue then
begin
Component.LoadWholeComponent(false);
Component.LoadWholeLength(true);
end;
Component.NormsResources.CalcResourcesCost(true, true);
if Component.NormsResources.ResourcesCost > 0 then
begin
IDTypeSpecif := -1;
IDObject := -1;
IDSpecification := -1;
CurrKolvo := 0;
CurrCost := 0;
//*** Íàéòè òèï ñïåöèôèêàöèè
MemTable_RSpecifTypeCompon.First;
while Not MemTable_RSpecifTypeCompon.Eof do
begin
if MemTable_RSpecifTypeCompon.FieldByName('id_component_type').AsInteger = Component.ID_ComponentType then
begin
IDTypeSpecif := MemTable_RSpecifTypeCompon.FieldByName('id').AsInteger;
Break; ///// BREAK /////
end;
MemTable_RSpecifTypeCompon.Next;
end;
//*** Åñëè òèï íå íàéäåí, òî ñîçäàòü åãî
if IDTypeSpecif = -1 then
begin
Component.LoadComponentType;
MemTable_RSpecifTypeCompon.Append;
//*** ID - AutoInc
MemTable_RSpecifTypeCompon.FieldByName('name').AsString := Component.ComponentType.NAME;
MemTable_RSpecifTypeCompon.FieldByName('id_component_type').AsInteger := Component.ID_ComponentType;
MemTable_RSpecifTypeCompon.Post;
IDTypeSpecif := MemTable_RSpecifTypeCompon.FieldByName('ID').AsInteger;
end;
{
//*** Íàéòè îáúåêò, äëÿ Êîìïîíåíòà
while Not MemTable_RObject.Eof do
begin
if ((Component.ID_ComponentType = ctWorkPlace) and
(MemTable_RObject.FieldByName('ID_CATALOG').AsInteger = TSCSCatalog(Component.OwnerCatalog).ID)) then
begin
IDObject := MemTable_RObject.FieldByName('ID').AsInteger;
Break; ///// BREAK //////
end;
if Component.ID_ComponentType <> ctWorkPlace then
begin
IDObject := MemTable_RObject.FieldByName('ID').AsInteger;
if IDObject <> TSCSCatalog(Component.OwnerCatalog).ID then
begin
MemTable_RObject.Edit;
MemTable_RObject.FieldByName('NAME').AsString := '';
MemTable_RObject.Post;
end;
Break; ///// BREAK //////
end;
MemTable_RObject.Next;
end;
//*** Åñëè îáúåêò äëÿ ýòîãî êîìïîíåíòà íåáûë íàéäåí
if IDObject = -1 then
begin
MemTable_RObject.Append;
MemTable_RObject.FieldByName('ID_MASTER').AsInteger := IDTypeSpecif;
MemTable_RObject.FieldByName('ID_CATALOG').AsInteger := TSCSCatalog(Component.OwnerCatalog).ID;
MemTable_RObject.FieldByName('NAME').AsString := GetNameAndIndexByTSCSCatalog(Component.OwnerCatalog);
//if Component.ID_ComponentType = ctWorkPlace then
// MemTable_RObject.FieldByName('NAME').AsString := GetNameAndIndexByTSCSCatalog(Component.OwnerCatalog) //TSCSCatalog(Component.OwnerCatalog).Name
//else
// MemTable_RObject.FieldByName('NAME').AsString := '';
MemTable_RObject.Post;
IDObject := MemTable_RObject.FieldByName('ID').AsInteger;
end; }
//*** Íàéòè ñïåöèôèêàöèþ äëÿ êîìïîíåíòû ïî ñîâïàäàþùèì àðòèê. íîìåðàì è öåíàì
while Not MemTable_RSpecification.Eof do
begin
if (MemTable_RSpecification.FieldByName('ARTICUL_PRODUCER').AsString = Component.ArticulProducer) and
(MemTable_RSpecification.FieldByName('ARTICUL_DISTRIBUTOR').AsString = Component.ArticulDistributor) and
(((Component.IsLine = biTrue) and (Abs(MemTable_RSpecification.FieldByName('PRICE').AsFloat - Component.NormsResources.ResourcesCostPerOneNorm) < CmpDelta)) or
((Component.IsLine = biFalse) and (Abs(MemTable_RSpecification.FieldByName('PRICE').AsFloat - Component.NormsResources.ResourcesCost) < CmpDelta))) and
(MemTable_RSpecification.FieldByName('IZM').AsString = Component.Izm) and
(MemTable_RSpecification.FieldByName('ID_PRODUCER').AsInteger = Component.ID_Producer) and
(MemTable_RSpecification.FieldByName('NAME').AsString = Component.Name) and
(MemTable_RSpecification.FieldByName('NAME_SHORT').AsString = Component.NameShort) then
begin
IDSpecification := MemTable_RSpecification.FieldByName('ID').AsInteger;
CurrKolvo := MemTable_RSpecification.FieldByName('KOLVO').AsFloat;
CurrCost := MemTable_RSpecification.FieldByName('COST').AsFloat;
MemTable_RSpecification.Edit;
case Component.IsLine of
biTrue:
MemTable_RSpecification.FieldByName('Kolvo').AsFloat := RoundX(CurrKolvo + Component.Length, 2);
biFalse:
MemTable_RSpecification.FieldByName('Kolvo').AsFloat := RoundX(CurrKolvo + 1, 2);
end;
MemTable_RSpecification.FieldByName('COST').AsFloat := RoundX(CurrCost + Component.NormsResources.ResourcesCost, 2);
MemTable_RSpecification.Post;
end;
MemTable_RSpecification.Next;
end;
//*** Åñëè íå íàéäåíà ñïåöèôèêàöèÿ, òî ñîçäàåòñÿ íîâàÿ
if IDSpecification = -1 then
begin
MemTable_RSpecification.Append;
MemTable_RSpecification.FieldByName('ID').AsInteger := Component.ID;
MemTable_RSpecification.FieldByName('ID_MASTER').AsInteger := IDTypeSpecif;
MemTable_RSpecification.FieldByName('NAME').AsString := Component.Name;
MemTable_RSpecification.FieldByName('NAME_SHORT').AsString := Component.NameShort;
MemTable_RSpecification.FieldByName('ARTICUL_PRODUCER').AsString := Component.ArticulProducer;
MemTable_RSpecification.FieldByName('ARTICUL_DISTRIBUTOR').AsString := Component.ArticulDistributor;
MemTable_RSpecification.FieldByName('ID_PRODUCER').AsInteger := Component.ID_Producer;
MemTable_RSpecification.FieldByName('PRODUCER').AsString := Component.GetProducerName;
MemTable_RSpecification.FieldByName('IZM').AsString := Component.Izm;
case Component.IsLine of
biTrue:
begin
MemTable_RSpecification.FieldByName('Kolvo').AsFloat := RoundX(Component.Length, 2);
MemTable_RSpecification.FieldByName('PRICE').AsFloat := RoundX(Component.NormsResources.ResourcesCostPerOneNorm, 2);
end;
biFalse:
begin
MemTable_RSpecification.FieldByName('Kolvo').AsFloat := 1;
MemTable_RSpecification.FieldByName('PRICE').AsFloat := RoundX(Component.NormsResources.ResourcesCost, 2);
end;
end;
MemTable_RSpecification.FieldByName('COST').AsFloat := RoundX(Component.NormsResources.ResourcesCost, 2);
MemTable_RSpecification.Post;
IDSpecification := MemTable_RSpecification.FieldByName('ID').AsInteger;
end;
case Component.IsLine of
biTrue:
for j := 0 to Component.WholeComponent.Count - 1 do
begin
New(ptrID);
ptrID^ := Integer(Component.WholeComponent[j]^);
ListWithLookedCompons.Add(ptrID);
end;
biFalse:
begin
New(ptrID);
ptrID^ := Component.ID;
ListWithLookedCompons.Add(ptrID);
end;
end;
end;
end;
end;
finally
Screen.Cursor := crHourGlass;
end;
GFormMode := fmRSpecification;
Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLog(': '+E.Message);
end;
finally
FreeList(ListWithLookedCompons);
FreeList(FolderIDComponList);
if Component <> nil then
Component.Free;
end;
end;
*)
procedure TF_ResourceReport.ShowFolderExplanatoryReport(AFolder: TSCSCatalog; AParams: TReportItemParams);
var
CurrencyM: TCurrency;
CurrencyS: TCurrency;
ProjectID: Integer;
i: Integer;
ProjectOwner: TSCSProject;
SprCurrency: TNBCurrency;
SCSLists: TSCSCatalogs;
SCSList: TSCSCatalog;
SCSObject: TSCSCatalog;
// Added by Tolik
// ñòîèìîñòü ìàòåðèàëîâ, ðåñóðñîâ, ðàáîò è îáùàÿ ñòîèìîñòü - èç íàçâàíèÿ ïîíÿòíî...
TotalCost,MaterialsCost,WorksCost,ResourcesCost : double;
Main_TotalCost,Main_MaterialsCost,Main_WorksCost,Main_ResourcesCost : double;
NormResources: TSCSNormsResources;
ResourceRel: TSCSResourceRel;
Price, Kolvo : double;
ResourceCompon: TSCSComponent;
SprSuppliesKind: TNBSuppliesKind;
GroupedNorms: TSCSNormsResources;
GroupNorm: TSCSNorm;
Component : TSCSCatalog;
{ ProjectOwner: TSCSProject;
OldTick, CurrTick: Cardinal;
TotalCost: Double;
InterfaceNormList: TList;
CurrInterfaceNormList: TList;
TempList: TList;
SCSComponent: TSCSComponent;
SCSCatalog: TSCSCatalog;
TraceLength: Double;
Interfac: TSCSInterface;
ptrJoinedInterf: TSCSInterface;
ptrComplectInterf: TSCSInterface;
ptrResultInterface: TSCSInterface;
//IOfIRel: TSCSIOfIRel;
ptrInterfaceNormInfo: PInterfaceNormInfo;
ptrInterfaceNormInfoI: PInterfaceNormInfo;
ptrInterfaceNormInfoJ: PInterfaceNormInfo;
}
{
procedure AddListToExplanatoryReport(AList: TSCSList);
begin
mtExplanatoryList.Append;
mtExplanatoryList.FieldByName(fnID).AsInteger := AList.ID;
mtExplanatoryList.FieldByName(fnProjectID).AsInteger := ProjectID;
mtExplanatoryList.FieldByName(fnMarkID).AsInteger := AList.MarkID;
mtExplanatoryList.FieldByName(fnName).AsString := AList.GetNameForVisible;
mtExplanatoryList.FieldByName(fnHeightRoom).AsFloat := Round2(FloatInUOM(AList.Setting.HeightRoom, umMetr, TF_Main(GForm).FUOM)); //Âûñîòà ýòàæà
mtExplanatoryList.FieldByName(fnHeightCeiling).AsFloat := Round2(FloatInUOM(AList.Setting.HeightCeiling, umMetr, TF_Main(GForm).FUOM)); //Âûñîòà ôàëüø ïîòîëêà
mtExplanatoryList.FieldByName(fnHeightSocket).AsFloat := Round2(FloatInUOM(AList.Setting.HeightSocket, umMetr, TF_Main(GForm).FUOM)); //Âûñîòà ðàçìåù òî÷ îáúåêòîâ
mtExplanatoryList.FieldByName(fnHeightCorob).AsFloat := Round2(FloatInUOM(AList.Setting.HeightCorob, umMetr, TF_Main(GForm).FUOM)); //Âûñîòà ðàçìåù òðàññ
mtExplanatoryList.FieldByName(fnCableCanalFullnessKoef).AsFloat := AList.Setting.CableCanalFullnessKoef; //Êîýôôèöèåíò çàïîëíåííîñòè êàáåëüíûõ êàíàëîâ
mtExplanatoryList.FieldByName(fnLengthKoef).AsFloat := AList.Setting.LengthKoef; //Ïðîöåíò çàïàñà äëèíû êàáåëÿ
mtExplanatoryList.FieldByName(fnPortReserv).AsFloat := Round2(FloatInUOM(AList.Setting.PortReserv, umMetr, TF_Main(GForm).FUOM)); //Ðåçåðâ ñî ñòîðîíû ïîðòà
mtExplanatoryList.FieldByName(fnMultiportReserv).AsFloat := Round2(FloatInUOM(AList.Setting.MultiportReserv, umMetr, TF_Main(GForm).FUOM)); //Ðåçåðâ ñî ñòîðîíû ìóëüòèïîðòà
mtExplanatoryList.FieldByName(fnTwistedPairMaxLength).AsFloat := Round2(FloatInUOM(AList.Setting.TwistedPairMaxLength, umMetr, TF_Main(GForm).FUOM)); //Îãðàíè÷åíèå ïî ìàêñèìàëüíîé äëèíå (äëÿ âèòîé ïàðû)
mtExplanatoryList.Post;
end;
}
procedure AddListToExplanatoryReport(AList: TSCSList);
var i,j,k : integer;
Compon : TSCSComponent;
ComponCount, ComponPrice : double;
MKolvo: Double;
ExpenseForMetr_L: Double;
begin
TotalCost := 0;
MaterialsCost := 0;
WorksCost := 0;
ResourcesCost := 0;
ComponPrice := 0;
ComponCount := 0;
//ðàáîòû
GroupedNorms := AList.GetAllNormsResources([nrNorms], false, true,
false, true, false, true, false, True);
for i := 0 to GroupedNorms.Norms.Count - 1 do
begin
GroupNorm := GroupedNorms.Norms[i];
WorksCost := WorksCost + GroupNorm.Price*GroupNorm.Kolvo;
end;
NormResources := AList.GetAllNormsResources([nrResources, nrAccessories, nrComponents], false,
true, true, true, false, true, true);
for i := 0 to NormResources.Resources.Count - 1 do
begin
ResourceRel := NormResources.Resources[i];
ResourceCompon := nil;
if ResourceRel.ServIsResource then
if TSCSResourceGroup(ResourceRel).ObjectList.Count > 0 then
if TSCSResourceGroup(ResourceRel).ObjectList[0] is TSCSComponent then
begin
ResourceCompon := TSCSComponent(TSCSResourceGroup(ResourceRel).ObjectList[0]);
end;
if ResourceCompon <> nil then
begin
SprSuppliesKind := nil;
if ResourceRel.GUIDSuppliesKind <> '' then
SprSuppliesKind := ProjectOwner.Spravochnik.GetSuppliesKindByGUID(ResourceRel.GUIDSuppliesKind);
//*** Ó÷èòûâàòü ïîñòàâî÷íûå âåëè÷èíû
if SprSuppliesKind <> nil then
begin
if CheckIsTradUOM(TF_Main(GForm).FUOM) then
begin
ResourceRel.Izm := SprSuppliesKind.Data.NameTradUOM;
if CheckPriceTransformToUOMByCompType(@ResourceCompon.ComponentType) then
begin
// Äëÿ êàáåëåé è êàíàëîâ â òðàäèöèîííîé ñèñòåìû ÑØÀ íóæíî þçàòü ÔÓÒÛ
ResourceRel.Kolvo := FloatInUOM(ResourceRel.Kolvo, umMetr, umFoot) / SprSuppliesKind.Data.UnitKolvoTradUOM;
ResourceRel.Price := FloatInUOM(ResourceRel.Price, umFoot, umMetr) * SprSuppliesKind.Data.UnitKolvoTradUOM;
end
else
begin
ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvoTradUOM;
ResourceRel.Price := ResourceRel.Price * SprSuppliesKind.Data.UnitKolvoTradUOM;
end;
end
else
begin
ResourceRel.Izm := SprSuppliesKind.Data.Name;
ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvo;
ResourceRel.Price := ResourceRel.Price * SprSuppliesKind.Data.UnitKolvo;
end;
ResourceRel.CalcCost;
end
else
begin
if CheckPriceTransformToUOMByCompType(@ResourceCompon.ComponentType) then
begin
ResourceRel.Izm := GetNameUOM(TF_Main(GForm).FUOM, true);
if TF_Main(GForm).FUOM <> umMetr then
begin
ResourceRel.Kolvo := FloatInUOM(ResourceRel.Kolvo, umMetr, TF_Main(GForm).FUOM);
ResourceRel.Price := FloatInUOM(ResourceRel.Price, TF_Main(GForm).FUOM, umMetr);
ResourceRel.CalcCost;
end;
end;
end;
end;
end;
// ñòîèìîñòü ðåñóðñîâ
for i := 0 to NormResources.Resources.Count - 1 do
begin
// îòáèðàåì còîèìîñòü ðåñóðñîâ (ëèñò)
if NormResources.Resources[i].ServIsResource then
begin
ResourceRel := NormResources.Resources[i];
Kolvo := RoundX(ResourceRel.Kolvo,4);
Price := RoundX(ResourceRel.Price, 4);
ResourcesCost := ResourcesCost+RoundX(Kolvo*Price,2);
end;
end;
Main_ResourcesCost := Main_ResourcesCost+ResourcesCost;
// ñòîèìîñòü ðàáîò (ëèñò)
// âûòàñêèâàåì ñòîèìîñòü ðàáîò èç âñåõ êîìïîíåíòîâ íà ëèñòå
{ for i := 0 to AList.ChildCatalogs.Count-1 do
begin
for j := 0 to AList.ChildCatalogs[i].ComponentReferences.Count - 1 do
begin
for k := 0 to AList.ChildCatalogs[i].ComponentReferences[j].NormsResources.Norms.Count -1 do
begin
WorksCost := WorksCost + AList.ChildCatalogs[i].ComponentReferences[j].NormsResources.Norms[k].Price*
AList.ChildCatalogs[i].ComponentReferences[j].NormsResources.Norms[k].Kolvo;
end;
end;
end;
}
WorksCost := RoundX(WorksCost,2);
Main_WorksCost := Main_WorksCost + WorksCost;
// ñòîèìîñòü ìàòåðèàëîâ (ëèñò)
for i := 0 to AList.ComponentReferences.Count - 1 do
begin
//if AList.ComponentReferences[i].IsLine=bitrue then
// MaterialsCost := MaterialsCost+(AList.ComponentReferences[i].Price*AList.ComponentReferences[i].Length)
//else
// MaterialsCost := MaterialsCost+(AList.ComponentReferences[i].Price);
//RoundCP((Price + AdditionalPrice) * Kolvo);
if AList.ComponentReferences[i].IsLine=bifalse then
begin
MKolvo := 1;
if ((AList.ComponentReferences[i].ComponentType.SysName = ctsnCableChannelAccessory) or
(AList.ComponentReferences[i].ComponentType.SysName = ctsnAccessory)) then
begin
ExpenseForMetr_L := AList.ComponentReferences[i].GetPropertyValueAsFloat(pnExpenseForMetr);
if ExpenseForMetr_L > 0 then
begin
MKolvo := Round(AList.ComponentReferences[i].Length * ExpenseForMetr_L);
end
end;
MaterialsCost := MaterialsCost + RoundCP((AList.ComponentReferences[i].Price) * MKolvo);
end
else
begin
// Ðàñõîä íà åä.äëèíû
ExpenseForMetr_L := AList.ComponentReferences[i].GetPropertyValueAsFloat(pnExpenseForMetr);
if ExpenseForMetr_L > 0 then
begin
MKolvo := Round(AList.ComponentReferences[i].Length * ExpenseForMetr_L);
end
else
MKolvo := AList.ComponentReferences[i].Length;
MaterialsCost := MaterialsCost + RoundCP((AList.ComponentReferences[i].Price) * MKolvo);
end;
end;
MaterialsCost := Roundx(MaterialsCost, 2);
Main_MaterialsCost := Main_MaterialsCost + MaterialsCost;
TotalCost := MaterialsCost + WorksCost + ResourcesCost;
Main_TotalCost := Main_TotalCost + TotalCost;
mtExplanatoryList.Append;
mtExplanatoryList.FieldByName(fnID).AsInteger := AList.ID;
mtExplanatoryList.FieldByName(fnProjectID).AsInteger := ProjectID;
mtExplanatoryList.FieldByName(fnMarkID).AsInteger := AList.MarkID;
mtExplanatoryList.FieldByName(fnName).AsString := AList.GetNameForVisible;
mtExplanatoryList.FieldByName(fnHeightRoom).AsFloat := Round2(FloatInUOM(AList.Setting.HeightRoom, umMetr, TF_Main(GForm).FUOM)); //Âûñîòà ýòàæà
mtExplanatoryList.FieldByName(fnHeightCeiling).AsFloat := Round2(FloatInUOM(AList.Setting.HeightCeiling, umMetr, TF_Main(GForm).FUOM)); //Âûñîòà ôàëüø ïîòîëêà
mtExplanatoryList.FieldByName(fnHeightSocket).AsFloat := Round2(FloatInUOM(AList.Setting.HeightSocket, umMetr, TF_Main(GForm).FUOM)); //Âûñîòà ðàçìåù òî÷ îáúåêòîâ
mtExplanatoryList.FieldByName(fnHeightCorob).AsFloat := Round2(FloatInUOM(AList.Setting.HeightCorob, umMetr, TF_Main(GForm).FUOM)); //Âûñîòà ðàçìåù òðàññ
mtExplanatoryList.FieldByName(fnCableCanalFullnessKoef).AsFloat := AList.Setting.CableCanalFullnessKoef; //Êîýôôèöèåíò çàïîëíåííîñòè êàáåëüíûõ êàíàëîâ
mtExplanatoryList.FieldByName(fnLengthKoef).AsFloat := AList.Setting.LengthKoef; //Ïðîöåíò çàïàñà äëèíû êàáåëÿ
mtExplanatoryList.FieldByName(fnPortReserv).AsFloat := Round2(FloatInUOM(AList.Setting.PortReserv, umMetr, TF_Main(GForm).FUOM)); //Ðåçåðâ ñî ñòîðîíû ïîðòà
mtExplanatoryList.FieldByName(fnMultiportReserv).AsFloat := Round2(FloatInUOM(AList.Setting.MultiportReserv, umMetr, TF_Main(GForm).FUOM)); //Ðåçåðâ ñî ñòîðîíû ìóëüòèïîðòà
mtExplanatoryList.FieldByName(fnTwistedPairMaxLength).AsFloat := Round2(FloatInUOM(AList.Setting.TwistedPairMaxLength, umMetr, TF_Main(GForm).FUOM)); //Îãðàíè÷åíèå ïî ìàêñèìàëüíîé äëèíå (äëÿ âèòîé ïàðû)
// added by Tolik
mtExplanatoryList.FieldByName(fnMaterialsCost).AsFloat := MaterialsCost;
mtExplanatoryList.FieldByName(fnResourcesCost).AsFloat := ResourcesCost;
mtExplanatoryList.FieldByName(fnWorksCost).AsFloat := WorksCost;
mtExplanatoryList.FieldByName(fnTotalCost).AsFloat := TotalCost;
mtExplanatoryList.Post;
end;
begin
if TF_Main(GForm).GDBMode <> bkProjectManager then
Exit; ///// EXIT /////
if Not CheckCanShowReport(AFolder) then
Exit; ///// EXIT /////
try
Main_TotalCost :=0;
Main_MaterialsCost := 0;
Main_WorksCost := 0;
Main_ResourcesCost := 0;
FCatalog := AFolder;
ProjectOwner := nil;
BeginProgress(pcPreparingReport);
try
mtExplanatoryList.Active := false;
mtExplanatoryProj.Active := false;
mtExplanatoryProj.Active := true;
mtExplanatoryList.Active := true;
//ñâîéñòâà ïðîåêòà
mtExplanatoryProj.Append;
if AFolder.ItemType = itProject then
begin
ProjectOwner := TSCSProject(AFolder);
ZeroMemory(@CurrencyM, SizeOf(TCurrency));
ZeroMemory(@CurrencyS, SizeOf(TCurrency));
SprCurrency := ProjectOwner.Spravochnik.GetCurrencyByType(ctMain);
if SprCurrency <> nil then
CurrencyM := SprCurrency.Data
else
CurrencyM := F_NormBase.DM.GetCurrencyByID(TSCSProject(AFolder).Setting.IDCurrency);
SprCurrency := ProjectOwner.Spravochnik.GetCurrencyByType(ctSecond);
if SprCurrency <> nil then
CurrencyS := SprCurrency.Data
else
CurrencyS := F_NormBase.DM.GetCurrencyByID(TSCSProject(AFolder).Setting.CurrensySID);
ProjectID := TSCSProject(AFolder).ID;
mtExplanatoryProj.FieldByName(fnMarkID).AsInteger := TSCSProject(AFolder).MarkID;
mtExplanatoryProj.FieldByName(fnName).AsString := TSCSProject(AFolder).GetNameForVisible;
mtExplanatoryProj.FieldByName(fnCurrencyMName).AsString := CurrencyM.Name;
mtExplanatoryProj.FieldByName(fnCurrencySName).AsString := CurrencyS.Name;
mtExplanatoryProj.FieldByName(fnNDS).AsFloat := TSCSProject(AFolder).Setting.NDS;
mtExplanatoryProj.FieldByName(fnCustomerName).AsString := TSCSProject(AFolder).Setting.CustomerName;
mtExplanatoryProj.FieldByName(fnContractorName).AsString := TSCSProject(AFolder).Setting.ContractorName;
mtExplanatoryProj.FieldByName(fnHeightThroughFloor).AsFloat := Round2(FloatInUOM(TSCSProject(AFolder).Setting.HeightThroughFloor, umMetr, TF_Main(GForm).FUOM));
mtExplanatoryProj.FieldByName(fnIsVisible).AsBoolean := true;
end
else
begin
if AFolder.GetTopParentCatalog <> nil then
ProjectID := AFolder.GetTopParentCatalog.ID;
mtExplanatoryProj.FieldByName(fnIsVisible).AsBoolean := false;
end;
mtExplanatoryProj.FieldByName(fnID).AsInteger := ProjectID;
mtExplanatoryProj.Post;
if AFolder.ItemType = itProject then
begin
for i := 0 to TSCSProject(AFolder).ProjectLists.Count - 1 do
AddListToExplanatoryReport(TSCSProject(AFolder).ProjectLists[i]);
end
else
if AFolder.ItemType = itList then
AddListToExplanatoryReport(TSCSList(AFolder))
else
if AFolder.ItemType = itDir then
begin
SCSLists := GetChildCatalogsInPlacingOrder(AFolder, [itList]);
for i := 0 to SCSLists.Count - 1 do
begin
SCSList := SCSLists[i];
if SCSList is TSCSCatalog then
AddListToExplanatoryReport(TSCSList(SCSList));
end;
FreeAndNil(SCSLists);
end;
finally
EndProgress;
end;
mtExplanatoryProj.Edit;
mtExplanatoryProj.FieldByName(fnMaterialsCost).AsFloat := Main_MaterialsCost;
mtExplanatoryProj.FieldByName(fnResourcesCost).AsFloat := Main_ResourcesCost;
mtExplanatoryProj.FieldByName(fnWorksCost).AsFloat := Main_WorksCost;
mtExplanatoryProj.FieldByName(fnTotalCost).AsFloat := Main_TotalCost;
mtExplanatoryProj.Post;
GFormMode := fmRExplanatoryReport;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowFolderExplanatoryReport: '+E.Message);
end;
end;
procedure TF_ResourceReport.ShowPriorCostOfProjectReport(AParams: TReportItemParams);
begin
try
SortMemTableByParams(mtReport, AParams, nil);
GFormMode := fmRPriorCostOfProject;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ShowPriorCostOfProjectReport', E.Message);
end;
end;
procedure TF_ResourceReport.ShowPriorCostOfProjectReportWizard(AMemTable, ATotalParams: TkbmMemTable;
ACostOfProjectReportParams: TCostOfProjectReportParams; AShowTotalParams, AShowTemplates: Boolean);
begin
try
if AMemTable <> nil then
begin
//mtReport.Active := false;
// mtReport.FieldDefs.Clear;
// mtReport.FieldDefs.Assign(AMemTable.FieldDefs);
// mtReport.LoadFromDataSet(AMemTable, []);
// mtReport.Active := true;
FCostOfProjectReportParams := ACostOfProjectReportParams;
mtReportDetail.MasterSource := nil;
mtReportDetail.MasterFields := '';
AssignMemTable(mtReport, AMemTable, true);
if AShowTotalParams then
AssignMemTable(mtReportFirst, ATotalParams, true)
else
begin
mtReportFirst.Active := false;
mtReportFirst.FieldDefs.Assign(ATotalParams.FieldDefs);
mtReportFirst.Active := true;
end;
// Â mtReport îñòàâëÿåì ìàòåðèàëû, à â mtReportDetail ïåðåêèäûâàåì íîðìû
//mtReportDetail.Active := false;
//mtReportDetail.FieldDefs.Assign(mtReport.FieldDefs);
ShowWizard([rkCalc], AShowTemplates);
//if mtReportFirst.Active then
// mtReportFirst.Close;
//mtReport.Close;
end;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ShowPriorCostOfProjectReportWizard', E.Message);
end;
end;
procedure TF_ResourceReport.ShowMarkPages(AFolder: TSCSCatalog; AParams: TReportItemParams; AResourceReportFormMode: TResourceReportFormMode;
AReportItemParamValues: TReportItemParams);
var
CanHaveActiveComponents: Boolean;
CanHaveDismountAccount: Boolean;
SprCompType: TNBComponentType;
SCSCatalog: TSCSCatalog;
SCSCatalogFirst: TSCSCatalog;
SCSComponent: TSCSComponent;
ChildComponent: TSCSComponent;
TempComponent: TSCSComponent;
ComunicationCompon: TSCSComponent;
ComunicationComponInFirstSide: TSCSComponent;
ComunicationPort: TSCSInterface;
ComunicationPortMark: string;
LastSideCompon: TSCSComponent;
SocketFrameComponent: TSCSComponent; // Ðàìêà ðîçåêòè/ïîðòà
i, j: Integer;
CableMark: String;
RoomOwner: TSCSCatalog;
RoomOwnerFirst: TSCSCatalog;
RoomMark: String;
RoomMarkFirst: String;
ListOwner: TSCSList;
ListOwnerFirst: TSCSList;
ListMark: String;
ListMarkFirst: String;
LookedObjects: TRapList;
LookedWholeIDs: TIntList;
LookedSocketFrams: TSCSComponents;
LookedSocketFramsIndex: Integer;
RoomsOfSocketFrames: TRapList; // Ñïèñîê ñïèñêîâ êîìíàò, ñ êîòîðûõ èäåò ïîäêëþ÷åíèå íà ðàìêè ïîðòîâ
SocketFrameRooms: TRapList; // Ñïèñîê êîìíàò, ñ êîòîðûõ èäåò ïîäêëþ÷åíèå íà ðàìêè ïîðòîâ
FindedForI: Boolean;
SocketFrameSysNames: TStringList;
IsLookedSocketFrame: Boolean;
mtRep: TkbmMemTable;
procedure AddComponPortsToMemTable(AComponent: TSCSComponent);
var
i: Integer;
Interfac: TSCSInterface;
begin
for i := 0 to AComponent.Interfaces.Count - 1 do
begin
Interfac := AComponent.Interfaces[i];
if Interfac.IsPort = biTrue then
begin
AddStrToMemTable(mtRep, fnNameMark, IntToStrF(Interfac.NppPort, 2));
//mtRep.Append;
//mtRep.FieldByName(fnNameMark).AsString := IntToStrF(Interfac.NppPort, 2);
//mtRep.Post;
end;
end;
end;
function GetRoomMark(ARoom: TSCSCatalog): String;
begin
Result := '';
if ARoom <> nil then
begin
if ARoom.NameShort <> '' then
Result := ARoom.NameShort
else
begin
if rbShowRoomName.Checked then
Result := ARoom.Name + IntToStr(ARoom.MarkID)
else
Result := edNoCabinetNameShort.Text;
end;
end
else
Result := edNoCabinet.Text;
end;
begin
try
mtRep := mtReport;
case AParams.Mode of
fmRMarkRoomTS:
mtRep := FmtMarkRoomTS;
fmRMarkPathPanel:
mtRep := FmtMarkPathPanel;
fmRMarkPathPanelPorts:
mtRep := FmtMarkPathPanelPorts;
fmRMarkSocket:
mtRep := FmtMarkSocket;
fmRMarkSocketPanel:
mtRep := FmtMarkSocketPanel;
fmRMarkCable:
mtRep := FmtMarkCable;
end;
mtRep.Active := false;
mtRep.FieldDefs.Clear;
mtRep.FieldDefs.Add(fnNameMark, ftString, 255);
mtRep.Active := true;
LookedObjects := TRapList.Create;
FCatalog := AFolder;
CanHaveActiveComponents := IntToBool(AReportItemParamValues.CanHaveActiveComponents);
CanHaveDismountAccount := IntToBool(AReportItemParamValues.CanHaveDismountAccount);
case AResourceReportFormMode of
fmRMarkRoomTS:
begin
// Ïåðåáåðàåì âñå êîìíàòû
for i := 0 to FCatalog.ChildCatalogReferences.Count - 1 do
begin
SCSCatalog := FCatalog.ChildCatalogReferences[i];
if SCSCatalog.ItemType = itRoom then
begin
FindedForI := false;
// Èùåì òåëåêîìóíèêàöèîííîå îáîðóäîâàíèå â êàáèíåòå
for j := 0 to SCSCatalog.ComponentReferences.Count - 1 do
begin
SCSComponent := SCSCatalog.ComponentReferences[j];
SprCompType := SCSComponent.ProjectOwner.Spravochnik.GetComponentTypeByGUID(SCSComponent.GUIDComponentType);
// Ïðèíàäëåæèò ëè òèï ê êîìóíèêàöèîííîìó îáîðóäîâàíèþ
if SprCompType <> nil then
if (SprCompType.ComponentType.SysName = ctsnCupBoard) or
IsPatchPanelSysName(SprCompType.ComponentType.SysName) or
(SprCompType.ComponentType.PortKind = pkMultiport) then
begin
ListOwner := SCSCatalog.GetListOwner;
if ListOwner <> nil then
begin
AddStrToMemTable(mtRep, fnNameMark, IntToStr(ListOwner.MarkID) + GetRoomMark(SCSCatalog));
end;
FindedForI := true;
Break; //// BREAK ////
end;
end;
if FindedForI then
Break; //// BREAK ////
end;
end;
end;
fmRMarkPathPanel:
begin
// Ïåðåáåðàåì òåëåêîìóíèêàöèîííîå îáîðóäîâàíèå
for i := 0 to FCatalog.ComponentReferences.Count - 1 do
begin
SCSComponent := FCatalog.ComponentReferences[i];
SprCompType := SCSComponent.ProjectOwner.Spravochnik.GetComponentTypeByGUID(SCSComponent.GUIDComponentType);
// Ïðèíàäëåæèò ëè òèï ê ðàò÷-ïàíåëè èëè ìóëüòèïîðòó
if SprCompType <> nil then
if IsPatchPanelSysName(SprCompType.ComponentType.SysName) or
(SprCompType.ComponentType.PortKind = pkMultiport) then
if LookedObjects.IndexOf(SCSComponent) = -1 then
if CheckCanLookComponInReportRsrc(SCSComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
begin
AddStrToMemTable(mtRep, fnNameMark, SCSComponent.NameMark);
LookedObjects.Add(SCSComponent);
end;
end;
end;
fmRMarkPathPanelPorts:
begin
// Ïåðåáåðàåì òåëåêîìóíèêàöèîííîå îáîðóäîâàíèå
for i := 0 to FCatalog.ComponentReferences.Count - 1 do
begin
SCSComponent := FCatalog.ComponentReferences[i];
SprCompType := SCSComponent.ProjectOwner.Spravochnik.GetComponentTypeByGUID(SCSComponent.GUIDComponentType);
// Ïðèíàäëåæèò ëè òèï ê ðàò÷-ïàíåëè èëè ìóëüòèïîðòó
if SprCompType <> nil then
if IsPatchPanelSysName(SprCompType.ComponentType.SysName) or
(SprCompType.ComponentType.PortKind = pkMultiport) then
if LookedObjects.IndexOf(SCSComponent) = -1 then
begin
// Âûíîñèì âñå ïîðòû ïàò÷ïàíåëè
if CheckCanLookComponInReportRsrc(SCSComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
AddComponPortsToMemTable(SCSComponent);
for j := 0 to SCSComponent.ChildReferences.Count - 1 do
begin
ChildComponent := SCSComponent.ChildReferences[j];
if CheckCanLookComponInReportRsrc(ChildComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
AddComponPortsToMemTable(ChildComponent);
end;
LookedObjects.Add(SCSComponent);
end;
end;
end;
fmRMarkSocket, fmRMarkSocketPanel, fmRMarkCable:
begin
LookedWholeIDs := TIntList.Create;
SocketFrameSysNames := TStringList.Create;
SocketFrameSysNames.Add(ctsnSocket);
SocketFrameSysNames.Add(ctsnFrame);
LookedSocketFrams := TSCSComponents.Create(false);
RoomsOfSocketFrames := TRapList.Create;
// Ïåðåáåðàåì âñå êàáåëè
for i := 0 to FCatalog.ComponentReferences.Count - 1 do
begin
SCSComponent := FCatalog.ComponentReferences[i];
if SCSComponent.IsLine = biTrue then
if LookedWholeIDs.IndexOf(SCSComponent.Whole_ID) = -1 then
begin
SCSComponent.LoadWholeComponent(false);
SCSComponent.DefineFirstLast;
if SCSComponent.LastConnectedConnCompon <> nil then
begin
// Ïîëó÷èòü ïàðåíò òåëåêîìèíàöèîííóþ ïàíåëü èëè øêàô
ComunicationCompon := GetParentComunicationCompon(SCSComponent.LastConnectedConnCompon);
if ComunicationCompon <> nil then
begin
RoomOwner := nil;
ListOwner := nil;
RoomMark := '';
ListMark := '';
// Ïîëó÷àåì Îáúåêò
SCSCatalog := ComunicationCompon.GetFirstParentCatalog;
if SCSCatalog <> nil then
begin
// Ïîëó÷àåì êàáèíåò
RoomOwner := SCSCatalog.GetParentCatalogByItemType(itRoom);
RoomMark := GetRoomMark(RoomOwner);
ListOwner := SCSCatalog.GetListOwner;
if ListOwner <> nil then
ListMark := IntToStr(ListOwner.MarkID);
end;
// Ïîëó÷àåì ïîðò ïàíåëè, ê êîòîðîé ïîäêëþ÷åí êàáåëü
ComunicationPort := nil;
ComunicationPortMark := ' ';
LastSideCompon := SCSComponent.LastConnectedConnCompon.JoinedComponents.GetComponenByID(SCSComponent.LastIDCompon);
if LastSideCompon <> nil then
ComunicationPort := SCSComponent.LastConnectedConnCompon.GetPortJoinedToLine(LastSideCompon);
if ComunicationPort <> nil then
ComunicationPortMark := IntToStrF(ComunicationPort.NppPort, 2)
else
ComunicationPortMark := IntToStrF(SCSComponent.LastConnectedConnCompon.MarkID, 2);
case AResourceReportFormMode of
fmRMarkSocket, fmRMarkSocketPanel:
if SCSComponent.FirstConnectedConnCompon <> nil then
begin
if AResourceReportFormMode = fmRMarkSocket then
begin
if CheckCanLookComponInReportRsrc(SCSComponent.FirstConnectedConnCompon, CanHaveActiveComponents, CanHaveDismountAccount) then
if AReportItemParamValues.CanFloorNppWithRoom = biTrue then
AddStrToMemTable(mtRep, fnNameMark,
ListMark + RoomMark+'-'+ComunicationCompon.NameMark + ComunicationPortMark)
else
AddStrToMemTable(mtRep, fnNameMark, ComunicationCompon.NameMark + ComunicationPortMark)
end
else
if AResourceReportFormMode = fmRMarkSocketPanel then
begin
SocketFrameComponent := GetComponTopByCTSysNames(SCSComponent.FirstConnectedConnCompon, SocketFrameSysNames, true);
if SocketFrameComponent <> nil then
if CheckCanLookComponInReportRsrc(SocketFrameComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
begin
IsLookedSocketFrame := false;
// Ïðîâåðÿåì - áûëà ëè ðàñìîòðåíà òàêàÿ ïàíåëü ñ òàêèì êàáèíåòîì
LookedSocketFramsIndex := LookedSocketFrams.IndexOf(SocketFrameComponent);
if LookedSocketFramsIndex <> -1 then
begin
SocketFrameRooms := RoomsOfSocketFrames[LookedSocketFramsIndex];
if SocketFrameRooms.IndexOf(RoomOwner) <> -1 then
IsLookedSocketFrame := true;
end;
if Not IsLookedSocketFrame then
begin
AddStrToMemTable(mtRep, fnNameMark, ListMark + RoomMark+'-');
// Çàíåñòè ðàìêó è êîìíàòó â ñïèñîê ïðîñìîòðåííûõ
SocketFrameRooms := nil;
if LookedSocketFramsIndex = -1 then
begin
LookedSocketFrams.Add(SocketFrameComponent);
SocketFrameRooms := TRapList.Create;
RoomsOfSocketFrames.Add(SocketFrameRooms);
end
else
SocketFrameRooms := RoomsOfSocketFrames[LookedSocketFramsIndex];
if SocketFrameRooms <> nil then
if SocketFrameRooms.IndexOf(RoomOwner) = -1 then
SocketFrameRooms.Add(RoomOwner);
end;
end;
end;
end;
fmRMarkCable:
if CheckCanLookComponInReportRsrc(SCSComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
begin
CableMark := '';
// Ïîäêëþ÷åí ëè êàáåëü íà îáîèõ êîíöàõ ê òåëåêîìóíèêàöòîííîé ïàíåëå
ComunicationComponInFirstSide := GetParentComunicationCompon(SCSComponent.FirstConnectedConnCompon);
// Âûâîäèì ìàðêèðîâêó ïî ôîðìàòó fs1/fs2-n
if ComunicationComponInFirstSide <> nil then
begin
RoomOwnerFirst := nil;
ListOwnerFirst := nil;
RoomMarkFirst := '';
ListMarkFirst := '';
// Ïîëó÷àåì Îáúåêò
SCSCatalogFirst := ComunicationComponInFirstSide.GetFirstParentCatalog;
if SCSCatalogFirst <> nil then
begin
// Ïîëó÷àåì êàáèíåò
RoomOwnerFirst := SCSCatalogFirst.GetParentCatalogByItemType(itRoom);
RoomMarkFirst := GetRoomMark(RoomOwnerFirst);
ListOwnerFirst := SCSCatalogFirst.GetListOwner;
if ListOwnerFirst <> nil then
ListMarkFirst := IntToStr(ListOwnerFirst.MarkID);
end;
if (ListMark+RoomMark) < (ListMarkFirst+RoomMarkFirst) then
CableMark := ListMark + RoomMark +'/'+ ListMarkFirst + RoomMarkFirst
else
CableMark := ListMarkFirst + RoomMarkFirst +'/'+ ListMark + RoomMark;
CableMark := CableMark +'-'+IntToStr(SCSComponent.MarkID);
end
else
// Ââûâîäèòü ìàðêèðîâêó ïî ôîðìàòó fs-an
begin
CableMark := ListMark + RoomMark +'-'+ ComunicationCompon.NameMark + ComunicationPortMark;
end;
if CableMark <> '' then
begin
AddStrToMemTable(mtRep, fnNameMark, CableMark);
if AReportItemParamValues.CanInTwoCopies = biTrue then
AddStrToMemTable(mtRep, fnNameMark, CableMark);
end;
end;
end;
end;
end;
LookedWholeIDs.Add(SCSComponent.Whole_ID);
end;
end;
// Î÷èñòèòü SocketFrameRooms
for i := 0 to RoomsOfSocketFrames.Count - 1 do
TObject(RoomsOfSocketFrames[i]).Free;
RoomsOfSocketFrames.Free;
FreeAndNil(LookedSocketFrams);
FreeAndNil(SocketFrameSysNames);
FreeAndNil(LookedWholeIDs);
end;
end;
mtRep.SortOn(fnNameMark, []);
FreeAndNil(LookedObjects);
GFormMode := AResourceReportFormMode;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ShowMarkPages', E.Message);
end;
end;
procedure TF_ResourceReport.ShowExplicationRoom(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams);
var
CatalogList: TSCSCatalogs;
SCSCatalog: TSCSCatalog;
SCSList: TSCSList;
SCSRoom: TSCSCatalog;
HeightRoom: Double;
SquareInside: Double;
IsLoadedMaster: Boolean;
i, j: Integer;
mtRep: TkbmMemTable;
mtRepDetail: TkbmMemTable;
procedure SetRoomDataToMemTable(AMemTable: TkbmMemTable; AAppend: Boolean);
begin
if AAppend then
AMemTable.Append;
if AMemTable.State <> dsBrowse then
begin
AMemTable.FieldByName(fnFloor).AsInteger := SCSList.MarkID;
AMemTable.FieldByName(fnRoomNum).AsInteger := SCSRoom.MarkID;
AMemTable.FieldByName(fnNameShort).AsString := SCSRoom.NameShort;
AMemTable.FieldByName(fnAppointmentRoom).AsString := SCSRoom.Name;
AMemTable.FieldByName(fnSquareInside).AsFloat := RoundCP(FloatInUOM(SquareInside, umMetr, TF_Main(GForm).FUOM, 2));
AMemTable.FieldByName(fnHeightRoom).AsFloat := RoundCP(FloatInUOM(HeightRoom, umMetr, TF_Main(GForm).FUOM));
if AAppend then
AMemTable.Post;
end;
end;
begin
try
mtRep := FmtExplicationRoom; //mtReport;
mtRepDetail := FmtExplicationRoomDetail; //mtReportDetail;
ClearFieldsInMemTable(mtRep, mtRepDetail);
mtRep.FieldDefs.Add(fnID, ftAutoInc);
mtRep.FieldDefs.Add(fnFloor, ftInteger);
mtRep.FieldDefs.Add(fnRoomNum, ftInteger);
mtRep.FieldDefs.Add(fnNameShort, ftString, 255);
mtRep.FieldDefs.Add(fnAppointmentRoom, ftString, 255);
mtRep.FieldDefs.Add(fnSquareInside, ftFloat);
mtRep.FieldDefs.Add(fnHeightRoom, ftFloat);
mtRepDetail.FieldDefs.Add(fnIDMaster, ftInteger);
mtRepDetail.FieldDefs.Add(fnFloor, ftInteger);
mtRepDetail.FieldDefs.Add(fnRoomNum, ftInteger);
mtRepDetail.FieldDefs.Add(fnNameShort, ftString, 255);
mtRepDetail.FieldDefs.Add(fnAppointmentRoom, ftString, 255);
mtRepDetail.FieldDefs.Add(fnSquareInside, ftFloat);
mtRepDetail.FieldDefs.Add(fnHeightRoom, ftFloat);
ConnectDetailMemTable(FdsrcExplicationRoom, mtRepDetail, fnID, fnIDMaster);
mtRep.Active := true;
mtRepDetail.Active := true;
CatalogList := TSCSCatalogs.Create(false);
CatalogList.Add(ACatalog);
CatalogList.AddItems(ACatalog.ChildCatalogReferences);
BeginProgress(pcPreparingReport);
try
FCatalog := ACatalog;
for i := 0 to CatalogList.Count - 1 do
begin
SCSCatalog := CatalogList[i];
if (SCSCatalog.ItemType = itList) and (SCSCatalog is TSCSList) then
begin
SCSList := TSCSList(SCSCatalog);
IsLoadedMaster := false;
for j := 0 to SCSList.ChildCatalogReferences.Count - 1 do
begin
SCSCatalog := SCSList.ChildCatalogReferences[j];
if SCSCatalog.ItemType = itRoom then
begin
SCSRoom := SCSCatalog;
// Óçíàåì âûñîòó êàáèíåòà
HeightRoom := SCSList.Setting.HeightRoom;
if SCSRoom.RoomSetting.HeightCeiling > 0 then
HeightRoom := SCSList.Setting.HeightRoom - SCSRoom.RoomSetting.HeightCeiling
else
HeightRoom := SCSList.Setting.HeightRoom - SCSList.Setting.HeightCeiling;
// Èùåì ïëîùàäü êàáèíåòà
SquareInside := GetRoomSquare(SCSList.CurrID, SCSRoom.SCSID);
if Not IsLoadedMaster then
begin
mtRep.Append;
//mtRep.FieldByName(fnFloor).AsInteger := SCSList.MarkID;
SetRoomDataToMemTable(mtRep, false);
mtRep.Post;
IsLoadedMaster := true;
end
else
begin
//SetRoomDataToMemTable(mtRepDetail, true);
//mtRepDetail.Append;
//mtRepDetail.FieldByName(fnRoomNum).AsInteger := SCSRoom.MarkID;
//mtRepDetail.FieldByName(fnAppointmentRoom).AsString := SCSRoom.Name;
//mtRepDetail.FieldByName(fnSquareInside).AsFloat := HeightRoom;
//mtRepDetail.FieldByName(fnHeightRoom).AsFloat := SquareInside;
//mtRepDetail.Post;
end;
SetRoomDataToMemTable(mtRepDetail, true);
end;
end;
end;
end;
finally
EndProgress;
end;
FreeAndNil(CatalogList);
// Îòñîðòèðîâàòü ïî ýòàæàì
mtRep.SortOn(fnFloor, []);
// Îòñîðòèðîâàòü êàáèíåòû ïî ýòàæó
SortMemTableByParams(mtRepDetail, AParams, AReportItemParamValues);
GFormMode := fmRExplicationRoom;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ShowExplicationRoom', E.Message);
end;
//ClearFieldsInMemTable(mtRep, mtRepDetail);
end;
procedure TF_ResourceReport.ShowExplicationComponentOLD(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams);
var
CanHaveActiveComponents: Boolean;
CanHaveDismountAccount: Boolean;
CatalogList: TSCSCatalogs;
SCSCatalog: TSCSCatalog;
SCSList: TSCSList;
SCSRoom: TSCSCatalog;
SCSObject: TSCSCatalog;
SCSComponent: TSCSComponent;
PartSCSComponent: TSCSComponent;
LookedWholeIDs: TIntList;
IsLoadedMaster: Boolean;
IsLoadedSubMaster: Boolean;
IsFindedCompType: Boolean;
ComponLists: TStringList;
ptrTwoID: PTwoID;
MaxListNumLength: Integer;
MaxRoomNumLength: Integer;
RoomMarkID: Integer;
FindedListRoom: Boolean;
IsInsertedRecord: Boolean;
RecordCount: Integer;
RecNo: Integer;
IsGroupByCompType: Boolean;
IsProjOrder: Boolean;
i, j, k, l: Integer;
mtRep: TkbmMemTable;
mtRepDetail: TkbmMemTable;
mtRepSubDetail: TkbmMemTable;
procedure SetComponDataToMemTable;
var
IsFindedCompType: Boolean;
begin
if Not IsLoadedMaster then
begin
mtRep.Append;
mtRep.FieldByName(fnFloor).AsString := IntToStr(SCSList.MarkID);
if SCSRoom <> nil then
mtRep.FieldByName(fnRoomNum).AsString := IntToStr(SCSRoom.MarkID)
else
mtRep.FieldByName(fnRoomNum).AsString := '';
mtRep.Post;
IsLoadedMaster := true;
end;
// Ïîèñê òèïà êîìïíåíòû äëÿ òåêóøåãî êàáèíåòà
IsFindedCompType := false;
mtRepDetail.First;
while Not mtRepDetail.Eof do
begin
if (IsGroupByCompType and
(mtRepDetail.FieldByName(fnGuidComponentType).AsString = SCSComponent.GUIDComponentType)) or
(Not IsGroupByCompType and
(mtRepDetail.FieldByName(fnGuidComponentType).AsString = '')) then
begin
IsFindedCompType := true;
Break; //// BREAK ////
end;
mtRepDetail.Next;
end;
if Not IsFindedCompType then
begin
mtRepDetail.Append;
if IsGroupByCompType then
begin
mtRepDetail.FieldByName(fnGuidComponentType).AsString := SCSComponent.GUIDComponentType;
mtRepDetail.FieldByName(fnName).AsString := SCSComponent.ComponentType.NamePlural;
end
else
mtRepDetail.FieldByName(fnGuidComponentType).AsString := '';
mtRepDetail.Post;
end;
if (SCSComponent.Whole_ID = 0) or Not mtRepSubDetail.Locate(fnWholeID, SCSComponent.Whole_ID, []) then
begin
mtRepSubDetail.Append;
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(SCSList.MarkID);
if SCSRoom <> nil then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(SCSRoom.MarkID)
else
mtRepSubDetail.FieldByName(fnRoomNum).AsString := '';
mtRepSubDetail.FieldByName(fnMarkID).AsInteger := SCSComponent.MarkID;
mtRepSubDetail.FieldByName(fnName).AsString := SCSComponent.Name;
mtRepSubDetail.FieldByName(fnNameMark).AsString := SCSComponent.NameMark;
mtRepSubDetail.FieldByName(fnWholeID).AsInteger := SCSComponent.Whole_ID;
mtRepSubDetail.Post;
end;
end;
begin
try
mtRep := FmtExplicationCompon;
mtRepDetail := FmtExplicationComponDetail;
mtRepSubDetail := FmtExplicationComponSubDetail;
DisconnectDetailMemTable(mtRepSubDetail);
DisconnectDetailMemTable(mtRepDetail);
ClearFieldsInMemTable(mtRepSubDetail, nil);
ClearFieldsInMemTable(mtRepDetail, nil);
ClearFieldsInMemTable(mtRep, nil);
// Äîáàâëåíèå îáùèõ ïàëåé
mtRep.FieldDefs.Add(fnID, ftAutoInc);
mtRep.FieldDefs.Add(fnFloor, ftString, 20);
mtRep.FieldDefs.Add(fnRoomNum, ftString, 20);
mtRep.FieldDefs.Add(fnMarkID, ftInteger);
mtRep.FieldDefs.Add(fnName, ftString, 255);
mtRep.FieldDefs.Add(fnNameMark, ftString, 255);
mtRepDetail.FieldDefs.Assign(mtRep.FieldDefs);
mtRepDetail.FieldDefs.Add(fnIDMaster, ftInteger);
mtRepSubDetail.FieldDefs.Assign(mtRepDetail.FieldDefs);
// Äîáàâëåíèå äîïîëíèòåëüíûõ ïîëåé
mtRep.FieldDefs.Add(fnGuidComponentType, ftString, cnstGUIDLength);
mtRepDetail.FieldDefs.Add(fnGuidComponentType, ftString, cnstGUIDLength);
mtRepSubDetail.FieldDefs.Add(fnIDComponent, ftInteger);
mtRepSubDetail.FieldDefs.Add(fnObjectAddress, ftInteger);
mtRepSubDetail.FieldDefs.Add(fnWholeID, ftInteger);
ConnectDetailMemTable(FdsrcExplicationCompon, mtRepDetail, fnID, fnIDMaster);
ConnectDetailMemTable(FdsrcExplicationComponDetail, mtRepSubDetail, fnID, fnIDMaster);
mtRep.Active := true;
mtRepDetail.Active := true;
mtRepSubDetail.Active := true;
CanHaveActiveComponents := IntToBool(AReportItemParamValues.CanHaveActiveComponents);
CanHaveDismountAccount := IntToBool(AReportItemParamValues.CanHaveDismountAccount);
CatalogList := TSCSCatalogs.Create(false);
CatalogList.Add(ACatalog);
CatalogList.AddItems(ACatalog.ChildCatalogReferences);
SortSCSObjectsByPMOrder(CatalogList);
IsGroupByCompType := IntToBool(AReportItemParamValues.CanGroupByCompType);
IsProjOrder := IntToBool(AReportItemParamValues.CanAsPlacingInProj);
BeginProgress(pcPreparingReport);
try
FCatalog := ACatalog;
if IsProjOrder then
begin
for i := 0 to CatalogList.Count - 1 do
begin
SCSCatalog := CatalogList[i];
if (SCSCatalog.ItemType = itList) and (SCSCatalog is TSCSList) then
begin
SCSList := TSCSList(SCSCatalog);
IsLoadedMaster := false;
for j := 0 to SCSList.ChildCatalogs.Count - 1 do
begin
SCSCatalog := SCSList.ChildCatalogs[j];
if SCSCatalog.ItemType = itRoom then
begin
SCSRoom := SCSCatalog;
IsLoadedMaster := false;
// Îáúåêòû êàáèíåòà
for k := 0 to SCSRoom.ChildCatalogs.Count - 1 do
begin
SCSObject := SCSRoom.ChildCatalogs[k];
SCSObject.ReloadComponentReferences;
// Êîìïîíåíòû êàáèíåòà
for l := 0 to SCSObject.ComponentReferences.Count - 1 do
begin
SCSComponent := SCSObject.ComponentReferences[l];
if CheckCanLookComponInReportRsrc(SCSComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
SetComponDataToMemTable;
end;
end;
end;
end;
// Îáúåêòû Ëèñòà
for j := 0 to SCSList.ChildCatalogs.Count - 1 do
begin
SCSObject := SCSList.ChildCatalogs[j];
if IsSCSObjectItemType(SCSObject.ItemType) then
begin
SCSObject.ReloadComponentReferences;
// Êîìïîíåíòû ëèñòà
IsLoadedMaster := false;
SCSRoom := nil;
for k := 0 to SCSObject.ComponentReferences.Count - 1 do
begin
SCSComponent := SCSObject.ComponentReferences[k];
if CheckCanLookComponInReportRsrc(SCSComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
SetComponDataToMemTable;
end;
end;
end;
end;
end;
// Ñîðòèðîâêà
mtRep.First;
while Not mtRep.Eof do
begin
if IsGroupByCompType then
mtRepDetail.SortOn(fnName, []);
mtRepDetail.First;
while Not mtRepDetail.Eof do
begin
mtRepSubDetail.SortOn(fnMarkID, [mtcoNonMaintained]);
mtRepDetail.Next;
end;
mtRep.Next;
end;
end
else
begin
LookedWholeIDs := TIntList.Create;
// Ñîçäàåì ñïèñîê ëèñòîâ êàáèíåòîâ: Â ñòðèíãàõ áåäåò ñèãíàòóðà äëÿ ñîðòèðîâêè, à â îáúåêòàõ èíäåêñû ëèñòà è êîìíàòû
ComponLists := TStringList.Create;
MaxListNumLength := 0;
MaxRoomNumLength := 0;
IsLoadedMaster := false;
for i := 0 to ACatalog.ComponentReferences.Count - 1 do
begin
SCSComponent := ACatalog.ComponentReferences[i];
if CheckCanLookComponInReportRsrc(SCSComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
if (SCSComponent.Whole_ID = 0) or (LookedWholeIDs.IndexOf(SCSComponent.Whole_ID) = -1) then
begin
if Not IsLoadedMaster then
begin
mtRep.Append;
mtRep.Post;
IsLoadedMaster := true;
end;
// Ïîèñê òèïà êîìïíåíòà
IsFindedCompType := false;
if (Not IsGroupByCompType and mtRepDetail.Locate(fnGuidComponentType, '', [])) or
(IsGroupByCompType and mtRepDetail.Locate(fnGuidComponentType, SCSComponent.GUIDComponentType, [])) then
IsFindedCompType := true;
if Not IsFindedCompType then
begin
mtRepDetail.Append;
if IsGroupByCompType then
begin
mtRepDetail.FieldByName(fnGuidComponentType).AsString := SCSComponent.GUIDComponentType;
mtRepDetail.FieldByName(fnName).AsString := SCSComponent.ComponentType.NamePlural;
end
else
mtRepDetail.FieldByName(fnGuidComponentType).AsString := '';
mtRepDetail.Post;
end;
mtRepSubDetail.Append;
mtRepSubDetail.FieldByName(fnFloor).AsString := '';
mtRepSubDetail.FieldByName(fnRoomNum).AsString := '';
if SCSComponent.Whole_ID = 0 then
begin
SCSList := SCSComponent.GetListOwner;
SCSRoom := nil;
SCSCatalog := SCSComponent.GetFirstParentCatalog;
if SCSCatalog <> nil then
SCSRoom := SCSCatalog.GetParentCatalogByItemType(itRoom);
if SCSList <> nil then
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(SCSList.MarkID);
if SCSRoom <> nil then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(SCSRoom.MarkID);
end;
mtRepSubDetail.FieldByName(fnMarkID).AsInteger := SCSComponent.MarkID;
mtRepSubDetail.FieldByName(fnName).AsString := SCSComponent.Name;
mtRepSubDetail.FieldByName(fnNameMark).AsString := SCSComponent.NameMark;
mtRepSubDetail.FieldByName(fnIDComponent).AsInteger := SCSComponent.ID;
mtRepSubDetail.FieldByName(fnObjectAddress).AsInteger := Integer(SCSComponent);
mtRepSubDetail.FieldByName(fnWholeID).AsInteger := SCSComponent.Whole_ID;
mtRepSubDetail.Post;
if SCSComponent.Whole_ID <> 0 then
begin
for j := 0 to ACatalog.ComponentReferences.Count - 1 do
begin
PartSCSComponent := ACatalog.ComponentReferences[j];
if PartSCSComponent.Whole_ID = SCSComponent.Whole_ID then
begin
SCSList := PartSCSComponent.GetListOwner;
SCSRoom := nil;
RoomMarkID := 0;
SCSCatalog := PartSCSComponent.GetFirstParentCatalog;
if SCSCatalog <> nil then
SCSRoom := SCSCatalog.GetParentCatalogByItemType(itRoom);
if SCSRoom <> nil then
RoomMarkID := SCSRoom.MarkID;
FindedListRoom := false;
for k := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[k]);
if (ptrTwoID.ID1 = SCSList.MarkID) and (ptrTwoID.ID2 = RoomMarkID) then
begin
FindedListRoom := true;
Break; //// BREAK ////
end;
end;
if Not FindedListRoom then
begin
GetZeroMem(ptrTwoID, SizeOf(TTwoID));
ptrTwoID.ID1 := SCSList.MarkID;
if Length(IntToStr(SCSList.MarkID)) > MaxListNumLength then
MaxListNumLength := Length(IntToStr(SCSList.MarkID));
if SCSRoom <> nil then
begin
ptrTwoID.ID2 := SCSRoom.MarkID;
if Length(IntToStr(SCSRoom.MarkID)) > MaxRoomNumLength then
MaxRoomNumLength := Length(IntToStr(SCSRoom.MarkID));
end;
ComponLists.AddObject('', TObject(ptrTwoID));
end;
end;
end;
// Ïðîñòàâèòü â ñòðèíãå ñèãíàòóðû äëÿ ñîðòèðîâêè
for j := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[j]);
if ptrTwoID.ID2 <> 0 then
ComponLists[j] := IntToStrF(ptrTwoID.ID1, MaxListNumLength)+'-'+IntToStrF(ptrTwoID.ID2, MaxRoomNumLength)
else
ComponLists[j] := IntToStrF(ptrTwoID.ID1, MaxListNumLength)+'-'+DupStr('X', MaxRoomNumLength);
end;
ComponLists.Sort;
// Âíîñèì íîìåðà
if ComponLists.Count > 0 then
begin
// Ýêîíîìèì ñòðîêè
ptrTwoID := Pointer(ComponLists.Objects[0]);
mtRepSubDetail.Edit;
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(ptrTwoID.ID1);
if ptrTwoID.ID2 <> 0 then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(ptrTwoID.ID2);
mtRepSubDetail.Post;
// Äîáàâëÿåì íîâûå ñòðîêè ñ íîìåðàìè ëèñòîâ è êàáèíåòîâ
for j := 1 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[j]);
IsInsertedRecord := false;
mtRepSubDetail.Append;
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(ptrTwoID.ID1);
if ptrTwoID.ID2 <> 0 then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(ptrTwoID.ID2);
mtRepSubDetail.FieldByName(fnMarkID).AsInteger := SCSComponent.MarkID;
mtRepSubDetail.FieldByName(fnName).AsString := SCSComponent.Name;
mtRepSubDetail.FieldByName(fnNameMark).AsString := SCSComponent.NameMark;
mtRepSubDetail.FieldByName(fnIDComponent).AsInteger := SCSComponent.ID;
mtRepSubDetail.Post;
end;
end;
// Î÷èñòèòü ñïèñîê ëèñòîâ / êîìíàò
for j := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[j]);
FreeMem(ptrTwoID);
end;
ComponLists.Clear;
end;
if SCSComponent.Whole_ID <> 0 then
LookedWholeIDs.Add(SCSComponent.Whole_ID);
end;
end;
if mtRep.RecordCount > 0 then
begin
// Ñîðòîíóòü âñå íàõ
if IsGroupByCompType then
mtRepDetail.SortOn(fnName, []);
mtRepDetail.First;
while Not mtRepDetail.Eof do
begin
{//mtRepSubDetail.SortOn(fnMarkID, []);
mtRepSubDetail.SortFields := fnMarkID+';'+fnFloor+';'+fnRoomNum;
mtRepSubDetail.Sort([]);
//mtRepSubDetail.inSortFields := '';}
SortMemTableByParams(mtRepSubDetail, AParams, AReportItemParamValues);
mtRepDetail.Next;
end;
//SortMemTableByParams(mtRepSubDetail, AParams, AReportItemParamValues);
{
// Äëÿ êàáåëåé ïîäãðóçèòü âñå íîìåðà ëèñòîâ è êîìíàò ÷åðåç êîòîðûå îí ïðîõîäèò
mtRepDetail.First;
while Not mtRepDetail.Eof do
begin
mtRepSubDetail.First;
RecordCount := mtRepSubDetail.RecordCount;
RecNo := mtRepSubDetail.RecNo;
while RecNo < RecordCount do //while Not mtRepSubDetail.Eof do
begin
if mtRepSubDetail.FieldByName(fnWholeID).AsInteger <> 0 then
begin
// Çàãðóçèòü ñïèñîê ñ íîìåðàìè
SCSComponent := TSCSComponent(mtRepSubDetail.FieldByName(fnObjectAddress).AsInteger);
if SCSComponent = nil then
Continue; //// CONTINUE ////
for i := 0 to ACatalog.ComponentReferences.Count - 1 do
begin
PartSCSComponent := ACatalog.ComponentReferences[i];
if PartSCSComponent.Whole_ID = SCSComponent.Whole_ID then
begin
SCSList := PartSCSComponent.GetListOwner;
SCSRoom := nil;
RoomMarkID := 0;
SCSCatalog := PartSCSComponent.GetFirstParentCatalog;
if SCSCatalog <> nil then
SCSRoom := SCSCatalog.GetParentCatalogByItemType(itRoom);
if SCSRoom <> nil then
RoomMarkID := SCSRoom.MarkID;
FindedListRoom := false;
for j := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[j]);
if (ptrTwoID.ID1 = SCSList.MarkID) and (ptrTwoID.ID2 = RoomMarkID) then
begin
FindedListRoom := true;
Break; //// BREAK ////
end;
end;
if Not FindedListRoom then
begin
GetZeroMem(ptrTwoID, SizeOf(TTwoID));
ptrTwoID.ID1 := SCSList.MarkID;
if Length(IntToStr(SCSList.MarkID)) > MaxListNumLength then
MaxListNumLength := Length(IntToStr(SCSList.MarkID));
if SCSRoom <> nil then
begin
ptrTwoID.ID2 := SCSRoom.MarkID;
if Length(IntToStr(SCSRoom.MarkID)) > MaxRoomNumLength then
MaxRoomNumLength := Length(IntToStr(SCSRoom.MarkID));
end;
ComponLists.AddObject('', TObject(ptrTwoID));
end;
end;
end;
// Ïðîñòàâèòü â ñòðèíãå ñèãíàòóðû äëÿ ñîðòèðîâêè
for i := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[i]);
if ptrTwoID.ID2 <> 0 then
ComponLists[i] := IntToStrF(ptrTwoID.ID1, MaxListNumLength)+'-'+IntToStrF(ptrTwoID.ID2, MaxRoomNumLength)
else
ComponLists[i] := IntToStrF(ptrTwoID.ID1, MaxListNumLength)+'-'+DupStr('X', MaxRoomNumLength);
end;
ComponLists.Sort;
// Âíîñèì íîìåðà
if ComponLists.Count > 0 then
begin
// Ýêîíîìèì ñòðîêè
ptrTwoID := Pointer(ComponLists.Objects[0]);
mtRepSubDetail.Edit;
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(ptrTwoID.ID1);
if ptrTwoID.ID2 <> 0 then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(ptrTwoID.ID2);
mtRepSubDetail.Post;
// Äîáàâëÿåì íîâûå ñòðîêè ñ íîìåðàìè ëèñòîâ è êàáèíåòîâ
for i := 1 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[i]);
IsInsertedRecord := false;
if mtRepSubDetail.Eof then
mtRepSubDetail.Append
else
begin
mtRepSubDetail.Next;
mtRepSubDetail.Insert;
IsInsertedRecord := true;
end;
if mtRepSubDetail.State <> dsBrowse then
begin
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(ptrTwoID.ID1);
if ptrTwoID.ID2 <> 0 then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(ptrTwoID.ID2);
mtRepSubDetail.FieldByName(fnMarkID).AsInteger := SCSComponent.MarkID;
mtRepSubDetail.FieldByName(fnName).AsString := SCSComponent.Name;
mtRepSubDetail.FieldByName(fnNameMark).AsString := SCSComponent.NameMark;
mtRepSubDetail.FieldByName(fnIDComponent).AsInteger := SCSComponent.ID;
mtRepSubDetail.Post;
//if IsInsertedRecord then
// mtRepSubDetail.Prior;
end;
end;
end;
// Î÷èñòèòü ñïèñîê ëèñòîâ / êîìíàò
for i := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[i]);
FreeMem(ptrTwoID);
end;
ComponLists.Clear;
end;
mtRepSubDetail.Next;
RecNo := RecNo + 1;
end;
mtRepDetail.Next;
end;}
end;
FreeAndNil(ComponLists);
FreeAndNil(LookedWholeIDs);
end;
finally
EndProgress;
end;
FreeAndNil(CatalogList);
GFormMode := fmRExplicationComponent;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ShowExplicationComponent', E.Message);
end;
//DisconnectDetailMemTable(mtRepSubDetail);
//DisconnectDetailMemTable(mtRepDetail);
//ClearFieldsInMemTable(mtRepSubDetail, nil);
//ClearFieldsInMemTable(mtRepDetail, nil);
//ClearFieldsInMemTable(mtRep, nil);
end;
// Îò÷åò "Ýêñïëèêàöèÿ êîìïîíåíòîâ"
procedure TF_ResourceReport.ShowExplicationComponent(ACatalog: TSCSCatalog; AParams: TReportItemParams;
AReportItemParamValues: TReportItemParams;ACanHaveActiveComponents, ACanHaveDismountAccount, AComponsWithZeroPrice,
ACanRoundValue, ACanHaveSupplyValue, ACanShowKabinet, ACanShowObjHierarchy, ACanGroupByName: Boolean);
var
CanHaveActiveComponents: Boolean;
CanHaveDismountAccount: Boolean;
CanHaveComponensWithZeroPrice : Boolean;
CatalogList: TSCSCatalogs;
SCSCatalog: TSCSCatalog;
SCSList: TSCSList;
SCSRoom: TSCSCatalog;
SCSObject: TSCSCatalog;
TopComponent,ParentComponent, SCSComponent: TSCSComponent;
ParentCatalog : TSCSCatalog;
PartSCSComponent: TSCSComponent;
// Added by Tolik
NormResources: TSCSNormsResources;
ResourceRel: TSCSResourceRel;
ResourceCompon: TSCSComponent;
SprSuppliesKind: TNBSuppliesKind;
ProjectOwner: TSCSProject;
OldTick, CurrTick: Cardinal;
Price,Cost,Kolvo: Double; // öåíà, ñòîèìîñòü, êîëè÷åñòâî - äëÿ êîìïîíåíòû
//***************************************
LookedWholeIDs: TIntList;
IsLoadedMaster: Boolean;
IsLoadedSubMaster: Boolean;
IsFindedCompType: Boolean;
ComponLists: TStringList;
ptrTwoID: PTwoID;
MaxListNumLength: Integer;
MaxRoomNumLength: Integer;
RoomMarkID: Integer;
FindedListRoom: Boolean;
IsInsertedRecord: Boolean;
RecordCount: Integer;
RecNo: Integer;
IsGroupByCompType: Boolean;
//added by Tolik
IsCanShowKabinet: Boolean;
IsCanShowObjHierarchy: Boolean;
IsCanGroupByName: Boolean;
IsAddedString: Boolean;
//
IsProjOrder: Boolean;
i, j, k, l: Integer;
mtRep: TkbmMemTable;
mtRepDetail: TkbmMemTable;
mtRepSubDetail: TkbmMemTable;
//added by Tolik
ListHasComponents: boolean; // ôëàæîê äëÿ ïðîâåðêè íàëè÷èÿ êîìïîíåíòîâ íà ëèñòå (Tolik)
VirtualRoom: TSCSCatalog; // êàáèíåò äëÿ "áåçêàáèíåòíûõ" êîìïîíåíòîâ
CompNameWithParents: string;
//****************************************************************************************
// ************************ Added by Tolik Ïðîöåäóðà ïîèñêà è âû÷èñëåíèÿ öåíû è ñòîèìîñòè êîìïîíåíòû ***********************************
Procedure FindResourcesForComponent(Component: TSCSComponent; ComponName: string; ComponPrice: double; ComponLength: double; aIsLine: Boolean);
Var
i: integer;
IsFoundResource: boolean;
ExpenseForMetr_L: double;
Begin
IsFoundResource := false;
ComponPrice := RoundX(ComponPrice, FPricePrecision);
for i := 0 to NormResources.Resources.Count - 1 do
begin
if Not Assigned(ResourceRel) then
ResourceRel := TSCSResourceRel.Create(GForm, ntProj);
ResourceRel.Assign(NormResources.Resources[i]);
if ResourceRel.Name = ComponName then
begin
ResourceRel.Price := RoundX(ResourceRel.Price, FPricePrecision);
if ResourceRel.Price = ComponPrice then
begin
//Åñëè êîìïîíåíòà íå ëèíåéíàÿ òî êîëè÷åñòâî =1, åñëè íåò = äëèíà êîìïîíåíòû
//if ComponLength = 0 then
// ResourceRel.Kolvo := 1
//else
// ResourceRel.Kolvo := ComponLength;
//if Not aIsLine then
// ResourceRel.Kolvo := 1
//else
// ResourceRel.Kolvo := ComponLength;
if Not aIsLine then
begin
ResourceRel.Kolvo := 1;
// Åñëè ðåñóðñ, òî áåðåì êîëè÷åñòâî ýòîãî ðåñóðñà èç ïîëÿ Length
//if ComponsFromResources.IndexOf(Component) <> -1 then
// ResourceRel.Kolvo := Component.Length;
if ((Component.ComponentType.SysName = ctsnCableChannelAccessory) or
(Component.ComponentType.SysName = ctsnAccessory)) then
begin
ExpenseForMetr_L := Component.GetPropertyValueAsFloat(pnExpenseForMetr);
if ExpenseForMetr_L > 0 then
begin
ResourceRel.Kolvo := Round(Component.Length * ExpenseForMetr_L);
end
end;
end
else
begin
// Ðàñõîä íà åä.äëèíû
ExpenseForMetr_L := Component.GetPropertyValueAsFloat(pnExpenseForMetr);
if ExpenseForMetr_L > 0 then
begin
ResourceRel.Kolvo := Round(Component.Length * ExpenseForMetr_L);
end
else
ResourceRel.Kolvo := ComponLength; // RoundCP(Component.Length);
end;
//Åñëè öåíà êîìïîíåíòû - 0 - äàëüøå íå ñ÷èòàåì
if ComponPrice = 0 then
begin
//if Not aIsLine then
// ResourceRel.Kolvo := 1
//else
// ResourceRel.Kolvo := ComponLength;
ResourceRel.Price := 0;
ResourceRel.Cost := 0;
break;
end;
ResourceCompon := nil;
if Not NormResources.Resources[i].ServIsResource then
if TSCSResourceGroup(NormResources.Resources[i]).ObjectList.Count > 0 then
if TSCSResourceGroup(NormResources.Resources[i]).ObjectList[0] is TSCSComponent then
begin
ResourceCompon := TSCSComponent(TSCSResourceGroup(NormResources.Resources[i]).ObjectList[0]);
end;
if ResourceCompon <> nil then
begin
SprSuppliesKind := nil;
if ACanHaveSupplyValue then
if NormResources.Resources[i].GUIDSuppliesKind <> '' then
SprSuppliesKind := ProjectOwner.Spravochnik.GetSuppliesKindByGUID(NormResources.Resources[i].GUIDSuppliesKind);
//*** Ó÷èòûâàòü ïîñòàâî÷íûå âåëè÷èíû
if SprSuppliesKind <> nil then
begin
if CheckIsTradUOM(TF_Main(GForm).FUOM) then
begin
ResourceRel.Izm := SprSuppliesKind.Data.NameTradUOM;
if CheckPriceTransformToUOMByCompType(@ResourceCompon.ComponentType) then
begin
// Äëÿ êàáåëåé è êàíàëîâ â òðàäèöèîííîé ñèñòåìû ÑØÀ íóæíî þçàòü ÔÓÒÛ
ResourceRel.Kolvo := FloatInUOM(ResourceRel.Kolvo, umMetr, umFoot) / SprSuppliesKind.Data.UnitKolvoTradUOM;
ResourceRel.Price := FloatInUOM(ResourceRel.Price, umFoot, umMetr) * SprSuppliesKind.Data.UnitKolvoTradUOM;
end
else
begin
ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvoTradUOM;
ResourceRel.Price := ResourceRel.Price * SprSuppliesKind.Data.UnitKolvoTradUOM;
end;
end
else
begin
ResourceRel.Izm := SprSuppliesKind.Data.Name;
ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvo;
ResourceRel.Price := ResourceRel.Price * SprSuppliesKind.Data.UnitKolvo;
end;
ResourceRel.CalcCost;
end
else
begin
if CheckPriceTransformToUOMByCompType(@ResourceCompon.ComponentType) then
begin
ResourceRel.Izm := GetNameUOM(TF_Main(GForm).FUOM, true);
if TF_Main(GForm).FUOM <> umMetr then
begin
ResourceRel.Kolvo := FloatInUOM(ResourceRel.Kolvo, umMetr, TF_Main(GForm).FUOM);
ResourceRel.Price := FloatInUOM(ResourceRel.Price, TF_Main(GForm).FUOM, umMetr);
ResourceRel.CalcCost;
end;
end;
end;
end;
//*** Ó÷èòûâàòü ôëàã îêðóãëåíèÿ â áîëüøóþ ñòîðîíó
if ACanRoundValue then
begin
ResourceRel.Kolvo := RoundUp(ResourceRel.Kolvo);
ResourceRel.CalcCost;
end;
IsFoundResource:=true;
break;
end;
if IsFoundResource then
break;
end;
if IsFoundResource then
break;
end;
if not IsFoundResource then
begin
ResourceRel.Cost := 0;
ResourceRel.Price := 0;
ResourceRel.Kolvo := 0;
end;
End;
// **********************************************************************************************
// ************************ Ïðîöåäóðà çàïèñè äàííûõ â òàáëèöû ***********************************
procedure SetComponDataToMemTable(ACanShowKabinet: boolean);
var
IsFindedCompType: Boolean;
IsCanShowKabinet: Boolean;
IsAddedString : Boolean;
markstring, s : string;
begin
IsCanShowKabinet := ACanShowKabinet;
Kolvo := RoundX(ResourceRel.Kolvo, FKolvoPrecision);
Price := RoundX(ResourceRel.Price, FPricePrecision);
//Cost := RoundX(Kolvo * Price, Max(FKolvoPrecision, FPricePrecision));
if ((FKolvoPrecision<4) and (FPricePrecision<4)) then
Cost := RoundX(Kolvo * Price, max(FKolvoPrecision, FPricePrecision))
else
Cost := RoundX(Kolvo * Price,4);
if Not IsLoadedMaster then
begin
mtRep.Append;
mtRep.FieldByName(fnFloor).AsString := IntToStr(SCSList.MarkID); //ýòàæ (ëèñò)
if SCSRoom <> nil then // åñëè êàáèíåò - äîáàâëÿåì íîìåð è íàçâàíèå â òàáëèöó
begin
// Added by Tolik
if SCSRoom.ID = 0 then
mtRep.FieldByName(fnRoomName).AsString := SCSRoom.Name // Íàçâàíèå êàáèíåòà
else
if SCSRoom.NameShort <> '' then
mtRep.FieldByName(fnRoomName).AsString := ' / ' + SCSRoom.Name + ' ' + SCSRoom.NameShort
else
mtRep.FieldByName(fnRoomName).AsString := ' / ' + SCSRoom.Name;
mtRep.FieldByName(fnRoomNum).AsString := IntToStr(SCSRoom.MarkID);
end
else
mtRep.FieldByName(fnRoomNum).AsString := '';
mtRep.Post;
IsLoadedMaster := true;
end;
// Ïîèñê òèïà êîìïíåíòû äëÿ òåêóøåãî êàáèíåòà
IsFindedCompType := false;
mtRepDetail.First;
while Not mtRepDetail.Eof do
begin
{ TODO NEW ïðîòåñòèòü è ïåðåñìîòðåòü êàêîå èç óñëîâèé ïðàâèëüíåå áóäåò ðàáîòàòü }
if (IsGroupByCompType and (mtRepDetail.FieldByName(fnGuidComponentType).AsString = SCSComponent.GUIDComponentType)) or
((Not IsGroupByCompType) and (mtRepDetail.FieldByName(fnGuidComponentType).AsString = '')) then
begin
//beep;
end;
if ((IsGroupByCompType or IsCanGroupByname) and
(mtRepDetail.FieldByName(fnGuidComponentType).AsString = SCSComponent.GUIDComponentType)) or
(((Not IsGroupByCompType) or IsCanGroupByName) and
(mtRepDetail.FieldByName(fnGuidComponentType).AsString = '')) then
begin
IsFindedCompType := true;
Break; //// BREAK ////
end;
mtRepDetail.Next;
end;
if Not IsFindedCompType then
begin
mtRepDetail.Append;
if SCSRoom.id = 0 then
mtRepDetail.FieldByName(fnRoomName).AsString := SCSRoom.Name
else
if SCSRoom.NameShort <> '' then
mtRepDetail.FieldByName(fnRoomName).AsString := ' / ' + SCSRoom.Name + ' ' + SCSRoom.NameShort
else
mtRepDetail.FieldByName(fnRoomName).AsString := ' / ' + SCSRoom.Name;
if IsGroupByCompType then
begin
mtRepDetail.FieldByName(fnGuidComponentType).AsString := SCSComponent.GUIDComponentType;
mtRepDetail.FieldByName(fnName).AsString := SCSComponent.ComponentType.NamePlural;
//added by Tolik
mtRepDetail.FieldByName(fnfloor).AsString := IntToStr(SCSList.MarkID);
end
else
mtRepDetail.FieldByName(fnGuidComponentType).AsString := '';
mtRepDetail.Post;
end;
{if IsCanShowKabinet or (not IsCanShowKabinet and ((SCSComponent.Whole_ID = 0) or Not mtRepSubDetail.Locate(fnWholeID, SCSComponent.Whole_ID, []))) then
}
IsAddedString := false;
if IsCanGroupByName then //çàäàíà ãðóïïèðîâêà îáúåêòîâ ïî íàèìåíîâàíèþ
begin
s:='...';
mtRepSubdetail.First;
while not mtRepsubDetail.Eof do
begin
if ((SCSComponent.Whole_ID <> 0) and (mtRepSubDetail.FieldValues[fnWholeID] = SCSComponent.Whole_ID) and
((mtRepSubDetail.Fieldvalues[fnName] = SCSComponent.Name) or
(mtRepSubDetail.Fieldvalues[fnName] = CompNameWithParents))
and (mtRepSubDetail.Fieldvalues[fnPrice] = price))
or
((SCSComponent.Whole_ID <> 0) and ((mtRepSubDetail.Fieldvalues[fnName] = SCSComponent.Name) or
(mtRepSubDetail.Fieldvalues[fnName] = CompNameWithParents)) and
(mtRepSubDetail.FieldValues[fnFloor] = Inttostr(SCSList.MarkId)) and
(mtRepSubDetail.FieldValues[fnPrice] = Price))
or
((SCSComponent.Whole_ID <> 0) and ((mtRepSubDetail.Fieldvalues[fnName] = SCSComponent.Name) or
(mtRepSubDetail.Fieldvalues[fnName] = CompNameWithParents)) and
(mtRepSubDetail.FieldValues[fnFloor] = Inttostr(SCSList.MarkId)) and
(mtRepSubDetail.FieldValues[fnRoomNum] = SCSRoom.MarkID) and
(mtRepSubDetail.FieldValues[fnPrice] = Price)) // ýòî êàáåëü
or // Êîìïîíåíòû
((SCSComponent.Whole_ID = 0) and ((mtRepSubDetail.Fieldvalues[fnName] = SCSComponent.Name) or
(mtRepSubDetail.Fieldvalues[fnName] = CompNameWithParents)) and
(mtRepSubDetail.FieldValues[fnFloor] = Inttostr(SCSList.MarkId)) and
(mtRepSubDetail.FieldValues[fnPrice] = Price) and
( mtRepSubDetail.FieldValues[fnRoomNum] = Inttostr(SCSRoom.MarkID)) and IsCanShowKabinet)
or
((SCSComponent.Whole_ID = 0) and (mtRepSubDetail.Fieldvalues[fnName] = SCSComponent.Name)
and (mtRepSubDetail.FieldValues[fnFloor] = Inttostr(SCSList.MarkId)) and
(mtRepSubDetail.FieldValues[fnPrice] = Price) and (not IsCanShowKabinet) and
(mtRepSubDetail.FieldValues[fnRoomNum] = inttostr(SCSRoom.MarkID))) then
begin
mtRepSubDetail.Edit;
mtRepSubDetail.FieldByName('KOLVO').AsFloat := mtRepSubDetail.FieldValues['KOLVO'] + kolvo;
//mtRepSubDetail.FieldByName('PRICE').AsFloat := mtRepSubDetail.FieldValues['PRICE'] + price;
//mtRepSubDetail.FieldByName('COST').AsFloat := mtRepSubDetail.FieldValues['COST'] + cost;
mtRepSubDetail.FieldByName('COST').AsFloat := mtRepSubDetail.FieldByName('COST').AsFloat + cost;
//if SCSComponent.Whole_ID = 0 then
//begin
mtRepSubDetail.FieldbyName(fnMarkID).asInteger := 0;
markstring := mtRepSubDetail.FieldValues[fnNameMark];
if Pos(s, markstring) = 0 then
mtRepSubDetail.FieldbyName(fnNameMark).AsString := markstring + s + SCSComponent.NameMark
else
begin
Delete(markstring, pos(s, markstring) + 1, (Length(markstring) - pos(s, markstring)));
mtRepSubDetail.FieldbyName(fnNameMark).AsString := markstring + s + SCSComponent.NameMark;
end;
//end;
mtRepSubDetail.Post;
IsAddedString := true;
break;
end;
mtRepSubDetail.Next;
end;
end;
if not IsAddedString then
begin
if ((FKolvoPrecision<4) and (FPricePrecision<4)) then
cost := RoundX(cost,max(FKolvoPrecision,FPricePrecision))
else cost := RoundX(cost,4);
mtRepSubDetail.Append;
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(SCSList.MarkID);
if SCSRoom <> nil then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(SCSRoom.MarkID)
else
mtRepSubDetail.FieldByName(fnRoomNum).AsString := '';
mtRepSubDetail.FieldByName(fnMarkID).AsInteger := SCSComponent.MarkID;
if not isCanShowObjHierarchy then
mtRepSubDetail.FieldByName(fnName).AsString := SCSComponent.Name
else
mtRepSubDetail.FieldByName(fnName).AsString := CompNameWithParents;
mtRepSubDetail.FieldByName(fnNameMark).AsString := SCSComponent.NameMark;
mtRepSubDetail.FieldByName(fnWholeID).AsInteger := SCSComponent.Whole_ID;
mtRepSubDetail.FieldByName(fnIzm).AsString := ResourceRel.Izm;
if SCSRoom.ID = 0 then
mtRepSubDetail.FieldByName(fnRoomName).AsString := SCSRoom.Name
else
if SCSRoom.NameShort <> '' then
mtRepSubDetail.FieldByName(fnRoomName).AsString := ' / ' + SCSRoom.Name + ' ' + SCSRoom.NameShort
else
mtRepSubDetail.FieldByName(fnRoomName).AsString := ' / ' + SCSRoom.Name;
mtRepSubDetail.FieldByName('Kolvo').AsFloat := Kolvo;
mtRepSubDetail.FieldByName('Price').AsFloat := Price;
mtRepSubDetail.FieldByName('Cost').AsFloat := Cost;
mtRepSubDetail.FieldByName('Notice').AsString := SCSComponent.Notice;
mtRepSubDetail.Post;
end;
CompNameWithParents := '';
end;
// ****************************************************************************************************************
begin
try
mtRep := FmtExplicationCompon;
mtRepDetail := FmtExplicationComponDetail;
mtRepSubDetail := FmtExplicationComponSubDetail;
DisconnectDetailMemTable(mtRepSubDetail);
DisconnectDetailMemTable(mtRepDetail);
ClearFieldsInMemTable(mtRepSubDetail, nil);
ClearFieldsInMemTable(mtRepDetail, nil);
ClearFieldsInMemTable(mtRep, nil);
// Äîáàâëåíèå îáùèõ ïàëåé
mtRep.FieldDefs.Add(fnID, ftAutoInc);
mtRep.FieldDefs.Add(fnFloor, ftString, 20);
mtRep.FieldDefs.Add(fnRoomNum, ftString, 20);
mtRep.FieldDefs.Add(fnMarkID, ftInteger);
mtRep.FieldDefs.Add(fnName, ftString, 255);
mtRep.FieldDefs.Add(fnNameMark, ftString, 255);
mtRep.FieldDefs.Add(fnRoomName, ftString, 255);
mtRepDetail.FieldDefs.Assign(mtRep.FieldDefs);
mtRepDetail.FieldDefs.Add(fnIDMaster, ftInteger);
mtRepSubDetail.FieldDefs.Assign(mtRepDetail.FieldDefs);
//**************************************************************
mtRep.FieldDefs.Add(fnGuidComponentType, ftString, cnstGUIDLength);
mtRepDetail.FieldDefs.Add(fnGuidComponentType, ftString, cnstGUIDLength);
mtRepSubDetail.FieldDefs.Add(fnIDComponent, ftInteger);
mtRepSubDetail.FieldDefs.Add(fnObjectAddress, ftInteger);
mtRepSubDetail.FieldDefs.Add(fnWholeID, ftInteger);
// Äîáàâëåíî by Tolik äëÿ ïîêàáèíåòíîé ýêñïëèêàöèè êîìïîíåíòîâ
mtRepSubDetail.FieldDefs.Add(fnIZM, ftString, 20);// åäèíèöû èçìåðåíèÿ
mtRepSubDetail.FieldDefs.Add(fnKolvo, ftFloat); // öåíà
mtRepSubDetail.FieldDefs.Add(fnPrice, ftFloat); // êîëè÷åñòâî
mtRepSubDetail.FieldDefs.Add(fnCost, FtFloat); // ñòîèìîñòü
//***************************************************************************************
mtRepSubDetail.FieldDefs.Add(fnNotice, FtString, 200); // ïðèìå÷àíèå
ConnectDetailMemTable(FdsrcExplicationCompon, mtRepDetail, fnID, fnIDMaster);
ConnectDetailMemTable(FdsrcExplicationComponDetail, mtRepSubDetail, fnID, fnIDMaster);
mtRep.Active := true;
mtRepDetail.Active := true;
mtRepSubDetail.Active := true;
CanHaveActiveComponents := IntToBool(AReportItemParamValues.CanHaveActiveComponents);
CanHaveDismountAccount := IntToBool(AReportItemParamValues.CanHaveDismountAccount);
CatalogList := TSCSCatalogs.Create(false);
CatalogList.Add(ACatalog);
CatalogList.AddItems(ACatalog.ChildCatalogReferences);
SortSCSObjectsByPMOrder(CatalogList);
IsGroupByCompType := IntToBool(AReportItemParamValues.CanGroupByCompType);
IsProjOrder := IntToBool(AReportItemParamValues.CanAsPlacingInProj);
IsCanShowKabinet := IntToBool(AReportItemParamValues.CanShowKabinet);
IsCanShowObjHierarchy := IntToBool(AReportItemParamValues.CanShowObjHierarchy);
IsCanGroupByName := IntToBool(AReportItemParamValues.CanGroupByName);
// **************** Ïåðåáîð è çàïèñü ýëåìåíòîâ ïðîåêòà â òàáëèöû (Begin)
BeginProgress(pcPreparingReport);
try
FCatalog := ACatalog;
ProjectOwner := FCatalog.GetProject;
NormResources := nil;
NormResources := ACatalog.GetAllNormsResources([nrResources, nrAccessories, nrComponents], false,
ACanHaveActiveComponents,
ACanHaveDismountAccount,
AComponsWithZeroPrice, false, true, ACanHaveSupplyValue);
isCanShowObjHierarchy := ACanShowObjHierarchy;
// Åñëè çàäàíî îòîáðàæàòü â ïîðÿäêå ðàçìåùåíèÿ
if IsProjOrder or IsCanShowKabinet then
begin
DefinePrecisions; // Óñòàíîâêà òî÷íîñòè âûâîäà öåíû è êîëè÷åñòâà
// Ïî óìîë÷àíèþ - 3 çíàêà, åñëè íå îïðåäåëåíî ïîëüçîâàòåëåì;
// Âñå êîìïîíåíòû ëèñòà, íå âõîäÿùèå íè â îäèí êàáèíåò, à íàõîäÿùèåñÿ íåïîñðåäñòâåííî íà ëèñòå,
// ñîáèðàåì â îòäåëüíûé êàáèíåò, äëÿ ÷åãî ñîçäàåì îòäåëüíûé êàáèíåò, åñëè òàêîâûå êîìïîíåíòû åñòü (Tolik)
for i := 0 to CatalogList.Count - 1 do
begin
SCSCatalog := CatalogList[i];
if (SCSCatalog.ItemType = itList) and (SCSCatalog is TSCSList) then
begin
SCSList := TSCSList(SCSCatalog);
// Added by Tolik ***************************************************
ListHasComponents := false;
//Èùåì êîìïîíåíòû íà ëèñòå
// Îáúåêòû Ëèñòà (îáúåêò - íå âñåãäà åñòü êîìïîíåíò)
for j := 0 to SCSList.ChildCatalogs.Count - 1 do
begin
SCSObject := SCSList.ChildCatalogs[j];
if IsSCSObjectItemType(SCSObject.ItemType) then
begin
SCSObject.ReloadComponentReferences;
// Êîìïîíåíòû ëèñòà
SCSRoom := nil;
for k := 0 to SCSObject.ComponentReferences.Count - 1 do
begin
SCSComponent := SCSObject.ComponentReferences[k];
if CheckCanLookComponInReportRsrc(SCSComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
begin
ListHasComponents := true;
break;
end;
end;
end;
if ListHasComponents then
break;
end;
end;
// Åñëè åñòü êîìïîíåíòû íà ëèñòå, ñîçäàåì äëÿ íèõ îòäåëüíûé êàáèíåò
if ListHasComponents then
begin
// Ñîçäàòü êàáèíåò
VirtualRoom := TSCSList.Create(F_ProjMan);
VirtualRoom.ItemType := itRoom;
VirtualRoom.ID := 0;
VirtualRoom.Name := cResourceReport_Msg45;
break;
end;
end;
// ******************************************* Tolik *************************************************************
for i := 0 to CatalogList.Count - 1 do
begin
SCSCatalog := CatalogList[i];
// Åñëè îáúåêò ñïèñêà - Ëèñò, òî âûáèðàåì èç íåãî êîìïîíåíòû äëÿ îò÷åòà
// â äâà ïðîõîäà ïî ñïèñêó
// â ïåðâîì - îòáèðàåì êîìïîíåíòû êàáèíåòîâ
// âî âòîðîì - îòáèðàåì êîìïîíåíòû ëèñòà
if (SCSCatalog.ItemType = itList) and (SCSCatalog is TSCSList) then
begin
SCSList := TSCSList(SCSCatalog);
IsLoadedMaster := false;
for j := 0 to SCSList.ChildCatalogs.Count - 1 do
begin
SCSCatalog := SCSList.ChildCatalogs[j];
if SCSCatalog.ItemType = itRoom then
begin
SCSRoom := SCSCatalog;
IsLoadedMaster := false;
// Îáúåêòû êàáèíåòà
for k := 0 to SCSRoom.ChildCatalogs.Count - 1 do
begin
SCSObject := SCSRoom.ChildCatalogs[k];
SCSObject.ReloadComponentReferences;
// Êîìïîíåíòû êàáèíåòà
for l := 0 to SCSObject.ComponentReferences.Count - 1 do
begin
SCSComponent := SCSObject.ComponentReferences[l];
if CheckCanLookComponInReportRsrc(SCSComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
begin
// Added by Tolik
if (SCSComponent.Price <> 0) or AComponsWithZeroPrice then
begin
if isCanShowObjHierarchy then
begin
CompNameWithParents := SCSComponent.Name;
TopComponent := nil;
if SCSComponent <> SCSComponent.GetTopComponent then
TopComponent := SCSComponent.GetTopComponent;
if ((TopComponent <> nil) and (SCSComponent.ChildReferences.Count = 0)) then
CompNameWithParents := TopComponent.Name + ' ' +
TopComponent.NameMark + ' / ' + CompNameWithParents;
CompNameWithParents := SCSObject.Name + ' ' + IntToStr(SCSObject.MarkID) + ' / ' + CompNameWithParents;
FindResourcesForComponent(SCSComponent, SCSComponent.Name, SCSComponent.Price, SCSComponent.Length, SCSComponent.Isline = biTrue);
SetComponDataToMemTable(ACanShowKabinet);
end
else
begin
FindResourcesForComponent(SCSComponent, SCSComponent.Name, SCSComponent.Price, SCSComponent.Length, SCSComponent.Isline = biTrue);
SetComponDataToMemTable(ACanShowKabinet);
end;
end;
end;
end;
end;
end;
end;
if IsCanShowKabinet then
IsLoadedMaster := false
else
begin
//comented by Igor else IsLoadedMaster:=true; // Added by Tolik
end;
// Îáúåêòû Ëèñòà
for j := 0 to SCSList.ChildCatalogs.Count - 1 do
begin
SCSObject := SCSList.ChildCatalogs[j];
if IsSCSObjectItemType(SCSObject.ItemType) then
begin
SCSObject.ReloadComponentReferences;
// Êîìïîíåíòû ëèñòà
// Commented by Tolik
// IsLoadedMaster := false;
SCSRoom := VirtualRoom;
for k := 0 to SCSObject.ComponentReferences.Count - 1 do
begin
SCSComponent := SCSObject.ComponentReferences[k];
if CheckCanLookComponInReportRsrc(SCSComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
begin
//Added by Tolik
if (SCSComponent.Price <> 0) or AComponsWithZeroPrice then
begin
if isCanShowObjHierarchy then
begin
CompNameWithParents:=SCSComponent.Name;
TopComponent := nil;
if SCSComponent <> SCSComponent.GetTopComponent then
TopComponent := SCSComponent.GetTopComponent;
if ((TopComponent<>nil) and (SCSComponent.ChildReferences.Count = 0)) then
CompNameWithParents := TopComponent.Name + ' ' +
TopComponent.NameMark + ' / ' + CompNameWithParents;
CompNameWithParents := SCSObject.Name + ' ' +IntToStr(SCSObject.MarkID) + ' / ' + CompNameWithParents;
FindResourcesForComponent(SCSComponent, SCSComponent.Name, SCSComponent.Price, SCSComponent.Length, SCSComponent.Isline = biTrue);
SetComponDataToMemTable(ACanShowKabinet);
end
else
begin
FindResourcesForComponent(SCSComponent, SCSComponent.Name,SCSComponent.Price, SCSComponent.Length, SCSComponent.Isline = biTrue);
SetComponDataToMemTable(ACanShowKabinet);
end;
end;
end;
///////////////////////////////////////////////
//IsLoadedMaster := true;
end;
end;
end;
end;
end;
// **************** Ïåðåáîð è çàïèñü ýëåìåíòîâ ïðîåêòà â òàáëèöû (End)
// Ñîðòèðîâêà äàííûõ â òàáëèöàõ
mtRep.First;
while Not mtRep.Eof do
begin
if IsGroupByCompType then
mtRepDetail.SortOn(fnName, []);
mtRepDetail.First;
while Not mtRepDetail.Eof do
begin
mtRepSubDetail.SortOn(fnMarkID, [mtcoNonMaintained]);
mtRepDetail.Next;
end;
mtRep.Next;
end;
end
else
begin
LookedWholeIDs := TIntList.Create;
// Ñîçäàåì ñïèñîê ëèñòîâ êàáèíåòîâ: Â ñòðèíãàõ áóäåò ñèãíàòóðà äëÿ ñîðòèðîâêè, à â îáúåêòàõ èíäåêñû ëèñòà è êîìíàòû
ComponLists := TStringList.Create;
MaxListNumLength := 0;
MaxRoomNumLength := 0;
IsLoadedMaster := false;
for i := 0 to ACatalog.ComponentReferences.Count - 1 do
begin
SCSComponent := ACatalog.ComponentReferences[i];
if CheckCanLookComponInReportRsrc(SCSComponent, CanHaveActiveComponents, CanHaveDismountAccount) then
begin
if (SCSComponent.Whole_ID = 0) or (LookedWholeIDs.IndexOf(SCSComponent.Whole_ID) = -1) then
begin
if Not IsLoadedMaster then
begin
mtRep.Append;
mtRep.Post;
IsLoadedMaster := true;
end;
// Ïîèñê òèïà êîìïíåíòà
IsFindedCompType := false;
if (Not IsGroupByCompType and mtRepDetail.Locate(fnGuidComponentType, '', [])) or
(IsGroupByCompType and mtRepDetail.Locate(fnGuidComponentType, SCSComponent.GUIDComponentType, [])) then
IsFindedCompType := true;
if Not IsFindedCompType then
begin
mtRepDetail.Append;
if IsGroupByCompType then
begin
mtRepDetail.FieldByName(fnGuidComponentType).AsString := SCSComponent.GUIDComponentType;
mtRepDetail.FieldByName(fnName).AsString := SCSComponent.ComponentType.NamePlural;
end
else
mtRepDetail.FieldByName(fnGuidComponentType).AsString := '';
mtRepDetail.Post;
end;
mtRepSubDetail.Append;
mtRepSubDetail.FieldByName(fnFloor).AsString := '';
mtRepSubDetail.FieldByName(fnRoomNum).AsString := '';
if SCSComponent.Whole_ID = 0 then
begin
SCSList := SCSComponent.GetListOwner;
SCSRoom := nil;
SCSCatalog := SCSComponent.GetFirstParentCatalog;
if SCSCatalog <> nil then
SCSRoom := SCSCatalog.GetParentCatalogByItemType(itRoom);
if SCSList <> nil then
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(SCSList.MarkID)
//Tolik
else
mtRepSubDetail.FieldByName(fnFloor).AsString := '0';
//
if SCSRoom <> nil then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(SCSRoom.MarkID);
end;
mtRepSubDetail.FieldByName(fnMarkID).AsInteger := SCSComponent.MarkID;
mtRepSubDetail.FieldByName(fnName).AsString := SCSComponent.Name;
mtRepSubDetail.FieldByName(fnNameMark).AsString := SCSComponent.NameMark;
mtRepSubDetail.FieldByName(fnIDComponent).AsInteger := SCSComponent.ID;
mtRepSubDetail.FieldByName(fnObjectAddress).AsInteger := Integer(SCSComponent);
mtRepSubDetail.FieldByName(fnWholeID).AsInteger := SCSComponent.Whole_ID;
mtRepSubDetail.Post;
if SCSComponent.Whole_ID <> 0 then
begin
for j := 0 to ACatalog.ComponentReferences.Count - 1 do
begin
PartSCSComponent := ACatalog.ComponentReferences[j];
if PartSCSComponent.Whole_ID = SCSComponent.Whole_ID then
begin
SCSList := PartSCSComponent.GetListOwner;
SCSRoom := nil;
RoomMarkID := 0;
SCSCatalog := PartSCSComponent.GetFirstParentCatalog;
if SCSCatalog <> nil then
SCSRoom := SCSCatalog.GetParentCatalogByItemType(itRoom);
if SCSRoom <> nil then
RoomMarkID := SCSRoom.MarkID;
FindedListRoom := false;
for k := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[k]);
if (ptrTwoID.ID1 = SCSList.MarkID) and (ptrTwoID.ID2 = RoomMarkID) then
begin
FindedListRoom := true;
Break; //// BREAK ////
end;
end;
if Not FindedListRoom then
begin
GetZeroMem(ptrTwoID, SizeOf(TTwoID));
ptrTwoID.ID1 := SCSList.MarkID;
if Length(IntToStr(SCSList.MarkID)) > MaxListNumLength then
MaxListNumLength := Length(IntToStr(SCSList.MarkID));
if SCSRoom <> nil then
begin
ptrTwoID.ID2 := SCSRoom.MarkID;
if Length(IntToStr(SCSRoom.MarkID)) > MaxRoomNumLength then
MaxRoomNumLength := Length(IntToStr(SCSRoom.MarkID));
end;
ComponLists.AddObject('', TObject(ptrTwoID));
end;
end;
end;
// Ïðîñòàâèòü â ñòðèíãå ñèãíàòóðû äëÿ ñîðòèðîâêè
for j := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[j]);
if ptrTwoID.ID2 <> 0 then
ComponLists[j] := IntToStrF(ptrTwoID.ID1, MaxListNumLength)+'-'+IntToStrF(ptrTwoID.ID2, MaxRoomNumLength)
else
ComponLists[j] := IntToStrF(ptrTwoID.ID1, MaxListNumLength)+'-'+DupStr('X', MaxRoomNumLength);
end;
ComponLists.Sort;
// Âíîñèì íîìåðà
if ComponLists.Count > 0 then
begin
// Ýêîíîìèì ñòðîêè
ptrTwoID := Pointer(ComponLists.Objects[0]);
mtRepSubDetail.Edit;
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(ptrTwoID.ID1);
if ptrTwoID.ID2 <> 0 then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(ptrTwoID.ID2)
// Tolik
else mtRepSubDetail.FieldByName(fnRoomNum).AsString :='0';
mtRepSubDetail.Post;
// Äîáàâëÿåì íîâûå ñòðîêè ñ íîìåðàìè ëèñòîâ è êàáèíåòîâ
for j := 1 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[j]);
IsInsertedRecord := false;
mtRepSubDetail.Append;
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(ptrTwoID.ID1);
if ptrTwoID.ID2 <> 0 then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(ptrTwoID.ID2)
//Tolik
else mtRepSubDetail.FieldByName(fnRoomNum).AsString :='0';
mtRepSubDetail.FieldByName(fnMarkID).AsInteger := SCSComponent.MarkID;
mtRepSubDetail.FieldByName(fnName).AsString := SCSComponent.Name;
mtRepSubDetail.FieldByName(fnNameMark).AsString := SCSComponent.NameMark;
mtRepSubDetail.FieldByName(fnIDComponent).AsInteger := SCSComponent.ID;
mtRepSubDetail.Post;
end;
end;
// Î÷èñòèòü ñïèñîê ëèñòîâ / êîìíàò
for j := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[j]);
FreeMem(ptrTwoID);
end;
ComponLists.Clear;
end;
if SCSComponent.Whole_ID <> 0 then
LookedWholeIDs.Add(SCSComponent.Whole_ID);
end;
end;
end;
{mtRep.SortOn('fnfloor,fnroomnum,fnGuidComponentType',[]);
mtRepDetail.SortOn('fnfloor,fnroomnum,fnGuidComponentType',[]);
mtRepDetail.SortOn('fnfloor,fnroomnum,fnMarkId,fnNameMark,fnidcomponent',[]);
}
//mtRepSubdetail.SortOn('',[]);
if mtRep.RecordCount > 0 then
begin
// Ñîðòîíóòü âñå íàõ
if IsGroupByCompType then
mtRepDetail.SortOn(fnName, []);
mtRepDetail.First;
while Not mtRepDetail.Eof do
begin
{//mtRepSubDetail.SortOn(fnMarkID, []);
mtRepSubDetail.SortFields := fnMarkID+';'+fnFloor+';'+fnRoomNum;
mtRepSubDetail.Sort([]);
//mtRepSubDetail.inSortFields := '';}
SortMemTableByParams(mtRepSubDetail, AParams, AReportItemParamValues);
mtRepDetail.Next;
end;
//SortMemTableByParams(mtRepSubDetail, AParams, AReportItemParamValues);
{
// Äëÿ êàáåëåé ïîäãðóçèòü âñå íîìåðà ëèñòîâ è êîìíàò ÷åðåç êîòîðûå îí ïðîõîäèò
mtRepDetail.First;
while Not mtRepDetail.Eof do
begin
mtRepSubDetail.First;
RecordCount := mtRepSubDetail.RecordCount;
RecNo := mtRepSubDetail.RecNo;
while RecNo < RecordCount do //while Not mtRepSubDetail.Eof do
begin
if mtRepSubDetail.FieldByName(fnWholeID).AsInteger <> 0 then
begin
// Çàãðóçèòü ñïèñîê ñ íîìåðàìè
SCSComponent := TSCSComponent(mtRepSubDetail.FieldByName(fnObjectAddress).AsInteger);
if SCSComponent = nil then
Continue; //// CONTINUE ////
for i := 0 to ACatalog.ComponentReferences.Count - 1 do
begin
PartSCSComponent := ACatalog.ComponentReferences[i];
if PartSCSComponent.Whole_ID = SCSComponent.Whole_ID then
begin
SCSList := PartSCSComponent.GetListOwner;
SCSRoom := nil;
RoomMarkID := 0;
SCSCatalog := PartSCSComponent.GetFirstParentCatalog;
if SCSCatalog <> nil then
SCSRoom := SCSCatalog.GetParentCatalogByItemType(itRoom);
if SCSRoom <> nil then
RoomMarkID := SCSRoom.MarkID;
FindedListRoom := false;
for j := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[j]);
if (ptrTwoID.ID1 = SCSList.MarkID) and (ptrTwoID.ID2 = RoomMarkID) then
begin
FindedListRoom := true;
Break; //// BREAK ////
end;
end;
if Not FindedListRoom then
begin
GetZeroMem(ptrTwoID, SizeOf(TTwoID));
ptrTwoID.ID1 := SCSList.MarkID;
if Length(IntToStr(SCSList.MarkID)) > MaxListNumLength then
MaxListNumLength := Length(IntToStr(SCSList.MarkID));
if SCSRoom <> nil then
begin
ptrTwoID.ID2 := SCSRoom.MarkID;
if Length(IntToStr(SCSRoom.MarkID)) > MaxRoomNumLength then
MaxRoomNumLength := Length(IntToStr(SCSRoom.MarkID));
end;
ComponLists.AddObject('', TObject(ptrTwoID));
end;
end;
end;
// Ïðîñòàâèòü â ñòðèíãå ñèãíàòóðû äëÿ ñîðòèðîâêè
for i := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[i]);
if ptrTwoID.ID2 <> 0 then
ComponLists[i] := IntToStrF(ptrTwoID.ID1, MaxListNumLength)+'-'+IntToStrF(ptrTwoID.ID2, MaxRoomNumLength)
else
ComponLists[i] := IntToStrF(ptrTwoID.ID1, MaxListNumLength)+'-'+DupStr('X', MaxRoomNumLength);
end;
ComponLists.Sort;
// Âíîñèì íîìåðà
if ComponLists.Count > 0 then
begin
// Ýêîíîìèì ñòðîêè
ptrTwoID := Pointer(ComponLists.Objects[0]);
mtRepSubDetail.Edit;
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(ptrTwoID.ID1);
if ptrTwoID.ID2 <> 0 then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(ptrTwoID.ID2);
mtRepSubDetail.Post;
// Äîáàâëÿåì íîâûå ñòðîêè ñ íîìåðàìè ëèñòîâ è êàáèíåòîâ
for i := 1 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[i]);
IsInsertedRecord := false;
if mtRepSubDetail.Eof then
mtRepSubDetail.Append
else
begin
mtRepSubDetail.Next;
mtRepSubDetail.Insert;
IsInsertedRecord := true;
end;
if mtRepSubDetail.State <> dsBrowse then
begin
mtRepSubDetail.FieldByName(fnFloor).AsString := IntToStr(ptrTwoID.ID1);
if ptrTwoID.ID2 <> 0 then
mtRepSubDetail.FieldByName(fnRoomNum).AsString := IntToStr(ptrTwoID.ID2);
mtRepSubDetail.FieldByName(fnMarkID).AsInteger := SCSComponent.MarkID;
mtRepSubDetail.FieldByName(fnName).AsString := SCSComponent.Name;
mtRepSubDetail.FieldByName(fnNameMark).AsString := SCSComponent.NameMark;
mtRepSubDetail.FieldByName(fnIDComponent).AsInteger := SCSComponent.ID;
mtRepSubDetail.Post;
//if IsInsertedRecord then
// mtRepSubDetail.Prior;
end;
end;
end;
// Î÷èñòèòü ñïèñîê ëèñòîâ / êîìíàò
for i := 0 to ComponLists.Count - 1 do
begin
ptrTwoID := Pointer(ComponLists.Objects[i]);
FreeMem(ptrTwoID);
end;
ComponLists.Clear;
end;
mtRepSubDetail.Next;
RecNo := RecNo + 1;
end;
mtRepDetail.Next;
end;}
end;
FreeAndNil(ComponLists);
FreeAndNil(LookedWholeIDs);
end;
finally
EndProgress;
end;
FreeAndNil(CatalogList);
GFormMode := fmRExplicationComponent;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ShowExplicationComponent', E.Message);
end;
//DisconnectDetailMemTable(mtRepSubDetail);
//DisconnectDetailMemTable(mtRepDetail);
//ClearFieldsInMemTable(mtRepSubDetail, nil);
//ClearFieldsInMemTable(mtRepDetail, nil);
//ClearFieldsInMemTable(mtRep, nil);
end;
procedure TF_ResourceReport.ShowComponSpecifications(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams);
begin
try
if Not rbModePacketPrintToExcel.Checked then
begin
CreateFGuideFileList;
F_GuideFileList.Execute(gftCompSpecification, ACatalog.ComponentReferences);
end;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ShowComponSpecifications', E.Message);
end;
end;
procedure TF_ResourceReport.ShowCrossJournal(AFolder: TSCSCatalog; AParams: TReportItemParams;
AReportItemParamValues: TReportItemParams;
AResourceReportFormMode: TResourceReportFormMode);
var
ListWithLookedCompons: TIntList;
CurrIDCompon: Integer;
i, j: Integer;
SCSComponent: TSCSComponent;
ComponCatagoryStr: String;
ComponCatagory: Integer;
ComponNameMark: String;
ListName: String;
FirstComponent: TSCSComponent;
LastComponent: TSCSComponent;
FromNppPort: Integer;
FromPortName: String;
ToNppPort: Integer;
ToPortName: String;
InterfCount: Integer;
MasterID: Integer;
ComponSignType: Integer;
ComponMarkTemplate: string;
ListOwner: TSCSList;
RoomOwner: TSCSCatalog;
SprComponentType: TNBComponentType;
mtRep: TkbmMemTable;
begin
try
mtRep := FmtCrossJournal;
ClearFieldsInMemTable(mtRep, nil);
mtRep.FieldDefs.Add(fnNameList, ftString, 255);
mtRep.FieldDefs.Add(fnRoomNum, ftString, 255);
mtRep.FieldDefs.Add(fnNameFrom, ftString, 255);
mtRep.FieldDefs.Add(fnNameTo, ftString, 255);
mtRep.FieldDefs.Add(fnNumFrom, ftInteger, 0); //05.02.2011
mtRep.FieldDefs.Add(fnNumTo, ftInteger, 0); //05.02.2011
mtRep.FieldDefs.Add(fnPortNameTo, ftInteger, 0); //05.02.2011 mtRep.FieldDefs.Add(fnPortNameTo, ftString, 255);
mtRep.FieldDefs.Add(fnCableNameShort, ftString, 255);
mtRep.FieldDefs.Add(fnCableNameMark, ftString, 255);
mtRep.FieldDefs.Add(fnCableNum, ftInteger, 0);
mtRep.Active := true;
FCatalog := AFolder;
ListWithLookedCompons := TIntList.Create;
BeginProgress(pcPreparingReport);
try
for i := 0 to AFolder.ComponentReferences.Count - 1 do
begin
SCSComponent := AFolder.ComponentReferences[i];
if Assigned(SCSComponent) then
begin
ComponSignType := SCSComponent.GetPropertyValueAsInteger(pnSignType);
if (SCSComponent.IsLine = biTrue) and
((ComponSignType = oitProjectible) or (AReportItemParamValues.CanHaveActiveComponents = biTrue)) then
if SCSComponent.HaveInterfaceByType(itFunctional) then //*** Åñòü ëè ôóíêöèîíàëüíûå èíòåðôåéñû
if (CheckSysNameIsCable(SCSComponent.ComponentType.SysName) and
(not (SCSComponent.IDNetType in [3,4,5,7])) and
(ListWithLookedCompons.IndexOf(SCSComponent.ID) = -1)) then
begin
SCSComponent.RefreshWholeLengthIfNecessary;
SCSComponent.LoadWholeComponent(false);
SCSComponent.LoadWholeLength;
SCSComponent.DefineFirstLast;
//if (SCSComponent.FirstIDConnectedConnCompon > 0) and
// (SCSComponent.LastIDConnectedConnCompon > 0) then
if Assigned(SCSComponent.FirstConnectedConnCompon) and
Assigned(SCSComponent.LastConnectedConnCompon) and
CheckCanLookComponInReportCable(SCSComponent.FirstConnectedConnCompon, AReportItemParamValues.CanHaveDismountAccount = biTrue) and
CheckCanLookComponInReportCable(SCSComponent.LastConnectedConnCompon, AReportItemParamValues.CanHaveDismountAccount = biTrue) then
if Not (AReportItemParamValues.CanHaveDismountAccount = biTrue) or
Not CheckHaveWholeComponentDismounted(FCatalog, SCSComponent.WholeComponent) then
begin
//01.04.2009 SCSComponent.RefreshWholeLengthIfNecessary;
ComponCatagoryStr := '';
ComponCatagoryStr := SCSComponent.GetPropertyValueBySysName(pnCategory);
ListName := '';
FirstComponent := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(SCSComponent.FirstIDCompon);
LastComponent := TF_Main(GForm).GSCSBase.CurrProject.GetComponentFromReferences(SCSComponent.LastIDCompon);
LoadPortName(SCSComponent.FirstIDConnectedConnCompon, SCSComponent.FirstIDCompon, FromNppPort, FromPortName);
LoadPortName(SCSComponent.LastIDConnectedConnCompon, SCSComponent.LastIDCompon, ToNppPort, ToPortName);
// Îïðåäåëèòü Ëèñò è êàáèíåò
ListOwner := nil;
RoomOwner := nil;
{//11.03.2009
if FirstComponent <> nil then
ListOwner := FirstComponent.GetListOwner
else
if LastComponent <> nil then
ListOwner := LastComponent.GetListOwner
else
ListOwner := SCSComponent.GetListOwner;
}
ListOwner := SCSComponent.FirstConnectedConnCompon.GetListOwner;
if ListOwner <> nil then
begin
ListName := ListOwner.GetNameForVisible;
RoomOwner := GetComponObjectOwnerByItemType(SCSComponent.FirstConnectedConnCompon, itRoom); //11.03.2009 GetComponObjectOwnerByItemType(FirstComponent, itRoom);
//if RoomOwner <> nil then
// ListName := ListName + '. '+ RoomOwner.GetNameForVisible;
SprComponentType := ListOwner.Spravochnik.GetComponentTypeByGUID(SCSComponent.GUIDComponentType);
if SprComponentType <> nil then
ComponMarkTemplate := SprComponentType.ComponentType.MarkMask;
//*** Óäàëèòü îáîçíà÷åíèå èç øàáëîíà ìàðêèðîâêè
if ComponMarkTemplate <> '' then
if Pos(mteNameShort, ComponMarkTemplate) <> 0 then
Delete(ComponMarkTemplate, Pos(mteNameShort, ComponMarkTemplate), Length(mteNameShort));
end;
mtRep.Append;
mtRep.FieldByName(fnNameList).AsString := ListName; // Îòêóäà ïðèõîäèò
if RoomOwner <> nil then
mtRep.FieldByName(fnRoomNum).AsString := RoomOwner.GetNameForVisible;
mtRep.FieldByName(fnNameFrom).AsString := GetMultiPortNameMark(SCSComponent.FirstConnectedConnCompon, true); // # ðîçåòêè èëè êîììóòàöèîííîé ïàíåëè
mtRep.FieldByName(fnNumFrom).AsInteger := SCSComponent.FirstConnectedConnCompon.MarkID;
ComponNameMark := GetMultiPortNameMark(SCSComponent.LastConnectedConnCompon, false); // # êîìóòàöèîííîé ïàíåëè
// Åñëè â ïàíåëå ïóñòàÿ ìàðêèðîâêà, òî âûâîäèì òèðå
if ComponNameMark <> '' then
begin
mtRep.FieldByName(fnNameTo).AsString := ComponNameMark;
mtRep.FieldByName(fnNumTo).AsInteger := SCSComponent.LastConnectedConnCompon.MarkID;
end
else
begin
mtRep.FieldByName(fnNameTo).AsString := '-';
mtRep.FieldByName(fnNumTo).AsInteger := 0;
end;
mtRep.FieldByName(fnPortNameTo).AsInteger := ToNppPort; //05.02.2011 IntToStr(ToNppPort); // Íîìåð ïîðòà ïàíåëè
//mtRep.FieldByName(fnPortNameTo).AsString := IntToStr(ToNppPort); // Íîìåð ïîðòà ïàíåëè
mtRep.FieldByName(fnCableNameShort).AsString := SCSComponent.NameShort;
mtRep.FieldByName(fnCableNameMark).AsString := TF_Main(SCSComponent.ActiveForm).MakeNameMarkComponent(SCSComponent, SCSComponent.GetFirstParentCatalog, false, ComponMarkTemplate); // íîìåð êàáåëÿ //SCSComponent.NameMark;
mtRep.FieldByName(fnCableNum).AsInteger := SCSComponent.MarkID;
mtRep.Post;
end;
for j := 0 to SCSComponent.WholeComponent.Count - 1 do
ListWithLookedCompons.Add(SCSComponent.WholeComponent[j]);
end;
end;
end;
//*** Ñîðòèðîâêà
//MemTable_RCableJournal.SortOn(fnNameFrom, []);
SortMemTableByParams(mtRep, AParams, AReportItemParamValues);
finally
EndProgress;
FreeAndNil(ListWithLookedCompons);
end;
GFormMode := AResourceReportFormMode;
ShowPreparedReport(AParams); //Act_ShowReport.Execute;
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ShowCrossJournal', E.Message);
end;
end;
procedure TF_ResourceReport.ShowHouse(AFolder: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams);
var
i, j, k: integer;
Catalogs: TSCSCatalogs;
CreatedCatalogs: Boolean;
SCSCatalog: TSCScatalog;
HouseCompon: TSCSComponent;
ApproachCompon: TSCSComponent;
begin
try
DisconnectDetailMemTable(FmtApproach);
FmtApproach.Active := false;
FmtHouse.Active := false;
ConnectDetailMemTable(FdsrcHouse, FmtApproach, fnID, fnIDComponent);
FmtHouse.Active := true;
FmtApproach.Active := true;
FCatalog := AFolder;
Catalogs := nil;
CreatedCatalogs := false;
if AParams.CanAsPlacingInProj = biTrue then
begin
Catalogs := GetChildCatalogsInPlacingOrder(AFolder, [itSCSConnector]);
CreatedCatalogs := true;
end
else
Catalogs := AFolder.ChildCatalogReferences;
for i := 0 to Catalogs.Count - 1 do
begin
SCSCatalog := Catalogs[i];
for j := 0 to SCSCatalog.SCSComponents.Count - 1 do
begin
HouseCompon := SCSCatalog.SCSComponents[j];
if HouseCompon.ComponentType.SysName = ctsnHouse then
begin
FmtHouse.Append;
FmtHouse.FieldByName(fnID).AsInteger := HouseCompon.ID;
FmtHouse.FieldByName(fnName).AsString := HouseCompon.Name;
FmtHouse.FieldByName(fnMarkID).AsInteger := HouseCompon.MarkID;
FmtHouse.FieldByName(fnCooperative).AsString := HouseCompon.GetPropertyValueBySysName(pnCooperative);
FmtHouse.FieldByName(fnHEO).AsString := HouseCompon.GetPropertyValueBySysName(pnHEO);
FmtHouse.FieldByName(fnAgreed).AsInteger := GetPropValueAsBoolGrayedDef(HouseCompon.Properties, pnAgreed, bigFalse);
FmtHouse.Post;
for k := 0 to HouseCompon.ChildComplects.Count - 1 do
begin
ApproachCompon := HouseCompon.ChildComplects[k];
if ApproachCompon.ComponentType.SysName = ctsnApproach then
begin
FmtApproach.Append;
FmtApproach.FieldByName(fnID).AsInteger := ApproachCompon.ID;
FmtApproach.FieldByName(fnIDComponent).AsInteger := HouseCompon.ID;
FmtApproach.FieldByName(fnName).AsString := ApproachCompon.Name;
FmtApproach.FieldByName(fnMarkID).AsInteger := ApproachCompon.MarkID;
FmtApproach.FieldByName(fnBoxInstalled).AsInteger := GetPropValueAsBoolGrayedDef(ApproachCompon.Properties, pnBoxInstalled, bigFalse);
FmtApproach.FieldByName(fnPresencePower200WFromNetwork).AsInteger := GetPropValueAsBoolGrayedDef(ApproachCompon.Properties, pnPresencePower200WFromNetwork, bigFalse);
FmtApproach.FieldByName(fnCableSetToBox).AsInteger := GetPropValueAsBoolGrayedDef(ApproachCompon.Properties, pnCableSetToBox, bigFalse);
FmtApproach.FieldByName(fnFiberOpticWelded).AsInteger := GetPropValueAsBoolGrayedDef(ApproachCompon.Properties, pnFiberOpticWelded, bigFalse);
FmtApproach.FieldByName(fnEquipmentInstalled).AsInteger := GetPropValueAsBoolGrayedDef(ApproachCompon.Properties, pnEquipmentInstalled, bigFalse);
FmtApproach.Post;
end;
end;
end;
end;
end;
// Ñîðòèðóåì
FmtHouse.SortOn(fnName+';'+fnMarkID, []);
if AReportItemParamValues.CanAsPlacingInProj = biFalse then
SortMemTableByParams(FmtApproach, AParams, AReportItemParamValues);
if CreatedCatalogs then
FreeAndNil(Catalogs);
GFormMode := AParams.Mode;
ShowPreparedReport(AParams);
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ShowHouse', E.Message);
end;
end;
procedure TF_ResourceReport.ShowDefectAct(AFolder: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams; AResourceReportFormMode: TResourceReportFormMode);
var
F_MasterDefectAct: TF_MasterDefectAct;
begin
FCatalog := AFolder;
F_MasterDefectAct := TF_MasterDefectAct.Create(GForm, GForm);
F_MasterDefectAct.Execute(fmView, AFolder, true, TF_Main(GForm).FUOM);
FreeAndNil(F_MasterDefectAct);
end;
procedure TF_ResourceReport.ShowDefectActForCompon(ACompon: TSCSComponent; AParams: TReportItemParams; ADefectAct: TDefectAct);
var
DefectAct: TDefectAct;
Params: TReportItemParams;
begin
try
Params := AParams;
if Params = nil then
Params := TReportItemParams(tvReports.Selected.Data);
DefectAct := ADefectAct;
if DefectAct = nil then
DefectAct := ACompon.ProjectOwner.GetComponDefectAct(ACompon);
if DefectAct = nil then
DefectAct := TDefectAct.Create(nil);
FmtDefectAct.Active := false;
FmtDefectAct.Active := true;
FmtDefectAct.Append;
FmtDefectAct.FieldByName(fnName).AsString := ACompon.GetNameForVisible;
FmtDefectAct.FieldByName(fnFindDefectChecked).AsBoolean := DefectAct.FindDefectChecked;
TMemoField(FmtDefectAct.FieldByName(fnFindDefectAdress)).Value := DefectAct.FindDefectAdress;
TMemoField(FmtDefectAct.FieldByName(fnFindDefectDescription)).Value := DefectAct.FindDefectDescription;
FmtDefectAct.FieldByName(fnLinkTransportChecked).AsBoolean := DefectAct.LinkTransportChecked;
TMemoField(FmtDefectAct.FieldByName(fnLinkTransportPointA)).Value := DefectAct.LinkTransportPointA;
TMemoField(FmtDefectAct.FieldByName(fnLinkTransportPointB)).Value := DefectAct.LinkTransportPointB;
FmtDefectAct.FieldByName(fnLinkTransportCable).AsFloat := FloatInUOM(DefectAct.LinkTransportCable, umMetr, TF_Main(GForm).FUOM);
TMemoField(FmtDefectAct.FieldByName(fnLinkTransportMaterials)).Value := DefectAct.LinkTransportMaterials;
FmtDefectAct.FieldByName(fnSetEquipmentChecked).AsBoolean := DefectAct.SetEquipmentChecked;
TMemoField(FmtDefectAct.FieldByName(fnSetEquipmentAddress)).Value := DefectAct.SetEquipmentAddress;
TMemoField(FmtDefectAct.FieldByName(fnSetEquipmentEqipm)).Value := DefectAct.SetEquipmentEqipm;
TMemoField(FmtDefectAct.FieldByName(fnSetEquipmentMaterial)).Value := DefectAct.SetEquipmentMaterial;
FmtDefectAct.FieldByName(fnMoveEquipmentChecked).AsBoolean := DefectAct.MoveEquipmentChecked;
TMemoField(FmtDefectAct.FieldByName(fnMoveEquipmentPointA)).Value := DefectAct.MoveEquipmentPointA;
TMemoField(FmtDefectAct.FieldByName(fnMoveEquipmentPointB)).Value := DefectAct.MoveEquipmentPointB;
TMemoField(FmtDefectAct.FieldByName(fnMoveEquipmentEqipm)).Value := DefectAct.MoveEquipmentEqipm;
TMemoField(FmtDefectAct.FieldByName(fnMoveEquipmentMaterial)).Value := DefectAct.MoveEquipmentMaterial;
TMemoField(FmtDefectAct.FieldByName(fnContractorName)).Value := DefectAct.Contractor;
FmtDefectAct.FieldByName(fnDateGetting).AsDateTime := DefectAct.DateGetting;
FmtDefectAct.FieldByName(fnDateExecution).AsDateTime := DefectAct.DateExecution;
FmtDefectAct.Post;
if ADefectAct = nil then
FreeAndNil(DefectAct);
GFormMode := fmRDefectAct;
ShowPreparedReport(Params);
except
on E: Exception do AddExceptionToLogEx('TF_ResourceReport.ShowDefectActForCompon', E.Message);
end;
end;
procedure TF_ResourceReport.ShowCommerceInvoice(ACatalog: TSCSCatalog; AParams: TReportItemParams; AReportItemParamValues: TReportItemParams);
const
// Position Type
ptGroup = 1;
ptEndGroup = 2;
ptCompon = 3;
ptGroupTotal = 4;
ptBreak = 5;
var
// i, j: integer;
// //NBPath: TStringList;
// CatalogOwnerPathID: TIntList;
// Compon: TSCSComponent;
// ComponIDNB: Integer;
// added by Tolik
IsCanShowResources, IsCanShowWorks : Boolean;
NormResources: TSCSNormsResources;
i: Integer;
ResourceRel: TSCSResourceRel;
ResourceCompon: TSCSComponent;
SprSuppliesKind: TNBSuppliesKind;
ProjectOwner: TSCSProject;
OldTick, CurrTick: Cardinal;
TotalCost: Double;
InterfaceNormList: TList;
CurrInterfaceNormList: TList;
TempList: TList;
SCSComponent: TSCSComponent;
SCSCatalog: TSCSCatalog;
TraceLength: Double;
Interfac: TSCSInterface;
ptrJoinedInterf: TSCSInterface;
ptrComplectInterf: TSCSInterface;
ptrResultInterface: TSCSInterface;
//IOfIRel: TSCSIOfIRel;
ptrInterfaceNormInfo: PInterfaceNormInfo;
ptrInterfaceNormInfoI: PInterfaceNormInfo;
ptrInterfaceNormInfoJ: PInterfaceNormInfo;
GroupedNorms: TSCSNormsResources;
GroupNorm: TSCSNorm;
RootCatalog: TSCSCatalog; // Êîðíåâîé îáúåêò
// ComponCatalog: TSCSCatalog; // Îáúåêò äëÿ êîìïîíåíòà
// CatalogWithNoDefined: TSCSCatalog; // Îáúåêò ñ êîìïîíåíòàìè, êîòîðûõ íåòó â ÁÄ
// MaxPathLen: Integer; // Ìèíèìàëüíàÿ äëèíà ïóòè
// //ptrComponTotalQt: PDouble; // ïåðåìåííàÿ èç ñïèñêà, â êîòîðîé õðàíèòñÿ îáùåå êîë-âî
// //ComponentQt: Double; // Êîëâî îäíîé êîìïîíåíòû
// GroupCompon: TSCSComponent;
// GroupComponList: TSCSComponents;
// LookedWholeID: TIntList;
// Catalogs: TSCSCatalogs;
LevelColors: TIntList;
// GenCatalogNum: Integer;
// // Ñîçäàñò îáúåêò êàòàëîãà
// function CreateCatalogContainer(ANBID: Integer=0; AParentContainer: TSCSCatalog=nil): TSCSCatalog;
// begin
// Result := TSCSCatalog.Create(GForm);
// //Result.SCSComponents.OwnsObjects := false;
//
// if ANBID <> 0 then
// begin
// Result.ID := ANBID;
// Result.Name := TF_Main(GForm).FNormBase.DM.GetStringFromTableByID(tnCatalog, fnName, Result.ID, qmPhisical);
// end;
// if AParentContainer <> nil then
// AParentContainer.AddChildCatalogToList(Result);
// end;
//
// // Ñòðîèò ñòðóêòóðó (ïóòü) îáúåêòîâ èç ïóòè ID, âåðíåò ñàìûé âíóòðåííèé êàòàëîã
// function CatalogPathIDToObject(ACatalogPathID: TIntList): TSCSCatalog;
// var
// i: Integer;
// CurrCatalog: TSCSCatalog;
// ChildCatalog: TSCSCatalog;
// begin
// CurrCatalog := RootCatalog;
// for i := 0 to ACatalogPathID.Count - 1 do
// begin
// ChildCatalog := CurrCatalog.ChildCatalogs.GetByID(ACatalogPathID[i]);
// if ChildCatalog = nil then
// ChildCatalog := CreateCatalogContainer(ACatalogPathID[i], CurrCatalog);
// CurrCatalog := ChildCatalog;
//
// //if (i+1) > MaxCatalogLevel then
// // MaxCatalogLevel := i+1;
// end;
// if (MaxPathLen = 0) or (MaxPathLen < ACatalogPathID.Count) then
// MaxPathLen := ACatalogPathID.Count;
// Result := CurrCatalog;
// end;
//
// // Óáèðàåò îáùèå âåðõíèå îáúåêòû - òå ó êîòîðûõ îäèí äî÷åðíèé ïîäîáúåêò
// // ñìîòðèì ÷òîáû äëÿ êîìïîíåíòîâ áûë õîòÿ áû îäèí óðîâåíü
// // è äëÿ ñàìîãî ãëóáîêîãî ïî âîçìîæíîñòè - ìèíèìêì òðè óðîâíÿ
// procedure RemoveTopCommonObjects;
// var
// CurrTopCatalog: TSCSCatalog;
// //CatalogToRemove: TSCSCatalog;
// RemovedCount: Integer;
// begin
// CurrTopCatalog := RootCatalog;
// RemovedCount := 0;
// //while (MaxPathLen - RemovedCount) >= 3 do
// while true do
// begin
// // Ïðîâåðêè äëÿ âûõîäà èç öûêëà
// if (CurrTopCatalog.ChildCatalogs.Count > 1) or // åñëè íåñêîëüêî îáúåêòîâ, òîâûõîäèì
// (CurrTopCatalog.SCSComponents.Count > 0) or // åñëè åñòü êîìïîíåíòû, òî âûõîäèì
// (CurrTopCatalog.ChildCatalogs.Count = 0) or // íà âñÿêèé ñëó÷àé
// //((MaxPathLen-RemovedCount) <= 3) then
// ((MaxPathLen-RemovedCount) <= 3) then
// begin
// EmptyProcedure;
// Break; //// BREAK ////
// end;
// RootCatalog := CurrTopCatalog.ChildCatalogs[0];
// //RootCatalog.Parent := nil;
// CurrTopCatalog.RemoveChildCatalogFromList(RootCatalog);
//
// CurrTopCatalog.Free;
// CurrTopCatalog := RootCatalog;
// RemovedCount := RemovedCount + 1;
// end;
// end;
//
// procedure DefineCatalogCodes(AParentCatalogs: TSCSCatalogs);
// var
// i, j: Integer;
// ChildLevelCatalogs: TSCSCatalogs;
// Catalog: TSCSCatalog;
// begin
// ChildLevelCatalogs := TSCSCatalogs.Create(false);
// // Îïðåäåëÿåì íîìåðà Êàòàëîãîâ
// for i := 0 to AParentCatalogs.Count - 1 do
// begin
// Catalog := AParentCatalogs[i];
//
// GenCatalogNum := GenCatalogNum + 1;
// Catalog.MarkID := GenCatalogNum;
//
// // Îïðåäåëÿåì ñïèñîê êàòàëîãîâ óðîâíåì íèæå
// for j := 0 to Catalog.ChildCatalogs.Count - 1 do
// ChildLevelCatalogs.Add(Catalog.ChildCatalogs[j]);
// end;
// if ChildLevelCatalogs.Count > 0 then
// DefineCatalogCodes(ChildLevelCatalogs);
// FreeAndNil(ChildLevelCatalogs);
// end;
//
// function GetGrpCompon(AProjCompon: TSCSComponent): TSCSComponent;
// var
// Compon: TSCSComponent;
// Izm: String;
// i: Integer;
// begin
// Result := nil;
// Izm := AProjCompon.Izm;
// if CheckPriceTransformToUOMByCompType(@AProjCompon.ComponentType) then
// Izm := GetNameUOM(umMetr, true);
//
// for i := 0 to GroupComponList.Count - 1 do
// begin
// Compon := GroupComponList[i];
// if (Compon.ArticulProducer = AProjCompon.ArticulProducer) and
// (Abs(Compon.Price - AProjCompon.Price) < cnstCmpPriceDelta) and
// (Compon.Izm = Izm) and
// (Compon.GUIDProducer = AProjCompon.GUIDProducer) and
// (Compon.Name = AProjCompon.Name) and
// (Compon.IsLine = AProjCompon.IsLine) then
// begin
// Result := Compon;
// Break; //// BREAK ////
// end;
// end;
// end;
procedure AddRecoToMT(const ACode, ANat, AUom, AName: String; AQt, APrice, ACost: Double;
AColor, APositionType: Integer);
//AColor, ACharterLevel: Integer; AIsTotal: Boolean);
begin
FmtCommerceInvoice.Append;
FmtCommerceInvoice.FieldByName(fnCode).AsString := ACode;
FmtCommerceInvoice.FieldByName(fnNat).AsString := ANat;
FmtCommerceInvoice.FieldByName(fnUOM).AsString := AUom;
FmtCommerceInvoice.FieldByName(fnName).AsString := AName;
//15.08.2012 FmtCommerceInvoice.FieldByName(fnQt).AsFloat := AQt;
//15.08.2012 FmtCommerceInvoice.FieldByName(fnPrice).AsFloat := APrice;
//15.08.2012 FmtCommerceInvoice.FieldByName(fnCost).AsFloat := ACost;
// commented by Tolik
{ FmtCommerceInvoice.FieldByName(fnQt).AsString := FormatFloat(ffMask, AQt);
FmtCommerceInvoice.FieldByName(fnPrice).AsString := FormatFloat(ffMask, APrice);
FmtCommerceInvoice.FieldByName(fnCost).AsString := FormatFloat(ffMask, ACost);}
// âûïîëíåíî îêðóãëåíèÿ öåí è êîëè÷åñòâà äî çàäàííûõ ïîëüçîâàòåëåì(Tolik)
FmtCommerceInvoice.FieldByName(fnQt).AsString := FloatToStr(RoundX(AQt,FKolvoPrecision));
FmtCommerceInvoice.FieldByName(fnPrice).AsString := FloatToStr(RoundX(APrice,FPricePrecision));
FmtCommerceInvoice.FieldByName(fnCost).AsString := FloatToStr(RoundX(ACost,Max(FKolvoPrecision,FPricePrecision)));
//
// ServFields
FmtCommerceInvoice.FieldByName(fnColor).AsInteger := AColor;
FmtCommerceInvoice.FieldByName(fnPosType).AsInteger := APositionType;
//FmtCommerceInvoice.FieldByName(fnCharterLevel).AsInteger := ACharterLevel;
//FmtCommerceInvoice.FieldByName(fnIsCharter).AsBoolean :=
//FmtCommerceInvoice.FieldByName(fnIsTotal).AsBoolean := AIsTotal;
FmtCommerceInvoice.Post;
end;
procedure CatalogComponsToMT(ACatalog: TSCSCatalog; ACatalogCost: PDouble);
var
i: Integer;
Compon: TSCSComponent;
ComponPrice: Double;
ComponCount: Double;
ComponCost: Double;
begin
for i := 0 to ACatalog.SCSComponents.Count - 1 do
begin
Compon := ACatalog.SCSComponents[i];
//ComponPrice := Compon.Price;
//ComponCount := Compon.Length;
//// Öåíà êîìïîíåíòà ïî ÑÈ
//if CheckPriceTransformToUOMByCompType(@Compon.ComponentType) then
//begin
// if TF_Main(GForm).FUOM <> umMetr then
// begin
// ComponCount := FloatInUOM(Compon.Length, umMetr, TF_Main(GForm).FUOM);
// ComponPrice := FloatInUOM(Compon.Price, TF_Main(GForm).FUOM, umMetr);
// end;
//end;
GetComponQtPriceInUOM(Compon, TF_Main(GForm).FUOM, @ComponPrice, @ComponCount);
// commented by Toik
{ ComponCost := RoundCP(ComponPrice * ComponCount);
AddRecoToMT(Compon.ArticulProducer, cBaseCommon75, Compon.Izm, Compon.Name,
RoundCP(ComponCount), RoundCP(ComponPrice), ComponCost, clNone, ptCompon);}
// âûïîëíåíî îêðóãëåíèå (Tolik)
ComponCount := RoundX(ComponCount,FKolvoPrecision);
ComponPrice := RoundX(ComponPrice,FPricePrecision);
//Îêðóãëàåì ñòîèìîñòü â ïðåäåëàõ ðàçóìíîãî äî 5 çíàêîâ
if ((FPricePrecision<4) and (FKolvoPrecision<4)) then
ComponCost := RoundX(ComponPrice * ComponCount,Max(FPricePrecision,FKolvoPrecision))
else ComponCost :=RoundX(ComponPrice * ComponCount,4);
AddRecoToMT(Compon.ArticulProducer, cBaseCommon75, Compon.Izm, Compon.Name, ComponCount,
ComponPrice, ComponCost, clNone, ptCompon);
if ACatalogCost <> nil then
ACatalogCost^ := ACatalogCost^ + ComponCost;
end;
end;
// Çàãðóçêà ðåñóðñîâ â òàáëèöó
procedure LoadResourcesOnlyToMT(AResources: TSCSResources);
var i: Integer;
ResourceRel: TSCSResourceRel;
Kolvo, Price, Cost: Double;
begin
MemTable_RResources.Close;
MemTable_RResources.Open;
for i := 0 to AResources.Count - 1 do
begin
// îòáèðàåì òîëüêî ðåñóðñû
if AResources[i].ServIsResource then
begin
ResourceRel := AResources[i];
MemTable_RResources.Append;
MemTable_RResources.FieldByName('ID').AsInteger := ResourceRel.ID;
MemTable_RResources.FieldByName(fnName).AsString := ResourceRel.Name;
// Øèôð ðåñóðñà ïîìåùàåì â ïîëå ArtProducer (ïîêàçûâàåì øèôð ðåñóðñà â ïîëå 'ÊÎÄ' îò÷åòà )
MemTable_RResources.FieldByName(fnArticulProducer).AsString := ResourceRel.Cypher; //ResourceRel.ArtProducer;
MemTable_RResources.FieldByName(fnArticulDistributor).AsString := ResourceRel.ArtDistributor;
MemTable_RResources.FieldByName(fnProducerName).AsString := TF_Main(GForm).FNormBase.DM.GetStringFromTableByGUID(tnProducers, fnName, ResourceRel.GUIDProducer, qmPhisical);
MemTable_RResources.FieldByName(fnIzm).AsString := ResourceRel.Izm;
Kolvo := RoundX(ResourceRel.Kolvo, FKolvoPrecision);
Price := RoundX(ResourceRel.Price, FPricePrecision);
//Îêðóãëÿåì ñòîèìîñòü â ïðåäåëàõ ðàçóìíîãî (äî 4 çíàêîâ)
if ((FKolvoPrecision<4) and (FPricePrecision<4)) then
Cost := RoundX(Kolvo * Price, Max(FKolvoPrecision, FPricePrecision) )
else
Cost := RoundX(Kolvo*Price,4);
MemTable_RResources.FieldByName('Kolvo').AsFloat := Kolvo;
MemTable_RResources.FieldByName('Price').AsFloat := Price;
MemTable_RResources.FieldByName('Cost').AsFloat := Cost;
MemTable_RResources.Post;
TotalCost := TotalCost + Cost;
end;
end;
MemTable_RResources.SortOn(fnName, []);
end;
procedure ObjectstsToMT(ACatalog: TSCSCatalog; ALevel: Integer=-1; AParentCatalogCost: PDouble=nil);
var
i: Integer;
Catalog: TSCSCatalog;
Nat: String;
Color: Integer;
PositionType: Integer;
CatalogCost: Double;
begin
PositionType := ptEndGroup; //ptGroup;
CatalogCost := 0;
if ALevel >= 0 then
begin
Nat := '';
//ptGroup = 1;
//ptEndGroup = 2;
//ptCompon = 3;
//ptGroupTotal = 4;
//ptBreak = 5;
// Åñëè åñòü êîìïîíåíòû, òîãäà ðàçäåë, èíà÷å ãëàâà
if ACatalog.SCSComponents.Count > 0 then
begin
//PositionType := ptEndGroup;
Nat := cBaseCommon74;
end
else
begin
//PositionType := ptGroup;
Nat := cBaseCommon73;
end;
// Öâåò ãðóïïû
Color := clNone;
if ALevel < LevelColors.Count then
begin
Color := LevelColors[ALevel];
PositionType := ptGroup;
end;
AddRecoToMT(IntToStrF(ACatalog.MarkID, 2), Nat, '', ACatalog.Name, 0, 0, 0, Color, PositionType);
CatalogComponsToMT(ACatalog, @CatalogCost);
end;
// Çàãðóæàåì ïîäêàòàëîãè
for i := 0 to ACatalog.ChildCatalogs.Count - 1 do
begin
Catalog := ACatalog.ChildCatalogs[i];
//CatalogComponsToMT(Catalog);
ObjectstsToMT(Catalog, ALevel+1, @CatalogCost);
end;
if ALevel >= 0 then
begin
// Èòîãî ãðóïïû
AddRecoToMT('', '', '', IntToStrF(ACatalog.MarkID, 2), 0, 0, CatalogCost, clNone, ptGroupTotal);
// ×åðíàÿ ïîëîñêà
AddRecoToMT('', '', '', '', 0, 0, 0, clBlack, ptBreak);
end
else
begin
// Îáùåå èòîãî
// commented by Tolik, ïîòîìó ÷òî ñ÷èòàòü îáùèå ñóììû áóäåì â îò÷åòå
// AddRecoToMT('', '', '', cRepMsg32, 0, 0, CatalogCost, clNone, ptGroupTotal);
end;
if AParentCatalogCost <> nil then
AParentCatalogCost^ := AParentCatalogCost^ + CatalogCost;
end;
begin
MemTable_RResources.Close;
MemTable_RResources.Open;
MemTable_RNorms.Close;
MemTable_RNorms.Open;
DefinePrecisions; // Ïîëó÷èòü òî÷íîñòü öåíû è êîëè÷åñòâà
try
if FmtCommerceInvoice = nil then
begin
FmtCommerceInvoice := TkbmMemTable.Create(Self);
FmtCommerceInvoice.Name := 'FmtCommerceInvoice';
FdsrcCommerceInvoice := TDataSource.Create(Self);
FdsrcCommerceInvoice.Name := 'FdsrcCommerceInvoice';
FdsrcCommerceInvoice.DataSet := FmtCommerceInvoice;
FmtCommerceInvoice.FieldDefs.Add(fnID, ftAutoInc);
FmtCommerceInvoice.FieldDefs.Add(fnCode, ftString, 255);
FmtCommerceInvoice.FieldDefs.Add(fnNat, ftString, 255);
FmtCommerceInvoice.FieldDefs.Add(fnUOM, ftString, 255);
FmtCommerceInvoice.FieldDefs.Add(fnName, ftString, 255);
//15.08.2012 FmtCommerceInvoice.FieldDefs.Add(fnQt, ftFloat);
//15.08.2012 FmtCommerceInvoice.FieldDefs.Add(fnPrice, ftFloat);
//15.08.2012 FmtCommerceInvoice.FieldDefs.Add(fnCost, ftFloat);
FmtCommerceInvoice.FieldDefs.Add(fnQt, ftString, 255);
FmtCommerceInvoice.FieldDefs.Add(fnPrice, ftString, 255);
FmtCommerceInvoice.FieldDefs.Add(fnCost, ftString, 255);
// ServFields
FmtCommerceInvoice.FieldDefs.Add(fnColor, ftInteger);
FmtCommerceInvoice.FieldDefs.Add(fnPosType, ftInteger);
//FmtCommerceInvoice.FieldDefs.Add(fnCharterLevel, ftInteger);
//FmtCommerceInvoice.FieldDefs.Add(fnIsCharter, ftBoolean);
//FmtCommerceInvoice.FieldDefs.Add(fnIsTotal, ftBoolean);
end;
FmtCommerceInvoice.Active := false;
FmtCommerceInvoice.Active := true;
// RootCatalog := CreateCatalogContainer;
// LookedWholeID := TIntList.Create;
// GroupComponList := TSCSComponents.Create(false); // ãðóïïîâûå êîáúåêòû áóäóò óäàëÿòüñÿ èç êàòàëîãîâ
// LevelColors := TIntList.Create;
// try
// CatalogWithNoDefined := nil;
// MaxPathLen := 0;
// for i := 0 to ACatalog.ComponentReferences.Count - 1 do
// begin
// Compon := ACatalog.ComponentReferences[i];
// // Ìîæåì ëè èñïîëüçîâàòü ýòîò êîìïîíåíò ïî ïàðàìåòðàì
// if ((Compon.Isline = biFalse) or (LookedWholeID.IndexOf(Compon.Whole_ID) = -1)) and
// CheckCanLookComponInReportRsrc(Compon, AReportItemParamValues.CanHaveActiveComponents=biTrue,
// AReportItemParamValues.CanHaveDismountAccount=biTrue) then
// begin
// GroupCompon := GetGrpCompon(Compon);
//
// if GroupCompon = nil then
// begin
// GroupCompon := TSCSComponent.Create(GForm);
// GroupCompon.AssignOnlyComponent(Compon);
// GroupCompon.Length := 0;
// if CheckPriceTransformToUOMByCompType(@GroupCompon.ComponentType) then
// GroupCompon.Izm := GetNameUOM(umMetr, true);
//
// CatalogOwnerPathID := nil;
// ComponIDNB := TF_Main(GForm).FNormBase.DM.GetIntFromTableByGUID(tnComponent, fnID, Compon.GuidNB, qmPhisical);
// if ComponIDNB <> 0 then
// CatalogOwnerPathID := GetComponCatalogOwnerPathIDByLevel(ComponIDNB, 0, TF_Main(GForm).FNormBase.DM.Query_Select);
// // Åñëè åñòü ïàïêà â ÍÁ, òî êèäàåì â îáúåêò ýòîé ïàïêè
// if (CatalogOwnerPathID <> nil) and (CatalogOwnerPathID.Count > 0) then
// begin
// ComponCatalog := CatalogPathIDToObject(CatalogOwnerPathID);
// //ComponCatalog.SCSComponents.Add(Compon);
//
// ComponCatalog.AddComponentToList(GroupCompon);
// end
// else
// // Èíà÷å êèäàåì â ñïåö. ïàïêó ñ êîìïîíåíòàìè êîòîðûõ íåòó â ÍÁ
// begin
// if CatalogWithNoDefined = nil then
// begin
// CatalogWithNoDefined := CreateCatalogContainer;
// CatalogWithNoDefined.Name := cResourceReport_Msg43;
// CatalogWithNoDefined.AddComponentToList(GroupCompon);
// end;
// end;
// GroupComponList.Add(GroupCompon);
// end;
// GroupCompon.Length := GroupCompon.Length + GetComponQuantityByParams(Compon, AReportItemParamValues.CanHaveDismountAccount=biTrue);
//
// // Çàïîìèíàåì êàáåëü
// if (Compon.Isline = biTrue) and (Compon.Whole_ID <> 0) then
// LookedWholeID.Add(Compon.Whole_ID);
// end;
// end;
// RemoveTopCommonObjects;
// RootCatalog.AddChildCatalogToList(CatalogWithNoDefined);
//
// // Îïðåäåëÿåì êîäû (íîìåðà ïàïîê) ïî óðîâíÿì
// GenCatalogNum := -1;
// Catalogs := TSCSCatalogs.Create(false);
// Catalogs.Add(RootCatalog);
// DefineCatalogCodes(Catalogs);
// FreeAndNil(Catalogs);
//
// // Öâåòà BGR - blue green red
// LevelColors.Add($FFCC99);
// LevelColors.Add($CCFFCC);
// //LevelColors.Add($CCFFFF);
//
// // íàñûïàåì MemTable
// ObjectstsToMT(RootCatalog);
// finally
// FreeAndNil(LevelColors);
// FreeAndNil(GroupComponList);
// FreeAndNil(LookedWholeID);
// FreeAndNil(RootCatalog);
// end;
RootCatalog := PrepareCommerceInvoiceObjects(ACatalog, AParams, AReportItemParamValues);
LevelColors := TIntList.Create;
try
// Öâåòà BGR - blue green red
LevelColors.Add($FFCC99); // $FFCC99
LevelColors.Add($CCFFCC); // $CCFFCC
// íàñûïàåì MemTable
ObjectstsToMT(RootCatalog);
IsCanShowResources := IntToBool(AReportItemParamValues.CanShowResources); //ACanShowResources;
IsCanShowWorks := IntToBool(AReportItemParamValues.CanShowWorks); //ACanShowWorks;
// Åñëè ïîêàçûâàòü ðàáîòû, òî ôîðìèðóåì òàáëèöó çíà÷åíèé
if IsCanShowWorks then
begin
// frdbdataset1.Assign(MemTable_RNorms);
try
if Assigned(ACatalog) then
begin
// LookedInterfaces := TList.Create;
// InterfaceNormList := TList.Create;
// GroupedNorms := TSCSNorms.Create(true);
FCatalog := ACatalog;
BeginProgress(pcPreparingReport);
try
//GroupedNorms := AFolder.GetAllNormsResources(nrAll, false, ACanHaveActiveComponents, false, true);
//24.09.2010 GroupedNorms := AFolder.GetAllNormsResources([nrNorms], false, ACanHaveActiveComponents, false, true);
GroupedNorms := ACatalog.GetAllNormsResources([nrNorms], false, true,
false, true, false, true, false, True); ////24.09.2010 aAllowNormPriceForGroup = True
//*** Çàñûïàòü íîðìû â MemTable
MemTable_RNorms.Active := false;
MemTable_RNorms.Active := true;
for i := 0 to GroupedNorms.Norms.Count - 1 do
begin
GroupNorm := GroupedNorms.Norms[i];
MemTable_RNorms.Append;
MemTable_RNorms.FieldByName(fnCypher).AsString := GroupNorm.Cypher;
MemTable_RNorms.FieldByName(fnName).AsString := GroupNorm.Name;
MemTable_RNorms.FieldByName(fnExpense).AsFloat := RoundX(GroupNorm.Kolvo, PrecisionNormKolvo);
MemTable_RNorms.FieldByName(fnIzm).AsString := GroupNorm.Izm_;
//24.09.2010
MemTable_RNorms.FieldByName(fnPrice).AsFloat := RoundX(GroupNorm.Price, PrecisionNormKolvo);
MemTable_RNorms.FieldByName(fnTotalCost).AsFloat := RoundX(GroupNorm.TotalCost, PrecisionNormKolvo);
MemTable_RNorms.Post;
end;
//MemTable_RNorms.SortOn(fnCypher, []);
SortMemTableByParams(MemTable_RNorms, AParams, nil);
finally
EndProgress;
FreeAndNil(GroupedNorms);
//FreeList(InterfaceNormList);
//FreeAndNil(LookedInterfaces);
end;
end;
finally
end;
end;
//////////////////////////////////////////////////////////////////////////////////////////////////////////
finally
FreeAndNil(RootCatalog);
FreeAndNil(LevelColors);
end;
// Åñëè ïîêàçûâàòü ðåñóðñû, òî âûáèðàåì ðåñóðñû â òàáëè÷êó
if IsCanShowResources then
begin
TotalCost := 0;
if Assigned(ACatalog) then
begin
try
FCatalog := ACatalog;
ProjectOwner := ACatalog.GetProject;
DefinePrecisions;
NormResources := nil;
BeginProgress(pcPreparingReport);
try
NormResources := ACatalog.GetAllNormsResources([nrResources, nrAccessories, nrComponents], false,
IntToBool(AReportItemParamValues.CanHaveActiveComponents), IntToBool(AReportItemParamValues.CanHaveDismountAccount),
true, false, true, true);
//if ACanHaveSupplyValue or ACanRoundValue then
for i := 0 to NormResources.Resources.Count - 1 do
begin
ResourceRel := NormResources.Resources[i];
ResourceCompon := nil;
if Not ResourceRel.ServIsResource then
if TSCSResourceGroup(ResourceRel).ObjectList.Count > 0 then
if TSCSResourceGroup(ResourceRel).ObjectList[0] is TSCSComponent then
begin
ResourceCompon := TSCSComponent(TSCSResourceGroup(ResourceRel).ObjectList[0]);
end;
if ResourceCompon <> nil then
begin
SprSuppliesKind := nil;
// if ACanHaveSupplyValue then
if ResourceRel.GUIDSuppliesKind <> '' then
SprSuppliesKind := ProjectOwner.Spravochnik.GetSuppliesKindByGUID(ResourceRel.GUIDSuppliesKind);
//*** Ó÷èòûâàòü ïîñòàâî÷íûå âåëå÷èíû
if SprSuppliesKind <> nil then
begin
if CheckIsTradUOM(TF_Main(GForm).FUOM) then
begin
ResourceRel.Izm := SprSuppliesKind.Data.NameTradUOM;
if CheckPriceTransformToUOMByCompType(@ResourceCompon.ComponentType) then
begin
// Äëÿ êàáåëåé è êàíàëîâ â òðàäèöèîííîé ñèñòåìû ÑØÀ íóæíî þçàòü ÔÓÒÛ
ResourceRel.Kolvo := FloatInUOM(ResourceRel.Kolvo, umMetr, umFoot) / SprSuppliesKind.Data.UnitKolvoTradUOM;
ResourceRel.Price := FloatInUOM(ResourceRel.Price, umFoot, umMetr) * SprSuppliesKind.Data.UnitKolvoTradUOM;
end
else
begin
ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvoTradUOM;
ResourceRel.Price := ResourceRel.Price * SprSuppliesKind.Data.UnitKolvoTradUOM;
end;
end
else
begin
ResourceRel.Izm := SprSuppliesKind.Data.Name;
ResourceRel.Kolvo := ResourceRel.Kolvo / SprSuppliesKind.Data.UnitKolvo;
ResourceRel.Price := ResourceRel.Price * SprSuppliesKind.Data.UnitKolvo;
end;
ResourceRel.CalcCost;
end
else
begin
if CheckPriceTransformToUOMByCompType(@ResourceCompon.ComponentType) then
begin
ResourceRel.Izm := GetNameUOM(TF_Main(GForm).FUOM, true);
if TF_Main(GForm).FUOM <> umMetr then
begin
ResourceRel.Kolvo := FloatInUOM(ResourceRel.Kolvo, umMetr, TF_Main(GForm).FUOM);
ResourceRel.Price := FloatInUOM(ResourceRel.Price, TF_Main(GForm).FUOM, umMetr);
ResourceRel.CalcCost;
end;
end;
end;
end;
//*** Ó÷èòûâàòü ôëàã îêðóãëåíèÿ â áîëüøóþ ñòîðîíó
{ if ACanRoundValue then
begin
ResourceRel.Kolvo := RoundUp(ResourceRel.Kolvo);
ResourceRel.CalcCost;
end;}
end;
MemTable_RResources.Active := false;
MemTable_RResources.Active := true;
while not MemTable_RResources.Eof do
MemTable_RResources.Delete;
LoadResourcesOnlyToMT(NormResources.Resources);
SortMemTableByParams(MemTable_RResources, AParams, nil);
MemTable_RResources.First;
finally
EndProgress;
if NormResources <> nil then
FreeAndNil(NormResources);
end;
except
on E: Exception do AddExceptionToLog('TF_ResourceReport.ShowListResourceReport: '+E.Message);
end;
end;
CurrTick := GetTickCount - OldTick;
CurrTick := GetTickCount - OldTick;
end;
GFormMode := AParams.Mode;
ShowPreparedReport(AParams);
except
on E: Exception do AddExceptionToLogExt(ClassName, 'ShowCommerceInvoice', E.Message);
end;
end;
procedure TF_ResourceReport.ShowCablePaths(AParams: TReportItemParams);
var
//Params: TReportItemParams;
Interf: TSCSInterface;
i: Integer;
Paths: TObjectList;
Path: TInterfPath;
SideEndPaths: TObjectList; // ïîëó÷åííûå êîíå÷íûå îáúåêòû äëÿ ñòîðîíû èíòåðôåéñà
SidePathsInfo: TObjectList; // Èíôà î ïóòè äëÿ êàæäîãî êîíå÷íîãî îáúåêòà â SideEndObjects
StepPathsInfo: TObjectList; // Èíôà î òåêóùåì ðàñìàòðèâàåìîì ïóòè â ðåêóðñèè LoadPathsInfoForSide;
EndPaths: TObjectList;
PrevPathInfo: TInterfPath;
function CheckInterfInPaths(AInterf: TSCSInterface): Boolean;
var
i: Integer;
Path: TInterfPath;
begin
Result := false;
for i := 0 to Paths.Count - 1 do
begin
Path := TInterfPath(Paths[i]);
if Path.CheckInterfInPaths(AInterf) then
begin
Result := true;
Break; //// BREAK ////
end;
end;
end;
function GetEndPathList(APath: TInterfPath; ASideEndPaths: TObjectList): TObjectList;
var
i: Integer;
Paths: TObjectList;
begin
Result := nil;
for i := 0 to ASideEndPaths.Count - 1 do
begin
Paths := TObjectList(ASideEndPaths[i]);
if TSCSComponent(TInterfPath(Paths[0]).Compon).GetTopComponent = TSCSComponent(APath.Compon).GetTopComponent then
begin
Result := Paths;
Break; //// BREAK ////
end;
end;
end;
procedure AddToSidePaths(APath: TInterfPath);
var
InsIndex: Integer;
i: Integer;
SideEndFromPos: Integer;
MinFromPos: Integer;
begin
InsIndex := SideEndPaths.Count;
MinFromPos := 0;
for i := 0 to SideEndPaths.Count - 1 do
begin
SideEndFromPos := TInterfPath(TObjectList(SideEndPaths[i]).Items[0]).FromPos;
if (APath.FromPos < SideEndFromPos) and ((MinFromPos=0) or (MinFromPos > SideEndFromPos)) then
begin
MinFromPos := SideEndFromPos;
InsIndex := i;
end;
end;
StepPathsInfo := APath.GetPathFromRoot;
EndPaths := TObjectList.Create(false);
EndPaths.Add(APath);
SideEndPaths.Insert(InsIndex, EndPaths); //SideEndPaths.Add(APath);
SidePathsInfo.Insert(InsIndex, StepPathsInfo);
end;
function LoadPathsInfoForSideStep(APath: TInterfPath): Boolean;
var
i: Integer;
ChildPath: TInterfPath;
ChildsRes: Boolean;
WithoutInterfCount: Integer;
EndPaths: TObjectList;
InsIndex: Integer;
begin
Result := false;
if APath.Interf <> nil then
begin
EndPaths := nil;
// Åñëè êîíå÷íûå îáúåêòû îòîáðàæàåì â îäíîé ãðóïïå
if Not cbCablePathShowConnInSeparatePaths.Checked then
EndPaths := GetEndPathList(APath, SideEndPaths);
if EndPaths = nil then
begin
if APath.Paths.Count = 0 then
begin
if (APath.ParentPath <> nil) then
begin
AddToSidePaths(APath);
Result := true;
end;
end
else
begin
WithoutInterfCount := 0;
for i := 0 to APath.Paths.Count - 1 do
begin
ChildPath := TInterfPath(APath.Paths[i]);
ChildsRes := LoadPathsInfoForSideStep(ChildPath);
if ChildsRes then
Result := true;
if ChildPath.Interf = nil then
WithoutInterfCount := WithoutInterfCount + 1;
end;
// Åñëè íà âñåõ äî÷åðíèõ îáúåêòàõ íå óêàçàí èíòåðôåéñ (ñîåäèíåíèå âíóòðè âåðõíåãî êîìïîíåíòà),
// òîãäà ýòîò áóäåò ïîëåäíèì
if (Not Result) and (APath.Paths.Count > 0) and (APath.Paths.Count = WithoutInterfCount) then
begin
Result := true;
AddToSidePaths(APath);
end;
end;
end
else
begin
InsIndex := EndPaths.Count;
for i := 0 to EndPaths.Count - 1 do
if APath.FromPos < TInterfPath(EndPaths[i]).FromPos then
begin
InsIndex := i;
Break; //// BREAK ////
end;
EndPaths.Insert(InsIndex, APath);
end;
end;
end;
function LoadPathsInfoForSide(APath: TInterfPath; var ASideEndPaths, ASidePathsInfo: TObjectList): Boolean;
begin
SideEndPaths.Clear;
SidePathsInfo.Clear;
ASideEndPaths := TObjectList.Create(true);
ASidePathsInfo := TObjectList.Create(true);
Result := LoadPathsInfoForSideStep(APath);
if Result = true then
begin
ASideEndPaths.Assign(SideEndPaths);
ASidePathsInfo.Assign(SidePathsInfo);
end;
end;
function PointPathToStr(APath: TInterfPath; ASidePathsInfo: TObjectList): String;
var
Indent: String;
IndentStep: Integer;
InternalConnected: TSCSComponents;
InternalCompon: TSCSComponent;
Compon: TSCSComponent;
TopComponent: TSCSComponent;
Path: TInterfPath;
Strings: TStringList;
//Str: String;
PortFromPos, PortToPos: Integer;
PortInfo: String;
i: Integer;
begin
Result := '';
Indent := '';
IndentStep := 2;
Strings := TStringList.Create;
Compon := TSCSInterface(APath.Interf).ComponentOwner;
TopComponent := Compon.GetTopComponent;
// Îïðåäåëÿåì ïîðò íà êîòîðûé ïðèõîäèò
PortInfo := '';
if APath.ConnPosition <> nil then
begin
if TSCSInterface(APath.Interf).PortOwner <> nil then
begin
if GetPortPosRangeByInterfRange(TSCSInterface(APath.Interf),
TSCSInterfPosition(APath.ConnPosition).FromPos, TSCSInterfPosition(APath.ConnPosition).ToPos,
PortFromPos, PortToPos) then
begin
PortInfo := ' ('+TSCSInterface(APath.Interf).PortOwner.LoadName + ' '+
IntToStr(PortFromPos)+' - '+IntToStr(PortToPos)+')';
end;
end;
//else
// PortInfo := TSCSInterface(APath.Interf).LoadName + ' '+
// IntToStr(TSCSInterfPosition(APath.ConnPosition).FromPos)+' - '+
// IntToStr(TSCSInterfPosition(APath.ConnPosition).ToPos);
end;
if cbCablePathShowConnInSeparatePaths.Checked then
begin
InternalConnected := TSCSComponents.Create(false);
// Èç íà÷àëà ïóòè âûãðåáàåì âíóòðè êîìïîíåíòíîå ïîäêëþ÷åíèå
for i := ASidePathsInfo.Count - 1 downto 0 do
begin
Path := TInterfPath(ASidePathsInfo[i]);
if TSCSComponent(Path.Compon).GetTopComponent = TopComponent then
begin
if InternalConnected.IndexOf(Compon) = -1 then
InternalConnected.Insert(0, TSCSComponent(Path.Compon));
end
else
Break; //// BREAK ////
end;
if InternalConnected.IndexOf(Compon) = -1 then
InternalConnected.Add(Compon);
// Îáúåêò
if cbCablePathShowEndObjName.Checked then
begin
Strings.Add(Indent + TopComponent.GetFirstParentCatalog.GetNameForVisible+'\');
Indent := Indent + DupStr(' ', IndentStep);
end;
// Âåðõíèé êîìïîíåíò
if InternalConnected.IndexOf(TopComponent) = -1 then
begin
Strings.Add(Indent + TopComponent.GetNameForVisible+'\');
Indent := Indent + DupStr(' ', IndentStep);
end;
// Âíóòðè-ïîäêëþ÷åííûå êîìïîíåíòû ïî èíòåðôåéñàì
for i := 0 to InternalConnected.Count - 1 do
begin
InternalCompon := InternalConnected[i];
Strings.Add(Indent + InternalCompon.GetNameForVisible);
if InternalCompon = Compon then
begin
Indent := Indent + DupStr(' ', IndentStep);
//22.12.2011 - Èíôà î ïîðòå íà êîòîðûé ïðèõîäèò
if PortInfo <> '' then
begin
Strings.Add(Indent + PortInfo);
Indent := Indent + DupStr(' ', IndentStep);
end;
end;
end;
// Âíóòðè-ïîäêëþ÷åííûå êîìïîíåíòû ïî ïîäêëþ÷åíèÿì
if APath.Paths.Count > 0 then
for i := 0 to APath.Paths.Count - 1 do
begin
Path := TInterfPath(APath.Paths[i]);
if Path.Interf = nil then
Strings.Add(Indent + TSCSComponent(Path.Compon).GetNameForVisible);
end;
InternalConnected.Free;
end
else
begin
if cbCablePathShowEndObjName.Checked then
begin
Strings.Add(Indent + TopComponent.GetFirstParentCatalog.GetNameForVisible+'\');
Indent := Indent + DupStr(' ', IndentStep);
end;
// Âåðõíèé êîìïîíåíò
Strings.Add(Indent + TopComponent.GetNameForVisible+'\');
Indent := Indent + DupStr(' ', IndentStep);
//22.12.2011 ñàì êîìïîíåíò
if TopComponent <> Compon then
begin
Strings.Add(Indent + Compon.GetNameForVisible+'\');
Indent := Indent + DupStr(' ', IndentStep);
end;
//22.12.2011 - Èíôà î ïîðòå íà êîòîðûé ïðèõîäèò
if PortInfo <> '' then
begin
Strings.Add(Indent + PortInfo);
Indent := Indent + DupStr(' ', IndentStep);
end;
end;
Result := Strings.Text;
Strings.Free;
end;
function EqualCompons(ACompon1, ACompon2: TSCSComponent): Boolean;
begin
Result := (ACompon1 = ACompon2); //or ((ACompon1.Whole_ID <> 0) and (ACompon1.Whole_ID = ACompon2.Whole_ID));
if Not Result and (ACompon1.Whole_ID <> 0) and (ACompon1.Whole_ID = ACompon2.Whole_ID) and
Not cbCablePathShowObjName.Checked and
(Not cbCablePathShowCableCanals.Checked or (ACompon1.GetParentComponent = ACompon2.GetParentComponent)) // Åñëè îòîáðàæàòü êàíàëû
then
Result := true;
end;
procedure AddToDescription(var ADescr: String; APath: TInterfPath; AMargin: Boolean=false);
var
Msg: String;
ParentCompon: TSCSComponent;
begin
if (PrevPathInfo = nil) or Not EqualCompons(TSCSComponent(APath.Compon), TSCSComponent(PrevPathInfo.Compon)) or
((TSCSInterface(APath.Interf).Kolvo <> TSCSInterface(PrevPathInfo.Interf).Kolvo) or (APath.FromPos <> PrevPathInfo.FromPos) or (APath.ToPos <> PrevPathInfo.ToPos)) then
begin
//Msg := PathToStr(APath, APath.FromPos, APath.ToPos);
Msg := TSCSInterface(APath.Interf).ComponentOwner.GetNameForVisible;
// Êàá.êàíàëû
if cbCablePathShowCableCanals.Checked then
begin
ParentCompon := TSCSInterface(APath.Interf).ComponentOwner.GetParentComponent;
while ParentCompon <> nil do
begin
Msg := ParentCompon.GetNameForVisible +'\'+Msg;
ParentCompon := ParentCompon.GetParentComponent;
end;
end;
// Èìÿ îáúåêòà
if cbCablePathShowObjName.Checked then
Msg := TSCSInterface(APath.Interf).ComponentOwner.GetFirstParentCatalog.GetNameForVisible +'\'+Msg;
if Msg <> '' then
begin
FmtCablePathsInfo.Append;
FmtCablePathsInfo.FieldByName(fnParentID).AsInteger := FmtCablePaths.FieldByName(fnID).AsInteger;
FmtCablePathsInfo.FieldByName(fnDescription).AsString := Msg;
//FmtCablePathsInfo.FieldByName(fnNumPair).AsString :=
// IntTostr(TSCSInterface(APath.Interf).Kolvo)+ ' ('+IntToStr(APath.FromPos)+'-'+IntToStr(APath.ToPos)+')';
FmtCablePathsInfo.FieldByName(fnInterfCount).AsInteger := TSCSInterface(APath.Interf).Kolvo;
FmtCablePathsInfo.FieldByName(fnNameFrom).AsInteger := APath.FromPos;
FmtCablePathsInfo.FieldByName(fnNameTo).AsInteger := APath.ToPos;
FmtCablePathsInfo.FieldByName(fnMargin).AsInteger := BoolToInt(AMargin);
FmtCablePathsInfo.Post;
end;
end;
PrevPathInfo := APath;
end;
procedure LoadLineInterfacesFromEndPath(APath: TInterfPath; AInterList: TObjectList);
var
PrevPath: TInterfPath;
begin
// Îïðåäåëÿåì èíòåðôåéñû êàáåëÿ ïîäêëþ÷åííîãî ê òî÷. êîìïîíåíòó
PrevPath := APath;
while PrevPath <> nil do
begin
if (PrevPath.Interf <> nil) and(TSCSComponent(PrevPath.Compon).IsLine = biTrue) then
begin
if (TSCSInterface(PrevPath.Interf).ParallelInterface <> nil) and
(AInterList.IndexOf(TSCSInterface(PrevPath.Interf).ParallelInterface)=-1) then
AInterList.Add(TSCSInterface(PrevPath.Interf).ParallelInterface);
Break; //// BREAK ////
end;
PrevPath := PrevPath.ParentPath;
end;
end;
function ShowInterfPaths(APath: TInterfPath): Boolean;
var
Side1EndPaths: TObjectList;
Side1PathsInfo: TObjectList;
Side2EndPaths: TObjectList;
Side2PathsInfo: TObjectList;
SideREndPaths: TObjectList;
SideRPathsInfo: TObjectList;
SidePathsInfoFrom, SidePathsInfoTo: TObjectList;
EndPathList1, EndPathList2: TObjectList;
EndPathListFrom, EndPathListTo, EndPathListConnected: TObjectList;
EndComponents: TObjectList;
BeginLineInterfaces, EndLineInterfaces: TObjectList;
BeginLineInterf, EndLineInterf, InterfToDefine: TSCSInterface;
ConnectedCount: Integer;
//LookedPathList: TObjectList;
FullPathList: TObjectList;
EndPath1, EndPath2: TInterfPath;
EndPath: TInterfPath;
Path: TInterfPath;
PathInfo: TObjectList;
FullPath, FullPath2: TInterfPath;
ParamPath, ParamPath2: TInterfPath;
PathToShow: TInterfPath;
PathToShowToPos: Integer;
PrevPath: TInterfPath;
Res1, Res2: Boolean;
i, j, k, l: Integer;
Description: String;
RotatePath: Boolean;
OldFmtCablePathsInfoRecCnt: Integer; //13.10.2013
begin
Result := false;
if cbCablePathShowConnInSeparatePaths.Checked then
begin
// Èùåì êîíå÷íûå îáúåêòû ñ îäíîé ñòîðîíû
Res1 := LoadPathsInfoForSide(APath, Side1EndPaths, Side1PathsInfo);
if Res1 then
for i := 0 to Side1EndPaths.Count - 1 do
begin
//EndPath1 := TInterfPath(Side1EndPaths[i]);
EndPath1 := TInterfPath(TObjectList(Side1EndPaths[i]).Items[0]);
EndPath := nil;
EndPath := EndPath1;
PathInfo := TObjectList(Side1PathsInfo[i]);
//if (PathInfo.Count > 0) and (PathInfo[PathInfo.Count-1] = EndPath1) then
//begin
// Èùåì îò êîíå÷íîãî ñåãìåíòà, ñåãìåíò ñ êàáåëåì (ëèíåéíûì êîìïîíåíòîì)
//for j := PathInfo.Count - 1 downto 0 do
//begin
// Path := TInterfPath(PathInfo[j]);
// if TSCSComponent(Path.Compon).IsLine = biTrue then
// begin
// EndPath := Path;
// // ×òîáû íå ïîéòè â îáðàòíîì ïóòè ê EndPath1, áåðåì èíòåðôåéñ ñ äðóãîé ñòîðîíû
// if (Path.ParentPath <> nil) and (Path.ParentPath.Compon = Path.Compon) then
// EndPath := Path.ParentPath;
// Break; //// BREAK ////
// end;
//end;
// Èùåì îò êîíå÷íîãî ñåãìåíòà, ñåãìåíò ñ òî÷.êîìïîíåíòîì êîò-é ñîåäèíåí ñ ëèíåéíûì (äëÿ ñëó÷àÿ ïîäêëþ÷åíèé â ïðåäåëàõ âåðõíåãî êîìïîíåíòà)
//for j := PathInfo.Count - 1 downto 0 do
//begin
// Path := TInterfPath(PathInfo[j]);
// if TSCSComponent(Path.Compon).GetTopComponent = TSCSComponent(EndPath1.Compon).GetTopComponent then
// EndPath := Path
// else
// Break; //// BREAK ////
//end;
//end;
if EndPath <> nil then
begin
//FullPath := TSCSInterface(EndPath1.Interf).GetInterfPath(EndPath1.FromPos, EndPath1.ToPos, false);
FullPath := TSCSInterface(EndPath.Interf).GetInterfPath(EndPath.FromPos, EndPath.ToPos, false);
ParamPath := FullPath.GetPathByInterfFromAll(APath.Interf);
if ParamPath <> nil then
begin
Result := true;
Res2 := LoadPathsInfoForSide(FullPath, Side2EndPaths, Side2PathsInfo);
if Res2 then
begin
// òóò àâýõà(â ýòîì öèêëå)
for j := 0 to Side2EndPaths.Count - 1 do
begin
//EndPath2 := TInterfPath(Side2EndPaths[0]);
//EndPath2 := TInterfPath(Side2EndPaths[j]);
EndPath2 := TInterfPath(TObjectList(Side2EndPaths[j]).Items[0]);
PathInfo := TObjectList(Side2PathsInfo[j]);
PathToShow := ParamPath;
// Ñìîòðèì íà ïóòü ñ äðóãîé ñòîðîíû
FullPath2 := TSCSInterface(EndPath2.Interf).GetInterfPath(EndPath2.FromPos, EndPath2.ToPos, false);
ParamPath2 := FullPath2.GetPathByInterfFromAll(APath.Interf);
SideREndPaths := nil;
SideRPathsInfo := nil;
// Åñëè ñ äðóãîé ñòîðîíû âèäåì äåòàëüíåå: ìåíüøèé äèàïàçîí æèë, òîãäà îòîáðàæàåì ïóòü ñ òàêîé ñòîðîíû
if (ParamPath2 <> nil) and ((ParamPath2.ToPos-ParamPath2.FromPos) < (ParamPath.ToPos-ParamPath.FromPos)) then
begin
PathToShow := ParamPath2;
Res2 := LoadPathsInfoForSide(FullPath2, SideREndPaths, SideRPathsInfo);
if Res2 and (SideRPathsInfo.Count > 0) then
begin
PathInfo := TObjectList(SideRPathsInfo[0]);
RotateTObjectList(PathInfo);
end;
end;
FmtCablePaths.Append;
FmtCablePaths.FieldByName(fnName).AsString := TSCSInterface(PathToShow.Interf).LoadName+ ' '+
IntToStr(PathToShow.FromPos)+'-'+IntToStr(PathToShow.ToPos);
FmtCablePaths.FieldByName(fnNppFrom).AsInteger := PathToShow.FromPos;
FmtCablePaths.FieldByName(fnNppTo).AsInteger := PathToShow.ToPos;
FmtCablePaths.FieldByName(fnNameFrom).AsString := PointPathToStr(EndPath1, TObjectList(Side1PathsInfo[i]));
FmtCablePaths.FieldByName(fnNameTo).AsString := PointPathToStr(EndPath2, TObjectList(Side2PathsInfo[j])); //PointPathToStr(EndPath2, TObjectList(Side2PathsInfo[0]));
FmtCablePaths.Post;
for k := 0 to PathInfo.Count - 1 do
AddToDescription(Description, TInterfPath(PathInfo[k]));
if ParamPath2 <> nil then
ParamPath2.Free;
if SideREndPaths <> nil then
SideREndPaths.Free;
if SideRPathsInfo <> nil then
SideRPathsInfo.Free;
end;
end;
Side2EndPaths.Free;
Side2PathsInfo.Free;
FullPath.Free;
end;
end;
end;
Side1EndPaths.Free;
Side1PathsInfo.Free;
FmtCablePaths.SortOn(fnNppFrom, []);
end
else
begin
Res1 := LoadPathsInfoForSide(APath, Side1EndPaths, Side1PathsInfo);
Res2 := LoadPathsInfoForSide(APath.PathSide, Side2EndPaths, Side2PathsInfo);
if Res1 and Res2 then
begin
OldFmtCablePathsInfoRecCnt := FmtCablePathsInfo.RecordCount;
for i := 0 to Side1EndPaths.Count - 1 do
begin
EndPathList1 := TObjectList(Side1EndPaths[i]);
for j := 0 to Side2EndPaths.Count - 1 do
begin
EndPathList2 := TObjectList(Side2EndPaths[j]);
EndPathListFrom := EndPathList1;
EndPathListTo := EndPathList2;
SidePathsInfoFrom := Side1PathsInfo;
SidePathsInfoTo := Side2PathsInfo;
// Áóäåì ðàñìàòðèâàòü ïóòü ñ òîé ñòîðîíû ãäå áîëüøå ðàñêëþåí êàáåëü
//if EndPathList2.Count > EndPathList1.Count then
//if EndPathList2.Count < EndPathList1.Count then
//begin
// EndPathListFrom := EndPathList2;
// EndPathListTo := EndPathList1;
// SidePathsInfoFrom := Side2PathsInfo;
// SidePathsInfoTo := Side1PathsInfo;
//end;
EndPath1 := TInterfPath(EndPathListFrom[0]);
EndPath2 := TInterfPath(EndPathListTo[0]);
PathToShow := APath;
PathToShowToPos := 0;
FmtCablePaths.Append;
// èìÿ êàáåëÿ âûâåäåì ÷óòü íèæå - èç-çà îïðåäåëåíÿ äåòàëüíîãî äèàïàçîíà æèë
FmtCablePaths.FieldByName(fnNameFrom).AsString := PointPathToStr(EndPath1, TObjectList(Side1PathsInfo[i]));
FmtCablePaths.FieldByName(fnNameTo).AsString := PointPathToStr(EndPath2, TObjectList(Side2PathsInfo[j]));
FmtCablePaths.Post;
EndPathListConnected := TObjectList.Create(false);
EndComponents := TObjectList.Create(false);
BeginLineInterfaces := TObjectList.Create(false);
EndLineInterfaces := TObjectList.Create(false);
//LookedPathList := TObjectList.Create(false);
FullPathList := TObjectList.Create(true);
for k := 0 to EndPathListFrom.Count - 1 do
begin
EndPath1 := TInterfPath(EndPathListFrom[k]);
EndPath := EndPath1;
if TSCSInterface(EndPath.Interf).id = 10182 then
EmptyProcedure;
FullPath := TSCSInterface(EndPath.Interf).GetInterfPath(EndPath.FromPos, EndPath.ToPos, false);
FullPathList.Add(FullPath);
// Îïðåäåëÿåì èíòåðôåéñû êàáåëÿ ïîäêëþ÷åííîãî ê òî÷. êîìïîíåíòó
LoadLineInterfacesFromEndPath(EndPath1, BeginLineInterfaces);
for l := EndPathListTo.Count - 1 downto 0 do
begin
EndPath2 := TInterfPath(EndPathListTo[l]);
PathToShow := FullPath.GetPathByInterfFromAll(EndPath2.Interf, EndPath2.FromPos, EndPath2.ToPos);
if PathToShow <> nil then
//if LookedPathList.IndexOf(EndPath2) = -1 then
begin
EndPathListConnected.Add(PathToShow); //EndPathListConnected.Add(PathToShow);
EndComponents.Add(PathToShow.Compon);
//LookedPathList.Add(EndPath2);
// Îïðåäåëÿåì èíòåðôåéñû êàáåëÿ ïîäêëþ÷åííîãî ê òî÷. êîìïîíåíòó
LoadLineInterfacesFromEndPath(PathToShow, EndLineInterfaces);
//PathToShow := FullPath.GetPathByInterfFromAll(EndPath1.Interf, 41,41);
// Âûâîäèì ïîäêëþ÷åííûå òî÷ êîìïîíåíòû îáúåêòà (íà÷àëî)
if EndPathListConnected.Count > 0 then
AddToDescription(Description, EndPath1, true);
end;
end;
end;
SideREndPaths := nil;
SideRPathsInfo := nil;
PathInfo := TObjectList(Side2PathsInfo[j]); // Ïóòü
PathToShow := nil;
InterfToDefine := nil;
RotatePath := false;
// Îïðåäåëÿåì èíòåðôåéñ êîíå÷íîãî êóñêà êàáåëÿ èç êîòîðîãî ìîæíî ïîëó÷èòü áîëåå äåòàëüíóþ èíôó î äèàïàçîíå æèë
// íàïðèìåð â APath 50 æèë, à çàäåéñòâîâàíî ñ 21-30
if (BeginLineInterfaces.Count = 1) and (EndLineInterfaces.Count = 1) then
begin
BeginLineInterf := TSCSInterface(BeginLineInterfaces[0]);
EndLineInterf := TSCSInterface(EndLineInterfaces[0]);
if BeginLineInterf.Kolvo < EndLineInterf.Kolvo then
InterfToDefine := BeginLineInterf
else
begin
InterfToDefine := EndLineInterf;
RotatePath := true;
end;
end
else if BeginLineInterfaces.Count = 1 then
InterfToDefine := TSCSInterface(BeginLineInterfaces[0])
else if EndLineInterfaces.Count = 1 then
begin
InterfToDefine := TSCSInterface(EndLineInterfaces[0]);
RotatePath := true;
end;
//if EndLineInterfaces.Count = 1 then
// InterfToDefine := TSCSInterface(EndLineInterfaces[0]);
if InterfToDefine <> nil then
begin
FullPath := InterfToDefine.GetInterfPath(1, InterfToDefine.Kolvo, false);
FullPathList.Add(FullPath);
PathToShow := FullPath.GetPathByInterfFromAll(APath.Interf);
if PathToShow <> nil then
begin
//PathToShowToPos := PathToShow.ToPos;
// PathToShow ìîæåò ïðåíàäëåæàòü êàáåëþ â êîòîðîãî êàæäàÿ æèëà ðàñêëþ÷åíà è â èòîãå óâèäåì 1-48 âìåñòî 1-1
PathToShowToPos := PathToShow.FromPos + (FullPath.ToPos - (FullPath.FromPos-1)-1);
Res2 := LoadPathsInfoForSide(FullPath, SideREndPaths, SideRPathsInfo);
if Res2 and (SideRPathsInfo.Count > 0) then
begin
PathInfo := TObjectList(SideRPathsInfo[0]);
if RotatePath then
RotateTObjectList(PathInfo);
end;
end;
end;
// Âûâîäèì ïóòü è êîíå÷íûå îáúåêòû
if EndPathListConnected.Count > 0 then
begin
// Âûâîäèì ïóòü (êàáåëè)
for l := 0 to PathInfo.Count - 1 do
begin
Path := TInterfPath(PathInfo[l]);
if EndComponents.IndexOf(Path.Compon) = -1 then
AddToDescription(Description, Path);
end;
// Âûâîäèì ïîäêëþ÷åííûå òî÷ êîìïîíåíòû îáúåêòà (êîíåö)
for l := 0 to EndPathListConnected.Count - 1 do
begin
EndPath := TInterfPath(EndPathListConnected[l]);
AddToDescription(Description, EndPath, true);
end;
end;
//PathToShow := nil;
// Åñëè êîíå÷íûé îáúåêò îäèí (êàáåëü íå ðàçâåäåí íà íåñêîëüêî êîìïëåêòåþùèõ øêàôà), òîãäà îòîáðàæàåì ñêîëüêî æèë êàáåëÿ çàäåéñòâîâàíî
//if EndPathListConnected.Count = 1 then
//begin
// EndPath := TInterfPath(EndPathListConnected[0]);
// FullPath := TSCSInterface(EndPath.Interf).GetInterfPath(EndPath.FromPos, EndPath.ToPos, false);
// PathToShow := FullPath.GetPathByInterfFromAll(APath.Interf);
//end;
if PathToShow = nil then
begin
PathToShow := APath;
PathToShowToPos := APath.ToPos;
end;
FmtCablePaths.Edit;
FmtCablePaths.FieldByName(fnName).AsString := TSCSInterface(PathToShow.Interf).LoadName+ ' '+
IntToStr(PathToShow.FromPos)+'-'+IntToStr(PathToShowToPos);
FmtCablePaths.Post;
Result := FmtCablePathsInfo.RecordCount > OldFmtCablePathsInfoRecCnt; //13.10.2013 - Ïîïàëè ëè äàííûå èíòåðôåéñà â îò÷åò
if SideREndPaths <> nil then
SideREndPaths.Free;
if SideRPathsInfo <> nil then
SideRPathsInfo.Free;
FullPathList.Free;
EndLineInterfaces.Free;
BeginLineInterfaces.Free;
EndComponents.Free;
EndPathListConnected.Free;
//LookedPathList.Free;
end;
end;
end;
Side1EndPaths.Free;
Side1PathsInfo.Free;
Side2EndPaths.Free;
Side2PathsInfo.Free;
end;
end;
begin
try
if FComponent <> nil then
begin
if FmtCablePaths = nil then
begin
CreateMTWithDsrc(Self, FmtCablePaths, FdsrcCablePaths, 'FmtCablePaths', 'FdsrcCablePaths');
FmtCablePaths.FieldDefs.Add(fnID, ftAutoInc);
FmtCablePaths.FieldDefs.Add(fnName, ftString, 255);
//FmtCablePaths.FieldDefs.Add(fnNameFrom, ftString, 255);
FmtCablePaths.FieldDefs.Add(fnNameFrom, ftMemo);
FmtCablePaths.FieldDefs.Add(fnNppFrom, ftInteger);
//FmtCablePaths.FieldDefs.Add(fnNameTo, ftString, 255);
FmtCablePaths.FieldDefs.Add(fnNameTo, ftMemo);
FmtCablePaths.FieldDefs.Add(fnNppTo, ftInteger);
//FmtCablePaths.FieldDefs.Add(fnDescription, ftMemo);
CreateMTWithDsrc(Self, FmtCablePathsInfo, FdsrcCablePathsInfo, 'FmtCablePathsInfo', 'FdsrcCablePathsInfo');
FmtCablePathsInfo.FieldDefs.Add(fnID, ftAutoInc);
FmtCablePathsInfo.FieldDefs.Add(fnParentID, ftInteger);
FmtCablePathsInfo.FieldDefs.Add(fnDescription, ftString, 255);
//FmtCablePathsInfo.FieldDefs.Add(fnNumPair, ftString, 255);
FmtCablePathsInfo.FieldDefs.Add(fnInterfCount, ftInteger);
FmtCablePathsInfo.FieldDefs.Add(fnNameFrom, ftInteger);
FmtCablePathsInfo.FieldDefs.Add(fnNameTo, ftInteger);
FmtCablePathsInfo.FieldDefs.Add(fnMargin, ftInteger);
ConnectDetailMemTable(FdsrcCablePaths, FmtCablePathsInfo, fnID, fnParentID);
end;
FmtCablePaths.Active := false;
FmtCablePaths.Active := true;
FmtCablePathsInfo.Active := false;
FmtCablePathsInfo.Active := true;
Paths := TObjectList.Create(true);
SideEndPaths := TObjectList.Create(false);
SidePathsInfo := TObjectList.Create(false);
for i := 0 to FComponent.Interfaces.Count - 1 do
begin
Interf := FComponent.Interfaces[i];
if (Interf.TypeI = itFunctional) and Not CheckInterfInPaths(Interf) then
begin
Path := Interf.GetInterfPath(1, Interf.Kolvo);
if Path.ChildReferences.Count < Path.PathSide.ChildReferences.Count then
Path := Path.PathSide;
if ShowInterfPaths(Path) then
Paths.Add(Path);
end;
end;
FreeAndNil(SideEndPaths);
FreeAndNil(SidePathsInfo);
FreeAndNil(Paths);
//Params := TReportItemParams.Create(fmRCablePaths, rtCablePaths, rkProject);
GFormMode := fmRCablePaths;
ShowPreparedReport(AParams);
//ShowWizard([rkCablePath], true);
//FreeAndNil(Params);
end;
except
on E: Exception do AddExceptionToLogExt(ClassName, 'ShowCablePaths', E.Message);
end;
end;
procedure TF_ResourceReport.ShowCrossConnection(AParams: TReportItemParams);
var
i, j: Integer;
ChildCompon: TSCSComponent;
InterfFrom, interfTo: TSCSInterface;
procedure LoadConnectionByInterf(aInterf: TSCSInterface; const aFldName, aFldPort: String);
var
Compon, ParentCompon: TSCSComponent;
FldName, FldPort: String;
NppFrom, NppTo: Integer;
begin
if aInterf.ConnectedInterfaces.Count > 0 then
begin
Compon := aInterf.ConnectedInterfaces[0].ComponentOwner;
ParentCompon := Compon.GetParentComponent;
FldName := Compon.GetNameForVisible;
if ParentCompon <> Compon.GetTopComponent then
FldName := ParentCompon.GetNameForVisible +'\'+ FldName;
FldPort := '';
if GetPortInfoByJoinedCompons(Compon, ChildCompon, NppFrom, NppTo) then
begin
if NppFrom = NppTo then
FldPort := IntToStr(NppFrom)
else
FldPort := IntToStr(NppFrom)+'-'+IntToStr(NppTo);
end;
FmtCrossConnection.FieldByName(aFldName).AsString := FldName;
FmtCrossConnection.FieldByName(aFldPort).AsString := FldPort;
end;
end;
begin
try
if FComponent <> nil then
begin
if FmtCrossConnection = nil then
begin
CreateMTWithDsrc(Self, FmtCrossConnection, FdsrcCrossConnection, 'FmtCrossConnection', 'FdsrcCrossConnection');
FmtCrossConnection.FieldDefs.Add(fnID, ftAutoInc);
FmtCrossConnection.FieldDefs.Add(fnNameFrom, ftMemo);
FmtCrossConnection.FieldDefs.Add(fnNppFrom, ftString, 255);
FmtCrossConnection.FieldDefs.Add(fnNameTo, ftMemo);
FmtCrossConnection.FieldDefs.Add(fnNppTo, ftString, 255);
FmtCrossConnection.FieldDefs.Add(fnName, ftString, 255);
FmtCrossConnection.FieldDefs.Add(fnMarkID, ftInteger);
end;
FmtCrossConnection.Active := false;
FmtCrossConnection.Active := true;
for i := 0 to FComponent.ChildReferences.Count - 1 do
begin
ChildCompon := FComponent.ChildReferences[i];
if ChildCompon.IsCrossComponent then
begin
InterfFrom := nil;
interfTo := nil;
for j := 0 to ChildCompon.Interfaces.Count - 1 do
begin
if InterfFrom = nil then
InterfFrom := ChildCompon.Interfaces[j]
else if interfTo = nil then
begin
interfTo := ChildCompon.Interfaces[j];
Break; //// BREAK ////
end;
end;
FmtCrossConnection.Append;
FmtCrossConnection.FieldByName(fnName).AsString := ChildCompon.GetNameForVisible;
FmtCrossConnection.FieldByName(fnMarkID).AsInteger := ChildCompon.MarkID;
if InterfFrom <> nil then
LoadConnectionByInterf(InterfFrom, fnNameFrom, fnNppFrom);
if InterfTo <> nil then
LoadConnectionByInterf(InterfTo, fnNameTo, fnNppTo);
FmtCrossConnection.Post;
end;
end;
FmtCrossConnection.SortOn(fnMarkID, []);
GFormMode := fmRCrossConnection;
ShowPreparedReport(AParams);
end;
except
on E: Exception do AddExceptionToLogExt(ClassName, 'ShowCrossConnection', E.Message);
end;
end;
function getnamemark(Figure: TFigure; SCSComponent: TSCSComponent): string;
var
ii: integer;
begin
result := '';
if Figure.ClassName = 'TConnectorObject' then
begin
if TConnectorObject(Figure).OutTextCaptions.Count > 0 then
begin
if TF_CAD(Figure.Owner.Owner).FShowObjectCaptionsType = st_Short then
begin
result := TConnectorObject(Figure).OutTextCaptions[0];
end
else
begin
for ii := 1 to TConnectorObject(Figure).OutTextCaptions.Count - 1 do
begin
if result <> '' then
result := result + #13#10;
result := result + TConnectorObject(Figure).OutTextCaptions[ii];
end;
end;
end
else
result := SCSComponent.NameMark;
end
else
result := SCSComponent.NameMark;
end;
procedure TF_ResourceReport.ShowWACoordinatesReport(AFolder: TSCSCatalog; AList: TStringList);
Var i,ii,j,k : integer;
SCSCatalog: TSCSCatalog;
SCSComponent: TSCSComponent;
ObjectsList: TList;
CurrentWA: TConnectorObject;
FiguresList : Tlist;
SCSList: TSCSList;
WAList: TF_CAD;
TypeFound : boolean;
MapScale, Coordinata : double;
SCSobject : TSCSCatalog;
Figure : TFigure;
AParams :TReportItemParams;
ReportItemParams: TReportItemParams;
CurrReportShablons: TReportShablons;
TemplateType: Integer;
ReportFileName: String;
ReportFilePath: String;
IsTemplate: Boolean;
SCSDir: String;
ReportFile: String;
DocName: String;
frExport: TfrBasicExpFilter;
ProgressCaption: String;
ExtensionName: String;
F_Preview: TF_Preview;
ListArray : TSCSCatalogs;
ListCount : integer;
Begin
if (AFolder <> nil) and (AFolder.ItemType <> itProject) and (AFolder.ItemType <> itList) then
begin
AFolder := AFolder.GetListOwner;
end;
if (AFolder <> nil) and (AList.Count > 0) then
begin
MemTable_WACoordinates.Close;
MemTable_WACoordinates.Open;
// åñëè ñòîèì íà ëèñòå
if AFolder.ItemType = itList then
begin
ListCount := 0;
for i:= 0 to AFolder.ChildCatalogReferences.Count - 1 do
begin
SCSObject := AFolder.ChildCatalogReferences[i];
for j := 0 to SCSObject.ComponentReferences.Count - 1 do
begin
SCSComponent := SCSObject.ComponentReferences[j];
TypeFound := False;
if SCScomponent.IsTop then
begin
for k := 0 to AList.Count - 1 do
begin
if SCSComponent.ComponentType.NamePlural = AList[k] then
begin
TypeFound := true;
break;
end;
end;
end;
// äîáàâëÿåì â òàáëèöó
if TypeFound then
begin
SCSObject := SCSComponent.GetFirstParentCatalog; // âåðõíèé îáúåêò êîìïîíåíòà(êàòàëîã) áóäåò èìåòü îòîáðàæåíèå íà Êàäå
WAList := GetListByID(SCSObject.GetListOwner.SCSID); // ïîëó÷àåì ÊÀÄ îáúåêòà
if WAList <> nil then
begin
ListCount := ListCount + 1;
MemTable_WACoordinates.Edit;
MemTable_WACoordinates.Append;
MemTable_WACoordinates.FieldByName('Name_List').AsString := AFolder.GetNameForVisible(false); // íàèìåíîíèå ëèñòà
MemTable_WACoordinates.FieldByName('Name').AsString := SCSComponent.GetNameForVisible(false); // íàèìåíîâàíèå êîìïîíåíòà
Figure := GetFigureByID(WALIST,SCSObject.SCSID); // îáúåêò íà êàäå - ôèãóðà
MemTable_WACoordinates.FieldByName('NameMark').AsString := GetNameMark(Figure, SCSComponent);
MapScale := WAList.PCad.MapScale; // ìàñøòàá ñåòêè Êàäà
Coordinata := Figure.ActualPoints[1].x * Mapscale / 1000; // Õ - êîîðäèíàòà
MemTable_WACoordinates.FieldByName('X').AsString := FormatFloat('0.00',MetreToUOM(Coordinata));
Coordinata := Figure.ActualPoints[1].y * Mapscale / 1000; // Y - êîîðäèíàòà
MemTable_WACoordinates.FieldByName('Y').AsString := FormatFloat('0.00',MetreToUOM(Coordinata));
Coordinata := TConnectorObject(Figure).ActualZOrder[1]; // Y - êîîðäèíàòà
MemTable_WACoordinates.FieldByName('Z').AsString := FormatFloat('0.00',MetreToUOM(Coordinata));
end;
end;
end;
end;
end;
// åñëè ñòîèì íà ïðîåêòå
if AFolder.ItemType = itProject then
begin
ListArray := TSCSCatalogs.Create(false);
ListCount := 0;
// îïðåäåëÿåì ëèñòû
for i := 0 to AFolder.ChildCatalogReferences.Count - 1 do
begin
if AFolder.ChildCatalogReferences[i].ItemType = itList then
begin
if GetListByID(AFolder.ChildCatalogReferences[i].GetListOwner.SCSID) <> nil then
begin
ListArray.Add(AFolder.ChildCatalogReferences[i]);
ListCount := ListCount + 1;
end;
end;
end;
// åñëè åñòü ëèñòû íà ïðîåêòå c îòêðûòûìè êàäàìè
if ListCount > 0 then
begin
// ïðîõîäèì ïî âñåì ëèñòàì
for i := 0 to ListArray.Count - 1 do
begin
SCSCatalog := Listarray[i];
for j := 0 to SCSCatalog.ComponentReferences.Count -1 do
begin
TypeFound := false;
SCSComponent := SCSCatalog.ComponentReferences[j];
if SCSComponent.IsTop then
begin
for k := 0 to AList.Count -1 do
begin
if SCSComponent.ComponentType.NamePlural = AList[k] then
begin
TypeFound := true;
break;
end;
end;
end;
if TypeFound then
begin
MemTable_WACoordinates.Edit;
MemTable_WACoordinates.Append;
MemTable_WACoordinates.FieldByName('Name_List').AsString := SCSCatalog.GetNameForVisible(false); // íàèìåíîíèå ëèñòà
MemTable_WACoordinates.FieldByName('Name').AsString := SCSComponent.GetNameForVisible(false); // íàèìåíîâàíèå êîìïîíåíòà
SCSObject := SCSComponent.GetFirstParentCatalog; // âåðõíèé îáúåêò êîìïîíåíòà(êàòàëîã) áóäåò èìåòü îòîáðàæåíèå íà Êàäå
WAList := GetListByID(SCSObject.GetListOwner.SCSID); // ïîëó÷àåì ÊÀÄ îáúåêòà
Figure := GetFigureByID(WALIST,SCSObject.SCSID); // îáúåêò íà êàäå - ôèãóðà
MemTable_WACoordinates.FieldByName('NameMark').AsString := GetNameMark(Figure, SCSComponent);
MapScale := WAList.PCad.MapScale; // ìàñøòàá ñåòêè Êàäà
Coordinata := Figure.ActualPoints[1].x * Mapscale / 1000; // Õ - êîîðäèíàòà
MemTable_WACoordinates.FieldByName('X').AsString := FormatFloat('0.00',MetreToUOM(Coordinata));
Coordinata := Figure.ActualPoints[1].y * Mapscale / 1000; // Y - êîîðäèíàòà
MemTable_WACoordinates.FieldByName('Y').AsString := FormatFloat('0.00',MetreToUOM(Coordinata));
Coordinata := TConnectorObject(Figure).ActualZOrder[1]; // Y - êîîðäèíàòà
MemTable_WACoordinates.FieldByName('Z').AsString := FormatFloat('0.00',MetreToUOM(Coordinata));
end;
end;
end;
end;
end;
end;
if ListCount > 0 then
begin
GFormMode := fmWACoordinates;
ReportFileName := '';
ReportFilePath := '';
//*** Îïðåäåëèòü øàáëîí îò÷åòà
ReportItemParams := nil;
//if tvReports.Selected <> nil then
// ReportItemParams := TReportItemParams(tvReports.Selected.Data);
ReportItemParams := AParams;
IsTemplate := false;
if ReportItemParams <> nil then
begin
//*** Îïðååëèòü òåêóùèé òèï øàáëîíà
TemplateType := ttSimple;
if cbReportWithStamp.Enabled and cbReportWithStamp.Checked then
TemplateType := ttStamp;
//*** Îïðåäåëèòü ïàðàìåòðû òåêùåãî øàáëîíà
CurrReportShablons := ReportItemParams.GetShablonsByTemplateType(TemplateType);
//*** Åñëè øàáëîí íå ñòàíäàðòíûé, òî èçâëå÷ åãî â ôàéë
if (CurrReportShablons <> nil) and (CurrReportShablons.FActiveShablonID > 0) then
begin
IsTemplate := true;
ReportFileName := GetReportFileNameByType(ReportItemParams.RepType, TemplateType, false);
//showmessage(ReportFileName);
if ReportFileName <> '' then
ReportFilePath := GetPathToUserReportFile(ReportFileName);
if ReportFilePath <> '' then
begin
if FileExists(ReportFilePath) then
if Not DeleteFile(ReportFilePath) then
ReportFilePath := GetNoExistsFileNameForCopy(ReportFilePath);
if ReportFilePath <> '' then
TF_Main(GForm).DM.SaveUserReportByIDToFile(CurrReportShablons.FActiveShablonID, ReportFilePath);
end;
end;
end;
if FormList = nil then
formList := TObjectList.Create(false);
FCatalog := AFolder;
{$if Defined(ES_GRAPH_SC)}
SCSDir := ExeDir + '\';
{$else}
SCSDir := ExtractFilePath(paramstr(0));
{$ifend}
ReportFile := 'RWACoordinates.frf';//GetReportFileNameByType(AParams.RepType, GetTemplateTypeByCurrOptions, false);
ReportFile := SCSDir + dnReports + '\'+ReportFile;
{if FileExists(ReportFile) then
frDBDataSet_Detail.DataSource := nil;}
if FileExists(ReportFile) then
begin
Application.ProcessMessages;
FMasterOldRecNo := 0;
FDetailOldRecNo := 0;
FOldRecNo := 0;
FCurrRecNo := 0;
FPassNum := 1;
FModifiedReportTemplate := false;
DocName := cResourceReport_Msg1_29;
//DocName := ApplicationName + ' - ['+lvReports.Selected.Caption+']';
// frDBDataSet_Master.DataSource := dsrcReport;
// frDBDataSet_MasterFirst.DataSource := dsrcReportFirst;
frDBDataSet_Master.DataSource := DataSource_MT_WACoordinates;
Report.Title := DocName;
Report.LoadFromFile(ReportFile);
F_Preview := TF_Preview.Create(Application, GForm);
F_Preview.frPreview1.LoadFile(ReportFile);
// i := FormList.Add(F_Preview);
Report.Preview := F_Preview.frPreview1;
Report.ShowReport;
F_Preview.Caption := ConcatStrWithDefis(DocName, cResourceReport_Msg4 + IntToStr(i+1), 1);
// F_Preview.OnClose := {F_FR.}FormMdiClose;
F_Preview.ReportFileName := {F_FR.}Report.FileName;
F_Preview.ReportCaption := DocName;
if Assigned(F_Preview.frPreview1.OnMouseDown) then
EmptyProcedure;
F_Preview.Show;
end;
end;
End;
procedure TF_ResourceReport.ShowCablePathsWizard(ACable: TSCSComponent);
begin
//GFormMode := fmRCablePaths;
//ShowPreparedReport(AParams);
FComponent := ACable;
FCatalog := ACable.GetFirstParentCatalog;
ShowWizard([rkCablePath], true);
end;
procedure TF_ResourceReport.ShowCrossConnectionWizard(ACompon: TSCSComponent);
begin
FComponent := ACompon;
FCatalog := ACompon.GetFirstParentCatalog;
ShowWizard([rkCrossConnection], true);
end;
procedure TF_ResourceReport.ToolButton1Click(Sender: TObject);
begin
//if SaveDialog.Execute then
// RichEdit_Report.Lines.SaveToFile(SaveDialog.FileName);
end;
procedure TF_ResourceReport.ToolButton_PrintClick(Sender: TObject);
begin
//If PrintDialog.Execute then
// RichEdit_Report.Print(RichEdit_Report.Lines.Text);
end;
// ##### Âìåñòî 0 ìàêñ. äëèíû îòîáðàæàòü "íåò" #####
procedure TF_ResourceReport.GT_RCableMaxLengthGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
begin
if AText = '0' then
AText := '';
end;
procedure TF_ResourceReport.ReportGetValue(const ParName: String;
var ParValue: Variant);
begin
{ if ParName = 'TotalCost' then
ParValue := '';
if ParName = 'TodayDate' then
ParValue := '';}
if ParName = 'CurrencyName' then
begin
if rkProject in FReportUseKind then
ParValue := TF_Main(GForm).GCurrencyM.NameBrief
else
if rkCalc in FReportUseKind then
ParValue := FCostOfProjectReportParams.CurrencyName;
end;
if ParName = 'ExceedLength' then
ParValue := FExceedLength;
end;
procedure TF_ResourceReport.ReportUserFunction(const Name: String; p1, p2,
p3: Variant; var Val: Variant);
var
SCSProjCatalog: TSCSCatalog;
FooterBand: TfrBandView;
begin
SCSProjCatalog := nil;
if FCatalog <> nil then
if FCatalog.ItemType = itProject then
SCSProjCatalog := FCatalog
else
SCSProjCatalog := FCatalog.GetTopParentCatalog;
if Name = 'GETREPLABEL' then
Val := DateToStr(Date)+' '+cResourceReport_Msg24 +ApplicationName+' '+VersionEXE
else
if Name = 'GETPROJECTNAME' then
begin
Val := '';
SCSProjCatalog := nil;
if Assigned(FCatalog) then
if FCatalog.ItemType = itProject then
SCSProjCatalog := FCatalog
else
SCSProjCatalog := FCatalog.GetTopParentCatalog;
if Assigned(SCSProjCatalog) then
Val := SCSProjCatalog.GetNameForVisible;
end
else
if Name = 'GETLISTNAME' then
begin
Val := '';
if Assigned(FCatalog) then
if FCatalog.ItemType = itList then
Val := FCatalog.GetNameForVisible
else
if FCatalog.ItemType = itDir then
Val := FCatalog.GetNameForVisible+' ('+GetCatalogItemsNames(FCatalog, [itList])+')';
end
else
if Name = 'GETCOMPONNAME' then
begin
Val := '';
if Assigned(FComponent) then
val := FComponent.GetNameForVisible;
end
else
if Name = 'GETCABLEZAPAS' then
begin
Val := null;
if FCatalog.ItemType = itList then
Val := TSCSList(FCatalog).Setting.LengthKoef;
end
else
if Name = 'GETZAKAZCHIKNAME' then
begin
if rkCalc in FReportUseKind then
Val := FCostOfProjectReportParams.ZakazchikName
else
Val := TSCSProject(SCSProjCatalog).Setting.CustomerName;
{ if rkProject in FReportUseKind then
// if ((rkProject in FReportUseKind) or (rkWACoordinates in FReportUseKind)) then
begin
if SCSProjCatalog <> nil then
Val := TSCSProject(SCSProjCatalog).Setting.CustomerName;
end
else
if rkCalc in FReportUseKind then
Val := FCostOfProjectReportParams.ZakazchikName;}
end
else
if Name = 'GETPODRADCHIKNAME' then
begin
//changed by Tolik
// if rkProject in FReportUseKind then
// if ((rkProject in FReportUseKind) or (rkWACoordinates in FReportUseKind)) then
{ begin
if SCSProjCatalog <> nil then
Val := TSCSProject(SCSProjCatalog).Setting.ContractorName;
end
else
if rkCalc in FReportUseKind then
Val := FCostOfProjectReportParams.PodradchikName;}
if rkCalc in FReportUseKind then
Val := FCostOfProjectReportParams.PodradchikName
else
Val := TSCSProject(SCSProjCatalog).Setting.ContractorName;
end
else
if Name = 'GETORGANIZATIONNAME' then
begin
if SCSProjCatalog <> nil then
Val := TSCSProject(SCSProjCatalog).Setting.OrganizationName;
end
else
if Name = 'GETCURRNPP' then
begin
Val := DefineCurrRecNo; //frDBDataSet_Master.DataSource.DataSet.RecNo;
end
else
if Name = 'GETISNEWRECORD' then
begin
if (FCurrRecNo = FOldRecNo) and (FOldRecNo <> 0) then
Val := false
else
Val := true;
end
else
if Name = 'GETPASSNUM' then
begin
Val := FPassNum;
end
else
if Name = 'INCPASSNUM' then
begin
Inc(FPassNum);
Val := FPassNum;
end
else
if Name = 'DEFINEPAGEFOOTER' then
begin
FooterBand := TfrBandView(Report.FindObject('PageFooter'));
//if FooterBand <> nil then
//begin
//end;
end
else
if Name = 'GETLENGTHTHROUGHFLOOR' then
begin
Val := 0;
if FCatalog is TSCSProject then
Val := Round2(FloatInUOM(TSCSProject(FCatalog).Setting.HeightThroughFloor * (TSCSProject(FCatalog).IDsNearFloorFigures.Count) / 2,
umMetr, TF_Main(GForm).FUOM));
end
else
if Name = 'GETIZM' then
Val := GetNameUOM(TF_Main(GForm).FUOM, true)
else
if Name = 'GETIZMSYMB' then
Val := GetNameUOM(TF_Main(GForm).FUOM, true, false)
else
if Name = 'GETIZMLENMIN' then
Val := GetUOMLengthMin
else
if Name = 'GETIZMWEIGHT' then
Val := GetUOMWeight
else
if Name = 'GETNDS' then
begin
if rkProject in FReportUseKind then
begin
if SCSProjCatalog <> nil then
Val := TSCSProject(SCSProjCatalog).Setting.NDS;
end
end
else
if Name = 'GETPRICEWITHNDS' then //21.11.2013 - Âåðíóòü öåíó ñ ÍÄÑ
begin
Report.GetVariableValue(p1, Val);
if Val <> null then
if TSCSProject(SCSProjCatalog).Setting.NDS > 0 then
Val := Val * (TSCSProject(SCSProjCatalog).Setting.NDS/100+1)
end
else
if Name = 'GETTOTALLABORTIME' then
Val := GetDisplayTextToNORMLaborTime(IntToStr(FTotalLaborTime))
else
if Name = 'GETCAPT' then
begin
Val := '';
if p1 = 'CUSTOMER' then
Val := cRepMsg01
// added by Tolik for CommerceInvoice Report
else
if p1 = 'RESOURCES' then
Val := cRepMsg207_1
else
if p1 = 'CONTRACTOR' then
Val := cRepMsg02
else
if p1 = 'PROJNAME' then
Val := cRepMsg03
else
if p1 = 'PAGENAME' then
Val := cRepMsg10
else
if p1 = 'GRAPHSYMBLEGEND' then
Val := cRepMsg04
else
if p1 = 'NUM' then
Val := cRepMsg05
else
if p1 = 'NAME' then
Val := cRepMsg06
else
if p1 = 'INDICATION' then
Val := cRepMsg07
else
if p1 = 'WORKEDOUT' then
Val := cRepMsg08
else
if p1 = 'LENGTHALLCABLES' then
Val := cRepMsg227
else
if p1 = 'CHECKEDBY' then
Val := cRepMsg09
else
if p1 = 'UNDERLINE' then
Val := DupStr('_', 30) //'______________________________'
else
if p1 = 'ADJUSTT' then
Val := cRepMsg11
else
if p1 = 'VZAMINVENTNUMT' then
Val := cRepMsg12
else
if p1 = 'SIGNANDDATET' then
Val := cRepMsg13
else
if p1 = 'INVNUMPODLT' then
Val := cRepMsg14
else
if p1 = 'IZMT' then
Val := cRepMsg15
else
if p1 = 'KOLICHT' then
Val := cRepMsg16
else
if p1 = 'PAGET' then
Val := cRepMsg17
else
if p1 = 'NUMDOCT' then
Val := cRepMsg18
else
if p1 = 'SIGNT' then
Val := cRepMsg19
else
if p1 = 'DATET' then
Val := cRepMsg20
else
if p1 = 'STAGET' then
Val := cRepMsg21
else
if p1 = 'PAGEST' then
Val := cRepMsg22
else
if p1 = 'SIGNATURE' then
Val := cRepMsg23
else
if p1 = 'LASTNAME' then
Val := cRepMsg24
else
if p1 = 'CABLEDUCTSLIST' then
Val := cRepMsg25
else
if p1 = 'UOM' then
Val := cRepMsg26
else
if p1 = 'FULLNESSPERC' then
Val := cRepMsg27
else
if p1 = 'LENGTH_M' then
Val := cRepMsg154 + GetUOMWithOrthographMarks //cRepMsg28
else
if p1 = 'RESERVE_M' then
Val := cRepMsg155 + GetUOMWithOrthographMarks //cRepMsg29
else
if p1 = 'PRICE' then
Val := cRepMsg30
else
if p1 = 'COST' then
Val := cRepMsg31
else
if p1 = 'TOTAL' then
Val := cRepMsg32
else
if p1 = 'GENERALCABDUCTSLEN' then
Val := cRepMsg33
else
if p1 = 'M' then
Val := cRepMsg34
else
if p1 = 'GENERALRESERVLEN' then
Val := cRepMsg35
else
if p1 = 'CABLEDUCTSLIST_NOTE1' then
Val := cRepMsg36
else
if p1 = 'CABLELIST' then
Val := cRepMsg37
else
if p1 = 'CONNECTBEGINSH' then
Val := cRepMsg38
else
if p1 = 'CONNECTENDSH' then
Val := cRepMsg39
else
if p1 = 'GENERALCABLESLEN' then
Val := cRepMsg40
else
if p1 = 'GENERALRESERVLEN' then
Val := cRepMsg41
else
if p1 = 'CABLELIST_NOTE1' then
Val := cRepMsg42
else
if p1 = 'CABLELIST_NOTE2' then
Val := cRepMsg43
else
if p1 = 'LISTOFWORKS' then
Val := cRepMsg44
else
if p1 = 'CODE' then
Val := cRepMsg45
else
if p1 = 'VOLUME' then
Val := cRepMsg46
else
if p1 = 'RESOURCELIST' then
Val := cRepMsg47
else
if p1 = 'VENDORSERIALNUM' then
Val := cRepMsg48
else
if p1 = 'DISTRIBSERIALNUM' then
Val := cRepMsg49
else
if p1 = 'VENDOR' then
Val := cRepMsg50
else
if p1 = 'QUANTITY' then
Val := cRepMsg51
else
if p1 = 'PRICEVAT' then
Val := cRepMsg52
else
if p1 = 'COSTVAT' then
Val := cRepMsg53
else
if p1 = 'TOTALCOST' then
Val := cRepMsg54
else
if p1 = 'RESOURCELIST_NOTE1' then
Val := cRepMsg55
else
if p1 = 'EXTLOGBOOK' then
Val := cRepMsg56
else
if p1 = 'NUMPP' then
Val := cRepMsg57
else
if p1 = 'NUMCABLE' then
Val := cRepMsg58
else
if p1 = 'CABLEDATA' then
Val := cRepMsg59
else
if p1 = 'CORENUMBER' then
Val := cRepMsg60
else
if p1 = 'GOFROM' then
Val := cRepMsg61
else
if p1 = 'GOWHERE' then
Val := cRepMsg62
else
if p1 = 'BUILDING' then
Val := cRepMsg63
else
if p1 = 'DEVICE_RACK' then
Val := cRepMsg64
else
if p1 = 'ELEMENT_PANEL' then
Val := cRepMsg65
else
if p1 = 'SEATORCIRCUITBOARDTYPE' then
Val := cRepMsg66
else
if p1 = 'NUMPORT' then
Val := cRepMsg67
else
if p1 = 'PORTMARKING' then
Val := cRepMsg68
else
if p1 = 'JUNCTWITHCABLE' then
Val := cRepMsg69
else
if p1 = 'CABLINGTRACE' then
Val := cRepMsg70
else
if p1 = 'MARKINGLABEL' then
Val := cRepMsg71
else
if p1 = 'CABLEDIAMETERMM' then
Val := cRepMsg156 +', '+ GetUOMLengthMin //cRepMsg72
else
if p1 = 'CABLELEN_M_BUILDING' then
Val := cRepMsg157+', '+ GetNameUOM(TF_Main(GForm).FUOM, true)+' '+cRepMsg158 //cRepMsg73
else
if p1 = 'NOTE' then
Val := cRepMsg74
else
if p1 = 'CABLELOGBOOK' then
Val := cRepMsg75
else
if p1 = 'GOST21_101_97' then
Val := cRepMsg76
else
if p1 = 'CABLETYPE' then
Val := cRepMsg77
else
if p1 = 'NUMSWITCHBOARD' then
Val := cRepMsg78
else
if p1 = 'NUMSWITCHBOARDPORT' then
Val := cRepMsg79
else
if p1 = 'COMESFROM' then
Val := cRepMsg80
else
if p1 = 'NUMOUTLETORSWITCHBOARD' then
Val := cRepMsg81
else
if p1 = 'NUMOUTLETORSWITCHBOARDPORT' then
Val := cRepMsg82
else
if p1 = 'ROOM' then
Val := cRepMsg83
else
if p1 = 'CABLE' then
Val := cRepMsg84
else
if p1 = 'CATEGORY' then
Val := cRepMsg85
else
if p1 = 'FROM' then
Val := cRepMsg86
else
if p1 = 'TO' then
Val := cRepMsg87
else
if p1 = 'WORKPLACE' then
Val := cRepMsg88
else
if p1 = 'WORKAREA' then
Val := cRepMsg88_
else
if p1 = 'PORT' then
Val := cRepMsg89
else
if p1 = 'TYPE' then
Val := cRepMsg90
else
if p1 = 'SPECIFICATION' then
Val := cRepMsg91
else
if p1 = 'PRODMARKNUMSH' then
Val := cRepMsg92
else
if p1 = 'DISTRIBMARKNUMSH' then
Val := cRepMsg93
else
if p1 = 'VENDOR' then
Val := cRepMsg94
else
if p1 = 'PRICEWITHVAT' then
Val := cRepMsg95
else
if p1 = 'COSTWITHVAT' then
Val := cRepMsg96
else
if p1 = 'SUM' then
Val := cRepMsg97
else
if p1 = 'SPECIFICATION_NOTE1' then
Val := cRepMsg98
else
if p1 = 'SPECIFICATION_NOTE2' then
Val := cRepMsg99
else
if p1 = 'GOST21_110_95' then
Val := cRepMsg100
else
if p1 = 'POSITION' then
Val := cRepMsg101
else
if p1 = 'NAMEANDTECHCHARACK' then
Val := cRepMsg102
else
if p1 = 'DOCTYPEMARKINDICAT' then
Val := cRepMsg103
else
if p1 = 'CODEOFEQUIPMMATERIAL' then
Val := cRepMsg104
else
if p1 = 'FACTORYPRODUCER' then
Val := cRepMsg105
else
if p1 = 'UNITOFMEASURE' then
Val := cRepMsg106
else
if p1 = 'MASSOFUNITKG' then
Val := cRepMsg153 + GetUOMWeightOrthographMarks
else
if p1 = 'EXPLANATORYNOTE' then
Val := cRepMsg109
else
if p1 = 'BYTHEPROJECT' then
Val := cRepMsg110
else
if p1 = 'BASEPROJCURRENCY' then
Val := cRepMsg111
else
if p1 = 'PROJVAT' then
Val := cRepMsg112
else
if p1 = 'INTERFLOORLIFTINGSHEIGHT_M' then
Val := cRepMsg145 + GetUOMWithOrthographMarks //cRepMsg113
else
if p1 = 'BYPAGES' then
Val := cRepMsg114
else
if p1 = 'FLOORHEIGHT_M' then
Val := cRepMsg146 + GetUOMWithOrthographMarks //cRepMsg115
else
if p1 = 'DROPCEILINGHEIGHT_M' then
Val := cRepMsg147 + GetUOMWithOrthographMarks //cRepMsg116
else
if p1 = 'POINTOBJECTSPLACEMENTHEIGHT_M' then
Val := cRepMsg148 + GetUOMWithOrthographMarks //cRepMsg117
else
if p1 = 'ROUTEPLACEMENTHEIGHT_M' then
Val := cRepMsg149 + GetUOMWithOrthographMarks //cRepMsg118
else
if p1 = 'CONDUITSFULLNESSCOEFFICIENT' then
Val := cRepMsg119
else
if p1 = 'CABLELENGTHRESERVE' then
Val := cRepMsg120
else
if p1 = 'PORTRESERVE_M' then
Val := cRepMsg150 + GetUOMWithOrthographMarks //cRepMsg121
else
if p1 = 'MULTIPORTRESERVE_M' then
Val := cRepMsg151 + GetUOMWithOrthographMarks //Val := cRepMsg122
else
if p1 = 'MAXLENRESTRICTION_M' then
Val := cRepMsg152 + GetUOMWithOrthographMarks //cRepMsg123
else
if p1 = 'EXPLICATIONROOM' then
Val := cRepMsg124
else
if p1 = 'LETTERTOPLAN' then
Val := cRepMsg125
else
if p1 = 'FLOOR' then
Val := cRepMsg126
else
if p1 = 'LODGEMENTTNUM' then
Val := cRepMsg127
else
if p1 = 'ROOMNUM' then
Val := cRepMsg128
else
if p1 = 'APPOINTMENTROOM' then
Val := cRepMsg129
else
if p1 = 'SQUAREINSIDE' then
Val := cRepMsg130
else
if p1 = 'SQM' then
Val := cRepMsg159+'.'+GetNameUOM(TF_Main(GForm).FUOM, true, false)+'.' //êâ.ì. êâ.ôò. cRepMsg131
else
if p1 = 'INCLUDING' then
Val := cRepMsg132
else
if p1 = 'TOTALSQUARE' then
Val := cRepMsg133
else
if p1 = 'HABITABLESQUARE' then
Val := cRepMsg134
else
if p1 = 'BACKROOMSQUARE' then
Val := cRepMsg135
else
if p1 = 'SQUARENOINCLUDETOTATAL' then
Val := cRepMsg136
else
if p1 = 'SQUARESELFWILLEDBUILDING' then
Val := cRepMsg137
else
if p1 = 'HEIGHT' then
Val := cRepMsg138
else
if p1 = 'TOTALINFLOOR' then
Val := cRepMsg139
else
if p1 = 'EXPLICATIONCOMPON' then
Val := cRepMsg140
else
if p1 = 'COMPONNUM' then
Val := cRepMsg141
else
if p1 = 'NAMEMARK' then
Val := cRepMsg142
else
if p1 = 'CROSSJOURNAL' then
Val := cRepMsg143
else
if p1 = 'GOST21_110_95' then
Val := cRepMsg144
else
if p1 = 'INTERFLOORLIFTINGSHEIGHT' then
Val := cRepMsg145
else
if p1 = 'FLOORHEIGHT' then
Val := cRepMsg146
else
if p1 = 'DROPCEILINGHEIGHT' then
Val := cRepMsg147
else
if p1 = 'POINTOBJECTSPLACEMENTHEIGHT' then
Val := cRepMsg148
else
if p1 = 'ROUTEPLACEMENTHEIGHT' then
Val := cRepMsg149
else
if p1 = 'PORTRESERVE' then
Val := cRepMsg150
else
if p1 = 'MULTIPORTRESERVE' then
Val := cRepMsg151
else
if p1 = 'MAXLENRESTRICTION' then
Val := cRepMsg152
else
if p1 = 'MASSOFUNIT' then
Val := cRepMsg153
else
if p1 = 'LENGTH' then
Val := cRepMsg154
else
if p1 = 'RESERVE' then
Val := cRepMsg155
else
if p1 = 'CABLEDIAMETER' then
Val := cRepMsg156
else
if p1 = 'CABLELEN' then
Val := cRepMsg157
else
if p1 = 'BUILDING_S' then
Val := cRepMsg158
else
if p1 = 'SQ' then
Val := cRepMsg159
else
if p1 = 'MATERIALS' then
Val := cRepMsg160
else
if p1 = 'ARTICUL' then
Val := cRepMsg161
else
if p1 = 'WORKS' then
Val := cRepMsg162
else
if p1 = 'DEFECTACT' then
Val := cRepMsg164
else
if p1 = 'FINDDEFECT' then
Val := cRepMsg165
else
if p1 = 'WITHDEFINEWORKS' then
Val := cRepMsg166
else
if p1 = 'REPAIRDEFECT' then
Val := cRepMsg167
else
if p1 = 'ADDRESS' then
Val := cRepMsg168
else
if p1 = 'DEFECTDESCRIPTION' then
Val := cRepMsg169
else
if p1 = 'LINKTRANSPORT' then
Val := cRepMsg170
else
if p1 = 'POINTA' then
Val := cRepMsg171
else
if p1 = 'POINTB' then
Val := cRepMsg172
else
if p1 = 'CABLE' then
Val := cRepMsg173
else
if p1 = 'DEFACTMATERIALS' then
Val := cRepMsg174
else
if p1 = 'SETEQUIPMENT' then
Val := cRepMsg175
else
if p1 = 'EQUIPMENT' then
Val := cRepMsg176
else
if p1 = 'MOVEEQUIPMENT' then
Val := cRepMsg177
else
if p1 = 'DEFACTCONTRACTOR' then
Val := cRepMsg178
else
if p1 = 'DATEGETTING' then
Val := cRepMsg179
else
if p1 = 'DATEEXECUTION' then
Val := cRepMsg180
else
if p1 = 'FORCOMPONENT' then
Val := cRepMsg181
else
if p1 = 'R25HOMEANDAPPROACH' then
Val := cRepMsg191
else
if p1 = 'R25NAME' then
Val := cRepMsg182
else
if p1 = 'R25COOPERATIVE' then
Val := cRepMsg183
else
if p1 = 'R25HEO' then
Val := cRepMsg184
else
if p1 = 'R25AGREED' then
Val := cRepMsg185
else
if p1 = 'R25BOXINSTALLED' then
Val := cRepMsg186
else
if p1 = 'R25PRESENCEPOWER200WFROMNETWORK' then
Val := cRepMsg187
else
if p1 = 'R25CABLESETTOBOX' then
Val := cRepMsg188
else
if p1 = 'R25FIBEROPTICWELDED' then
Val := cRepMsg189
else
if p1 = 'R25EQUIPMENTINSTALLED' then
Val := cRepMsg190
else
//Tolik
if p1 = 'CROSSCONNECTION' then
Val := cRepMsg205
else
if p1 = 'BUILDINGDISTRIBUTOR' then
Val := cRepMsg228
else
if p1 = 'REELSCABLEFLOW' then
Val := ReelsCableFlow.Text
else
if p1 = 'CABLEREZERV' then
Val := cRepMsg229
else
if p1 = 'WACOORDINATES' then
Val := cRepMsg238
else
if p1 = 'PATH' then
Val := cRepMsg230
else
if p1 = 'THEN' then
Val := cRepMsg206
else
if p1 = 'PARTCABLELENGTH' then
Val := cRepMsg237
else
if p1 = 'PRIORCOSTOFPROJECT' then
Val := cRepMsg192
else
begin
val := GetStrFromStringsByKey(FRepMsgList, p1);
end;
end
else if Name = 'GETLOAT' then
begin
val := FloatToStrFix(p1, FloatPrecision);
end;
{if Name = 'EOPAGE' then
begin
// ïåðåäà¸ì íîìåð ïî ïîðÿäêó - Npp - èç áàçû
P1 := ExpandVariables(P1);
// è ïðåäûäóùèé íîìåð ïî ïîðÿäêó - Npp - èç áàçû
P2 := ExpandVariables(P2);
// åñëè îíè ðàâíû, òî ¹ ï/ï = - 1; - äëÿ íîðìàëüíîé íóìåðàöèè â îò÷¸òå
if P1 = P2 then
Val := - 1
else
Val := 0;
end;}
{if Name = 'HIDEZERO' then
if p1 = 0 then
Val := false
else
Val := true; }
end;
procedure TF_ResourceReport.ReportBeginPage(pgNo: Integer);
var
HeaderBand: TfrBandView;
FooterBand: TfrBandView;
ChildBand: TfrBandView;
Stream: TStream;
begin
//Report.Pages[1].
Exit;
FooterBand := TfrBandView(Report.FindObject('PageFooter')); //TfrBandView(Report.FindObject('PageFooter'));
if FooterBand <> nil then
begin
ChildBand := nil;
if pgNo = 0 then
ChildBand := TfrBandView(Report.FindObject('pfFirst'))
else
if pgNo > 0 then
ChildBand := TfrBandView(Report.FindObject('pfSecond'));
if ChildBand <> nil then
begin
FooterBand.Assign(ChildBand);
{Stream := TMemoryStream.Create;
try
Stream.Position := 0;
ChildBand.SaveToStream(Stream);
Stream.Position := 0;
FooterBand.LoadFromStream(Stream);
finally
FreeAndNil(Stream);
end;}
//FooterBand.ChildBand := ChildBand.Name;
//FooterBand.Master := ChildBand.Name;
end;
end;
end;
procedure TF_ResourceReport._tvReportTargetGetSelectedIndex(Sender: TObject;
Node: TTreeNode);
begin
Node.SelectedIndex := Node.ImageIndex;
end;
procedure TF_ResourceReport.Act_ShowWizardReportExecute(Sender: TObject);
var
ReportItemParams: TReportItemParams;
SCSCatalog: TSCSCatalog;
strMessg: String;
{CanHaveActiveComponents: Boolean;
CanHaveZeroPriceComponents: Boolean;
CanHaveDismountAccount: Boolean;
ComponsWithZeroPrice: Boolean;
FormMode: TResourceReportFormMode;
FullPathInCableJournal: Boolean; }
i: Integer;
CanPrintReport: Boolean;
CheckedObjectCount: Integer;
CheckedReportCount: Integer;
NodeTarget: TFlyNode;
//NodeReport: TFlyNode;
ListOfAllCADID: TIntList;
ListOfCADID: TIntList;
CurrDateTime: TDateTime;
SaveDialog: TSaveDialog;
DirDialogCaption: String;
DefDirName: String;
function GetCheckedObjectCount: Integer;
var
NodeTarget: TFlyNode;
begin
Result := 0;
NodeTarget := tvReportTarget.Items[0];
while NodeTarget <> nil do
begin
if NodeTarget.Cells[tciReport] = bsTrue then
Inc(Result);
NodeTarget := NodeTarget.GetNext;
end;
end;
function GetCheckedReportCount: Integer;
var
NodeReport: TFlyNode;
begin
Result := 0;
NodeReport := tvReports.Items[0];
while NodeReport <> nil do
begin
if Not NodeReport.Hidden then
if NodeReport.Cells[rciIsOn] = bsTrue then
Inc(Result);
NodeReport := NodeReport.GetNext;
end;
end;
procedure ShowReportInPackageMode;
var
NodeTarget: TFlyNode;
NodeReport: TFlyNode;
ReportItemParams: TReportItemParams;
begin
//*** Ïåðåáîð îáúåêòîâ
if (rkProject in FReportUseKind) or (rkMarkPages in FReportUseKind) then
begin
NodeTarget := nil;
if tvReportTarget.Items.Count > 0 then
NodeTarget := tvReportTarget.Items[0];
while NodeTarget <> nil do
begin
if NodeTarget.Cells[tciReport] = bsTrue then
begin
FObjectName := '';
SCSCatalog := TSCSCatalog(NodeTarget.Data);
if SCSCatalog <> nil then
FObjectName := SCSCatalog.GetNameForVisible;
//*** Ïåðåáîð îò÷åòîâ
NodeReport := tvReports.Items[0];
while NodeReport <> nil do
begin
if Not NodeReport.Hidden then
if NodeReport.Cells[rciIsOn] = bsTrue then
begin
ReportItemParams := TReportItemParams(NodeReport.Data);
FReportCaption := NodeReport.Text;
ShowReportByParams(SCSCatalog, ReportItemParams);
if FReportCountPrinted = FReportCountToPrint then
Break; //// BREAK ////
end;
NodeReport := NodeReport.GetNext;
end;
end;
if FReportCountPrinted = FReportCountToPrint then
Break; //// BREAK ////
NodeTarget := NodeTarget.GetNext;
end;
end
else
if IsSimpleReportKind(FReportUseKind) then //24.02.2011 if rkCalc in FReportUseKind then
begin
FObjectName := '';
//*** Ïåðåáîð îò÷åòîâ
NodeReport := tvReports.Items[0];
while NodeReport <> nil do
begin
if Not NodeReport.Hidden then
if NodeReport.Cells[rciIsOn] = bsTrue then
begin
ReportItemParams := TReportItemParams(NodeReport.Data);
FReportCaption := NodeReport.Text;
ShowReportByParams(SCSCatalog, ReportItemParams);
if FReportCountPrinted = FReportCountToPrint then
Break; //// BREAK ////
end;
NodeReport := NodeReport.GetNext;
end;
end;
end;
begin
strMessg := '';
ReportItemParams := nil;
SCSCatalog := nil;
FObjectName := '';
FReportCaption := '';
if tvReports.Selected <> nil then
begin
ReportItemParams := TReportItemParams(tvReports.Selected.Data);
FReportCaption := tvReports.Selected.Text;
end
else
strMessg := cResourceReport_Msg7;
{begin
if Assigned(lvReports.Selected) then
begin
ptrReportItemParams := lvReports.Selected.Data;
FReportCaption := lvReports.Selected.Caption;
end
else
strMessg := cResourceReport_Msg7;
end;}
if (rkProject in FReportUseKind) or (rkMarkPages in FReportUseKind) then
begin
SCSCatalog := GetTargetFolder;
if SCSCatalog = nil then
strMessg := cResourceReport_Msg8;
//if Assigned(tvReportTarget.Selected) then
// SCSCatalog := TSCSCatalog(tvReportTarget.Selected.Data)
//else
// strMessg := cResourceReport_Msg8;
end;
if strMessg <> '' then
ShowMessageByType(Self.Handle, smtDisplay, strMessg, Application.Title, mb_OK or MB_ICONINFORMATION)
else
begin
//*** ðåæèì ïðîñìîòðà, èëè ïðîñòîé ïå÷àòè
if rbModeView.Checked or rbModePrint.Checked then
begin
//Åñëè íå îïðåäåëåí øàáëîí äëÿ ìàðêèðîâî÷íîãî ëèñòà
if (ReportItemParams.FSimpleShablons.FActiveShablonID = -1) and (rkMarkPages in FReportUseKind) then
begin
if MessageModal(cResourceReport_Msg30, ApplicationName, MB_ICONQUESTION or MB_YESNO) = IDYES then
MakeNewReportTemplateWizard;
end;
if (ReportItemParams.FSimpleShablons.FActiveShablonID <> -1) or (ReportItemParams.CanHaveTemplate = biFalse) then
begin
//*** îïðåäåëèòü òèï óñòðîéñòâà âûâîäà - ïðèíòåð - äîêóìåíò
if rbModeView.Checked then
FPrintDevice := pdScreen
else
if rbModePrint.Checked then
FPrintDevice := pdPrinter;
ShowReportByParams(SCSCatalog, ReportItemParams);
end;
end
else
//*** ðåæèì ïàêåòíîé ïå÷àòè
if rbModePacketPrint.Checked then
begin
FPrintDevice := pdPrinter;
CanPrintReport := true;
//*** Îïðåäåëèòü ïå÷àòàåìûå ëèñòû
ListOfAllCADID := TIntList.Create;
ListOfCADID := TIntList.Create;
if rkProject in FReportUseKind then
begin
NodeTarget := tvReportTarget.Items[0];
while NodeTarget <> nil do
begin
SCSCatalog := TSCSCatalog(NodeTarget.Data);
if SCSCatalog is TSCSList then
begin
ListOfAllCADID.Add(TSCSList(SCSCatalog).SCSID);
if NodeTarget.Cells[tciCAD] = bsTrue then
ListOfCADID.Add(TSCSList(SCSCatalog).SCSID);
end;
NodeTarget := NodeTarget.GetNext;
end;
end;
//*** îïðåäåëèòü êîëè÷åñòâî îáúåêòîâ äëÿ ïå÷àòè
//CheckedObjectCount := 0;
//NodeTarget := tvReportTarget.Items[0];
//while NodeTarget <> nil do
//begin
// if NodeTarget.Cells[tciReport] = bsTrue then
// Inc(CheckedObjectCount);
// NodeTarget := NodeTarget.GetNext;
//end;
CheckedObjectCount := 0;
if (rkProject in FReportUseKind) or (rkMarkPages in FReportUseKind) then
CheckedObjectCount := GetCheckedObjectCount
else
if IsSimpleReportKind(FReportUseKind) then //24.02.2011 if rkCalc in FReportUseKind then
CheckedObjectCount := 1;
if CheckedObjectCount = 0 then
begin
CanPrintReport := false;
if ListOfCADID.Count = 0 then
MessageModal(cResourceReport_Msg18_1, ApplicationName, mb_OK or MB_ICONINFORMATION);
end;
//*** îïðåäåëèòü êîëè÷åñòâî ïå÷àòàåìûõ îò÷åòîâ
//CheckedReportCount := 0;
//NodeReport := tvReports.Items[0];
//while NodeReport <> nil do
//begin
// if NodeReport.Cells[rciIsOn] = bsTrue then
// Inc(CheckedReportCount);
// NodeReport := NodeReport.GetNext;
//end;
CheckedReportCount := GetCheckedReportCount;
if CheckedReportCount = 0 then
begin
CanPrintReport := false;
if ListOfCADID.Count = 0 then
MessageModal(cResourceReport_Msg18_2, ApplicationName, mb_OK or MB_ICONINFORMATION);
end;
//*** Ïå÷àòü ëèñòîâ
if rkProject in FReportUseKind then
PrintCADLists(ListOfAllCADID, ListOfCADID);
//*** Äèàëîã ïå÷àòè îò÷åòîâ
if CanPrintReport then
begin
if FFrPrintForm = nil then
FFrPrintForm := TfrPrintForm.Create(nil);
if GSCSIni.PM.RepDesignLanguageFile = fnRepDesignLangRus then
FFrPrintForm.Caption := cResourceReport_Msg19Rus
else
if GSCSIni.PM.RepDesignLanguageFile = fnRepDesignLangUkr then
FFrPrintForm.Caption := cResourceReport_Msg19Ukr;
FFrPrintForm.RB2.Enabled := False; // Current page
FFrPrintForm.RB3.Enabled := False; // Numbers:
FFrPrintForm.E2.Enabled := False; // Numbers:
FFrPrintForm.E1.Text := IntToStr(Report.DefaultCopies);
FFrPrintForm.CollateCB.Checked := Report.DefaultCollate;
if FFrPrintForm.ShowModal = mrOk then
begin
if CheckedObjectCount > 0 then
FReportCountToPrint := CheckedObjectCount * CheckedReportCount
else
FReportCountToPrint := CheckedReportCount;
FReportCountPrinted := 0;
ShowReportInPackageMode;
{//*** Ïåðåáîð îáúåêòîâ
NodeTarget := tvReportTarget.Items[0];
while NodeTarget <> nil do
begin
if NodeTarget.Cells[tciReport] = bsTrue then
begin
SCSCatalog := TSCSCatalog(NodeTarget.Data);
//*** Ïåðåáîð îò÷åòîâ
NodeReport := tvReports.Items[0];
while NodeReport <> nil do
begin
if NodeReport.Cells[rciIsOn] = bsTrue then
begin
ReportItemParams := TReportItemParams(NodeReport.Data);
ShowReportByParams(SCSCatalog, ReportItemParams);
end;
NodeReport := NodeReport.GetNext;
end;
end;
NodeTarget := NodeTarget.GetNext;
end; }
end;
FreeAndNil(FFrPrintForm);
end;
FreeAndNil(ListOfAllCADID);
FreeAndNil(ListOfCADID);
end
else
if rbModePacketPrintToExcel.Checked then
begin
FPrintDevice := pdExcel;
DirDialogCaption := cResourceReport_Msg26;
DefDirName := cResourceReport_Msg27;
if rbPackExportPdf.Checked then
begin
FPrintDevice := pdPdf;
DirDialogCaption := cResourceReport_Msg40;
DefDirName := cResourceReport_Msg41;
end;
CanPrintReport := true;
if (rkProject in FReportUseKind) or (rkMarkPages in FReportUseKind) then
begin
//*** îïðåäåëèòü êîëè÷åñòâî îáúåêòîâ äëÿ ïå÷àòè
CheckedObjectCount := GetCheckedObjectCount;
if CheckedObjectCount = 0 then
begin
CanPrintReport := false;
MessageModal(cResourceReport_Msg18_1, ApplicationName, mb_OK or MB_ICONINFORMATION);
end;
end;
//*** îïðåäåëèòü êîëè÷åñòâî ïå÷àòàåìûõ îò÷åòîâ
CheckedReportCount := GetCheckedReportCount;
if CheckedReportCount = 0 then
begin
CanPrintReport := false;
MessageModal(cResourceReport_Msg18_2, ApplicationName, mb_OK or MB_ICONINFORMATION);
end;
if CanPrintReport then
begin
CurrDateTime := Now;
//FPackgeDir := BrowseDialog('Ñîçäàíèå ïàïêè äëÿ Excel îò÷åòîâ...'); //'c:\temp\SCSReports\';
FPackgeDir := TF_Main(GForm).BrowseNewDirName(DirDialogCaption,
ExtractDirToNewReport(CurrDateTime),
FileNameCorrect(DefDirName+' '+DateTimeToStr(CurrDateTime)));
if FPackgeDir <> '' then
FPackgeDir := FPackgeDir + '\';
if FPackgeDir <> '' then
begin
if Not DirectoryExists(FPackgeDir) then
if Not CreateDir(FPackgeDir) then
begin
MessageModal(cResourceReport_Msg20 + FPackgeDir, ApplicationName, MB_ICONINFORMATION or MB_OK);
Exit; ///// EXIT /////
end;
if DirectoryExists(FPackgeDir) then
begin
if CheckedObjectCount > 0 then
FReportCountToPrint := CheckedObjectCount * CheckedReportCount
else
FReportCountToPrint := CheckedReportCount;
FReportCountPrinted := 0;
//*** Çàáëîêèðîâàòü BeginProgress
Inc(GIsProgressCount);
try
ShowReportInPackageMode;
finally
//*** Ðàçðåøèòü BeginProgress
Dec(GIsProgressCount);
end;
end;
end;
end;
end;
end;
end;
procedure TF_ResourceReport.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//Application.OnRestore := FSavedOnAppRestore;
//Application.OnMinimize := FSavedOnAppMinimize;
//FormList.Clear;
end;
procedure TF_ResourceReport.gbViewCloseResize(Sender: TObject);
begin
SetMiddleControlChilds(TControl(Sender), TControl(Self));
end;
procedure TF_ResourceReport.cbCanHaveActiveComponentsClick(
Sender: TObject);
//var
// ptrReportItemParams: PReportItemParams;
begin
//if lvReports.Selected <> nil then
//begin
// ptrReportItemParams := lvReports.Selected.Data;
// if ptrReportItemParams^.CanHaveActiveComponents <> biNone then
// if cbCanHaveActiveComponents.Checked then
// ptrReportItemParams^.CanHaveActiveComponents := biTrue
// else
// ptrReportItemParams^.CanHaveActiveComponents := biFalse;
//end;
end;
procedure TF_ResourceReport.cbCanHaveZeroPriceComponentsClick(
Sender: TObject);
//var
// ptrReportItemParams: PReportItemParams;
begin
//if lvReports.Selected <> nil then
//begin
// ptrReportItemParams := lvReports.Selected.Data;
// if ptrReportItemParams^.CanHaveZeroPriceComponents <> biNone then
// if cbCanHaveZeroPriceComponents.Checked then
// ptrReportItemParams^.CanHaveZeroPriceComponents := biTrue
// else
// ptrReportItemParams^.CanHaveZeroPriceComponents := biFalse;
//end;
end;
procedure TF_ResourceReport.lbOtherPropertiesClick(Sender: TObject);
begin
ChoiceBaseOptions(stiReportDesigner);
end;
procedure TF_ResourceReport.lbOtherPropertiesMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
TRzLabel(Sender).Font.Style := TRzLabel(Sender).Font.Style + [fsUnderline];
end;
procedure TF_ResourceReport.lbOtherPropertiesMouseLeave(Sender: TObject);
begin
TRzLabel(Sender).Font.Style := TRzLabel(Sender).Font.Style - [fsUnderline];
end;
procedure TF_ResourceReport.tvReportsCloseUp(Sender: TISPlugInplaceEdit;
Section: TISPlugSection; DropDown: TISDropDown; var Accept: Boolean);
var
NewShablonNode: TFlyNode;
NodeIndex: Integer;
ReportItemParams: TReportItemParams;
ReportShablons: TReportShablons;
ActualColumn: Integer;
begin
//TPopupTree(DropDown.ContainedControl).Selected
//tvReports.Col
//tvReports.Columns.VisibleColumn[tvReports.Col].Index
ActualColumn := tvReports.Columns.VisibleColumn[tvReports.Col].Index;
NewShablonNode := nil;
//*** Îïðåäåëèòü âûáðàííóþ âåòâü êîëîíêè
if TPopupTree(DropDown.ContainedControl).Selected <> nil then
begin
NodeIndex := TPopupTree(DropDown.ContainedControl).Selected.Index;
if (NodeIndex <> -1) and
(NodeIndex <= tvReports.Columns[ActualColumn].EditorStyle.Sections[0].Items.Count - 1) then
NewShablonNode := tvReports.Columns[ActualColumn].EditorStyle.Sections[0].Items[NodeIndex];
end;
if NewShablonNode <> nil then
begin
//*** Îïðåäåëèòü èñïîëüçóåìûé øàáëîí
ReportItemParams := tvReports.Selected.Data;
ReportShablons := nil;
if ReportItemParams <> nil then
ReportShablons := ReportItemParams.GetShablonsByTemplateType(GetTemplateTypeByColumnIndex(ActualColumn));
if (ReportShablons <> nil) and
(Integer(NewShablonNode.Data) <> ReportShablons.FActiveShablonID) and // Âûáðàí äðóãîé
(ReportShablons.FRepShablons.IndexOfObject(TObject(NewShablonNode.Data)) <> -1) // Âûáðàí åñòü â ñïèñêå
then
begin
//*** Ñáðîñèòü ñòàðûé
if ReportShablons.FActiveShablonID > 0 then
TF_Main(GForm).DM.UpdateIntTableFieldByID(tnUserReports, fnUseAsShablon, ReportShablons.FActiveShablonID, biFalse, qmPhisical);
//*** Âíåñòè íîâûé
ReportShablons.FActiveShablonID := Integer(NewShablonNode.Data);
if ReportShablons.FActiveShablonID > 0 then
TF_Main(GForm).DM.UpdateIntTableFieldByID(tnUserReports, fnUseAsShablon, ReportShablons.FActiveShablonID, biTrue, qmPhisical);
DefineReportNodeControls(tvReports.Selected, true);
end;
end;
{
NewShablonNode := nil;
//*** Îïðåäåëèòü âûáðàííóþ âåòâü êîëîíêè
if TPopupTree(DropDown.ContainedControl).Selected <> nil then
begin
NodeIndex := TPopupTree(DropDown.ContainedControl).Selected.Index;
if (NodeIndex <> -1) and
(NodeIndex <= tvReports.Columns[tvReports.Col].EditorStyle.Sections[0].Items.Count - 1) then
NewShablonNode := tvReports.Columns[tvReports.Col].EditorStyle.Sections[0].Items[NodeIndex];
end;
if NewShablonNode <> nil then
begin
//*** Îïðåäåëèòü èñïîëüçóåìûé øàáëîí
ReportItemParams := tvReports.Selected.Data;
ReportShablons := nil;
if ReportItemParams <> nil then
ReportShablons := ReportItemParams.GetShablonsByTemplateType(GetTemplateTypeByColumnIndex(tvReports.Col));
if (ReportShablons <> nil) and
(Integer(NewShablonNode.Data) <> ReportShablons.FActiveShablonID) and // Âûáðàí äðóãîé
(ReportShablons.FRepShablons.IndexOfObject(TObject(NewShablonNode.Data)) <> -1) // Âûáðàí åñòü â ñïèñêå
then
begin
//*** Ñáðîñèòü ñòàðûé
if ReportShablons.FActiveShablonID <> 0 then
TF_Main(GForm).DM.UpdateIntTableFieldByID(tnUserReports, fnUseAsShablon, ReportShablons.FActiveShablonID, biFalse, qmPhisical);
//*** Âíåñòè íîâûé
ReportShablons.FActiveShablonID := Integer(NewShablonNode.Data);
if ReportShablons.FActiveShablonID <> 0 then
TF_Main(GForm).DM.UpdateIntTableFieldByID(tnUserReports, fnUseAsShablon, ReportShablons.FActiveShablonID, biTrue, qmPhisical);
DefineReportNodeControls(tvReports.Selected);
end;
end; }
end;
procedure TF_ResourceReport.tvReportsSelectedChanged(OldNode,
NewNode: TFlyNode);
begin
if OldNode <> NewNode then
DefineReportNodeControls(NewNode, true);
end;
procedure TF_ResourceReport.tvReportsDblClick(Sender: TObject);
begin
if tvReports.Selected <> nil then
if Not rbModePacketPrint.Checked then
// Åñëè îò÷åò çàïóñòèòü â ñðåäèíå ýòîãî îáðàáîò÷èêà (íå ïî òàéìåðó)
// òî ïîñëå êëèêà ïî îò÷åòó, ñòàåò àêòèâíîé ýòà ôîðìà
Timer_ShowReport.Enabled := true; //Act_ShowWizardReport.Execute;
end;
procedure TF_ResourceReport.tvReportsDrawCell(Sender: TObject;
aCanvas: TCanvas; ACol, ARow: Integer; Rect: TRect;
State: TExGridDrawState);
var
Node: TFlyNode;
ReportItemParams: TReportItemParams;
ActualColumn: Integer;
begin
ActualColumn := tvReports.Columns.VisibleColumn[ACol].Index;
//if ActualColumn = rciStamp then
// begin
// Node := tvReports.GetNodeAtRow(ARow);
// ReportItemParams := nil;
// if Node <> nil then
// ReportItemParams := TReportItemParams(Node.Data);
// if ReportItemParams <> nil then
// if ReportItemParams.CanHaveStamp <> biTrue then
// begin
// aCanvas.Brush.Color := clDisabledCell; //$F3F3F3; //clSkyBlue;
// aCanvas.FillRect(Rect);
// aCanvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, Node.Cells[ActualColumn]);
// //SetBkColor(aCanvas.Handle, clSilver);
// end;
// end;
if (ActualColumn = rciSimple) or (ActualColumn = rciStamp) then
begin
Node := tvReports.GetNodeAtRow(ARow);
ReportItemParams := nil;
if Node <> nil then
ReportItemParams := TReportItemParams(Node.Data);
if ReportItemParams <> nil then
if (ReportItemParams.CanHaveTemplate = biFalse) or ((ActualColumn = rciStamp) and (ReportItemParams.CanHaveStamp <> biTrue)) then
begin
aCanvas.Brush.Color := clDisabledCell; //$F3F3F3; //clSkyBlue;
aCanvas.FillRect(Rect);
aCanvas.TextRect(Rect, Rect.Left + 1, Rect.Top + 1, Node.Cells[ActualColumn]);
end;
end;
end;
procedure TF_ResourceReport.Act_NewSimpleTemplateFromStandartExecute(
Sender: TObject);
begin
MakeEditReportTemplate(meMake, true, ttSimple);
end;
procedure TF_ResourceReport.Act_NewStampTemplateFromStandartExecute(
Sender: TObject);
begin
MakeEditReportTemplate(meMake, true, ttStamp);
end;
procedure TF_ResourceReport.Act_NewSimpleTemplateFromUserExecute(
Sender: TObject);
begin
MakeEditReportTemplate(meMake, false, ttSimple);
end;
procedure TF_ResourceReport.Act_NewStampTemplateFromUserExecute(
Sender: TObject);
begin
MakeEditReportTemplate(meMake, false, ttStamp);
end;
procedure TF_ResourceReport.Act_EditSimpleTemplateExecute(Sender: TObject);
begin
MakeEditReportTemplate(meEdit, false, ttSimple);
end;
procedure TF_ResourceReport.Act_EditStampTemplateExecute(Sender: TObject);
begin
MakeEditReportTemplate(meEdit, false, ttStamp);
end;
procedure TF_ResourceReport.Act_DeleteSimpleTemplateExecute(
Sender: TObject);
begin
DelReportTemplate(tvReports.Selected, ttSimple);
end;
procedure TF_ResourceReport.Act_DeleteStampTemplateExecute(
Sender: TObject);
begin
DelReportTemplate(tvReports.Selected, ttStamp);
end;
procedure TF_ResourceReport.Act_DropAllExecute(Sender: TObject);
begin
//
end;
procedure TF_ResourceReport.RepDesignerShow(Sender: TObject);
begin
//
end;
procedure TF_ResourceReport.RepDesignerSaveReport(Report: TfrReport;
var ReportName: String; SaveAs: Boolean; var Saved: Boolean);
begin
if Report.Modified then
if MessageModal(cResourceReport_Msg15, ApplicationName, MB_ICONQUESTION or MB_YESNO) = IDYES then
begin
Report.SaveToFile(ReportName);
FModifiedReportTemplate := true;
end
else
begin
FModifiedReportTemplate := false;
Saved := false;
end;
end;
procedure TF_ResourceReport.tvReportsPrepareDropDown(
Sender: TISPlugInplaceEdit; Section: TISPlugSection;
Dropdown: TISDropDown);
var
i: Integer;
CurrTextWidth: Integer;
MaxTextWidth: Integer;
NewWidth: Integer;
begin
//TPopupTree(Dropdown.ContainedControl).gett
MaxTextWidth := 0;
for i := 0 to Section.Items.Count - 1 do
begin
CurrTextWidth := Canvas.TextWidth(Section.Items[i].Text);
if MaxTextWidth < CurrTextWidth then
MaxTextWidth := CurrTextWidth;
end;
NewWidth := 0;
if MaxTextWidth > 0 then
NewWidth := MaxTextWidth + 40
else
NewWidth := tvReports.Columns[tvReports.Col].Width; //tvReports.Columns[tvReports.Col].Width * 2;
if NewWidth > Dropdown.ContainedControl.Width then
Dropdown.ContainedControl.Width := NewWidth;
end;
procedure TF_ResourceReport.btTemplateClick(Sender: TObject);
begin
TToolButton(Sender).CheckMenuDropdown;
end;
procedure TF_ResourceReport.btExportTemplateToFileClick(Sender: TObject);
begin
if btExportTemplateToFile.Style = ComCtrls.tbsDropDown then
TToolButton(Sender).CheckMenuDropdown
else
ExportTemplateToFile(ttSimple);
end;
procedure TF_ResourceReport.btEditTemplateClick(Sender: TObject);
begin
if btEditTemplate.Style = ComCtrls.tbsDropDown then
TToolButton(Sender).CheckMenuDropdown
else
MakeEditReportTemplate(meEdit, false, ttSimple);
end;
procedure TF_ResourceReport.btDelTemplateClick(Sender: TObject);
begin
if btDelTemplate.Style = ComCtrls.tbsDropDown then
TToolButton(Sender).CheckMenuDropdown
else
DelReportTemplate(tvReports.Selected, ttSimple);
end;
procedure TF_ResourceReport.rbModeViewClick(Sender: TObject);
begin
DefineReportModeControls;
if Sender = rbModePacketPrint then
btShowReport.Caption := rbModePrint.Caption
else
if Sender = rbModePacketPrintToExcel then
btShowReport.Caption := cNameExportB
else
btShowReport.Caption := TRzCheckBox(Sender).Caption;
end;
procedure TF_ResourceReport.tvReportTargetEdited(Sender: TObject;
Node: TFlyNode; var S: String);
var
ActualColumn: Integer;
begin
ActualColumn := tvReportTarget.GetColumnOrder(tvReportTarget.Col);
//*** îïöèÿ êàêîé êîëîíêè èçìåíÿåòñÿ
if Node <> nil then
if Node.Data <> nil then
case ActualColumn of
tciCAD:
// äëÿ ïðîåêòà íå ì.á ïå÷àòü ÊÀÄà
if TObject(Node.Data) is TSCSProject then
S := bsGray;
tciReport:
// Äëÿ íåñòàíäàðòíîãî ëèñòà íå ì.á îò÷åòà
if TObject(Node.Data) is TSCSList then
if Not TSCSList(Node.Data).IsNormalType then
S := bsGray;
end;
end;
procedure TF_ResourceReport.tvReportsEdited(Sender: TObject;
Node: TFlyNode; var S: String);
var
ActualColumn: Integer;
WasChanged: Boolean;
begin
ActualColumn := TFlyTreeViewPro(Sender).GetColumnOrder(TFlyTreeViewPro(Sender).Col);
WasChanged := true;
if ActualColumn = rciIsOn then
begin
if TReportItemParams(Node.Data).Mode = fmRDefectAct then
begin
WasChanged := false;
S := bsFalse;
end;
if WasChanged then
Timer_DefineReportNodeControls.Enabled := true;
end;
end;
procedure TF_ResourceReport.Timer_DefineReportNodeControlsTimer(
Sender: TObject);
begin
Timer_DefineReportNodeControls.Enabled := false;
if tvReports.Selected.Cells[rciIsOn] = bsTrue then
begin
// Íå äàòü óñòàíîâèòü ãàëî÷êó íàïðîòèâ îò÷åòà áåç øàáëîíà äëÿ ìàðêèðîâî÷íûõ ëèñòîâ
if rkMarkPages in FReportUseKind then
if (TReportItemParams(tvReports.Selected.Data).FSimpleShablons.FActiveShablonID = -1) then
begin
if MessageModal(cResourceReport_Msg30, ApplicationName, MB_ICONQUESTION or MB_YESNO) = IDYES then
MakeNewReportTemplateWizard;
if TReportItemParams(tvReports.Selected.Data).FSimpleShablons.FActiveShablonID = -1 then
tvReports.Selected.Cells[rciIsOn] := bsFalse;
end;
end;
DefineReportNodeControls(tvReports.Selected, false);
end;
procedure TF_ResourceReport.frOLEExcelExportStartExportPageEvent(Sender: TObject; ACaption: string; AObjCount: Integer);
begin
TF_Main(GForm).F_ProgressExp.Message1.Visible := False;
TF_Main(GForm).F_ProgressExp.esBitBtn1.Visible := True;
TF_Main(GForm).F_ProgressExp.Gauge1.Visible := True;
TF_Main(GForm).F_ProgressExp.Gauge1.MinValue := 0;
TF_Main(GForm).F_ProgressExp.Gauge1.MaxValue := AObjCount - 1;
TF_Main(GForm).F_ProgressExp.Gauge1.Progress := 0;
if FReportCountPrinted = 0 then
begin
TF_Main(GForm).F_ProgressExp.FormStyle := fsStayOnTop;
TF_Main(GForm).F_ProgressExp.lbProgress.Visible := true;
TF_Main(GForm).F_ProgressExp.lbTotalProgress.Visible := true;
TF_Main(GForm).F_ProgressExp.pnTotalProgress.Visible := true;
TF_Main(GForm).F_ProgressExp.AutoSize := false;
TF_Main(GForm).F_ProgressExp.AutoSize := true;
TF_Main(GForm).F_ProgressExp.cbOpen.Visible := true;
TF_Main(GForm).F_ProgressExp.cbOpen.Checked := true;
TF_Main(GForm).F_ProgressExp.cbOpen.Caption := ACaption; //cResourceReport_Msg21;
TF_Main(GForm).F_ProgressExp.gTotal.Visible := true;
TF_Main(GForm).F_ProgressExp.gTotal.MinValue := 1;
TF_Main(GForm).F_ProgressExp.gTotal.MaxValue := 100;
TF_Main(GForm).F_ProgressExp.gTotal.Progress := 0;
TF_Main(GForm).F_ProgressExp.WasCancel := false;
Application.ProcessMessages;
TF_Main(GForm).F_ProgressExp.FormStyle := fsStayOnTop;
TF_Main(GForm).F_ProgressExp.Show;
SetForegroundWindow(TF_Main(GForm).F_ProgressExp.Handle);
end;
TF_Main(GForm).F_ProgressExp.lbProgress.Caption := cNameReportB + ': '+FReportCaption;
TF_Main(GForm).F_ProgressExp.lbTotalProgress.Caption := cNameObjectB + ': '+FObjectName;
TF_Main(GForm).F_ProgressExp.Repaint;
//SetForegroundWindow(TF_Main(GForm).F_ProgressExp.Handle);
//Application.ProcessMessages;
end;
procedure TF_ResourceReport.frOLEExcelExportProgressExportPageEvent(Sender: TObject; var AWasCancel: Boolean;
AObjIndex, AObjectCount: Integer);
var
UnitCountInProgressStep: Integer; // Êîëè÷åñòâî åäèíèö äëÿ îäíîãî îáúåêòà
UnitCountLoadedForCurObject: Integer; // çàãðóæåííîñòü îäíîãî îáúåêòà
begin
if Not TF_Main(GForm).F_ProgressExp.WasCancel then
begin
Application.ProcessMessages;
TF_Main(GForm).F_ProgressExp.Gauge1.Progress := AObjIndex;
TF_Main(GForm).F_ProgressExp.Gauge1.Refresh;
//*** Êîëè÷åñòâî øàãîâ äëÿ îäíîãî îáúåêòà â îáùåì ïðîãðåññå
UnitCountInProgressStep := Round(100 / FReportCountToPrint);
UnitCountLoadedForCurObject := Round((AObjIndex+1) / AObjectCount) * UnitCountInProgressStep;
TF_Main(GForm).F_ProgressExp.gTotal.Progress :=
(UnitCountInProgressStep * FReportCountPrinted) + UnitCountLoadedForCurObject - 2;
TF_Main(GForm).F_ProgressExp.gTotal.Refresh;
end;
AWasCancel := TF_Main(GForm).F_ProgressExp.WasCancel;
end;
procedure TF_ResourceReport.frOLEExcelExportEndExportPageEvent(Sender: TObject; AWasCancel: Boolean);
var
i: Integer;
begin
Inc(FReportCountPrinted);
if (FReportCountPrinted = FReportCountToPrint) or AWasCancel then
begin
if FReportCountPrinted = FReportCountToPrint then
begin
//*** Äîãíàòü äî 100
for i := TF_Main(GForm).F_ProgressExp.gTotal.Progress + 1 to TF_Main(GForm).F_ProgressExp.gTotal.MaxValue do
begin
TF_Main(GForm).F_ProgressExp.gTotal.Progress := i;
TF_Main(GForm).F_ProgressExp.gTotal.Refresh;
Sleep(500);
end;
if TF_Main(GForm).F_ProgressExp.cbOpen.Checked then
ShellExecute(Handle, nil, PChar(FPackgeDir), nil, nil, SW_SHOW);
end;
if AWasCancel then
FReportCountPrinted := FReportCountToPrint;
TF_Main(GForm).F_ProgressExp.Close;
end;
end;
procedure TF_ResourceReport.rbRepModeDocumentClick(Sender: TObject);
begin
if tvReports.Selected <> nil then
DefineReportNodeControls(tvReports.Selected, true);
end;
procedure TF_ResourceReport.RzBitBtn1Click(Sender: TObject);
begin
MakeNewReportTemplateWizard;
end;
procedure TF_ResourceReport.Act_NewMarkPageExecute(Sender: TObject);
begin
MakeNewReportTemplateWizard;
end;
procedure TF_ResourceReport.Act_NewMarkPageFromUserExecute(
Sender: TObject);
begin
MakeEditReportTemplate(meMake, false, ttSimple);
end;
procedure TF_ResourceReport.Act_EditTemplateExecute(Sender: TObject);
begin
if rkMarkPages in FReportUseKind then
MakeEditReportTemplate(meEdit, false, ttSimple);
end;
procedure TF_ResourceReport.Act_DeleteTemplateExecute(Sender: TObject);
begin
if rkMarkPages in FReportUseKind then
DelReportTemplate(tvReports.Selected, ttSimple);
end;
procedure TF_ResourceReport.Act_ImportTemplateFromFileExecute(
Sender: TObject);
begin
ImportTemplateFromFile;
end;
procedure TF_ResourceReport.Act_ExportTemplateToFileExecute(Sender: TObject);
begin
ExportTemplateToFile(ttSimple);
end;
procedure TF_ResourceReport.Act_ExportSimpleTemplateToFileExecute(
Sender: TObject);
begin
ExportTemplateToFile(ttSimple);
end;
procedure TF_ResourceReport.Act_ExportStampTemplateToFileExecute(
Sender: TObject);
begin
ExportTemplateToFile(ttStamp);
end;
{ TSortFieldLists }
constructor TSortFieldLists.Create(AOwner: TReportSortInfo);
begin
FOwner := AOwner;
FFieldNames := TStringList.Create;
FFieldCaptCodes := TStringList.Create;
end;
destructor TSortFieldLists.Destroy;
begin
FreeAndNil(FFieldNames);
FreeAndNil(FFieldCaptCodes);
end;
{ TReportSortInfo }
procedure TReportSortInfo.AddFieldInfo(const AFieldName, ACaption: String);
begin
FAllFieldNames.Add(AFieldName);
FAllFieldCaptions.Add(ACaption);
end;
procedure TReportSortInfo.Assign(AReportSortInfo: TReportSortInfo);
begin
FID := AReportSortInfo.FID;
FRepKind := AReportSortInfo.FRepKind;
FDescending := AReportSortInfo.FDescending;
FCaseSensitive := AReportSortInfo.FCaseSensitive;
FUsedFieldNames.Clear;
FUsedFieldNames.AddStrings(AReportSortInfo.FUsedFieldNames);
end;
constructor TReportSortInfo.Create(AOwner: TReportItemParams);
begin
FOwner := AOwner;
FAllFieldNames := TStringList.Create;
FAllFieldCaptions := TStringList.Create;
FUsedFieldNames := TStringList.Create;
FID := 0;
FRepKind := 0;
if AOwner <> nil then
FRepKind := AOwner.RepType;
FDescending := biFalse;
FCaseSensitive := biFalse;
end;
destructor TReportSortInfo.Destroy;
begin
FreeAndNil(FAllFieldNames);
FreeAndNil(FAllFieldCaptions);
FreeAndNil(FUsedFieldNames);
end;
function TReportSortInfo.GetFieldCaption(const AFName: String): String;
var
StrIndex: Integer;
begin
Result := '';
StrIndex := FAllFieldNames.IndexOf(AFName);
if StrIndex <> -1 then
Result := FAllFieldCaptions[StrIndex];
end;
procedure TF_ResourceReport.Act_EditReportSortInfoExecute(Sender: TObject);
var
ReportItemParams: TReportItemParams;
begin
ReportItemParams := nil;
if tvReports.Selected <> nil then
ReportItemParams := TReportItemParams(tvReports.Selected.Data);
if ReportItemParams <> nil then
begin
if TF_Main(GForm).CreateFItemsSelector.SelectReportSortFields(ReportItemParams.FReportSortInfo) then
TF_Main(GForm).DM.SaveReportSortInfo(ReportItemParams.FReportSortInfo);
end;
end;
procedure TF_ResourceReport.tvReportTargetCollapsing(Sender: TObject;
Node: TFlyNode; var AllowCollapse: Boolean);
begin
AllowCollapse := false;
end;
procedure TF_ResourceReport.Timer_ShowReportTimer(Sender: TObject);
begin
TTimer(Sender).Enabled := false;
Act_ShowWizardReport.Execute;
end;
procedure TF_ResourceReport.Act_ExportToBc3Execute(Sender: TObject);
var
RootObjectsCatalog: TSCSCatalog;
TargetFolder: TSCSCatalog;
ReportItemParams: TReportItemParams;
ReportItemParamValues: TReportItemParams;
StringList: TStringList;
Str: String;
ProjCurrency: TNBCurrency;
CurrencySign: String;
Dialog: TSaveDialog;
procedure AddCatalogInfoToStrings(ACatalog: TSCSCatalog);
var
CatalogChild: TSCSCatalog;
Compon: TSCSComponent;
TopSign: String;
CatalogName: String;
i: Integer;
begin
Str := '';
// Äëÿ 2-õ âåðõíèõ óðîâíåé, êðîìå ñàìîãî âåðõíåãî(-1) äîáàâëÿåì ñèìâîë '#'
TopSign := '';
CatalogName := '';
if (ACatalog.Level <= 1) and (ACatalog.Level <> -1) then
TopSign := '#';
if ACatalog.Level <> -1 then
CatalogName := ACatalog.Name;
Str := '~C|'+ACatalog.NameMark+TopSign+'||'+CatalogName+'|0|211108|0|';
StringList.Add(Str);
// Çàïèñûâàåì ïîäêàòàëîãè è êîìïîíåíòû
Str := '';
Str := Str + '~D|'+ACatalog.NameMark+TopSign+'|';
for i := 0 to ACatalog.ChildCatalogs.Count - 1 do
begin
CatalogChild := ACatalog.ChildCatalogs[i];
Str := Str + CatalogChild.NameMark+'\1\0\';
end;
for i := 0 to ACatalog.SCSComponents.Count - 1 do
begin
Compon := ACatalog.SCSComponents[i];
Str := Str + Compon.ArticulProducer+'\1\0\';
end;
Str := Str + '|';
StringList.Add(Str);
end;
procedure LoadCatalogList;
var
SortedCatalogs: TStringList;
Catalog: TSCSCatalog;
i: Integer;
begin
SortedCatalogs := CreateStringListSorted;
// Ñîðòèðóåì êàòàëîãè ïî ìàðêèðîâêå
for i := 0 to RootObjectsCatalog.ChildCatalogReferences.Count - 1 do
begin
Catalog := RootObjectsCatalog.ChildCatalogReferences[i];
SortedCatalogs.AddObject(Catalog.NameMark, Catalog);
end;
for i := 0 to SortedCatalogs.Count - 1 do
begin
Catalog := TSCSCatalog(SortedCatalogs.Objects[i]);
AddCatalogInfoToStrings(Catalog);
end;
AddCatalogInfoToStrings(RootObjectsCatalog);
FreeAndNil(SortedCatalogs);
end;
procedure LoadComponList;
var
SortedCompons: TStringList;
Compon: TSCSComponent;
ComponPrice, ComponCount: Double;
i: integer;
DescriptionStream: TStream;
NBQuerySelect: TpFIBQuery;
begin
SortedCompons := TStringList.Create;
for i := 0 to RootObjectsCatalog.ComponentReferences.Count - 1 do
begin
Compon := RootObjectsCatalog.ComponentReferences[i];
SortedCompons.AddObject(Compon.ArticulProducer, Compon);
end;
for i := 0 to SortedCompons.Count - 1 do
begin
Compon := TSCSComponent(SortedCompons.Objects[i]);
GetComponQtPriceInUOM(Compon, TF_Main(GForm).FUOM, @ComponPrice, @ComponCount);
Str := '~C|'+Compon.ArticulProducer+'|'+Compon.Izm+'|'+Compon.Name+'|'+FloatToStr(ComponPrice)+'|211108|3|';
StringList.Add(Str);
end;
// Ñêðèïò çàãðóçêè îïèñàíèÿ êîìïîíåíòà èç ÍÁ
NBQuerySelect := TF_Main(GForm).FNormBase.DM.Query_Select;
// Îïèñàíèÿ êîìïîíåíòîâ
for i := 0 to SortedCompons.Count - 1 do
begin
Compon := TSCSComponent(SortedCompons.Objects[i]);
DescriptionStream := TF_Main(GForm).FNormBase.DM.GetStreamFromTableByGUID(tnComponent, fnDescription, Compon.GuidNB, qmPhisical);
Str := GetStringFromStream(DescriptionStream);
if Str <> '' then
begin
Str := '~T|'+Compon.ArticulProducer +'|'+ Str+'|';
StringList.Add(Str);
end;
FreeAndNil(DescriptionStream);
end;
FreeAndNil(SortedCompons);
end;
begin
try
if tvReports.Selected <> nil then
begin
ReportItemParams := TReportItemParams(tvReports.Selected.Data);
TargetFolder := GetTargetFolder;
if TargetFolder = nil then
MessageInfo(cResourceReport_Msg8)
else
begin
Dialog := TSaveDialog.Create(nil);
Dialog.Title := cSavingToFile;
//SetParamsToDialog(Dialog, FFileExt);
Dialog.DefaultExt := '*'+enBc3;
Dialog.Filter := GetDialogFilter(GetExtensionDescription(enBc3), enBc3);
Dialog.InitialDir := '';
Dialog.FileName := '';
Dialog.FileName := '';
Dialog.Options := Dialog.Options + [ofOverwritePrompt];
if Dialog.Execute then
begin
Application.ProcessMessages;
ReportItemParamValues := GetCurrReportItemParamValues;
RootObjectsCatalog := PrepareCommerceInvoiceObjects(TargetFolder, ReportItemParams, ReportItemParamValues);
BeginProgress;
try
ProjCurrency := TF_Main(GForm).GSCSBase.CurrProject.Spravochnik.GetCurrencyByType(ctMain);
CurrencySign := '';
if ProjCurrency <> nil then
CurrencySign := ProjCurrency.Data.NameBrief;
StringList := TStringList.Create;
// Çàãîëîâîê
StringList.Add('~V|SOFT S.A.|FIEBDC-3/2002|Presto 8.8||ANSI|');
// Èíôà î âàëþòå
StringList.Add('~K|\3\3\3\3\3\3\3\'+CurrencySign+'\|0|');
// Ñïèñîê Êàòàëîãîâ
LoadCatalogList;
// Êîìïîíåíòû
LoadComponList;
//StringList.SaveToFile('c:\file.bc3');
StringList.SaveToFile(Dialog.FileName);
FreeAndNil(StringList);
finally
EndProgress;
FreeAndNil(RootObjectsCatalog);
end;
FreeAndNil(ReportItemParamValues);
end;
Dialog.Free;
end;
end;
except
on E: Exception do AddExceptionToLogExt(ClassName, MethodName(@TF_ResourceReport.Act_ExportToBc3Execute), E.Message);
end;
end;
procedure TF_ResourceReport.nePricePrecisionChange(Sender: TObject);
begin
if nePricePrecision.IntValue <> GSCSIni.PM.RepPricePrecision then
begin
GSCSIni.PM.RepPricePrecision := nePricePrecision.IntValue;
WritePMIni(GSCSIni.PM);
end;
end;
procedure TF_ResourceReport.neKolvoPrecisionChange(Sender: TObject);
begin
if neKolvoPrecision.IntValue <> GSCSIni.PM.RepKolvoPrecision then
begin
GSCSIni.PM.RepKolvoPrecision := neKolvoPrecision.IntValue;
WritePMIni(GSCSIni.PM);
end;
end;
procedure TF_ResourceReport.Timer_TimeOutExecTimer(Sender: TObject);
var i: integer;
begin
if self.Visible then
begin
TTimer(Sender).Enabled := false;
SendKeyDown(tvReports, VK_HOME, []);
Application.ProcessMessages;
if TTimer(Sender).Tag > 0 then
begin
for i := 1 to TTimer(Sender).Tag do
begin
SendKeyDown(tvReports, VK_DOWN, []);
Application.ProcessMessages;
end;
end;
Act_ShowWizardReport.Execute;
end;
end;
{
procedure TF_ResourceReport.ShowEtazhClick(Sender: TObject);
begin
ShowAllResourses.Enabled:=(ShowEtazh.Checked or ShowKabinet.Checked);
end;
procedure TF_ResourceReport.ShowKabinetClick(Sender: TObject);
begin
ShowAllResourses.Enabled:=(ShowEtazh.Checked or ShowKabinet.Checked);
end;
}
procedure TF_ResourceReport.cbCanShowKabinetClick(Sender: TObject);
begin
cbCanShowObjHierarchy.Enabled := cbCanShowKabinet.Visible and cbCanShowKabinet.Checked;
cbAsPlacingInProj.Enabled := not cbCanShowKabinet.Checked;
//cbReportWithStamp.Enabled := not cbCanShowKabinet.Checked and not cbCanGroupByName.Checked;
//if cbCanShowKabinet.Checked then
// cbReportWithStamp.Checked := false;
//if cbCanGroupByName.Checked then
// cbReportWithStamp.Checked := false;
// cbCanGroupByName.Enabled:=cbCanShowKabinet.Visible and cbCanShowKabinet.Checked;
end;
procedure TF_ResourceReport.cbAsPlacingInProjClick(Sender: TObject);
begin
//cbCanshowKabinet.Enabled := cbAsPlacingInProj.Checked;
//cbCanShowObjHierarchy.Enabled := cbCanShowKabinet.Checked and cbCanShowKabinet.Enabled;
//cbCanGroupByName.Enabled := cbAsPlacingInProj.Checked;
end;
procedure TF_ResourceReport.cbCanGroupByNameClick(Sender: TObject);
begin
//cbReportWithStamp.Enabled := not cbCanShowKabinet.Checked and not cbCanGroupByName.Checked;
//if cbCanShowKabinet.Checked then
// cbReportWithStamp.Checked := false;
//if cbCanGroupByName.Checked then
// cbReportWithStamp.Checked := false;
end;
procedure TF_ResourceReport.cbReportWithStampClick(Sender: TObject);
begin
cbShowCablePath.Enabled := not cbReportWithStamp.Checked;
end;
procedure TF_ResourceReport.cbShowCablePathClick(Sender: TObject);
begin
cbReportWithStamp.Enabled := not cbShowCablePath.Checked;
//cbShowCablePath.Enabled := not cbReportWithStamp.Checked;
end;
end.