Куда 1С 8.3 физически кладёт приложенные к документам сканы и файлы

· 10 мин

Содержание

Присоединенные файлы в 1С 8.3 хранятся в одном из двух мест: внутри самой информационной базы или в томах на диске — обычных папках на сервере или в сетевом ресурсе. Какой вариант включён, задаёт администратор в настройках программы. По умолчанию в типовых конфигурациях на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11) файлы пишутся в базу.

Если файлы в базе, отдельной папки со сканами вы не найдёте. В файловом варианте они лежат внутри 1Cv8.1CD, в клиент-серверном — в таблицах СУБД. Если включены тома, файлы лежат на диске, а в базе остаются только карточки со ссылкой на путь.

Где лежат файлы в файловой базе

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

Когда тома не настроены, каждый приложенный скан, договор или фотография сохраняется в этот единственный файл. Отсюда типичная картина:

  • 📈 база весит 15–30 ГБ, хотя документов в ней немного;
  • 🐢 копирование и архивация каталога идут долго;
  • ⚠️ файловая база упирается в практические пределы: при размере в десятки гигабайт растёт риск повреждения и замедляется любая операция с таблицами.

Внутри 1Cv8.1CD файлы не лежат «как есть». Их двоичные данные упакованы в служебные структуры платформы, поэтому достать скан, открыв .1CD архиватором или редактором, не получится. Выгружать нужно средствами самой 1С (см. раздел про выгрузку ниже).

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

Файловую базу проще всего «разгрузить» именно переносом файлов в том. Сама 1Cv8.1CD после этого уменьшается не сразу — нужно сжатие таблиц в режиме тестирования и исправления.

Присоединенные файлы в клиент-серверной базе на SQL

В клиент-серверном варианте данные лежат в базе MS SQL Server или PostgreSQL. Присоединенный файл — это запись в таблице справочника и запись с двоичными данными в таблице регистра.

Таблицы в СУБД называются не по-русски, а служебными именами:

Объект 1СТаблица в СУБД
Справочник_Reference<номер>
Регистр сведений_InfoRg<номер>
Реквизит или ресурсполе _Fld<номер>

Двоичные данные хранятся в поле типа varbinary(max) или image в MS SQL и bytea в PostgreSQL. Это сериализованное хранилище значения, обычно сжатое. Прочитать из него PDF простым SELECT не выйдет: нужно повторить формат сериализации платформы.

Не меняйте и не удаляйте записи в таблицах 1С прямо через СУБД. Платформа не узнает об изменении, ссылки в карточках останутся, а база получит несогласованные данные, которые потом не всегда лечатся тестированием.

Чтобы понять, какая таблица СУБД соответствует какому объекту, используйте встроенную функцию платформы ПолучитьСтруктуруХраненияБазыДанных(). Её можно выполнить в любой консоли запросов или кода, запущенной в режиме 1С:Предприятие под администратором:

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

Второй параметр Истина возвращает имена таблиц так, как они названы в СУБД. С таким списком DBA может посчитать, сколько места занимает каждая таблица.

Для MS SQL размеры таблиц показывает стандартная процедура:

EXEC sp_spaceused '_InfoRg12345';

Подставьте реальное имя таблицы из вывода функции выше.

Какие объекты конфигурации отвечают за файлы

Механизм присоединенных файлов в типовых конфигурациях даёт Библиотека стандартных подсистем (БСП). Объекты называются одинаково во всех конфигурациях на ней.

ОбъектЧто в нём
Справочники <Владелец>ПрисоединенныеФайлы, например КонтрагентыПрисоединенныеФайлыКарточки файлов, привязанных к объекту: имя, расширение, размер, автор, тип хранения, ссылка на том
Справочник Файлы и ВерсииФайловФайлы в папках и их версии (там, где используется работа с версиями)
Регистр сведений ДвоичныеДанныеФайлов (в старых версиях БСП — ХранимыеФайлыВерсий)Само содержимое файла, когда он хранится в базе
Справочник ТомаХраненияФайловСписок томов: путь для Windows и Linux, предельный размер, порядок заполнения

В карточке файла важны три реквизита:

  1. 🗂 ТипХраненияФайла — «В информационной базе» или «В томах на диске».
  2. 💾 Том — ссылка на элемент справочника томов.
  3. 📍 ПутьКФайлу — путь внутри тома, относительно его корня.

Полный путь на диске = путь тома для нужной ОС + ПутьКФайлу. По этой паре всегда можно найти конкретный скан на сервере, даже если программа его не открывает.

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

Как найти базу и путь к тому хранения

Путь к файлам зависит от того, где они лежат. Ниже — три сценария, от простого к сложному.

Файлы в томах: путь в справочнике томов

  1. Откройте Администрирование → Общие настройки.
  2. В блоке настроек работы с файлами найдите способ хранения и ссылку на список томов хранения файлов.
  3. Откройте нужный том: в карточке указан полный путь для Windows-сервера и для Linux-сервера.

Путь обычно сетевой, например \\fs01\1c_files\buh\. Именно туда физически пишутся новые файлы.

Файлы в базе: где находится сама база

Для файловой базы путь виден в окне запуска (строка File=). Для клиент-серверной — строка Srvr="app01";Ref="buh", где Ref — имя базы в кластере, а не в СУБД.

Имя базы в СУБД и адрес сервера СУБД смотрят в консоли администрирования серверов 1С:

  1. Запустите оснастку «Администрирование серверов 1С Предприятия».
  2. Раскройте кластер → «Информационные базы».
  3. Откройте свойства нужной базы.
  4. В полях «Сервер баз данных» и «База данных» — адрес SQL-сервера и имя базы в нём.

Если консоль не открывается после обновления платформы, зарегистрируйте radmin.dll нужной версии из папки bin платформы (команда regsvr32 radmin.dll от имени администратора).

Сервер работает под отдельной учётной записью

Файлы в том пишет не компьютер пользователя, а процесс, который выполняет серверный код:

  • 🖥 в клиент-серверном варианте — рабочий процесс кластера, запущенный под учётной записью службы (часто USR1CV8);
  • 💻 в файловом варианте — процесс 1С на компьютере каждого пользователя (или веб-сервер при веб-публикации).

Поэтому путь к тому указывают в формате UNC (\\сервер\папка), а не подключённым диском Z:\. У службы 1С своего диска Z: нет, и запись упадёт с ошибкой доступа.

Перенос в тома и контроль размера базы

Если база разрослась из-за сканов, план такой.

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

2. Подготовьте папку тома. Создайте общий ресурс, дайте учётной записи службы 1С права на чтение, запись и изменение. Пользователям доступ к папке не нужен.

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

4. Перенесите старые файлы. В БСП для этого есть обработка «Перенос файлов в тома». Найдите её через Главное меню → Все функции → Обработки. Она переписывает содержимое из регистра на диск и меняет тип хранения в карточках.

5. Сожмите базу.

  • Файловый вариант: конфигуратор → Администрирование → Тестирование и исправление, флажок «Сжатие таблиц информационной базы».
  • MS SQL: сжатие файла данных средствами СУБД после переноса (DBCC SHRINKFILE), лучше силами DBA.

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

Для текущей уборки есть ещё два инструмента:

  • 🧹 «Очистка ненужных файлов» — удаляет старые версии и файлы по заданным правилам; есть одноимённое регламентное задание;
  • 🔍 проверка целостности тома (команда в списке томов) — показывает файлы, которые есть в базе, но пропали с диска, и «лишние» файлы на диске без карточки в базе.

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

Перед переносом файлов в тома
Выполнено: 0 / 5

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

Способ зависит от объёма.

СпособКогда подходитОграничения
«Сохранить как» из карточки1–10 файловВручную, по одному
Копирование из папки томаФайлы уже в томахИмена на диске служебные, нужна сверка с базой
Внешняя обработкаСотни и тысячи файловНужны права администратора и тест на копии

Вручную из карточки

Откройте документ или справочник, перейдите по ссылке присоединенных файлов (значок скрепки в командной панели формы), выделите файл и сохраните его на компьютер командой сохранения из контекстного меню.

Массово — обработкой

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

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

Что важно в этом примере:

  • 🔢 порядковый номер в начале имени защищает от перезаписи, если у двух файлов одинаковое наименование;
  • 🚫 второй параметр Ложь не прерывает выгрузку, если файла нет в томе: такие записи пропускаются;
  • 🖥 код выполняется на сервере, поэтому Каталог — путь на сервере 1С (или на компьютере пользователя в файловом варианте), а не на вашем ноутбуке.

Для других владельцев замените имя справочника: ДоговорыКонтрагентовПрисоединенныеФайлы, РеализацияТоваровУслугПрисоединенныеФайлы и так далее. Полный список таких справочников видно в дереве конфигурации по слову «ПрисоединенныеФайлы».

Копирование тома

Если файлы уже в томах, папку тома можно скопировать целиком — это самый быстрый способ получить все файлы. Но имена и структура подкаталогов там служебные. Чтобы понять, какой файл к какому документу относится, выгрузите из базы список карточек с реквизитами Владелец и ПутьКФайлу.

Частые ошибки при работе с хранилищем файлов

  • ❌ Том указан как подключённый диск. У пользователя Z:\ есть, у службы 1С — нет. Файлы не сохраняются, в журнале регистрации ошибки доступа. Решение — UNC-путь.
  • ❌ Включили тома и ждут, что база похудеет. Старые файлы остаются в базе, пока их не перенесёт обработка, а место освобождается только после сжатия.
  • ❌ Чистят папку тома вручную. Удалённый в проводнике файл продолжает числиться в базе, пользователь получает ошибку при открытии. Удаляйте файлы через 1С: пометка удаления и затем удаление помеченных объектов.
  • ❌ Копируют базу без тома. При переносе на новый сервер или разворачивании копии из .dt не забудьте папку тома и поправьте путь в карточке тома.
  • ❌ Тестовая копия пишет в боевой том. Развернули копию базы, путь в томе остался прежним — и тестовые операции удаления затрагивают реальные файлы. Первым делом в копии меняйте путь тома или отключайте тома.

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

Можно ли открыть присоединенный файл, если 1С не запускается?
Если файл лежит в томе — да: найдите его в папке тома на сервере. Если в базе — только после восстановления базы или из резервной копии.
Почему у файла в томе непонятное имя без расширения или с другим именем?
Программа сохраняет файл под служебным именем, чтобы избежать совпадений. Связь с документом хранится в реквизите ПутьКФайлу карточки.
Сколько томов можно создать?
Несколько. Когда у тома задан предельный размер и он заполнен, новые файлы пишутся в следующий по порядку заполнения.
Перенесутся ли файлы при обмене данными с другой базой?
Зависит от правил обмена конкретной пары конфигураций. Если файлы нужны во второй базе, проверьте это на тестовом документе до запуска обмена.
Можно ли хранить тома на Linux-сервере?
Да. В карточке тома есть отдельный путь для Linux; он используется, когда рабочий процесс кластера работает под Linux.