Как идёт экспорт
Экспорт по расписанию: 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().
Диаграмма потока

Режимы
Только Bimit
- CAD → IFC/PDF один раз 2. Загрузка в Bimit API 3. TRM на диск не создаётся
Только TRM на диск
- CAD → IFC/PDF один раз
2. Bimit не вызывается
3. TRM zip в
{папка расписания}/{документ}/
Bimit + TRM на диск (оба включены)
- CAD → IFC/PDF один раз
2. В колбэках: параллельно загрузка в Bimit и накопление путей в
TrmPathModel3. ВCompleteExport: упаковка TRM zip в папку расписания (те же файлы, без повторного CAD)
Bimit недоступен (резерв)
- 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 и export.log (сводка экспорта и логи клиента/плагина); IFC копируется в ту же папку, что и zip.
| Файл | Где оказывается | |
|---|---|---|
| `{документ}.zip` | Папка документа (TRM-контейнер без IFC) | |
| `*.ifc` / `*.ifczip` | Рядом с zip, в той же папке | |
| PDF, `.enc` | Внутри zip | |
| `export.log` | Внутри zip, рядом с `info.xml` (не в оглавлении CDE) |
Реализация: DocumentTrmDiskExportService.CopyIfExists — для .ifc/.ifczip вызывается PlaceIfcBesideZip (копия в каталог zip-файла, не в temp перед архивацией). То же в TrmService для ручного TRM. Лог добавляет TrmExportLogPacker.
Структура папок при TRM на диск
{ExportOutputFolder}/ ← выбрана на SchedulePage
{Название документа 1}/
{Название документа 1}.zip ← PDF, .enc, info.xml, export.log
model.ifc ← отдельно, рядом с zip
{Название документа 2}/
...
Резерв при сбое Bimit (та же схема файлов):
Документы/IFCAnchor/Экспорт Bimit (резерв)/
{Название документа}/
{Название документа}.zip
*.ifc

