В практике администрирования и разработки на платформе 1С:Предприятие иногда возникают аварийные ситуации, когда база данных файлового формата не открывается стандартными средствами, повреждена или требует тонкого низкоуровневого вмешательства (например, для сброса забытого пароля администратора или восстановления поврежденной таблицы). В таких случаях незаменимым инструментом становится утилита Tool_1cd. Однако современные версии баз данных используют формат хранения 8.3.8, который накладывает жесткие ограничения на возможности изменения данных извне.
В этой статье мы подробно разберем, как обойти ограничение режима "только чтение" в новых версиях Tool_1cd, как правильно перевести базу данных в доступный для редактирования формат и что делать, если в процессе конвертации возникает критическая ошибка превышения размера внутреннего файла.
Для начала проанализируем, почему возникает сложность с редактированием современных баз. Утилита Tool_1cd развивалась параллельно с платформой 1С, и ее версии делятся на две принципиальные категории:
Выясним причину, почему версия 0.3.0 выдает ошибку о неподдерживаемой версии базы, если мы пытаемся открыть современный файл 1cv8.1cd. Дело в несовместимости структуры заголовков файлов. Чтобы убедиться в этом, мы можем открыть файл базы данных в любом HEX-редакторе и посмотреть первые 11 байт:
08 03 08 — это новый формат 8.3.8. Если записано 08 02 0E — перед нами старый формат 8.2.14.Таким образом, чтобы получить возможность редактирования, нам необходимо временно выполнить даунгрейд структуры базы данных (ее конвертацию) в формат 8.2.14, внести изменения утилитой Tool_1cd 0.3.0, а затем вернуть базу в исходный формат 8.3.8.
Для изменения структуры файла базы данных используется штатная консольная утилита платформы 1С — cnvdbfl.exe. Она находится в каталоге установленной платформы (папка bin). Проанализируем процесс ее использования по шагам.
Рассмотрим синтаксис команды конвертации базы в старый формат:
"C:\Program Files\1cv8\8.3.X.XXXX\bin\cnvdbfl.exe" -c -f 8.2.14 "Путь_к_файлу\1cv8.1cd"
Где:
На практике пользователи часто сталкиваются с тем, что утилита не запускается или выдает ошибки работы с путями. Разберем основные правила успешного выполнения команды:
1cv8.1cd в простой каталог, например, создайте папку C:\UUU\.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С:Предприятие" (если она открывается) и выполним следующий код во внешней обработке:
ТаблицаРазмеров = ПолучитьРазмерДанныхБазыДанных();
Для Каждого СтрокаТаблицы Из ТаблицаРазмеров Цикл
РазмерВГб = СтрокаТаблицы.Размер / (1024 * 1024 * 1024);
Если РазмерВГб > 3.5 Тогда
Сообщить("Критический размер таблицы: " + СтрокаТаблицы.ИмяТаблицы + " - " + СтрокаТаблицы.Имя + " (" + Окр(РазмерВГб, 2) + " Гб)");
КонецЕсли;
КонецЦикла;
Встроенная функция ПолучитьРазмерДанныхБазыДанных() вернет нам коллекцию с реальными физическими размерами таблиц на диске. Также можно воспользоваться готовой обработкой "Размер таблиц базы данных" (DBStorageStructureInfo.epf). Если база открывается, обработка обследования метаданных поможет найти наиболее крупные объекты перед очисткой, но не определит гарантированно размер каждой внутренней таблицы файла. Работа на платформе 8.3 не проверена.
После того как проблемная таблица найдена, применим методы ее оптимизации:
_InfoRg... (регистры сведений), хранящие историю изменений объектов (версионирование). Если это ваш случай, зайдите в раздел Администрирование -> Поддержка и обслуживание -> Версионирование объектов и очистите устаревшие версии документов и справочников за предыдущие годы.1cv8.1cd..dt). Создайте пустую папку, добавьте ее как новую базу и выполните загрузку сохраненного файла .dt обратно. При этом процессе файлы таблиц перестраиваются с нуля, отбрасывая весь накопленный "мусор", что существенно уменьшает их объем..dt и вернитесь к файловому варианту, который теперь гарантированно уложится в рамки ограничений формата 8.2.14.После того как размер самой крупной таблицы опустится ниже отметки в 4 Гб, повторно запустите утилиту cnvdbfl.exe. Конвертация пройдет успешно, и вы сможете полноценно работать с вашей базой данных в режиме редактирования через Tool_1cd 0.3.0.