Куда 1С на самом деле складывает вложения и как их оттуда достать

· 11 мин

Содержание

Прикрепленные файлы в 1С хранятся в одном из двух мест: внутри самой информационной базы (по умолчанию) или в томах на диске — обычных папках на сервере. Где именно в вашей базе, видно в настройке Администрирование → Общие настройки: если там включён флаг «Хранить файлы в томах на диске», вложения лежат в каталогах, перечисленных в списке «Тома хранения файлов». Флаг выключен — файлы находятся в базе: в файловом варианте это файл 1Cv8.1CD, в клиент-серверном — таблицы СУБД.

Ответ одинаков для БП 3.0, ЗУП 3.1, УТ 11, КА и ERP: работу с файлами во всех типовых конфигурациях даёт общая Библиотека стандартных подсистем (БСП). Различаются только объекты-владельцы — документы, контрагенты, сотрудники, — а механизм хранения общий.

Два режима хранения файлов в 1С и как узнать свой

Каждое вложение в 1С состоит из двух частей:

  • 📇 карточка файла — имя, расширение, размер, автор, дата, ссылка на владельца (документ, справочник);
  • 📦 двоичные данные — само содержимое PDF, скана, таблицы Excel.

Карточка всегда хранится в базе. А вот содержимое может лежать в двух местах, и от этого зависит всё остальное: размер базы, состав резервной копии, порядок переноса.

РежимГде содержимоеЧто попадает в выгрузку .dtКогда выбирают
В информационной базеВнутри 1Cv8.1CD или таблиц СУБДВсё, вместе с файламиНебольшой объём вложений, простое резервное копирование
В томах на дискеПапки на диске или сетевом ресурсеТолько карточки, без содержимогоМного сканов, база быстро растёт

Как проверить режим:

  1. Откройте Администрирование → Общие настройки.
  2. Найдите группу настроек, связанную с файлами, и посмотрите на флаг «Хранить файлы в томах на диске».
  3. Если флаг включён, откройте ссылку «Тома хранения файлов» рядом с ним. В карточке каждого тома указан полный путь для Windows и для Linux, максимальный размер и порядок заполнения.

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

Файловая база: вложения внутри 1Cv8.1CD или в соседних папках

В файловом варианте вся информационная база — это один файл 1Cv8.1CD в каталоге базы. Путь к каталогу видно в окне запуска 1С: выделите базу в списке, внизу окна появится строка вида File="D:\Base\Buh".

Если файлы хранятся в базе, отдельно их на диске не найти. Каждый скан, прикреплённый к поступлению, увеличивает 1Cv8.1CD примерно на свой размер. Тысяча сканов по 2 МБ — плюс 2 ГБ к базе.

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

Особенность файлового режима: путь должен видеть каждый компьютер

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

  • ✅ Правильно: сетевой путь \\fileserver\1c_files\buh.
  • ❌ Ошибка: локальный путь D:\1c_files, если база открыта по сети. У коллег на других компьютерах нет вашего диска D:, и прикрепить или открыть файл они не смогут.

Каждому пользователю нужны права на чтение и запись в эту сетевую папку.

Клиент-серверная база: таблицы СУБД и тома на файловом сервере

В клиент-серверном варианте база живёт в MS SQL Server или PostgreSQL. Режим «в базе» означает, что содержимое файлов записано в таблицы СУБД в виде двоичных полей.

Таблицы называются служебными именами вида _Reference123, _InfoRg4567. Чтобы понять, какой объект конфигурации стоит за таблицей, используйте встроенную функцию платформы ПолучитьСтруктуруХраненияБазыДанных(). Она возвращает соответствие «метаданные → имя таблицы и полей в СУБД».

Короткий пример для внешней обработки, выполняемой на сервере:

Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого Строка Из Структура Цикл
    Если СтрНайти(Строка.Метаданные, "Файл") > 0 Тогда
        Сообщить(Строка.Метаданные + " -> " + Строка.ИмяТаблицыХранения);
    КонецЕсли;
КонецЦикла;

Второй параметр Истина возвращает имена в формате СУБД — их потом ищете в отчёте о размерах таблиц на стороне SQL.

Тома в клиент-серверной базе: учётная запись службы

При хранении в томах файлы записывает рабочий процесс сервера 1С, а не компьютер пользователя. Отсюда два требования:

  1. Путь тома указывается так, как его видит сервер 1С. Для общего ресурса — UNC-путь \\nas\1c_volumes\erp.
  2. Права на запись нужны учётной записи, под которой работает служба агента сервера 1С (по умолчанию это USR1CV8). Права пользователя Windows тут ни при чём.

Если сервер 1С работает на Linux, заполните в карточке тома поле с путём для Linux. Путь для Windows программа в этом случае не использует.

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

Как устроены прикрепленные файлы внутри конфигурации

С точки зрения данных вложение — это не одна запись, а несколько связанных объектов. В типовых конфигурациях на БСП картина такая:

  • 📁 Справочник Файлы — общее хранилище карточек файлов. Реквизит ВладелецФайла указывает, к какому объекту файл прикреплён.
  • 📎 Справочники с окончанием ПрисоединенныеФайлы — отдельные хранилища карточек для конкретных владельцев. В Конфигураторе их видно в ветке «Справочники» по поиску слова «ПрисоединенныеФайлы».
  • 🗂 ВерсииФайлов — версии, если для файла ведётся история изменений. Каждая версия хранит своё содержимое отдельно.
  • 💾 ДвоичныеДанныеФайлов — служебный объект, где лежит само содержимое, когда выбран режим «в базе». В зависимости от версии БСП это регистр сведений или справочник.
  • 💽 ТомаХраненияФайлов — справочник томов с путями и лимитами.

Из этого следуют два практических вывода.

Первый: размер вложений надо считать с версиями. Если бухгалтер десять раз переделал договор в Word с включённым версионированием, в базе лежат десять копий.

Второй: карточка и содержимое удаляются по-разному. Пометка на удаление карточки ничего не освобождает. Место освобождается только после удаления помеченных объектов через Администрирование → Обслуживание → Удаление помеченных объектов.

Рабочий каталог пользователя

Когда пользователь открывает файл на редактирование, 1С кладёт копию в рабочий каталог на его компьютере. По умолчанию это папка внутри профиля Windows. Путь и максимальный размер каталога видно в персональных настройках работы с файлами.

Это объясняет частую ситуацию: сотрудник отредактировал документ, закрыл Word, но не нажал «Закончить редактирование». В базе осталась старая версия, а новая — только в его рабочем каталоге. Найти её можно там, пока каталог не очистили.

Как найти и выгрузить вложения из 1С

Один файл

  1. Откройте документ или элемент справочника.
  2. Нажмите кнопку со скрепкой в командной панели формы — откроется список прикреплённых файлов.
  3. Выделите файл и выберите в его меню команду сохранения на диск.

Если не знаете, к какому документу прикреплён файл, откройте общий список файлов через поиск по разделам («Файлы») и отберите по имени или автору. Колонка владельца покажет документ.

Все файлы сразу

Для массовой выгрузки удобнее внешняя обработка. Пример ниже выгружает содержимое всех файлов из справочника Файлы в указанный каталог. Он использует программный интерфейс БСП РаботаСФайлами.ДвоичныеДанныеФайла(), который сам определяет, где лежит содержимое — в базе или в томе.

&НаСервереБезКонтекста
Процедура ВыгрузитьФайлыНаСервере(Каталог)
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |   Файлы.Ссылка КАК Ссылка,
        |   Файлы.Наименование КАК Имя,
        |   Файлы.Расширение КАК Расширение
        |ИЗ
        |   Справочник.Файлы КАК Файлы
        |ГДЕ
        |   НЕ Файлы.ПометкаУдаления");
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Данные = РаботаСФайлами.ДвоичныеДанныеФайла(Выборка.Ссылка, Ложь);
        Если Данные = Неопределено Тогда
            Продолжить;
        КонецЕсли;
        ИмяФайла = СтрШаблон("%1%2_%3.%4", Каталог,
            Выборка.Ссылка.УникальныйИдентификатор(), Выборка.Имя, Выборка.Расширение);
        Данные.Записать(ИмяФайла);
    КонецЦикла;
КонецПроцедуры

Что учесть:

  • 📍 Каталог указывайте с завершающим разделителем: \\nas\export\. Код выполняется на сервере, поэтому папка должна быть доступна службе 1С.
  • 🔑 Уникальный идентификатор в начале имени защищает от перезаписи, если у двух файлов одинаковое имя.
  • 🔤 Если в имени файла есть символы, запрещённые в Windows (/, :, ?), запись упадёт. Перед выгрузкой их стоит заменить.
  • 📎 Для справочников ...ПрисоединенныеФайлы замените имя справочника в запросе — по одному запросу на каждый.

Параметр Ложь во втором аргументе означает: если содержимое не найдено (например, файл удалили из тома вручную), функция вернёт Неопределено, а не прервёт выгрузку ошибкой.

База выросла из-за вложений: как проверить и уменьшить

Признак проблемы — база весит десятки гигабайт, хотя документов немного. Почти всегда виноваты сканы и версии файлов.

Шаг 1. Найти, что занимает место

  • Файловая база. Смотрите размер 1Cv8.1CD в каталоге базы. Штатной раскладки по таблицам у файлового варианта нет, поэтому ориентируйтесь на карточки: у каждой есть реквизит размера, и сумма по справочнику Файлы с версиями покажет, сколько занимают вложения.
  • MS SQL Server. Отчёт «Использование диска по таблицам» в SQL Server Management Studio или процедура sp_spaceused для отдельной таблицы.
  • PostgreSQL. Функция pg_total_relation_size('имя_таблицы').

Самые большие таблицы сопоставьте с объектами 1С через ПолучитьСтруктуруХраненияБазыДанных() из примера выше.

Шаг 2. Выбрать способ уменьшения

СпособЧто даётРиски
Включить тома и перенести в них старые файлыБаза уменьшается на объём вложенийТома нужно отдельно включить в резервное копирование
Удалить лишние версии файловОсвобождает место без потери последних редакцийСтарые редакции пропадут безвозвратно
Удалить ненужные вложения с пометкой и очисткой помеченныхУбирает мусор, дубли скановНужно согласовать с владельцами документов

Перенос уже существующих файлов из базы в тома запускается из списка «Тома хранения файлов»: найдите в его командной панели или меню «Ещё» команду переноса файлов между типами хранения. Операция долгая — на сотнях гигабайт идёт часами, запускайте её вне рабочего времени.

Шаг 3. Вернуть место на диске

Удаление данных внутри базы ещё не уменьшает файл на диске.

  • Файловая база: запустите Конфигуратор → Администрирование → Тестирование и исправление с флагом сжатия таблиц информационной базы. Нужен монопольный доступ: все пользователи должны выйти.
  • MS SQL Server: освобождённое место переиспользуется базой. Сжатие файла данных (DBCC SHRINKFILE) делайте только если место действительно нужно под другие задачи — оно фрагментирует индексы.
  • PostgreSQL: место возвращает VACUUM FULL по таблице, но он блокирует таблицу на время работы.

Перед переносом файлов и сжатием сделайте резервную копию базы и, если тома уже есть, копию папок томов. Остановка или обрыв переноса посередине без копии — риск потерять часть вложений.

Перенос прикрепленных файлов в другую базу и на новый сервер

Как переносить, зависит от режима хранения.

Файлы в базе. Выгрузка .dt через Конфигуратор (Администрирование → Выгрузить информационную базу) уносит всё вместе с вложениями. Загрузка в новую базу восстановит их полностью. Резервная копия СУБД (бэкап SQL) — тоже.

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

Порядок переноса базы с томами:

  1. Выгоните пользователей и сделайте .dt или бэкап СУБД.
  2. Скопируйте папки томов целиком, сохраняя структуру подкаталогов. Ничего не переименовывайте внутри.
  3. Загрузите базу на новом месте.
  4. Откройте «Тома хранения файлов» и поправьте пути в карточках томов на новые. Для сервера на Linux — поле пути для Linux.
  5. Откройте несколько старых и новых файлов, чтобы убедиться, что пути верные.

Для проверки целостности тома в БСП есть отчёт, который сверяет карточки с реальными файлами на диске. Его можно открыть из карточки тома.

Копия базы для тестов: главная ловушка

Частый сценарий: администратор развернул копию рабочей базы для обновления или обучения. Копия унаследовала пути томов и пишет в те же папки, что и рабочая база. Удаление файлов в тестовой базе удалит их и в рабочей.

Поэтому сразу после загрузки копии:

Тестовая копия базы с томами
Выполнено: 0 / 4

Перенос между разными конфигурациями

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

В распределённой информационной базе (РИБ) файлы из томов передаются в узлы средствами БСП, но объём сообщений обмена растёт. Для больших архивов сканов лучше настроить в узле свой том и не передавать архив целиком при каждой начальной синхронизации.

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

Можно ли хранить часть файлов в базе, а часть в томах?
Да. Флаг «Хранить файлы в томах на диске» действует только на новые файлы. Старые остаются в базе, пока их не перенести вручную.
Что будет, если удалить файл из папки тома через Проводник?
Карточка в 1С останется, но при открытии появится ошибка: файл не найден. Восстановить содержимое можно только из резервной копии тома.
Попадают ли файлы из томов в резервную копию .dt?
Нет. В .dt только карточки и сведения о том, в каком томе лежит файл. Папки томов копируйте отдельно, в тот же момент, что и базу.
Можно ли положить том на облачный диск или NAS?
NAS по сетевому пути подходит, если служба 1С имеет к нему права на запись. Папки облачных клиентов синхронизации для томов не годятся: они могут заблокировать или подменить файл во время записи.
Почему после удаления вложений база не уменьшилась?
Удаление освобождает место внутри файла базы, но сам файл не сжимается. Для файловой базы нужно тестирование и исправление со сжатием таблиц, для СУБД — средства самой СУБД.