Как развернуть бэкап 1С из клиент-серверной копии в файловый вариант и исправить ошибки индекса

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

Перенос информационной базы из клиент-серверного варианта в файловый — задача, с которой часто сталкиваются разработчики при необходимости протестировать функционал на локальном компьютере, где не установлен полнофункциональный SQL-сервер. Однако этот процесс не всегда проходит гладко. Рассмотрим подробно, как правильно выполнить этот переход и что делать, если система выдает критические ошибки СУБД.

Пошаговый алгоритм разворачивания бэкапа

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

  1. Развертывание на SQL-сервере: Сначала нам необходимо восстановить базу данных в MS SQL Server (или PostgreSQL) из имеющегося файла .bak. Если у вас нет доступа к рабочему серверу, можно установить бесплатную версию SQL Server Express на локальный ПК.
  2. Подключение в консоли администрирования: После восстановления базы в СУБД, ее нужно зарегистрировать в консоли администрирования серверов 1С Предприятия.
  3. Создание выгрузки: Заходим в информационную базу через «Конфигуратор» и выполняем команду «Администрирование — Выгрузить информационную базу...». В результате мы получим файл с расширением .dt. Для автоматизации этого этапа на сервере можно использовать резервное копирование базы в файл выгрузки dt без необходимости закрытия активных сессий пользователей.
  4. Загрузка в файловый вариант: Создаем новую пустую папку для файловой базы, добавляем ее в список баз 1С, заходим в «Конфигуратор» и выбираем «Администрирование — Загрузить информационную базу...», указав наш файл .dt.

Проблема: Длина ключа индекса превышает максимально допустимую

В процессе загрузки .dt в файловый вариант часто возникает ошибка: Длина ключа индекса превышает максимально допустимую. Выясним причину этой ситуации. Файловая СУБД 1С имеет жесткое ограничение на размер индекса (обычно до 2000 байт), в то время как SQL-серверы позволяют создавать гораздо более «тяжелые» индексы.

Посмотрим на пример ошибки из практики: _InfoR24456_ByDims_SSRRRSTRSRLSNRSSRTSRTSRSSRTSNRTSNSTT. Префикс _InfoR однозначно указывает на то, что проблемным объектом является Регистр сведений. Суффикс _ByDims говорит о том, что индекс строится по измерениям регистра. Большое количество полей в индексе (в примере их более 30) делает невозможным создание таблицы в файловом формате.

Как найти проблемный объект в метаданных

Для решения проблемы нам нужно сопоставить техническое имя таблицы в СУБД (например, _InfoR24456) с именем объекта в конфигурации 1С. Рассмотрим, как это сделать программно. Разберем код, который поможет нам идентифицировать «виновника»:


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

Этот фрагмент кода нужно запустить в консоли кода или во внешней обработке в той базе, которая еще развернута на SQL — для этого подойдут инструменты разработчика и консоль анализа метаданных. Метод ПолучитьСтруктуруХраненияБазыДанных() возвращает полное описание соответствия объектов 1С и таблиц в СУБД.

Методы устранения ошибки индекса

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

  1. Оптимизация структуры (требует изменения конфигурации): Если это самописный регистр, стоит пересмотреть его архитектуру. Часть измерений, которые не требуются для обеспечения уникальности записей, можно перевести в Ресурсы или Реквизиты. Это существенно сократит длину индекса.
  2. Очистка данных перед выгрузкой: (поможет поиск и удаление лишних данных для сокращения объема базы) Если база нужна только для тестов и данные конкретного регистра не критичны, можно полностью очистить таблицу этого регистра в SQL-версии перед формированием .dt файла. Без данных индекс не будет вызывать ошибку при создании структуры.
  3. Использование XML-переноса: Вместо использования механизма выгрузки/загрузки .dt, можно воспользоваться специализированными инструментами. Для этих целей отлично подойдет адаптивная выгрузка и загрузка данных XML (удобно через универсальный перенос и миграция данных между базами 1С), которая позволяет гибко настраивать отборы и обходить ограничения. Также можно применить выгрузку данных XML с дополнительными опциями для более точного поиска и фильтрации объектов.

    Если задача требует простоты, стоит обратить внимание на простой менеджер данных (simple data manager), а в случаях работы с конфиденциальной информацией пригодится универсальная выгрузка с возможностью шифрования. Кроме того, подобный подход часто спасает, когда необходим перенос базы из доработанной конфигурации в типовую локальную версию без доступа к конфигуратору.

    Рассмотрим стандартный алгоритм XML-переноса:
    • Создаем пустую файловую базу с аналогичной конфигурацией.
    • В исходной SQL-базе запускаем обработку и выгружаем все данные, кроме проблемного регистра.
    • Загружаем полученный файл в файловую базу.
    Этот метод позволяет гибко обходить ограничения файловой системы, просто исключая проблемные объекты из миграции.

Работа с форматом файла базы данных

При создании файловой базы для разворачивания больших объемов данных, мы рекомендуем убедиться, что используется современный формат .1CD. Начиная с версии платформы 8.3.8, поддерживается формат с размером страницы 8192 байта и выше, что позволяет таблицам преодолевать старый лимит в 4 Гб. Однако помните, что это увеличивает лимит на общий размер таблицы, но не снимает архитектурные ограничения на длину индекса отдельной строки.

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

Таким образом, мы выяснили, что переход от клиент-серверной модели к файловой требует не только простого копирования данных, но и внимательного анализа структуры метаданных на предмет совместимости ограничений различных систем управления базами данных.

← На главную