Как идёт экспорт

Last modified by gitlab wiki on 02.07.2026, 14:58

Экспорт по расписанию: Bimit, TRM на диск и резерв

Документ описывает технический поток одного экспорта документа при срабатывании расписания: как CAD вызывается один раз и как распределяются цели Bimit / TRM / резерв.

Общее руководство по расписанию: Подробное руководство.

Главное: CAD экспортируется один раз

Независимо от числа целей (ExportToBimit, ExportToDisk) для каждого документа вызывается один DocumentService.Export() и один пакет IPC-команд в CAD (EXPORT_IFC, EXPORT_2D, EXPORT_SHEETS).

Повторный запуск CAD или второй вызов Export() / GetTRM() для тех же артефактов не выполняется.

 Цель  Когда срабатывает  Повторный CAD? 
 Bimit  В колбэках после ответа CAD  Нет 
 TRM на диск (папка расписания)  В `CompleteExport` из `TrmPathModel`  Нет 
 Резерв в «Документы»  В `CompleteExport`, только если загрузка в Bimit упала  Нет 

Отдельный путь GetTRM()Export(upload: false) используется только для ручного «Выгрузить TRM» (диалог TRM Light), не для расписания с двумя галками.

Настройки расписания (на документ)

ScheduledExportService.ApplyScheduleExportOptions задаёт DocumentExportOptions:

UploadToBimit   schedule.ExportToBimit
SaveTrmToDisk   schedule.ExportToDisk
OutputFolder    {ExportOutputFolder}/{название документа}/

Затем один раз: documentService.Export().

Диаграмма потока

Diagram

Режимы

Только Bimit

  1. CAD → IFC/PDF один раз  
    2. Загрузка в Bimit API  
    3. TRM на диск не создаётся  

Только TRM на диск

  1. CAD → IFC/PDF один раз  
    2. Bimit не вызывается  
    3. TRM zip в {папка расписания}/{документ}/  

Bimit + TRM на диск (оба включены)

  1. CAD → IFC/PDF один раз  
    2. В колбэках: параллельно загрузка в Bimit и накопление путей в TrmPathModel  
    3. В CompleteExport: упаковка TRM zip в папку расписания (те же файлы, без повторного CAD)  

Bimit недоступен (резерв)

  1. CAD → артефакты как обычно  
    2. Ошибка UploadIFC / UploadPDF → не прерывает экспорт  
    3. TRM сохраняется в Документы\IFCAnchor\Экспорт Bimit (резерв)\{документ}\  
    4. Пользователь видит предупреждение (snackbar + журнал расписания)  
    5. Если дополнительно включён TRM на диск — сохранение в папку расписания тоже выполняется (при успехе)  

Ключевые точки в коде

 Шаг  Файл 
 Один вызов Export по расписанию  `Service/Scheduling/ScheduledExportService.cs` 
 Установка флагов  `ApplyScheduleExportOptions` 
 Один пакет IPC  `Service/CADS/Archicad/ArchicadDocumentService.Export` 
 Bimit + сбор TRM в колбэках  `Callback3d`, `ProcessDrawingExportCallback` 
 Финализация TRM / резерв  `CompleteExport`, `TrySaveBimitUploadFallback` 
 Упаковка zip  `Service/TrmServices/DocumentTrmDiskExportService.cs` 
 UI: галки расписания  `WpfApp/Features/Shedule/ScheduleExportSettingsPanel.xaml` 

Содержимое TRM на диске: что в zip, что рядом

По формату TRM IFC не кладётся внутрь zip. В архив попадают PDF, .enc (метаданные видов) и info.xml; IFC копируется в ту же папку, что и zip.

 Файл  Где оказывается 
 `{документ}.zip`  Папка документа (TRM-контейнер без IFC) 
 `*.ifc` / `*.ifczip`  Рядом с zip, в той же папке 
 PDF, `.enc`  Внутри zip 

Реализация: DocumentTrmDiskExportService.CopyIfExists — для .ifc/.ifczip вызывается PlaceIfcBesideZip (копия в каталог zip-файла, не в temp перед архивацией). То же в TrmService для ручного TRM.

Структура папок при TRM на диск

{ExportOutputFolder}/           выбрана на SchedulePage
 {Название документа 1}/
   {Название документа 1}.zip    PDF, .enc, info.xml
    model.ifc                     отдельно, рядом с zip
 {Название документа 2}/
    ...

Резерв при сбое Bimit (та же схема файлов):

Документы/IFCAnchor/Экспорт Bimit (резерв)/
 {Название документа}/
   {Название документа}.zip
   *.ifc