Массовая очистка вложений в 1С 8.3: от анализа объёма до сжатия базы

· 9 мин

Содержание

Удалить все присоединенные файлы в 1С 8.3 можно в три шага: пометить файлы на удаление (вручную, обработкой или кодом), запустить Администрирование → Обслуживание → Удаление помеченных объектов, а затем сжать базу, иначе место на диске не освободится. Если цель — не избавиться от вложений, а облегчить базу, быстрее и безопаснее перенести файлы в тома на диске: база похудеет так же, а сканы останутся доступны.

Выбор способа зависит от объёма. Десяток вложений удаляют из карточки документа. Сотни и тысячи — обработкой с отбором или коротким кодом. Прямое удаление строк в SQL ломает ссылочную целостность, его используют только для анализа, не для чистки.

Всё описанное относится к типовым конфигурациям на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА, ERP): механизм «Работа с файлами» у них общий.

Сколько места занимают вложения: анализ перед очисткой

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

Где физически лежат присоединенные файлы

В конфигурациях на БСП файл состоит из двух частей:

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

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

Как оценить объём

В файловой базе посмотрите размер 1Cv8.1CD. В клиент-серверной — размер таблиц на стороне СУБД.

Начиная с платформы 8.3.15 размер любого объекта можно получить кодом, например в обработке или консоли кода:

Имена = Новый Массив;
Имена.Добавить("РегистрСведений.ДвоичныеДанныеФайлов");
РазмерБайт = ПолучитьРазмерДанныхБазыДанных(, Имена);
Сообщить("Двоичные данные файлов, МБ: " + Формат(РазмерБайт / 1048576, "ЧДЦ=1; ЧГ=0"));

Чтобы понять, какие владельцы дают основной объём, выполните запрос в консоли запросов (режим 1С:Предприятие, внешняя обработка). Пример для вложений реализаций:

ВЫБРАТЬ
    Файлы.ВладелецФайла КАК Документ,
    Файлы.Наименование КАК Имя,
    Файлы.Расширение КАК Расширение,
    Файлы.Размер КАК РазмерБайт
ИЗ
    Справочник.РеализацияТоваровУслугПрисоединенныеФайлы КАК Файлы
ГДЕ
    НЕ Файлы.ПометкаУдаления
УПОРЯДОЧИТЬ ПО
    Размер УБЫВ

Типичная картина: 5–10% вложений дают 80% объёма. Это сканы в TIFF без сжатия, PDF по 30–50 МБ, видео, архивы выгрузок. Их и стоит трогать первыми.

Если в базе включено хранение файлов в томах, объём двоичных данных внутри базы почти нулевой. Тогда «тяжёлое» — что-то другое, и удаление вложений базу не уменьшит.

Удаление вложений через интерфейс программы

Штатный путь подходит, когда файлов немного или их можно отобрать списком.

Из карточки документа

  1. Откройте документ.
  2. Нажмите на скрепку в командной панели формы — откроется список присоединенных файлов.
  3. Выделите строки (Shift или Ctrl) и нажмите Del — файлы получат пометку удаления.
  4. Закройте список.

Из общего списка файлов

В БП 3.0 и УТ 11 общий список файлов открывается через Все функции (включается в Сервис и настройки → Параметры). Найдите нужный справочник в ветке «Справочники», установите отбор по дате создания или владельцу, выделите всё (Ctrl+A) и пометьте на удаление.

Окончательное удаление

Пометка ещё не удаляет данные. Дальше:

  1. Откройте Администрирование → Обслуживание → Удаление помеченных объектов.
  2. Выберите выборочное удаление и отметьте только справочники файлов.
  3. Запустите удаление.

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

Если часть файлов не удалилась

После обработки программа показывает список объектов, которые удалить не удалось, и причину — где на них есть ссылка. Типичные случаи:

  • 🔁 Версии файла. Если для файла велась история изменений, на карточку ссылаются её версии. Их тоже нужно пометить или удалить вместе с файлом.
  • 📨 Электронные документы . Вложение могло уйти контрагенту по ЭДО, и на него ссылается электронный документ.
  • 🧷 Ссылки в реквизитах. Иногда файл выбран в реквизите другого объекта, например как изображение номенклатуры или логотип организации.

Откройте объект из списка препятствий и решите: снять ссылку или оставить файл. Повторный запуск удалит то, что освободилось.

Удаление помеченных можно запускать при работающих пользователях, но на больших объёмах (десятки тысяч объектов) это нагружает сервер и идёт часами. Планируйте на вечер или выходные.

Массовая очистка обработкой и кодом

Когда файлов тысячи, вручную их не пометить. Здесь работают два приёма.

Групповая пометка внешней обработкой

Простая внешняя обработка помечает на удаление вложения, созданные до заданной даты. Запрос отбирает карточки, цикл ставит пометку:

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

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

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

Не ставьте Объект.Удалить() вместо пометки. Непосредственное удаление обходит контроль ссылок, и на удалённые карточки могут остаться ссылки в версиях файлов и электронных документах.

Встроенная очистка ненужных файлов

В актуальных версиях БСП есть механизм очистки ненужных файлов с регламентным заданием. В нём задают правила: какие вложения каких объектов удалять и старше скольких дней. В БП 3.0 его ищите в Администрирование среди настроек работы с файлами — название ссылки может отличаться в зависимости от релиза.

Этот путь лучше самописного кода: правила хранятся в базе, а задание отрабатывает само.

SQL и консоль запросов: где можно, а где нельзя

Соблазн понятен: одна команда DELETE в СУБД — и база пустая. Но так делать нельзя.

ДействиеЧерез 1СНапрямую в СУБД
Посмотреть размер таблиц✅ можно✅ можно
Найти крупные файлы✅ консоль запросов⚠️ только с картой имён таблиц
Удалить карточки файлов✅ пометка + удаление помеченных❌ ломает ссылки
Очистить двоичные данные✅ вместе с карточками❌ карточки останутся «пустыми»
Сжать базу✅ тестирование и исправление (файловая)✅ средствами СУБД (серверная)

Почему прямое удаление в SQL опасно

  • 🔗 Таблицы в СУБД называются _Reference123, _InfoRg456. Какая из них ваш справочник, видно только через ПолучитьСтруктуруХраненияБазыДанных().
  • 🧩 Удалив строки в одной таблице, вы оставите «битые» ссылки в другой. Программа покажет <Объект не найден>.
  • 🚫 Фирма 1С не поддерживает правку данных базы средствами СУБД, а последствия всплывают позже — при обновлении или выгрузке.

Что в СУБД делать полезно

В MS SQL оценить размер таблиц можно стандартным отчётом SSMS «Disk Usage by Top Tables» или процедурой sp_spaceused. Сопоставить имена поможет вывод ПолучитьСтруктуруХраненияБазыДанных() в обработке.

Файловая и клиент-серверная база: как вернуть место после удаления

Удалили 20 ГБ вложений — а размер базы не изменился. Это нормально: СУБД и файловая база не отдают освободившиеся страницы сами.

Файловая база

Освободившееся место внутри 1Cv8.1CD возвращает только сжатие:

  1. Сделайте копию каталога базы.
  2. Попросите всех выйти: нужен монопольный режим, все сеансы будут закрыты.
  3. Запустите конфигуратор, Администрирование → Тестирование и исправление.
  4. Отметьте Сжатие таблиц информационной базы, остальные флажки можно снять.
  5. Нажмите «Выполнить».

На базе 30–40 ГБ сжатие идёт от получаса до нескольких часов, в зависимости от диска.

MS SQL Server

После удаления помеченных сожмите файл данных:

USE [имя_базы];
DBCC SHRINKFILE (N'имя_базы', 0);

Логическое имя файла смотрите в свойствах базы в SSMS. Сжатие фрагментирует индексы, поэтому после него перестройте индексы регламентной операцией обслуживания.

Сжатие и перестройка индексов сильно грузят сервер. Запускайте вне рабочего времени: пользователи заметят торможение.

PostgreSQL

Обычный VACUUM помечает место как свободное для повторного использования, но не уменьшает файлы. Вернуть место на диск позволяет VACUUM FULL — он блокирует таблицы на время работы, поэтому выполняйте его при остановленной работе пользователей.

Перенос файлов в тома вместо удаления

Часто вложения нужны: сканы договоров, первичка, подписанные документы. Удалять их нельзя, а база всё равно тяжелеет. Решение — хранить файлы в томах на диске.

Как включить тома

  1. В разделе Администрирование откройте настройки работы с файлами (в БП 3.0 — Общие настройки).
  2. Включите хранение файлов в томах на диске.
  3. Создайте том: укажите сетевой путь (\\server\1c_files\buh), доступный учётной записи сервера 1С, и лимит размера.
  4. Запустите обработку переноса файлов из базы в тома.

Частая ошибка при настройке — путь вида D:\1c_files на компьютере администратора. В клиент-серверной базе файлы пишет и читает рабочий процесс на сервере 1С. Значит, путь должен открываться с сервера, а у учётной записи службы сервера 1С должны быть права на чтение и запись в эту папку. Иначе пользователи увидят ошибку при открытии вложения.

После переноса двоичные данные из базы уходят на диск, и база уменьшается так же, как при удалении. Затем выполните сжатие из предыдущего раздела.

Что делать с вложениями?

Первичные документы и регистры учёта хранятся не менее пяти лет после отчётного года (ст. 29 закона 402-ФЗ). Если вложение — единственный экземпляр документа, его удаление может стать нарушением.

Как не допустить разрастания базы снова

Разовая чистка через год повторится, если ничего не менять. Что помогает:

  • 📂 Тома с самого начала. Новые вложения сразу уходят на диск.
  • 🗓️ Регламентное задание очистки с правилом «удалять вложения таких-то объектов старше N дней» для черновиков и временных файлов.
  • 🖼️ Сканирование в PDF или JPEG, а не в TIFF. Разница в размере — в 5–10 раз.
  • 🔢 Ограничение размера файла в настройках работы с файлами, если ваш релиз его поддерживает.
  • 💾 Резервные копии томов. Копия базы без папки тома — неполная: вложения из неё не восстановятся.
После очистки проверьте
Выполнено: 0 / 5

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

Можно ли восстановить удалённые присоединенные файлы?
Только из резервной копии базы (и папки тома, если файлы хранились там). В корзину 1С файлы не попадают.
Почему после удаления помеченных база не уменьшилась?
Место внутри базы освободилось, но файл на диске не сжат. Нужно сжатие таблиц в файловой базе или сжатие средствами СУБД в серверной.
Удалятся ли файлы из тома на диске?
При удалении карточки через «Удаление помеченных объектов» БСП удаляет и физический файл. Файлы, оставшиеся на диске без карточек, покажет проверка целостности тома.
Можно ли удалить вложения только у старых документов?
Да. Отберите карточки по дате создания или по дате документа-владельца и помечайте на удаление только их.
Что будет с подписанными документами ЭДО?
Электронные документы и их подписи — отдельные объекты. Удаление вложений документа их не затрагивает, но и их удалять без нужды не стоит: это юридически значимый архив.

Источники

  • Федеральный закон от 06.12.2011 № 402-ФЗ «О бухгалтерском учете», ст. 29