mirror of
http://gitlab.expertsoft.com.ua/git/expertcad
synced 2026-01-11 22:45:39 +02:00
473 lines
14 KiB
ObjectPascal
473 lines
14 KiB
ObjectPascal
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.
|