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