При проектировании информационных систем на платформе 1С:Предприятие 8, особенно при разработке собственных решений или кастомизации типовых конфигураций на базе Библиотеки стандартных подсистем (БСП), разработчики часто задаются вопросом: почему механизм присоединенных файлов реализован именно через создание отдельного подчиненного справочника для каждого типа документа? На первый взгляд, хранение путей к файлам или самих двоичных данных в табличной части (ТЧ) самого документа или в общем регистре сведений (РС) кажется более простым и очевидным решением. Однако за архитектурой БСП стоят глубокие технологические и эксплуатационные причины.
В этой статье мы подробно проанализируем ситуацию, сравним различные варианты хранения файлов и выясним, почему использование индивидуальных справочников является наиболее оптимальным и производительным решением для средних и крупных корпоративных систем.
Рассмотрим, что происходит на уровне платформы 1С и СУБД, когда мы работаем с документом. Одним из ключевых методов для изменения данных объекта является метод ПолучитьОбъект(). При его вызове платформа считывает из базы данных в оперативную память весь объект целиком, включая все его реквизиты и табличные части.
Если бы метаданные файлов (или, что еще хуже, сами двоичные данные в виде ХранилищеЗначений) хранились в табличной части документа, то при каждом вызове ПолучитьОбъект() (например, при проведении документа, изменении его статуса или программной обработке в фоновых заданиях) сервер 1С тратил бы колоссальные ресурсы на чтение и передачу тяжелых данных по сети. Даже если в ТЧ хранятся только текстовые пути к файлам или ссылки, размер объектного кэша все равно неоправданно раздувается. Вынесение файлов в отдельную сущность позволяет документу оставаться «легковесным» и быстро обрабатываться в транзакциях.
В реальном бизнесе бухгалтерский и управленческий учет жестко регламентирован по периодам. После закрытия месяца или квартала устанавливается дата запрета редактирования. Это означает, что документы за прошлые периоды изменять категорически запрещено, чтобы не нарушить закрытую отчетность.
Однако на практике оригиналы первичных документов (сканы актов, накладных, договоров с синими печатями) могут поступать от контрагентов с задержкой в несколько недель или даже месяцев. Представим ситуацию: период закрыт, но бухгалтеру необходимо прикрепить скан-копию к документу «Поступление товаров и услуг».
В крупных компаниях права доступа к информации строго регламентированы. Настройка ограничений доступа на уровне записей (RLS — Record Level Security) — это ресурсоемкая операция для СУБД.
Разберем две типичные проблемы, которые успешно решаются разделением справочников:
JOIN) со всеми таблицами документов в базе данных. Создание индивидуального справочника присоединенных файлов для каждого типа документа (например, РеализацияТоваровУслугПрисоединенныеФайлы, ДоговорыКонтрагентовПрисоединенныеФайлы) позволяет СУБД выполнять проверку RLS по одной конкретной небольшой таблице, что критически важно для быстродействия системы.Иногда возникает идея хранить связи файлов и документов в регистре сведений. На первый взгляд это кажется удобным, но регистр сведений (не подчиненный регистратору) не является объектной сущностью. У записи регистра нет уникального идентификатора (ссылки типа UUID).
Использование справочника дает фундаментальные преимущества благодаря объектной модели:
Современные стандарты работы с документами требуют ведения истории изменений файлов. Механизм БСП поддерживает полноценное версионирование файлов. При изменении прикрепленного файла (например, проекта договора в формате Word) система не заменяет текущий файл, а создает его новую версию.
В справочнике присоединенных файлов это реализуется элегантно: создается подчиненный справочник (или подчиненная табличная часть самого справочника файлов) для хранения версий. Реализовать аналогичную логику внутри табличной части основного документа без создания дублирующих строк и усложнения структуры метаданных практически невозможно.
Проанализируем технические аспекты работы баз данных под нагрузкой:
Стоит отметить, что архитектура БСП устроена очень гибко. Сам справочник присоединенных файлов хранит только **метаданные** (имя файла, расширение, размер, автора, дату создания, статус блокировки для редактирования). Это позволяет мгновенно получать списки файлов, выполнять по ним поиск и строить отчеты.
Сами же «тяжелые» двоичные данные могут храниться тремя способами (настраивается в системе за пару кликов):
ДвоичныеДанныеФайлов (для баз данных SQL, где администраторы предпочитают хранить все в одном бэкапе).Такой подход обеспечивает идеальный компромисс между производительностью базы данных и удобством работы пользователей.
Использование отдельного справочника присоединенных файлов для каждого типа документа в 1С — это не усложнение архитектуры, а выверенное промышленное решение. Оно гарантирует: