Удаление файлов из базы 1С:Предприятие — задача, с которой рано или поздно сталкивается каждый администратор или разработчик.hether это устаревшие документы, ошибочно загруженные вложения или данные, подлежащие архивации по требованиям ФЗ-152 о защите персональных данных. Однако неправильные действия могут привести к потере целостности базы, ошибкам при обновлении или даже невозможности восстановления данных. В этой статье разберём все актуальные способы удаления — от ручных операций в конфигураторе до автоматизированных скриптов, а также расскажем, как избежать типичных ошибок.

Важно понимать, что хранит файлы не только как вложения к документам, но и в виде двоичных данных в таблицах базы (например, в полях типа ХранилищеЗначения). Это означает, что простого удаления через интерфейс программы часто недостаточно — требуется работа напрямую с SQL-сервером или использование специализированных обработок. Мы рассмотрим все варианты, включая нюансы для файлового и клиент-серверного режимов работы.

1. Удаление файлов через интерфейс 1С (ручной метод)

Самый простой, но и самый ограниченный способ — удаление файлов непосредственно в пользовательском режиме. Он подходит для единичных операций, когда нужно избавиться от вложений к конкретному документу или справочнику. Например, если к договору прикреплён неактуальный скан, его можно удалить без привлечения администратора.

Чтобы удалить файл:

  • 📄 Откройте документ или элемент справочника, к которому прикреплён файл (например, Договоры → Договор №123).
  • 🖼️ Найдите поле с вложениями (обычно называется Файлы, Вложения или ДополнительныеФайлы).
  • 🗑️ Выделите ненужный файл и нажмите кнопку Удалить (или Del на клавиатуре).
  • 💾 Сохраните изменения в документе (Записать и закрыть).
⚠️ Внимание: Этот метод не очищает физическое хранилище на диске. Файлы остаются в базе данных в виде "мусора" до выполнения операции Тестирование и исправление в конфигураторе. При большом объёме удалённых файлов база может раздуваться без видимой причины.

Также стоит учитывать, что в некоторых конфигурациях (например, 1С:Документооборот) файлы могут быть привязаны к версиям документов. В этом случае удаление текущей версии не удалит файл из истории — потребуется очистка всех версий или использование специальных обработок.

📊 Как часто вы удаляете файлы из базы 1С?
Еженедельно
Ежемесячно
Реже чем раз в полгода
Никогда не удалял

2. Удаление через конфигуратор (для администраторов)

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

Пошаговая инструкция:

  1. Запустите 1С:Предприятие в режиме Конфигуратор (выберите базу и удерживайте Shift при запуске).
  2. Перейдите в меню Администрирование → Тестирование и исправление.
  3. На вкладке Дополнительно отметьте флажки:
    • 🔍 Проверять логическую целостность
    • 🗑️ Проверять ссылочную целостность
    • 🧹 Удалять помеченные объекты
  • Нажмите Выполнить и дождитесь завершения операции.
  • Этот способ удаляет помеченные на удаление объекты, включая файлы, которые были удалены через интерфейс, но физически остались в базе. Однако он не поможет, если файлы не помечены как удалённые (например, при ошибочной загрузке).

    Сделать резервную копию базы|Проверить права доступа (полные права администратора)|Закрыть всех пользователей из базы|Отключить регламентные задания|Проверить свободное место на диске (не менее 20% от размера базы)

    -->

    3. SQL-запросы для удаления файлов (продвинутый метод)

    Для опытных пользователей и администраторов самым гибким способом является прямая работа с SQL. Этот метод позволяет удалять файлы по критериям (дате, типу, размеру) и очищать служебные таблицы, недоступные через интерфейс 1С. Однако он требует знания структуры базы данных и может быть опасен при некорректном использовании.

    Основные таблицы, где хранятся файлы в 1С 8.3:

    Таблица Описание Пример запроса
    _File Хранит двоичные данные файлов (BLOB)
    DELETE FROM _File WHERE ID NOT IN (
    

    SELECT FileID FROM _FileLinks

    )

    _FileLinks Связи файлов с объектами метаданных
    DELETE FROM _FileLinks
    

    WHERE Ref LIKE '%Договор%'

    AND FileName LIKE '%.tmp'

    ХранилищеЗначения Вложения в полях типа "ХранилищеЗначения"
    UPDATE ХранилищеЗначения
    

    SET Данные = NULL

    WHERE Размер > 10485760 -- >10 МБ

    ⚠️ Внимание: Перед выполнением SQL-запросов обязательно:
    • Создайте полную резервную копию базы (.dt для файлового варианта или бэкап SQL-сервера).
    • Проверьте запросы на тестовой копии базы.
    • Используйте транзакции (BEGIN TRANSACTION), чтобы откатить изменения при ошибке.

    Ошибки в SQL могут привести к невозможности восстановления данных даже из резервной копии, если бэкап был сделан после повреждения.

    Для выполнения запросов:

    • 🛠️ В файловом варианте используйте утилиту chdbfl.exe (поставляется с платформой 1С).
    • 🖥️ В клиент-серверном варианте подключитесь к SQL-серверу через Microsoft SQL Server Management Studio или аналоги.
    Как найти ID файлов для удаления?

    Чтобы точно определить, какие файлы можно удалить, выполните предварительный запрос:

    SELECT TOP 100 f.ID, f.Size, fl.Ref, fl.FileName
    

    FROM _File f

    LEFT JOIN _FileLinks fl ON f.ID = fl.FileID

    WHERE f.Size > 1048576 -- файлы >1 МБ

    ORDER BY f.Size DESC

    Это покажет крупнейшие файлы и их связи с объектами 1С. Обратите внимание на поле Ref — оно содержит ссылку на объект (например, ДоговорКонтрагентов.12345).

    4. Использование внешних обработок для очистки

    Для автоматизации процесса существуют внешние обработки, которые позволяют удалять файлы по гибким критериям без ручного ввода SQL-запросов. Популярные решения:

    • 📊 Обработка "Удаление неиспользуемых файлов" (от 1С-Софт) — сканирует базу на наличие "осиротевших" файлов (тех, что не привязаны ни к одному объекту).
    • 🔍 "Поиск и удаление дублей файлов" — находит повторяющиеся вложения и предлагает оставить только одну копию.
    • 🗑️ "Очистка хранилища значений" — удаляет временные файлы и кэш, накопленный за годы работы.

    Как использовать обработку:

    1. Скачайте обработку с официального сайта или проверенного источника (например, Инфостарт).
    2. Откройте базу в режиме 1С:Предприятие с правами администратора.
    3. Перейдите в Файл → Открыть и выберите скачанный файл обработки (.epf).
    4. Следуйте инструкциям на экране. Обычно обработки предлагают:
      • 🔍 Просканировать базу на наличие файлов для удаления.
      • 📋 Показать отчёт с найденными файлами (размер, дата, объект-владелец).
      • 🗑️ Удалить выбранные файлы или перенести их в архив.
    ⚠️ Внимание: Некоторые обработки могут некорректно работать с зашифрованными базами или базами, где включён режим Управляемое приложение. Перед использованием проверьте совместимость с вашей версией платформы (например, 1С 8.3.22 может не поддерживать обработки, написанные для 8.3.15).

    Преимущества этого метода:

    • ✅ Нет необходимости писать SQL-запросы вручную.
    • ✅ Возможность предварительного просмотра файлов перед удалением.
    • ✅ Поддержка журналирования (некоторые обработки ведут лог удалённых файлов).
    💡

    Перед массовым удалением экспортируйте список файлов в Excel через обработку. Это поможет восстановить данные, если что-то пойдёт не так. Например, в обработке "Удаление неиспользуемых файлов" есть кнопка Экспортировать в XLS на этапе предварительного просмотра.

    5. Автоматизация через регламентные задания

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

    Как создать регламентное задание:

    1. В режиме 1С:Предприятие перейдите в Администрирование → Регламентные задания.
    2. Нажмите Создать и выберите тип задания Обработка.
    3. Укажите путь к обработке (например, \\Server\1C\CleanupFiles.epf).
    4. Настройте расписание (например, Каждую субботу в 3:00).
    5. В параметрах обработки укажите критерии удаления (например, Удалять файлы старше 30 дней с расширением .tmp).
    6. Сохраните задание и активируйте его.

    Пример кода для обработки (упрощённый вариант):

    Процедура ОчиститьСтарыеФайлы() Экспорт
    

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ

    | ХранилищеЗначения.Ссылка КАК Ссылка,

    | ХранилищеЗначения.ДатаСоздания КАК ДатаСоздания

    |ИЗ

    | Документ.ВложенияФайлов.ХранилищеЗначения КАК ХранилищеЗначения

    |ГДЕ

    | ХранилищеЗначения.ДатаСоздания < &ГраничнаяДата

    | И ХранилищеЗначения.Размер > 1024"; // Файлы >1 КБ

    Запрос.УстановитьПараметр("ГраничнаяДата", ТекущаяДата() - 30);

    Результат = Запрос.Выполнить();

    Выборка = Результат.Выбрать();

    Пока Выборка.Следующий() Цикл

    Объект = Выборка.Ссылка.ПолучитьОбъект();

    Объект.ХранилищеЗначения.Очистить();

    Объект.Записать();

    КонецЦикла;

    КонецПроцедуры

    Для клиент-серверного варианта регламентные задания выполняются на сервере 1С:Предприятие, что снижает нагрузку на рабочие станции. В файловом варианте задание будет выполняться на компьютере, где оно запущено, поэтому важно обеспечить его постоянную работу (например, на сервере терминалов).

    💡

    Регламентные задания следует тестировать вручную перед автоматическим запуском. Например, запустите обработку в режиме Тест (без реального удаления) и проверьте логи на наличие ошибок.

    6. Удаление файлов из архивных копий базы

    Иногда файлы необходимо удалить не только из текущей базы, но и из её архивных копий (например, если в них содержатся конфиденциальные данные, подлежащие уничтожению по требованию ГОСТ Р 50922-2006). В этом случае стандартные методы не помогут — потребуется работа с бэкапами.

    Алгоритм действий:

    1. Создайте новую резервную копию текущей базы (она понадобится для восстановления после очистки).
    2. Восстановите архивную копию на тестовом сервере.
    3. Выполните удаление файлов одним из описанных выше методов (например, через SQL или обработку).
    4. Экспортируйте очищенные данные в новый файл базы (.dt для файлового варианта или бэкап SQL).
    5. Замените оригинальную архивную копию на очищенную версию.

    Для SQL-сервера можно использовать утилиту sqlpackage.exe (из состава SQL Server Data Tools) для извлечения и модификации данных в бэкапе без полного восстановления. Пример команды:

    sqlpackage.exe /Action:Export /SourceServerName:localhost
    

    /SourceDatabaseName:Archive_1C /TargetFile:"C:\cleanup.bacpac"

    /p:Storage=File /p:ExtractAllTableData=false

    /p:TableData=_File /p:TableData=_FileLinks

    ⚠️ Внимание: Модификация архивных копий может нарушить их целостность и сделать непригодными для восстановления. Всегда сохраняйте оригинальные бэкапы до подтверждения успешной очистки. Для критически важных данных рекомендуется привлекать специалистов по .

    Если архивные копии хранятся в облаке (например, 1С:Линк или Yandex Cloud), удаление файлов из них может быть невозможно без скачивания полной копии. В этом случае целесообразно настроить политику хранения, исключающую чувствительные данные из бэкапов (например, через настройки 1С:Fresh).

    7. Особенности удаления в облачных сервисах (1С:Fresh, 1С:Линк)

    Если вы используете 1С:Fresh или другие облачные решения, возможности по удалению файлов ограничены политиками провайдера. Например, в 1С:Fresh нет прямого доступа к SQL-базе, а операции с файлами выполняются через API или интерфейс личного кабинета.

    Как удалить файлы в 1С:Fresh:

    • 🌐 Перейдите в личный кабинет на сайте 1C:Fresh.
    • 📂 Выберите нужную базу и откройте раздел Файловое хранилище.
    • 🔍 Используйте фильтры для поиска файлов (по дате, типу, размеру).
    • 🗑️ Отметьте ненужные файлы и нажмите Удалить.

    Ограничения облачных сервисов:

    Сервис Макс. размер файла Возможность SQL-запросов Автоматическая очистка
    1С:Fresh 100 МБ ❌ Нет ✅ Да (по правилам хранения)
    1С:Линк 1 ГБ ⚠️ Частично (через API) ✅ Да
    1С:ГISPRU 500 МБ ❌ Нет ❌ Нет

    Для автоматизации в облаке можно использовать веб-сервисы 1С, которые позволяют удалять файлы по расписанию через HTTP-запросы. Пример кода для удаления файла через API 1С:Fresh:

    Функция УдалитьФайлИзFresh(АдресСервиса, ИмяФайла, Токен)
    

    Запрос = Новый HTTPЗапрос(АдресСервиса + "/delete_file");

    Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);

    Запрос.Заголовки.Вставить("Content-Type", "application/json");

    Запрос.УстановитьТекст("{\"file_name\": \"" + ИмяФайла + "\"}");

    Ответ = Новый HTTPСоединение;

    Ответ.ОтправитьДляОбработки(Запрос);

    Если Ответ.КодСостояния = 200 Тогда

    Возврат Истина;

    Иначе

    Сообщить("Ошибка: " + Ответ.ПолучитьТекст());

    Возврат Ложь;

    КонецЕсли;

    КонецФункции

    Частые ошибки и как их избежать

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

    Ошибка 1: Удаление файлов, привязанных к документам

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

    SELECT COUNT(*) FROM _FileLinks WHERE FileID = 12345

    Если результат > 0, файл привязан к объекту и его удаление может нарушить работу.

    Ошибка 2: Переполнение транзакционного журнала

    При массовом удалении файлов через SQL транзакционный журнал SQL Server может переполниться, что приведёт к остановке базы. Чтобы избежать этого:

    • 🔄 Разбивайте удаление на пакеты по 1000–5000 файлов.
    • 📊 Используйте TOP в запросах: DELETE TOP (1000) FROM _File WHERE ...
    • 🔄 Выполняйте CHECKPOINT после каждого пакета.

    Ошибка 3: Игнорирование резервных копий

    Многие администраторы пренебрегают созданием бэкапов перед очисткой, полагаясь на "автоматические" копии. Однако:

    • 🔄 Автоматические бэкапы могут быть устаревшими.
    • 🔄 Ошибки в SQL-запросах могут повредить данные необратимо.
    • 🔄 Восстановление из бэкапа занимает время, которое критично для бизнес-процессов.

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

    Ошибка 4: Удаление системных файлов

    Некоторые файлы в базе являются служебными (например, _1CDump для дампов или _Const для констант). Их удаление может привести к краху базы. Чтобы избежать этого:

    • 🔍 Перед удалением проверяйте расширения файлов (системные обычно имеют нестандартные форматы, например, .dbf или .cdx).
    • 🔍 Не удаляйте файлы из папок:
      • extforms (внешние формы)
      • templates (шаблоны)
      • logs (журналы)

    Ошибка 5: Неучтённые внешние ссылки

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

    • 🔗 Используется ли файл в ВнешнихОтчетах или ВнешнихОбработках.
    • 🔗 Привязан ли файл к Задачам или Уведомлениям1С:Документооборот).
    • 🔗 Экспортируется ли файл через Web-сервисы.
    💡

    Перед массовым удалением всегда тестируйте запрос на небольшом наборе данных (например, DELETE TOP 10). Это поможет выявить скрытые зависимости и избежать фатальных ошибок.

    FAQ: Ответы на частые вопросы

    Можно ли восстановить удалённые файлы из базы 1С?

    Восстановление возможно, если:

    • 🔄 У вас есть резервная копия базы (файл .dt или бэкап SQL), сделанная до удаления.
    • 🔄 Файлы были удалены через интерфейс 1С и ещё не очищены операцией Тестирование и исправление (в этом случае их можно найти в таблице _File с пометкой Deleted=1).
    • 🔄 Используется журналирование изменений (например, в 1С:Документооборот можно восстановить файл из истории версий документа).

    Если файлы были удалены через SQL-запрос без бэкапа, восстановление невозможно.

    Как узнать, сколько места занимают файлы в базе?

    Для оценки объёма файлов выполните запрос:

    SELECT
    

    SUM(Size) / 1024 / 1024 AS SizeMB,

    COUNT(*) AS FileCount

    FROM _File

    Для детализации по типам файлов:

    SELECT
    

    SUBSTRING(FileName, CHARINDEX('.', FileName) + 1, 10) AS Extension,

    SUM(Size) / 1024 / 1024 AS SizeMB,

    COUNT(*) AS FileCount

    FROM _File

    GROUP BY SUBSTRING(FileName, CHARINDEX('.', FileName) + 1, 10)

    ORDER BY SizeMB DESC

    В файловом варианте размер базы можно увидеть через свойства файла 1Cv8.1CD (правый клик → Свойства).

    Почему после удаления файлов база не уменьшилась в размере?

    Это нормальное поведение и SQL Server. Причины:

    • 🗃️ Фрагментация данных: SQL Server не уменьшает физический размер файла базы данных после удаления записей. Чтобы освободить место, выполните операцию Shrink:
    • DBCC SHRINKDATABASE (YourDatabaseName, 10); -- Оставить 10% свободного пространства
    • 🗑️ Неочищенный кэш: В файловом варианте запустите Тестирование и исправление с флагом Сжать базу данных.
    • 📊 Транзакционные логи: В клиент-серверном варианте логи могут занимать значительный объём. Очистите их командой:
    • BACKUP LOG YourDatabaseName WITH TRUNCATE_ONLY;
      

      DBCC SHRINKFILE (YourDatabaseName_Log, 1);

    В 1С:Fresh размер базы управляется автоматически и не может быть уменьшен вручную.

    Как удалить файлы старше определённой даты?

    Используйте SQL-запрос с фильтром по дате создания. Пример для удаления файлов старше 1 года:

    DELETE fl
    

    FROM _FileLinks fl

    JOIN _File f ON fl.FileID = f.ID

    WHERE f.CreationDate < DATEADD(year, -1, GETDATE());

    DELETE f

    FROM _File f

    WHERE f.CreationDate < DATEADD(year, -1, GETDATE())

    AND NOT EXISTS (SELECT 1 FROM _FileLinks WHERE FileID = f.ID);

    Для файлового варианта можно использовать обработку с аналогичной логикой:

    Запрос = Новый Запрос;
    

    Запрос.Текст =

    "ВЫБРАТЬ

    | ХранилищеЗначения.Ссылка КАК Ссылка

    |ИЗ

    | Документ.СФайлами КАК ХранилищеЗначения

    |ГДЕ

    | ХранилищеЗначения.ДатаСоздания < &ГраничнаяДата";

    Запрос.УстановитьПараметр("ГраничнаяДата", НачалоГода(ТекущаяДата()) - 365);

    Результат = Запрос.Выполнить();

    Можно