Хранение присоединённых файлов в 1С 8.3: как выбрать место и настроить его

· 11 мин

Содержание

Для рабочей базы с сотней и больше пользователей файлы в 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С складывает файлы вместо базы. В базе остаётся карточка файла (имя, размер, автор, версия) и ссылка на том с относительным путём. Сам файл лежит на диске в подкаталогах по годам и месяцам.

Где включается и как добавить том

  1. Откройте Администрирование → Настройки работы с файлами.
  2. Установите флажок Хранить файлы в томах на диске.
  3. Перейдите по ссылке Тома хранения файлов и нажмите Создать.
  4. Заполните Полный путь Windows в формате UNC: \\srv-files\1c-volumes\bp30\. Если сервер 1С работает на Linux, заполните Полный путь Linux: /mnt/1c-volumes/bp30/.
  5. Укажите Максимальный размер тома в мегабайтах и Порядок заполнения — по нему система выбирает, куда класть следующий файл, если томов несколько.
  6. Запишите том. Кнопка проверки доступности каталога в форме тома покажет, видит ли сервер путь.

Путь должен быть сетевым (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С. Для бухгалтерских первичных документов это прямое нарушение требований к хранению.

Какой вариант выбрать: сравнение по скорости и надёжности

Где у вас база и сколько в ней файлов?

Числа ниже — ориентир по типичной базе БП 3.0 с 30 ГБ файлов на PostgreSQL 15 и SATA SSD.

КритерийВ базеТома на дискеОблако через прокси
Открытие PDF 10 МБ1,5–3 с0,5–1 с2–5 с (зависит от канала)
Размер бэкапа СУБД+30 ГБбез файловбез файлов
Выгрузка .dt40–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С работают на уровне владельца файла: кто видит документ «Поступление», тот видит и его вложения. Отдельных прав «на файл» в типовых решениях нет, это надо учитывать при проектировании.

Что чаще всего ломается при хранении файлов

Диагностика: выберите симптом

Отдельная история — файлы, удалённые прямо с диска мимо 1С. В базе карточка остаётся, при открытии пользователь получает ошибку, а в списке файл выглядит живым. Восстановить его можно только из бэкапа тома за нужную дату, по пути из карточки файла.

Частые вопросы

Можно ли использовать несколько томов одновременно?
Да. Система заполняет их по полю «Порядок заполнения»: пока первый том не достиг лимита, файлы идут в него, потом во второй. Удобно, когда тома на разных дисках.
Что будет с файлами в томе, если выгрузить базу в `.dt` и загрузить на другой сервер?
В .dt попадут только карточки. Каталог тома нужно скопировать на новый сервер отдельно и поправить путь в карточке тома, если он изменился.
Хранятся ли версии файла в томе отдельными файлами?
Да, каждая версия — отдельный файл в томе. Если версионирование включено, объём растёт пропорционально числу правок; для часто редактируемых DOCX это заметно.
Можно ли указать локальный путь `D:\Volumes` вместо UNC для тестовой базы?
На одном сервере в тестовой базе это сработает, потому что rphost найдёт локальный диск. Но при переносе настройки в рабочий кластер с двумя серверами половина файлов станет недоступна.
Поддерживает ли 1С:Фреш хранение файлов в томах?
В сервисе 1С:Фреш тома настраивает провайдер, у пользователя этой настройки нет. Файлы хранятся на стороне сервиса, квота на объём файлов входит в тариф.