Разрастание файловой базы 1С до критических размеров (10 Гб и более) — частая проблема при активном использовании электронного документооборота (ЭДО). Основными «пожирателями» пространства становятся регистры сведений, хранящие транспортную информацию. Проанализируем ситуацию: стандартная настройка «Хранение файлов в томах на диске» зачастую игнорирует эти данные, так как подсистема ЭДО использует собственные механизмы хранения двоичных данных непосредственно внутри таблиц базы данных .1cd.
Рассмотрим подробнее причины этой проблемы и разберем по шагам доступные способы оптимизации объема базы, не теряя при этом юридически значимую информацию.
Выясним причину, по которой стандартный механизм БСП (Библиотеки стандартных подсистем) по выносу файлов в тома не срабатывает для ЭДО. В типовых конфигурациях 1С (Бухгалтерия, ERP, Комплексная автоматизация) файлы документов могут храниться в справочнике Файлы, который легко настраивается на хранение вне базы. Однако данные ЭДО (электронные подписи, квитанции, транспортные пакеты) записываются в специализированные регистры сведений:
СодержимоеТранспортныхКонтейнеровТранспортныеКонтейнерыВложенияНеформализованныхДокументовДвоичныеДанныеФайловЭти регистры хранят информацию в ресурсах с типом ХранилищеЗначения. Платформа 1С воспринимает их как часть структуры таблиц базы данных, а не как отдельные присоединенные файлы. Поэтому простая настройка томов их не затрагивает.
Проанализируем состав данных. «Транспортный контейнер» — это своего рода техническая упаковка, необходимая для передачи документа через оператора ЭДО. После того как документ получен, расшифрован и принят к учету, сам контейнер со всей служебной «обвязкой» перестает быть оперативно нужным, хотя и занимает огромный объем. В современных версиях конфигураций предусмотрен штатный механизм очистки.
Очистка ненужных транспортных контейнеров.Важно: Это действие удалит только технический «мусор» из тяжелых регистров. Сами документы (PDF, XML) и файлы электронных подписей останутся в архиве ЭДО и будут доступны для проверок.
Простое удаление записей из регистров (программно или через регламентное задание) не уменьшает физический размер файла 1cv8.1cd на диске. Платформа просто помечает освободившееся место как «пустое» для будущих записей. Чтобы реально сжать базу, выполним следующие шаги:
chdbfl.exe (находится в папке bin установленной платформы) с установленной галочкой «Исправлять обнаруженные ошибки».Посмотрим на результат: после удаления старых контейнеров и последующего сжатия размер базы может сократиться в 2-3 раза.
Если объем базы превышает 10 Гб, необходимо помнить о критическом ограничении файлового движка: размер одной таблицы внутри файла .1cd не может превышать 4 Гб. Если регистр СодержимоеТранспортныхКонтейнеров приблизится к этому порогу, база выдаст ошибку записи, даже если свободное место на диске есть.
Рассмотрим вариант перехода на бесплатную СУБД, например PostgreSQL или MS SQL Server Express. Это решит проблему ограничений на размер таблиц и существенно повысит надежность работы с данными ЭДО. Как отмечают специалисты, работа «скульной» базы зачастую стабильнее при больших объемах бинарных данных в регистрах.
Если переход на SQL невозможен, а данные хранить необходимо, можно реализовать кастомное решение по выносу ресурсов из регистров во внешнее хранилище. Разберем пример логики такой обработки:
// Пример логики переноса данных (псевдокод)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка, Данные ИЗ РегистрСведений.СодержимоеТранспортныхКонтейнеров ГДЕ Дата < &ДатаОтсечения";
Запрос.УстановитьПараметр("ДатаОтсечения", ДобавитьМесяц(ТекущаяДата(), -12));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ПутьКФайлу = "C:\EdoStorage\" + Выборка.Ссылка.УникальныйИдентификатор();
ДвоичныеДанные = Выборка.Данные.Получить();
ДвоичныеДанные.Записать(ПутьКФайлу);
// Очистка данных в регистре с сохранением записи (или удаление)
МенеджерЗаписи = РегистрыСведений.СодержимоеТранспортныхКонтейнеров.СоздатьМенеджерЗаписи();
// ... установка отбора и очистка ресурса
КонецЦикла;
Проанализируем риски: такое решение требует внесения изменений в конфигурацию и написания логики «подтягивания» файлов обратно при просмотре документов пользователем. Это трудозатратный путь, который стоит выбирать только при невозможности очистки или перехода на SQL.
Для эффективного решения проблемы «разбухания» базы ЭДО рекомендуем придерживаться следующей стратегии: