Как отредактировать базу 1С 8.3 через Tool_1cd и обойти ошибку превышения размера файла при конвертации

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

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

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

Особенности версий Tool_1cd и форматов баз данных

Для начала проанализируем, почему возникает сложность с редактированием современных баз. Утилита Tool_1cd развивалась параллельно с платформой 1С, и ее версии делятся на две принципиальные категории:

  1. Версия 0.3.0 (и различные альфа-модификации): обладает полноценной функцией редактирования таблиц (HEX-режим, замена значений, очистка полей). Однако она поддерживает исключительно старый формат баз данных 1С (версия платформы 8.2.14, где размер страницы файла базы жестко зафиксирован и равен 4 Кб).
  2. Версия 0.4.0 (и выше): была выпущена для поддержки нового формата баз данных 8.3.8 (внедрен в платформу начиная с релиза 8.3.8.1652). Этот формат поддерживает переменные размеры страниц (от 4 до 64 Кб), что значительно увеличивает стабильность и производительность файловых баз. Однако автор утилиты в версии 0.4.0 реализовал исключительно режим просмотра (read-only) во избежание массового разрушения пользовательских баз данных при некорректном ручном вмешательстве.

Выясним причину, почему версия 0.3.0 выдает ошибку о неподдерживаемой версии базы, если мы пытаемся открыть современный файл 1cv8.1cd. Дело в несовместимости структуры заголовков файлов. Чтобы убедиться в этом, мы можем открыть файл базы данных в любом HEX-редакторе и посмотреть первые 11 байт:

Таким образом, чтобы получить возможность редактирования, нам необходимо временно выполнить даунгрейд структуры базы данных (ее конвертацию) в формат 8.2.14, внести изменения утилитой Tool_1cd 0.3.0, а затем вернуть базу в исходный формат 8.3.8.

Конвертация базы данных с помощью cnvdbfl.exe

Для изменения структуры файла базы данных используется штатная консольная утилита платформы 1С — cnvdbfl.exe. Она находится в каталоге установленной платформы (папка bin). Проанализируем процесс ее использования по шагам.

Рассмотрим синтаксис команды конвертации базы в старый формат:


"C:\Program Files\1cv8\8.3.X.XXXX\bin\cnvdbfl.exe" -c -f 8.2.14 "Путь_к_файлу\1cv8.1cd"

Где:

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

  1. Избегайте кириллицы и пробелов в путях: Если путь к файлу базы данных содержит русские буквы, пробелы или спецсимволы, консоль Windows может передать аргументы некорректно. Переместите файл 1cv8.1cd в простой каталог, например, создайте папку C:\UUU\.
  2. Запускайте от имени Администратора: Консоль командной строки (cmd) должна быть запущена с повышенными привилегиями, чтобы утилита имела беспрепятственный доступ на чтение и запись файлов на системном диске.
  3. Проверяйте блокировку файла: Убедитесь, что база данных не открыта в Конфигураторе или в режиме Предприятия, а также отсутствуют файлы блокировок (1Cv8.1cl, 1Cv8.cdn). Утилите требуется монопольный доступ к файлу базы. Наличие "замочка" (база находится на поддержке поставщика) никак не влияет на процесс конвертации — меняется лишь физическая структура размещения страниц, конфигурация при этом остается нетронутой.

Пример корректной команды для выполнения в командной строке:


"C:\Program Files\1cv8\8.3.15.1778\bin\cnvdbfl.exe" -c -f 8.2.14 "C:\UUU\1cv8.1cd"

После завершения работы утилиты мы можем запустить Tool_1cd 0.3.0 и без проблем отредактировать необходимые таблицы. По завершении манипуляций базу рекомендуется вернуть в современный формат обратной командой:


"C:\Program Files\1cv8\8.3.15.1778\bin\cnvdbfl.exe" -c -f 8.3.8 "C:\UUU\1cv8.1cd"

Решение ошибки "Превышен максимально допустимый размер внутреннего файла"

Самая сложная проблема возникает, когда при попытке конвертации базы в формат 8.2.14 утилита cnvdbfl.exe завершает работу аварийно с ошибкой: "Превышен максимально допустимый размер внутреннего файла".

Выясним причину этой ошибки. В старом формате 8.2.14 размер внутренней страницы жестко равен 4 Кб. Из-за этого адресация внутри файла ограничивает максимальный размер любой одной внутренней таблицы (данных, индексов или полей неограниченной длины BLOB) лимитом в 4 Гигабайта (точнее 4 294 967 296 байт). В новом формате 8.3.8 страницы могут иметь размер до 64 Кб, что позволяет таблицам разрастаться до терабайтных значений. Если в вашей рабочей базе формата 8.3.8 размер хотя бы одной таблицы превышает 4 Гб (например, таблица присоединенных файлов или версий объектов занимает 6 Гб), конвертатор физически не сможет "ужать" ее в старый формат.

Рассмотрим по шагам методы решения этой проблемы для успешного даунгрейда базы.

Шаг 1. Локализация проблемной таблицы

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


ТаблицаРазмеров = ПолучитьРазмерДанныхБазыДанных();
Для Каждого СтрокаТаблицы Из ТаблицаРазмеров Цикл
    РазмерВГб = СтрокаТаблицы.Размер / (1024 * 1024 * 1024);
    Если РазмерВГб > 3.5 Тогда
        Сообщить("Критический размер таблицы: " + СтрокаТаблицы.ИмяТаблицы + " - " + СтрокаТаблицы.Имя + " (" + Окр(РазмерВГб, 2) + " Гб)");
    КонецЕсли;
КонецЦикла;

Встроенная функция ПолучитьРазмерДанныхБазыДанных() вернет нам коллекцию с реальными физическими размерами таблиц на диске. Также можно воспользоваться готовой обработкой "Размер таблиц базы данных" (DBStorageStructureInfo.epf).

Шаг 2. Способы уменьшения размера таблиц

После того как проблемная таблица найдена, применим методы ее оптимизации:

  1. Очистка версионирования и истории изменений: Очень часто лимиты превышают таблицы _InfoRg... (регистры сведений), хранящие историю изменений объектов (версионирование). Если это ваш случай, зайдите в раздел Администрирование -> Поддержка и обслуживание -> Версионирование объектов и очистите устаревшие версии документов и справочников за предыдущие годы.
  2. Перенос файлов из базы в тома хранения: Если раздулась таблица хранения присоединенных файлов (картинок, сканов документов, файлов договоров), необходимо настроить их хранение на внешнем диске. Перейдите в "Настройки работы с файлами", установите переключатель в положение "Хранить файлы в томах на диске", создайте том на сервере или локальном компьютере и запустите регламентное задание по переносу файлов из базы данных. Это мгновенно освободит гигабайты пространства внутри файла 1cv8.1cd.
  3. Сжатие таблиц информационной базы (ТиИ): Обратите внимание, что простое удаление данных в 1С не уменьшает физический размер файла базы данных на диске — на месте удаленных записей остаются пустые страницы. Чтобы физически уменьшить размер файла, откройте базу в Конфигураторе, перейдите в меню "Администрирование" -> "Тестирование и исправление", отметьте флажком пункт "Сжатие таблиц информационной базы" и запустите выполнение.
  4. Цикл реиндексации через выгрузку/загрузку DT: Наиболее эффективный способ "сдуть" базу до ее реального размера — это выполнить полную реорганизацию индексов и таблиц. Для этого выгрузите базу в файл резервной копии через Конфигуратор ("Администрирование" -> "Выгрузить информационную базу..." в формат .dt). Создайте пустую папку, добавьте ее как новую базу и выполните загрузку сохраненного файла .dt обратно. При этом процессе файлы таблиц перестраиваются с нуля, отбрасывая весь накопленный "мусор", что существенно уменьшает их объем.
  5. Временный перенос базы в клиент-серверный вариант (SQL): Если база повреждена настолько, что файловый Конфигуратор не запускается или вылетает с ошибкой при ТиИ, разверните базу на бесплатной СУБД (например, PostgreSQL или MS SQL Express), где ограничений на размер таблиц в 4 Гб не существует в принципе. Выполните полное тестирование, исправление и очистку поврежденных таблиц средствами SQL или встроенного языка 1С, после чего сделайте выгрузку в .dt и вернитесь к файловому варианту, который теперь гарантированно уложится в рамки ограничений формата 8.2.14.

После того как размер самой крупной таблицы опустится ниже отметки в 4 Гб, повторно запустите утилиту cnvdbfl.exe. Конвертация пройдет успешно, и вы сможете полноценно работать с вашей базой данных в режиме редактирования через Tool_1cd 0.3.0.

← На главную