Почему при переносе данных из 1С 7.7 в 1С 8.3 возникает ошибка при вызове глобальных функций через COM-соединение?

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

При штатном переносе остатков и справочников из информационной базы 1С:Предприятие 7.7 в 1С:Бухгалтерия 8.3 стандартным механизмом загрузки может возникать сбой. Подключение к базе-источнику происходит успешно, значения констант считываются без проблем, однако при попытке обращения к глобальным функциям 7.7 (например, глИдентификаторКонфигурации()) платформа 8.3 выдает ошибку вида Метод объекта не обнаружен или исключение вызова метода EvalExpr.

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

Анализ кода и проявление ошибки

Рассмотрим, как происходит стандартное подключение к базе 7.7 из управляемого приложения 1С 8.3. В процессе работы формируется COM-объект V1CEnterprise.Application и выполняется его инициализация через метод Initialize:


v7 = Новый COMObject("V1CEnterprise.Application"); 
Открыта = v7.Initialize(v7.RMTrade, "/D""" + ПутьКИБ + """ /M ", "NO_SPLASH_SHOW");

После подключения программа пытается считать параметры базы 7.7, чтобы проверить совместимость правил конвертации. Код проверки выглядит следующим образом:


Функция ПолучитьФайлДанных(v7)
    
    мПустаяСтрока = "";
    
    Попытка
        ИдентификаторКонфигурации = v7.глИдентификаторКонфигурации();
        НомерРелизаКонфигурации = v7.Константа.НомерРелиза;
    Исключение
        ТекстСообщения = НСтр("ru = 'Производится перенос данных из конфигурации, для которой не предусмотрена конвертация'");
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
        Возврат мПустаяСтрока;
    КонецПопытки;

КонецФункции

Посмотрим на поведение системы: чтение v7.Константа.НомерРелиза проходит штатно и возвращает значение номера релиза, но вызов v7.глИдентификаторКонфигурации() вызывает исключение. В результате выполняется ветка Исключение с сообщением о недопустимости конвертации.

Выясняем причины сбоя COM-объекта

Основная причина, почему COM-объект 7.7 перестает «видеть» экспортные процедуры и функции глобального модуля, заключается в ошибке выполнения глобального модуля 1С 7.7 при старте системы.

Рассмотрим подробно, почему это происходит:

  1. Сбой инициализации при старте 7.7: Если в процедуре ПриНачалеРаботыСистемы() или в теле глобального модуля информационной базы 7.7 происходит синтаксическая ошибка, сбой внешней компоненты (например, v7plus.dll) или ошибка обращения к несуществующим путям/файлам, инициализация модуля прерывается. В результате базовые структуры метаданных (константы, справочники) через COM остаются доступны, а экспортные глобальные функции становятся недоступными для вызова.
  2. Модальные окна и диалоги: Если при запуске 7.7 пользователь выводит модальные предупреждения (Предупреждение(), Вопрос()), COM-соединение не может продолжить корректную загрузку кода модуля.
  3. Запуск 64-разрядного клиента 8.3: Платформа 1С 7.7 является 32-разрядным COM-сервером. Запуск переноса данных из 64-разрядного клиента или 64-разрядного сервера 1С 8.3 приводит к некорректной работе с OLE-объектом.

Варианты решения проблемы

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

Способ 1. Устранение ошибок в базе 7.7

  1. Откроем информационную базу 7.7 в режиме 1С:Предприятие от имени пользователя, данные которого используются для COM-подключения.
  2. Проверим, запускается ли система без сообщений об ошибках исполнения, предупреждений и диалоговых окон. Если при старте выходят ошибки внешних компонент или синтаксиса, устраним их.
  3. Запустим режим Конфигуратор в 7.7, выполним синтаксический контроль глобального модуля, а также процедуру Тестирование и исправление информационной базы.
  4. Убедимся, что для функции глИдентификаторКонфигурации в глобальном модуле 7.7 указано ключевое слово Экспорт.
  5. Запустим исполняемый файл 1cv7.exe один раз от имени Администратора Windows, чтобы перерегистрировать COM-сервер в реестре системы.
  6. Убедимся, что платформа 1С 8.3 запущена в 32-разрядном режиме (x86).

Способ 2. Перенос данных через XML-файл (без COM-соединения)

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

  1. Найдем внешнюю обработку выгрузки V77Exp.ert и файл правил конвертации (например, Acc77_80.xml), которые поставляются вместе с конфигурацией 1С:Бухгалтерия 8.3.
  2. Откроем базу 1С 7.7 в режиме 1С:Предприятие и через меню Файл — Открыть запустим обработку V77Exp.ert.
  3. Укажем файл правил конвертации, выберем нужные периоды и организации, после чего выполним выгрузку данных в XML-файл.
  4. В 1С 8.3 перейдем в раздел переноса данных и выберем вариант загрузки из сформированного файла.

Использование файлового обмена исключает любые зависимости от COM-компонентов, разрядности операционной системы и блокировок глобального модуля 1С 7.7.

← На главную