# Диск — Администрирование

Документ описывает администрирование домена Диск: настройки видимости, квот, вложений, журналирования и TUS-загрузки. Для администраторов и инженеров поддержки.

## Обзор и механизмы администрирования Диска

Домен disk охватывает настройки, влияющие на доступность файлового хранилища, операции с файлами и журналирование. Собственных маршрутов API администрирования и схем редактора сущностей у домена нет — настройки распределены по смежным доменам. Администрирование использует:

- **Автоадминистрирование** — 2 напрямую связанные формы (`workplaces` — видимость, `file-actions-log` — журнал)
- **Настройки через смежные домены** — `system-settings` (квоты), `subcategories` (вложения), `extparams` (ДП-файлы)

Формы автоадминистрирования:

| Alias формы | Название | Таблица БД | Папка |
|-------------|----------|-----------|-------|
| `workplaces` | Рабочие места группы | dbo.UserGroupSettings | Пользовательский интерфейс |
| `file-actions-log` | Диск (журнал) | dbo.FileActionsLog | Журналы |

Настройки в смежных доменах:

| Домен | Форма/контур | Таблица | Что контролирует |
|-------|-------------|---------|------------------|
| system | `system-settings` | dbo.Settings | Квоты, версионирование файлов |
| categories | `subcategories` | dbo.Subcategories | Вложения в задачах |
| ext-params | `extparams` | dbo.ExtParamsFileSettings | Провайдер, размер, мультифайл, логирование |

## Ключевые настройки

### Видимость, квоты и вложения в задачах

**Где настраивается:** автоадминка → форма `workplaces` → секция функций
**Таблица БД:** `dbo.UserGroupSettings`

| Поле | Что контролирует |
|------|------------------|
| `DiskFunctionalityVisible` | Показывает/скрывает «Диск» в меню сервисов, в задаче и операции ДП |

**Как применяется:** приоритет рабочего места учитывается, если пользователь состоит в нескольких группах.

**Где настраивается:** автоадминка → форма `system-settings`
**Таблица БД:** `dbo.Settings`

| Поле | Что контролирует |
|------|------------------|
| `FileStorageUserPartitionQuota` | Квота личной папки. Если `0` или `null` — раздел «Мои файлы» скрывается |
| `FileStorageFileVersionCount` | Максимальное количество версий файла. Ограничение применяется при загрузке новой версии: у файла остаются последние N версий, старейшие сверх лимита удаляются, а ссылки комментариев и файловых ДП на удаляемые версии переносятся на актуальную. Пустое значение и `0` историю версий не ограничивают |

**Где настраивается:** автоадминка → форма `subcategories`
**Таблица БД:** `dbo.Subcategories`

| Поле | Что контролирует |
|------|------------------|
| `AllowAttachFiles` | Разрешает/запрещает вложения в задачах категории |
| `ForbidUploadFilesIntoClosedTasks` | Блокирует вложения после завершения задачи |
| `AutoDeletePrevVersionsOfFiles` | ⚠️ Устаревшая, не используется — версии не удаляются; удаляется из админки. Файл с совпадающим именем становится новой версией, а предыдущая показывается зачёркнутой в ленте (системное поведение, не отключается) |

### Настройки файловых ДП и журнал действий

**Где настраивается:** настройки файлового ДП (через API администрирования)
**Таблица БД:** `dbo.ExtParamsFileSettings`

| Поле | Что контролирует |
|------|------------------|
| `IsLogFileReadsAction` | Логирование операций в журнал «Диск» |
| `FileProviderId` | Переопределяет провайдер хранения для конкретного ДП |
| `MaxFileSizeKb` | Ограничивает размер вложения |
| `IsMultifile` | Включает хранение нескольких файлов в одном ДП |
| `PreventDeletingFromHistory` | Блокирует удаление пользователем |
| `ExtParamFileSource` | Управляет сценарием «Вставить из диска» |

**Где настраивается:** автоадминка → форма `file-actions-log` (только для чтения)
**Таблица БД:** `dbo.FileActionsLog`

10 полей: аудит операций с файлами на диске: загрузка и удаление файлов, создание и удаление папок, перемещение файлов и папок, изменение прав доступа и названий. У записи о перемещении сохраняются исходная и целевая папка. Настройка `IsLogFileReadsAction` («Логировать действия с файлами») в настройках ДП «Файл» или колонки «Файл» в ДП «Таблица» управляет только записями о скачивании — остальные операции журналируются независимо от неё. Отдельно в журнал попадают операции с доступами — выдача и отзыв прав на файл и на папку, причём при отзыве с распространением на вложенные папки запись создаётся на каждую затронутую папку, — и привязка файла к задаче: закрепление и открепление файла в карточке. В таких записях сохраняется инициатор операции.

**Скачивание файлов архивом** записывается отдельным типом действия, и строка появляется по каждому файлу, фактически попавшему в архив. Логируются все ручные скачивания архивом: архив мультифайлового ДП, архив папки Диска, архив файлов комментария, архив произвольного набора файлов, скачивание архивом из задач и из файлов задачи. Если файл в архив не попал, строки по нему нет. При перевоплощении запись ведётся от пользователя сессии. Одиночное скачивание файла с Диска в журнал не попадает: тип «скачивание файла» требует привязки файла к файловому ДП и включённой настройки логирования чтений.


### Разделы, права и связанные папки Диска

Диск состоит из нескольких служебных разделов с разными правилами доступа:

| Раздел | Назначение | Ключевое правило доступа |
|--------|------------|--------------------------|
| «Мои файлы» | Личные файлы пользователя | Другие пользователи не видят раздел, кроме прямых руководителей; раздел скрыт, если `FileStorageUserPartitionQuota` не задан или равен `0` |
| «Общие файлы» | Совместные файлы сотрудников | Доступ к папкам и файлам определяется правами; подпапки по умолчанию наследуют права родителя |
| «Обмен файлами» | Обмен файлами между пользователями | Доступен с версии `2.263`; по умолчанию доступ есть только у владельца и администраторов, владелец выдаёт доступ вручную |
| «Файлы автоматизации» | Папки, привязанные к задачам смарт-автоматизацией | Видят сотрудники с правами администратора; связанные с задачами папки следует создавать здесь, а не в «Общих файлах» |
| «Файлы замещаемых» | Личные файлы замещаемых сотрудников | Отображается при настроенном замещении |
| «Файлы подчиненных» | Личные файлы подчинённых | Отображается руководителю |

⚠️ Системные корни Диска нельзя менять напрямую на уровне данных. Не создавайте в корне раздела папки, имя которых состоит только из цифр: такие имена конфликтуют со служебной маршрутизацией по URL.

Связь задачи с папкой Диска создаётся смарт-действием «Связать файловую папку с задачей». После привязки файлы задачи и файловых ДП попадают в связанную папку. Пользователь получает права на связанную папку, если видит хотя бы одну задачу, связанную с этой папкой: через права категории, теги/смарт-доступ или роль в задаче. Если все связанные задачи завершены, редактирование папки запрещается.

![Диалог «Доступы к папке»: права (просмотр, добавление, изменение, удаление и др.) по пользователям и группам, переключатель «Применить для всех вложенных папок»](https://help.1forma.ru/help-images/disk/access_rights_disk-00001.png)

### TUS preupload для больших файлов

TUS-загрузка доступна с версии `2.264` и используется для предварительной фрагментарной загрузки файлов в ленту, карточку задачи, ДП, создание и обновление календарных встреч. Файлы сохраняются во временное хранилище S3/MinIO или локальную директорию, а затем прикрепляются к целевому объекту.

**Секция `Tus` в `appsettings.json`:**

| Параметр | Тип | По умолчанию | Описание |
|----------|-----|--------------|----------|
| `PreuploadEnabled` | bool | `false` | Включает TUS preupload |
| `PreuploadEndpoint` | string | `/files/tus/preupload` | Endpoint TUS-загрузки |
| `FileExpirationInHours` | int? | `null` | Время жизни временных файлов; `null` — не удалять |
| `StoreType` | string | — | `S3` или `Local` |
| `S3.Endpoint` | string | — | URL S3/MinIO |
| `S3.BucketName` | string | — | Бакет временных TUS-файлов |
| `S3.ForcePathStyle` | bool | `true` | Path-style доступ к бакетам |
| `Local.Path` | string | — | Локальная директория временных файлов |

```json
"Tus": {
  "PreuploadEnabled": true,
  "PreuploadEndpoint": "/files/tus/preupload",
  "FileExpirationInHours": 24,
  "StoreType": "S3",
  "S3": {
    "Endpoint": "https://s3.example.local",
    "BucketName": "tusd-dev",
    "AccessKey": "<access-key>",
    "SecretKey": "<secret-key>",
    "Region": "",
    "ForcePathStyle": true
  }
}
```

⚠️ TUS считается включённым только если `PreuploadEnabled: true` и заполнено хранилище: для `S3` указан `Endpoint`, для `Local` указан `Path`. Если TUS включён на основном сервере приложения, он должен быть включён и на job-сервере, иначе `CleanExpiredFilesFromPreuploadedTusStoreJob` не сможет корректно очищать временное хранилище.

⚠️ Если площадка 1Формы работает по HTTPS, `S3.Endpoint` тоже должен использовать `https://` — иначе браузер может заблокировать скачивание файла через presigned-ссылку как смешанный контент, а обращения к хранилищу — завершаться ошибкой протокола. Эта настройка независима от параметров провайдера S3 в админ-UI (см. [files/admin.md § «Параметры провайдера S3»](https://help.1forma.ru/domains/files/admin.md#параметры-провайдера-s3)) — схему нужно проверять отдельно для каждой.

С версии `2.266.554` TUS-ключи поддерживаются при открытии документов в Р7-Офис. Формат ключа в `PreUploadedFiles`: `tempfile:tus:{tus-id}`. Старый формат `tempfile:{id}` продолжает поддерживаться для обратной совместимости.

> **Недоступно в 1F Certificate Edition (ФСТЭК-сборка).** Приём файлов по TUS изъят из состава продукта кодом, а не запрещён настройкой: маршрут предзагрузки не регистрируется и отвечает 404, а параметры секции `Tus` в конфигурации на редакцию не влияют — в конфигурации клиента приходит `"Tus": null`, признак включения считается ложным. Обычная загрузка файлов работает полностью, включая хранение в объектном хранилище. Если в этой редакции встретится ключ файла с признаком предзагрузки по TUS, операция завершается отказом с сообщением о том, что предзагрузка отключена.

При включённом TUS-хранилище для предзагрузки поддержан полный цикл онлайн-редактирования в Р7-Офис: документ открывается по составному ключу `tempfile:tus:...`, и правки из редактора сохраняются обратно в S3 или локальное хранилище — отказ разбора ключа при сохранении больше не возвращается.

### Представление категории «Диск», штрих-коды и QR-коды

В представлении категории «Диск» задачи отображаются как папки, а название папки соответствует тексту задачи. При открытии папки показываются вложения задачи.

![Категория в представлении «Диск»: задачи показаны как строки с колонками «Название», «Дата загрузки», «Размер» и «Тип»](https://help.1forma.ru/help-images/disk/view_disk.png)

В папке «Дополнительные параметры» создаются подпапки по ДП. В них файлы сгруппированы по задачам, включая файлы из колонок ДП «Таблица».

Штрих-код или QR-код применяются для потоковой работы с бумажными документами: код генерируется в FastReport или шаблоне печатного документа, печатается на документе, а после сканирования используется для автоматического связывания файла с задачей.

Типовой контур настройки:

1. В категории есть ДП для хранения изображения штрих-кода/печати и ДП «Файл» для итогового документа.
2. Смарт-пакет генерирует изображение кода, накладывает его на DOCX/PDF и вкладывает результат в ДП.
3. При вложении скана срабатывает пакет со смарт-действием «Связывание файла с задачей по штрих-коду».

Распознавание поддерживается для `jpg`, `gif`, `png`, `tiff`, `pdf`. Для потокового сканирования используется режим разбиения файла на части по штрих-кодам.

### Импорт документации на диск

С версии 2.268 в разделе администрирования **Служебное** доступен пункт **Импорт документации на диск** (URL: `/administration/disk-import`). Кастомная форма предназначена для загрузки ZIP-архива с документацией в папку «Документация Первой Формы» (PublicFolder/docs/).

**Как пользоваться:**

1. Перейдите в администрирование → **Служебное** → **Импорт документации на диск**.
2. Нажмите **Выбрать файл**, укажите ZIP-архив с документацией.
3. Нажмите **Загрузить** — содержимое архива будет распаковано и синхронизировано с папкой «Документация Первой Формы» на Диске.

С версии 2.268.420 поддерживается архив, где `manifest.json` лежит не в корне, а во вложенной папке (например, `docs/Документация Первой Формы/manifest.json`) — раньше такой архив не импортировался. Промежуточные папки создаются автоматически при необходимости.

Архив документации формируется автоматически из репозитория документации и доступен в служебной категории «Репозиторий версий приложения».

## Типичные ошибки настройки

Частые проблемы настройки Диска и способы их диагностики:

| Симптом | Причина | Где проверить | SQL-диагностика |
|---------|---------|---------------|-----------------|
| Пользователь не видит «Диск» | `DiskFunctionalityVisible` выключен для группы | Форма `workplaces` | `select GroupId, DiskFunctionalityVisible from dbo.UserGroupSettings` |
| Нет раздела «Мои файлы» | Квота = 0 или null | Форма `system-settings` | `select FileStorageUserPartitionQuota from dbo.Settings` |
| Нет пункта «Вставить из диска» в ДП | `ExtParamFileSource` не включён | Настройки ДП | `select ExtParamFileSource from dbo.ExtParamsFileSettings where ExtParamId = {epId}` |
| Операции есть, а в журнале пусто | `IsLogFileReadsAction` выключен | Настройки ДП | `select IsLogFileReadsAction from dbo.ExtParamsFileSettings where ExtParamId = {epId}` |
| Приоритет рабочего места конфликтует | Пользователь в нескольких группах с разными настройками | `dbo.UserGroupSettings` | `select ugs.* from dbo.UserGroupSettings ugs inner join dbo.UserGroups ug on ugs.GroupId = ug.GroupId where ug.UserId = {userId}` |

## Связанные документы

Смежные разделы:

- [Диск — бизнес-логика](https://help.1forma.ru/domains/disk/business.md) — папки, права, операции
- [Дополнительные параметры — администрирование](https://help.1forma.ru/domains/ext-params/admin.md) — настройка ДП (включая файловые)
- [Системные настройки](https://help.1forma.ru/domains/system/admin.md) — квоты, провайдеры
- [Категории — администрирование](https://help.1forma.ru/domains/categories/admin.md) — настройки категорий (вложения)
