# ДП «Файл» — справочник настроек

Полный перечень настроек ДП типа «Файл»: где хранится каждая настройка, что она делает и какие есть ограничения. Справочник охватывает основные и дополнительные параметры, расширения, файлы по умолчанию, интеграцию с MS Office и провайдеры хранения.

## Основные настройки (ExtParamsFileSettings)

Хранятся в таблице `ExtParamsFileSettings` (1:1 с ExtParams через PK = ExtParamID). Настраиваются на вкладке «Основное» карточки ДП.

![Вкладка «Основное» ДП «Файл»: переключатель «Мультифайл», файл по умолчанию и правило имени файла](https://help.1forma.ru/help-images/ext-params/dp_file_settings.png)

### Основные параметры, именование и логирование

Базовые параметры — режим мультифайла и файл-шаблон по умолчанию:

| Настройка | Поле БД | Тип | Описание | Ограничения |
|----------------|---------|-----|----------|-------------|
| Мультифайл | `IsMultifile` | bit, по умолчанию 0 | 0 = один файл, 1 = несколько файлов | Определяет тип ДП. Изменение после создания задач не рекомендуется |
| Значение по умолчанию | `FileId` FK → FileStorageFiles | int NULL | Файл-шаблон, загружаемый при создании задачи | CASCADE DELETE при удалении файла |

Правило, по которому файл переименовывается при загрузке в ДП:

| Настройка | Поле БД | Тип | Описание |
|----------------|---------|-----|----------|
| Не менять | `RenameMethod = 0` | int, по умолчанию 0 | Имя файла остаётся без изменений |
| Добавить версию | `RenameMethod = 1` | | К имени добавляется дата-время: `версия dd.MM.yyyy HH-mm` |
| Фиксированное имя | `RenameMethod = 2` | | Имя из поля `RenameOnUpload` |
| Смарт-выражение | `RenameMethod = 3` | | Имя вычисляется через `SmartRenameOnUpload`. Если пустой результат — оставляет исходное |

| Поле | Тип | Описание |
|------|-----|----------|
| `RenameOnUpload` | varchar(250) | Фиксированное имя (для RenameMethod=2) |
| `SmartRenameOnUpload` | int FK → SmartExpressions | смарт-выражение для генерации имени (для RenameMethod=3) |

Редактор смарт-выражения имени файла (RenameMethod = 3) открывается в визуальном конструкторе **в контексте события «Вложен файл»** (`AfterFileUploaded`, `EventID = 24`). Через событийный параметр `@eventParam1` доступен идентификатор загружаемого файла — например, чтобы получить расширение исходного файла из таблицы `filestoragefiles`:

```sql
left join filestoragefiles fsf on fsf.fileid = @eventParam1
```

Событийный контекст нужен, чтобы выражение с `@eventParam1` сохранялось и корректно выполнялось при вложении файла в этот ДП.

Для мультифайла: именование автоматическое — со второго файла добавляется суффикс `-N` к имени.

Запись действий с файлами в журнал Диска:

| Настройка | Поле БД | Тип | Описание |
|----------------|---------|-----|----------|
| Логировать действия с файлами | `IsLogFileReadsAction` | bit, по умолчанию 0 | Скачивание, просмотр, редактирование, удаление записываются в журнал Диск |

## Дополнительные настройки

Прочие параметры поведения ДП «Файл» — источники загрузки, ограничения, превью изображений, провайдер хранения. Настраиваются на вкладке «Доп. настройки» карточки ДП.

![Вкладка «Доп. настройки» ДП «Файл»: источники загрузки, защита, размер, провайдер, расширения, пропорции](https://help.1forma.ru/help-images/ext-params/dp_file_extra_settings.png)

| Настройка | Поле БД | Тип | Описание |
|----------------|---------|-----|----------|
| Запретить удалять файлы из ДП | `PreventDeletingFromHistory` | bit, **по умолчанию true** при создании ДП | Хранится в БД, но **в текущей версии не применяется**. Фактическое управление удалением файлов из ДП — через настройку категории `AllowDeleteFiles`. |
| Изображение | `IsImage` | bit, по умолчанию 0 | Только файлы-изображения |
| Разрешить сканирование | `AllowScanning` | bit, по умолчанию 1 | Утилита сканирования |
| Разрешить загрузку из файловой системы | `ExtParamFileSource` (бит 0) | tinyint, по умолчанию 1 | Загрузка с компьютера пользователя |
| Разрешить загрузку из файлового хранилища | `ExtParamFileSource` (бит 1) | tinyint | Загрузка из Диска |
| Защитить файл от загрузки | `ProtectFileView` | bit, по умолчанию 0 | UI-ограничение: интерфейс скрывает кнопку «Скачать» и блокирует выгрузку в карточке задачи, во встроенном просмотрщике, в окне истории версий и на странице файла, открытой в отдельной вкладке; для типов без встроенного просмотра вместо ссылки на скачивание выводится сообщение «Просмотр и скачивание недоступны для данного вида файлов». Остаётся постраничный просмотр. Действует одинаково для всех, включая владельца файла. Запрет клиентский: серверного запрета на выдачу одиночного файла нет, прямой вызов API возвращает оригинал. При включённой защите пункт «Скачать все» в меню файла не показывается и архив по файлам параметра не собирается; без защиты пункт на месте и по-прежнему собирает архив. У параметра-мультифайла показ пункта зависит от защиты, а не от одного типа параметра. |
| Показывать в форме новой задачи | `ShowInNewTaskForm` | bit, по умолчанию 0 | Отображать ДП в НТФ |
| Максимальный размер файла (КБ) | `MaxFileSizeKb` | bigint NULL | Ограничение размера |
| Тип пропорции | `Proportion` | smallint NULL | Пропорции для превью изображений (1:1, 2:1, 3:2, 4:3, 16:9 и обратные). При заданной пропорции вложение изображения открывает окно обрезки, и в ДП попадает обрезанная копия |
| Создавать системные копии при подписании | `CreateSystemFileVersionsOnSignatureSign` | bit, по умолчанию 0 | Скрытая версия файла при акцепте подписи |
| Файловый провайдер | `FileProviderId` | int NULL FK → FileProviders (SET NULL) | Конкретный провайдер хранения. Если не указан — провайдер по умолчанию |

Поле `ExtParamFileSource` хранит разрешённые источники загрузки файла в виде битовой маски:

```
None       = 0    // Нет источников
FileSystem = 1    // Загрузка с компьютера
FileStorage = 2   // Загрузка из файлового хранилища
```

Оба бита могут быть установлены одновременно.

## Список допустимых расширений и файлы по умолчанию

Перечень расширений файлов, которые разрешено загружать в ДП, хранится в таблице `ExtParamFileAllowedExtensions`:

| Столбец | Тип | Описание |
|---------|-----|----------|
| ExtParamID | int FK → ExtParams | ID ДП |
| Extension | varchar(30) | Расширение (pdf, docx, jpg...) |
| ExtParamTableColId | int NULL | ID колонки табличного ДП (для File в таблице) |

Кешируется в `ExtParamFileAllowedExtensionsCache`.

Таблица `ExtParamFileDefaults` содержит файлы-шаблоны, подставляемые при создании задачи:

| Столбец | Тип | Описание |
|---------|-----|----------|
| ExtParamId | int FK → ExtParams | |
| FileName | varchar(255) | Имя файла |
| FileContent | varbinary(max) | Контент |
| FileMime | varchar(1024) | MIME-тип |
| FileSize | bigint | Размер |
| FileID | varchar(200) | Ключ в провайдере |
| FileProviderID | int NULL FK → FileProviders | |

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

Содержимое файла-образца — и записи справочника значений по умолчанию, и файла, записанного значением по умолчанию параметра, — не читается по одному идентификатору файла: его отдают сессии, которая может читать параметр в переданной задаче, и администратору, который может настраивать этот параметр. Технические подробности — в Files — Backend.

## Списки шаблонов создания файла

У ДП «Файл» можно задать список шаблонов, по которым пользователь создаёт файл прямо в поле параметра, а также отдельный список шаблонов для блока вложений задачи. Настройка доступна глобальному администратору и живёт в свойствах ДП «Файл» в категории; отдельной глобальной админки под списки шаблонов нет.

Каждый элемент списка задаёт: наименование шаблона — как он показан пользователю в меню создания; триггер — что именно выполняется при выборе: заранее загруженный файл-шаблон, дополнительная форма, смарт-кнопка или смарт-правило; условие видимости — один смарт-фильтр, по которому пункт показывается или скрывается (значение лукапа, состояние задачи, группа пользователей и подобное задаются внутри этого фильтра).

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

Какой смарт-фильтр можно указать в условии видимости: фильтр должен существовать, не быть удалённым и принадлежать либо этой же категории, либо быть общим для всех категорий. Фильтр из другой категории указать нельзя — сохранение отклоняется текстом «Некорректные данные», и настройки остаются прежними. Пустое условие видимости допустимо: пункт виден всем, у кого он настроен.

Если список перестал сохраняться целиком, проверьте условия видимости всех пунктов: отказ от одного негодного фильтра отменяет сохранение всего списка, а текст ошибки не называет ни пункт, ни поле. Уже сохранённые пункты с негодным фильтром автоматически не исправляются — их нужно пересохранить. Условие видимости проверяется при сохранении так же строго, как триггер.

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

## Настройки MS Office

Таблица: `MsOfficeInteractionSettings`. Привязка: `ExtParamsFileSettings.MsOfficeInteractionSettingId`. Настраиваются на вкладке «Файлы Word» карточки ДП.

![Вкладка «Файлы Word» ДП «Файл»: запреты на файлы с паролем/вложениями, кнопка сравнения версий, режим объединения](https://help.1forma.ru/help-images/ext-params/dp_file_word_settings.png)

| Настройка | Поле БД | Описание |
|----------------|---------|----------|
| Запретить вкладывать файлы с паролем | `DisallowProtectedDocx` | Устаревшая настройка |
| Запретить вкладывать файлы с вложениями | `DisallowEmbeddingsInDocx` | Запрет вложенных объектов |
| Показывать кнопку для сравнения файлов Word | `ShowComparisonExpressionId` FK → SmartExpressions | Смарт-фильтр: когда показывать кнопку сравнения |
| Первый файл | `FirstFileExpressionId` FK → SmartExpressions | Смарт-выражение для первого файла сравнения |
| Второй файл | `SecondFileExpressionId` FK → SmartExpressions | Смарт-выражение для второго файла |
| Смарт-фильтр для сравнения с первой версией | `RedLineCompareTypeExpressionId` FK → SmartExpressions | Сравнение с первой или с предыдущей версией |
| Генерировать документ с правками (redline) | `GenerateRedline` | bit, по умолчанию 0 |
| Передавать в SharePoint | `TransmitToSharepoint` | bit, по умолчанию 0 |
| Режим объединения | `EnableMergeMode` | bit, по умолчанию 0. Объединение первого и второго файлов (MS Word) |
| Первый/Второй файл объединения | `FirstFileMergeExpressionId`, `SecondFileMergeExpressionId` | SmartExpressions |

Режим объединения работает только если не включена опция «Изображение».

## Провайдеры хранения файлов

Таблица: `FileProviders`. Типы (`FileProviderTypes`):

| Значение | Тип | Описание |
|----------|-----|----------|
| 1 | MSSQL | MS SQL varbinary с полнотекстовым поиском |
| 2 | MSSQLNoFulltextSearch | MS SQL без полнотекстового поиска |
| 3 | SharePoint | Интеграция с SharePoint |
| 4 | MSSQLFileStream | MS SQL FileStream |
| 5 | MSSQLWithTextContent | MS SQL с текстовым содержимым |
| 6 | PostgreSQL | PostgreSQL bytea |
| 7 | S3 | S3-совместимое хранилище (MinIO, AWS) |

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

## Вкладка «Настройки ДП»

Вкладка «Настройки ДП» карточки ДП «Файл» содержит базовые поля параметра:

- **Название** — имя параметра, отображаемое на карточках объектов категорий.
- **Пример содержимого** — текст всплывающей подсказки при наведении на ДП.
- **Модуль** — модуль, к которому привязан параметр.
- **Регулярное выражение** — шаблон проверки формата вводимого значения.
- **Пояснение к полю** — при заданном регулярном выражении: текст предупреждения о несоответствии; иначе — подсказка под полем.

![Вкладка «Настройки ДП» карточки ДП «Файл»: ID, название, пример содержимого, модуль, регулярное выражение, пояснение к полю](https://help.1forma.ru/help-images/ext-params/dp_edit_more_file-4.png)

## Примечание для интеграторов

Для публикации стабильных ссылок на файл, загруженный в файловое ДП, используйте endpoint:

```
GET /app/v1.2/api/files/eps/{taskId}/{extParamId}
```

Ссылка остаётся рабочей при замене файла в этом ДП, так как не зависит от `fileId`. Подробнее — в curl-examples.md, раздел 2.6.
