Advertisement
WildFrag

Untitled

Jan 23rd, 2024
1,365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 9.32 KB | None | 0 0
  1. procedure TActOut.actCreateFileExecute(Sender: TObject);
  2. var
  3.   ms: TMSTableData;
  4.   Etap, Plan, Temat, SankCount: integer;
  5.   r: TReportPrint;
  6.   FileName: string;
  7.   st: TMemoryStream;
  8.   idact: Integer;
  9.   outfile: string;
  10.   LpuName: string;
  11.   reason: integer;
  12.   LpuID: Integer;
  13.   God, Mes: integer;
  14.   NSchet: string;
  15.   ActNumber: string;
  16.   ActNumberFull: string;
  17.   ActID: Integer;
  18.   ActName: string;
  19.   ActSchetPath: string;
  20.   ActType: variant;
  21.   TemplateName: string;
  22.   TipEksp: Integer;
  23.   ReportDirName: string;
  24.   IDVID: integer;
  25.   TematID: integer;
  26.   VidEkspShort: string;
  27.   TemplateIDVID: integer;
  28. begin
  29.   Log('=> TActOut.actCreateFileExecute', etDebug);
  30.   if dm.ActPath='' then
  31.   begin
  32.     ShowMessage('Не могу определить папку актов');
  33.     Exit;
  34.   end;
  35.  
  36.   r:= nil;
  37.   inherited;
  38.   try
  39.     st:= TMemoryStream.Create;
  40.     ms:= SelectedRows;
  41.     if dm.spCommand.Active then dm.spCommand.Close;
  42.     Log('Выполняем хранимку ActOutGetSelectedProps c выбранными актами', etDebug);
  43.     dm.spCommand.SQL.Text:= 'EXEC ActOutGetSelectedProps :rows';
  44.     dm.spCommand.ParamByName('rows').AsTable:= ms.Table;
  45.     dm.spCommand.Open;
  46.     Log('Получено записей: %d', [dm.spCommand.RecordCount], etDebug);
  47.     LogForm.Clear;
  48.     while not dm.spCommand.Eof do
  49.     begin
  50.       Log('Генерируем акт из массива выбранных, порядковый номер %d', [dm.spCommand.RecNo], etDebug);
  51.       Etap:= dm.spCommand.FieldByName('Etap').AsInteger;
  52.       Plan:= dm.spCommand.FieldByName('PlanEksp').AsInteger;
  53.       Temat:= dm.spCommand.FieldByName('TematEksp').AsInteger;
  54.       SankCount:= dm.spCommand.FieldByName('PoCount').AsInteger;
  55.       reason:= dm.spCommand.FieldByName('reason').AsInteger;
  56.       idact:= dm.spCommand.FieldByName('idact').AsInteger;
  57.       LpuName:= dm.spCommand.FieldByName('lpu_name').AsString;
  58.       LpuID:= dm.spCommand.FieldByName('kodbaselpu').AsInteger;
  59.       God:= dm.spCommand.FieldByName('year').AsInteger;
  60.       Mes:= dm.spCommand.FieldByName('month').AsInteger;
  61.       NSchet:= dm.spCommand.FieldByName('NSchet').AsString;
  62.       ActNumber:= dm.spCommand.FieldByName('ActNumber').Value;
  63.       ActNumberFull:= dm.spCommand.FieldByName('ActNumberFull').AsString;
  64.       TipEksp:= dm.spCommand.FieldByName('TipEksp').AsInteger;
  65.       IDVID:= dm.spCommand.FieldByName('IDVID').AsInteger;
  66.       TemplateIDVID:= dm.spCommand.FieldByName('TemplateIDVID').AsInteger;
  67.       TematID:= dm.spCommand.FieldByName('TematID').AsInteger;
  68.       VidEkspShort:= dm.spCommand.FieldByName('VidEkspShort').AsString;
  69.       VidEkspShort:= VidEkspShort.Replace('/',''); // обход слэша в реэкспертизе
  70.       VidEkspShort:= VidEkspShort.Replace('\','');
  71.  
  72.       Log('Etap: %d', [Etap], etDebug);
  73.       Log('Plan: %d', [Plan], etDebug);
  74.       Log('Temat: %d', [Temat], etDebug);
  75.       Log('SankCount: %d', [SankCount], etDebug);
  76.       Log('Reason: %d', [reason], etDebug);
  77.       Log('idact: %d', [idact], etDebug);
  78.       Log('LpuName: %s', [LpuName], etDebug);
  79.       Log('LpuID: %d', [LpuID], etDebug);
  80.       Log('God: %d', [God], etDebug);
  81.       Log('Mes: %d', [Mes], etDebug);
  82.       Log('NSchet: %s', [NSchet], etDebug);
  83.       Log('ActNumber: %s', [ActNumber], etDebug);
  84.       Log('ActNumberFull: %s', [ActNumberFull], etDebug);
  85.       Log('TipEksp: %d', [TipEksp], etDebug);
  86.       Log('IDVID: %d', [IDVID], etDebug);
  87.       Log('TemplateIDVID: %d', [TemplateIDVID], etDebug);
  88.  
  89.       Log('ActPath: %s', [dm.ActPath], etDebug);
  90.  
  91.       ActSchetPath:= dm.ActPath+stringreplace(LpuName,'"','',[rfReplaceAll])+'-';
  92.       ActSchetPath:= ActSchetPath+'['+IntToStr(LpuID)+']\';
  93.       ActSchetPath:= ActSchetPath+IntToStr(God)+' '+MonthName(mes)+'\';
  94.  
  95.       Log('Рассчитанный ActSchetPath: %s',[ActSchetPath], etDebug);
  96.  
  97.       if DirectoryExists(ActSchetPath)=false then
  98.       begin
  99.         try
  100.           Log('Вызываем ForceDirectories', etDebug);
  101.           ForceDirectories(ActSchetPath);
  102.         except
  103.           on E: Exception do
  104.           begin
  105.             ShowMessage('Не могу создать папку:'+#13#10+ActSchetPath+#13#10+E.Message);
  106.             Exit;
  107.           end;
  108.         end;
  109.       end;
  110.       ActSchetPath:= IncludeTrailingBackslash(ActSchetPath);
  111.  
  112.  
  113.       case Etap of
  114.         1: FileName:= 'МЭК';
  115.         2: FileName:= 'МЭЭ';
  116.         3: FileName:= 'ЭКМП';
  117.       end;
  118.  
  119. {
  120.       case TipEksp of
  121.         2: FileName:= 'Р' + FileName;
  122.         3: FileName:= 'М' + FileName;
  123.       end;
  124. }
  125.       ActName:= FileName;
  126.       if IDVID = 0 then
  127.         TemplateName:= TipEksp.ToString +'\'+ ActName
  128.       else
  129.       begin
  130.         if TemplateIDVID = 0 then
  131.           TemplateName:= 'IDVID\'+ IDVID.tostring+'\'
  132.         else
  133.           TemplateName:= 'IDVID\'+ TemplateIDVID.tostring+'\'
  134.       end;
  135.  
  136.  
  137.  
  138.       ActType:= null;
  139.       if (Etap>1) then
  140.       begin
  141.         if (IDVID = 0) then
  142.         begin
  143.           case Plan of
  144.             1: begin
  145.                  case Temat of
  146.                    1:  ActType:='ПТ';
  147.                    else ActType:='П';
  148.                  end;
  149.                end;
  150.             else
  151.                begin
  152.                 ActType:= 'Ц';
  153.                end;
  154.           end;
  155.         end
  156.         else // IDVID > 0
  157.         begin
  158.           ActType:= VidEkspShort;
  159.         end;
  160.       end;
  161.       if VarIsNull(ActType)=false then
  162.       begin
  163.         if IDVID = 0 then
  164.           TemplateName:= TemplateName + '\'+ ActType+'\';
  165.  
  166.         ActType:= '['+ ActType+']';
  167.       end else ActType:= '\';
  168.  
  169.       if (Etap = 1) then
  170.       begin
  171.         ActName:= ActName + IntToStr(God)+IntToStr(Mes)+'№'+RemoveSpecChars(NSchet)+'_'+ActNumber+'.rtf';
  172.       end
  173.       else
  174.       begin
  175.         ActName:= ActName + ActType;
  176.         ActName:= ActName + IntToStr(God)+IntToStr(Mes)+'№'+RemoveSpecChars(NSchet)+'_'+ActNumber+'.rtf';
  177.       end;
  178.  
  179.       if IDVID = 0 then
  180.       begin
  181.         if (plan=0) and (reason>0) then
  182.         begin
  183.           if DirectoryExists(dm.ActTemplates(idact)+TemplateName+IntToStr(reason)) then
  184.             TemplateName:= TemplateName + IntToStr(reason)+'\'
  185.            else
  186.             TemplateName:= TemplateName + '0\'
  187.         end;
  188.       end
  189.       else
  190.       begin
  191.         if (TematID > 0) then
  192.         begin
  193.           if DirectoryExists(dm.ActTemplates(idact) + TemplateName + TematID.ToString) then
  194.             TemplateName:= TemplateName + TematID.ToString + '\'
  195.            else
  196.             TemplateName:= TemplateName + '0\'
  197.         end;
  198.       end;
  199.  
  200.       if (Etap>1) then
  201.       begin
  202.         if (SankCount>0) then
  203.           TemplateName:= TemplateName+'SANK\' else
  204.             TemplateName:= TemplateName+'NULL\';
  205.       end
  206.       else
  207.       begin
  208.         TemplateName:= TemplateName +'\';
  209.       end;
  210.       st.Clear;
  211.  
  212.       if TipEksp = 2 then
  213.           ActName := 'Р' + ActName;
  214.       if TipEksp = 3 then
  215.           ActName := 'М' + ActName;
  216.  
  217.       Log('Рассчитанный ActName: %s',[ActName], etDebug);
  218.       Log('Рассчитанный TemplateName: %s',[TemplateName], etDebug);
  219.  
  220.       try
  221.         Log('Переходим к генерации отчета в TReportPrint', etDebug);
  222.         r:= TReportPrint.Create(dm.Connection);
  223. {$IFDEF RELEASE}
  224.         Log('Вызываем запрос select dbo.GetActTemplate(idact) + TemplateName', etDebug);
  225.         ReportDirName:= dm.ActTemplates(idact)+TemplateName;
  226. {$ELSE}
  227.         ReportDirName:= dm.ActTemplates + TemplateName;
  228. {$ENDIF}
  229.         Log('ReportDirName: %s', [ReportDirName], etDebug);
  230.         r.ReportDirName:= ReportDirName;
  231.         r.ParamByName('idact').Value:= idact;
  232.         r.SkipWizard:= true;
  233.         r.Execute(st);
  234.         if st.Size>0 then
  235.         begin
  236.           outfile:= ActSchetPath+ActName;
  237.           if DirectoryExists(ActSchetPath)=false then
  238.             ForceDirectories(ActSchetPath);
  239.           st.Position:= 0;
  240.  
  241.           Log('Размер сгенерированных в памяти данных: %d', [st.Size], etDebug);
  242.           Log('Сохраняем данные в файл %s', [outfile], etDebug);
  243.           st.SaveToFile(outfile);
  244. {$IFDEF RELEASE}
  245.           Log('Помечаем акт сгенерированным хранимкой ActCreateFile', etDebug);
  246.           dm.Connection.ExecProcEx('ActCreateFile',['idact',idact,'filename',outfile]);
  247.           LogForm.Append(1,'Акт '+actnumber+' успешно создан. Размер: '+IntToStr(Round(st.Size/1024))+'кб');
  248. {$ENDIF}
  249.           Log('Акт успешно создан', etDebug);
  250.         end;
  251.  
  252.       except
  253.         on E: ZException do begin
  254.           Log('Генерация файла завершилась с ошибкой: %s', [E.Message], etDebug);
  255.           LogForm.Append(3,'Ошибка при создании акта '+actnumber+'.'+#13#10+E.Message);
  256.         end;
  257.       end;
  258.  
  259.       Log('Акт с порядковым номером %d обработан',[dm.spCommand.RecNo], etDebug);
  260.       dm.spCommand.Next;
  261.     end;
  262.   finally
  263.     RefreshSelectedRows;
  264.     if Assigned(st) then FreeAndNil(st);
  265.     if Assigned(ms) then FreeAndNil(ms);
  266.     if Assigned(r) then FreeAndNil(r);
  267.     if LogForm.ErrorCount>0 then LogForm.ShowModal;
  268.     Log('<= TActOut.actCreateFileExecute', etDebug);
  269.   end;
  270. end;
  271.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement