При активной работе с номенклатурой, сериями и прикрепленными документами объем присоединенных файлов в базе 1С может составлять десятки гигабайт. Размещение бинарных данных внутри базы данных (в реквизитах с типом ХранилищеЗначения) неизбежно ведет к раздуванию таблиц СУБД, сильной фрагментации, увеличению размера журналов транзакций и существенному замедлению процессов создания резервных копий.
Разберем, как правильно организовать хранение файлов во внешнем файловом хранилище, избежать ошибок при проектировании каталогов и обеспечить высокую скорость работы системы.
Первая идея, которая часто возникает при проектировании — воссоздать на файловом сервере такую же структуру папок, как в справочнике 1С (например, Папка Номенклатуры / Серия / Файлы). Однако у этого подхода есть два существенных недостатка:
Один из самых надежных и распространенных подходов — отвязать физическое расположение файлов на диске от названий и иерархии элементов в 1С. Для этого используется уникальный идентификатор объекта (GUID), который генерируется при создании записи в 1С и никогда не меняется.
Чтобы в одной папке не скапливались сотни тысяч элементов, каталог файлового хранилища разбивают на подпапки по первым символам GUID. Проанализируем пример формирования пути к файлу:
Функция ПолучитьПутьКФайлу(ИмяФайла, УникальныйИдентификатор)
// Преобразуем GUID в строку и удаляем дефисы
ИдентификаторСтр = СтрЗаменить(Строка(УникальныйИдентификатор), "-", "");
// Выделяем первые символы для подкаталогов
Подпапка1 = Лев(ИдентификаторСтр, 2);
Подпапка2 = Сред(ИдентификаторСтр, 3, 2);
КаталогФайла = "C:\FileStorage\" + Подпапка1 + "\" + Подпапка2;
СоздатьКаталог(КаталогФайла);
Возвратить КаталогФайла + "\" + ИмяФайла;
КонецФункции
При такой схеме путь к файлу элемента с GUID abcd1234-5678-90ab-cdef-1234567890ab будет выглядеть следующим образом: C:\FileStorage\ab\cd\имя_файла.pdf. Это гарантирует равномерное распределение файлов по каталогам и мгновенную работу файловой системы.
Если для одного и того же объекта или разных серий номенклатуры часто загружаются идентичные документы (например, сертификаты или инструкции), целесообразно использовать хранение по хэш-сумме файла (MD5 или SHA-256).
Рассмотрим порядок работы этого алгоритма:
D41D8CD98F00B204E9800998ECF8427E)....\D4\1D\D41D8CD98F00B204E9800998ECF8427E.ext.Главный плюс данного метода — дедупликация данных. Если один и тот же файл прикрепляется к 100 разным сериям номенклатуры, на диске он будет сохранен в единственном экземпляре, а элементы в 1С будут лишь ссылаться на его хэш.
Для крупных информационных систем хранение файлов в общих сетевых папках (SMB/UNC) со временем становится узким местом. В этом случае правильным решением является использование S3-хранилища (например, MinIO).
Преимущества объектного хранилища:
HTTPСоединение по протоколу HTTP/HTTPS.При организации файлового хранилища важно учитывать системные настройки сервера приложений 1С:
usr1cv8) должна иметь полные права (чтение, запись, изменение) на целевую сетевую папку или локальный каталог. При запуске службы от имени LOCAL SERVICE доступ к сетевым ресурсам по UNC-пути будет заблокирован.rphost) при скачивании пользователями крупных файлов, можно использовать веб-сервер (Nginx или IIS). 1C генерирует временно подписанную ссылку, а выдача файла клиенту происходит напрямую веб-сервером.