Куда 1С 8.3 физически кладёт приложенные к документам сканы и файлы
Содержание
Присоединенные файлы в 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, предельный размер, порядок заполнения |
В карточке файла важны три реквизита:
- 🗂
ТипХраненияФайла— «В информационной базе» или «В томах на диске». - 💾
Том— ссылка на элемент справочника томов. - 📍
ПутьКФайлу— путь внутри тома, относительно его корня.
Полный путь на диске = путь тома для нужной ОС + ПутьКФайлу. По этой паре всегда можно найти конкретный скан на сервере, даже если программа его не открывает.
Тип хранения записывается в каждый файл отдельно. Поэтому в одной базе спокойно соседствуют старые файлы «в базе» и новые «в томах»: включение томов не переносит то, что уже загружено.
Как найти базу и путь к тому хранения
Путь к файлам зависит от того, где они лежат. Ниже — три сценария, от простого к сложному.
Файлы в томах: путь в справочнике томов
- Откройте
Администрирование → Общие настройки. - В блоке настроек работы с файлами найдите способ хранения и ссылку на список томов хранения файлов.
- Откройте нужный том: в карточке указан полный путь для Windows-сервера и для Linux-сервера.
Путь обычно сетевой, например \\fs01\1c_files\buh\. Именно туда физически пишутся новые файлы.
Файлы в базе: где находится сама база
Для файловой базы путь виден в окне запуска (строка File=). Для клиент-серверной — строка Srvr="app01";Ref="buh", где Ref — имя базы в кластере, а не в СУБД.
Имя базы в СУБД и адрес сервера СУБД смотрят в консоли администрирования серверов 1С:
- Запустите оснастку «Администрирование серверов 1С Предприятия».
- Раскройте кластер → «Информационные базы».
- Откройте свойства нужной базы.
- В полях «Сервер баз данных» и «База данных» — адрес 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. Резервная копия базы без копии папок томов — это база с карточками, которые ведут в пустоту. Включите тома в план резервного копирования отдельно и делайте их копию в то же время, что и копию базы
.
Как выгрузить присоединенные файлы на диск
Способ зависит от объёма.
| Способ | Когда подходит | Ограничения |
|---|---|---|
| «Сохранить как» из карточки | 1–10 файлов | Вручную, по одному |
| Копирование из папки тома | Файлы уже в томах | Имена на диске служебные, нужна сверка с базой |
| Внешняя обработка | Сотни и тысячи файлов | Нужны права администратора и тест на копии |
Вручную из карточки
Откройте документ или справочник, перейдите по ссылке присоединенных файлов (значок скрепки в командной панели формы), выделите файл и сохраните его на компьютер командой сохранения из контекстного меню.
Массово — обработкой
Для массовой выгрузки используйте программный интерфейс БСП. Функция РаботаСФайлами.ДвоичныеДанныеФайла() возвращает содержимое файла независимо от того, лежит он в базе или в томе. Пример серверной процедуры для внешней обработки выгружает все файлы контрагентов:
&НаСервере
Процедура ВыгрузитьФайлыНаСервере(Каталог)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ф.Ссылка КАК Ссылка,
| Ф.Наименование КАК Наименование,
| Ф.Расширение КАК Расширение
|ИЗ
| Справочник.КонтрагентыПрисоединенныеФайлы КАК Ф
|ГДЕ
| НЕ Ф.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Номер = 0;
Пока Выборка.Следующий() Цикл
Данные = РаботаСФайлами.ДвоичныеДанныеФайла(Выборка.Ссылка, Ложь);
Если Данные = Неопределено Тогда
Продолжить;
КонецЕсли;
Номер = Номер + 1;
ИмяФайла = СтрШаблон("%1%2%3_%4.%5", Каталог, ПолучитьРазделительПути(),
Формат(Номер, "ЧГ=0"), Выборка.Наименование, Выборка.Расширение);
Данные.Записать(ИмяФайла);
КонецЦикла;
КонецПроцедуры
Что важно в этом примере:
- 🔢 порядковый номер в начале имени защищает от перезаписи, если у двух файлов одинаковое наименование;
- 🚫 второй параметр
Ложьне прерывает выгрузку, если файла нет в томе: такие записи пропускаются; - 🖥 код выполняется на сервере, поэтому
Каталог— путь на сервере 1С (или на компьютере пользователя в файловом варианте), а не на вашем ноутбуке.
Для других владельцев замените имя справочника: ДоговорыКонтрагентовПрисоединенныеФайлы, РеализацияТоваровУслугПрисоединенныеФайлы и так далее. Полный список таких справочников видно в дереве конфигурации по слову «ПрисоединенныеФайлы».
Копирование тома
Если файлы уже в томах, папку тома можно скопировать целиком — это самый быстрый способ получить все файлы. Но имена и структура подкаталогов там служебные. Чтобы понять, какой файл к какому документу относится, выгрузите из базы список карточек с реквизитами Владелец и ПутьКФайлу.
Частые ошибки при работе с хранилищем файлов
- ❌ Том указан как подключённый диск. У пользователя
Z:\есть, у службы 1С — нет. Файлы не сохраняются, в журнале регистрации ошибки доступа. Решение — UNC-путь. - ❌ Включили тома и ждут, что база похудеет. Старые файлы остаются в базе, пока их не перенесёт обработка, а место освобождается только после сжатия.
- ❌ Чистят папку тома вручную. Удалённый в проводнике файл продолжает числиться в базе, пользователь получает ошибку при открытии. Удаляйте файлы через 1С: пометка удаления и затем удаление помеченных объектов.
- ❌ Копируют базу без тома. При переносе на новый сервер или разворачивании копии из
.dtне забудьте папку тома и поправьте путь в карточке тома. - ❌ Тестовая копия пишет в боевой том. Развернули копию базы, путь в томе остался прежним — и тестовые операции удаления затрагивают реальные файлы. Первым делом в копии меняйте путь тома или отключайте тома.
Частые вопросы
Можно ли открыть присоединенный файл, если 1С не запускается?
Почему у файла в томе непонятное имя без расширения или с другим именем?
ПутьКФайлу карточки.