В процессе длительной эксплуатации и доработки систем на платформе 1С:Предприятие 7.7 конфигурация часто обрастает "мусором": неиспользуемыми справочниками, документами и журналами, которые были созданы для экспериментов или старых задач. В файловом варианте работы (DBF) избыточное количество объектов метаданных напрямую влияет на стабильность системы. Разберем, как правильно провести "генеральную уборку" и почему это критически важно для высоконагруженных систем.
На первый взгляд может показаться, что пустые справочники или документы не мешают работе. Однако в 1С 7.7 каждый объект метаданных — это набор физических файлов в каталоге базы данных. Например, один вид документа с табличной частью генерирует минимум четыре файла: DHxxxx.dbf (шапка), DTxxxx.dbf (табличная часть) и соответствующие им индексные файлы .cdx. Если в конфигурации 40 лишних видов документов, это создает порядка 160 файлов.
Проанализируем ситуацию с точки зрения системных ресурсов. При работе 30 пользователей каждый из них держит открытыми сотни файловых дескрипторов. Если база содержит сотни объектов, общее количество открытых файлов на сервере может превысить лимиты протокола SMB (сетевого доступа). Это приводит к возникновению ошибок "Ошибка открытия таблицы" или внезапным вылетам программы. Таким образом, удаление лишних метаданных — это не просто эстетическая чистка, а реальный способ повысить отказоустойчивость системы.
Рассмотрим последовательность действий, которая минимизирует риски потери данных и гарантирует корректное обновление структуры базы. Мы будем использовать метод подготовки эталонного md-файла на копии с последующей загрузкой в рабочую базу.
1Cv7.md на копии будет содержать обновленную структуру.Важное замечание: Мы используем именно Загрузить (Replace), а не Объединить (Merge). При объединении конфигураций новые объекты добавляются, но старые, отсутствующие в файле-источнике, не удаляются. Режим загрузки полностью заменяет структуру метаданных рабочей базы на структуру из подготовленного файла.
Выясним, какие "подводные камни" могут встретиться при удалении. Платформа 1С 7.7 не обладает развитыми механизмами контроля ссылок внутри программного кода, поэтому перед удалением проведем тщательный аудит.
Проанализируем программный код во всех модулях. Удаление справочника, на который есть ссылка в коде через СоздатьОбъект("Справочник.Имя"), приведет к критической ошибке во время исполнения. Рассмотрим пример поиска таких мест:
// Пример кода, который вызовет ошибку после удаления объекта
Спр = СоздатьОбъект("Справочник.СтарыйСправочник"); // Если 'СтарыйСправочник' удален, здесь будет Runtime Error
Если Спр.ВыбратьЭлементы() = 1 Тогда
// Логика обработки
КонецЕсли;
Особое внимание уделим следующим объектам:
.ert файлах. Если ваши пользователи активно используют внешние отчеты, их придется проверить вручную.После того как мы успешно загрузили конфигурацию и система провела реструктуризацию, файлы в каталоге базы данных могут остаться. 1С 7.7 при удалении метаданных очищает записи в словаре данных 1Cv7.DD, но не всегда физически удаляет .dbf и .cdx файлы с диска.
Чтобы довести оптимизацию до конца, выполним следующие шаги:
1Cv7.DD (или 1Cv7.DDS для SQL) любым текстовым редактором.SC123 или DH456) там больше не фигурируют.После завершения процедуры удаления крайне желательно выполнить Тестирование и исправление ключей защиты (ТиИ) со всеми включенными проверками:
Это поможет выявить случайные ссылки на удаленные объекты в константах или периодических реквизитах, которые могли быть пропущены.
Если же вашей основной целью была борьба с лимитом открытых файлов, а удаление метаданных кажется слишком рискованным, рассмотрим альтернативные варианты: переход на SQL-версию платформы или использование терминального сервера (RDP). В терминальном режиме файлы открываются локально на сервере, что снимает сетевые ограничения протокола SMB, а в SQL-варианте вся база хранится в едином файле данных, что полностью устраняет проблему количества дескрипторов.
Тем не менее, поддержание чистоты конфигурации — это признак хорошего тона в администрировании и разработке. Избавление от "мертвого" кода и неиспользуемых таблиц делает систему легче, понятнее и быстрее в обслуживании.