2025-05-12 10:07:51 +03:00

3984 lines
128 KiB
ObjectPascal

unit U_Kalc;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, RzRadChk, RzButton, StdCtrls, Mask, RzEdit, RzSpnEdt, ExtCtrls,
RzPanel, RzTabs, exgrid, RapTree, FlytreePro, ActnList, Menus, RzRadGrp,
DB, kbmMemTable, cxStyles, cxCustomData, cxGraphics, cxFilter, cxData,
cxDataStorage, cxEdit, cxDBData, cxGridLevel, cxClasses, cxControls,
cxGridCustomView, cxGridCustomTableView, cxGridTableView,
cxGridDBTableView, cxGrid, cxSpinEdit, cxTextEdit, cxProgressBar,
cxDBLookupComboBox, Buttons,
U_Kalc_DM, U_BaseCommon, cxContainer, cxMaskEdit, cxDropDownEdit, cxLookupEdit,
cxDBLookupEdit, cxDBExtLookupComboBox, RzCmboBx, cxCheckComboBox,
cxCheckBox, cxCurrencyEdit, cxColorComboBox, cxMemo, xmldom, Provider,
// QGrids,
U_BaseConstants, U_SCSComponent,
XMLIntf, {XMLDom, } XMLDoc,//MSXML2_TLB,
ToolWin, ComCtrls, ImgList, RzGroupBar, siComp, siLngLnk,
cxGridBandedTableView, cxGridDBBandedTableView, cxLookAndFeels,
U_Common_Classes, cxLookAndFeelPainters, cxNavigator;
//const // for captions
// strCalcCapt1 = 'Øèðèíà ýòàæà, ';
// strCalcCapt2 = 'Äëèíà ýòàæà, ';
// strCalcCapt3 = 'Âûñîòà ýòàæà, ';
// strCalcCapt4 = 'Îáùàÿ ïëîùàäü, ';
// strCalcCapt5 = 'Ðàáî÷àÿ ïëîùàäü , ';
// strCalcCapt6 = 'Ñðåäíÿÿ S êîìíàòû, ';
// strCalcCapt7 = 'Ñð. øèðèíà êîìíàòû, ';
// strCalcCapt8 = 'Ñð. äëèíà êîìíàòû, ';
// strCalcCapt9 = 'Ïëîùàäü äëÿ 1 ÐÌ, ';
// strCalcCapt10 = 'Ðàññòîÿíèå îò êðîññà ê ñàìîìó áëèçêîìó ÐÌ, ';
// strCalcCapt11 = 'Ðàññòîÿíèå îò êðîññà ê ñàìîìó äàëüíåìó ÐÌ, ';
// strCalcCapt12 = 'Ðàñõîä êîðîáà íà 1 ÐÌ, ';
// strCalcCapt13 = 'Ðàñõîä êîðîáà íà 1 êîìíàòó, ';
// strCalcCapt14 = '= ';
// strCalcCapt15 = 'Ê-âî êàáåëÿ â óïàêîâêå, ';
// strCalcCapt16 = 'Âûñîòà ðàçìåùåíèÿ ÐÌ, ';
// strCalcCapt17 = 'Çàïàñ äëÿ âûïîëíåíèÿ ðàçäåëêè êàáåëÿ, ';
// strCalcCapt18 = 'Âûñîòà ïîäâåñíîãî ïîòîëêà, ';
const
idwCC = 1; //'Ïðîêëàäêà êàáåëüíûõ êàíàëîâ (ì)';
idwCable = 2; // 'Óêëàäêà êàáåëÿ (ì)';
idwRM = 3; //'Óñòàíîâêà ðîáî÷åãî ìåñòà (øò.)';
idwShelf = 4; // 'Ìîíòàæ øêàôà (øò.)';
idwPP = 5; //'Ìîíòàæ ïàò÷-ïàíåëè â øêàô/ñòîéêó (øò.)';
idwOrg = 6; //'Ìîíòàæ îðãàíèçàòîðà â øêàô /ñòîéêó (øò.) ';
idwCrossPort = 7; //'Êðîññèðîâêà (1 ïîðò)';
idwTestPort = 8; //'Òåñòèðîâàíèå ñîåäèíåíèé (1 ïîðò)';
idwProectPort = 9; //'Ïðîåêòíûå ðàáîòû (1 ïîðò)';
idwTransport = 10; //'Òðàíñïîðòíûå ðàñõîäû';
idwAnother = 11; //'Äðóãèå ïóñêîíàëàäî÷íûå ðàáîòû';
idwKoef = 12; //'Êîýôèöèåíò íà ðàáîòû (ñîãëàñíî îñîáîìó õàðàêòåðó ðàáîò)';
const //äëÿ òèïà îò÷¸òíîé ñòðîêè
idTypePozMaterial = '1';
idTypePozWorks = '2';
type
T_KalcDocument = class(TMyObject)
// CoXML: CoDOMDocument;
Xml: TXMLDocument;
TopNode: IDOMDocument;
RootNode: IDomNode;
// FNodeList: IXMLDOMNodeList;
FOwner: TForm;
private
//coXML: CoDOMDocument;
FName: string;
procedure InitXMl;
procedure AddParamToXMl(AName: string; Value: string = '');
procedure AddToXmlGrid(AGrid: TcxGridDBTableView);
procedure LoadGridFromXML(AGrid: TcxGridDBTableView);
public
constructor Create(AOwner: TObject; AFileName: string = '');
destructor Destroy; override;
procedure SaveComponentValue(AComponent: TComponent);
procedure LoadComponentValue(AComponent: TComponent);
procedure CreateXML(AFieldName: string);
procedure SaveToFile(AFileName: string);
procedure LoadFromFile(AFileName: string);
end;
TF_Kalc = class(TForm)
Main_PageControl: TRzPageControl;
TabProject: TRzTabSheet;
TabComponent: TRzTabSheet;
RMGroup: TRzGroupBox;
BuildGroupBox5: TRzGroupBox;
Label2: TLabel;
vKolRM: TRzSpinEdit;
Label1: TLabel;
vKolPortForRM: TRzSpinEdit;
vKKolDopMest: TRzSpinEdit;
Label3: TLabel;
Label4: TLabel;
vKolFloor: TRzSpinEdit;
Label5: TLabel;
vWidthFloor: TRzSpinEdit;
Label6: TLabel;
vLengthFloor: TRzSpinEdit;
Label7: TLabel;
vSTotalPlase: TRzSpinEdit;
vKSWorkPlase: TRzSpinEdit;
Label8: TLabel;
vSWorkPlase: TRzSpinEdit;
Label9: TLabel;
Label10: TLabel;
vSKab_Edit: TRzSpinEdit;
Label11: TLabel;
vHeighFloor: TRzSpinEdit;
Label13: TLabel;
vSForRM: TRzSpinEdit;
Label14: TLabel;
vTotalKolRM: TRzSpinEdit;
vTotalKolPort: TRzSpinEdit;
Label15: TLabel;
Label16: TLabel;
StaticText1: TStaticText;
StaticText2: TStaticText;
vKolRMForFloor: TFlyTreeViewPro;
pmForGrid: TPopupMenu;
ActionList1: TActionList;
actAddRecord: TAction;
actAddRecord1: TMenuItem;
actDelRecord: TAction;
N1: TMenuItem;
RzGroupBox3: TRzGroupBox;
TypeConnectEuipment_RadioGroup: TRzRadioGroup;
CableCanalSheet: TRzTabSheet;
actAddCableCanal: TAction;
actDelCableCanal: TAction;
TabSheet1: TRzTabSheet;
RzPanel1: TRzPanel;
RzPanel2: TRzPanel;
AllComponent_GridDBTableView1: TcxGridDBTableView;
AllComponent_GridLevel1: TcxGridLevel;
AllComponent_Grid: TcxGrid;
AllComponent_Grid_Name: TcxGridDBColumn;
AllComponent_Grid_Arcticul: TcxGridDBColumn;
AllComponent_Grid_Kolvo: TcxGridDBColumn;
AllComponent_Grid_Cost: TcxGridDBColumn;
AllComponent_Grid_price: TcxGridDBColumn;
RzGroupBox4: TRzGroupBox;
Label36: TLabel;
vKolReservCable: TRzSpinEdit;
Label37: TLabel;
vKolPortForMCable: TRzSpinEdit;
actAddCable: TAction;
actDelCable: TAction;
vKolPKForRM: TRzSpinEdit;
Label39: TLabel;
TypeWayCC_Panel: TRzPanel;
TypeWeyCC_PageControl: TRzPageControl;
CableInFloor_Sheet: TRzTabSheet;
CableUnderCeil_Sheet: TRzTabSheet;
CableInCC_Sheet: TRzTabSheet;
TypeWayCC_TopPanel: TRzPanel;
FixCableWey_ComboBox: TRzComboBox;
Label22: TLabel;
CCForFloor_Grid: TcxGrid;
CCForFloor_GridTableView: TcxGridDBTableView;
CCForFloor_Grid_ID: TcxGridDBColumn;
CCForFloor_Grid_Name: TcxGridDBColumn;
CCForFloor_Grid_Articul: TcxGridDBColumn;
CCForFloor_Grid_Price: TcxGridDBColumn;
CCForFloor_Grid_Percent: TcxGridDBColumn;
CCForFloor_GridLevel: TcxGridLevel;
Label23: TLabel;
RzGroupBox1: TRzGroupBox;
ScrollBox1: TScrollBox;
FormulaFloor_Group: TRzRadioGroup;
FormulaFloor1_Panel: TRzPanel;
Label43: TLabel;
Label44: TLabel;
vFormulaFloor1_X: TRzSpinEdit;
vFormulaFloor1_Y: TRzSpinEdit;
FormulaFloor2_Panel: TRzPanel;
Label42: TLabel;
Label45: TLabel;
vFormulaFloor2_X: TRzSpinEdit;
Label46: TLabel;
vKolRooms: TRzSpinEdit;
Label40: TLabel;
vWidthRoom: TRzSpinEdit;
Label41: TLabel;
vLengthRoom: TRzSpinEdit;
CCUnderCeil_Grid: TcxGrid;
CCUnderCeil_GridTableView: TcxGridDBTableView;
CCUnderCeil_Grid_id: TcxGridDBColumn;
CCUnderCeil_Grid_Name: TcxGridDBColumn;
CCUnderCeil_Grid_Articul: TcxGridDBColumn;
CCUnderCeil_Grid_price: TcxGridDBColumn;
CCUnderCeil_Grid_Percent: TcxGridDBColumn;
CCUnderCeil_GridLevel: TcxGridLevel;
vHeigthFalseCeil: TRzSpinEdit;
Label12: TLabel;
Label48: TLabel;
FormulaUnderCail_Group: TRzGroupBox;
ScrollBox2: TScrollBox;
FormulaUnderCail_RadioGroup: TRzRadioGroup;
FormulaUnderCail1_Panel: TRzPanel;
Label49: TLabel;
Label50: TLabel;
vFormulaUnderCeil1_X: TRzSpinEdit;
vFormulaUnderCeil1_Y: TRzSpinEdit;
FormulaUnderCail2_Panel: TRzPanel;
Label51: TLabel;
vFormulaUnderCeil2_X: TRzSpinEdit;
FormulaDekorCC_Group: TRzGroupBox;
ScrollBox3: TScrollBox;
FormulaDekorCC_RadioGroup: TRzRadioGroup;
FormulaDekorCC1_Panel: TRzPanel;
Label53: TLabel;
Label54: TLabel;
FormulaDekorCC2_Panel: TRzPanel;
Label56: TLabel;
vFormulaDekorCC2_X: TRzSpinEdit;
Label55: TLabel;
Label59: TLabel;
vHeigthCC: TRzSpinEdit;
RzGroupBox5: TRzGroupBox;
ScrollBox4: TScrollBox;
FormulaInCC_Group: TRzRadioGroup;
FormulaInCC3_Panel: TRzPanel;
Label65: TLabel;
vFormulaInCC3_X: TRzSpinEdit;
Label57: TLabel;
Label66: TLabel;
vFormulaInCC3_Y: TRzSpinEdit;
FormulaInCC1_Panel: TRzPanel;
Label63: TLabel;
Label64: TLabel;
Label17: TLabel;
vFormulaInCC1_X: TRzSpinEdit;
Openwir_Sheet: TRzTabSheet;
ElPointFix_Grid: TcxGrid;
ElPointFix_GridTableView: TcxGridDBTableView;
ElPointFix_Grid_id: TcxGridDBColumn;
ElPointFix_Grid_Name: TcxGridDBColumn;
ElPointFix_Grid_Articul: TcxGridDBColumn;
ElPointFix_Grid_Price: TcxGridDBColumn;
ElPointFix_Grid_Percent: TcxGridDBColumn;
ElPointFix_GridLevel: TcxGridLevel;
Label60: TLabel;
RzGroupBox6: TRzGroupBox;
ScrollBox5: TScrollBox;
OpenWir_RadioGroup: TRzRadioGroup;
MetodOpenWir1_panel: TRzPanel;
Label61: TLabel;
vMetodOpenWir1_Rashod: TRzSpinEdit;
Label70: TLabel;
FormulaInCC2_Panel: TRzPanel;
Label68: TLabel;
Label69: TLabel;
Label72: TLabel;
vFormulaInCC2_X: TRzSpinEdit;
Label31: TLabel;
vDistShot: TRzSpinEdit;
vDistLong: TRzSpinEdit;
Label21: TLabel;
Label47: TLabel;
Label73: TLabel;
Label74: TLabel;
ZakazchikName_Edit: TRzEdit;
PodradchikName_edit: TRzEdit;
Curr_ComboBox: TcxComboBox;
actExit: TAction;
EIncludHarProj: TRzCheckBox;
CC_PopupMenu: TPopupMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
Cable_PopupMenu: TPopupMenu;
MenuItem3: TMenuItem;
MenuItem4: TMenuItem;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
ToolBar1: TToolBar;
OpenFile_Btn: TRzBitBtn;
SaveFile_Btn: TRzBitBtn;
ClearProject_Btn: TRzBitBtn;
gbFloorsProperties: TRzGroupBox;
gbSquare: TRzGroupBox;
gbRoomProperties: TRzGroupBox;
ToolBar2: TToolBar;
tbOpen: TToolButton;
tbSave: TToolButton;
tbClear: TToolButton;
ImageList1: TImageList;
pcComponentTypes: TRzPageControl;
tsWorkPlaces: TRzTabSheet;
CostRMGrid: TcxGrid;
CostRMGridTableView: TcxGridDBTableView;
ID_Column: TcxGridDBColumn;
Name_Column: TcxGridDBColumn;
Articul_Column: TcxGridDBColumn;
Price_Column: TcxGridDBColumn;
CostRMGrid_Kolvo: TcxGridDBColumn;
CostRMGridLevel1: TcxGridLevel;
tsPathCords: TRzTabSheet;
CostPK_Grid: TcxGrid;
CostPKDBTableView: TcxGridDBTableView;
CostPKColumn_ID: TcxGridDBColumn;
CostPKColumn_Name: TcxGridDBColumn;
CostPKColumn_Articul: TcxGridDBColumn;
CostPKColumn_Price: TcxGridDBColumn;
CostPK_Missing: TcxGridDBColumn;
CostPK_Persent: TcxGridDBColumn;
CostPK_GridLevel1: TcxGridLevel;
tsPathPanals: TRzTabSheet;
CostPP_Grid: TcxGrid;
CostPP_GridDBTableView: TcxGridDBTableView;
CostPP_GridColumn_ID: TcxGridDBColumn;
CostPP_GridColumn_Name: TcxGridDBColumn;
CostPP_GridColumn_Articul: TcxGridDBColumn;
CostPP_GridColumn_Price: TcxGridDBColumn;
CostPP_GridLevel1: TcxGridLevel;
tsOrganizator: TRzTabSheet;
CostOrg_Grid: TcxGrid;
GT_CostOrg: TcxGridDBTableView;
CostOrg_GridColumn_ID: TcxGridDBColumn;
CostOrg_GridColumn_Name: TcxGridDBColumn;
CostOrg_GridColumn_Articul: TcxGridDBColumn;
CostOrg_GridColumn_Price: TcxGridDBColumn;
CostOrg_GridLevel1: TcxGridLevel;
tsConsolidationPoints: TRzTabSheet;
StaticText3: TStaticText;
CostShelf_Grid: TcxGrid;
CostShelf_GridDBTableView: TcxGridDBTableView;
CostShelf_GridColumn_Id: TcxGridDBColumn;
CostShelf_GridColumnName: TcxGridDBColumn;
CostShelf_GridColumnArticul: TcxGridDBColumn;
CostShelf_GridColumn_Price: TcxGridDBColumn;
CostShelf_GridLevel: TcxGridLevel;
RzPanel4: TRzPanel;
Label29: TLabel;
vCm_Shelf: TRzSpinEdit;
OnceShelfCheck: TRzCheckBox;
StaticText7: TStaticText;
ServFloor_ComboBox: TcxLookupComboBox;
RzPanel5: TRzPanel;
ECostShelfGridCheck: TRzCheckBox;
RzPanel6: TRzPanel;
pnShelfForFloorOpt: TRzPanel;
FixAllEcxeptSelCheck: TRzCheckBox;
ShelfForFloor_Grid: TcxGrid;
ShelfForFloor_GridDBTableView: TcxGridDBTableView;
ShelfForFloor_GridColumn_Floor: TcxGridDBColumn;
ShelfForFloor_GridColumn_id_Shelf: TcxGridDBColumn;
ShelfForFloor_GridColumn_Price: TcxGridDBColumn;
ShelfForFloor_Grid_Id: TcxGridDBColumn;
ShelfForFloor_GridLevel: TcxGridLevel;
Splitter1: TSplitter;
tsAdditionalEquipment: TRzTabSheet;
RzPanel7: TRzPanel;
Label30: TLabel;
vCostDopEq: TRzSpinEdit;
RzPanel8: TRzPanel;
EDopEqGrid_Check: TRzCheckBox;
DopEq_Grid: TcxGrid;
DopEq_TableView: TcxGridDBTableView;
DopEq_Grid_id: TcxGridDBColumn;
DopEq_Grid_Name: TcxGridDBColumn;
DopEq_Grid_Articul: TcxGridDBColumn;
DopEq_Grid_Price: TcxGridDBColumn;
DopEq_Kolvo: TcxGridDBColumn;
DopEq_Level: TcxGridLevel;
RzPanel9: TRzPanel;
Label20: TLabel;
vCPK: TRzSpinEdit;
eKalcPKForRM_Check: TRzCheckBox;
RzPanel10: TRzPanel;
ECostPKGridCheck: TRzCheckBox;
RzPanel11: TRzPanel;
Label19: TLabel;
vCPP: TRzSpinEdit;
Label34: TLabel;
vKolPortPP: TRzSpinEdit;
RzPanel12: TRzPanel;
ECostPPGrid_Check: TRzCheckBox;
RzPanel13: TRzPanel;
Label28: TLabel;
vCOrg: TRzSpinEdit;
RzPanel14: TRzPanel;
ECostOrgGrid_Check: TRzCheckBox;
RzPanel15: TRzPanel;
RzPanel16: TRzPanel;
Label18: TLabel;
vCRM: TRzSpinEdit;
RzPanel17: TRzPanel;
ECostRMGrid_Check: TRzCheckBox;
RzGroupBar1: TRzGroupBar;
grComponentTypes: TRzGroup;
pcChannelComponTypes: TRzPageControl;
TabSheet2: TRzTabSheet;
RzPanel18: TRzPanel;
StaticText4: TStaticText;
CableCanalGrid: TcxGrid;
CableCanalGrid_TableView1: TcxGridDBTableView;
CableCanalGrid_NPP: TcxGridDBColumn;
CableCanalGrid_Name: TcxGridDBColumn;
CableCanalGrid_Articul: TcxGridDBColumn;
CableCanalGrid_Price: TcxGridDBColumn;
CableCanalGrid_Percent: TcxGridDBColumn;
CableCanalGridLevel1: TcxGridLevel;
TabSheet4: TRzTabSheet;
RzPanel19: TRzPanel;
StaticText5: TStaticText;
Cable_Grid: TcxGrid;
Cable_Grid_DBTableView: TcxGridDBTableView;
Cable_Grid_Name: TcxGridDBColumn;
Cable_Grid_Articul: TcxGridDBColumn;
Cable_Grid_Price: TcxGridDBColumn;
Cable_Grid_Percent: TcxGridDBColumn;
Cable_Grid_TypeUse: TcxGridDBColumn;
Cable_GridLevel1: TcxGridLevel;
RzPanel20: TRzPanel;
Label35: TLabel;
vKolCableInPark: TRzSpinEdit;
Label33: TLabel;
vHeigthRM: TRzSpinEdit;
Label32: TLabel;
vKolTehreserv: TRzSpinEdit;
Label26: TLabel;
vKCableRezerv: TRzSpinEdit;
Label24: TLabel;
vCableEndRezerv: TRzSpinEdit;
gbChannelComponTypes: TRzGroupBar;
RzPanel21: TRzPanel;
grChannelComponTypes: TRzGroup;
RzPanel22: TRzPanel;
btCalc: TSpeedButton;
btPrintReport: TSpeedButton;
btEditReport: TSpeedButton;
Clear_Btn: TSpeedButton;
FixBtn: TSpeedButton;
KolRMBtn: TSpeedButton;
cxStyleRepository1: TcxStyleRepository;
cxBackNormal: TcxStyle;
cxBackDisabled: TcxStyle;
Splitter2: TSplitter;
RzGroupBox2: TRzGroupBox;
ElementOfCC_Grid: TcxGrid;
ElementOfCC_Grid_DBTableView: TcxGridDBTableView;
id: TcxGridDBColumn;
Npp_CC: TcxGridDBColumn;
Id_Type: TcxGridDBColumn;
Articul: TcxGridDBColumn;
price: TcxGridDBColumn;
rashod: TcxGridDBColumn;
cxGridLevel1: TcxGridLevel;
lng_Forms: TsiLangLinked;
TabSheet3: TRzTabSheet;
RzPanel3: TRzPanel;
RzPanel23: TRzPanel;
btClearPriceWorks: TSpeedButton;
PriceWorks_Grid: TcxGrid;
PriceWorks_TableView: TcxGridDBTableView;
PriceWorks_Grid_Name: TcxGridDBColumn;
PriceWorks_Grid_Price: TcxGridDBColumn;
cxGridLevel2: TcxGridLevel;
AllComponent_Grid_TypePoz: TcxGridDBColumn;
cxFoter: TcxStyle;
Label25: TLabel;
vKoefDistShot: TRzSpinEdit;
Label27: TLabel;
vKoefDistLong: TRzSpinEdit;
Label38: TLabel;
procedure vKSWorkPlaseChange(Sender: TObject);
procedure vWidthFloorChange(Sender: TObject);
procedure vLengthFloorChange(Sender: TObject);
procedure vSTotalPlaseChange(Sender: TObject);
procedure vKolFloorChange(Sender: TObject);
procedure vKolPortForRMChange(Sender: TObject);
procedure vTotalKolRMChange(Sender: TObject);
procedure vKolRMChange(Sender: TObject);
procedure KolRMBtnClick(Sender: TObject);
{ procedure vKolRMForFloorEdited(Sender: TObject; Node: TFlyNode;
var S: String);}
procedure ECostRMGrid_CheckClick(Sender: TObject);
procedure ECostPPGrid_CheckClick(Sender: TObject);
procedure actAddRecordExecute(Sender: TObject);
procedure ECostPKGridCheckClick(Sender: TObject);
procedure actDelRecordExecute(Sender: TObject);
procedure ECostOrgGrid_CheckClick(Sender: TObject);
procedure ECostShelfGridCheckClick(Sender: TObject);
procedure Main_PageControlChanging(Sender: TObject; NewIndex: Integer;
var AllowChange: Boolean);
procedure actAddCableCanalExecute(Sender: TObject);
function GetFreePercent(count: integer): integer;
function GetFreePercentForCable: Integer;
// Procedure InitTypeOfElementCC_MemTable;
// Procedure InitTypeUseCable_MemTable;
procedure actDelCableCanalExecute(Sender: TObject);
procedure CableCanalMemTableChange(Sender: TField);
procedure CableCanalGrid_TableView1EditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
procedure CableCanalMemTableAfterDelete(DataSet: TDataSet);
procedure btCalcClick(Sender: TObject);
procedure actAddCableExecute(Sender: TObject);
procedure actDelCableExecute(Sender: TObject);
procedure CableCanalGrid_TableView1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
procedure Cable_Grid_DBTableViewKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure CostRMGridKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FixBtnClick(Sender: TObject);
procedure Clear_BtnClick(Sender: TObject);
procedure EDopEqGrid_CheckClick(Sender: TObject);
procedure DopEq_TableViewEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
procedure CostPP_GridDBTableViewEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
procedure GT_CostOrgEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
procedure Cable_Grid_DBTableViewEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
procedure vKKolDopMestChange(Sender: TObject);
procedure FixCableWey_ComboBoxCloseUp(Sender: TObject);
procedure FormulaFloor_GroupChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
procedure FormulaUnderCail_RadioGroupChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
procedure FormulaDekorCC_RadioGroupChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
procedure FormulaInCC_GroupChanging(Sender: TObject; NewIndex: Integer;
var AllowChange: Boolean);
procedure ServFloor_ComboBoxPropertiesChange(Sender: TObject);
procedure vWidthRoomChange(Sender: TObject);
procedure vLengthRoomChange(Sender: TObject);
procedure PrintClick(Sender: TObject);
procedure actExitExecute(Sender: TObject);
procedure btPrintReportClick(Sender: TObject);
procedure btEditReportClick(Sender: TObject);
procedure Curr_ComboBoxPropertiesChange(Sender: TObject);
procedure vHeighFloorChange(Sender: TObject);
procedure vSKab_EditChange(Sender: TObject);
procedure vSForRMChange(Sender: TObject);
procedure AllComponent_GridDBTableView1EditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
procedure OpenFile_BtnClick(Sender: TObject);
procedure SaveFile_BtnClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure CostShelf_GridDBTableViewEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
procedure CostRMGridTableViewDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
procedure CostRMGridTableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure CostPKDBTableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure CostPP_GridDBTableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure GT_CostOrgDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure CostShelf_GridDBTableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure DopEq_TableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure CableCanalGrid_TableView1DragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure ElPointFix_GridTableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure CCForFloor_GridTableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure CCUnderCeil_GridTableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure AllComponent_GridDBTableView1FocusedItemChanged(
Sender: TcxCustomGridTableView; APrevFocusedItem,
AFocusedItem: TcxCustomGridTableItem);
procedure AllComponent_Grid_pricePropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure AllComponent_Grid_KolvoPropertiesValidate(Sender: TObject;
var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
procedure Cable_Grid_DBTableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
procedure ClearProject_BtnClick(Sender: TObject);
procedure grComponentTypesItems0Click(Sender: TObject);
procedure grChannelComponTypesItems0Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure CostRMGridTableViewEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
procedure Name_ColumnPropertiesEditValueChanged(Sender: TObject);
procedure DopEq_GridExit(Sender: TObject);
procedure btClearPriceWorksClick(Sender: TObject);
procedure AllComponent_Grid_TypePozGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
procedure vKolRMForFloorEdited(Sender: TObject; Node: TFlyNode;
var S: WideString);
private
{ Private declarations }
TotalKolCable, TotalKolCC: integer;
// FCountCC, FCountECC: integer;
procedure CalculateCC;
procedure PutHaracterProjectInMT;
procedure AddCCElements;
procedure EnableTableView(ATableView: TcxGridDBTableView; AEnabled: Boolean);
function GetKoefForWorks: double;
procedure FixLabeles;
public
{ Public declarations }
Kalc_DM: TKalc_DM;
KoefForWorks: double;
ServerFloor: integer;
procedure ClearProject;
procedure AutoKomplectFloorByRM;
function CmpFloorsWithKolRM: integer;
//constructor Create(AOwner: TComponent);
destructor Destroy; override;
function CalculateProject: double;
procedure AddRecordInReport(AName: string; AArticul: String; AKol: integer;
APrice, ACost: double; AidTypePoz: string = idTypePozMaterial);
Procedure AddRecordInHaracterProject_MemTable(AName, AZnach: string);
Function getCostOfProjectReportParams: TCostOfProjectReportParams;
procedure Execute;
function GetPriceForKalcFromDragCompon(ACompon: TSCSComponent): double;
procedure PutToReportWork(AIdWorks: integer; AKolWorks: integer; AKoef: double = 1);
end;
Const
TempFile = 'spe.tmp';
const
//íàçâàíèå ïîëåé
fnPercent = 'Percent';
fnArticul = 'Articul';
Const
//íàçâàíèå ñâîéñòâ
pnPORTCOUNT = 'PORTCOUNT';
var
F_Kalc: TF_Kalc;
implementation
uses Math, U_SCSLists, Treecoll, U_Main, U_ResourceReport, DBConsts, U_Common;
{$R *.dfm}
//***************************************************
function TF_Kalc.GetFreePercent(count: integer): integer;
var
i: integer;
RecNo: integer;
begin
Result := 100;
// RecNo := CableCanalMemTable.RecNo;
Kalc_DM.CableCanalMemTable.First;
for i := 0 to Count - 1 do
begin
Result := Result - Kalc_DM.CableCanalMemTable.FieldByName('Percent').AsInteger;
if i = count then
begin
end
else
Kalc_DM.CableCanalMemTable.Next;
end;
end;
//****************************************************
//***************************************************
function TF_Kalc.GetFreePercentForCable: integer;
var
i: integer;
RecNo: integer;
per1, per2: integer;
begin
per1 := 100;
per2 := 100;
Result := -1;
// RecNo := CableCanalMemTable.RecNo;
Kalc_DM.Cable_MemTable.First;
for i := 0 to Kalc_DM.Cable_MemTable.RecordCount - 1 do
begin
if Kalc_DM.Cable_MemTable.FieldByName('Id_Missing').AsInteger = tcuRaspred then
begin
Per1 := Per1 - Kalc_DM.Cable_MemTable.FieldByName('Percent').AsInteger;
end
else
Per2 := Per2 - Kalc_DM.Cable_MemTable.FieldByName('Percent').AsInteger;
Kalc_DM.Cable_MemTable.Next;
end;
if (per1 < 0) and ((Per2 >0) and (per2 <> 100)) then
begin
Result := 1;
end
else
if (per1 > 0) and (Per2 < 0) then
begin
Result := 2;
end
else
if (per1 = 0) and ((Per2 = 0) or (per2 = 100)) then
begin
Result := 0;
end;
if (per1 < 0) and (per2 < 0) then
Result := 3;
if (per1 >0) and (result = -1) then
result := 4;
if (per2 >0) and (result = -1) then
result := 5;
if (per1 <0) and (result = -1) then
result := 6;
if (per2 <0) and (result = -1) then
result := 7;
end;
//****************************************************
///*********------------------------******************
procedure TF_Kalc.CableCanalMemTableChange(Sender: TField);
begin
if GetFreePercent(Kalc_DM.CableCanalMemTable.RecordCount)< 0 then
begin
StaticText4.Show;
end
else
begin
StaticText4.Hide;
end;
end;
//****************************************************
procedure ValCostFromGrid(AEdit: TRzSpinEdit; ATable: TkbmMemTable);
var
I, kolvo: integer;
sum: double;
val: double;
KolvoFlag: boolean;
Field: TField;
begin
kolvo := 1;
Field := ATable.FindField('Kolvo');
if Field <> nil then
KolvoFlag := true
else
KolvoFlag := false;
Sum := 0;
ATable.first;
for i := 0 to ATable.RecordCount - 1 do
begin
if ATable.FieldByName('Price').AsString <> '' then
begin
if KolvoFlag then
kolvo := ATable.FieldByName('Kolvo').AsInteger;
if kolvo < 1 then
kolvo := 1;
val := ATable.FieldByName('Price').AsFloat;
Sum := Sum + Val * kolvo;
kolvo := 1;
end;
ATable.Next;
end;
AEdit.Value := Sum;
end;
procedure TF_Kalc.DopEq_TableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
var price: double;
begin
price := GetPriceForKalcFromDragCompon(GDropComponent);
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.DopEq_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer,Price,1);
// TcxGridTableView(Sender).Refresh;
ValCostFromGrid(vCostDopEq, Kalc_DM.DopEq_MemTable);
end;
function TF_Kalc.CmpFloorsWithKolRM: integer;
var
KolRM, RMOfFloor, i: integer;
begin
result := 0;
KolRm := trunc(vTotalKolRM.Value);
for i := 0 to vKolRMForFloor.Items.Count - 1 do
begin
if vKolRMForFloor.Items[i].Cells[1] = '' then
RMOfFloor := 0
else
RMOfFloor := StrToInt(vKolRMForFloor.Items[i].Cells[1]);
KolRM := KolRm - RMOfFloor;
end;
Result := KolRM; //* (-1);
end;
procedure TF_Kalc.AutoKomplectFloorByRM;
var
KolRm, KolFloor: integer;
KolRmForFloor : integer;
i, count: integer;
begin
KolFloor := trunc(vKolFloor.Value);
if KolFloor <= 0 then
KolFloor := 1;
KolRm := trunc(vTotalKolRM.Value);
KolRmForFloor := trunc(KolRm / KolFloor);
count := vKolRMForFloor.Items.Count -1;
for i := 0 to Count do
begin
if i = Count then
begin
vKolRMForFloor.Items[i].Cells[1] := IntToStr(KolRmForFloor + KolRm mod KolFloor);
end
else
begin
vKolRMForFloor.Items[i].Cells[1] := IntToStr(KolRmForFloor);
end;
end;
end;
procedure TF_Kalc.vKSWorkPlaseChange(Sender: TObject);
var
SVal: double;
begin
If vSTotalPlase.Value <> 0 then
begin
SVal := vSTotalPlase.Value;
vSWorkPlase.Value := SVal * vKSWorkPlase.Value / 100;
// KolRMBtnClick(Self);
end;
end;
procedure TF_Kalc.vWidthFloorChange(Sender: TObject);
begin
vSTotalPlase.Value := vWidthFloor.Value * vLengthFloor.Value;
end;
procedure TF_Kalc.vLengthFloorChange(Sender: TObject);
begin
vSTotalPlase.Value := vWidthFloor.Value * vLengthFloor.Value;
end;
procedure TF_Kalc.vSTotalPlaseChange(Sender: TObject);
begin
vSWorkPlase.Value := vSTotalPlase.Value * vKSWorkPlase.Value / 100;
// vKolRM.Value := vSWorkPlase.Value / vSKab_Edit.Value;
end;
procedure TF_Kalc.vKolFloorChange(Sender: TObject);
var
RowCount, Val: integer;
Count: integer;
begin
if vKolFloor.Value <= vKolFloor.Max then
begin
vSTotalPlase.Value := vKolFloor.Value * vWidthFloor.Value * vLengthFloor.Value;
// Sleep(100);
vKolRooms.Value := trunc(vSWorkPlase.Value / vSKab_Edit.Value);
//
vKolRMForFloor.Items.BeginUpdate;
try
RowCount := vKolRMForFloor.Items.Count;
Val := trunc(vKolFloor.Value);
If VaL <= 0 then
Val := 1;
if RowCount < Val then
begin
For Count := RowCount to Val-1 do
begin
vKolRMForFloor.Items.Add(vKolRMForFloor.Items[count-1], IntToStr(Count+1) + cKalc_Msg1);
Kalc_DM.AddShelfForFloor(IntToStr(Count+1) + cKalc_Msg1);
end;
end;
if RowCount > Val then
begin
For Count := RowCount-1 downto Val do
begin
vKolRMForFloor.Items.Delete(vKolRMForFloor.Items[count]);
Kalc_DM.ShelfForFloor_MemTable.Last;
Kalc_DM.ShelfForFloor_MemTable.Delete;
end;
end;
if vTotalKolRM.Value > 0 then
begin
AutoKomplectFloorByRM;
end;
finally
vKolRMForFloor.Items.EndUpdate;
end;
end;
end;
procedure TF_Kalc.vKolPortForRMChange(Sender: TObject);
begin
vTotalKolPort.Value := trunc(vTotalKolRM.Value * vKolPortForRM.Value);
end;
procedure TF_Kalc.vTotalKolRMChange(Sender: TObject);
begin
vTotalKolPort.Value := trunc(vTotalKolRM.Value * vKolPortForRM.Value);
AutoKomplectFloorByRM;
if StaticText1.Visible then
begin
StaticText1.Hide;
StaticText2.Hide;
end;
end;
procedure TF_Kalc.vKolRMChange(Sender: TObject);
begin
vTotalKolRM.Value := vKolRM.Value + trunc(vKolRM.Value * vKKolDopMest.Value/100);
end;
procedure TF_Kalc.vKolRMForFloorEdited(Sender: TObject; Node: TFlyNode;
var S: WideString);
var razn: integer;
begin
Node.Cells[1] := S;
razn := CmpFloorsWithKolRM ;
if razn <> 0 then
begin
StaticText1.Show;
StaticText2.Caption := cKalc_Msg2 + IntToStr(razn);
StaticText2.Show;
end
else
begin
StaticText1.Hide;
StaticText2.Hide;
end;
end;
procedure TF_Kalc.KolRMBtnClick(Sender: TObject);
begin
vKolRM.Value := trunc(vKolRooms.Value * trunc(vSKab_Edit.Value / vSForRM.Value));
end;
{procedure TF_Kalc.vKolRMForFloorEdited(Sender: TObject; Node: TFlyNode;
var S: String);
var
razn: integer;
begin
Node.Cells[1] := S;
razn := CmpFloorsWithKolRM ;
if razn <> 0 then
begin
StaticText1.Show;
StaticText2.Caption := cKalc_Msg2 + IntToStr(razn);
StaticText2.Show;
end
else
begin
StaticText1.Hide;
StaticText2.Hide;
end;
end; }
procedure TF_Kalc.ECostRMGrid_CheckClick(Sender: TObject);
begin
if ECostRMGrid_Check.Checked then
begin
CostRMGrid.Enabled := true;
vCRM.Value := 0;
vCRM.Enabled := False;
if Kalc_DM.CostRM_MemTable.RecordCount > 0 then
ValCostFromGrid(vCRM, Kalc_DM.CostRM_MemTable);
//CostRMGridTableView.Styles.Background := nil; //cxBackNormal;
EnableTableView(CostRMGridTableView, true);
end
else
begin
vCRM.Enabled := True;
CostRMGrid.Enabled := false;
//CostRMGridTableView.Styles.Background := cxBackDisabled;
//CostRMGridTableView.Styles.Content := cxBackDisabled;
EnableTableView(CostRMGridTableView, false);
end;
end;
procedure TF_Kalc.ECostPPGrid_CheckClick(Sender: TObject);
begin
if ECostPPGrid_Check.Checked then
begin
CostPP_Grid.Enabled := true;
vCPP.Value := 0;
vCPP.Enabled := false;
if Kalc_DM.CostPP_MemTable.RecordCount > 0 then
ValCostFromGrid(vCPP, Kalc_DM.CostPP_MemTable);
EnableTableView(CostPP_GridDBTableView, true);
end
else
begin
CostPP_Grid.Enabled := false;
vCPP.Enabled := true;
EnableTableView(CostPP_GridDBTableView, false);
end;
end;
procedure TF_Kalc.actAddRecordExecute(Sender: TObject);
var
resultCmp, OstPer: integer;
begin
if CostRMGrid.IsFocused then
begin
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostRM_MemTable, 'Êîìïîíåíò ' + IntToStr(Kalc_DM.CostRM_MemTable.RecordCount + 1), '', 0, 1 );
CostRMGrid.Refresh;
end;
if CostPK_Grid.IsFocused then
begin
resultCmp := Kalc_DM.CmpPerFromCostPk_MemTable(OstPer);
case resultCmp of
1 : U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostPK_Memtable, cKalc_Msg4 + IntToStr(Kalc_DM.CostPK_MemTable.RecordCount + 1), '', 0, -1, OstPer, mpkCross);
2,3 : U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostPK_Memtable, cKalc_Msg4 + IntToStr(Kalc_DM.CostPK_MemTable.RecordCount + 1), '', 0, -1, OstPer, mpkRM);
end;
end;
if CostPP_Grid.IsFocused then
begin
if Kalc_DM.CostPP_MemTable.RecordCount = 0 then
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostPP_MemTable, cKalc_Msg5 + IntToStr(Kalc_DM.CostPP_MemTable.RecordCount + 1));
end;
if CostOrg_Grid.IsFocused then
begin
if Kalc_DM.CostOrg_MemTable.RecordCount= 0 then
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostOrg_MemTable, cKalc_Msg6 + IntToStr(Kalc_DM.CostOrg_MemTable.RecordCount + 1));
end;
if CostShelf_Grid.IsFocused then
begin
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostShelf_MemTable, cKalc_Msg7 + IntToStr(Kalc_DM.CostShelf_MemTable.RecordCount + 1));
end;
if DopEq_Grid.IsFocused then
begin
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.DopEq_MemTable, cKalc_Msg8 + IntToStr(Kalc_DM.DopEq_MemTable.RecordCount + 1));
end;
if CCForFloor_Grid.IsFocused then
begin
OstPer := Kalc_DM.CmpPerFromCCFloor_MemTable;
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CCFloor_MemTable, cKalc_Msg9 + IntToStr(Kalc_DM.CCFLoor_MemTable.RecordCount + 1),
'', 0, -1, OstPer);
end;
if CCUnderCeil_Grid.IsFocused then
begin
OstPer := Kalc_DM.CmpPerFromCCUnderCeil_MemTable;
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CCUnderCeil_MemTable, cKalc_Msg10 + IntToStr(Kalc_DM.CCUnderCeil_MemTable.RecordCount + 1),
'', 0, -1, OstPer);
end;
if ElPointFix_Grid.IsFocused then
begin
OstPer := Kalc_DM.CmpPerFromElPointFix_MemTable;
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.ElPointFix_MemTable, cKalc_Msg11 + IntToStr(Kalc_DM.ElPointFix_MemTable.RecordCount + 1),
'', 0, -1, OstPer);
end;
end;
procedure TF_Kalc.ECostPKGridCheckClick(Sender: TObject);
begin
if ECostPKGridCheck.Checked then
begin
CostPK_Grid.Enabled := true;
vCPK.Value := 0;
vCPK.Enabled := False;
EnableTableView(CostPKDBTableView, true);
end
else
begin
CostPK_Grid.Enabled := false;
vCPK.Enabled := True;
EnableTableView(CostPKDBTableView, false);
end;
end;
procedure TF_Kalc.actDelRecordExecute(Sender: TObject);
var
price: double;
id, i: integer;
Kolvo: integer;
begin
if CostRMGrid.IsFocused then
begin
Kolvo := 1;
if Kalc_DM.CostRM_MemTable.RecordCount > 0 then
begin
if Kalc_DM.CostRM_MemTable.FieldByName('Price').AsString <> '' then
begin
price := Kalc_DM.CostRM_MemTable.FieldByName('Price').AsFloat;
Kolvo := Kalc_DM.CostRM_MemTable.FieldByName('Kolvo').AsInteger;
if Kolvo < 1 then
Kolvo := 1;
end;
vCRM.Value := vCRM.Value - price * kolvo;
Kalc_DM.CostRM_MemTable.Delete;
end;
end;
if CostPK_Grid.IsFocused then
begin
if Kalc_DM.CostPK_MemTable.RecordCount > 0 then
begin
Kalc_DM.CostPK_MemTable.Delete;
end;
end;
if CostPP_Grid.IsFocused then
begin
if Kalc_DM.CostPP_MemTable.RecordCount > 0 then
begin
vCPP.Value := 0;
Kalc_DM.CostPP_MemTable.Delete;
end;
end;
if CostOrg_Grid.IsFocused then
begin
if Kalc_DM.CostOrg_MemTable.RecordCount > 0 then
begin
vCOrg.Value := 0;
Kalc_DM.CostOrg_MemTable.Delete;
end;
end;
if CostShelf_Grid.IsFocused then
begin
if Kalc_DM.CostShelf_MemTable.RecordCount > 0 then
begin
id := Kalc_DM.CostShelf_MemTable.FieldByName('Id').AsInteger;
with Kalc_DM.ShelfForFloor_MemTable do
begin
First;
while Not Eof do
begin
if FieldbyName('id_shelf').AsInteger = id then
begin
Edit;
FieldbyName('id_shelf').Clear;
FieldbyName('price').Clear;
Post;
end;
Next;
end;
end;
Kalc_DM.CostShelf_MemTable.Delete;
end;
end;
if DopEq_Grid.IsFocused then
begin
price := 0;
kolvo := 1;
if Kalc_DM.DopEq_MemTable.RecordCount > 0 then
begin
if Kalc_DM.DopEq_MemTable.FieldByName('price').AsString <> '' then
price := Kalc_DM.DopEq_MemTable.FieldByName('price').AsFloat;
Kolvo := Kalc_DM.DopEq_MemTable.FieldByName('Kolvo').AsInteger;
if Kolvo < 1 then
Kolvo := 1;
vCostDopEq.Value := vCostDopEq.Value - price * kolvo;
Kalc_DM.DopEq_MemTable.Delete;
end;
end;
if CCForFloor_Grid.IsFocused then
begin
Kalc_DM.CCFloor_MemTable.Delete;
end;
if CCUnderCeil_Grid.IsFocused then
begin
Kalc_DM.CCUnderCeil_MemTable.Delete;
end;
if ElPointFix_Grid.IsFocused then
begin
Kalc_DM.ElPointFix_MemTable.Delete;
end;
end;
procedure TF_Kalc.ECostOrgGrid_CheckClick(Sender: TObject);
begin
if ECostOrgGrid_Check.Checked then
begin
CostOrg_Grid.Enabled := true;
vCOrg.Value := 0;
vCOrg.Enabled := false;
if Kalc_DM.CostOrg_MemTable.RecordCount > 0 then
ValCostFromGrid(vCOrg, Kalc_DM.CostOrg_MemTable);
EnableTableView(GT_CostOrg, true);
end
else
begin
CostOrg_Grid.Enabled := false;
vCOrg.Enabled := true;
EnableTableView(GT_CostOrg, false);
end;
end;
procedure TF_Kalc.ECostShelfGridCheckClick(Sender: TObject);
begin
if ECostShelfGridCheck.Checked then
begin
vCm_Shelf.Value := 0;
vCm_Shelf.Enabled := false;
OnceShelfCheck.visible := false;
CostShelf_Grid.Enabled := true;
ShelfForFloor_Grid.Enabled := true;
EnableTableView(CostShelf_GridDBTableView, true);
EnableTableView(ShelfForFloor_GridDBTableView, true);
end
else
begin
vCm_Shelf.Enabled := true;
OnceShelfCheck.Visible := true;
CostShelf_Grid.Enabled := false;
ShelfForFloor_Grid.Enabled := false;
EnableTableView(CostShelf_GridDBTableView, false);
EnableTableView(ShelfForFloor_GridDBTableView, false);
end;
CostShelf_Grid.Enabled := ECostShelfGridCheck.Checked;
pnShelfForFloorOpt.Enabled := ECostShelfGridCheck.Checked;
end;
procedure TF_Kalc.Main_PageControlChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
var
ActivePage: integer;
OperTableView: TcxGridDBTableView;
begin
//çäåñü íóæíî ïðîâåðÿòü êîíòðîëû è çàíîñèòü çíà÷åíèÿ
ActivePage := Main_PageControl.ActivePageIndex;
OperTableView := Nil;
if ActivePage = 4 then
begin
if AllComponent_Grid.Visible and F_Kalc.Visible then
AllComponent_Grid.SetFocus;
if AllComponent_GridDBTableView1.DataController.IsEditing then
OperTableView := AllComponent_GridDBTableView1;
// AllowChange :=false;
end;
if ActivePage = 3 then
begin
if PriceWorks_Grid.Visible and F_Kalc.Visible then
PriceWorks_Grid.SetFocus;
if PriceWorks_TableView.DataController.IsEditing then
OperTableView := PriceWorks_TableView;
//AllowChange :=false;
end;
if ActivePage = 1 then
begin
if pcComponentTypes.Visible and F_Kalc.Visible then
pcComponentTypes.SetFocus;
if CostRMGridTableView.DataController.IsEditing then
OperTableView := CostRMGridTableView;
if CostPKDBTableView.DataController.IsEditing then
OperTableView := CostPKDBTableView;
if CostPP_GridDBTableView.DataController.IsEditing then
OperTableView := CostPP_GridDBTableView;
if GT_CostOrg.DataController.IsEditing then
OperTableView := GT_CostOrg;
if CostShelf_GridDBTableView.DataController.IsEditing then
OperTableView := CostShelf_GridDBTableView;
if ShelfForFloor_GridDBTableView.DataController.IsEditing then
OperTableView := ShelfForFloor_GridDBTableView;
if DopEq_TableView.DataController.IsEditing then
OperTableView := DopEq_TableView;
end;
if ActivePage = 2 then
begin
if pcChannelComponTypes.Visible and F_Kalc.Visible then
pcChannelComponTypes.SetFocus;
if CCForFloor_GridTableView.DataController.IsEditing then
OperTableView := CCForFloor_GridTableView;
if CCUnderCeil_GridTableView.DataController.IsEditing then
OperTableView := CCUnderCeil_GridTableView;
if ElPointFix_GridTableView.DataController.IsEditing then
OperTableView := CCUnderCeil_GridTableView;
if CableCanalGrid_TableView1.DataController.IsEditing then
OperTableView := CableCanalGrid_TableView1;
if ElementOfCC_Grid_DBTableView.DataController.IsEditing then
OperTableView := ElementOfCC_Grid_DBTableView;
//then
// AllowChange := false;
end;
if Assigned(OperTableView) then
if OperTableView.DataController.IsEditing then
begin
AllowChange := false;
OperTableView.DataController.Cancel;
if not OperTableView.DataController.IsEditing then
AllowChange := true;
end;
if ActivePage = 0 then
begin
if vKoefDistShot.Value + vKoefDistLong.Value > 100 then
begin
MessageModal(cKalc_Msg88, cKalc_Msg15, MB_ICONINFORMATION);
AllowChange :=false;
if vKoefDistShot.Visible and F_Kalc.Visible then
vKoefDistShot.SetFocus;
end;
end;
end;
procedure TF_Kalc.actAddCableCanalExecute(Sender: TObject);
var
FCountCC,Count: integer;
Ost: integer;
i, z : integer;
NewCount: Integer;
begin
FCountCC := 0;
if Kalc_DM.CableCanalMemTable.RecordCount > 0 then
begin
Kalc_DM.CableCanalMemTable.Last;
FCountCC := Kalc_DM.CableCanalMemTable.FieldbyName('Npp').AsInteger +1;
end;
with Kalc_DM.CableCanalMemTable do
begin
Open;
Ost := GetFreePercent(RecordCount);
if Ost < 0 then
Ost := 0;
Append;
// FieldByName('Npp').AsInteger := FCountCC;
if FCountCC = 0 then
FieldByName('Name').AsString := cKalc_Msg12
else
FieldByName('Name').AsString := cKalc_Msg12 + ' ' + IntToStr(FCountCC);
FieldByName('Price').AsFloat := 0;
FieldByName('Percent').AsFloat := Ost;
Post;
end;
AddCCElements;
end;
procedure TF_Kalc.actDelCableCanalExecute(Sender: TObject);
var
npp: integer;
begin
SetFocusToControl(CableCanalGrid);
npp := Kalc_DM.CableCanalMemTable.FieldByName('Npp').AsInteger;
Kalc_DM.ElemForCabcanal_MemTable.First;
While not Kalc_DM.ElemForCabcanal_MemTable.Eof do
begin
if Kalc_DM.ElemForCabcanal_MemTable.FieldByName('Npp_CC').AsInteger = npp then Kalc_DM.ElemForCabcanal_MemTable.Delete
else Kalc_DM.ElemForCabcanal_MemTable.Next; end;Kalc_DM.CableCanalMemTable.Delete; end;
procedure TF_Kalc.CableCanalGrid_TableView1EditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
// Kalc_DM.CableCanalMemTable.Refresh;
if GetFreePercent(Kalc_DM.CableCanalMemTable.RecordCount)< 0 then
begin
StaticText4.Show;
end
else
begin
StaticText4.Hide;
end;
end;
procedure TF_Kalc.CableCanalMemTableAfterDelete(DataSet: TDataSet);
begin
if GetFreePercent(Kalc_DM.CableCanalMemTable.RecordCount)< 0 then
begin
StaticText4.Show;
end
else
begin
StaticText4.Hide;
end;
end;
procedure TF_Kalc.btCalcClick(Sender: TObject);
begin
CalculateProject;
end;
function TF_Kalc.CalculateProject: double;
var
i: integer;
Nodecells: string;
Node: TFlyNode;
CostRM: double;
KolRM, KolPort, KolPortForRM: integer;
KRezervCable, DistShot, DistLong, RezervCableEnd, KoefShot, KoefLong: double;
KolCableInPark, {KolCableForMagistral, }KolCableForRm, KolReservCable: integer;
KolPortForMCable, LengthMagCable : double;
KableShtuk, KableShtukForFlor, KolCable : integer;
CableShtukList: TIntList;
KolPP, KolPPforPort: integer;
PointedMCable, PointedRaspredCable: boolean;
KolOrg: integer;
KolPKForPort, KolPKForRM, TotalKolPK: integer;
Kolvo, id_Shelf, TotalKolShelf: integer;
KolEq: integer;
CostProject: double;
NameOfElementCC: String;
KoefWorks: double;
///ðàñ÷¸ò êàáåëÿ
SredLengthCable: double;
KolWorkCable, KolWorkConduit: double;
function GetSredLength(ADistShot, ADistLong, AKoefShot, AKoefLong: double): double;
var
koefForSred, SredDist: double;
begin
//êîýôèöèåíòû ïîäëàþòñÿ â öåëîì âèäå
koefForSred := 0; SredDist := 0;
if AKoefShot + AKoefLong < 100 then
begin
koefForSred := 100 - AKoefShot - AKoefLong;
SredDist := (ADistShot + ADistLong)/2;
end;
Result := (ADistShot*AKoefShot + ADistLong*AKoefLong + koefForSred*SredDist)/100
end;
function LengthMCable(AList: TIntList): double;
var
HeigthFloor: double;
TotalLenght: double;
TotalKolCable: integer;
i: integer;
begin
Result := 0;
HeigthFloor := vHeighFloor.Value;
TotalLenght := 0;
for i := 0 to Alist.Count-1 do
begin
TotalLenght := TotalLenght + abs(ServerFloor - i - 1) * HeigthFloor * Alist[i];
end;
Result := TotalLenght;
end;
Function PointOnceShelf: boolean;
var
Flag : boolean;
begin
Result := True;
Flag := False;
with Kalc_DM.ShelfForFloor_MemTable do
begin
if RecordCount > 0 then
begin
First;
while Not Eof do
begin
if not FieldByName('id_shelf').IsNull then
begin
if flag then
begin
Result := false;
Break;
end
else
Flag := True;
end
else
Next;
end;
end;
end;
end;
begin
Result := 0;
KoefForWorks := GetKoefForWorks;
CableShtukList := TIntList.Create;
try
//Ïîäñ÷åò ñòîèìîñòè ÐÌ
Kalc_DM.AllComponent_MemTable.Active := False;
Kalc_DM.AllComponent_MemTable.Active := True;
CostRM := vCRM.Value;
KolEq := 1;
KolRM := trunc(vTotalKolRM.Value);
//ðàáîòû ïî ìîíòàæó ðì
PutToReportWork(idwRM, KolRm,KoefForWorks);
If ECostRMGrid_Check.Checked and (Kalc_DM.CostRM_MemTable.RecordCount > 0) then
begin
with Kalc_DM.CostRM_MemTable do
begin
First;
while not eof do
begin
if FieldByName('Kolvo').AsString = '' then
KolEq := 1
else
KolEq := FieldByName('Kolvo').AsInteger;
if kolEq < 1 then
KolEq := 1;
KolEq := trunc(KolEq * KolRM);
AddRecordInReport( FieldByName('Name').AsString,
FieldByName('Articul').AsString,
KolEq,
FieldByName('Price').AsFloat,
KolRM * FieldByName('Price').AsFloat);
Next;
KolEq := 1;
end;
end;
end
else
begin
AddRecordInReport( cKalc_Msg93, '', KolRM, CostRM, KolRM * CostRM);
end;
//Ïîäñ÷¸ò ñòîèìîñòè êàáåëÿ
KolPort := trunc(vTotalKolPort.Value);
KolPortForRM := trunc(vKolPortForRM.Value);
KolPortForMCable := vKolPortForMCable.Value;
DistShot := vDistShot.Value;
DistLong := vDistLong.Value;
KRezervCable := 1 + trunc(vKCableRezerv.Value)/100;
RezervCableEnd := vCableEndRezerv.Value;
KolCableInPark := trunc(vKolCableInPark.Value);
//êàáåëü äëÿ ÐÌ
KoefShot := vKoefDistShot.Value;
KoefLong := vKoefDistLong.Value;
SredLengthCable := GetSredLength(DistShot, DistLong, KoefShot, KoefLong);
KolCableForRm :=trunc(ceil(KolPort / trunc(KolCableInPark / (SredLengthCable * KRezervCable + RezervCableEnd))) * KolCableInPark);
//Êàáåëü äëÿ ìàãèñòðàëåé
LengthMagCable := 0;
KolReservCable := trunc(vKolReservCable.Value);
Kalc_DM.ShelfForFloor_MemTable.First;
for i := 0 to vKolRMForFloor.Items.Count - 1 do
begin
if vKolRMForFloor.Items[i].Cells[1] <> ''then
KableShtukForFlor := ceil( StrToFloat_My(vKolRMForFloor.Items[i].Cells[1])*KolPortForRM/KolPortForMCable)
else
KableShtukForFlor := 0;
if KableShtukForFlor > 0 then
begin
if not(OnceShelfCheck.Checked and OnceShelfCheck.Enabled) then
begin
if Kalc_DM.ShelfForFloor_MemTable.FieldByName('id_shelf').IsNull then
begin
MessageModal(cKalc_Msg13 +' ' + IntToStr(i + 1) + ' ' + cKalc_Msg14, cKalc_Msg15, MB_ICONINFORMATION) ;
KableShtukForFlor := 0;
end
else
KableShtukForFlor := KableShtukForFlor + KolReservCable;
end
else
KableShtukForFlor := KableShtukForFlor + KolReservCable;
end;
if not Kalc_DM.ShelfForFloor_MemTable.Eof then
Kalc_DM.ShelfForFloor_MemTable.Next;
CableShtukList.Add(KableShtukForFlor);
end;
//åñëè âñ¸ ðàáîòàåò íå ñ îäíîé ñåðâåðíîé
if ((not OnceShelfCheck.Checked) or (Not OnceShelfCheck.Enabled)) and (vKolFloor.Value > 1) then
begin
//íàõîäèì îáùóþ äëèíó ìàãèñòðàëüíîãî êàáåëÿ
LengthMagCable := LengthMCable(CableShtukList);
PointedMCable := False;
with Kalc_DM.Cable_MemTable do
begin
First;
for i := 0 to RecordCount - 1 do
begin
if FieldByName('Id_Missing').AsInteger = tcuMagistral then
begin
PointedMCable := true;
break;
end;
Next;
end;
if not PointedMCable then
begin
KolCableForRm := ceil(LengthMagCable + KolCableForRm);
end;
PointedRaspredCable := false;
First;
while Not Eof do
begin
if FieldByName('Id_Missing').AsInteger = tcuMagistral then
begin
KolCable := round(LengthMagCable * fieldByname('Percent').AsFloat / 100);
end
else
begin
PointedRaspredCable := true;
KolCable := round(ceil(KolCableForRm * fieldByname('Percent').AsFloat /100/KolCableInPark)* KolCableInPark);
end;
AddRecordInReport( FieldByName('Name').AsString,
FieldByName('Articul').AsString,
KolCable,
FieldByName('Price').AsFloat,
KolCable * FieldByName('Price').AsFloat);
Next;
end;
end;
end
else
begin
PointedRaspredCable := false;
with Kalc_DM.Cable_MemTable do
begin
First;
while Not Eof do
begin
if FieldByName('Id_Missing').AsInteger = tcuRaspred then
begin
PointedRaspredCable := true;
KolCable := round(ceil(KolCableForRm * fieldByname('Percent').AsFloat / 100/KolCableInPark)* KolCableInPark);
AddRecordInReport( FieldByName('Name').AsString,FieldByName('Articul').AsString,
KolCable, FieldByName('Price').AsFloat, KolCable * FieldByName('Price').AsFloat);
end;
Next;
end;
end;
end;
if not PointedRaspredCable then
MessageModal(cKalc_Msg87, cKalc_Msg15, MB_ICONINFORMATION);
//çàíîñèì çíà÷åíèå ñóìû âñåõ÷ êàáåëåé â ïåðåìåííóþ ôîðìû
TotalKolCable := round(LengthMagCable + KolPort * SredLengthCable);
//ðàáîòû ïî ïðîêëàäêå êàáåëÿ
PutToReportWork(idwCable, TotalKolCable, KoefForWorks);
//êîëè÷åñòâî ïàò÷ ïàíåëåé äëÿ ïðîåêòà
Case TypeConnectEuipment_RadioGroup.ItemIndex of
0 : KolPPforPort := 2;
1 : KolPPforPort := 1;
2 : KolPPforPort := 3;
end;
if (OnceShelfCheck.Checked and OnceShelfCheck.Enabled) or PointOnceShelf then
begin //äëÿ âñåãî ïðîåêòà
KolPP := trunc(ceil(trunc(vTotalKolPort.Value) / trunc(vKolPortPP.Value)) * KolPPforPort);
end
else
begin
KolPP := 0; //îïðåäåëÿåì ÏÏ äëÿ ýòàæåé
for i := 0 to vKolRMForFloor.Items.Count - 1 do
begin
KolPP := KolPP + ceil(StrToInt(vKolRMForFloor.Items[i].Cells[1]) / trunc(vKolPortPP.Value)) * KolPPforPort;
end;
//îïðåäåëèì êîëè÷åñòâî ÏÏ äëÿ ìàãèñòàðëüíûõ ÏÏ
KableShtuk := 0;
For i := 0 to CableShtukList.Count - 1 do
begin
KableShtuk := KableShtuk + CableShtukList[i];
end;
KolPP := KolPP + ceil(KableShtuk / vKolPortPP.Value);
end;
if ECostPPGrid_Check.Checked and (Kalc_DM.CostPP_MemTable.RecordCount > 0) then
begin
with Kalc_DM.CostPP_MemTable do
begin
First;
AddRecordInReport( FieldByName('Name').AsString,
FieldByName('Articul').AsString,
KolPP,
FieldByName('Price').AsFloat,
KolPP * FieldByName('Price').AsFloat);
end;
end
else
begin
AddRecordInReport(cKalc_Msg16, '', KolPP, vCPP.Value, KolPP * vCPP.Value);
end;
//ðàáîòû ïî óñòàíîâêå ïàò÷-ïàíåëåé
PutToReportWork(idwPP, KolPP, KoefForWorks);
//êîëè÷åñòâî îðãàíèçàòîðîâ äëÿ ïðîåêòà
KolOrg := KolPP;
if ECostOrgGrid_Check.Checked and (Kalc_DM.CostOrg_MemTable.RecordCount > 0) then
begin
with Kalc_DM.CostOrg_MemTable do
begin
First;
AddRecordInReport( FieldByName('Name').AsString,
FieldByName('Articul').AsString,
KolOrg,
FieldByName('Price').AsFloat,
KolOrg * FieldByName('Price').AsFloat);
end;
end
else
begin
AddRecordInReport(cKalc_Msg17, '', KolOrg, vCOrg.Value, KolOrg * vCOrg.Value);
end;
//ðàáîòû ïî óñòàíîâêå îðãàíèçàòîðîâ
PutToReportWork(idwOrg, KolOrg, KoefForWorks);
//Êîëè÷åñòâî ïàò÷êîðäîâ äëÿ ïðîåêòà
Case TypeConnectEuipment_RadioGroup.ItemIndex of
0 : KolPKforPort := 1;
1 : KolPKforPort := 1;
2 : KolPKforPort := 1;
end;
TotalKolPK := trunc(KolPP / KolPPforPort * vKolPortPP.Value);
if eKalcPKForRM_Check.Checked then
begin
KolPKForRM := trunc(vKolPKForRM.Value);
TotalKolPK := TotalKolPK + trunc(KolRM * KolPKForRM);
end;
if ECostPKGridCheck.Checked and (Kalc_DM.CostPK_MemTable.RecordCount > 0) then
begin
with Kalc_DM.CostPK_MemTable do
begin
First;
AddRecordInReport( FieldByName('Name').AsString,
FieldByName('Articul').AsString,
TotalKolPK,
FieldByName('Price').AsFloat,
TotalKolPK * FieldByName('Price').AsFloat);
end;
end
else
begin
AddRecordInReport(cKalc_Msg18, '', TotalKolPK, vCPK.Value, TotalKolPK * vCPK.Value);
end;
//Êîëè÷åñòâî øêàôîâ ïî ïðîåêòó
TotalKolShelf := 0;
if not ECostShelfGridCheck.Checked or (Kalc_DM.CostShelf_MemTable.RecordCount < 1) then
begin
if OnceShelfCheck.Checked and OnceShelfCheck.Enabled then
begin
AddRecordInReport(cKalc_Msg19, '', 1, vCm_Shelf.Value, vCm_Shelf.Value);
TotalKolShelf := 1;
end
else
begin
AddRecordInReport(cKalc_Msg19, '', trunc(vKolFloor.Value), vCm_Shelf.Value, vCm_Shelf.Value * trunc(vKolFloor.Value));
TotalKolShelf := trunc(vKolFloor.Value);
end;
end
else
if Kalc_DM.CostShelf_MemTable.RecordCount > 0 then
begin
with Kalc_DM.CostShelf_MemTable do
begin
First;
while Not Eof do
begin
id_Shelf := FieldByName('id').asInteger;
Kolvo := 0;
begin
Kalc_DM.ShelfForFloor_MemTable.First;
while Not Kalc_DM.ShelfForFloor_MemTable.Eof do
begin
if (Not Kalc_DM.ShelfForFloor_MemTable.FieldByName('id_shelf').IsNull)
and (Kalc_DM.ShelfForFloor_MemTable.FieldByName('id_shelf').AsInteger = id_Shelf)
then
begin
inc(kolvo);
end;
Kalc_DM.ShelfForFloor_MemTable.Next;
end;
end;
if kolvo > 0 then
begin
TotalKolShelf := TotalKolShelf + Kolvo;
AddRecordInReport(FieldByName('Name').AsString,
FieldByName('Articul').AsString,
Kolvo,
FieldByName('Price').AsFloat,
Kolvo * FieldByName('Price').AsFloat);
end;
Next;
end;
end;
end;
//Ðàáîòû ïî ìîíòàæó øêàôîâ
PutToReportWork(idwShelf, TotalKolShelf, KoefForWorks);
// Êîëè÷åñòâî äîïîëíèòåëüíîãî îáîðóäîâàíèÿ
If EDopEqGrid_Check.Checked and (Kalc_DM.DopEq_MemTable.RecordCount > 0) then
begin
with Kalc_DM.DopEq_MemTable do
begin
First;
while not Eof do
begin
if FieldByName('Kolvo').AsString = '' then
KolEq := 1
else
KolEq := FieldByName('Kolvo').AsInteger;
if kolEq < 1 then
KolEq := 1;
AddRecordInReport( FieldByName('Name').AsString,
FieldByName('Articul').AsString,
KolEq,
FieldByName('Price').AsFloat,
KolEq * FieldByName('Price').AsFloat);
Next;
end;
end;
end
else
begin
AddRecordInReport(cKalc_Msg20, '', 1, vCostDopEq.Value, vCostDopEq.Value);
end;
//Êîëè÷åñòâî êàáåëüíûõ êàíàëîâ
//if FixCableWey_ComboBox.ItemIndex = 3 then
// begin
// with Kalc_DM.CableCanalMemTable do
// begin
// First;
// while Not Eof do
// actDelCableCanalExecute(Self);
// end;
// end;
CalculateCC;
//Ïîäñ÷¸ò ñòîèìîñòè âñåãî ïðîåêòà
CostProject := 0;
with Kalc_DM.AllComponent_MemTable do
begin
First;
while Not Eof do
begin
KolEq := FieldByName('Kolvo').AsInteger;
CostProject := CostProject + KolEq * FieldByName('price').AsFloat;
Next;
end;
end;
Result := CostProject;
//äîáàâèì îñòàëüíûå ðàáîòû
PutToReportWork(idwCrossPort,KolPort, KoefForWorks); //'Êðîññèðîâêà (1 ïîðò)';
PutToReportWork(idwTestPort,KolPort, KoefForWorks); //'Òåñòèðîâàíèå ñîåäèíåíèé (1 ïîðò)';
PutToReportWork(idwProectPort, KolPort, KoefForWorks); //'Ïðîåêòíûå ðàáîòû (1 ïîðò)';
PutToReportWork(idwTransport, 1, KoefForWorks); //'Òðàíñïîðòíûå ðàñõîäû';
PutToReportWork(idwAnother,1, KoefForWorks); //'Äðóãèå ïóñêîíàëàäî÷íûå ðàáîòû';
///idwKoef = 12; //'Êîýôèöèåíò íà ðàáîòû (ñîãëàñíî îñîáîìó õàðàêòåðó ðàáîò)';
/////////////////////////////
PutHaracterProjectInMt;
finally
CableShtukList.Free;
end;
end;
procedure TF_Kalc.AddRecordInReport(AName: string; AArticul: String; AKol: integer;
APrice, ACost: double; AidTypePoz: string = idTypePozMaterial);
begin
with Kalc_DM.AllComponent_MemTable do
begin
Open;
Append;
FieldByName('Name').AsString := AName;
FieldByName('Articul').AsString := AArticul;
FieldByName('Kolvo').AsInteger := AKol;
FieldByName('Price').AsFloat := APrice;
FieldByName('Cost').AsFloat := ACost;
FieldByName('TypePoz').AsString := AidTypePoz;
post;
end;
end;
procedure TF_Kalc.actAddCableExecute(Sender: TObject);
var
Count: integer;
Ost: integer;
i, z : integer;
begin
with Kalc_DM.Cable_MemTable do
begin
Open;
Append;
FieldByName('Name').AsString := cKalc_Msg21 + IntToStr(Kalc_DM.Cable_MemTable.RecordCount + 1);
FieldByName('Price').AsFloat := 0;
FieldByName('Percent').AsInteger := 100;
FieldByName('Id_Missing').AsInteger := tcuRaspred;
Post;
end;
Ost := GetFreePercentForCable;
if Ost > 0 then
StaticText5.Show
else
StaticText5.Hide;
end;
procedure TF_Kalc.actDelCableExecute(Sender: TObject);
begin
Kalc_DM.Cable_MemTable.Delete;
if GetFreePercentForCable > 0 then
StaticText5.Show
else
StaticText5.Hide;
end;
procedure TF_Kalc.CableCanalGrid_TableView1KeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if key = 45 then //Insert
begin
actAddCableCanalExecute(Sender);
end;
if key = 46 then
begin
actDelCableCanalExecute(Sender);
end;
end;
procedure TF_Kalc.Cable_Grid_DBTableViewKeyDown(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if key = 45 then //Insert
begin
actAddCableExecute(Sender);
end;
if key = 46 then
begin
actDelCableExecute(Sender);
end;
end;
procedure TF_Kalc.CostRMGridKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = 45 then //Insert
begin
actAddRecordExecute(Sender);
end;
if key = 46 then
begin
actDelRecordExecute(Sender);
end;
end;
procedure TF_Kalc.FixBtnClick(Sender: TObject);
var
ID, id_Shelf: integer;
Price: double;
begin
id_Shelf := Kalc_DM.CostShelf_MemTable.FieldbyName('id').AsInteger;
Price := Kalc_DM.CostShelf_MemTable.FieldbyName('price').AsFloat;
if FixAllEcxeptSelCheck.Checked then
begin
with Kalc_DM.ShelfForFloor_MemTable do
begin
id := FieldbyName('id').AsInteger;
First;
while Not Eof do
begin
if id <> FieldbyName('id').AsInteger then
begin
Edit;
FieldbyName('id_shelf').AsInteger := id_Shelf;
FieldbyName('price').AsFloat := Price;
Post;
end;
Next;
end;
First;
MoveBy(ID);
end;
FixAllEcxeptSelCheck.Checked := false;
end
else
begin
with Kalc_DM.ShelfForFloor_MemTable do
begin
Edit;
FieldbyName('Id_Shelf').AsInteger := id_Shelf;
FieldbyName('price').AsFloat := Price;
Post;
end;
end;
ShelfForFloor_Grid.Refresh;
end;
procedure TF_Kalc.Clear_BtnClick(Sender: TObject);
begin
with Kalc_DM.ShelfForFloor_MemTable do
begin
First;
while Not Eof do
begin
Edit;
FieldbyName('id_shelf').Clear;
FieldbyName('price').Clear;
Post;
Next;
end;
end;
end;
procedure TF_Kalc.EDopEqGrid_CheckClick(Sender: TObject);
begin
if EDopEqGrid_Check.Checked then
begin
DopEq_Grid.Enabled := true;
vCostDopEq.Value := 0;
if Kalc_DM.DopEq_MemTable.RecordCount > 0 then
ValCostFromGrid(vCostDopEq, Kalc_DM.DopEq_MemTable);
end
else
DopEq_Grid.Enabled := false;
EnableTableView(DopEq_TableView, EDopEqGrid_Check.Checked);
end;
procedure TF_Kalc.DopEq_TableViewEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
ValCostFromGrid(vCostDopEq, Kalc_DM.DopEq_MemTable);
end;
procedure TF_Kalc.CostPP_GridDBTableViewEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
ValCostFromGrid(vCPP, Kalc_DM.CostPP_MemTable);
end;
procedure TF_Kalc.GT_CostOrgEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
ValCostFromGrid(vCOrg, Kalc_DM.CostOrg_MemTable);
end;
procedure TF_Kalc.Cable_Grid_DBTableViewEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
if GetFreePercentForCable > 0 then
StaticText5.Show
else
StaticText5.Hide;
end;
procedure TF_Kalc.vKKolDopMestChange(Sender: TObject);
begin
vTotalKolRM.Value := vKolRM.Value + trunc(vKolRM.Value * vKKolDopMest.Value/100);
end;
procedure TF_Kalc.FixCableWey_ComboBoxCloseUp(Sender: TObject);
begin
case FixCableWey_ComboBox.ItemIndex of
0: TypeWeyCC_PageControl.ActivePageIndex := 0;
1: TypeWeyCC_PageControl.ActivePageIndex := 1;
2: TypeWeyCC_PageControl.ActivePageIndex := 2;
3: TypeWeyCC_PageControl.ActivePageIndex := 3;
end;
end;
procedure TF_Kalc.FormulaFloor_GroupChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
begin
Case NewIndex of
0:begin
FormulaFloor2_Panel.Enabled := False;
FormulaFloor1_Panel.Enabled := true;
end;
1:begin
FormulaFloor1_Panel.Enabled := False;
FormulaFloor2_Panel.Enabled := true;
end;
end;
end;
procedure TF_Kalc.FormulaUnderCail_RadioGroupChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
begin
Case NewIndex of
0:begin
FormulaUnderCail2_Panel.Enabled := False;
FormulaUnderCail1_Panel.Enabled := true;
end;
1:begin
FormulaUnderCail1_Panel.Enabled := False;
FormulaUnderCail2_Panel.Enabled := true;
end;
end;
end;
procedure TF_Kalc.FormulaDekorCC_RadioGroupChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
begin
Case NewIndex of
0:begin
FormulaDekorCC2_Panel.Enabled := False;
FormulaDekorCC1_Panel.Enabled := true;
end;
1:begin
FormulaDekorCC1_Panel.Enabled := False;
FormulaDekorCC2_Panel.Enabled := true;
end;
end;
end;
procedure TF_Kalc.FormulaInCC_GroupChanging(Sender: TObject;
NewIndex: Integer; var AllowChange: Boolean);
begin
Case NewIndex of
0:begin
FormulaInCC2_Panel.Enabled := False;
FormulaInCC3_Panel.Enabled := False;
FormulaInCC1_Panel.Enabled := true;
end;
1:begin
FormulaInCC1_Panel.Enabled := False;
FormulaInCC3_Panel.Enabled := False;
FormulaInCC2_Panel.Enabled := true;
end;
2:begin
FormulaInCC1_Panel.Enabled := False;
FormulaInCC2_Panel.Enabled := False;
FormulaInCC3_Panel.Enabled := true;
end;
end;
end;
procedure TF_Kalc.ServFloor_ComboBoxPropertiesChange(Sender: TObject);
begin
ServerFloor := ServFloor_ComboBox.EditValue;
end;
procedure TF_Kalc.CalculateCC;
var
PerTehreservCC, KolCC, KolCCForRm: double;
CCLength: integer;
KolElemCC: integer;
KoefWorks: double;
KolDopCC: integer;
procedure KalcElemOfCC(ACCLength: integer) ;
var
NameOfElementCC: string;
begin
while Not Kalc_DM.ElemForCabcanal_MemTable.Eof do
begin
KolElemCC := Ceil(ACCLength / 100 * Kalc_DM.ElemForCabcanal_MemTable.fieldByName('rashod').AsFloat);
Kalc_DM.TypeOfElementCC_MemTable.First;
Kalc_DM.TypeOfElementCC_MemTable.MoveBy(Kalc_DM.ElemForCabcanal_MemTable.FieldByName('id_type').AsInteger - 1);
NameOfElementCC := Kalc_DM.TypeOfElementCC_MemTable.FieldByName('name').AsString + ' (' + Kalc_DM.CableCanalMemTable.FieldByName('Name').AsString + ')';
AddRecordInReport(NameOfElementCC,
Kalc_DM.ElemForCabcanal_MemTable.FieldByName('Articul').AsString,
KolElemCC,
Kalc_DM.ElemForCabcanal_MemTable.FieldByName('price').AsFloat,
KolElemCC * Kalc_DM.ElemForCabcanal_MemTable.FieldByName('price').AsFloat);
Kalc_DM.ElemForCabcanal_MemTable.Next;
end;
end;
function CalcCCFloor: integer;
var
KolCCForFloor, Kolvo : integer;
KolRM: integer;
Function Metod1: integer;
var
LenghtRoom, WidthRoom, x, y: double;
KolRooms: integer;
KolRM: integer;
begin
Result := 0;
KolRooms := trunc(vKolRooms.Value);
LenghtRoom := vLengthRoom.Value;
WidthRoom := vWidthRoom.Value;
x := vFormulaFloor1_X.Value;
y := vFormulaFloor1_Y.Value;
Result := Ceil((LenghtRoom * x + WidthRoom * y) * KolRooms);
end;
Function Metod2: integer;
var
x: double;
KolRooms: integer;
begin
Result := 0;
x := vFormulaFloor2_X.Value;
KolRooms := trunc(vKolRooms.Value);
Result := Ceil(KolRooms * x );
end;
begin
if Kalc_DM.CCFloor_MemTable.RecordCount > 0 then
begin
Case FormulaFloor_Group.ItemIndex of
0: KolCCForFloor := Metod1;
1: KolCCForFloor := Metod2;
end;
KolDopCC := KolCCForFloor;
with Kalc_DM.CCFloor_MemTable do
begin
First;
while Not Eof do
begin
Kolvo := ceil(KolCCForFloor * FieldByName('Percent').AsFloat / 100);
AddRecordInReport( FieldByName('Name').AsString,
FieldByName('Articul').AsString,
Kolvo,
FieldByName('Price').AsFloat,
Kolvo * FieldByName('Price').AsFloat);
Next;
end;
end;
KolRM := trunc(vTotalKolRM.Value);
Result := trunc(KolRM * vHeigthRM.Value);
end;
end;
function CalcUndeCeil: integer;
var
Kolvo: integer;
KolCCUnderCeil: integer;
function Metod1ForUnderCeilCC: integer;
var
LenghtRoom, WidthRoom, x, y: double;
KolRooms: integer;
KolRM: integer;
begin
Result := 0;
KolRooms := trunc(vKolRooms.Value);
LenghtRoom := vLengthRoom.Value;
WidthRoom := vWidthRoom.Value;
x := vFormulaUnderCeil1_X.Value;
y := vFormulaUnderCeil1_Y.Value;
Result := Ceil(LenghtRoom * x + WidthRoom * y);
end;
Function Metod2ForUnderCeilCC: integer;
var
x: double;
KolRooms: integer;
begin
Result := 0;
x := vFormulaUnderCeil2_X.Value;
KolRooms := trunc(vKolRooms.Value);
Result := Ceil(KolRooms * x );
end;
Function Metod1ForDekorCC: integer;
var
KolRm: integer;
HeigthFalseCeil, HeigthRM: Double;
begin
Result := 0;
KolRm := trunc(vTotalKolRM.Value);
HeigthFalseCeil := vHeigthFalseCeil.Value;
HeigthRM := vHeigthRM.Value;
Result := ceil(KolRm * (HeigthFalseCeil - HeigthRM));
end;
Function Metod2ForDekorCC: integer;
var
KolRooms: integer;
LengthRoom, HeigthFalseCeil, HeigthRM: Double;
x: double;
begin
Result := 0;
x := vFormulaDekorCC2_X.Value;
KolRooms := trunc(vKolRooms.Value);
HeigthFalseCeil := vHeigthFalseCeil.Value;
HeigthRM := vHeigthRM.Value;
LengthRoom := vLengthRoom.Value;
Result := ceil(KolRooms * (LengthRoom + HeigthFalseCeil - HeigthRM));
end;
begin
case FormulaUnderCail_RadioGroup.ItemIndex of
0: KolCCUnderCeil := Metod1ForUnderCeilCC;
1: KolCCUnderCeil := Metod2ForUnderCeilCC;
end;
case FormulaDekorCC_RadioGroup.ItemIndex of
0: Result := Metod1ForDekorCC;
1: Result := Metod2ForDekorCC;
end;
KolDopCC := KolCCUnderCeil;
with Kalc_DM.CCUnderCeil_MemTable do
begin
First;
while Not Eof do
begin
Kolvo := ceil(KolCCUnderCeil * FieldByName('Percent').AsFloat / 100);
AddRecordInReport( FieldByName('Name').AsString,
FieldByName('Articul').AsString,
Kolvo,
FieldByName('Price').AsFloat,
Kolvo * FieldByName('Price').AsFloat);
Next;
end;
end;
end;
/////////////////////////////////////
function CalcInCC: integer;
function Metod1: integer;
var
x: double;
KolRM: integer;
begin
Result := 0;
x := vFormulaInCC1_X.Value;
KolRM := trunc(vTotalKolRM.Value);
Result := Ceil(KolRM * x );
end;
function Metod2: integer;
var
x: double;
KolRooms: integer;
begin
Result := 0;
x := vFormulaInCC2_X.Value;
KolRooms := trunc(vKolRooms.Value);
Result := Ceil(KolRooms * x);
end;
function Metod3: integer;
var
HeigthFalseCeil, HeigthRM: Double;
LenghtRoom, WidthRoom, x, y: double;
KolRooms: integer;
KolRM: integer;
begin
Result := 0;
HeigthFalseCeil := vHeigthFalseCeil.Value;
HeigthRM := vHeigthRM.Value;
KolRooms := trunc(vKolRooms.Value);
LenghtRoom := vLengthRoom.Value;
WidthRoom := vWidthRoom.Value;
x := vFormulaInCC3_X.Value;
y := vFormulaInCC3_Y.Value;
Result := Ceil(LenghtRoom * y + WidthRoom * x + KolRm * (HeigthFalseCeil - HeigthRM));
end;
begin
result := 0;
Case FormulaInCC_Group.ItemIndex of
0: Result := Metod1;
1: Result := Metod2;
2: Result := Metod3;
end;
end;
//////////////////////////////////////////////////
function CalcOpenWir: integer;
var
KolPoint, kolvo: integer;
function Metod1: integer;
var
Rashod,KolCableInBeam: double;
begin
Result := 0;
Rashod := vMetodOpenWir1_Rashod.Value;
//KolCableInBeam := vMetodOpenWir1_KolInBeam.Value;
Result := ceil(TotalKolCable * KolCableInBeam);
end;
begin
result := 0;
case OpenWir_RadioGroup.ItemIndex of
0: KolPoint := Metod1;
end;
with Kalc_DM.ElPointFix_MemTable do
begin
First;
while Not Eof do
begin
Kolvo := ceil(KolPoint * FieldByName('Percent').AsFloat / 100);
AddRecordInReport( FieldByName('Name').AsString,
FieldByName('Articul').AsString,
KolPoint,
FieldByName('Price').AsFloat,
KolPoint * FieldByName('Price').AsFloat);
Next;
end;
end;
end;
//////////////////////////////////////////////////
begin
KolDopCC := 0;
PerTehreservCC := vKolTehreserv.Value / 100;
case FixCableWey_ComboBox.ItemIndex of
0: CCLength := CalcCCFloor;
1: CCLength := CalcUndeCeil;
2: CCLength := CalcInCC;
3: CCLength := CalcOpenWir;
end;
KolCC := CCLength + ceil(CCLength * PerTehreservCC);
// ðàáîòû ïî ïðîêëàäêå êàáåëüíîãî êàíàëà
if FixCableWey_ComboBox.ItemIndex <> 3 then
begin
KoefWorks := KoefForWorks;
TotalKolCC := CCLength + KolDopCC;
PutToReportWork(idwCC, TotalKolCC,Koefworks);
end;
if FixCableWey_ComboBox.ItemIndex <> 3 then
with Kalc_DM.CableCanalMemTable do
begin
First;
while not Eof do
begin
CCLength := (Ceil(KolCC * FieldByName('percent').AsFloat / 100));
AddRecordInReport( FieldByName('Name').AsString,
FieldByName('Articul').AsString,
CCLength,
FieldByName('Price').AsFloat,
CCLength * FieldByName('Price').AsFloat);
KalcElemOfCC(CCLength);
Next;
end;
end;
end;
procedure TF_Kalc.vWidthRoomChange(Sender: TObject);
var
val: double;
begin
val := vWidthRoom.Value;
if val = 0 then
val := 1;
vSKab_Edit.Value := Val * vLengthRoom.Value;
end;
procedure TF_Kalc.vLengthRoomChange(Sender: TObject);
var
val: double;
begin
val := vLengthRoom.Value;
if val = 0 then
val := 1;
vSKab_Edit.Value := vWidthRoom.Value * Val;
end;
procedure TF_Kalc.PrintClick(Sender: TObject);
var
CostOfProjectReportParams: TCostOfProjectReportParams;
begin
{PutHaracterProjectInMt;
CostOfProjectReportParams := getCostOfProjectReportParams;
F_ProjMan.F_ResourceReport.ShowPriorCostOfProjectReportWizard(Kalc_DM.AllComponent_MemTable, Kalc_DM.HaracterProject_MemTable,
CostOfProjectReportParams, false);}
end;
procedure TF_Kalc.PutHaracterProjectInMT;
begin
Kalc_DM.HaracterProject_MemTable.Active := False;
Kalc_DM.HaracterProject_MemTable.Active := true;
AddRecordInHaracterProject_MemTable(cKalc_Msg22, FloatToStr(vKolFloor.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg23 + GetNameUOM2(F_NormBase.FUOM), FloatToStr(vSTotalPlase.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg24, FloatToStr(vKSWorkPlase.Value)+ '%');
AddRecordInHaracterProject_MemTable(cKalc_Msg25 + GetNameUOM2(F_NormBase.FUOM), FloatToStr(vKolFloor.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg26 + GetNameUOM(F_NormBase.FUOM, true), FloatToStr(vHeighFloor.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg27, FloatToStr(vKolRooms.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg28 + GetNameUOM(F_NormBase.FUOM, true), FloatToStr(vWidthRoom.Value) + ' x ' + FloatToStr(vLengthRoom.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg29 + GetNameUOM2(F_NormBase.FUOM), FloatToStr(vSKab_Edit.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg30 + GetNameUOM2(F_NormBase.FUOM), FloatToStr(vSForRM.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg31, FloatToStr(vKolRM.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg32, FloatToStr(vKKolDopMest.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg33, FloatToStr(vTotalKolRM.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg34, FloatToStr(vKolPortForRM.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg35, FloatToStr(vSKab_Edit.Value));
if eKalcPKForRM_Check.Checked then
AddRecordInHaracterProject_MemTable(cKalc_Msg36, FloatToStr(vKolPKForRM.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg37 + GetNameUOM(F_NormBase.FUOM, true), FloatToStr(vHeigthRM.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg38 + GetNameUOM(F_NormBase.FUOM, true), FloatToStr(vDistShot.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg39 + GetNameUOM(F_NormBase.FUOM, true), FloatToStr(vDistLong.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg91, FloatToStr(vKoefDistShot.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg92, FloatToStr(vKoefDistLong.Value));
case TypeConnectEuipment_RadioGroup.ItemIndex of
0: AddRecordInHaracterProject_MemTable(cKalc_Msg40, cKalc_Msg41);
1: AddRecordInHaracterProject_MemTable(cKalc_Msg40, cKalc_Msg42);
2: AddRecordInHaracterProject_MemTable(cKalc_Msg40, cKalc_Msg43);
end;
AddRecordInHaracterProject_MemTable(cKalc_Msg44, FloatToStr(vKolPortForRM.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg45, FloatToStr(vKolReservCable.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg46, IntToStr(ServerFloor));
if OnceShelfCheck.Checked and (not ECostShelfGridCheck.Checked) then
AddRecordInHaracterProject_MemTable(cKalc_Msg47, cKalc_Msg48);
AddRecordInHaracterProject_MemTable(cKalc_Msg49 + GetNameUOM(F_NormBase.FUOM, true), FloatToStr(vKolCableInPark.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg50, FloatToStr(vKCableRezerv.Value) + '%');
AddRecordInHaracterProject_MemTable(cKalc_Msg51 + GetNameUOM(F_NormBase.FUOM, true), FloatToStr(vCableEndRezerv.Value));
AddRecordInHaracterProject_MemTable(cKalc_Msg52, FloatToStr(vKCableRezerv.Value) + '%');
AddRecordInHaracterProject_MemTable(cKalc_Msg53, FixCableWey_ComboBox.Text);
Case FixCableWey_ComboBox.ItemIndex of
0:begin
AddRecordInHaracterProject_MemTable(cKalc_Msg54,cKalc_Msg55);
if Kalc_DM.CCFloor_MemTable.RecordCount > 0 then
case FormulaFloor_Group.ItemIndex of
0: AddRecordInHaracterProject_MemTable(cKalc_Msg56, cKalc_Msg57 + FloatToStr(vFormulaFloor1_X.Value) +
cKalc_Msg58 + FloatToStr(vFormulaFloor1_Y.Value) + cKalc_Msg59);
1: AddRecordInHaracterProject_MemTable(cKalc_Msg56, cKalc_Msg60 + FloatToStr(vFormulaFloor2_X.Value) + cKalc_Msg61 + GetNameUOM(F_NormBase.FUOM, false));
end;
end;
1:begin
case FormulaDekorCC_RadioGroup.ItemIndex of
0: AddRecordInHaracterProject_MemTable(cKalc_Msg54, cKalc_Msg62);
1: AddRecordInHaracterProject_MemTable(cKalc_Msg54, cKalc_Msg63 + FloatToStr(vFormulaDekorCC2_X.Value) + cKalc_Msg64);
end;
if Kalc_DM.CCUnderCeil_MemTable.RecordCount > 0 then
case FormulaUnderCail_RadioGroup.ItemIndex of
0: AddRecordInHaracterProject_MemTable(cKalc_Msg65, cKalc_Msg66 + FloatToStr(vFormulaUnderCeil1_X.Value) +
cKalc_Msg67 + FloatToStr(vFormulaUnderCeil1_Y.Value) + cKalc_Msg68);
1: AddRecordInHaracterProject_MemTable(cKalc_Msg65, cKalc_Msg69 + FloatToStr(vFormulaUnderCeil2_X.Value) + cKalc_Msg70 + GetNameUOM(F_NormBase.FUOM, false));
end;
end;
2:begin
case FormulaInCC_Group.ItemIndex of
0: AddRecordInHaracterProject_MemTable(cKalc_Msg71, cKalc_Msg72);
1: AddRecordInHaracterProject_MemTable(cKalc_Msg54, cKalc_Msg73 + FloatToStr(vFormulaInCC2_X.Value) + cKalc_Msg70);
2: AddRecordInHaracterProject_MemTable(cKalc_Msg54, cKalc_Msg74 + FloatToStr(vFormulaInCC3_X.Value)
+ cKalc_Msg75 + FloatToStr(vFormulaInCC3_Y.Value) + ')' + #10#13 + cKalc_Msg76);
end;
end;
3:begin
case OpenWir_RadioGroup.ItemIndex of
0: AddRecordInHaracterProject_MemTable(cKalc_Msg77, cKalc_Msg78 + cKalc_Msg79 + FloatToStr(vMetodOpenWir1_Rashod.Value) +')');
end;
end;
end;
if FixCableWey_ComboBox.ItemIndex <> 3 then
AddRecordInHaracterProject_MemTable(cKalc_Msg90 + GetNameUOM(F_NormBase.FUOM, true), IntToStr(TotalKolCC));
AddRecordInHaracterProject_MemTable(cKalc_Msg89+ GetNameUOM(F_NormBase.FUOM, true), IntToStr(TotalKolCable));
end;
procedure TF_Kalc.AddRecordInHaracterProject_MemTable(AName, AZnach: string);
begin
with Kalc_DM.HaracterProject_MemTable do
begin
Append;
FieldByName('Name').AsString := AName;
FieldByName('Znach').AsString := AZnach;
Post;
end;
end;
//procedure TF_Kalc.Button2222Click(Sender: TObject);
//var
// CostOfProjectReportParams: TCostOfProjectReportParams;
//begin
// PutHaracterProjectInMt;
// CostOfProjectReportParams := getCostOfProjectReportParams;
// F_ProjMan.F_ResourceReport.ShowPriorCostOfProjectReportWizard(Kalc_DM.AllComponent_MemTable, Kalc_DM.HaracterProject_MemTable,
// CostOfProjectReportParams, true);
//end;
procedure TF_Kalc.actExitExecute(Sender: TObject);
begin
Self.Close;
end;
function TF_Kalc.getCostOfProjectReportParams: TCostOfProjectReportParams;
begin
Result.ZakazchikName := ZakazchikName_Edit.Text;
Result.PodradchikName := PodradchikName_edit.Text;
Result.CurrencyName := Curr_ComboBox.Text;
end;
procedure TF_Kalc.btPrintReportClick(Sender: TObject);
var
CostOfProjectReportParams: TCostOfProjectReportParams;
begin
F_ProjMan.CreateFResourceReport;
ValidateActiveFormControl(Self);
CostOfProjectReportParams := getCostOfProjectReportParams;
if EIncludHarProj.Checked then
F_ProjMan.F_ResourceReport.ShowPriorCostOfProjectReportWizard(Kalc_DM.AllComponent_MemTable, Kalc_DM.HaracterProject_MemTable,
CostOfProjectReportParams, true, false)
else
F_ProjMan.F_ResourceReport.ShowPriorCostOfProjectReportWizard(Kalc_DM.AllComponent_MemTable, Kalc_DM.HaracterProject_MemTable,
CostOfProjectReportParams, false, false);
ShowWindow(Handle, SW_MINIMIZE);
end;
procedure TF_Kalc.btEditReportClick(Sender: TObject);
var
CostOfProjectReportParams: TCostOfProjectReportParams;
begin
F_ProjMan.CreateFResourceReport;
CostOfProjectReportParams := getCostOfProjectReportParams;
if EIncludHarProj.Checked then
F_ProjMan.F_ResourceReport.ShowPriorCostOfProjectReportWizard(Kalc_DM.AllComponent_MemTable, Kalc_DM.HaracterProject_MemTable,
CostOfProjectReportParams, true, true)
else
F_ProjMan.F_ResourceReport.ShowPriorCostOfProjectReportWizard(Kalc_DM.AllComponent_MemTable, Kalc_DM.HaracterProject_MemTable,
CostOfProjectReportParams, false, true);
end;
procedure TF_Kalc.Curr_ComboBoxPropertiesChange(Sender: TObject);
var
FormatStr: string;
begin
FormatStr := cKalc_Msg80 + Curr_ComboBox.EditText;
AllComponent_GridDBTableView1.DataController.Summary.FooterSummaryItems[0].Format := FormatStr;
AllComponent_GridDBTableView1.DataController.Summary.DefaultGroupSummaryItems[0].Format := FormatStr;
end;
procedure TF_Kalc.vHeighFloorChange(Sender: TObject);
var
Heigth: double;
begin
Heigth := vHeighFloor.Value;
vHeigthCC.Max := Heigth;
vHeigthRM.Max := Heigth;
vHeigthFalseCeil.Max := Heigth;
end;
procedure TF_Kalc.vSKab_EditChange(Sender: TObject);
var
val: double;
begin
val := vSKab_Edit.Value;
if val <= 0 then
val := 1;
vKolRooms.Value := trunc(vSWorkPlase.Value / val);
end;
procedure TF_Kalc.vSForRMChange(Sender: TObject);
begin
// KolRMBtnClick(Self);
end;
procedure TF_Kalc.AllComponent_GridDBTableView1EditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
//with Kalc_DM.AllComponent_MemTable do
// begin
// Post;
// Edit;
// FieldByName(fnCost).AsFloat := FieldByName(fnKolvo).AsFloat * FieldByName(fnPrice).AsFloat;
// Post;
// end;
end;
{ T_KalcDocument }
procedure T_KalcDocument.AddParamToXMl(AName: string; Value : string = '');
var
Node, Atr: IDomNode;
Str: IDOMCharacterData;
begin
Node := TopNode.createElement(Aname);
if Value <> '' then
begin
Atr := TopNode.createAttribute('value');
Atr.nodeValue := Value; // ñîçäàíèå òåõñòîâîãî óçëà
Node.attributes.setNamedItem(Atr);
end;
RootNode.appendChild(Node);
end;
procedure T_KalcDocument.AddToXmlGrid(AGrid: TcxGridDBTableView);
var
MT: TkbmMemTable;
FieldDefs: TFieldDefs;
NameField, Value, str: string;
i, j: integer;
fieldNode, Node, RecordNode: IDOMNode;
Text: IDOMCharacterData;
CountTime: integer;
begin
MT := TkbmMemTable(AGrid.DataController.DataSource.DataSet);
FieldDefs := MT.FieldDefs;
// if mt.State <> dsBrowse then
// begin
// //AGrid.DataController.Cancel;
//// AGrid.DataController.Controller.EditingController.Edit.EditValue := AGrid.DataController.Controller.EditingController.Edit. ;
// // F_Kalc.Name_ColumnPropertiesEditValueChanged(AGrid.DataController.Controller.EditingController.Edit);
//
//// AGrid.DataController.UpdateData;
//
// // mt.CheckBrowseMode;
// //MT.CheckActive;
// // MT.DataEvent(deCheckBrowseMode, 0);
// // case mt.State of
//// dsEdit, dsInsert:
//// begin
//// mt.UpdateRecord;
//// if mt.Modified then mt.Post else mt.Cancel;
//// end;
//// end;
// // CountTime := 0;
//
// //end;
// end;
Node := TopNode.getElementsByTagName(Agrid.Name).item[0];
if (Node <> NIL) and (MT.RecordCount > 0) then
with MT do
begin
First;
j := 1;
while Not Eof do
begin
str := 'Record' + IntTostr(j);
RecordNode := TopNode.createElement(Str);
if RecordNode <> Nil then
begin
For i := 0 to FieldDefs.Count -1 do
begin
NameField := FieldDefs[i].Name;
fieldNode := TopNode.createAttribute(NameField);
fieldNode.nodeValue := FieldByName(NameField).AsString;
RecordNode.attributes.setNamedItem(fieldNode);
end;
Node.appendChild(RecordNode);
inc(j);
Next;
end;
end;
end;
end;
constructor T_KalcDocument.Create(AOwner: TObject; AFileName: string = '');
begin
inherited Create();
FOwner := TForm(AOwner);
if AFileName <> '' then
begin
LoadFromFile(AFileName);
end
else
begin
CreateXML(AFileName);
end;
end;
procedure T_KalcDocument.CreateXML(AFieldName: string);
begin
Xml := TXMLDocument.Create(nil);
XML.Active := false;
Xml.XML.Text := ('');
XML.Active := true;
TopNode := XML.DOMDocument;
RootNode := TopNode.appendChild(topNode.createElement('params'));
// Xml.documentElement;
InitXMl;
end;
destructor T_KalcDocument.Destroy;
begin
Xml.Free;
inherited;
end;
procedure T_KalcDocument.InitXMl;
var
i, Count : integer;
Control: TControl;
procedure AddControlsToXML(AControl: TComponent);
var
i,j: integer;
PageControl: TRzPageControl;
begin
if (Acontrol is TcxCustomEdit) or (AControl is TcxGridDBTableView)
or(AControl is TRzCustomEdit) or (Acontrol is TRzCustomCheckBox)
or(Acontrol is TcxCustomComboBox) or(AControl is TCustomComboBox)
or(Acontrol is TFlyTreeViewPro) or(Acontrol is TRzRadioGroup)
then
begin
AddParamToXML(Acontrol.Name);
end
end;
begin
with FOwner do
begin
count := ComponentCount;
for i := 0 to Count - 1 do
begin
// if Components[i] is TCustomControl then
AddControlsToXML(Components[i]);
end;
end;
// SaveToFile('max.xml');
end;
procedure T_KalcDocument.LoadComponentValue(AComponent: TComponent);
var
Node, childNode: IDOMNode;
Text: IDOMCharacterData;
Str: string;
i: integer;
FlyTreeView: TFlyTreeViewPro;
FlyNode: TFlyNode;
begin
Node := TopNode.getElementsByTagName(AComponent.Name).item[0];
if (Node <> Nil) then
if node.attributes.length > 0 then
begin
Str := '';
if AComponent is TRzCheckBox then
TRzCheckBox(AComponent).Checked := StrToBool(Node.attributes.item[0].nodeValue);
if AComponent is TRzCustomEdit then
TRzCustomEdit(AComponent).EditText := Node.attributes.item[0].nodeValue;
if AComponent is TRzRadioGroup then
begin
if Node.attributes.item[0].nodeValue = '' then
TRzRadioGroup(AComponent).ItemIndex := 0
else
TRzRadioGroup(AComponent).ItemIndex := StrToInt(Node.attributes.item[0].nodeValue);
end;
if AComponent is TcxCustomEdit then
begin
if AComponent is TcxSpinEdit then
begin
TcxSpinEdit(AComponent).Value := StrToFloatU(Node.attributes.item[0].nodeValue);
end
else
if (AComponent is TcxComboBox) then
begin
TcxComboBox(AComponent).ItemIndex := StrToInt(Node.attributes.item[0].nodeValue)
end
else
TcxCustomEdit(AComponent).EditValue := Node.attributes.item[0].nodeValue;
end;
if AComponent is TFlyTreeViewPro then
begin
FlyTreeView := TFlyTreeViewPro(AComponent);
For i:= FlyTreeView.Items.Count - 1 downto 1 do
begin
FlyTreeView.Items.Delete(FlyTreeView.Items[i]);
end;
For i := 0 to Node.attributes.length - 1 do
begin
if i <> 0 then
FlyTreeView.Items.Add(FlyNode, IntToStr(i+1) + cKalc_Msg1);
FlyNode := FlyTreeView.Items[FlyTreeView.Items.Count - 1];
FlyNode.Cells[1] := Node.attributes.item[i].nodeValue;
end;
end
end
else
begin
if AComponent is TcxGridDBTableView then
LoadGridFromXML(TcxGridDBTableView(AComponent));
end;
end;
procedure T_KalcDocument.LoadGridFromXML(AGrid: TcxGridDBTableView);
var
MT: TDataSet;
FieldDefs: TFieldDefs;
NameField, Value, str: string;
i, j: integer;
fieldNode, Node, RecordNode: IDOMNode;
Text: IDOMCharacterData;
NodeList: IDOMNodeList;
count: integer;
begin
MT := AGrid.DataController.DataSource.DataSet;
MT.Active := false;
MT.Active := True;
FieldDefs := MT.FieldDefs;
NodeList := TopNode.getElementsByTagName(Agrid.Name);
Node := NodeList.item[0];
//MT.Active := false;
//MT.Active := true;
if (Node <> NIL) then
begin
RecordNode := Node.firstChild;
j := 1;
while RecordNode <> Nil do
begin
MT.Append;
for i := 0 to RecordNode.attributes.length-1 do
begin
fieldNode := RecordNode.attributes.item[i];
MT.FieldByName(fieldNode.nodeName).AsString := fieldNode.nodeValue;
end;
MT.Post;
RecordNode := RecordNode.nextSibling;
end;
end;
end;
procedure T_KalcDocument.LoadFromFile(AFileName: string);
var
i: integer;
AControl: TComponent;
begin
TF_Kalc(FOwner).Kalc_DM.DisebleMasterDetail;
try
Xml := TXMLDocument.Create(nil);
Xml.LoadFromFile(AFileName);
Xml.Active := true;
TopNode := Xml.DOMDocument;
RootNode := TopNode.documentElement;
if RootNode <> nil then
begin
for i := 0 to FOwner.ComponentCount - 1 do
begin
AControl := FOwner.Components[i];
if (Acontrol is TcxCustomEdit) or (AControl is TcxGridDBTableView)
or(AControl is TRzCustomEdit) or (Acontrol is TRzCustomCheckBox)
or(Acontrol is TcxCustomComboBox) or(AControl is TCustomComboBox)
or(Acontrol is TFlyTreeViewPro) or(Acontrol is TRzRadioGroup)
then
LoadComponentValue(AControl);
end;
TF_Kalc(FOwner).Kalc_DM.AllComponent_MemTable.Active := False;
TF_Kalc(FOwner).Kalc_DM.AllComponent_MemTable.Active := True;
end;
Finally
TF_Kalc(FOwner).Kalc_DM.EnableMasterDetail;
end;
end;
procedure T_KalcDocument.SaveComponentValue(AComponent: TComponent);
var
Atr,Node, childNode: IDOMNode;
Text: IDOMCharacterData;
Str: string;
i: integer;
FlyTreeView: TFlyTreeViewPro;
begin
Str := '';
if AComponent is TRzCustomEdit then
Str := TRzCustomEdit(AComponent).EditText;
if AComponent is TRzCheckBox then
Str := BoolToStr(TRzCheckBox(AComponent).Checked);
if AComponent is TRzRadioGroup then
Str := IntToStr(TRzRadioGroup(AComponent).ItemIndex);
if AComponent is TcxCustomEdit then
begin
if AComponent is TcxSpinEdit then
Str := FloatToStrU(TcxSpinEdit(AComponent).Value)
else
if TcxCustomEdit(AComponent).EditValue = Null then
Str := ''
else
if (AComponent is TcxComboBox) then
begin
str := IntToStr(TcxComboBox(AComponent).ItemIndex);
end
else
Str := TcxCustomEdit(AComponent).EditValue;
end;
if Str <> '' then
begin
Node := TopNode.getElementsByTagName(AComponent.Name).item[0];
Atr := TopNode.createAttribute('Value');
Atr.nodeValue := Str;
Node.attributes.setNamedItem(Atr);
//TopNode.getElementById(AComponent.Name);
// Text := Xml.DOMDocument.createTextNode(Str);
// Node.appendChild(Text);
end
else
begin
if AComponent is TFlyTreeViewPro then
begin
Node := TopNode.getElementsByTagName(AComponent.Name).item[0];
FlyTreeView := TFlyTreeViewPro(AComponent);
For i:= 0 to FlyTreeView.Items.Count - 1 do
begin
str := 'Floor' + IntToStr(i + 1);
Atr := TopNode.createAttribute(Str);
Atr.nodeValue := FlyTreeView.Items[i].Cells[1];
Node.attributes.setNamedItem(Atr);
end;
end;
if AComponent is TcxGridDBTableView then
AddToXmlGrid(TcxGridDBTableView(AComponent));
end;
end;
procedure T_KalcDocument.SaveToFile(AFileName: string);
var
i: integer;
begin
TF_Kalc(FOwner).Kalc_DM.DisebleMasterDetail;
try
for i := 0 to FOwner.ComponentCount - 1 do
begin
SaveComponentValue(FOwner.Components[i]);
end;
finally
TF_Kalc(FOwner).Kalc_DM.EnableMasterDetail;
end;
Xml.SaveToFile(AFileName);
end;
procedure TF_Kalc.OpenFile_BtnClick(Sender: TObject);
var
x: T_KalcDocument;
Name: TFileName;
razn : integer;
begin
OpenDialog1.Filter := cKalc_Msg81;
OpenDialog1.Title := cKalc_Msg82;
if OpenDialog1.Execute then
begin
Name := OpenDialog1.FileName;
x := T_KalcDocument.Create(Self, Name);
x.Destroy;
//ïðîâåðÿåì è âûíîñèì ïðåäóïðåæäåíèÿ
if GetFreePercentForCable > 0 then
StaticText5.Show
else
StaticText5.Hide;
if GetFreePercent(Kalc_DM.CableCanalMemTable.RecordCount)< 0 then
begin
StaticText4.Show;
end
else
begin
StaticText4.Hide;
end;
razn := CmpFloorsWithKolRM ;
if razn <> 0 then
begin
StaticText1.Show;
StaticText2.Caption := cKalc_Msg2 + IntToStr(razn);
StaticText2.Show;
end
else
begin
StaticText1.Hide;
StaticText2.Hide;
end;
end;
end;
procedure TF_Kalc.SaveFile_BtnClick(Sender: TObject);
var
x: T_KalcDocument;
Name: TFileName;
begin
SaveDialog1.Filter := cKalc_Msg83;
SaveDialog1.Title := cKalc_Msg84;
SaveDialog1.DefaultExt := '*.spe';
If SaveDialog1.Execute then
begin
Name := SaveDialog1.FileName;
x := T_KalcDocument.Create(Self);
x.SaveToFile(Name);
x.Destroy;
end;
end;
procedure TF_Kalc.FormClose(Sender: TObject; var Action: TCloseAction);
var
x: T_KalcDocument;
ActivePage: integer;
Error: Boolean;
begin
ValidateActiveFormControl(Self);
Error := true;
ActivePage := Main_PageControl.ActivePageIndex;
if ActivePage = 4 then
begin
if AllComponent_GridDBTableView1.DataController.IsEditing then
Error :=false;
end;
if ActivePage = 3 then
begin
if PriceWorks_TableView.DataController.IsEditing then
Error :=false;
end;
if ActivePage = 1 then
begin
if CostRMGridTableView.DataController.IsEditing
or CostPKDBTableView.DataController.IsEditing
or CostPP_GridDBTableView.DataController.IsEditing
or GT_CostOrg.DataController.IsEditing
or CostShelf_GridDBTableView.DataController.IsEditing
or ShelfForFloor_GridDBTableView.DataController.IsEditing
or DopEq_TableView.DataController.IsEditing
then
Error := false;
end;
if ActivePage = 2 then
begin
if CCForFloor_GridTableView.DataController.IsEditing
or CCUnderCeil_GridTableView.DataController.IsEditing
or ElPointFix_GridTableView.DataController.IsEditing
or CableCanalGrid_TableView1.DataController.IsEditing
or ElementOfCC_Grid_DBTableView.DataController.IsEditing
then
Error := false;
end;
try
if Error then
begin
x := T_KalcDocument.Create(Self);
x.SaveToFile(TempFile);
x.Destroy;
end
else
Action := caNone;
except
on E: Exception do AddExceptionToLogEx('TF_Kalc.FormClose', E.Message);
end;
end;
procedure TF_Kalc.CostShelf_GridDBTableViewEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
var
price: double;
id: integer;
begin
// Kalc_DM.ShelfForFloor_MemTable.Refresh;
Sender.DataController.Post;
if AItem.Index = 3 then
begin
id := Kalc_DM.CostShelf_MemTable.FieldByName(fnID).AsInteger;
price := Kalc_DM.CostShelf_MemTable.FieldByName(fnPrice).AsFloat;
with Kalc_DM.ShelfForFloor_MemTable do
begin
First;
while not Eof do
begin
if (not FieldByName('Id_Shelf').IsNull) and(id = FieldByName('Id_Shelf').AsInteger) then
begin
Edit;
FieldByName(fnPrice).AsFloat := price;
Post;
end;
Next;
end;
end;
end;
end;
procedure TF_Kalc.CostRMGridTableViewDragOver(Sender, Source: TObject; X,
Y: Integer; State: TDragState; var Accept: Boolean);
begin
Accept := false;
if Source is TTreeView then
if TControl(Source).Owner is TF_Main then
begin
if TTreeView(Source).Selected <> nil then
begin
if IsComponentNode(TTreeView(Source).Selected) then
if GDropComponent.ID <> 0 then
begin
Accept := true;
end;
end;
end;
end;
procedure TF_Kalc.CostRMGridTableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
var
price: double;
OldCurrency, NewCurrency: TCurrency;
begin
if GDropComponent.IsLine = biFalse then
begin
with Kalc_DM.CostRM_MemTable do
begin
Append;
FieldByName(fnName).AsString := GDropComponent.Name;
FieldByName(fnArticul).AsString := GDropComponent.ArticulProducer;
price := GetPriceForKalcFromDragCompon(GDropComponent);
FieldByName(fnPrice).AsFloat := Price;
FieldByName(fnKolvo).AsInteger := 1;
Post;
end;
// TcxGridTableView(Sender).DataController.Refresh;
ValCostFromGrid(vCRM, Kalc_DM.CostRM_MemTable);
end;
end;
procedure TF_Kalc.CostPKDBTableViewDragDrop(Sender, Source: TObject; X,
Y: Integer);
var
OstPer,resultCmp: integer;
price: double;
begin
if GDropComponent.ComponentType.SysName = ctsnPatchCord then
begin
resultCmp := Kalc_DM.CmpPerFromCostPk_MemTable(OstPer);
price := GetPriceForKalcFromDragCompon(GDropComponent);
case resultCmp of
1 : U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostPK_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer, Price, -1, OstPer, mpkCross);
2,3 : U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostPK_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer, Price, -1, OstPer, mpkRM);
else
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostPK_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer, Price, -1, 0, mpkCross);
end;
end;
TcxGridTableView(Sender).DataController.Refresh;
end;
procedure TF_Kalc.CostPP_GridDBTableViewDragDrop(Sender, Source: TObject;
X, Y: Integer);
var
Prop: PProperty;
i: integer;
price: double;
begin
if GDropComponent.ComponentType.SysName = ctsnPatchPanel then
begin
if Kalc_DM.CostPP_MemTable.RecordCount < 1 then
begin
price := GetPriceForKalcFromDragCompon(GDropComponent);
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostPP_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer, Price);
vCPP.Value := Price;
For i := 0 to GDropComponent.Properties.Count - 1 do
begin
Prop := GDropComponent.Properties.Items[i];
if prop.SysName = pnPORTCOUNT then
begin
vKolPortPP.Value := StrToInt(prop.Value);
break;
end;
end;
ValCostFromGrid(vCPP, Kalc_dm.CostPP_MemTable);
//TcxGridTableView(Sender).DataController.Refresh;
end;
end;
end;
procedure TF_Kalc.GT_CostOrgDragDrop(Sender, Source: TObject;
X, Y: Integer);
var
price: double;
begin
if GDropComponent.ComponentType.SysName = ctsnOrganizer then
begin
if Kalc_DM.CostOrg_MemTable.RecordCount < 1 then
begin
price := GetPriceForKalcFromDragCompon(GDropComponent);
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostOrg_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer, Price);
end;
//TcxGridTableView(Sender).DataController.Refresh;
ValCostFromGrid(vCOrg, Kalc_dm.CostOrg_MemTable);
end;
end;
procedure TF_Kalc.CostShelf_GridDBTableViewDragDrop(Sender,
Source: TObject; X, Y: Integer);
var
price: double;
begin
if GDropComponent.ComponentType.SysName = ctsnCupboard then
begin
price := GetPriceForKalcFromDragCompon(GDropComponent);
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CostShelf_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer, Price);
TcxGridTableView(Sender).DataController.Refresh;
end;
end;
procedure TF_Kalc.CableCanalGrid_TableView1DragDrop(Sender,
Source: TObject; X, Y: Integer);
var
per: integer;
i: integer;
CCConnector: PCableCanalConnector;
Compon: TSCSComponent;
price: double;
Function GotoCableConnectorInMT(Id_typeCCConector: integer): boolean;
var
i: integer;
begin
result := true;
Kalc_DM.ElemForCabcanal_MemTable.First;
case Id_typeCCConector of
contCork: begin
Kalc_DM.ElemForCabcanal_MemTable.MoveBy(4);
end;
contAnglePlane: begin
// Kalc_DM.ElemForCabcanal_MemTable.MoveBy(2)
end;
contAngleIn: begin
Kalc_DM.ElemForCabcanal_MemTable.MoveBy(1);
end;
contAngleOut: begin
Kalc_DM.ElemForCabcanal_MemTable.MoveBy(2);
end;
contConnector: begin
Kalc_DM.ElemForCabcanal_MemTable.MoveBy(3);
end;
else
begin
Result := False;
end;
end;
end;
begin
If GDropComponent.ComponentType.SysName = ctsnCableChannel then
begin
per := GetFreePercent(Kalc_DM.CableCanalMemTable.RecordCount);
// inc(FCountCC);
Kalc_DM.CableCanalMemTable.FieldByName(fnNpp);
price := GetPriceForKalcFromDragCompon(GDropComponent);
with Kalc_DM.CableCanalMemTable do
begin
Append;
// FieldByName(fnNpp).AsInteger := FCountCC;
FieldByName(fnName).AsString := GDropComponent.Name;
FieldByName(fnArticul).AsString := GDropComponent.ArticulProducer;
FieldByName(fnPrice).AsFloat := Price;
FieldByName(fnPercent).AsInteger := per;
Post;
end;
AddCCElements;
Compon := TSCSComponent.Create(GDropComponent.ActiveForm);
try
for i := 0 to GDropComponent.CableCanalConnectors.Count - 1 do
begin
CCConnector := GDropComponent.CableCanalConnectors[i];
if GotoCableConnectorInMT(CCConnector.ConnectorType) then
begin
Compon.LoadComponentByID(CCConnector.IDNBConnector);
With Kalc_DM.ElemForCabcanal_MemTable do
begin
Edit;
FieldByName(fnArticul).AsString := Compon.ArticulProducer;
price := GetPriceForKalcFromDragCompon(Compon);
FieldByName(fnPrice).AsFloat := price;
Post;
end;
end;
end;
finally
Compon.Free;
end;
if GetFreePercent(Kalc_DM.CableCanalMemTable.RecordCount)< 0 then
begin
StaticText4.Show;
end
else
begin
StaticText4.Hide;
end;
end;
end;
procedure TF_Kalc.AddCCElements;
var
z: integer;
FCountCC: integer;
begin
Kalc_DM.TypeOfElementCC_MemTable.First;
while not Kalc_DM.TypeOfElementCC_MemTable.Eof do
begin
FCountCC := Kalc_DM.CableCanalMemTable.FieldbyName(fnNpp).AsInteger;
z := Kalc_DM.TypeOfElementCC_MemTable.FieldByName('ID').AsInteger;
With Kalc_DM.ElemForCabcanal_MemTable do
begin
Append;
//inc(FCountECC);
// FieldByName('Id').AsInteger := FCountECC;
FieldByName('Npp_CC').AsInteger := FCountCC;
FieldByName('Id_Type').AsInteger := z;
FieldByName('Price').AsFloat := 0;
if z = 1 then
FieldByName('Rashod').AsInteger := 6;
if z = 2 then
FieldByName('Rashod').AsFloat := 6;
if z = 3 then
FieldByName('Rashod').AsFloat := 2.5;
if z = 4 then
FieldByName('Rashod').AsFloat := 6;
if z = 5 then
FieldByName('Rashod').AsFloat := 7;
post;
end;
Kalc_DM.TypeOfElementCC_MemTable.Next;
end;
end;
procedure TF_Kalc.EnableTableView(ATableView: TcxGridDBTableView; AEnabled: Boolean);
begin
if AEnabled then
begin
ATableView.Styles.Background := nil;
ATableView.Styles.Content := nil;
end
else
begin
ATableView.Styles.Background := cxBackDisabled;
ATableView.Styles.Content := cxBackDisabled;
end;
end;
procedure TF_Kalc.ElPointFix_GridTableViewDragDrop(Sender, Source: TObject;
X, Y: Integer);
var
prop: PProperty;
i: integer;
begin
if GDropComponent.ComponentType.SysName = ctsnCableChannelAccessory then
begin
begin
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.ElPointFix_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer, RoundX(GDropComponent.Price,2),-1, 0);
For i := 0 to GDropComponent.Properties.Count - 1 do
begin
Prop := GDropComponent.Properties.Items[i];
if prop.SysName = pnExpenseForMetr then
begin
vMetodOpenWir1_Rashod.Value := StrToFloatU(CorrectStrToFloat(prop.Value));
break;
end;
end;
//TcxGridTableView(Sender).DataController.Refresh;
end;
end;
end;
procedure TF_Kalc.CCForFloor_GridTableViewDragDrop(Sender, Source: TObject;
X, Y: Integer);
begin
if GDropComponent.ComponentType.SysName = ctsnCableChannel then
begin
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CCFloor_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer, RoundX(GDropComponent.Price,2),-1, 0);
end;
end;
procedure TF_Kalc.CCUnderCeil_GridTableViewDragDrop(Sender,
Source: TObject; X, Y: Integer);
begin
if GDropComponent.ComponentType.SysName = ctsnCableChannel then
begin
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.CCUnderCeil_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer, RoundX(GDropComponent.Price,2),-1, 0);
end;
end;
procedure TF_Kalc.AllComponent_GridDBTableView1FocusedItemChanged(
Sender: TcxCustomGridTableView; APrevFocusedItem,
AFocusedItem: TcxCustomGridTableItem);
begin
//
end;
procedure TF_Kalc.AllComponent_Grid_pricePropertiesValidate(
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
var
price: Double;
begin
price := DisplayValue;
if price < 0 then
begin
Error := true;
end
else
with Kalc_DM.AllComponent_MemTable do
begin
Edit;
if FieldByName('TypePoz').AsString = idTypePozWorks then
FieldByName(fnCost).AsFloat := FieldByName(fnKolvo).AsFloat * Price * getKoefForWorks
else
FieldByName(fnCost).AsFloat := FieldByName(fnKolvo).AsFloat * Price;
FieldByName(fnPrice).AsFloat := price;
Post;
end;
end;
procedure TF_Kalc.AllComponent_Grid_KolvoPropertiesValidate(
Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
var Error: Boolean);
var
kolvo: integer;
begin
Kolvo := DisplayValue;
if kolvo < 0 then
begin
Error := true;
end
else
with Kalc_DM.AllComponent_MemTable do
begin
Edit;
if FieldByName('TypePoz').AsString = idTypePozWorks then
FieldByName(fnCost).AsFloat := FieldByName(fnPrice).AsFloat * Kolvo * getKoefForWorks
else
FieldByName(fnCost).AsFloat := FieldByName(fnPrice).AsFloat * Kolvo;
FieldByName(fnKolvo).AsInteger := Kolvo;
Post;
end;
end;
procedure TF_Kalc.Cable_Grid_DBTableViewDragDrop(Sender, Source: TObject;
X, Y: Integer);
var
price: double;
begin
if GDropComponent.ComponentType.SysName = ctsnCable then
begin
price := GetPriceForKalcFromDragCompon(GDropComponent);
U_Kalc_DM.AddRecordInMemTable(Kalc_DM.Cable_MemTable, GDropComponent.Name, GDropComponent.ArticulProducer, Price,-1, 100, 0);
if GetFreePercentForCable >= 0 then
StaticText5.Show
else
StaticText5.Hide;
end;
end;
destructor TF_Kalc.Destroy;
begin
Kalc_DM.Free;
inherited;
end;
procedure TF_Kalc.ClearProject_BtnClick(Sender: TObject);
begin
ClearProject;
//ïðîâåðÿåì è âûíîñèì ïðåäóïðåæäåíèÿ
StaticText5.Hide;
StaticText4.Hide;
StaticText1.Hide;
StaticText2.Hide;
end;
procedure TF_Kalc.ClearProject;
var
Component: TComponent;
i, j, Count: integer;
FlyTreeViewPro: TFlyTreeViewPro;
Node: TFlyNode;
begin
for i := 0 to ComponentCount - 1 do
begin
Component := Components[i];
if (Component is TcxCustomEdit) then
begin
TcxCustomEdit(Component).EditValue := 0;
end;
if (Component is TcxGridDBTableView) then
begin
if (Component.Name <> 'PriceWorks_TableView' ) then
begin
TcxGridDBTableView(Component).DataController.DataSource.DataSet.Active := False;
TcxGridDBTableView(Component).DataController.DataSource.DataSet.Active := True;
end
else
begin
btClearPriceWorksClick(Self)
end;
end;
if (Component is TRzEdit) then
begin
TRzEdit(Component).EditText := '';
end;
if (Component is TRzSpinEdit) then
begin
TRzSpinEdit(Component).Value := 0;
end;
if (Component is TRzCheckBox) then
begin
TRzCheckBox(Component).Checked := False;
end;
if (Component is TcxComboBox) then
begin
TcxComboBox(Component).ItemIndex := 0;
end;
if (Component is TComboBox) then
begin
TComboBox(Component).ItemIndex := 0;
end;
if (Component is TFlyTreeViewPro) then
begin
FlyTreeViewPro := TFlyTreeViewPro(Component);
Count := FlyTreeViewPro.Items.Count -1;
For j := Count downto 1 do
begin
Node := FlyTreeViewPro.Items.GetLastNode;
FlyTreeViewPro.Items.Delete(Node);
end;
FlyTreeViewPro.Items[0].Cells[1] := '1';
end;
end;
Kalc_DM.AddShelfForFloor(cKalc_Msg85);
end;
procedure TF_Kalc.grComponentTypesItems0Click(Sender: TObject);
begin
pcComponentTypes.ActivePage.TabVisible := false;
pcComponentTypes.ActivePage := TRzTabSheet(TRzGroupItem(Sender).Tag);
pcComponentTypes.ActivePage.TabVisible := true;
end;
procedure TF_Kalc.grChannelComponTypesItems0Click(Sender: TObject);
begin
pcChannelComponTypes.ActivePage.TabVisible := false;
pcChannelComponTypes.ActivePage := TRzTabSheet(TRzGroupItem(Sender).Tag);
pcChannelComponTypes.ActivePage.TabVisible := true;
end;
procedure TF_Kalc.FormCreate(Sender: TObject);
//var
// x : T_KalcDocument;
procedure AddItemsToGroup(AGroup: TRzGroup; ASrcPageControl: TRzPageControl; AOnClick: TNotifyEvent);
var
i: Integer;
TabSheet: TRzTabSheet;
GroupItem: TRzGroupItem;
begin
AGroup.Items.Clear;
for i := 0 to ASrcPageControl.PageCount - 1 do
begin
TabSheet := ASrcPageControl.Pages[i];
TabSheet.TabVisible := false;
GroupItem := AGroup.Items.Add;
GroupItem.Caption := TabSheet.Caption;
GroupItem.OnClick := AOnClick;
GroupItem.Tag := Integer(TabSheet);
end;
// if AGroup.Items.Count > 0 then
// pcComponentTypes.ActivePageIndex := 0;
// AGroup.Items[0].Click;
end;
begin
try
Kalc_DM :=TKalc_DM.Create(Self);
//#From Oleg#
if Main_PageControl.PageCount > 0 then
Main_PageControl.ActivePage := Main_PageControl.Pages[0];
AddItemsToGroup(grComponentTypes, pcComponentTypes, grComponentTypesItems0Click);
//AddItemsToGroup(grChannelComponTypes, pcChannelComponTypes, grChannelComponTypesItems0Click);
gbChannelComponTypes.Visible := false;
except
on E: Exception do AddExceptionToLogEx('TF_Kalc.Create', E.Message);
end;
end;
procedure TF_Kalc.Execute;
var
x : T_KalcDocument;
StrList: TStringList;
i, razn: integer;
node : tflyNode;
procedure SetDisplayFormat;
function cutFormatToInt(AStr: string): string;
//var len:integer;
begin
Result := AStr;
delete(Result,3,4);
end;
begin
{$IF Defined(SCS_PE) or Defined(SCS_SPA)}
Node := vKolRMForFloor.Items.GetFirstNode;
node.Cells[0] := strCalcCapt0;
{$IFEND}
TcxCurrencyEditProperties(Price_Column.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(CostPKColumn_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(CostPP_GridColumn_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(CostOrg_GridColumn_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(CostShelf_GridColumn_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(DopEq_Grid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(PriceWorks_Grid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(Cable_Grid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(CableCanalGrid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(CCForFloor_Grid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(CCUnderCeil_Grid_price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(ElPointFix_Grid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(AllComponent_Grid_price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(ShelfForFloor_GridColumn_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
TcxCurrencyEditProperties(Cable_Grid_Percent.Properties).DisplayFormat := cutFormatToInt(GetDisplayFormatForFloat);
TcxCurrencyEditProperties(CableCanalGrid_Percent.Properties).DisplayFormat := cutFormatToInt(GetDisplayFormatForFloat);
TcxCurrencyEditProperties(rashod.Properties).DisplayFormat := cutFormatToInt(GetDisplayFormatForFloat);
TcxCurrencyEditProperties(CostRMGrid_Kolvo.Properties).DisplayFormat := cutFormatToInt(GetDisplayFormatForFloat);
TcxCurrencyEditProperties(CostPK_Persent.Properties).DisplayFormat := cutFormatToInt(GetDisplayFormatForFloat);
TcxCurrencyEditProperties(DopEq_Kolvo.Properties).DisplayFormat := cutFormatToInt(GetDisplayFormatForFloat);
TcxCurrencyEditProperties(CCUnderCeil_Grid_Percent.Properties).DisplayFormat := cutFormatToInt(GetDisplayFormatForFloat);
TcxCurrencyEditProperties(ElPointFix_Grid_Percent.Properties).DisplayFormat := cutFormatToInt(GetDisplayFormatForFloat);
TcxCurrencyEditProperties(CCForFloor_Grid_Percent.Properties).DisplayFormat := cutFormatToInt(GetDisplayFormatForFloat);
TcxCurrencyEditProperties(AllComponent_Grid_Kolvo.Properties).DisplayFormat := cutFormatToInt(GetDisplayFormatForFloat);
// TcxCurrencyEditProperties(Cable_Grid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
// TcxCurrencyEditProperties(Cable_Grid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
// TcxCurrencyEditProperties(Cable_Grid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
// TcxCurrencyEditProperties(Cable_Grid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
// TcxCurrencyEditProperties(Cable_Grid_Price.Properties).DisplayFormat := GetDisplayFormatForFloat;
end;
begin
SetDisplayFormat;
{$IF Defined(NORMSCS_PE) or Defined(SCS_SPA)}
TabSheet3.TabVisible := false;
{$IFEND}
if Self.Visible then
//Tolik 21/12/2019 --
// SetForegroundWindow(Self.Handle)
begin
SetForegroundWindow(Self.Handle);
ShowWindow(Handle, SW_SHOWNORMAL); // ïîñëå ïîêàçà îò÷åòà -- ñâîðà÷èâàåòñÿ, ïðè ïîâòîðíîì âûçîâå --
// ïîêàçûâàåòñÿ óæå ñâåðíóòûì, âîò ÷òîáû èçáåæàòü òàêîé ôèãíè ...
// íóæíî â ëþáîì ñëó÷àå ïîêàçàòü â íîðìàëüíîì âèäå
end
//
else
begin
Self.FormStyle := fsStayOnTop;
try
Screen.Cursor := crHourGlass;
try
FixLabeles;//óñòàíîâêà ïîäïèñåé
//óñòàíîâêà íàçâàíèé ñòîëáöîà â vKolRMForFloor
vKolRMForFloor.Columns[0].Caption := cKalc_Msg150;
vKolRMForFloor.Columns[1].Caption := cKalc_Msg151;
FixCableWey_ComboBox.ItemIndex := 2;
TypeWeyCC_PageControl.ActivePage := CableInCC_Sheet;
Curr_ComboBox.Properties.Items.Clear;
StrList := GetCurrenciesNameBriefListFromNB;
for i := 0 to StrList.Count - 1 do
begin
Curr_ComboBox.Properties.Items.AddObject(StrList.Strings[i], StrList.Objects[i]);
end;
Curr_ComboBox.ItemIndex := 0;
ServFloor_ComboBox.EditValue := 0;
ServerFloor := 0;
//FCountCC := 0;
// FCountECC := 0;
// actAddCableCanalExecute(Self);
// actAddCableExecute(Self);
try
if FileExists(TempFile) then
begin
x := T_KalcDocument.Create(Self, TempFile);
x.Destroy;
end
else
begin
ClearProject;
end;
except
MessageModal(cKalc_Msg86,cKalc_Msg15, MB_ICONWARNING );
ClearProject;
end;
ECostRMGrid_CheckClick(ECostRMGrid_Check);
ECostPKGridCheckClick(ECostPKGridCheck);
ECostPPGrid_CheckClick(ECostPPGrid_Check);
ECostOrgGrid_CheckClick(ECostOrgGrid_Check);
ECostShelfGridCheckClick(ECostShelfGridCheck);
EDopEqGrid_CheckClick(EDopEqGrid_Check);
// if Main_PageControl.PageCount > 0 then
// Main_PageControl.ActivePage := Main_PageControl.Pages[0];
//ïðîâåðÿåì è âûíîñèì ïðåäóïðåæäåíèÿ
pcComponentTypes.ActivePage.TabVisible := True;
if GetFreePercentForCable > 0 then
StaticText5.Show
else
StaticText5.Hide;
if GetFreePercent(Kalc_DM.CableCanalMemTable.RecordCount)< 0 then
begin
StaticText4.Show;
end
else
begin
StaticText4.Hide;
end;
razn := CmpFloorsWithKolRM ;
if razn <> 0 then
begin
StaticText1.Show;
StaticText2.Caption := cKalc_Msg2 + IntToStr(razn);
StaticText2.Show;
end
else
begin
StaticText1.Hide;
StaticText2.Hide;
end;
finally
if Main_PageControl.PageCount > 0 then
Main_PageControl.ActivePageIndex := 0;
Screen.Cursor := crDefault;
end;
except
end;
Self.Show;
end;
end;
procedure TF_Kalc.CostRMGridTableViewEditValueChanged(
Sender: TcxCustomGridTableView; AItem: TcxCustomGridTableItem);
begin
ValCostFromGrid(vCRM, Kalc_DM.CostRM_MemTable);
end;
procedure TF_Kalc.Name_ColumnPropertiesEditValueChanged(Sender: TObject);
var
MemTable: TDataSet;
Str: string;
DBColumn: TcxGridDBColumn;
GridTableView: TcxGridDBTableView;
begin
Str := VarToStr(TcxCustomEdit(Sender).EditValue);
GridTableView := TcxGridDBTableView(TCxGrid(TcxGridSite(TCxTextEdit(Sender).parent).Parent).ActiveView);
MemTable := GridTableView.DataController.DataSet;
dbColumn := TcxGridDBColumn(GridTableView.DataController.Controller.EditingItem);
// GridTableView.DataController.FocusedRowIndex;
// Str := VarToStr(GridTableView.DataController.Controller.EditingController.Edit.EditValue);
MemTable.FieldByName(DBColumn.DataBinding.FieldName).AsString := STr;
GridTableView.DataController.Post;
end;
procedure TF_Kalc.DopEq_GridExit(Sender: TObject);
begin
F_Kalc.DopEq_TableView.DataController.Post;
end;
function TF_Kalc.GetPriceForKalcFromDragCompon(ACompon: TSCSComponent): double;
var
price: double;
res1, res2: PObjectCurrencyRel;
OldCurrency, NewCurrency: TCurrency;
Index : integer;
begin
try
Result := RoundX(ACompon.Price, 2);
index := Curr_ComboBox.ItemIndex;
ZeroMemory(@OldCurrency, SizeOf(TCurrency));
ZeroMemory(@NewCurrency, SizeOf(TCurrency));
res1 := F_NormBase.DM.GetComponCurrencyByMainFld(ACompon.ID, ctMain);
if Assigned(res1) then
begin
OldCurrency := res1^.Data;
end;
Res2 := F_NormBase.DM.GetComponCurrencyByCurrencyID(ACompon.id, Integer(Curr_ComboBox.Properties.Items.Objects[Index]) );
if Assigned(Res2) then
begin
NewCurrency := Res2^.Data;
end;
if Assigned(res1) and Assigned(Res2) then
Result := GetPriceAfterChangeCurrency(result, OldCurrency, NewCurrency, 2);
finally
FreeMem(res1);
FreeMem(res2);
end
end;
procedure TF_Kalc.btClearPriceWorksClick(Sender: TObject);
begin
with Kalc_DM.PriceWorks_MemTable do
begin
// if RecordCount = 0 then
Kalc_DM.InitPriceWorks_MemTable;
//else
// while not Eof do
// begin
// First;
// FieldByName('Price').AsFloat := 0;
// Post;
// Next;
// end;
end;
end;
procedure TF_Kalc.AllComponent_Grid_TypePozGetDisplayText(
Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord;
var AText: String);
begin
if AText = idTypePozMaterial then
AText := stTypePozMaterial
else
if AText = idTypePozWorks then
AText := stTypePozWorks;
end;
procedure TF_Kalc.PutToReportWork(AIdWorks: integer; AKolWorks: integer; AKoef: double = 1);
var
dNum: integer;
NameWorks: string;
CostWorks, PriceWorks: double;
KOEF: double;
begin
{$IF NOT Defined(NORMSCS_PE) and NOT Defined(SCS_SPA)}
PriceWorks := 0;
with Kalc_DM.PriceWorks_MemTable do
begin
if Active then
begin
KOEF := FieldByName('Price').AsFloat;
dNum := AIdWorks - RecNo;
if dNum <> 0 then
MoveBy(dNum);
NameWorks := FieldByName('Name').AsString;
PriceWorks := FieldByName('Price').AsFloat;
end;
end;
if PriceWorks > 0 then
begin
CostWorks := PriceWorks * AKolWorks * Akoef;
AddRecordInReport(NameWorks,'', AKolWorks, PriceWorks, CostWorks, idTypePozWorks);
end;
{$IFEND}
end;
function TF_Kalc.GetKoefForWorks: double;
var
KOEF: double;
begin
try
Koef := 0;
with Kalc_DM.PriceWorks_MemTable do
begin
if Active then
begin
Last;
KOEF := roundx(FieldByName('Price').AsFloat,3);
end;
end;
if KOEF = 0 then
Koef := 1;
Result := KOEF;
except
on E: Exception do AddExceptionToLog('TF_Kalc.GetKoefForWorks: '+E.Message);
end;
end;
procedure TF_Kalc.FixLabeles;
begin
Label5.Caption := strCalcCapt1 + GetNameUOM(F_NormBase.FUOM, true, true);
Label6.Caption := strCalcCapt2 + GetNameUOM(F_NormBase.FUOM, true, true);
Label11.Caption := strCalcCapt3 + GetNameUOM(F_NormBase.FUOM, true, true);
Label7.Caption := strCalcCapt4 + GetNameUOM2(F_NormBase.FUOM);
Label9.Caption := strCalcCapt5 + GetNameUOM2(F_NormBase.FUOM);
Label10.Caption := strCalcCapt6 + GetNameUOM2(F_NormBase.FUOM);
Label40.Caption := strCalcCapt7 + GetNameUOM(F_NormBase.FUOM, true, true);
Label41.Caption := strCalcCapt8 + GetNameUOM(F_NormBase.FUOM, true, true);
Label13.Caption := strCalcCapt9 + GetNameUOM2(F_NormBase.FUOM);
Label31.Caption := strCalcCapt10 + GetNameUOM(F_NormBase.FUOM, true, true);
Label21.Caption := strCalcCapt11 + GetNameUOM(F_NormBase.FUOM, true, true);
Label17.Caption := strCalcCapt12 + GetNameUOM(F_NormBase.FUOM, true, true);
Label72.Caption := strCalcCapt13 + GetNameUOM(F_NormBase.FUOM, true, true);
// Label52.Caption := GetNameUOM(F_NormBase.FUOM, true, false);
Label12.Caption := strCalcCapt18 + GetNameUOM(F_NormBase.FUOM, true, true);
Label35.Caption := strCalcCapt15 + GetNameUOM(F_NormBase.FUOM, true, true);
Label45.Caption := strCalcCapt14 + GetNameUOM(F_NormBase.FUOM, true, false);
Label33.Caption := strCalcCapt16 + GetNameUOM(F_NormBase.FUOM, true, true);
Label24.Caption := strCalcCapt17 + GetNameUOM(F_NormBase.FUOM, true, true);
Label59.Caption := strCalcCapt19 + GetNameUOM(F_NormBase.FUOM, true, true);
Label38.Caption := GetNameUOM(F_NormBase.FUOM, true, false);
Label70.Caption := strCalcCapt23 + GetNameUOM(F_NormBase.FUOM, true, false)+ strCalcCapt24;
///òàáëè÷êè
rashod.Caption := strCalcCapt20 + GetNameUOM(F_NormBase.FUOM, true, false)+strCalcCapt21;
CableCanalGrid_Price.Caption := strCalcCapt22 + GetNameUOM(F_NormBase.FUOM, true, false);
Cable_Grid_Price.Caption := strCalcCapt22 + GetNameUOM(F_NormBase.FUOM, true, false);
end;
end.