Перейти к содержанию

Файлы: бизнес-логика

Обзор

Файловая подсистема 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-соединение.

Архитектура решения основана на очередях событий:

  1. Создаются два потока (video-convertation и video-convertation-callback) и две очереди событий
  2. Регистрируется сервис типа UniversalApi для взаимодействия с микросервисом
  3. К очереди отправки привязывается смарт-действие "Вызов внешнего сервиса" (передает FileID)
  4. К очереди ответа привязывается Lua-скрипт, который через "Скачать файл" (DownloadFile) забирает конвертированный файл и вкладывает его в задачу
  5. В категории настраивается автоматизация "Добавить событие в очередь" на событие изменения ДП

Для ДП, используемого для сжатия, Мультифайл должен быть отключен и не должен быть выбран файловый провайдер.

Интеграция с редакторами (R7/OnlyOffice)

С версии 2.257 поддерживается онлайн-редактирование документов через офисный пакет Р7 Офис. Настройка выполняется в два шага:

  1. В appsettings.json на веб-сервере добавляется секция R7 с секретным ключом
  2. В пользовательских настройках приложения (ключ 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
PDF pdf
Офисные 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 (не работает при сжатии)