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

2208 lines
61 KiB
ObjectPascal

unit U_IBD;
interface
uses Classes, Dialogs, Windows, SysUtils, Controls, Forms,
U_BaseCommon, U_BaseConstants, U_IBDUP;
const
T1TAG = 'T1';
T1TAGR = 'Ò1';
T2TAG = 'T2';
T2TAGR = 'Ò2';
T3TAG = 'T3';
T3TAGR = 'Ò3';
T4TAG = 'T4';
T4TAGR = 'Ò4';
T5TAG = 'T5';
T5TAGR = 'Ò5';
T6TAG = 'T6';
T6TAGR = 'Ò6';
T7TAG = 'T7';
T7TAGR = 'Ò7';
T8TAG = 'T8';
T8TAGR = 'Ò8';
T9TAG = 'T9';
T9TAGR = 'Ò9';
T10TAG = 'T10';
T10TAGR = 'Ò10';
HK1TAG = 'HK1';
HK1TAGR = 'ÍÊ1';
HK2TAG = 'HK2';
HK2TAGR = 'ÍÊ2';
TAG1 = '1';
TAG2 = '2';
TAG3 = '3';
TAG4 = '4';
TAG5 = '5';
TAG6 = '6';
TAG7 = '7';
TAG8 = '8';
TAG9 = '9';
ETAG = 'E';
ETAGR = 'Å';
MTAG = 'M';
MTAGR = 'Ì';
TTAG = 'T';
TTAGR = 'Ò';
PTAG = 'P';
PTAGR = 'Ð';
PPTAG = 'Ï';
VTAG = 'B';
VTAGR = 'Â';
GTAG = 'Æ';
SHTAG = 'Ø';
KTAG = 'K';
KTAGR = 'Ê';
K5TAG = 'K5';
K5TAGR = 'Ê5';
CTAG = 'C';
CTAGR = 'Ñ';
C1TAG = 'C1';
C1TAGR = 'Ñ1';
C2TAG = 'C2';
C2TAGR = 'Ñ2';
C3TAG = 'C3';
C3TAGR = 'Ñ3';
C311TAG = 'C311';
C311TAGR = 'Ñ311';
C331TAG = 'C331';
C331TAGR = 'Ñ331';
ATAG = 'A';
ATAGR = 'À';
BTAG = 'Á';
ZTAG = 'Z';
RTAG = 'R';
YTAG = 'Y';
HTAG = 'H';
HTAGR = 'Í';
S1TAG = 'S1';
S2TAG = 'S2';
S10TAG = 'S10';
LS1TAG = 'LS1';
OS1TAG = 'OS1';
OS2TAG = 'OS2';
KIBDTAG = 'ÊÈÁÄ';
LSATAG = 'LSA';
LS2TAG = 'LS2';
LS4TAG = 'LS4';
LS6TAG = 'LS6';
LS8TAG = 'LS8';
LSBTAG = 'LSB';
LS3TAG = 'LS3';
LS5TAG = 'LS5';
LS7TAG = 'LS7';
LS9TAG = 'LS9';
SBlockCount = 11;
STypes: array[1..SBlockCount] of integer = (1,2,14,3,4,5,6,7,8,9,10); //Ïîðÿäîê áëîêîâ
SIndexes: array[1..14] of integer = (1,2,4,5,6,7,8,9,10,11,0,0,0,3); // ïîðÿäêîâûé èíäåêñ áëîêà ïî åãî íîìåðó
FloatPrecIBD = FloatPrecision;
IsImmediateSmetaPrice = True;
IsUsePosVariants = True; // Èñïîëüçîâàòü ëè ïîçèöèþ âàðèàíòà, åñëè íåò,
//òî áóäåò áðàòüñÿ ìàêñèìàëüíàÿ ñòîèìîñòü èç âñåõ îäèíàêîâûõ øèôðîâ
type
TResInfo = record
RType,
VarNum: integer;
Shifr: String;
Name_r: String; // Íàçâàíèå ðåñóðñà
Izm_r: String; // Åäèíèöà èçìåðåíèÿ
Kolvo,
Stoim,
Vsego: double;
PosVariant: Integer;
IsResource: Boolean;
end;
TS1Fields = record
S1_STROIKARegistrNO: integer;
end;
TS2Fields = record
S2_STROIKANameFull: string;
S2_UtvergdOrg: string;
S2_STROIKAProjectShifr: string;
S2_TipStroiki: integer;
S2_STROIKADirector_p: string;
S2_STROIKAGlavEngineer: string;
S2_STROIKAOtdel: string;
S2_STROIKANachOtdela: string;
S2_STROIKASostavil: string;
S2_STROIKAProveril: string;
S2_SPRAVData: array[1..13] of real;
S2_STROIKADistance: real;
end;
PS9Record = ^TS9Record;
TS9Record = record
S9_OSGlava: integer;
S9_OSNoOsNum: integer;
S9_OSNoOs: string;
S9_OSName: string;
S9_StoitelObem: real;
S9_IzmStroitObem: string;
S9_Comment: string;
end;
PS10Record = ^TS10Record;
TS10Record = record
S10_OSGlava: integer;
S10_OSNoOsNum: integer;
S10_LSNoLsNum: integer;
S10_LSNoLs: string;
S10_LSName: string;
S10_StoitelObem: real;
S10_IzmStroitObem: string;
S10_LSChertezh: string;
S10_LSSostavil: String;
S10_LSProveril: string;
end;
TIBDLog = class(TStringList)
private
public
FFileName: string;
procedure AddToLog(LogString: String);
constructor Create(FileName: String);
destructor Destroy; override;
end;
TSBlock = class(TObject)
private
SBlock: TStringList;
SFieldsList: TList;
public
HEADER_LNG: integer;
HEADER_PRGNAME: string;
published
end;
THeader = class(TSBlock)
private
function SetHeaderFields: Boolean;
public
HEADER_SHIFR: string;
HEADER_PRGNAME: string;
HEADER_CREATIONDATE: TDateTime;
HEADER_IBDPRIZNAK: integer;
constructor Create;
destructor Destroy; override;
end;
TIBD = class;
TSAll = class(TSBlock)
private
AS9Record: PS9Record;
AS10Record: PS10Record;
SType: integer;
FFirstRec: Boolean;
S_Records: TList;
function SetSFields1: Boolean;
function SetSFields2: Boolean;
function SetSFields3: Boolean;
function SetSFields4: Boolean;
function SetSFields5: Boolean;
function SetSFields6: Boolean;
function SetSFields7: Boolean;
function SetSFields8: Boolean;
function SetSFields8_IBD2: Boolean;
function SetSFields9: Boolean;
function SetSFields10: Boolean;
function SetSFields14: Boolean;
protected
FIBD: TIBD;
function SaveToIBD: Boolean;
public
S1_Fields: TS1Fields;
S2_Fields: TS2Fields;
constructor Create(BlockType: integer);
destructor Destroy; override;
end;
TLastRec = class(TSBlock)
private
function SetLastRecFields(i: integer): Boolean;
public
constructor Create;
destructor Destroy; override;
end;
TIBD = class(TObject)
private
FFileName: string;
IBDData: TStringList;
public
Header: THeader;
SAll: array[1..SBlockCount] of TSAll;
LastRec: TLastRec;
InitSuccess: boolean;
NumberPos: integer;
constructor Create;
destructor Destroy; override;
function SaveIBD: Boolean;
procedure Init(FileName: string);
end;
//******************************************************************************
// Äîïîëíèòåëüíûå ôóíêöèè
//******************************************************************************
function MakeCorrectName(S: string): string;
procedure SetBlock(Source: TStringList; var Destination: TStringList);
procedure InsertCarret(var TempString: string);
procedure SaveWithCorrectSizeAndPack(AIBD: TStringList; AFileName: string);
//******************************************************************************
procedure SaveProjectToIBD;
var
Vedomost: array of TResInfo;
MaxVedIdx: Integer;
CurrDate: TDate;
implementation
uses USCS_Main, U_Common, U_ProtectionCommon, U_Main, U_SCSComponent;
var
IBDLog: TIBDLog;
IBD: TIBD;
IBDShifr: string;
procedure SaveProjectToIBD;
var
IBDSaveDialog: TSaveDialog;
begin
if GetCurrProjectName = '' then
begin
MessageModal('Îòêðîéòå íåîáõîäèìûé ïðîåêò è ïîïðîáóéòå ñíîâà.', 'Âíèìàíèå!', MB_ICONINFORMATION);
exit;
end;
IBDSaveDialog := TSaveDialog.Create(IBDSaveDialog);
IBDSaveDialog.InitialDir := ExtractSaveDir;
IBDSaveDialog.Title := 'Ñîõðàíåíèå ôàéëà ÈÁÄ';
IBDSaveDialog.FileName := FileNameCorrect(GetCurrProjectName);
IBDSaveDialog.Filter := 'Ôàéëû èíâåñòîðñêîãî ÈÁÄ (*.bds)|*.bds';
IBDSaveDialog.DefaultExt := '*.bds';
IBDSaveDialog.Options := [ofNoChangeDir,ofHideReadOnly,ofPathMustExist,ofOverwritePrompt,ofNoDereferenceLinks];
if not IBDSaveDialog.Execute then
begin
Exit;
end;
BeginProgress('Çàïèñü ïðîåêòà â ÈÁÄ...');
try
IBD := TIBD.Create;
IBD.Init(IBDSaveDialog.FileName);
if not IBD.SaveIBD then
begin
EndProgress;
MessageModal('Îøèáêà çàïèñè ïðîåêòà!', 'Âíèìàíèå!', MB_ICONWARNING);
end
else
begin
EndProgress;
MessageModal('Ïðîåêò óñïåøíî ñîõðàíåí!', 'Âíèìàíèå!', MB_ICONINFORMATION);
end;
except
EndProgress;
MessageModal('Îøèáêà çàïèñè ïðîåêòà!', 'Âíèìàíèå!', MB_ICONWARNING);
end;
if Assigned(IBD) then
FreeAndNil(IBD);
end;
//******************************************************************************
{ TIBD }
constructor TIBD.Create;
var
i: integer;
LogDir: String;
begin
LogDir := ExeDir + '\' + dnLog;
IBDLog := TIBDLog.Create(LogDir + '\IBD.Log');
IBDData := TStringList.Create;
Header := THeader.Create;
for i := 1 to 11 do
begin
SAll[i] := TSAll.Create(STypes[i]);
SAll[i].FIBD := Self;
end;
LastRec := TLastRec.Create;
end;
destructor TIBD.Destroy;
var
i: integer;
begin
inherited;
if Assigned(IBDData) then
FreeAndNil(IBDData);
if Assigned(Header) then
FreeAndNil(Header);
for i := 1 to SBlockCount do
begin
if Assigned(SAll[i]) then
FreeAndNil(SAll[i]);
end;
if Assigned(LastRec) then
FreeAndNil(LastRec);
if Assigned(IBDLog) then
FreeAndNil(IBDLog);
end;
procedure TIBD.Init(FileName: string);
var
i: integer;
begin
FFileName := FileName;
//Header.HEADER_SHIFR := 'ÈÁÄ_2004_2';
Header.HEADER_SHIFR := 'ÈÁÄ_2';
IBDLog.AddToLog('Begin - ' + DateTimeToStr(Now));
IBDLog.AddToLog('Initialization IBD for save - success');
Header.HEADER_IBDPRIZNAK := 1; //'.bds'
// Header.HEADER_IBDPRIZNAK := 2; - '.bdd'
CurrDate := Now;
end;
//******************************************************************************
function TIBD.SaveIBD: Boolean;
var
i: integer;
begin
ProcessMessagesEx;
result := True;
if not Header.SetHeaderFields then
begin
IBDLog.AddToLog('!!!!!!!!!! Îøèáêà ôîðìèðîâàíèÿ çàãîëîâêà!!!');
result := false;
exit;
end;
ProcessMessagesEx;
for i := 1 to 6 do
begin
IBDLog.AddToLog('~~~Processing S' + IntToStr(i));
ProcessMessagesEx;
if not SAll[SIndexes[i]].SaveToIBD then
begin
result := false;
exit;
end;
end;
for i := 9 to 10 do
begin
IBDLog.AddToLog('~~~Processing S' + IntToStr(i));
ProcessMessagesEx;
if not SAll[SIndexes[i]].SaveToIBD then
begin
result := false;
exit;
end;
end;
IBDLog.AddToLog('~~~Processing S' + IntToStr(i));
ProcessMessagesEx;
if not SAll[SIndexes[14]].SaveToIBD then
begin
result := false;
exit;
end;
IBDLog.AddToLog('~~~Processing S' + IntToStr(8));
ProcessMessagesEx;
if not SAll[SIndexes[8]].SaveToIBD then
begin
result := false;
exit;
end;
IBDLog.AddToLog('~~~Processing S' + IntToStr(7));
ProcessMessagesEx;
if not SAll[SIndexes[7]].SaveToIBD then
begin
result := false;
exit;
end;
ProcessMessagesEx;
//åñëè ïîäãîòîâêà áëîêîâ ïðîøëà óñïåøíî - ïûòàåìñÿ ïèñàòü
if Result then
begin
IBDLog.AddToLog('~~~~Moving Header to IBDData');
SetBlock(Header.SBlock, IBDData);
ProcessMessagesEx;
for i := 1 to SBlockCount do
begin
IBDLog.AddToLog('~~~~Moving S' + IntToStr(STypes[i]) + ' to IBDData');
SetBlock(SAll[i].SBlock, IBDData);
ProcessMessagesEx;
end;
try
if not LastRec.SetLastRecFields(length(IBDData.Text)) then
begin
IBDLog.AddToLog('!!!!!!!!!! Îøèáêà ôîðìèðîâàíèÿ ÊÈÁÄ!!!');
result := false;
exit;
end;
ProcessMessagesEx;
except
end;
IBDLog.AddToLog('~~~~Moving LastRec to IBDData');
SetBlock(LastRec.SBlock, IBDData);
ProcessMessagesEx;
//IBDData.SaveToFile(FFileName);
SaveWithCorrectSizeAndPack(IBDData, FFileName);
IBDData.SaveToFile(FFileName+'_');
ProcessMessagesEx;
IBDLog.AddToLog('End - ' + DateTimeToStr(Now));
Sleep(1000);
end;
end;
//******************************************************************************
{ THeader }
constructor THeader.Create;
begin
SBlock := TStringList.Create;
SFieldsList := TList.Create;
end;
destructor THeader.Destroy;
var
i: integer;
begin
SBlock.Free;
for i := 0 to SFieldsList.Count - 1 do
TStringList(SFieldsList.Items[i]).Free;
SFieldsList.Free;
inherited;
end;
function THeader.SetHeaderFields: Boolean;
var
temp: string;
begin
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
{ if ukrver then
HEADER_LNG := 0
else }
HEADER_LNG := 1;
temp := IntToStr(HEADER_LNG);
IBDShifr := HEADER_SHIFR;
temp := temp + '`' + HEADER_SHIFR;
{$IF Defined(TRIAL_SCS)}
HEADER_PRGNAME := ApplicationName + ' (âåðñèÿ ' + versionEXE + ' îò ' + DateEXE + ' Trial)';
{$ELSE}
HEADER_PRGNAME := ApplicationName + ' (âåðñèÿ ' + versionEXE + ' îò ' + DateEXE + ')';
{$IFEND}
HEADER_PRGNAME := MakeCorrectName(HEADER_PRGNAME);
temp := temp + '`' + HEADER_PRGNAME;
HEADER_CREATIONDATE := Now;
temp := temp + '`' + DateToStr(HEADER_CREATIONDATE);
try
temp := temp + '`' + inttostr(HEADER_IBDPRIZNAK);
except
temp := temp + '`1';
end;
temp := temp + '*';
SBlock.Add(temp);
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Îøèáêà îáðàáîòêè Header');
result := false;
end;
end;
//******************************************************************************
{TSAll}
//******************************************************************************
constructor TSAll.Create(BlockType: integer);
begin
SBlock := TStringList.Create;
SFieldsList := TList.Create;
SType := BlockType;
S_Records := TList.Create;
end;
destructor TSAll.Destroy;
var
i: integer;
TempSRecord: Pointer;
begin
SBlock.Free;
for i := 0 to SFieldsList.Count - 1 do
TStringList(SFieldsList.Items[i]).Free;
SFieldsList.Free;
for i := 0 to S_Records.Count - 1 do
begin
TempSRecord := S_Records.Items[i];
Dispose(TempSRecord);
end;
S_Records.Free;
inherited;
end;
//******************************************************************************
function TSAll.SaveToIBD: Boolean;
begin
result := false;
case SType of
1: begin
if SetSFields1 then
begin
IBDLog.AddToLog('~~~~S1 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
2: begin
if SetSFields2 then
begin
IBDLog.AddToLog('~~~~S2 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
3: begin
if SetSFields3 then
begin
IBDLog.AddToLog('~~~~S3 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
4: begin
if SetSFields4 then
begin
IBDLog.AddToLog('~~~~S4 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
5: begin
if SetSFields5 then
begin
IBDLog.AddToLog('~~~~S5 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
6: begin
if SetSFields6 then
begin
IBDLog.AddToLog('~~~~S6 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
7: begin
if SetSFields7 then
begin
IBDLog.AddToLog('~~~~S7 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
8: begin
if SetSFields8_IBD2 then
begin
IBDLog.AddToLog('~~~~S8 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
9: begin
if SetSFields9 then
begin
IBDLog.AddToLog('~~~~S9 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
10: begin
if SetSFields10 then
begin
IBDLog.AddToLog('~~~~S10 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
14:
begin
if SetSFields14 then
begin
IBDLog.AddToLog('~~~~S14 - Ñôîðìèðîâàí óñïåøíî');
result := true;
end
else
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà ôîðìèðîâàíèÿ áëîêà');
end;
end;
end;
//******************************************************************************
function TSAll.SetSFields1: Boolean;
var
temp: string;
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S1';
try
temp := temp + '`' + IntToStr(F_ProjMan.GSCSBase.CurrProject.MarkID);
except
// åñëè íå ñëîæèëîñü ïðåîáðàçîâàòü, à íàäî ÷òî-òî ïåðåäàòü
temp := temp + '`' + '123';
end;
// ïî ôîðìàòó ÈÁÄ - [S1`< ðåãèñòðàöèîííûé íîìåð ( öåëîå, 9 )>*], ïîýòîìó
temp := temp + '*';
SBlock.Add(temp);
ProcessMessagesEx;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S1');
result := false;
end;
end;
//--------------------------------------
function TSAll.SetSFields2: Boolean;
var
i: integer;
temp: string;
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
//1-11
temp := 'S2';
if F_ProjMan.GSCSBase.CurrProject.Name <> '' then
temp := temp + '`' + MakeCorrectName(F_ProjMan.GSCSBase.CurrProject.Name)
else
temp := temp + '`' + MakeCorrectName(F_ProjMan.GSCSBase.CurrProject.GetParams.Caption);
temp := temp + '`';
try
temp := temp + '`' + MakeCorrectName(F_ProjMan.GSCSBase.CurrProject.Name)
+ ' ' + IntToStr(F_ProjMan.GSCSBase.CurrProject.MarkID);
except
// åñëè íå ñëîæèëîñü ïðåîáðàçîâàòü, à íàäî ÷òî-òî ïåðåäàòü
temp := temp + '`' + '123';
end;
temp := temp + '`0'; //òèï ñòðîéêè 0-ÑÌÐ, 1-ÏÍ, 2-Ìèíïðîì
temp := temp + '`';//MakeCorrectName(dm.STROIKADirector_p.Value);
temp := temp + '`';//MakeCorrectName(dm.STROIKAGlavEngineer.Value);
temp := temp + '`';//MakeCorrectName(dm.STROIKAOtdel.Value);
temp := temp + '`';//MakeCorrectName(dm.STROIKANachOtdela.Value);
temp := temp + '`';//MakeCorrectName(dm.STROIKASostavil.Value);
temp := temp + '`';//MakeCorrectName(dm.STROIKAProveril.Value);
{
[<öåíà áåíçèíà, ãðí./êã ( ÷èñëî )>]`
[<öåíà äèçåëüíîãî òîïëèâà, ãðí./êã ( ÷èñëî )>]`
[<öåíà ýëåêòðîýíåðãèè, ãðí./êÂò.÷ ( ÷èñëî )>]`
[<öåíà ñæàòîãî âîçäóõà, ãðí./ì3 ( ÷èñëî )>]`
[<öåíà ñìàçî÷íûõ ìàòåðèàëîâ, ãðí./êã ( ÷èñëî )>]`
[<öåíà ãèäðàâëè÷åñêîé æèäêîñòè, ãðí./êã ( ÷èñëî )>]`
[<öåíà ìàçóòà, ãðí./êã ( ÷èñëî )>]`
[<öåíà ñìåñè êåðîñèíà è ìîòîðíîãî òîïëèâà, ãðí./êã ( ÷èñëî )>]`
[<öåíà äðîâ, ãðí./ì3 ( ÷èñëî )>]`
[<öåíà ñæàòîãî ãàçà, ãðí./ì3 ( ÷èñëî )>]`
[<öåíà ñæèæåííîãî ãàçà, ãðí./ë ( ÷èñëî )>]`
[<öåíà îõëàæäàþùåé æèäêîñòè ( òîñîë ), ãðí./êã ( ÷èñëî )>]`
[<öåíà îõëàæäàþùåé æèäêîñòè ( âîäà ), ãðí./ì3 ( ÷èñëî )>]`
[<ñðåäíåå ðàññòîÿíèå ïåðåâîçêè ñòðîèòåëüíûõ ãðóçîâ, êì ( ÷èñëî )>]*
}
for i := 1 to 14 do
begin
temp := temp + '`';
end;
temp := temp + '30'; //[<ñðåäíåå ðàññòîÿíèå ïåðåâîçêè ñòðîèòåëüíûõ ãðóçîâ, êì ( ÷èñëî )>]
temp := temp + '*';
SBlock.Add(temp);
ProcessMessagesEx;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S2');
result := false;
end;
end;
//--------------------------------------
function TSAll.SetSFields3: Boolean;
var
temp: string;
IntShifr: integer;
f: double;
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S3';
temp := temp + '*';
SBlock.Add(temp);
// ïîêà ïðîïóñêàåì èíô. î òàðèô ñåòêàõ
ProcessMessagesEx;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S3');
result := false;
end;
end;
//--------------------------------------
function TSAll.SetSFields4: Boolean;
var
temp: string;
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S4';
temp := temp + '*';
SBlock.Add(temp);
ProcessMessagesEx;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S4');
result := false;
end;
end;
//--------------------------------------
function TSAll.SetSFields5: Boolean;
var
temp: string;
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S5';
temp := temp + '*';
SBlock.Add(temp);
// ïîêà ïðîïóñêàåì
ProcessMessagesEx;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S5');
result := false;
end;
end;
//--------------------------------------
function TSAll.SetSFields6: Boolean;
var
temp: string;
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S6';
temp := temp + '*';
SBlock.Add(temp);
// ïîêà ïðîïóñêàåì
ProcessMessagesEx;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S6');
result := false;
end;
end;
//--------------------------------------
function TSAll.SetSFields7: Boolean;
var
temp: string;
i: Integer;
LookedShifr: TStringList;
procedure WriteMatToS7(ri: TResInfo);
var
temp: string;
i: integer;
//ri: TResInfo;
MassaInTonna: Double;
begin
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := AnsiUpperCase(ri.Shifr);
// SMETAONLY
//if (not {F_NormBase.} JumpToResShifr(temp, ri))
// and (not {F_NormBase.} JumpToPriceShifr(temp, ri)) then
//begin
// IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà - íå íàéäåí ðåñóðñ ' + temp);
// exit;
//end;
// FROMSMETA
//// åñëè Opr - ïóñòîé, à ïèñàòü ÷¸-òî íàäî
//ri.Opr := '33';
//if ri.Opr <> '' then
// temp := temp + '`' + ri.Opr
//else
//begin
// i := _F_Stroika.GetOprFromShifr(ri.Shifr);
// if i > 0 then
// temp := temp + '`' + inttostr(i)
// else
// temp := temp + '`1';
//end;
//*** îðr âèäà ðàáîò
temp := temp + '`' + '33';
// FROMSMETA if GetOldKodTransport(ri.mat.KodTransport) <> '' then
//begin
// temp := temp + '`' + GetOldKodTransport(ri.mat.KodTransport);
//end
//else
//begin
// if (ri.Mat.Massa <= 0.15) then
// temp := temp + '`Ë21'
// else
// temp := temp + '`Ë44';
//end;
//*** Ìàññà îáîðóäîâàíèÿ â òîííàõ - íóæíà äëÿ óñòàíîâêè âèäà òðàíñïîðòà
MassaInTonna := 0;
if (MassaInTonna <= 0.15) then
temp := temp + '`Ë21'
else
temp := temp + '`Ë44';
// FROMSMETA if UkrVer then
//begin
// temp := temp + '`' + MakeCorrectName(ri.Name_u);
// if ri.Izm_u <> '' then
// begin
// temp := temp + '`' + MakeCorrectName(ri.Izm_u);
// end
// else
// begin
// temp := temp + '`' + 'áåç âèì.';
// end;
//end
//else
//begin
// temp := temp + '`' + MakeCorrectName(ri.Name_r);
// if ri.Izm_r <> '' then
// begin
// temp := temp + '`' + MakeCorrectName(ri.Izm_r);
// end
// else
// begin
// temp := temp + '`' + 'áåç èçì.';
// end;
//end;
//*** Íàèìåíîâàíèå îáîðóäîâàíèÿ
temp := temp + '`' + MakeCorrectName(ri.Name_r);
//*** Åä èçì
if ri.Izm_r <> '' then
begin
temp := temp + '`' + MakeCorrectName(ri.Izm_r);
end
else
begin
temp := temp + '`' + 'áåç èçì.';
end;
// FROMSMETA try
// temp := temp + '`' + FormatFloat('0.########', ri.mat.massa) + '`'; //floattostr(ri.mat.massa) + '`';
//except
// temp := temp + '`' + '`';
//end;
//*** Ìàññà îáîðóäîâàíèÿ
try
temp := temp + '`' + FormatFloat('0.########', MassaInTonna) + '`'; //floattostr(ri.mat.massa) + '`';
except
temp := temp + '`' + '`';
end;
temp := temp + '*';
// çàìåíÿåì ïåðåâåä ñòðîêè íà #
InsertCarret(temp);
SBlock.Add(temp);
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S7 - ' + ri.Shifr);
end;
end;
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S7';
temp := temp + '*';
SBlock.Add(temp);
LookedShifr := TStringList.Create;
for i := 0 to High(Vedomost) do
if Not Vedomost[i].IsResource then
if Vedomost[i].Shifr <> '' then
begin
if LookedShifr.IndexOf(AnsiUpperCase(Vedomost[i].Shifr)) = -1 then
begin
WriteMatToS7(Vedomost[i]);
LookedShifr.Add(AnsiUpperCase(Vedomost[i].Shifr));
end;
end;
result := true;
FreeAndNil(LookedShifr);
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S7');
result := false;
end;
end;
//--------------------------------------
function TSAll.SetSFields8: Boolean;
var
temp: string;
i, j: integer;
// C17Warning: boolean;
// DoubleResWarning, DoublePerevozWarning: boolean;
procedure WriteMS(Idx: integer);
begin
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'MS`' + Vedomost[Idx].Shifr;
// temp := temp + '`' + IntToStr(Vedomost[Idx].VarNum);
// temp := temp + '`' + Vedomost[Idx].Name_r;
try
temp := temp + '`' + FormatFloat('0.########', Vedomost[Idx].Kolvo);
except
temp := temp + '`';
end;
temp := temp + '`'; //Äàòà ôîðìèðîâàíèÿ öåíû
temp := temp + '`'; // Îáîñíîâàíèå
temp := temp + '`0'; //TzMach
temp := temp + '`0'; //TzRemont
temp := temp + '`0'; //TzRebase
temp := temp + '`0#1'; // ñð. ðàçðÿä è òàðèô ñåòêà
temp := temp + '`0'; //Amort
temp := temp + '`0'; //Zamena
temp := temp + '`0'; ////ýíåðãîíîñèòåëè è ãèäðàâëè÷åñêàÿ æèäêîñòü
temp := temp + '`0'; //Smazka
temp := temp + '`0'; //NetRemont
temp := temp + '`0'; //NetRebase
temp := temp + '`0'; //ïðî÷èå çàòðàòû
try
temp := temp + '`' + FloatToStrU(RoundX(Vedomost[Idx].Stoim, FloatPrecIBD));
except
temp := temp + '`';
end;
// temp := temp + '#0'; //çàòðàò çàêàç÷èêà - 0
temp := temp + '`1'; //íåïîñðåäñòâåííî çàäàíà ñìåòíàÿ öåíà
temp := temp + '*';
SBlock.Add(temp);
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S8 - ' + Vedomost[Idx].Shifr);
end;
end;
//===========================
procedure WriteBR(Idx: integer);
begin
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'BR`' + Vedomost[Idx].Shifr;
// temp := temp + '`' + IntToStr(Vedomost[Idx].VarNum);
// temp := temp + '`' + Vedomost[Idx].Name_r;
try
temp := temp + '`' + FormatFloat('0.########', Vedomost[Idx].Kolvo);
except
temp := temp + '`';
end;
temp := temp + '`'; //Äàòà ôîðìèðîâàíèÿ öåíû
temp := temp + '`'; // Îáîñíîâàíèå
try
temp := temp + '`' + FloatToStrU(RoundX(Vedomost[Idx].Stoim, FloatPrecIBD));
except
temp := temp + '`';
end;
// temp := temp + '#0'; //çàòðàò çàêàç÷èêà - 0
temp := temp + '*';
SBlock.Add(temp);
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S8 - ' + Vedomost[Idx].Shifr);
end;
end;
//===========================
//===========================
procedure WriteMT(Idx: integer);
var
i: integer;
begin
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'MT`'+ Vedomost[Idx].Shifr;
// temp := temp + '`' + IntToStr(Vedomost[Idx].VarNum);
// temp := temp + '`' + Vedomost[Idx].Name_r;
temp := temp + '`0'; //ïðèçíàê âîçâðàùàåìîãî ìàòåðèàëà (0 - íåò; 1- äà)
try
temp := temp + '`' + FormatFloat('0.########', Vedomost[Idx].Kolvo);
except
temp := temp + '`';
end;
temp := temp + '`'; //Äàòà ôîðìèðîâàíèÿ öåíû
temp := temp + '`'; // Îáîñíîâàíèå
// OtpPrice
try
temp := temp + '`' + FloatToStrU(RoundX(Vedomost[Idx].Stoim, FloatPrecIBD));
except
temp := temp + '`';
end;
temp := temp + '`Ò1=0'; // Transport
temp := temp + '`0'; // Sklad
try
temp := temp + '`' + FloatToStrU(RoundX(Vedomost[Idx].Stoim, FloatPrecIBD));
except
temp := temp + '`';
end;
temp := temp + '#0'; //çàòðàò çàêàç÷èêà - 0
temp := temp + '`1'; //íåïîñðåäñòâåííî çàäàíà ñìåòíàÿ öåíà
temp := temp + '*';
SBlock.Add(temp);
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S8 - ' + Vedomost[Idx].Shifr);
end;
end;
//===========================
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S8';
temp := temp + '*';
SBlock.Add(temp);
for i := 0 to High(Vedomost) do
begin
case Vedomost[i].RType of
//Ñòðîèòåëüíûå ìàøèíû è ìåõàíèçìû (MS)
rtMachMech:
begin
WriteMS(i);
end;
//Ñòðîèòåëüíûå ìàòåðèàëû, èçäåëèÿ è êîíñòðóêöèè (MT)
rtMat:
begin
WriteMT(i);
end;
//Îáîðóäîâàíèå (BR)
rtPrice:
begin
WriteBR(i);
end;
end;
end;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S8');
result := false;
end;
end;
function TSAll.SetSFields8_IBD2: Boolean;
var
temp: string;
i, j: integer;
procedure WriteMS_IBD2(ri: TResInfo);
var
i: integer;
begin
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'MS`' + ri.Shifr; //dm.VEDOMOSTShifr.Value;
try
if ri.PosVariant > 0 then
temp := temp + '`' + IntToStr(ri.PosVariant)
else
temp := temp + '`';
except
temp := temp + '`';
end;
temp := temp + '`' + MakeCorrectName(ri.Name_r);
try
temp := temp + '`' + FormatFloat('0.########', ri.Kolvo);//floattostr(ri.Kolvo1); //dm.VEDOMOSTKolvo.Value);
except
temp := temp + '`';
end;
try
ShortDateFormat := 'dd.mm.yy';
temp := temp + '`' + DateToStr(CurrDate);
except
temp := temp + '`';
end;
temp := temp + '`';// Îáîñíîâàíèå
//*** <çàòðàòû òðóäà ìàøèíèñòîâ, ÷åë.-÷ (÷èñëî,n, 2)>
//try
// temp := temp + '`' + floattostr(Round2(ri.Mach.TzMach)); //dm.VEDOMOSTTzMach.Value);
//except
// temp := temp + '`';
//end;
temp := temp + '`0';
//*** <çàòðàòû òðóäà íà ðåìîíò è òåõîáñëóæèâàíèå, ÷åë.-÷ (÷èñëî,n,2)>
//try
// temp := temp + '`' + floattostr(Round2(ri.Mach.TzRemont)); //dm.VEDOMOSTTzRemont.Value);
//except
// temp := temp + '`';
//end;
temp := temp + '`0';
//*** <çàòðàòû òðóäà íà ïåðåáàçèðîâêó, ÷åë.-÷ (÷èñëî,n,2)>
//try
// temp := temp + '`' + floattostr(Round2(ri.Mach.TzRebase)); //dm.VEDOMOSTTzRebase.Value);
//except
// temp := temp + '`';
//end;
temp := temp + '`0';
//*** {<òàðèôíàÿ ñòàâêà ðàáî÷èõ, çàíÿòûõ îáñëóæèâàíèåì ìàøèí, ãðí. (÷èñëî, n,2)>|
// ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ ÕÇ
//*** |<ñðåäíèé ðàçðÿä ðàáîò ðàáî÷èõ, çàíÿòûõ îáñëóæèâàíèåì ìàøèí, (÷èñëî,n,1) >
//try
//// ñðåäíèé ðàçðÿä ðàáîò ðàáî÷èõ, çàíÿòûõ îáñëóæèâàíèåì ìàøèí, (÷èñëî,n,1)
//// îêðóãëÿòü äî 1-ãî çíàêà íå ïîëó÷àåòñÿ - ÑÒÑ ïåðåäà¸ò òàðèôíóþ ñòàâêó è
//// ïðèõîäèòñÿ âû÷èñëÿòü ðàçðÿä, ïðè÷¸ì îí íå âñåãäà îêðóãëÿåòñÿ äî äåñÿòûõ
// temp := temp + '`' + floattostr(Round2(ri.Mach.SrRazrad)); //dm.VEDOMOSTSrRazrad.Value);
//except
// temp := temp + '`';
//end;
temp := temp + '`0';
//*** #<íîìåð òàðèôíîé ñåòêè (÷èñëî,n) >}
//try
// temp := temp + '#' + IntToStr(Main_SetkaDef); //#. íîìåð òàðèôíîé ñåòêè
//except
// temp := temp + '#1';
//end;
temp := temp + '#1';
//*** [< àìîðòèçàöèîííûå îò÷èñëåíèÿ, ãðí. (÷èñëî,n,2) >]
//try
// temp := temp + '`' + floattostr(Round2(ri.Mach.Amort)); //dm.VEDOMOSTAmort.Value);
//except
// temp := temp + '`';
//end;
temp := temp + '`0';
//*** [< áûñòðîèçíàøèâàþùèåñÿ ÷àñòè, ãðí. (÷èñëî,n,2) >]`
//try
// temp := temp + '`' + floattostr(Round2(ri.Mach.Zamena)); //dm.VEDOMOSTZamena.Value);
//except
// temp := temp + '`';
//end;
temp := temp + '`0';
//*** {[ < ýíåðãîíîñèòåëè è ãèäðàâëè÷åñêàÿ æèäêîñòü, ãðí. (÷èñëî,n,2) >]
//try
// temp := temp + '`' + FloatToStr(Round2(ri.Mach.GSM.Benzin)) + '$' + FloatToStr(Round2(ri.Mach.GSMPrices.Benzin));
// temp := temp + '#' + FloatToStr(Round2(ri.Mach.GSM.Dizel)) + '$' + FloatToStr(Round2(ri.Mach.GSMPrices.Dizel));
// temp := temp + '#' + FloatToStr(Round2(ri.Mach.GSM.Energy)) + '$' + FloatToStr(Round2(ri.Mach.GSMPrices.Energy));
// temp := temp + '#' + FloatToStr(Round2(ri.Mach.GSM.Hydro)) + '$' + FloatToStr(Round2(ri.Mach.GSMPrices.Hydro));
// temp := temp + '#' + FloatToStr(Round2(ri.Mach.GSM.Mazut)) + '$' + FloatToStr(Round2(ri.Mach.GSMPrices.Mazut));
// temp := temp + '#' + FloatToStr(Round2(ri.Mach.GSM.Smes)) + '$' + FloatToStr(Round2(ri.Mach.GSMPrices.Smes));
// temp := temp + '#' + FloatToStr(Round2(ri.Mach.GSM.Drova)) + '$' + FloatToStr(Round2(ri.Mach.GSMPrices.Drova));
// // ãàçà è îõëàæäàþùèõ æèäêîñòåé ó íàñ íåò!!!
// temp := temp + '#0$0';
// temp := temp + '#0$0';
// temp := temp + '#0$0';
// temp := temp + '#0$0';
//except
// temp := temp + '`';
//end;
temp := temp + '`' + '0$0'; // Benzin
temp := temp + '#0$0'; // Dizel
temp := temp + '#0$0'; // Energy
temp := temp + '#0$0'; // Hydro
temp := temp + '#0$0'; // Mazut
temp := temp + '#0$0'; // Smes
temp := temp + '#0$0'; // Drova
// ãàçà è îõëàæäàþùèõ æèäêîñòåé ó íàñ íåò!!!
temp := temp + '#0$0';
temp := temp + '#0$0';
temp := temp + '#0$0';
temp := temp + '#0$0';
//temp := temp + '`';
//****************************************
//*** {[ < ñìàçî÷íûå ìàòåðèàëû, ãðí. (÷èñëî,n,2) >]
// ÑÒÑ ïèøóò â ïîçèöèè ñïèñîê ÃÑÌ ñ öåíàìè, à ñìàçî÷íûå çàäàþò îáùåé ñóììîé
//try
// temp := temp + '`' + floattostr(Round2(ri.Mach.GSM.Smazka));
// temp := temp + '$' + floattostr(Round2(ri.Mach.GSMPrices.Smazka)); //dm.VEDOMOSTSmazka.Value * dm.VEDOMOSTSmazkaPrice.Value);
//except
// temp := temp + '`';
//end; {}
temp := temp + '`' + '0$0'; //temp := temp + '`';
//*** [< ðåìîíò è íàëîãè áåç ó÷åòà çàðàáîòíîé ïëàòû, ãðí. (÷èñëî,n,2) >]
//try
// temp := temp + '`' + floattostr(Round2(ri.Mach.NetRemont)); //dm.VEDOMOSTNetRemont.Value);
//except
// temp := temp + '`';
//end;
temp := temp + '`0';
//*** [ < ïåðåáàçèðîâêà áåç ó÷åòà çàðàáîòíîé ïëàòû, ãðí. (÷èñëî,n,2) >]
//try
// temp := temp + '`' + floattostr(Round2(ri.Mach.NetRebase)); //dm.VEDOMOSTNetRebase.Value);
//except
// temp := temp + '`';
//end;
temp := temp + '`0';
//*** [ < ïðî÷èå çàòðàòû, ãðí. (÷èñëî,n,2) >]
try
temp := temp + '`0';// + floattostr(dm.VEDOMOST???.Value); ïðî÷èå çàòðàòû
except
temp := temp + '`';
end;
//*** [< öåíà ìàøèíî-÷àñà, ãðí. (÷èñëî,n,2) >
try
temp := temp + '`' + floattostrU(RoundX(ri.Stoim, FloatPrecIBD)); //dm.VEDOMOSTStoim1.Value);
except
temp := temp + '`';
end;
//*** [#< â òîì ÷èñëå çàòðàòû çàêàç÷èêà, ãðí. (÷èñëî,n,2) >]
//try
// if ri.PZak then
// begin
// if (pos('IBD',dm.STROIKAStadiynost.Value) <> 0) then//(dm.STROIKAStadiynost.Value = 'IBD') then
// temp := temp + '#' + FormatFloat('0.########', ri.PZakSum) //floattostr(Round2(ri.Stoim1))// dm.VEDOMOSTStoim1.Value)
// else
// temp := temp + '#' + FormatFloat('0.########', Round2(ri.Stoim1));// dm.VEDOMOSTStoim1.Value)
// end
// else
// temp := temp + '#0';
//except
// temp := temp + '#0';
//end;
temp := temp + '#0';
//*** <ïðèçíàê íåïîñðåäñòâåííîãî çàäàíèÿ ñìåòíîé öåíû ( 0 - íåò, 1 - äà>
//try
// ÑÒÑ ïåðåäà¸ò ïîçèöèè òèïà ìàøèíà ñ ïðèçíàêîì íåïîñðåäñòâåííîãî çàäàíèÿ öåíû
// ê òîìó æå ÀÂÊ êðèâî ïîäíèìàåò ïåðåäàííóþ èíôó î ÃÑÌ, ïîýòîìó ÌÛ áóäåì ïîñòóïàòü êàê ÑÒÑ - õàé çâûíÿþòü
// Êàê âûÿñíèëîñü â èòîãå, åñëè äàííûå ïåðåäàíû ñ ïðèçíàêîì íåïîñðåäñòâåííîãî çàäàíèÿ öåíû,
// òî ïðèìåí¸ííûå êîýô. òàì äî ñïèíû, ïîýòîìó ïûòàåìñÿ äåëàòü ïî-ëþäñêè
// if ri.AutoCalc then
// temp := temp + '`0'
// else {}
// temp := temp + '`1';
//except
// temp := temp + '`';
//end;
if IsImmediateSmetaPrice then
temp := temp + '`1'
else
temp := temp + '`0';
temp := temp + '*';
// çàìåíÿåì ïåðåâåä ñòðîêè íà #
InsertCarret(temp);
SBlock.Add(temp);
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S8 - ' + ri.Shifr);
end;
end;
procedure WriteBR_IBD2(ri: TResInfo);
var
i: integer;
begin
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'BR`' + ri.Shifr; //dm.VEDOMOSTShifr.Value;
try
if ri.PosVariant > 0 then
temp := temp + '`' + IntToStr(ri.PosVariant)
else
temp := temp + '`';
except
temp := temp + '`';
end;
temp := temp + '`' + MakeCorrectName(ri.Name_r);
try
temp := temp + '`' + FormatFloat('0.########', ri.Kolvo);// íåâàæíàÿ ô-ÿ ìîæíî 1 èëè 0 //floattostr(ri.Kolvo1); //dm.VEDOMOSTKolvo.Value);
except
temp := temp + '`';
end;
//*** Äàòà öåí - ìîæíî òåê-þ
try
ShortDateFormat := 'dd.mm.yy';
temp := temp + '`' + DateToStr(CurrDate);
except
temp := temp + '`';
end;
temp := temp + '`';// Îáîñíîâàíèå
try
//ÀÂÊ ïîäíèìàåò Stoim1 êàê Îòïóñêíóþ, íî äîáàâëÿåò äîï çàòðàòû â ËÑ è äð.
// íóæíî èñïîëüçîâàòü èìåííî îòï. öåíó, ò.ê. â ÀÂÊ äîáàâëÿþòñÿ äîï çàòðàòû ê îáîðóäîâàíèþ,
// à ó íàñ îíè óæå ñèäÿò â ri.Stoim1 - ïîýòîìó ïåðåäà¸ì îòï. öåíó, à ïðè ÷òåíèè íå ñíèìàåì
// àâòîïðîñ÷¸ò è ïîëó÷àåì ri.Stoim1 ñ äîï çàòðàòàìè
// SMETA temp := temp + '`' + floattostr(Round2(ri.Mat.OtpPrice));//ri.Stoim1); //dm.VEDOMOSTOtpPrice.Value);
temp := temp + '`' + floattostrU(RoundX(ri.Stoim, FloatPrecIBD));
except
// temp := temp + '`';
end;
temp := temp + '*';
// çàìåíÿåì ïåðåâåä ñòðîêè íà #
InsertCarret(temp);
SBlock.Add(temp);
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S8 - ' + ri.Shifr);
end;
end;
procedure WriteMT_IBD2(ri: TResInfo);
var
i: integer;
begin
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'MT`' + ri.Shifr;//dm.VEDOMOSTShifr.Value;
try
if ri.PosVariant > 0 then
temp := temp + '`' + IntToStr(ri.PosVariant)
else
temp := temp + '`';
except
temp := temp + '`';
end;
temp := temp + '`' + MakeCorrectName(ri.Name_r);
//*** [<ïðèçíàê âîçâðàùàåìîãî ìàòåðèàëà (0 - íåò; 1- äà)> ]
//if ri.Vozvrat then //dm.VEDOMOSTVozvrat.Value then
// temp := temp + '`1'
//else
// temp := temp + '`0';
temp := temp + '`0';
//*** < êîëè÷åñòâî, (÷èñëî) >
try
temp := temp + '`' + FormatFloat('0.########', ri.Kolvo);//FloatToStr(ri.Kolvo1);// dm.VEDOMOSTKolvo.Value);
except
temp := temp + '`';
end;
//*** [< äàòà ôîðìèðîâàíèÿ öåíû, (äàòà) >]
try
ShortDateFormat := 'dd.mm.yy';
temp := temp + '`' + DateToStr(CurrDate);
except
temp := temp + '`';
end;
temp := temp + '`';// Îáîñíîâàíèå
//*** [< îòïóñêíàÿ öåíà áåç ó÷åòà ïîíèæàþùåãî êîýôôèöèåíòà ê îòïóñêíîé öåíå âîçâðàùàåìûõ ìàòåðèàëîâ, ãðí. (÷èñëî,n,2) >]
//try
// temp := temp + '`' + floattostr(Round2(ri.Mat.OtpPrice));// dm.VEDOMOSTOtpPrice.Value);
//except
// temp := temp + '`';
//end;
try
temp := temp + '`' + floattostrU(RoundX(ri.Stoim, FloatPrecIBD));
except
temp := temp + '`';
end;
//T1 & T2
//[{Ò1=<òðàíñïîðòíûå ðàñõîäû, ãðí. (÷èñëî,n,2) >[#< çàðàáîòíàÿ ïëàòà â òðàíñïîðòíûõ ðàñõîäàõ, ãðí.(÷èñëî,n,2)>#
// < òðóäîçàòðàòû â òðàíñïîðòíûõ ðàñõîäàõ, ÷åë.-÷ (÷èñëî)>#< àìîðòèçàöèîííûå îò÷èñëåíèÿ, ãðí. (÷èñëî,n,2)>] |
// Ò2=< èäåíòèôèêàòîð, îäíîçíà÷íî îïðåäåëÿþùèé ñòðîêó äëÿ îïðåäåëåíèÿ ïðîâîçíîé ïëàòû, ( òåêñò ) >
// [#<ðàññòîÿíèå ïåðåâîçêè ñòðîèòåëüíûõ ãðóçîâ, êì (÷èñëî)>]}]
//if (ri.Mat.KodTransport = '') or (not ri.AutoCalc) then
//begin
// try
// temp := temp + '`Ò1=' + FloatToStr(Round2(ri.Mat.Transport));// dm.VEDOMOSTTransport.Value);
// except
// temp := temp + '`';
// end;
//end
//else
//begin
// temp := temp + '`Ò2=' + GetOldKodTransport(ri.Mat.KodTransport); //dm.VEDOMOSTKodTransport.Value;
// try
// temp := temp + '#' + IntToStr(ri.Mat.Distance);// dm.VEDOMOSTDistance.Value);
// except
// temp := temp + '#';
// end;
//end;
temp := temp + '`Ò1='+FloatToStrU(RoundX(0, FloatPrecIBD)); //temp := temp + '`';
//*** [< çàãîòîâèòåëüíî-ñêëàäñêèå ðàñõîäû, ãðí. (÷èñëî,n,2) >]
//try
// temp := temp + '`' + FloatToStr(Round2(ri.Mat.Sklad));// dm.VEDOMOSTSklad.Value);
//except
// temp := temp + '`';
//end;
temp := temp + '`';
//*** [< ñìåòíàÿ öåíà, ãðí. (÷èñëî,n,2) >
try
temp := temp + '`' + FloatToStrU(RoundX(ri.Stoim, FloatPrecIBD));
except
temp := temp + '`';
end;
//*** [#< â òîì ÷èñëå çàòðàòû çàêàç÷èêà, ãðí. (÷èñëî,n,2) >]
//try
// if ri.PZak then
// begin
// if (pos('IBD',dm.STROIKAStadiynost.Value) <> 0) then//(dm.STROIKAStadiynost.Value = 'IBD') then
// temp := temp + '#' + FormatFloat('0.########', ri.PZakSum) //floattostr(Round2(ri.Stoim1))// dm.VEDOMOSTStoim1.Value)
// else
// temp := temp + '#' + FormatFloat('0.########', Round2(ri.Stoim1));// dm.VEDOMOSTStoim1.Value)
// end
// else
// temp := temp + '#0';
//except
// temp := temp + '#0';
//end;
temp := temp + '';
//*** <ïðèçíàê íåïîñðåäñòâåííîãî çàäàíèÿ ñìåòíîé öåíû ( 0 - íåò, 1 - äà>
//try
// if ri.AutoCalc then
// temp := temp + '`0'
// else
// temp := temp + '`1';
//except
// temp := temp + '`';
//end;
if IsImmediateSmetaPrice then
temp := temp + '`1'
else
temp := temp + '`0';
temp := temp + '*';
// çàìåíÿåì ïåðåâåä ñòðîêè íà #
InsertCarret(temp);
SBlock.Add(temp);
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S8 - ' + ri.Shifr);
end;
end;
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S8';
temp := temp + '*';
SBlock.Add(temp);
for i := 0 to High(Vedomost) do
begin
case Vedomost[i].RType of
//Ñòðîèòåëüíûå ìàøèíû è ìåõàíèçìû (MS)
rtMachMech:
begin
WriteMS_IBD2(Vedomost[i]);
end;
//Ñòðîèòåëüíûå ìàòåðèàëû, èçäåëèÿ è êîíñòðóêöèè (MT)
rtMat:
begin
WriteMT_IBD2(Vedomost[i]);
end;
//Îáîðóäîâàíèå (BR)
rtPrice:
begin
WriteBR_IBD2(Vedomost[i]);
end;
end;
end;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S8');
result := false;
end;
end;
//--------------------------------------
//--------------------------------------
function TSAll.SetSFields9: Boolean;
var
temp: string;
i: Integer;
// P_os: Pointer;
GlavaNum, OSNumInGlava: integer;
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S9';
temp := temp + '*';
SBlock.Add(temp);
GlavaNum := 2;
for i := 0 to F_ProjMan.GSCSBase.CurrProject.ProjectLists.Count - 1 do
begin
OSNumInGlava := i + 1;
temp := 'OS1';
temp := temp + '`' + IntToStr(GlavaNum);
temp := temp + '`' + inttostr(OSNumInGlava);
temp := temp + '`' + IntToStr(GlavaNum) + '-' + inttostr(OSNumInGlava);
temp := temp + '`' + MakeCorrectName(F_ProjMan.GSCSBase.CurrProject.ProjectLists[i].GetNameForVisible);
temp := temp + '``';//ñòðîèòåëüíûé îáú¸ì
temp := temp + '*';
SBlock.Add(temp);
temp := 'OS2';
temp := temp + '*';
SBlock.Add(temp);
end;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S9');
result := false;
end;
end;
//--------------------------------------
function TSAll.SetSFields10: Boolean;
//type
// PosType = (Norm, Price, Res, Perevozka);
var
temp, temp1: string;
i, j, k, TempPos: Integer;
GlavaNum, OSNumInGlava, LSNum: integer;
CurrCatalog: TSCSCatalog;
VirtualRoom: TSCSCatalog;
NoRoomObjects: TSCSCatalogs;
NormResources: TSCSNormsResources;
Norm: TSCSNorm;
Resource: TSCSResourceRel;
//******************************************************************************
// Âîçâðàùàåò èíäåêñ ìàññèâà Âåäîìîñòü, ïî çàäàííûì ïàðàìåòðàì
// âåðíåò èíäåêñ ëèáî ñëåäóþùèé çà ïóñòîé çàïèñüþ, ëèáî èíäåêñ
// çàïèñè (ðåñóðñà) êîòîðûé óæå ñóùåñòâóåò â ìàññèâå
// (äëÿ ôîðìèðîâàíèÿ çàïðîñà)
function GetIdxInVedomost(Shifr, Name, EdIzm: string; Kolvo, Stoim: double; RType: integer; IsResource: Boolean): Integer;
var
i: Integer;
Vsego1, Vsego2, Delta: double;
PosVariant: Integer;
IsEqualStoim: Boolean;
begin
Result := 0;
PosVariant := 1;
for i := 0 to High(Vedomost) do
begin
if (Vedomost[i].Shifr = Shifr)
and (Vedomost[i].Name_r = Name)
and (Vedomost[i].Izm_r = EdIzm) then
begin
IsEqualStoim := CmpFloatByPrecision(Vedomost[i].Stoim, Stoim, FloatPrecIBD);
//*** Åñëè öåíû ñõîäÿòñÿ
if IsEqualStoim or Not IsUsePosVariants then
begin
//Vsego1 := Vedomost[i].Kolvo * Vedomost[i].Stoim;
//Vsego2 := Kolvo * Stoim;
//Delta := (Vsego1 + Vsego2) / (Vedomost[i].Kolvo + Kolvo);
//Vedomost[i].Kolvo := Vedomost[i].Kolvo + Kolvo;
//Vedomost[i].Stoim := Delta;
Vedomost[i].Kolvo := Vedomost[i].Kolvo + Kolvo;
if Not IsUsePosVariants then
if Stoim > Vedomost[i].Stoim then
Vedomost[i].Stoim := Stoim;
Result := i;
Break;
end
else
PosVariant := Vedomost[i].PosVariant + 1;
end;
//*** Åñëè íå óäàëîñü íàéòè ïîçèöèþ
if Result = 0 then
if (Vedomost[i].Name_r = '') and (Vedomost[i].Shifr = '') then
begin
Vedomost[i].Shifr := Shifr;
Vedomost[i].Name_r := Name;
Vedomost[i].Izm_r := EdIzm;
Vedomost[i].Kolvo := Kolvo;
Vedomost[i].Stoim := Stoim;
Vedomost[i].VarNum := i+1;
Vedomost[i].RType := RType;
if IsUsePosVariants then
if Not IsResource then
Vedomost[i].PosVariant := PosVariant;
Vedomost[i].IsResource := IsResource;
Result := i;
Break;
end;
end;
if Result = High(Vedomost) - 1 then
SetLength(Vedomost, High(Vedomost) + 100);
end;
//******************************************************************************
procedure AddPosToIBD(PMPos: TSCSResourceRel); overload;
var
VedIdx: integer;
begin
if PMPos.Cypher = '' then
exit;
VedIdx := -1;
temp := '';
temp := temp + '`' + PMPos.Cypher;
try // ïèøåì ÷èñòîå êîë-âî - áåç êîýôôèöèåíòîâ
temp := temp + '`' + FormatFloat('0.########', PMPos.Kolvo);
except
temp := temp + '`';
end;
//temp := temp + '`Ò2=' + PMPos.Name;
VedIdx := GetIdxInVedomost(PMPos.Cypher, PMPos.Name, PMPos.Izm,
PMPos.Kolvo, PMPos.Price, PMPos.RType, PMPos.ServIsResource);
if IsUsePosVariants and Not PMPos.ServIsResource then
begin
temp := temp + '`Ò15=' + IntToStr(Vedomost[VedIdx].PosVariant);
end
else
temp := temp + '`Ò2=' + PMPos.Name;
//if (VedIdx + 1) > MaxVedIdx then
// MaxVedIdx := VedIdx + 1;
if (VedIdx) > MaxVedIdx then
MaxVedIdx := VedIdx;
{ if Vedomost[VedIdx].VarNum >= 0 then
begin
// rus
temp := temp + '`Ò15=' + IntToStr(Vedomost[VedIdx].VarNum);
end; }
{ case PMPos.RType of
rtMat:
begin
temp := '`Ð=';
temp := temp + MakeCorrectName(PMPos.Name) + '$' + MakeCorrectName(PMPos.Izm) + '$1$0';
end;
rtPrice:
begin
temp := '`Ð=';
temp := temp + MakeCorrectName(PMPos.Name) + '$' + MakeCorrectName(PMPos.Izm) + '$33$0';
end;
end; }
InsertCarret(temp);
temp := temp + '*';
//if PMPos.ServIsResource then
SBlock.Add(temp);
end;
//******************************************************************************
procedure AddPosToIBD(PMPos: TSCSNorm); overload;
begin
if PMPos.Cypher = '' then
exit;
temp := '';
temp := temp + '`' + PMPos.Cypher;
try // ïèøåì ÷èñòîå êîë-âî - áåç êîýôôèöèåíòîâ
temp := temp + '`' + FormatFloat('0.########', PMPos.Kolvo);
except
temp := temp + '`';
end;
temp := temp + '`Ò2=' + PMPos.Name;
InsertCarret(temp);
temp := temp + '*';
SBlock.Add(temp);
end;
procedure GroupSamePreyscurantsByVariousPrice(AResources: TSCSResources);
var
i, j: Integer;
ResourceI: TSCSResourceRel;
ResourceJ: TSCSResourceRel;
begin
try
i := 0;
for i := 0 to AResources.Count - 1 do
begin
ResourceI := AResources[i];
if (ResourceI <> nil) and Not ResourceI.ServIsResource then
for j := 0 to AResources.Count - 1 do
begin
ResourceJ := AResources[j];
if (ResourceJ <> nil) and Not ResourceJ.ServIsResource then
begin
if (ResourceI.Cypher = ResourceJ.Cypher) and
(ResourceI.Name = ResourceJ.Name) and
(ResourceI.Izm = ResourceJ.Izm) then
if Not CmpFloatByPrecision(ResourceI.Price, ResourceJ.Price, FloatPrecIBD) then
begin
if ResourceJ.Price > ResourceI.Price then
ResourceI.Price := ResourceJ.Price;
ResourceI.Kolvo := ResourceI.Kolvo + ResourceJ.Kolvo;
FreeAndNil(ResourceJ);
AResources[j] := nil;
Break; //// BREAK ////
end;
end;
end;
end;
AResources.Pack;
except
on E: Exception do AddExceptionToLogEx('GroupSameResourcesByVariousPrice', E.Message);
end;
end;
//******************************************************************************
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S10';
temp := temp + '*';
SBlock.Add(temp);
VirtualRoom := TSCSCatalog.Create(F_ProjMan);
VirtualRoom.ChildCatalogs.Free;
NoRoomObjects := TSCSCatalogs.Create(false);
VirtualRoom.ChildCatalogs := NoRoomObjects;
GlavaNum := 2;
SetLength(Vedomost, 10000);
MaxVedIdx := -1;
for i := 0 to High(Vedomost) do
FillChar(Vedomost[i], SizeOf(Vedomost[i]), 0);
try
for i := 0 to F_ProjMan.GSCSBase.CurrProject.ProjectLists.Count - 1 do
begin
OSNumInGlava := i + 1;
VirtualRoom.Clear;
VirtualRoom.ComponentReferences.Clear;
VirtualRoom.SetParentWithNoReferences(F_ProjMan.GSCSBase.CurrProject.ProjectLists[i]);
LSNum := 1;
for j := 0 to F_ProjMan.GSCSBase.CurrProject.ProjectLists[i].ChildCatalogs.Count -1 do
begin
CurrCatalog := F_ProjMan.GSCSBase.CurrProject.ProjectLists[i].ChildCatalogs[j];
if CurrCatalog.ItemType = itRoom then
begin
NormResources := nil;
NormResources := CurrCatalog.GetAllNormsResources([nrAll], true, true, true, false);
// if (NormResources.Norms.Count > 0) or (NormResources.Resources.Count > 0) then
begin
temp := 'LS1';
temp := temp + '`' + inttostr(GlavaNum);
temp := temp + '`' + IntToStr(OSNumInGlava);
temp := temp + '`' + IntToStr(LSNum);
temp := temp + '`' + inttostr(GlavaNum)+ '-' + IntToStr(OSNumInGlava) + '-' + IntToStr(LSNum);
temp := temp + '`' + MakeCorrectName(CurrCatalog.GetNameForVisible);
temp := temp + '`'; //[< ñòðîèòåëüíûé îáúåì, (÷èñëî) >]
temp := temp + '`'; //[< åäèíèöà èçìåðåíèÿ ñòðîèòåëüíîãî îáúåìà ( òåêñò ) >]
temp := temp + '`'; //[< ñïèñîê ÷åðòåæåé ( òåêñò ) >]
temp := temp + '`'; //[< Ô.È.Î. ñîñòàâèòåëÿ, (òåêñò) >]
temp := temp + '`'; //[< Ô.È.Î. ïðîâåðÿþùåãî, (òåêñò) >]
temp := temp + '*';
SBlock.Add(temp);
temp := 'LS3';
temp := temp + '*';
SBlock.Add(temp);
for k := 0 to NormResources.Norms.Count - 1 do
begin
AddPosToIBD(NormResources.Norms[k]);
end;
if Not IsUsePosVariants then
GroupSamePreyscurantsByVariousPrice(NormResources.Resources);
for k := 0 to NormResources.Resources.Count - 1 do
begin
AddPosToIBD(NormResources.Resources[k]);
end;
end;
FreeAndNil(NormResources);
Inc(LSNum);
end;
if CurrCatalog.ItemType in [itSCSLine, itSCSConnector] then
begin
VirtualRoom.ChildCatalogs.Add(CurrCatalog);
VirtualRoom.ComponentReferences.Assign(CurrCatalog.ComponentReferences, laOr);
end;
end;
//--------------------------- VirtualRoom --------------------------------------
NormResources := nil;
NormResources := VirtualRoom.GetAllNormsResources([nrAll], true, true, true, false);
// if (NormResources.Norms.Count > 0) or (NormResources.Resources.Count > 0) then
begin
temp := 'LS1';
temp := temp + '`' + inttostr(GlavaNum);
temp := temp + '`' + IntToStr(OSNumInGlava);
temp := temp + '`' + IntToStr(LSNum);
temp := temp + '`' + inttostr(GlavaNum)+ '-' + IntToStr(OSNumInGlava) + '-' + IntToStr(LSNum);
temp := temp + '`' + MakeCorrectName(F_ProjMan.GSCSBase.CurrProject.ProjectLists[i].GetNameForVisible);
temp := temp + '`'; //[< ñòðîèòåëüíûé îáúåì, (÷èñëî) >]
temp := temp + '`'; //[< åäèíèöà èçìåðåíèÿ ñòðîèòåëüíîãî îáúåìà ( òåêñò ) >]
temp := temp + '`'; //[< ñïèñîê ÷åðòåæåé ( òåêñò ) >]
temp := temp + '`'; //[< Ô.È.Î. ñîñòàâèòåëÿ, (òåêñò) >]
temp := temp + '`'; //[< Ô.È.Î. ïðîâåðÿþùåãî, (òåêñò) >]
temp := temp + '*';
SBlock.Add(temp);
temp := 'LS3';
temp := temp + '*';
SBlock.Add(temp);
for k := 0 to NormResources.Norms.Count - 1 do
begin
AddPosToIBD(NormResources.Norms[k]);
end;
if Not IsUsePosVariants then
GroupSamePreyscurantsByVariousPrice(NormResources.Resources);
for k := 0 to NormResources.Resources.Count - 1 do
begin
AddPosToIBD(NormResources.Resources[k]);
end;
end;
FreeAndNil(NormResources);
//------------------------------------------------------------------------------
end;
finally
VirtualRoom.SetParentWithNoReferences(nil);
VirtualRoom.Free;
end;
SetLength(Vedomost, MaxVedIdx + 1);
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S10');
result := false;
end;
end;
function TSAll.SetSFields14: Boolean;
var
temp: string;
begin
result := false;
try
if Not Assigned(SBlock) then
SBlock := TStringList.Create;
temp := 'S14';
temp := temp + '*';
SBlock.Add(temp);
// ïîêà ïðîïóñêàåì Äàííûå äëÿ ðàñ÷åòà îáùåïðîèçâîäñòâåííûõ ðàñõîäîâ
ProcessMessagesEx;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå S14');
result := false;
end;
end;
//******************************************************************************
{ LastRec }
//******************************************************************************
constructor TLastRec.Create;
begin
SBlock := TStringList.Create;
SFieldsList := TList.Create;
end;
destructor TLastRec.Destroy;
var
i: integer;
begin
SBlock.Free;
for i := 0 to SFieldsList.Count - 1 do
TStringList(SFieldsList.Items[i]).Free;
SFieldsList.Free;
inherited;
end;
function TLastRec.SetLastRecFields(i: integer): Boolean;
var
temp: string;
begin
result := false;
try
temp := 'ÊÈÁÄ';
temp := temp + '`' + inttostr(i);
temp := temp + '*';
SBlock.Add(temp);
Application.ProcessMessages;
result := true;
except
IBDLog.AddToLog('!!!!!!!!!! Error - Îøèáêà (exception) ïðè îáðàáîòêå LastRec');
result := false;
end;
end;
//******************************************************************************
{ TIbdLog }
//******************************************************************************
procedure TIbdLog.AddToLog(LogString: String);
begin
LoadFromFile(FFileName);
Add(LogString);
try
SaveToFile(FFileName);
except
randomize;
FFileName := FFileName + inttostr(random(1000));
try
SaveToFile(FFileName);
except
end;
end;
end;
constructor TIBDLog.Create(FileName: String);
begin
FFileName := FileName;
try
SaveToFile(FFileName);
except
randomize;
FFileName := FFileName + inttostr(random(1000));
try
SaveToFile(FFileName);
except
end;
end;
end;
destructor TIBDLog.Destroy;
begin
inherited;
end;
//******************************************************************************
// Äîïîëíèòåëüíûå ôóíêöèè
//******************************************************************************
function MakeCorrectName(S: string): string;
begin
Result := '';
while Pos('`', S) > 0 do
begin
S[Pos('`', S)] := '''';
end;
while Pos('*', S) > 0 do
begin
S[Pos('*', S)] := 'x';
end;
Result := S;
end;
//--------------------------------------
//******************************************************************************
procedure SetBlock(Source: TStringList; var Destination: TStringList);
var
LineNum: integer;
begin
try
LineNum := 0;
while (LineNum < Source.Count) do
begin
Destination.Add(Source.Strings[LineNum]);
inc(LineNum);
end;
except
end;
end;
//******************************************************************************
procedure InsertCarret(var TempString: string);
var
TempPos: integer;
begin
while pos(#13#10, TempString) > 0 do
begin
TempPos := pos(#13#10, TempString);
Delete(TempString, TempPos, 2);
Insert(' '{#'}, TempString, TempPos);
end;
end;
procedure SaveWithCorrectSizeAndPack(AIBD: TStringList; AFileName: string);
var
IBDList: TStringList;
temp: string;
begin
IBDList := TStringList.Create;
IBDList.Assign(AIBD);
IBDList.Delete(IBDList.Count - 1);
temp := 'ÊÈÁÄ';
temp := temp + '`' + inttostr(length(IBDList.Text));
temp := temp + '*';
IBDList.Add(temp);
PackAndSaveIBD(IBDList, AFileName);
FreeAndNil(IBDList);
end;
//******************************************************************************
end.