Как устранить ошибку при вызове конструктора COMОбъекта sapproxy.sapproxy при подключении к SAP из 1С

Программист IT и автоматизация бизнеса
← На главную

При интеграции систем 1С и SAP часто используются специализированные библиотеки-прослойки. Одной из распространенных проблем является ошибка «Ошибка при вызове конструктора COMОбъекта» при попытке инициализации объекта sapproxy.sapproxy. Ситуация осложняется тем, что на одном компьютере код может работать безупречно, а на другом — выдавать ошибку даже при наличии зарегистрированных библиотек связи 1С. В этой статье мы подробно разберем, как диагностировать и устранить причины этой неисправности.

Анализируем природу объекта sapproxy.sapproxy

Прежде всего, проанализируем, что представляет собой sapproxy.sapproxy. Этот программный идентификатор (ProgID) не является стандартным компонентом Windows или платформы 1С. Обычно он принадлежит кастомной библиотеке-обертке, написанной на языках .NET или C++, либо является частью устаревших компонентов SAP Business Connector. Рассмотрим типичную строку кода, вызывающую затруднение:


// Попытка подключения к SAP через прокси-объект
Попытка
    САПКом = Новый COMОбъект("sapproxy.sapproxy");
Исключение
    Сообщить("Не удалось создать объект sapproxy: " + ОписаниеОшибки());
КонецПопытки;

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

Проверяем соответствие разрядности (Bitness)

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

  1. 32-битный COM-объект может быть загружен только 32-битным процессом 1С.
  2. 64-битный COM-объект требует 64-битного процесса.

Если ваша библиотека sapproxy имеет разрядность 32 бит, а 1С запущена в 64-битном режиме, необходимо настроить запуск через COM+ (Службы компонентов). Это позволит создать суррогатный процесс dllhost.exe, который выступит посредником между 1С и библиотекой.

Настройка Службы компонентов для sapproxy

Разберем по шагам процесс создания обертки в Службе компонентов, если прямой вызов конструктора не удается:

  1. Откроем «Панель управления» — «Администрирование» — «Службы компонентов».
  2. В дереве консоли перейдем в «Компьютеры» — «Мой компьютер» — «Приложения COM+».
  3. Нажмем правой кнопкой мыши и выберем «Создать» — «Приложение».
  4. В мастере выберем «Создать новое приложение», введем имя (например, SAP_Proxy) и установим тип «Серверное приложение».
  5. На вкладке «Удостоверение» (Identity) укажем пользователя, от имени которого будет запускаться объект. Важно: если код выполняется на сервере 1С, лучше указать конкретного администратора или системную учетную запись с достаточными правами, а не «Интерактивного пользователя».
  6. После создания приложения перейдем в ветку «Компоненты» нового приложения и добавим туда библиотеку (DLL), которая реализует sapproxy.

Правильная регистрация библиотеки в системе

Иногда регистрация через regsvr32 проходит успешно, но объект все равно не создается. Проанализируем ситуацию: если библиотека написана на платформе .NET, обычная регистрация не сработает. Рассмотрим правильный алгоритм регистрации для .NET-компонентов:

Вместо regsvr32 воспользуемся утилитой regasm.exe, которая входит в состав .NET Framework. Команда должна выглядеть примерно так:


C:\Windows\Microsoft.NET\Framework\v4.0.30319\regasm.exe sapproxy.dll /codebase /tlb

Использование ключа /codebase критически важно, так как оно прописывает в реестре полный путь к файлу библиотеки, что позволяет системе найти его без размещения в GAC (Global Assembly Cache).

Проверка зависимостей от SAP-компонентов

Объект sapproxy — это всего лишь мост. Для его успешной инициализации на компьютере должны присутствовать низкоуровневые библиотеки связи SAP. Проверим наличие следующих компонентов:

Проверка реестра Windows

Если вы не уверены, зарегистрирован ли объект в принципе, проверим реестр. Нажмем Win + R, введем regedit и перейдем по пути:

HKEY_CLASSES_ROOT\sapproxy.sapproxy

Если такой ветки не существует, значит, регистрация компонента в системе отсутствует. Если ветка есть, развернем подраздел InprocServer32. В параметре «По умолчанию» должен быть указан актуальный физический путь к файлу DLL. Проверим, что файл действительно находится по этому адресу.

Альтернативные способы подключения

В случае, если восстановить работу sapproxy на новом компьютере не удается, рассмотрим переход на стандартные COM-объекты SAP, которые устанавливаются вместе с SAP GUI. Это сделает код более универсальным и независимым от сторонних прокси-библиотек:

  1. Использование SAP.LogonControl.1 для управления авторизацией и создания соединения.
  2. Использование SAP.Functions для вызова удаленных функциональных модулей (RFC или BAPI).

Пример инициализации стандартных объектов:


Функция ПодключитьсяКSAP()
    Попытка
        ФункцииSAP = Новый COMОбъект("SAP.Functions");
        Соединение = ФункцииSAP.Connection;
        
        Соединение.System = "DEV";
        Соединение.Client = "100";
        Соединение.User = "USERNAME";
        Соединение.Password = "PASSWORD";
        Соединение.Language = "RU";
        
        Если Соединение.Logon(0, Ложь) Тогда
            Возврат ФункцииSAP;
        Иначе
            Сообщить("Ошибка авторизации в SAP");
        КонецЕсли;
    Исключение
        Сообщить("Стандартные компоненты SAP не установлены: " + ОписаниеОшибки());
    КонецПопытки;
КонецФункции

Таким образом, решение проблемы с sapproxy требует комплексного подхода: от проверки разрядности процессов до детальной настройки разрешений в Службе компонентов Windows. Последовательное выполнение описанных шагов позволит вам успешно восстановить связь между 1С и SAP на любом новом рабочем месте.

← На главную