Удаление файлов в 1С 8.3: от присоединённых до кэша
Содержание
«Файл в 1С 8.3» — это четыре разные сущности, и удаляются они по-разному. Присоединённый к документу файл убирают из карточки объекта, файл на диске стирают встроенным языком или проводником, кэш — удалением служебной папки сеанса, а внешнюю обработку отключают в списке дополнительных обработок. Прежде чем удалять файл, определите, с чем именно имеете дело, — от этого зависит и способ, и риски.
Ошибиться здесь легко: за одним словом «файл» скрываются скан договора во вложении, временный .tmp на диске сервера, папка кэша размером в сотни мегабайт и внешний отчёт, подключённый к базе. Ниже — по каждому случаю отдельно, с точными путями и безопасным порядком действий.
УдалитьФайлы или из проводника — разделы про код и командную строку.Удаление файла, присоединённого к документу или справочнику
Сканы, договоры, фотографии и прочие вложения в типовых конфигурациях (БП 3.0, ЗУП 3.1, УТ 11) хранятся через подсистему работы с файлами. У документа или элемента справочника они доступны командой Присоединённые файлы в командной панели формы. Если команды не видно, разверните меню Ещё — она прячется там.
Порядок удаления:
- Откройте нужный документ или элемент справочника.
- Нажмите
Присоединённые файлы(значок скрепки). - Выделите файл в списке.
- Пометьте его на удаление либо удалите сразу, если у вас есть права.
Дальше важен нюанс хранения. Файлы могут лежать в самой информационной базе (как двоичные данные) либо в томах на диске — это задаётся в настройках работы с файлами в разделе Администрирование. В обоих случаях пометка на удаление сама по себе место не освобождает.
Физически присоединённый файл исчезает только после обработки «Удаление помеченных объектов». Обработка проверит, что на файл нет ссылок, и сотрёт как запись в базе, так и файл в томе на диске. Путь к ней зависит от конфигурации:
| Конфигурация | Путь к обработке удаления |
|---|---|
| БП 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С, включая конфигуратор.
- Проверьте в диспетчере задач, что завершены процессы
1cv8.exeи1cv8c.exe, а также агент в системном трее. - Удалите подпапку кэша нужной базы (или, если не знаете какую, — все подпапки при закрытой 1С).
- Запустите 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С, через пометку и обработку удаления помеченных.
Ошибки при удалении файлов и что с ними делать
Чаще всего удаление срывается по одной из пяти причин. Найдите свою формулировку.
1cv8/1cv8c в диспетчере задач, затем удаляйте.Если ни один случай не подходит и файл не удаляется ни одним способом, перезапустите компьютер (это снимет зависшие блокировки процессов) и повторите. Для файла на сервере сначала убедитесь, что его не держит запущенное регламентное или фоновое задание.
Частые вопросы
Освободится ли место в базе сразу после удаления вложения?
Можно ли восстановить удалённый присоединённый файл?
Удалится ли сама база, если стереть папку кэша?
Как массово удалять старые файлы обмена по расписанию?
Remove-Item по маске и дате либо регламентное задание в 1С с вызовом УдалитьФайлы(Каталог, Маска). Вариант в 1С удобнее, если путь хранится в настройках базы.