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

473 lines
14 KiB
ObjectPascal
Raw Permalink Blame History

unit U_Kalc_DM;
interface
uses
SysUtils, Classes, DB, kbmMemTable, U_BaseConstants,
U_BaseCommon, siComp;
type
TKalc_DM = class(TDataModule)
Cable_MemTable: TkbmMemTable;
ElemForCabcanal_MemTable: TkbmMemTable;
Cable_Source: TDataSource;
ElemForCabcanal_Source: TDataSource;
CableCanalMemTable: TkbmMemTable;
TypeOfElementCC_MemTable: TkbmMemTable;
TypeUseCable_MemTable: TkbmMemTable;
TypeUseCable_Source: TDataSource;
TypeOfElementCC_Source: TDataSource;
CableCanal_Source: TDataSource;
AllComponent_MemTable: TkbmMemTable;
AllComponent_DataSource: TDataSource;
CostRM_MemTable: TkbmMemTable;
CostRM_Source: TDataSource;
CostPK_MemTable: TkbmMemTable;
CostPK_Source: TDataSource;
CostPP__Source: TDataSource;
CostPP_MemTable: TkbmMemTable;
CostOrg_Source: TDataSource;
CostOrg_MemTable: TkbmMemTable;
CostShelf_Source: TDataSource;
CostShelf_MemTable: TkbmMemTable;
ShelfForFloor_Source: TDataSource;
ShelfForFloor_MemTable: TkbmMemTable;
DopEq_MemTable: TkbmMemTable;
DopEq_DataSource: TDataSource;
MissingPK_MemTable: TkbmMemTable;
MissingPK_Source: TDataSource;
CCFloor_MemTable: TkbmMemTable;
CCFloor_Source: TDataSource;
CCUnderCeil_MemTable: TkbmMemTable;
CCUnderCeil_Source: TDataSource;
ElPointFix_MemTable: TkbmMemTable;
ElPointFix_Source: TDataSource;
HaracterProject_MemTable: TkbmMemTable;
HaracterProject_Source: TDataSource;
PriceWorks_MemTable: TkbmMemTable;
PriceWorks_DataSource: TDataSource;
siLang1: TsiLang;
procedure CostShelf_MemTableAfterPost(DataSet: TDataSet);
private
{ Private declarations }
Procedure InitTypeOfElementCC_MemTable;
Procedure InitTypeUseCable_MemTable;
Procedure InitMissingPK_MemTable;
public
{ Public declarations }
Constructor Create(AOwner: TComponent);
procedure AddShelfForFloor(AFloor: string);
function CmpPerFromCostPk_MemTable(var AOstPer: integer):integer;
function CmpPerFromCCFLoor_MemTable: integer;
function CmpPerFromCCUnderCeil_MemTable: integer;
function CmpPerFromElPointFix_MemTable: integer;
procedure EnableMasterDetail;
procedure DisebleMasterDetail;
procedure InitPriceWorks_MemTable;
end;
const //<2F><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
tcuRaspred = 0;
tcuMagistral = 1;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
mpkRM = 1;
mpkCross = 2;
Procedure AddRecordInMemTable(ATable: TkbmMemTable; AName : string = ''; AArticul: string = '';
APrice: double = 0; AKolvo: integer = -1; APercent: integer = -1; AId_Missing: integer = -1);
implementation
uses U_Kalc, u_Main;
{$R *.dfm}
{ TKalc_DM }
Procedure TKalc_DM.InitMissingPK_MemTable;
const
MasOfTypes: array [1..2] of string = (
cKalc_DM_Msg1,
cKalc_DM_Msg2);
var
i: integer;
begin
with MissingPK_MemTable do
begin
FieldDefs.Add('Id', ftInteger);
FieldDefs.Add('Name', ftString, 255);
Active := true;
for i := 1 to 2 do
begin
Append;
FieldByName('ID').AsInteger := i;
FieldByName('Name').AsString := MasOfTypes[i];
Post;
end;
end
end;
//****************************************************
Procedure TKalc_DM.InitTypeOfElementCC_MemTable;
const
MasOfTypes: array [1..5] of string = (
cKalc_DM_Msg3,
cKalc_DM_Msg4,
cKalc_DM_Msg5,
cKalc_DM_Msg6,
cKalc_DM_Msg7);
var
i: integer;
begin
with TypeOfElementCC_MemTable do
begin
FieldDefs.Add('Id',ftInteger);
FieldDefs.Add('Name',ftString, 255);
Active := true;
for i := 1 to 5 do
begin
Append;
FieldByName('ID').AsInteger := i;
FieldByName('Name').AsString := MasOfTypes[i];
Post;
end;
end
end;
//*****************************************************************
Procedure TKalc_DM.InitTypeUseCable_MemTable;
const
MasOfTypes: array [1..2] of string = (
cKalc_DM_Msg8,
cKalc_DM_Msg9);
var
i: integer;
begin
with TypeUseCable_MemTable do
begin
FieldDefs.Add('Id',ftAutoInc);
FieldDefs.Add('TypeUse',ftString, 255);
Active := true;
for i := 1 to 2 do
begin
Append;
FieldByName('TypeUse').AsString := MasOfTypes[i];
Post;
end;
TypeUseCable_Source.Enabled := True;
end
end;
constructor TKalc_DM.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
CostRM_MemTable.FieldDefs.Add('Id',ftAutoInc);
CostRM_MemTable.FieldDefs.Add('Name',ftString, 255);
CostRM_MemTable.FieldDefs.Add('Articul',ftString, 50);
CostRM_MemTable.FieldDefs.Add('Kolvo',ftInteger);
CostRM_MemTable.FieldDefs.Add('Price',ftFloat);
CostRM_MemTable.Active := true;
InitMissingPK_MemTable;
CostPK_MemTable.FieldDefs.Add('Id',ftAutoInc);
CostPK_MemTable.FieldDefs.Add('Name',ftString, 255);
CostPK_MemTable.FieldDefs.Add('Articul',ftString, 50);
CostPK_MemTable.FieldDefs.Add('Price',ftFloat);
CostPK_MemTable.FieldDefs.Add('Id_Missing',ftInteger);
CostPK_MemTable.FieldDefs.Add('Percent',ftFloat);
CostPK_MemTable.Active := true;
CostPP_MemTable.FieldDefs.Add('Id',ftAutoInc);
CostPP_MemTable.FieldDefs.Add('Name',ftString, 255);
CostPP_MemTable.FieldDefs.Add('Articul',ftString, 50);
CostPP_MemTable.FieldDefs.Add('Price',ftFloat);
CostPP_MemTable.Active := true;
CostOrg_MemTable.FieldDefs.Add('Id',ftAutoInc);
CostOrg_MemTable.FieldDefs.Add('Name',ftString, 255);
CostOrg_MemTable.FieldDefs.Add('Articul',ftString, 50);
CostOrg_MemTable.FieldDefs.Add('Price',ftFloat);
CostOrg_MemTable.Active := true;
CostShelf_MemTable.FieldDefs.Add('Id',ftAutoInc);
CostShelf_MemTable.FieldDefs.Add('Name',ftString, 255);
CostShelf_MemTable.FieldDefs.Add('Articul',ftString, 50);
CostShelf_MemTable.FieldDefs.Add('Price',ftFloat);
CostShelf_MemTable.Active := true;
ShelfForFloor_MemTable.FieldDefs.Add('Id',ftAutoInc);
ShelfForFloor_MemTable.FieldDefs.Add('Floor',ftString, 20);
ShelfForFloor_MemTable.FieldDefs.Add('Id_Shelf',ftInteger);
ShelfForFloor_MemTable.FieldDefs.Add('Price',ftFloat);
ShelfForFloor_MemTable.Active := true;
AddShelfForFloor('1 <20><><EFBFBD><EFBFBD>');
DopEq_MemTable.FieldDefs.Add('Id',ftAutoInc);
DopEq_MemTable.FieldDefs.Add('Name',ftString, 255);
DopEq_MemTable.FieldDefs.Add('Articul',ftString, 50);
DopEq_MemTable.FieldDefs.Add('Kolvo',ftInteger);
DopEq_MemTable.FieldDefs.Add('Price',ftFloat);
DopEq_MemTable.Active := true;
CableCanalMemtable.FieldDefs.Add('Npp',ftAutoInc);
CableCanalMemtable.FieldDefs.Add('Name',ftString, 255);
CableCanalMemTable.FieldDefs.Add('Articul',ftString, 50);
CableCanalMemtable.FieldDefs.Add('Percent',ftInteger);
//CableCanalMemtable.Fields[CableCanalMemTable.FieldDefs.Count-1].OnChange := CableCanalMemTableChange;
//TIntegerField(CableCanalMemTable.FieldDefs.Items[CableCanalMemTable.FieldDefs.Count-1].FieldClass).OnChange := CableCanalMemTableChange;
CableCanalMemtable.FieldDefs.Add('Price',ftFloat);
CableCanalMemtable.Active := true;
CCFLoor_MemTable.FieldDefs.Add('Id',ftAutoInc);
CCFLoor_MemTable.FieldDefs.Add('Name',ftString, 255);
CCFLoor_MemTable.FieldDefs.Add('Articul',ftString, 50);
CCFLoor_MemTable.FieldDefs.Add('Price',ftFloat);
CCFLoor_MemTable.FieldDefs.Add('Percent',ftFloat);
CCFLoor_MemTable.Active := true;
CCUnderCeil_MemTable.FieldDefs.Add('Id',ftAutoInc);
CCUnderCeil_MemTable.FieldDefs.Add('Name',ftString, 255);
CCUnderCeil_MemTable.FieldDefs.Add('Articul',ftString, 50);
CCUnderCeil_MemTable.FieldDefs.Add('Price',ftFloat);
CCUnderCeil_MemTable.FieldDefs.Add('Percent',ftFloat);
CCUnderCeil_MemTable.Active := true;
ElPointFix_MemTable.FieldDefs.Add('Id',ftAutoInc);
ElPointFix_MemTable.FieldDefs.Add('Name',ftString, 255);
ElPointFix_MemTable.FieldDefs.Add('Articul',ftString, 50);
ElPointFix_MemTable.FieldDefs.Add('Price',ftFloat);
ElPointFix_MemTable.FieldDefs.Add('Percent',ftFloat);
ElPointFix_MemTable.Active := true;
InitTypeOfElementCC_MemTable;
ElemForCabcanal_MemTable.FieldDefs.Add('ID', ftAutoInc);
ElemForCabcanal_MemTable.FieldDefs.Add('Npp',ftInteger);
ElemForCabcanal_MemTable.FieldDefs.Add('Npp_CC',ftInteger);
ElemForCabcanal_MemTable.FieldDefs.Add('Articul',ftString, 50);
ElemForCabcanal_MemTable.FieldDefs.Add('ID_Type',ftString, 255);
ElemForCabcanal_MemTable.FieldDefs.Add('Price',ftFloat);
ElemForCabcanal_MemTable.FieldDefs.Add('Rashod',ftFloat);
ElemForCabcanal_MemTable.MasterSource := CableCanal_Source;
ElemForCabcanal_MemTable.MasterFields := 'Npp';
ElemForCabcanal_MemTable.DetailFields := 'Npp_CC';
ElemForCabcanal_MemTable.Active := true;
InitTypeUseCable_MemTable;
Cable_MemTable.FieldDefs.Add('Id',ftAutoInc);
Cable_MemTable.FieldDefs.Add('Name',ftString, 255);
Cable_MemTable.FieldDefs.Add('Articul',ftString, 50);
Cable_MemTable.FieldDefs.Add('Price',ftFloat);
Cable_MemTable.FieldDefs.Add('Percent',ftInteger);
Cable_MemTable.FieldDefs.Add('Id_Missing',ftInteger);
Cable_MemTable.Active := true;
AllComponent_MemTable.FieldDefs.Add('ID', ftAutoInc);
AllComponent_MemTable.FieldDefs.Add('Name',ftString, 255);
AllComponent_MemTable.FieldDefs.Add('Articul',ftString, 50);
AllComponent_MemTable.FieldDefs.Add('Kolvo',ftInteger);
AllComponent_MemTable.FieldDefs.Add('Price',ftFloat);
AllComponent_MemTable.FieldDefs.Add('Cost',ftFloat);
AllComponent_MemTable.FieldDefs.Add('TypePoz',ftInteger);
AllComponent_MemTable.Active := True;
HaracterProject_MemTable.FieldDefs.Add('ID', ftAutoInc);
HaracterProject_MemTable.FieldDefs.Add('Name',ftString, 100);
HaracterProject_MemTable.FieldDefs.Add('Znach',ftString, 500);
HaracterProject_MemTable.Active := True;
PriceWorks_MemTable.FieldDefs.Add('Id',ftAutoInc);
PriceWorks_MemTable.FieldDefs.Add('Name',ftString, 255);
PriceWorks_MemTable.FieldDefs.Add('Price',ftFloat);
PriceWorks_MemTable.Active := true;
InitPriceWorks_MemTable;
end;
Procedure AddRecordInMemTable(ATable: TkbmMemTable; AName : string = ''; AArticul: string = '';
APrice: double = 0; AKolvo: integer = -1; APercent: integer = -1; AId_Missing: integer = -1);
begin
with ATable do
begin
Append;
FieldByName('Name').AsString := AName;
FieldByName('Articul').AsString := AArticul;
FieldByName('Price').AsFloat := APrice;
if AKolvo > -1 then
FieldByName('Kolvo').AsInteger := AKolvo;
if APercent > -1 then
FieldByName('Percent').AsInteger := APercent;
if AId_Missing > -1 then
FieldByName('id_Missing').AsInteger := AId_Missing;
Post;
end;
end;
procedure TKalc_DM.AddShelfForFloor(AFloor: string);
begin
with ShelfForFloor_MemTable do
begin
Append;
FieldByName('Floor').AsString := AFloor;
FieldByName('Id_Shelf').AsString :='';
Post;
end;
end;
function TKalc_DM.CmpPerFromCostPk_MemTable(var AOstPer: integer): integer;
var
i, Per1, Per2: integer;
begin
per1 := 100;
per2 := 100;
Result := -1;
// RecNo := CableCanalMemTable.RecNo;
CostPK_MemTable.First;
for i := 0 to CostPK_MemTable.RecordCount - 1 do
begin
if CostPK_MemTable.FieldByName('id_Missing').AsInteger = mpkRM then
begin
Per1 := Per1 - CostPK_MemTable.FieldByName('Percent').AsInteger;
end
else
Per2 := Per2 - CostPK_MemTable.FieldByName('Percent').AsInteger;
CostPK_MemTable.Next;
end;
AOstPer := 0;
if (per1 <= 0) and (Per2 > 0) then
begin
Result := 1;
AOstPer := Per2;
end
else
if (per1 > 0) and (Per2 <= 0) then
begin
Result := 2;
AOstPer := Per1;
end
else
if (per1 <= 0) and (Per2 <= 0) then
begin
Result := 0;
end
else
begin
Result := 3;
AOstPer := Per1;
end;
end;
function TKalc_DM.CmpPerFromCCFLoor_MemTable: integer;
begin
Result := 100;
with CCFloor_MemTable do
begin
First;
while Not Eof do
begin
Result := Result - FieldByName('Percent').AsInteger;
Next;
end;
if Result < 0 then
Result := 0;
end;
end;
function TKalc_DM.CmpPerFromCCUnderCeil_MemTable: integer;
begin
Result := 100;
with CCUnderCeil_MemTable do
begin
First;
while Not Eof do
begin
Result := Result - FieldByName('Percent').AsInteger;
Next;
end;
if Result < 0 then
Result := 0;
end;
end;
function TKalc_DM.CmpPerFromElPointFix_MemTable: integer;
begin
Result := 100;
with ElPointFix_MemTable do
begin
First;
while Not Eof do
begin
Result := Result - FieldByName('Percent').AsInteger;
Next;
end;
if Result < 0 then
Result := 0;
end;
end;
procedure TKalc_DM.DisebleMasterDetail;
begin
ElemForCabcanal_MemTable.MasterSource := Nil;
end;
procedure TKalc_DM.EnableMasterDetail;
begin
ElemForCabcanal_MemTable.MasterSource := CableCanal_Source;
end;
procedure TKalc_DM.CostShelf_MemTableAfterPost(DataSet: TDataSet);
begin
//
end;
procedure TKalc_DM.InitPriceWorks_MemTable;
const
MasNamesOfWorks: array [1..12] of string = (
cKalc_DM_Msg10 ,
cKalc_DM_Msg11,
cKalc_DM_Msg12,
cKalc_DM_Msg13,
cKalc_DM_Msg14,
cKalc_DM_Msg15,
cKalc_DM_Msg16,
cKalc_DM_Msg17,
cKalc_DM_Msg18,
cKalc_DM_Msg19,
cKalc_DM_Msg20,
cKalc_DM_Msg21);
var
i: integer;
begin
with PriceWorks_MemTable do
begin
Active := false;
Active := true;
for i := 1 to 12 do
begin
Append;
FieldByName('ID').AsInteger := i;
// if i > 1 then
FieldByName('Name').AsString := MasNamesOfWorks[i];
// else
// FieldByName('Name').AsString := MasNamesOfWorks[i]
// + strCalcCapt22 + GetNameUOM(F_NormBase.FUOM, true, false) + cKalc_DM_Msg22;
FieldByName('Price').AsFloat := 0;
Post;
end;
end
end;
end.