Почему не переносятся файлы в тома хранения в 1С:ERP и как выполнить перенос?

Программист 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

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

Архитектура хранения файлов в БСП: выясним причину пустого справочника

Проанализируем структуру подсистем БСП, на которой построена 1С:ERP. В конфигурации параллельно сосуществуют две разные модели хранения:

  1. Подсистема «Работа с файлами». Это общий структурированный файловый каталог с папками, правами и иерархией (по аналогии с 1С:Документооборотом). Вся информация об истории изменений здесь хранится в справочнике Версии файлов, а карточки — в справочнике Файлы.
  2. Подсистема «Присоединенные файлы». Именно она используется в 99% случаев в ERP, когда пользователи прикрепляют сканы и документы через иконку скрепки к конкретным объектам: справочнику Номенклатура, документам Заказ клиента, Поступление товаров и услуг и др. Для каждого вида объекта в конфигурации создан свой справочник, например НоменклатураПрисоединенныеФайлы или ЗаказКлиентаПрисоединенныеФайлы. Двоичные данные таких файлов размещаются либо непосредственно в реквизите справочника, либо в специальном регистре сведений (ДвоичныеДанныеФайлов или ПрисоединенныеФайлы).

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

Способ 1. Использование штатных регламентных заданий и правил размещения

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

  1. Перейдем в раздел администрирования и откроем форму Регламентные и фоновые задания.
  2. Найдем регламентное задание Перенос присоединенных файлов в тома (или Перенос файлов в тома).
  3. Настроим расписание выполнения задания или запустим его вручную по кнопке Выполнить сейчас. Фоновое задание порциями обрабатывает справочники присоединенных файлов и переносит двоичные данные на диск.
  4. Проверим настройку Правила размещения файлов (если опция включена в настройках работы с файлами). Убедимся, что созданы правила, предписывающие сохранять файлы нужных объектов в настроенный том.

Способ 2. Программный перенос файлов внешней обработкой

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

  1. Определим список всех справочников присоединенных файлов конфигурации. Для этого обратимся к составу метаданных определяемого типа ПрисоединенныйФайл или переберем все объекты конфигурации с постфиксом ПрисоединенныеФайлы.
  2. В каждом справочнике выберем элементы, у которых реквизит ТипХраненияФайла имеет значение хранения в базе данных, а реквизит Том не заполнен.
  3. Используя процедуры общих модулей подсистемы работы с файлами, выгрузим двоичные данные на диск в выбранный том, заполним реквизиты Том и ПутьКФайлу, очистим тело файла в базе и переключим ТипХраненияФайла.

Посмотрим на пример структуры такого обхода на встроенном языке:


ВыборкаТипов = Метаданные.ОпределяемыеТипы.ПрисоединенныйФайл.Тип.Типы();

Для Каждого ТекущийТип Из ВыборкаТипов Цикл
    МетаданныеСправочника = Метаданные.НайтиПоТипу(ТекущийТип);
    Если МетаданныеСправочника = Неопределено Тогда
        Продолжить;
    КонецЕсли;
    
    ИмяСправочника = МетаданныеСправочника.Имя;
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |   Ссылка
        |ИЗ
        |   Справочник." + ИмяСправочника + " КАК Файлы
        |ГДЕ
        |   Файлы.Том = ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка)
        |   И Файлы.ПометкаУдаления = ЛОЖЬ";
        
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
        // Вызов штатной процедуры БСП для перемещения в том
        РаботаСФайлами.ПереместитьФайлВТом(Результат.Ссылка, ВыбранныйТом);
    КонецЦикла;
КонецЦикла;

Важные системные требования и ограничения

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

  1. Права доступа службы сервера 1С. Физическую запись файлов на диск производит рабочий процесс кластера серверов rphost. Права на запись в сетевую папку или локальный каталог тома необходимо выдавать учетной записи операционной системы, под которой запущена служба сервера 1С (как правило, это usr1cv8), а не локальному пользователю базы или администратору домена.
  2. Особенности работы под управлением ОС Linux. Если сервер 1С работает под управлением Linux, он не может работать с прямыми сетевыми путями Windows (UNC-пути вида \\server\share). Сетевой ресурс должен быть предварительно примонтирован в файловую систему ОС Linux через протоколы CIFS или NFS, а в карточке тома хранения 1С должен быть корректно заполнен путь для Linux.
  3. Освобождение места в базе данных. После успешного переноса файлов размер файлов СУБД (файлы .mdf в Microsoft SQL Server или таблицы базы в PostgreSQL) автоматически не уменьшится. Чтобы вернуть высвободившееся место операционной системе, необходимо выполнить сжатие базы данных (процедура Shrink в MS SQL Server или операция VACUUM FULL для PostgreSQL).
  4. Организация резервного копирования. После выноса файлов стандартная выгрузка базы в формат .dt или резервная копия средствами СУБД больше не содержат сами вложения. Настроим согласованное по времени резервное копирование базы данных и сетевых томов на диске, чтобы исключить риск потери файлов при восстановлении.
← На главную