Как определить тип объекта 1С по техническому имени таблицы в файле 1CD при переполнении базы?

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

При работе с файловыми базами данных формата .1CD системные администраторы и разработчики часто сталкиваются с критической ошибкой: «Превышен максимально допустимый размер внутреннего файла». Это происходит, когда одна из внутренних таблиц базы данных достигает своего физического лимита (обычно это 4 Гб или 6 Гб в зависимости от версии платформы и настроек). Проблема усложняется тем, что стандартные средства 1С не всегда позволяют быстро понять, какой именно объект метаданных (какой документ или справочник) «раздул» базу, так как утилиты анализа показывают лишь технические имена вроде _DOCUMENT393.

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

Метод 1: Использование встроенной функции ПолучитьСтруктуруХраненияБазыДанных()

Проанализируем самый надежный и «чистый» способ, не требующий стороннего софта. Платформа 1С имеет встроенный механизм, который возвращает таблицу соответствия имен метаданных и имен таблиц в СУБД (или в файле 1CD). Если база еще открывается в режиме «Предприятие» или «Конфигуратор», мы можем выполнить следующий код:


ТаблицаСтруктуры = ПолучитьСтруктуруХраненияБазыДанных();
Для Каждого СтрокаСтруктуры Из ТаблицаСтруктуры Цикл
    Если СтрокаСтруктуры.ИмяТаблицыХранения = "_Document393" Тогда
        Сообщить("Объект найден: " + СтрокаСтруктуры.ИмяТаблицы);
    КонецЕсли;
КонецЦикла;

Рассмотрим подробнее, что возвращает эта функция. Она формирует таблицу значений, где колонки ИмяТаблицы содержат привычное нам название (например, Документ.РеализацияТоваровУслуг), а ИмяТаблицыХранения — то самое имя из файла 1CD. Обратите внимание, что для одного документа может существовать несколько таблиц: основная таблица, таблицы табличных частей и таблицы индексов.

Метод 2: Анализ через внешние утилиты (Tool_1C и аналоги)

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

  1. Откроем файл 1CD через Tool_1C.
  2. Перейдем в список таблиц и отсортируем их по размеру. Выясним, какая таблица занимает больше всего места.
  3. В современных версиях Tool_1C при открытии таблицы часто отображается заголовок, указывающий на объект метаданных. Если этого нет, нужно заглянуть в служебную таблицу DBSCHEMA.
  4. Таблица DBSCHEMA хранит XML-описание всей структуры. Опытные разработчики могут выгрузить её и поиском найти сопоставление _Document393.

Также стоит упомянуть утилиту V8Reader. Она позволяет просматривать структуру метаданных даже в тех случаях, когда база «лежит». Проанализировав дерево объектов в V8Reader, вы увидите рядом с каждым документом его физическое имя в файле.

Метод 3: Поиск конкретного документа по GUID

Иногда задача стоит шире: не просто узнать тип документа, а найти конкретную запись, если Tool_1C выдает ошибку на определенном ID (GUID). Например, вы видите идентификатор 858b6486-2ad4-4ab5-97ae-f0682fe347df. Выяснив тип объекта (например, это Документ.НачислениеПеней), мы можем найти его в базе следующим кодом:


Идентификатор = Новый УникальныйИдентификатор("858b6486-2ad4-4ab5-97ae-f0682fe347df");
СсылкаНаОбъект = Документы.НачислениеПеней.ПолучитьСсылку(Идентификатор);

Если СсылкаНаОбъект.ПолучитьОбъект() = Неопределено Тогда
    Сообщить("Объект не найден (возможно, битая ссылка)");
Иначе
    Сообщить("Найден документ: " + Строка(СсылкаНаОбъект));
КонецЕсли;

Это поможет вам понять, какие именно данные вызывают «раздувание» таблицы. Часто это документы с огромными бинарными данными в реквизитах типа ХранилищеЗначения.

Метод 4: Увеличение лимита таблицы через изменение размера страницы

Если удаление документов невозможно, рассмотрим технологический способ обхода ограничения. По умолчанию размер страницы в файловой базе — 4 Кб, что дает лимит таблицы в 4 Гб. Но мы можем изменить этот параметр. Разберем использование утилиты cnvdbutl.exe, которая находится в папке bin вашей платформы.

С помощью командной строки можно конвертировать базу, установив размер страницы 64 Кб. Это увеличит максимально допустимый размер одной таблицы до 32–64 Гб. Пример логики действий:

  1. Создадим резервную копию файла 1CD.
  2. Запустим утилиту конвертации: cnvdbutl.exe -p 64k "путь_к_базе".
  3. После этого база снова станет открываемой, и вы сможете провести штатную «свертку» или удаление лишних данных.

Профилактика и исправление: Сжатие таблиц

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

Рассмотрим порядок действий для окончательной очистки:

  1. Удаляем помеченные на удаление объекты или делаем свертку базы.
  2. Запускаем Тестирование и исправление в Конфигураторе.
  3. Обязательно выбираем пункт «Сжатие таблиц информационной базы».
  4. В качестве альтернативы можно использовать утилиту chdbfl.exe (она также умеет оптимизировать свободное пространство).

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

← На главную