При организации обмена или переноса данных из систем на базе 1С 7.7 в современные конфигурации 1С 8 разработчики часто сталкиваются с ошибками инициализации COM-объекта (OLE Automation сервер) и некорректной передачей параметров в строку подключения. Разберем по шагам, как зарегистрировать COM-сервер, корректно сформировать строку подключения и выгрузить элементы справочника.
Если платформа 1С 7.7 на компьютере не устанавливалась через официальный дистрибутив, а была перенесена обычным копированием каталога, при попытке выполнения вызова Новый COMОбъект возникает ошибка "Недопустимая строка с указанием класса". Это происходит из-за того, что в реестре Windows не зарегистрирован OLE-сервер.
Чтобы выполнить регистрацию платформы 1С 7.7 вручную, откройте командную строку от имени Администратора и выполните запуск основного исполняемого файла с ключом /regserver:
"C:\Program Files (x86)\1Cv77\BIN\1cv7.exe" /regserver
Имя OLE-класса в Windows зависит от поставки и типа установленной платформы 1С 7.7:
V77.Application — сетевая версия платформы;V77L.Application — локальная версия платформы;V77S.Application — версия для работы с SQL-сервером.Выяснить, какой именно класс зарегистрирован в системе, можно с помощью редактора реестра Windows (команда regedit), выполнив поиск по ключевым словам V77 в ветке HKEY_CLASSES_ROOT.
Инициализация подключения выполняется с помощью метода Initialize. Одной из частых проблем при вызове этого метода является появление диалогового окна выбора или создания новой базы 1С 7.7, после чего метод возвращает Ложь.
Причина заключается в нарушении синтаксиса параметров командной строки 1С 7.7. Рассмотрим основные правила оформления:
/d или /D не должен отделяться пробелом от открывающей кавычки. Правильная запись: /d"D:\1C\Base77". Если написать /d "D:\1C\Base77" или /d D:\1C\Base77, парсер 1С 7.7 не сможет прочитать путь и откроет стандартное окно выбора базы./n или /N пишется слитно с именем пользователя или открывающей кавычкой: /nAdmin или /n"Admin"./p или /P указывать не требуется.Проанализируем готовый пример кода на 1С 8 для безопасного и правильного подключения к базе 1С 7.7:
ПутьКБазе = "D:\1C\7.7";
Пользователь = "Admin";
Пароль = "";
// Создаем объект в зависимости от зарегистрированной версии (V77.Application, V77L.Application или V77S.Application)
База = Новый COMОбъект("V77L.Application");
// Формируем параметры без лишних пробелов после ключей
СтрокаПодключения = "/d""" + СокрЛП(ПутьКБазе) + """ /n""" + СокрЛП(Пользователь) + """";
Если Не ПустаяСтрока(Пароль) Тогда
СтрокаПодключения = СтрокаПодключения + " /p""" + СокрЛП(Пароль) + """";
КонецЕсли;
ЗапускБезЗаставки = 1;
РезультатПодключения = База.Initialize(База.RMTrade, СтрокаПодключения, ?(ЗапускБезЗаставки = 1, "NO_SPLASH_SHOW", ""));
Если Не РезультатПодключения Тогда
Сообщить("Ошибка подключения к базе 1С 7.7!");
Иначе
Сообщить("Успешное подключение к OLE-серверу 1С 7.7");
КонецЕсли;
После успешного вызова метода Initialize объект подключения предоставляет доступ к контексту и объектам метаданных базы 1С 7.7. Создание прикладных объектов выполняется через функцию CreateObject.
Рассмотрим, как обходить справочник «Номенклатура» и получать его реквизиты:
Если РезультатПодключения Тогда
// Создаем объект справочника 1С 7.7
СпрНоменклатура = База.CreateObject("Справочник.Номенклатура");
// Выбираем элементы (включая группы и иерархию)
СпрНоменклатура.ВыбратьЭлементы();
Пока СпрНоменклатура.ПолучитьЭлемент() = 1 Цикл
// Проверяем, является ли элемент папки или элементом
Если СпрНоменклатура.ЭтоГруппа() = 0 Тогда
КодЭлемента = СпрНоменклатура.Код;
НаименованиеЭлемента = СпрНоменклатура.Наименование;
// Запись или обработка полученных данных
Сообщить("Номенклатура: " + КодЭлемента + " - " + НаименованиеЭлемента);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Разберем дополнительные нюансы, которые необходимо учитывать при работе с OLE-сервером 1С 7.7:
Новый COMОбъект приведет к ошибке инициализации. Для решения проблемы код должен исполняться в 32-битной клиентской сессии 1С 8 либо настраиваться через службу компонентов Windows (`dllhost` / DCOM).Initialize тихо вернет Ложь. В этом случае базу 7.7 необходимо предварительно открыть монопольно в обычным режиме 1С 7.7 и дождаться завершения индексации.XBase. Структуру таблиц и наименование нужного файла (например, SCxxx.DBF) можно легко узнать в файле описания структуры БД 1CV7.DD.