Можно ли развернуть выгруженную базу 1С 7.7 на платформе 1С 8.x?

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

При переходе на современные версии платформы или при получении архивных копий старых баз у разработчиков часто возникает вопрос: можно ли загрузить резервную копию базы 1С:Предприятие 7.7 напрямую в 1С:Предприятие 8.x через Конфигуратор? Разберем технические причины, почему это невозможно сделать стандартной загрузкой, и рассмотрим рабочие способы переноса данных в новую систему.

Короткий ответ: Напрямую развернуть архив базы 7.7 на платформе 8.x нельзя. Механизм совместимости в платформе 8.3 предназначен только для запуска конфигураций более ранних релизов восьмой версии (например, 8.1 или 8.2), но не поддерживает платформу 7.7. Для работы с данными потребуется развернуть саму платформу 7.7 либо воспользоваться инструментами миграции.

Проанализируем основные архитектурные различия, которые делают невозможным прямой запуск:

  1. Форматы хранения данных: Файловая база 7.7 представляет собой каталог с множеством отдельных файлов DBF (таблицы данных), CDX (индексные файлы) и словарем метаданных 1Cv7.MD. В платформе 8.x вся файловая информационная база упакована в единый бинарный файл 1Cv8.1CD.
  2. Форматы выгрузки: Архив выгрузки 7.7 содержит сжатый файл 1Cv7.DAT вместе со словарем структуры, в то время как платформа 8.x формирует выгрузку в формате .dt с совершенно иной внутренней разметкой.
  3. Объектная модель: В 7.7 отсутствуют управляемые формы, клиент-серверное разделение контекста выполнения кода, табличные части у справочников, а структура регистров устроена иначе (в 7.7 регистры делятся на остатки и обороты, в 8.x введены регистры накопления, сведений, бухгалтерии и расчета).

Выясним, какими способами можно перенести данные из информационной базы 7.7 в конфигурацию на платформе 8.x.

Способ 1. Использование конфигурации «1С:Конвертация данных 2.1»

Это универсальный и наиболее гибкий инструмент для переноса как типовых, так и полностью самописных конфигураций. Разберем порядок действий по шагам:

  1. Развернем базу 7.7 на установленной платформе «1С:Предприятие 7.7».
  2. С помощью внешней обработки MD77Exp.ert выгрузим описание структуры метаданных конфигурации 7.7 в файл XML.
  3. В конфигурации-приемнике на платформе 8.x выгрузим структуру метаданных с помощью встроенных средств или обработки MD80Exp.epf.
  4. Загрузим полученные описания метаданных в конфигурацию «1С:Конвертация данных» (редакция 2.1) и настроим правила конвертации объектов (ПКО), свойств (ПКС) и выгрузки данных (ПВД).
  5. В рабочей базе 7.7 откроем универсальную обработку выгрузки V77Exp.ert, выберем сформированный файл правил и выгрузим данные в файл XML.
  6. В базе 8.x запустим обработку УниверсальныйОбменДаннымиXML.epf и выполним загрузку данных.

Способ 2. Прямое чтение таблиц 7.7 без запуска платформы 7.7

Если нет возможности установить саму платформу 7.7, но есть распакованный каталог с файлами базы (файловая версия DBF), данные можно прочитать программно из 8.x:

  1. Распакуем архив с базой данных в отдельный каталог на диске.
  2. Для чтения таблиц используем встроенный объект платформы 8.x XBase либо прямое подключение через ADODB.Connection.
  3. Таблицы справочников имеют имена вида SC***.DBF, шапки документов — DH***.DBF, табличные части документов — DT***.DBF, а константы и периодические реквизиты — 1SCONST.DBF.

Посмотрим на пример чтения файлов справочника с помощью объекта XBase:


ТаблицаДБФ = Новый XBase;
ТаблицаДБФ.ОткрытьФайл("C:\Base77\SC123.DBF");

Если ТаблицаДБФ.Открыта() Тогда
    ТаблицаДБФ.Первая();
    Пока Не ТаблицаДБФ.ВКонце() Цикл
        // Считываем значения полей таблицы
        КодЭлемента = СокрЛП(ТаблицаДБФ.CODE);
        НаименованиеЭлемента = СокрЛП(ТаблицаДБФ.DESCR);
        
        // Создаем соответствующий элемент в базе 8.x
        НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
        НовыйЭлемент.Код = КодЭлемента;
        НовыйЭлемент.Наименование = НаименованиеЭлемента;
        НовыйЭлемент.Записать();
        
        ТаблицаДБФ.Следующая();
    КонецЦикла;
    ТаблицаДБФ.ЗакрытьФайл();
КонецЕсли;

Если база 7.7 работала под управлением Microsoft SQL Server, таблицы данных можно прочитать напрямую через внешние источники данных платформы 8.x или запросами через COM-соединение ADODB.Recordset.

Способ 3. Перенос данных через COM/OLE-соединение

Если на компьютере установлены обе платформы, можно организовать программный перенос данных напрямую из базы 8.x, подключившись к 7.7 как к COM-серверу.

Посмотрим, как выглядит инициализация подключения и чтение данных:


Попытка
    База77 = Новый COMОбъект("V77.Application");
    КаталогБазы = "C:\Base77\";
    Пользователь = "Администратор";
    Пароль = "";
    
    ПараметрыПодключения = "/D" + КаталогБазы + " /N" + Пользователь + " /P" + Пароль;
    Если Не База77.Initialize(База77.RMTrade, ПараметрыПодключения, "NO_SPLASH_SHOW") Тогда
        ВызватьИсключение "Не удалось инициализировать подключение к базе 7.7";
    КонецЕсли;
Исключение
    Сообщить("Ошибка подключения к 7.7: " + ОписаниеОшибки());
    Возврат;
КонецПопытки;

// Выборка элементов справочника из 7.7
Спр77 = База77.CreateObject("Справочник.Контрагенты");
Если Спр77.ВыбратьЭлементы() = 1 Тогда
    Пока Спр77.ПолучитьЭлемент() = 1 Цикл
        Если Спр77.ЭтоГруппа() = 0 Тогда
            НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
            НовыйКонтрагент.Наименование = Спр77.Наименование;
            НовыйКонтрагент.ИНН = Спр77.ИНН;
            НовыйКонтрагент.Записать();
        КонецЕсли;
    КонецЦикла;
КонецЕсли;

Способ 4. Промежуточная выгрузка в текстовые форматы

Если конфигурация 7.7 сильно доработана или является полностью оригинальной, часто самым простым способом оказывается написание внешней обработки для 7.7 (в формате .ert), которая формирует файлы обмена в формате CSV, TXT, XML или JSON. В базе 8.x полученные файлы загружаются стандартными методами ЧтениеТекста, ЧтениеXML или ЧтениеJSON.

Особенности структурных различий, которые необходимо учитывать

При переносе данных важно помнить о ключевых технических различиях между платформами:

  1. Идентификаторы объектов: В 7.7 нет глобальных уникальных идентификаторов (GUID). Основным идентификатором выступает тринадцатисимвольный строковый код ID. Рекомендуется сохранять этот код в дополнительный реквизит в базе 8.x для исключения дублирования при повторных переносах.
  2. Периодические реквизиты: В 7.7 история значений периодических реквизитов хранится в таблице 1SCONST. В платформе 8.x такие данные переносятся в регистры сведений с соответствующей периодичностью.
  3. Неограниченные строки: Длинные текстовые описания в 7.7 хранятся отдельно в текстовых полях или таблице 1SJOURN, что требует дополнительного сопоставления при прямом чтении DBF.
← На главную