Хранение присоединённых файлов в 1С 8.3: как выбрать место и настроить его
Содержание
Для рабочей базы с сотней и больше пользователей файлы в 1С лучше хранить в томах на диске, а не в информационной базе: переключатель находится в Администрирование → Настройки работы с файлами, там же создаются сами тома. Хранить файл внутри базы допустимо только в маленьких файловых базах, где присоединённых документов немного и бэкап делается одним .dt.
Третий вариант — внешнее или облачное хранилище — платформа «из коробки» не поддерживает как основное место хранения. Его подключают либо синхронизацией папок через WebDAV, либо собственным кодом через HTTPСоединение. Ниже разобраны все три схемы: где лежит файл физически, как настроить, что с производительностью и что сломается первым.
Файлы внутри информационной базы: когда это нормально
По умолчанию любая типовая конфигурация на Библиотеке стандартных подсистем (БП 3.0, ЗУП 3.1, УТ 11, ERP, УНФ) кладёт присоединённые файлы прямо в базу. Технически это регистр сведений
с двоичными данными файлов, а само содержимое упаковано в ХранилищеЗначения со сжатием.
Что получаем в результате:
- 📦 файл едет вместе с базой: один
.dtили один бэкап SQL — и всё на месте; - 🔒 права на файл проверяет сама 1С, к диску сервера доступ не нужен;
- 🐢 каждая выгрузка
.dtи каждое тестирование и исправление перемалывают гигабайты сканов; - 📈 таблицы с двоичными данными растут быстрее всех остальных, в PostgreSQL они уходят в TOAST-таблицы и тянут за собой
VACUUM.
Практический порог: пока объём файлов меньше 2–3 ГБ и база файловая, оставляйте как есть. В клиент-серверном варианте с MS SQL или PostgreSQL переходите на тома, как только файлы перевалили за 5–10 ГБ или начались жалобы на долгое открытие вложений.
Посмотреть, сколько места съели файлы, можно без сторонних инструментов: в консоли SQL отсортируйте таблицы по размеру. Таблица с именем вида _InfoRg*, занимающая первое место с большим отрывом, — это и есть двоичные данные файлов.
Тома на диске: файловая система сервера
Том — это каталог, в который сервер 1С складывает файлы вместо базы. В базе остаётся карточка файла (имя, размер, автор, версия) и ссылка на том с относительным путём. Сам файл лежит на диске в подкаталогах по годам и месяцам.
Где включается и как добавить том
- Откройте
Администрирование → Настройки работы с файлами. - Установите флажок Хранить файлы в томах на диске.
- Перейдите по ссылке Тома хранения файлов и нажмите Создать.
- Заполните Полный путь Windows в формате UNC:
\\srv-files\1c-volumes\bp30\. Если сервер 1С работает на Linux, заполните Полный путь Linux:/mnt/1c-volumes/bp30/. - Укажите Максимальный размер тома в мегабайтах и Порядок заполнения — по нему система выбирает, куда класть следующий файл, если томов несколько.
- Запишите том. Кнопка проверки доступности каталога в форме тома покажет, видит ли сервер путь.
Путь должен быть сетевым (UNC), даже если каталог лежит на том же сервере. Файл записывает не ваш клиент, а рабочий процесс rphost от имени служебной учётной записи (USR1CV8 в Windows или usr1cv8 в Linux). Локальный путь вида D:\Volumes\ сработает только до первого запуска с другого сервера кластера или из веб-клиента.
Права на каталог тома
Служебной учётной записи сервера 1С нужны права на чтение, запись и удаление в каталоге тома. Пользователям 1С доступ к каталогу не нужен и давать его не стоит — иначе файлы будут удалять мимо базы.
| Кому | Права на каталог тома |
|---|---|
Учётная запись службы 1С (USR1CV8) | Чтение, запись, изменение, удаление |
| Администраторы сервера | Полный доступ (для бэкапа и миграции) |
| Пользователи 1С | Нет доступа |
| Учётная запись резервного копирования | Только чтение |
Перенос уже накопленных файлов
Флажок «Хранить файлы в томах» действует только на новые файлы. Старые остаются в базе, пока вы не запустите перенос: в той же форме настроек после включения томов появляется ссылка Перенести файлы в тома. Обработка идёт пакетами, её можно прервать и продолжить позже.
Перенос 20 ГБ сканов по сети на обычном SATA-диске занимает порядка 1–2 часов. Запускайте вечером: обработка держит транзакции и мешает пользователям открывать файлы.
Внешние хранилища и облака: что реально работает
Платформа 1С не умеет использовать S3, Яндекс Диск или SharePoint как том напрямую. Варианты подключения, которые встречаются в практике, выстраиваются по сложности.
Сетевая папка на NAS или SMB-шаре
Самый простой «внешний» вариант — том на отдельном файловом сервере или NAS. Для 1С это обычный том с UNC-путём, разница только в том, что диск не на сервере приложений. Подходит для 99% организаций.
Нюанс: задержка сети. Если NAS в другом здании и пинг выше 5–10 мс, открытие PDF на 20 МБ станет заметно медленнее. Держите тома в той же серверной стойке, что и rphost.
Синхронизация папок через WebDAV
В БСП есть механизм синхронизации файлов с облачными сервисами по WebDAV: Администрирование → Настройки работы с файлами → Синхронизация файлов с облачными сервисами. Указываете адрес сервиса, учётные данные, выбираете папки с файлами — и 1С по расписанию зеркалит их наружу.
Это не замена тома: файл всё равно хранится в базе или томе, а в облако уходит копия. Зато пользователи без 1С получают доступ к документам через Яндекс Диск, Nextcloud или ownCloud.
S3-совместимое хранилище через HTTPСоединение
Если нужна настоящая выгрузка в объектное хранилище (Yandex Object Storage, VK Cloud, MinIO на своём сервере), пишут собственный модуль: HTTPСоединение + HTTPЗапрос с методом PUT, подпись запроса по схеме AWS Signature V4. Это 200–400 строк кода и неделя отладки для одного разработчика.
Дешевле поставить между 1С и облаком небольшой прокси-сервис на Python или Go: 1С делает обычный PUT на внутренний адрес без подписи, сервис переподписывает и отправляет в S3. Так же решают и обратную задачу — выдачу ссылок на скачивание.
Не кладите в облако файлы с персональными данными без договора с провайдером об обработке ПДн и без шифрования на стороне 1С. Для бухгалтерских первичных документов это прямое нарушение требований к хранению.
Какой вариант выбрать: сравнение по скорости и надёжности
.dt, никаких прав на каталоги. Переходить на тома бессмысленно.Числа ниже — ориентир по типичной базе БП 3.0 с 30 ГБ файлов на PostgreSQL 15 и SATA SSD.
| Критерий | В базе | Тома на диске | Облако через прокси |
|---|---|---|---|
| Открытие PDF 10 МБ | 1,5–3 с | 0,5–1 с | 2–5 с (зависит от канала) |
| Размер бэкапа СУБД | +30 ГБ | без файлов | без файлов |
Выгрузка .dt | 40–60 мин | 5–8 мин | 5–8 мин |
| Риск потерять файлы | Низкий | Средний: том бэкапят отдельно | Зависит от провайдера |
| Администрирование | Ничего | Права, место, бэкап | Код, ключи доступа, договор |
Главный выигрыш томов не в скорости открытия, а в обслуживании базы: реструктуризация, тестирование и исправление, перенос на другой сервер перестают зависеть от объёма сканов.
Работа с файлами из кода: клиент, сервер, временное хранилище
Разработчику важно понимать одно правило платформы: файл с диска клиента нельзя прочитать серверным кодом напрямую. Его сначала передают на сервер во временное хранилище, а уже оттуда кладут в базу или в том.
Передать файл с клиента на сервер
Современный способ — асинхронный НачатьПомещениеФайла. Он работает в тонком и веб-клиенте без всплывающих предупреждений.
&НаКлиенте
Процедура ЗагрузитьСкан(Команда)
Оповещение = Новый ОписаниеОповещения("ПослеПомещенияФайла", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПослеПомещенияФайла(Результат, Адрес, ВыбранноеИмя, ДопПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
СохранитьНаСервере(Адрес, ВыбранноеИмя);
КонецПроцедуры
&НаСервере
Процедура СохранитьНаСервере(Адрес, ИмяФайла)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
Хранилище = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
// дальше — запись Хранилище в реквизит справочника или ресурс регистра
КонецПроцедуры
Параметр УникальныйИдентификатор формы в НачатьПомещениеФайла обязателен: без него временное хранилище живёт только до конца текущего серверного вызова, и при следующем обращении вы получите пустой адрес.
Записать файл в том и отдать клиенту
На сервере файл превращается в обычный файл на диске через ДвоичныеДанные.Записать():
&НаСервере
Процедура ЗаписатьВТом(ДвоичныеДанные, ПутьКаталогаТома, ИмяФайла)
Каталог = Новый Файл(ПутьКаталогаТома);
Если Не Каталог.Существует() Тогда
СоздатьКаталог(ПутьКаталогаТома);
КонецЕсли;
ДвоичныеДанные.Записать(ПутьКаталогаТома + ИмяФайла);
КонецПроцедуры
Чтобы отдать файл пользователю, на сервере делаете ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор), передаёте адрес на клиент и вызываете НачатьПолучениеФайла или ПолучитьФайл(Адрес, ИмяФайла, Истина).
Временные файлы на сервере
Для промежуточной обработки (конвертация, распаковка архива) используйте ПолучитьИмяВременногоФайла("pdf") — платформа сама выберет каталог временных файлов рабочего процесса. После работы файл удаляйте через УдалитьФайлы(ПутьКФайлу), иначе каталог %TEMP% службы 1С за месяц вырастет на десятки гигабайт.
В типовых конфигурациях не изобретайте своё хранилище: общий модуль РаботаСФайлами из БСП умеет добавлять файл к владельцу, выбирать том по порядку заполнения и извлекать текст для полнотекстового поиска. Вызов одной функции экономит всю логику выше.
Безопасность файлов и резервное копирование томов
Переход на тома переносит ответственность за сохранность файлов с СУБД на администратора. Бэкап базы данных не содержит ни одного файла из тома — там только ссылки.
Что должно быть в регламенте
- 💾 бэкап каталога тома запускается сразу после бэкапа СУБД, чтобы ссылки и файлы совпадали по времени;
- 🔁 полная копия тома раз в неделю плюс инкрементальная ежедневно — объём сканов меняется медленно, копировать 200 ГБ каждый день не нужно;
- 🧪 раз в квартал восстановление тестовой базы и проверка, что вложения открываются;
- 📜 в томе включён аудит удаления на уровне NTFS или
auditd, чтобы понять, кто стёр каталог за 2024 год.
Ограничения в настройках 1С
В той же форме Настройки работы с файлами настраиваются два фильтра, которые закрывают большинство дыр:
- Максимальный размер файла — по умолчанию 50 МБ. Поднимайте до 200–300 МБ только для баз с проектной документацией; в бухгалтерии сканы редко больше 10 МБ.
- Запрещённые расширения — к стандартному списку (
exe,bat,cmd,js,vbs) добавьтеps1,msi,scr,lnk. 1С хранит файл как данные и не запускает его, но пользователь откроет вложение двойным кликом, а это уже запуск.
Отключение флажка «Хранить файлы в томах» не возвращает файлы в базу. Файлы останутся в томе, а новые пойдут в базу. Обратного переноса в типовых обработках нет, пишется отдельно.
Шифрование и доступ
Для сканов с персональными данными включайте шифрование тома средствами ОС: BitLocker на Windows или LUKS на Linux. Шифрование на уровне 1С (электронная подпись и шифрование в БСП) защищает отдельные файлы, но ключи приходится раздавать каждому пользователю.
Права внутри 1С работают на уровне владельца файла: кто видит документ «Поступление», тот видит и его вложения. Отдельных прав «на файл» в типовых решениях нет, это надо учитывать при проектировании.
Что чаще всего ломается при хранении файлов
Администрирование → Настройки работы с файлами или сожмите скан до 300 dpi..zip, либо уберите расширение из списка, если оно нужно для работы.НачатьПомещениеФайла и НачатьПолучениеФайла; старые синхронные вызовы падают молча.ПолучитьИмяВременногоФайла и не удаляет их. Найдите такие места в расширениях и внешних обработках, добавьте УдалитьФайлы в блок Попытка … Исключение.Отдельная история — файлы, удалённые прямо с диска мимо 1С. В базе карточка остаётся, при открытии пользователь получает ошибку, а в списке файл выглядит живым. Восстановить его можно только из бэкапа тома за нужную дату, по пути из карточки файла.
Частые вопросы
Можно ли использовать несколько томов одновременно?
Что будет с файлами в томе, если выгрузить базу в `.dt` и загрузить на другой сервер?
.dt попадут только карточки. Каталог тома нужно скопировать на новый сервер отдельно и поправить путь в карточке тома, если он изменился.Хранятся ли версии файла в томе отдельными файлами?
Можно ли указать локальный путь `D:\Volumes` вместо UNC для тестовой базы?
rphost найдёт локальный диск. Но при переносе настройки в рабочий кластер с двумя серверами половина файлов станет недоступна.