Зачем в БСП используются две разные схемы хранения файлов и как выбрать подходящую?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке конфигураций на базе Библиотеки стандартных подсистем (БСП) программисты часто сталкиваются с дилеммой: почему в системе сосуществуют две, казалось бы, дублирующие друг друга модели хранения файлов? С одной стороны, мы видим общий справочник Файлы, а с другой — множество справочников вида ИмяОбъектаПрисоединенныеФайлы. На первый взгляд их структура идентична, что вызывает логичный вопрос о целесообразности такого разделения. Разберем детально архитектурные причины этого решения и выясним, какой вариант лучше использовать в конкретных задачах.

Две концепции: «Файловый менеджер» против «Вложений к документам»

Проанализируем предназначение каждой из схем. В БСП заложены две разные бизнес-логики работы с контентом:

  1. Справочник Файлы: Эта модель реализует логику, схожую с облачными хранилищами или обычным проводником операционной системы. Здесь файл является самостоятельной сущностью. Он может существовать сам по себе, группироваться в папки, иметь свои независимые права доступа. Этот вариант идеален для создания «Архива документов» или «Базы знаний», где пользователи ищут именно файл, а не объект, к которому он прикреплен.
  2. Присоединенные файлы (индивидуальные справочники): Здесь файл выступает в роли подчиненного атрибута (скана, вложения) конкретного объекта. Например, скан договора не имеет смысла без самого элемента справочника Договоры. В этом случае для каждого типа владельца создается свой справочник (например, ДоговорыКонтрагентовПрисоединенныеФайлы), что позволяет тесно связать жизненный цикл файла с владельцем.

Разбор заблуждений о версионировании

Рассмотрим распространенное мнение о том, что индивидуальные справочники присоединенных файлов не поддерживают версионирование. Это глубокое заблуждение. Выясним, как это работает на самом деле:

Подсистема «Работа с файлами» в БСП универсальна. Если для конкретного справочника присоединенных файлов включена поддержка версий, система будет корректно сохранять историю изменений в подчиненном справочнике ВерсииФайлов (для общего случая) или в аналогичном механизме для присоединенных файлов. Таким образом, наличие или отсутствие версионирования не является критерием выбора между этими двумя схемами — оба варианта отлично справляются с хранением истории изменений.

Разграничение прав доступа и производительность (RLS)

Выясним причину использования множества справочников вместо одного общего с точки зрения безопасности и скорости работы. Это, пожалуй, самый важный технический аспект.

Вопрос прав (RLS): В справочнике Файлы права доступа настраиваются на уровне папок. Для системы это означает необходимость при каждом запросе проверять сложную иерархию папок, чтобы понять, имеет ли пользователь право видеть конкретный документ. Если поместить туда миллионы файлов из всех документов базы, расчет прав станет «бутылочным горлышком» производительности.

В случае с присоединенными файлами права, как правило, наследуются от объекта-владельца. Если у пользователя есть права на чтение документа РеализацияТоваровУслуг, он автоматически получает доступ к справочнику РеализацияТоваровУслугПрисоединенныеФайлы. Это работает значительно быстрее, так как не требует дополнительных проверок сложных условий доступа в базе данных.

Блокировки данных: Проанализируем ситуацию, когда тысячи пользователей одновременно загружают файлы. Если бы все они писали в одну таблицу Справочник.Файлы, риск возникновения транзакционных блокировок был бы крайне высок. Разделение на отдельные таблицы для каждого типа документа позволяет распределить нагрузку и избежать конкуренции за ресурсы базы данных.

Техническая реализация в конфигураторе

Посмотрим, как эти механизмы связаны между собой на уровне метаданных. Несмотря на разделение, БСП использует общие алгоритмы для работы с обоими типами хранилищ. Ключевую роль здесь играет определяемый тип ВладелецФайлов.

Рассмотрим структуру этого типа. Он содержит ссылки на все объекты, которые могут иметь присоединенные файлы. Это позволяет использовать единые общие модули и формы для таких операций, как:

При интеграции подсистемы в новую конфигурацию через конструктор БСП, для каждого объекта-владельца будет создан свой справочник. Например:


// Пример структуры метаданных для справочника Номенклатура
Справочник.Номенклатура
Справочник.НоменклатураПрисоединенныеФайлы (Владелец - СправочникСсылка.Номенклатура)

Способы физического хранения данных

Важно понимать, что обе схемы хранения поддерживают одинаковые способы физического размещения двоичных данных. Рассмотрим их:

  1. В информационной базе: Данные хранятся непосредственно в СУБД в поле типа ХранилищеЗначения. Это удобно для небольших баз, но сильно увеличивает размер файла базы данных или SQL-таблиц.
  2. В томах на диске: В базе хранятся только пути к файлам, а сами данные лежат в сетевых папках. Это рекомендуемый способ для высоконагруженных систем, так как он упрощает бэкап и снижает нагрузку на SQL-сервер.
  3. Облачные хранилища: Современные версии БСП позволяют подключать S3-совместимые хранилища, что актуально для облачных решений.

Итоговые рекомендации по выбору

Проанализируем, как выбрать правильный путь при проектировании вашей системы:

Если ваша задача — создать единый электронный архив, где документы живут своей жизнью (например, внутренние инструкции, нормативные акты, шаблоны), используйте стандартный справочник Файлы и механизм папок.

Если же вам нужно реализовать хранение вложений к учетным объектам (фотографии товаров, сканы актов, PDF-версии счетов), создавайте для каждого такого объекта отдельный справочник ПрисоединенныеФайлы. Это обеспечит максимальную производительность, логичное разделение прав доступа и отсутствие избыточных блокировок в системе.

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

← На главную