Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- procedure TActOut.actCreateFileExecute(Sender: TObject);
- var
- ms: TMSTableData;
- Etap, Plan, Temat, SankCount: integer;
- r: TReportPrint;
- FileName: string;
- st: TMemoryStream;
- idact: Integer;
- outfile: string;
- LpuName: string;
- reason: integer;
- LpuID: Integer;
- God, Mes: integer;
- NSchet: string;
- ActNumber: string;
- ActNumberFull: string;
- ActID: Integer;
- ActName: string;
- ActSchetPath: string;
- ActType: variant;
- TemplateName: string;
- TipEksp: Integer;
- ReportDirName: string;
- IDVID: integer;
- TematID: integer;
- VidEkspShort: string;
- TemplateIDVID: integer;
- begin
- Log('=> TActOut.actCreateFileExecute', etDebug);
- if dm.ActPath='' then
- begin
- ShowMessage('Не могу определить папку актов');
- Exit;
- end;
- r:= nil;
- inherited;
- try
- st:= TMemoryStream.Create;
- ms:= SelectedRows;
- if dm.spCommand.Active then dm.spCommand.Close;
- Log('Выполняем хранимку ActOutGetSelectedProps c выбранными актами', etDebug);
- dm.spCommand.SQL.Text:= 'EXEC ActOutGetSelectedProps :rows';
- dm.spCommand.ParamByName('rows').AsTable:= ms.Table;
- dm.spCommand.Open;
- Log('Получено записей: %d', [dm.spCommand.RecordCount], etDebug);
- LogForm.Clear;
- while not dm.spCommand.Eof do
- begin
- Log('Генерируем акт из массива выбранных, порядковый номер %d', [dm.spCommand.RecNo], etDebug);
- Etap:= dm.spCommand.FieldByName('Etap').AsInteger;
- Plan:= dm.spCommand.FieldByName('PlanEksp').AsInteger;
- Temat:= dm.spCommand.FieldByName('TematEksp').AsInteger;
- SankCount:= dm.spCommand.FieldByName('PoCount').AsInteger;
- reason:= dm.spCommand.FieldByName('reason').AsInteger;
- idact:= dm.spCommand.FieldByName('idact').AsInteger;
- LpuName:= dm.spCommand.FieldByName('lpu_name').AsString;
- LpuID:= dm.spCommand.FieldByName('kodbaselpu').AsInteger;
- God:= dm.spCommand.FieldByName('year').AsInteger;
- Mes:= dm.spCommand.FieldByName('month').AsInteger;
- NSchet:= dm.spCommand.FieldByName('NSchet').AsString;
- ActNumber:= dm.spCommand.FieldByName('ActNumber').Value;
- ActNumberFull:= dm.spCommand.FieldByName('ActNumberFull').AsString;
- TipEksp:= dm.spCommand.FieldByName('TipEksp').AsInteger;
- IDVID:= dm.spCommand.FieldByName('IDVID').AsInteger;
- TemplateIDVID:= dm.spCommand.FieldByName('TemplateIDVID').AsInteger;
- TematID:= dm.spCommand.FieldByName('TematID').AsInteger;
- VidEkspShort:= dm.spCommand.FieldByName('VidEkspShort').AsString;
- VidEkspShort:= VidEkspShort.Replace('/',''); // обход слэша в реэкспертизе
- VidEkspShort:= VidEkspShort.Replace('\','');
- Log('Etap: %d', [Etap], etDebug);
- Log('Plan: %d', [Plan], etDebug);
- Log('Temat: %d', [Temat], etDebug);
- Log('SankCount: %d', [SankCount], etDebug);
- Log('Reason: %d', [reason], etDebug);
- Log('idact: %d', [idact], etDebug);
- Log('LpuName: %s', [LpuName], etDebug);
- Log('LpuID: %d', [LpuID], etDebug);
- Log('God: %d', [God], etDebug);
- Log('Mes: %d', [Mes], etDebug);
- Log('NSchet: %s', [NSchet], etDebug);
- Log('ActNumber: %s', [ActNumber], etDebug);
- Log('ActNumberFull: %s', [ActNumberFull], etDebug);
- Log('TipEksp: %d', [TipEksp], etDebug);
- Log('IDVID: %d', [IDVID], etDebug);
- Log('TemplateIDVID: %d', [TemplateIDVID], etDebug);
- Log('ActPath: %s', [dm.ActPath], etDebug);
- ActSchetPath:= dm.ActPath+stringreplace(LpuName,'"','',[rfReplaceAll])+'-';
- ActSchetPath:= ActSchetPath+'['+IntToStr(LpuID)+']\';
- ActSchetPath:= ActSchetPath+IntToStr(God)+' '+MonthName(mes)+'\';
- Log('Рассчитанный ActSchetPath: %s',[ActSchetPath], etDebug);
- if DirectoryExists(ActSchetPath)=false then
- begin
- try
- Log('Вызываем ForceDirectories', etDebug);
- ForceDirectories(ActSchetPath);
- except
- on E: Exception do
- begin
- ShowMessage('Не могу создать папку:'+#13#10+ActSchetPath+#13#10+E.Message);
- Exit;
- end;
- end;
- end;
- ActSchetPath:= IncludeTrailingBackslash(ActSchetPath);
- case Etap of
- 1: FileName:= 'МЭК';
- 2: FileName:= 'МЭЭ';
- 3: FileName:= 'ЭКМП';
- end;
- {
- case TipEksp of
- 2: FileName:= 'Р' + FileName;
- 3: FileName:= 'М' + FileName;
- end;
- }
- ActName:= FileName;
- if IDVID = 0 then
- TemplateName:= TipEksp.ToString +'\'+ ActName
- else
- begin
- if TemplateIDVID = 0 then
- TemplateName:= 'IDVID\'+ IDVID.tostring+'\'
- else
- TemplateName:= 'IDVID\'+ TemplateIDVID.tostring+'\'
- end;
- ActType:= null;
- if (Etap>1) then
- begin
- if (IDVID = 0) then
- begin
- case Plan of
- 1: begin
- case Temat of
- 1: ActType:='ПТ';
- else ActType:='П';
- end;
- end;
- else
- begin
- ActType:= 'Ц';
- end;
- end;
- end
- else // IDVID > 0
- begin
- ActType:= VidEkspShort;
- end;
- end;
- if VarIsNull(ActType)=false then
- begin
- if IDVID = 0 then
- TemplateName:= TemplateName + '\'+ ActType+'\';
- ActType:= '['+ ActType+']';
- end else ActType:= '\';
- if (Etap = 1) then
- begin
- ActName:= ActName + IntToStr(God)+IntToStr(Mes)+'№'+RemoveSpecChars(NSchet)+'_'+ActNumber+'.rtf';
- end
- else
- begin
- ActName:= ActName + ActType;
- ActName:= ActName + IntToStr(God)+IntToStr(Mes)+'№'+RemoveSpecChars(NSchet)+'_'+ActNumber+'.rtf';
- end;
- if IDVID = 0 then
- begin
- if (plan=0) and (reason>0) then
- begin
- if DirectoryExists(dm.ActTemplates(idact)+TemplateName+IntToStr(reason)) then
- TemplateName:= TemplateName + IntToStr(reason)+'\'
- else
- TemplateName:= TemplateName + '0\'
- end;
- end
- else
- begin
- if (TematID > 0) then
- begin
- if DirectoryExists(dm.ActTemplates(idact) + TemplateName + TematID.ToString) then
- TemplateName:= TemplateName + TematID.ToString + '\'
- else
- TemplateName:= TemplateName + '0\'
- end;
- end;
- if (Etap>1) then
- begin
- if (SankCount>0) then
- TemplateName:= TemplateName+'SANK\' else
- TemplateName:= TemplateName+'NULL\';
- end
- else
- begin
- TemplateName:= TemplateName +'\';
- end;
- st.Clear;
- if TipEksp = 2 then
- ActName := 'Р' + ActName;
- if TipEksp = 3 then
- ActName := 'М' + ActName;
- Log('Рассчитанный ActName: %s',[ActName], etDebug);
- Log('Рассчитанный TemplateName: %s',[TemplateName], etDebug);
- try
- Log('Переходим к генерации отчета в TReportPrint', etDebug);
- r:= TReportPrint.Create(dm.Connection);
- {$IFDEF RELEASE}
- Log('Вызываем запрос select dbo.GetActTemplate(idact) + TemplateName', etDebug);
- ReportDirName:= dm.ActTemplates(idact)+TemplateName;
- {$ELSE}
- ReportDirName:= dm.ActTemplates + TemplateName;
- {$ENDIF}
- Log('ReportDirName: %s', [ReportDirName], etDebug);
- r.ReportDirName:= ReportDirName;
- r.ParamByName('idact').Value:= idact;
- r.SkipWizard:= true;
- r.Execute(st);
- if st.Size>0 then
- begin
- outfile:= ActSchetPath+ActName;
- if DirectoryExists(ActSchetPath)=false then
- ForceDirectories(ActSchetPath);
- st.Position:= 0;
- Log('Размер сгенерированных в памяти данных: %d', [st.Size], etDebug);
- Log('Сохраняем данные в файл %s', [outfile], etDebug);
- st.SaveToFile(outfile);
- {$IFDEF RELEASE}
- Log('Помечаем акт сгенерированным хранимкой ActCreateFile', etDebug);
- dm.Connection.ExecProcEx('ActCreateFile',['idact',idact,'filename',outfile]);
- LogForm.Append(1,'Акт '+actnumber+' успешно создан. Размер: '+IntToStr(Round(st.Size/1024))+'кб');
- {$ENDIF}
- Log('Акт успешно создан', etDebug);
- end;
- except
- on E: ZException do begin
- Log('Генерация файла завершилась с ошибкой: %s', [E.Message], etDebug);
- LogForm.Append(3,'Ошибка при создании акта '+actnumber+'.'+#13#10+E.Message);
- end;
- end;
- Log('Акт с порядковым номером %d обработан',[dm.spCommand.RecNo], etDebug);
- dm.spCommand.Next;
- end;
- finally
- RefreshSelectedRows;
- if Assigned(st) then FreeAndNil(st);
- if Assigned(ms) then FreeAndNil(ms);
- if Assigned(r) then FreeAndNil(r);
- if LogForm.ErrorCount>0 then LogForm.ShowModal;
- Log('<= TActOut.actCreateFileExecute', etDebug);
- end;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement