Удаление файлов в 1С 8.3: от присоединённых до кэша

· 9 мин

Содержание

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

Ошибиться здесь легко: за одним словом «файл» скрываются скан договора во вложении, временный .tmp на диске сервера, папка кэша размером в сотни мегабайт и внешний отчёт, подключённый к базе. Ниже — по каждому случаю отдельно, с точными путями и безопасным порядком действий.

Какой файл нужно удалить?

Удаление файла, присоединённого к документу или справочнику

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

Порядок удаления:

  1. Откройте нужный документ или элемент справочника.
  2. Нажмите Присоединённые файлы (значок скрепки).
  3. Выделите файл в списке.
  4. Пометьте его на удаление либо удалите сразу, если у вас есть права.

Дальше важен нюанс хранения. Файлы могут лежать в самой информационной базе (как двоичные данные) либо в томах на диске — это задаётся в настройках работы с файлами в разделе Администрирование. В обоих случаях пометка на удаление сама по себе место не освобождает.

Физически присоединённый файл исчезает только после обработки «Удаление помеченных объектов». Обработка проверит, что на файл нет ссылок, и сотрёт как запись в базе, так и файл в томе на диске. Путь к ней зависит от конфигурации:

КонфигурацияПуть к обработке удаления
БП 3.0Администрирование → Обслуживание → Удаление помеченных объектов
ЗУП 3.1Администрирование → Обслуживание → Удаление помеченных объектов
УТ 11НСИ и администрирование → Обслуживание → Удаление помеченных объектов

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

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

Удаление внешних обработок и файлов, загруженных в конфигурацию

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

Внешние отчёты и обработки, подключённые к базе. Их не трогают в конфигураторе — ими управляют в режиме 1С:Предприятие. В БП 3.0 путь: Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Откройте список, найдите нужную строку и пометьте её на удаление либо отключите флажком «Публикация». Сам файл .epf/.erf хранится в базе и уйдёт вместе с записью после удаления помеченных объектов.

Макеты, картинки и внешние файлы, встроенные в конфигурацию. Если в конфигурацию когда-то загрузили макет, общую картинку или внешний файл, он стал объектом метаданных. Удаляют его в дереве конфигурации клавишей Delete, после чего выполняют Обновить конфигурацию базы данных (F7).

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

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

На диске файлы стирает глобальная процедура УдалитьФайлы. У неё два варианта вызова:

// Удалить один конкретный файл
УдалитьФайлы("C:\Обмен\outgoing.xml");

// Удалить по маске все временные файлы в каталоге
УдалитьФайлы("C:\Обмен", "*.tmp");

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

Путь = "C:\Обмен\outgoing.xml";
Файл = Новый Файл(Путь);
Если Файл.Существует() Тогда
    УдалитьФайлы(Путь);
КонецЕсли;

Отдельного метода Файл.Удалить() у объекта Файл нет — он только читает свойства (Существует, Расширение, Размер). Само удаление делает именно УдалитьФайлы.

Ключевой момент — где выполняется код. В серверной процедуре УдалитьФайлы сотрёт файл на диске сервера 1С, в клиентской — на машине пользователя. Это частый источник путаницы: разработчик пишет путь к своему компьютеру, а код исполняется на сервере, где такого каталога нет.

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

Для временных файлов не придумывайте пути вручную — берите системный каталог через ПолучитьИмяВременногоФайла() и удаляйте результат той же процедурой после обработки.

Удаление файлов информационной базы вручную на диске

У файловой базы (не серверной) на диске лежит набор служебных файлов. Главный из них — 1Cv8.1CD.

Файл 1Cv8.1CD — это и есть вся база данных. Удалив его, вы потеряете учёт целиком. Поэтому вручную в каталоге базы можно трогать только заведомо вспомогательные файлы.

Что безопасно удалять в каталоге файловой базы, когда 1С закрыта:

  • 🗂 старые выгрузки .dt — резервные дампы, сделанные через конфигуратор;
  • 📦 файлы обмена (.xml, .zip), оставшиеся от выгрузок и загрузок;
  • 📄 устаревший журнал регистрации старого формата 1Cv8.lgd — но это сотрёт историю действий пользователей.

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

На сервере 1С структура другая: файлов базы на диске сервера приложений нет, данные лежат в СУБД (PostgreSQL или MS SQL). Там «файлы» — это файлы самой СУБД, и их удаляют только средствами СУБД, а не руками.

Очистка кэша и временных файлов 1С

Кэш платформы — отдельная от базы вещь. Он накапливается в профиле пользователя и после обновлений иногда «ломается»: формы открываются с ошибкой, 1С подвисает на старте, слетает интерфейс. Очистка кэша — штатное лекарство.

Папки кэша лежат в профиле Windows:

  • %LOCALAPPDATA%\1C\1cv8\<идентификатор базы>
  • %APPDATA%\1C\1cv8\<идентификатор базы>

Каждая информационная база хранит свой кэш в подпапке с именем-хэшем. Порядок очистки:

  1. Закройте все окна 1С, включая конфигуратор.
  2. Проверьте в диспетчере задач, что завершены процессы 1cv8.exe и 1cv8c.exe, а также агент в системном трее.
  3. Удалите подпапку кэша нужной базы (или, если не знаете какую, — все подпапки при закрытой 1С).
  4. Запустите 1С — папка создастся заново.

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

Временные файлы платформа складывает в системный каталог %TEMP% (файлы вида v8_*.tmp). Их тоже можно удалять при закрытой 1С — программа пересоздаст нужные при следующем запуске.

Чистка кэша на сервере терминалов или в многопользовательской базе оборвёт сеансы тех, кто сейчас работает. Делайте это в технологическое окно, когда пользователей нет.

Удаление файлов 1С из командной строки и PowerShell

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

Командная строка (cmd):

rem удалить все временные файлы обмена
del /q "C:\Обмен\*.tmp"

rem удалить каталог целиком вместе с содержимым
rmdir /s /q "C:\Обмен\Архив"

PowerShell:

# удалить файлы старше 30 дней
Get-ChildItem "C:\Обмен" -Filter *.xml |
  Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-30) } |
  Remove-Item -Force

# удалить каталог рекурсивно
Remove-Item "C:\Обмен\Архив" -Recurse -Force

Такую команду можно повесить на планировщик заданий Windows и забыть о ручной чистке каталогов обмена. Альтернатива — регламентное задание в самой 1С с вызовом УдалитьФайлы по маске: оно удобно тем, что путь берётся из настроек базы, а не прописан в скрипте.

Команды del и Remove-Item -Force не спрашивают подтверждения и не кладут файлы в корзину. Один раз проверьте путь на тестовом каталоге, прежде чем запускать по рабочим данным.

Чего командной строкой делать нельзя — чистить тома с присоединёнными файлами. Файлы там лежат под служебными именами-хэшами, и база хранит ссылки на них. Удалите такой файл напрямую через del — в базе останется «висячая» ссылка, и при открытии вложения вы получите ошибку «файл не найден». Присоединённые файлы удаляют только внутри 1С, через пометку и обработку удаления помеченных.

Ошибки при удалении файлов и что с ними делать

Чаще всего удаление срывается по одной из пяти причин. Найдите свою формулировку.

Диагностика: выберите симптом

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

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

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