Файлы: бизнес-логика¶
Обзор¶
Файловая подсистема 1Формы охватывает весь жизненный цикл файлов: загрузку, хранение, версионирование, конвертацию, просмотр и скачивание. Файлы могут находиться в двух контекстах -- на Диске (файловое хранилище с иерархической структурой папок) и в задачах (вложения через ДП типа "Файл" и комментарии). Система поддерживает несколько типов файловых провайдеров (MS SQL, PostgreSQL, S3), сжатие данных, полнотекстовый поиск по содержимому и интеграцию с офисным пакетом Р7 для онлайн-редактирования документов.
Хранилища файлов¶
Диск¶
Диск -- централизованное файловое хранилище, доступное всем пользователям системы. Содержит разделы:
- Мои файлы -- личные файлы пользователя. Доступны только самому пользователю и его прямым руководителям. Раздел виден, если в общих настройках задана квота личной папки (по умолчанию 5 ГБ на пользователя). Квота распространяется на все файлы во всех разделах Диска, владельцем которых является пользователь. Файлы в задачах и чатах не учитываются.
- Общие файлы -- файлы для совместной работы, доступны всем сотрудникам компании. Любой сотрудник может создавать папки, загружать, редактировать и удалять файлы (включая чужие). Доступ к конкретным папкам регулируется правами; подпапки наследуют права родительской папки.
- Обмен файлами -- раздел для обмена файлами между сотрудниками и внешними пользователями (доступен с версии 2.263). В отличие от "Общих файлов", по умолчанию доступ к содержимому имеют только владелец и администраторы. Владелец может явно предоставить доступ другим пользователям.
- Файлы автоматизации -- папки, привязанные к задачам через смарт-автоматизацию. Доступны только сотрудникам-администраторам. Сюда же попадает выгрузка конфигурации площадки.
- Файлы замещаемых -- содержимое "Моих файлов" замещаемых сотрудников.
- Файлы подчиненных -- содержимое "Моих файлов" подчиненных (для руководителей).
Видимость Диска в целом может быть ограничена через опцию "Функции Диска" в настройках рабочего места группы.
Привязка папки Диска к задаче¶
Через смарт-действие "Связать файловую папку с задачей" можно привязать к задаче папку из раздела "Файлы автоматизации". После этого все файлы, вложенные в задачу или ДП, автоматически попадают в эту папку. Возможен и обратный сценарий: файлы загружаются в привязанную папку, а затем вставляются в ДП через пункт "Вставить из диска". Права доступа к папке формируются аналогично правам доступа к задаче (по группам, тегам, смарт-доступу, роли пользователя). При завершении всех связанных задач редактирование папки блокируется.
Файловые провайдеры¶
Файлы хранятся через провайдеров -- настраиваемые адаптеры к хранилищам. Поддерживаемые типы:
| Тип провайдера | Особенности |
|---|---|
| MS SQL | Требует таблицу с полями: identity, varbinary(max), varchar (расширение). Поддерживает сжатие и полнотекстовый поиск |
| MS SQL без полнотекстового поиска | Аналогично, без FTS |
| MS SQL с текстовым содержимым | Хранит извлеченный текст для поиска |
| MSSQL FileStream с FTS | Использует FileStream для хранения файлов |
| PostgreSQL | Использует bytea (ограничение 1 ГБ на файл). Компрессию включать не нужно -- PostgreSQL оптимизирует хранение через TOAST |
| S3 | Совместимые хранилища (MinIO и т.п.). Настраивается endpoint, bucket, ключи доступа, регион, шаблон имён файлов |
Активный провайдер (для новых файлов) выбирается в настройке "Вкладывать новые файлы через провайдер". Рекомендуется разбивать файловые БД на части по 100-200 ГБ для упрощения бэкапов и обслуживания. Файловые БД не требуют быстрых дисков. Провайдеры, используемые в категориях, нельзя удалить.
Сжатие уменьшает объем, но отключает поиск по содержимому и вывод изображений в FastReport. Для восстановления полнотекстового поиска при сжатии используется задание TikaJob, которое через сервис Apache Tika извлекает текст из документов (pdf, doc/docx, xls/xlsx, ppt/pptx, txt, xml, html).
ДП "Файл"¶
Дополнительный параметр (ДП) типа "Файл" -- основной способ прикрепления файлов к задачам. Ключевые настройки:
- Мультифайл -- хранение нескольких файлов в одном ДП (автонумерация: name.pdf, name-1.pdf, name-2.pdf)
- Имя файла -- режимы: не менять, добавить версию (с timestamp), фиксированное, смарт-выражение. Если смарт-выражение возвращает пустоту, имя не меняется
- Логирование -- запись действий (скачивание, просмотр, редактирование, удаление) в журнал Диска
- Ограничения -- запрет удаления, только изображения, макс. размер, список допустимых расширений
- Загрузка -- разрешение/запрет загрузки из файловой системы и из Диска
- Защита от скачивания -- файл открывается только для постраничного просмотра (действует для не-владельцев при readonly-доступе к ДП)
- Файловый провайдер -- можно переопределить провайдер для конкретного ДП (учитывается при ручном изменении, через "Скачать файл" и через Lua)
- Системные копии при акцепте -- создание скрытой версии файла при акцепте подписи (для снэпшота)
- Работа с Word -- сравнение версий, объединение файлов, запрет файлов с вложениями/паролем
Конвертация и сжатие¶
Система поддерживает автоматическую конвертацию видеофайлов (MP4, WMV, MOV, AVI) в единый формат MP4 для воспроизведения в веб-плеере. Обработка выполняется внешним микросервисом конвертации через защищенное API-соединение.
Архитектура решения основана на очередях событий:
- Создаются два потока (video-convertation и video-convertation-callback) и две очереди событий
- Регистрируется сервис типа UniversalApi для взаимодействия с микросервисом
- К очереди отправки привязывается смарт-действие "Вызов внешнего сервиса" (передает FileID)
- К очереди ответа привязывается Lua-скрипт, который через "Скачать файл" (DownloadFile) забирает конвертированный файл и вкладывает его в задачу
- В категории настраивается автоматизация "Добавить событие в очередь" на событие изменения ДП
Для ДП, используемого для сжатия, Мультифайл должен быть отключен и не должен быть выбран файловый провайдер.
Интеграция с редакторами (R7/OnlyOffice)¶
С версии 2.257 поддерживается онлайн-редактирование документов через офисный пакет Р7 Офис. Настройка выполняется в два шага:
- В appsettings.json на веб-сервере добавляется секция R7 с секретным ключом
- В пользовательских настройках приложения (ключ OfficeOnlineEditor) указывается JSON-конфигурация с адресом сервера Р7 и списком разрешенных подсетей:
{"editor": "r7", "settings": {"serverAddress":"...", "allowedIPs": [...]}}
Настройки персонализации и разрешений для Р7 фиксированы и не изменяются.
Действие при клике на файл MS Office настраивается на уровне пользователя: скачать, открыть для просмотра в WebApps или по умолчанию (из общих настроек).
Работа в редакторе¶
По умолчанию документ открывается в режиме просмотра. Переключение в редактирование — кнопкой в панели инструментов: документ открывается в новом окне. Ограничения и поведение:
- Файлы с расширением .doc доступны только для чтения.
- Если у файла несколько версий, в редакторе всегда открывается последняя актуальная — и в просмотре, и при редактировании.
- Файл можно скачать на локальный компьютер по иконке загрузки рядом с названием.
- В OnlyOffice в меню «Вид» доступен выбор темы интерфейса; тема применяется ко всему документу.
Доступны три режима работы:
| Режим | Что позволяет |
|---|---|
| Редактирование | Свободное изменение содержимого и форматирования |
| Рецензирование | Все правки фиксируются как пометки, могут быть приняты или отклонены позже |
| Просмотр | Запрещено редактирование, доступны навигация, масштабирование, комментирование |
В Рецензировании активен блок «Просмотр изменений» — список добавленных, удалённых и отредактированных фрагментов с возможностью переходов между ними.
Многопользовательское редактирование¶
При одновременном открытии одного файла несколькими пользователями каждый видит:
- список участников редактирования (аватары из профиля 1Формы — только для онлайн-сессий внутри системы);
- курсоры и имена коллег в реальном времени;
- изменения, вносимые другими пользователями, без необходимости перезагружать документ.
Разрешение конфликтов при сохранении: - Если правки разных пользователей не пересекаются (разные абзацы) — все сохраняются. - Если правки в одном абзаце — система информирует пользователя о чужих изменениях после завершения его сессии.
Блок «Файлы» в карточке задачи¶
В блоке отображаются последние вложенные файлы. Полный список открывается ссылкой «Посмотреть все» или кнопкой раскрытия.
Группировка по вкладкам¶
Вложения группируются по типу. Вкладка отображается, если в задаче есть файлы соответствующего типа; на счётчике — количество.
| Вкладка | Что показывает | Расширения |
|---|---|---|
| Вложения | Все файлы без фильтра (кроме файлов из ДП) | — |
| Документы | Текстовые документы | doc, docx, csv, xls, xlsx, xlsm, xlsb, xltm, xltx, ptt, pptx, pttx, odt, ods, odp, pdf, json, txt, git, sql, pgsql, html, xml, mpp, key |
| Изображения | Картинки | jpg, jpeg, png, gif, svg, webp, jfif |
| Видео | Видеофайлы | avi, mp4, mpg, webm, mov |
| Аудио | Аудиофайлы | mp3, wav, ogg |
| Письма | .eml (см. «Привязка письма к задаче» в mail/business.md) |
eml |
| «Имя ДП» | Файлы из ДП «Файл» с этим именем (не входят в счётчик «Все») | — |
При большом числе вкладок они автоматически группируются в выпадающий пункт «Ещё». Внутри каждой вкладки файлы группируются по дате добавления (по месяцу).
Панель инструментов блока¶
| Кнопка | Действие |
|---|---|
| Прикрепить файл | До завершения загрузки в окне отображается надпись о статусе загрузки |
| Вставить из диска | Открывает Диск для выбора файла. После смены версии файла на Диске он обновляется и в задаче |
| Создать файл | Создание Word (.docx) или Excel (.xlsx) с автоименем «Новый документ» / «Новая таблица» (с цифрой в скобках при дубликате имени) |
| Раскрыть | Полный список вложений в модальном окне |
| Скачать всё | Архив с файлами из «Все» (без файлов из ДП) |
| Прикрепить письмо | Открывает «Входящие» во встроенном почтовом клиенте |
| Очистить удалённые | Стирает помеченные на удаление файлы |
| Показывать удалённые | Включает отображение удалённых файлов в списке |
Контекстное меню файла¶
Правый клик по файлу в блоке:
| Пункт | Описание |
|---|---|
| Просмотр | Открыть файл (как клик по нему) |
| Скачать | Сохранить локально. Заблокировано, если нет прав (в т.ч. при перевоплощении) |
| Открыть в папке диска | Перейти к папке Диска (только для файлов, вложенных из Диска — отмечены специальной иконкой) |
| Открыть в новой вкладке | Просмотр файла в новой вкладке браузера |
| Закрепить | Закрепляет файл в верхней части блока (иконка-звёздочка) |
| История версий | Окно версий с пометкой последней цветом |
| Скопировать ссылку | Копирует полный URL файла |
| Удалить | Удалить файл из задачи |
Отображение в ленте¶
Прикреплённые файлы отображаются в ленте задачи по-разному:
- Изображения, аудио, видео — превью как для вложений в комментарий.
- Остальные типы — служебное сообщение «Вложен файл Название файла» с кликабельной ссылкой.
Просмотрщик файлов¶
Поддерживаемые форматы¶
| Тип | Расширения |
|---|---|
| Изображения | jpg, jpeg, png, gif, webp, svg, jfif |
| Видео | mp4, webm, ogg, mov |
| Аудио | mp3, ogg, aac |
| Офисные | doc, docx, xls, xlsx, csv, ppt, pptx, ods, mpp, vsd, vsdx, pub и др. |
| Текст и код | txt, md, json, xml, html, sql, js, ts, cs, py, java, css, yaml, sh, log и др. |
| Письма | msg (Outlook), eml |
Остальные форматы при клике скачиваются.
В Firefox и Safari не поддерживается воспроизведение
.webm.
Расположение просмотрщика¶
В SPA файл может открываться двумя способами в зависимости от размера экрана и режима просмотра задачи:
- Боковая панель справа (LG/XL) — для задач, чатов и Диска. Сохраняет видимым основной контент. Из боковой панели можно перейти в полноэкранный режим.
- Полноэкранное модальное окно — на малых экранах (XS/SM/MD), а также если для задачи выбран режим просмотра «снизу».
Панель инструментов просмотрщика¶
| Кнопка | Действие |
|---|---|
| Повернуть | На 90° по часовой стрелке. Каждое нажатие |
| Увеличить / Уменьшить масштаб | Изменение масштаба (также колесом мыши) |
| Информация | Модальное окно: пункты зависят от типа (для видео — продолжительность, для изображений — разрешение и т.п.) |
| Кодировка | Выбор кодировки декодирования текста |
| Открыть в новой вкладке | Открыть файл в новой вкладке |
| Скопировать ссылку | Копирует прямую ссылку на текущую открытую версию файла. Контекст (чат, задача, соседние вложения) при открытии по такой ссылке не передаётся |
| Скачать | Сохранить локально. Заблокировано без прав, в т.ч. при перевоплощении |
| Скачать всё | ZIP-архив всех файлов. Не включает файлы с опцией «Защитить файл от загрузки» |
| Просмотр версий | Окно истории версий с пометкой последней цветом |
При открытии изображения автоматически подбирается начальный масштаб: маленькое — увеличивается до экрана (но не больше разрешения), большое — уменьшается до помещения.
Порядок соседних файлов¶
Если файл открыт из контекста с несколькими вложениями (лента комментариев задачи или блок файлов в карточке), в просмотрщике активны кнопки перехода к соседним файлам, а в подписи отображается порядковый номер вида «N из M». Список формируется детерминированно: по дате загрузки от новых к старым, при совпадении даты — по убыванию идентификатора файла. Порядковый номер не меняется при повторном открытии. Файлы из ленты комментариев и из дополнительных параметров (ДП) образуют отдельные списки и в один не смешиваются.
Просмотр старых версий¶
Если открыта неактуальная версия файла, в просмотрщике появляется баннер «Вы смотрите старую версию файла» с ссылками для перехода в историю версий или к актуальной версии.
Markdown-файлы¶
Для .md доступны дополнительные настройки.
Тема оформления: Как в приложении / Светлая / Тёмная.
Ширина контента: По умолчанию (макс. 800px, центрирован) / Растянуть на всю ширину.
Настройки сохраняются в браузере и синхронизируются между всеми режимами открытия (правая панель, полноэкранная модалка, отдельная страница).
Поддерживаемые элементы Markdown: абзац (с жирным, курсивом, жирным курсивом), заголовки H1–H4, ссылки (в тёмной теме подчёркнуты всегда, в светлой — при наведении), горизонтальный разделитель ---, цитаты >, маркированные и нумерованные списки, таблицы (с разделителями и шапкой), inline-код (моноширинный с фоном), блок кода с подсветкой синтаксиса по языку, встроенные изображения.
Навигация по ссылкам:
- Относительные на другие .md — открывают целевой файл в том же окне.
- С якорем (файл.md#раздел) — прокручивает к разделу.
- На папки — открывают папку на Диске.
- Абсолютные http(s) — открываются в новой вкладке.
- Поддерживается навигация между папками (../../folder/file.md).
- При переходе появляется кнопка «Назад» для возврата.
- При отсутствии файла/папки — уведомление об ошибке.
Горячие клавиши¶
| Сочетание | Действие |
|---|---|
Cmd+E (Mac) / Ctrl+E (Win) |
Закрыть превью справа |
Esc |
Закрыть превью во весь экран |
Cmd/Ctrl+E работает из любого места с открытым превью (грид, канбан, лента, Диск). Если открыты и превью, и карточка задачи — первое нажатие закрывает превью, второе — карточку. При наведении на крестик закрытия отображается подсказка с горячей клавишей.
Выделение текста (Ctrl+A / Cmd+A)¶
Поведение зависит от фокуса:
- В поле комментария — выделяется текст комментария.
- В области просмотра файла — выделяется текст файла.
- На странице задачи (вне полей ввода) — выделяется весь текст страницы.
Печать и экспорт карточки задачи¶
В меню «Файлы» в тулбаре карточки доступен пункт «Печать и экспорт». Открывается окно с шаблонами:
- Клик на шаблон → скачивание сформированного файла Word (
.docx). - Кнопка «Печать» — экспорт карточки задачи через стандартный диалог печати операционной системы. В PDF-документ попадает только содержимое карточки задачи, без боковой панели и панели инструментов.
- Для администраторов: кнопка «Закрыть окно и перейти в интерфейс управления шаблонами» — переход к настройкам печатных форм в админ-режиме.
Печатные формы настраиваются администратором в категории.
Конвертеры¶
Для преобразования документов между форматами (например, .docx → .pdf) применяются конвертеры. Выбор конвертера для PDF задаётся:
| Уровень | Параметр |
|---|---|
| Кастомная настройка приложения | DefaultConverterPdf: Devexpress / SautinSoft / Aspose |
| Системный конфиг | UseDevexpressDocToPdfConverter в appsettings.json |
| Дефолт | SautinSoft (если не задан ни один из параметров выше или UseDevexpressDocToPdfConverter = false) |
WebDAV¶
WebDAV-доступ позволяет работать с файлами Диска через стандартный протокол, в том числе монтировать хранилище как сетевой диск. Конфигурируется на стороне веб-сервера.
Экспорт файлов в Excel¶
При экспорте списка задач в Excel значение ДП "Файл" выводится как кликабельная гиперссылка для скачивания. Формат ссылки: /api/files/download/?redirect=1. Для мультифайлов выводятся полные URL каждого файла отдельно.
Вложенные в задачу файлы (не через ДП) в Excel не экспортируются. Обходной путь -- создать скрытый ДП со ссылкой на файл через смарт-автоматизацию.
При скачивании из Excel добавляется параметр ?auth=true -- при ошибке 401 происходит переадресация на страницу авторизации (URL задается в appsettings.json, ключ AuthTokenLoginUrl).
Журнал действий¶
Все операции с Диском фиксируются в системном журнале: загрузка, удаление, создание/удаление папок, изменение прав доступа, переименование. Для ДП "Файл" и колонок типа "Файл" в ДП "Таблица" логирование включается отдельной настройкой "Логировать действия с файлами". Журнал поддерживает фильтрацию, сортировку, экспорт в CSV/Excel.
Для измерения производительности Диска существует хранимая процедура DiskSpeedBenchmark, которая создает тестовую таблицу, записывает 200 МБ данных и замеряет скорость чтения/записи.
Связи с другими доменами¶
| Домен | Связь |
|---|---|
| Задачи | Файлы вкладываются в задачи через ДП "Файл" и комментарии. Привязка папки Диска к задаче через смарт-действие |
| Категории | Файловый провайдер и настройки хранения задаются на уровне категории |
| Права доступа | Права на папки Диска наследуются из прав на задачи и категории |
| Подписи | Создание системных копий файлов при акцепте подписи |
| Смарт-автоматизация | Привязка папок, конвертация видео, формирование имен файлов через смарт-выражения |
| Уведомления | Типы уведомлений "Вложение файла" и "Другие действия с файлами" |
| Экстра-параметры | ДП "Файл" с настройками мультифайла, провайдера, защиты |
| Интеграции | Р7 Офис для онлайн-редактирования, микросервис конвертации видео, Apache Tika для OCR |
| Отчеты | Экспорт задач с файлами в Excel; изображения из ДП в FastReport (не работает при сжатии) |