При интеграции систем 1С и SAP часто используются специализированные библиотеки-прослойки. Одной из распространенных проблем является ошибка «Ошибка при вызове конструктора COMОбъекта» при попытке инициализации объекта sapproxy.sapproxy. Ситуация осложняется тем, что на одном компьютере код может работать безупречно, а на другом — выдавать ошибку даже при наличии зарегистрированных библиотек связи 1С. В этой статье мы подробно разберем, как диагностировать и устранить причины этой неисправности.
Прежде всего, проанализируем, что представляет собой sapproxy.sapproxy. Этот программный идентификатор (ProgID) не является стандартным компонентом Windows или платформы 1С. Обычно он принадлежит кастомной библиотеке-обертке, написанной на языках .NET или C++, либо является частью устаревших компонентов SAP Business Connector. Рассмотрим типичную строку кода, вызывающую затруднение:
// Попытка подключения к SAP через прокси-объект
Попытка
САПКом = Новый COMОбъект("sapproxy.sapproxy");
Исключение
Сообщить("Не удалось создать объект sapproxy: " + ОписаниеОшибки());
КонецПопытки;
Если выполнение прерывается на этой строке, это означает, что операционная система не может найти запись об этом объекте в реестре или не может загрузить связанную с ним библиотеку из-за конфликта окружения.
Одной из самых частых причин ошибки является несовпадение разрядности клиента 1С и COM-объекта. Выясним причину: если вы используете 64-битную версию платформы 1С (клиент или сервер), она не сможет напрямую загрузить 32-битную DLL. Выясним, как это работает:
Если ваша библиотека sapproxy имеет разрядность 32 бит, а 1С запущена в 64-битном режиме, необходимо настроить запуск через COM+ (Службы компонентов). Это позволит создать суррогатный процесс dllhost.exe, который выступит посредником между 1С и библиотекой.
Разберем по шагам процесс создания обертки в Службе компонентов, если прямой вызов конструктора не удается:
SAP_Proxy) и установим тип «Серверное приложение».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).
Объект sapproxy — это всего лишь мост. Для его успешной инициализации на компьютере должны присутствовать низкоуровневые библиотеки связи SAP. Проверим наличие следующих компонентов:
sapnwrfc.dll, libsapucdec.dll), которые должны находиться в системных папках System32 или SysWOW64, либо в папке с исполняемым файлом 1С.librfc32.dll. Убедимся, что установлена корректная версия SAP GUI (например, 7.60 или 7.70) и в процессе установки были выбраны компоненты для интеграции (ActiveX/COM).saprfc.ini в рабочей директории или пути, указанном в переменной окружения RFC_INI.Если вы не уверены, зарегистрирован ли объект в принципе, проверим реестр. Нажмем Win + R, введем regedit и перейдем по пути:
HKEY_CLASSES_ROOT\sapproxy.sapproxy
Если такой ветки не существует, значит, регистрация компонента в системе отсутствует. Если ветка есть, развернем подраздел InprocServer32. В параметре «По умолчанию» должен быть указан актуальный физический путь к файлу DLL. Проверим, что файл действительно находится по этому адресу.
В случае, если восстановить работу sapproxy на новом компьютере не удается, рассмотрим переход на стандартные COM-объекты SAP, которые устанавливаются вместе с SAP GUI. Это сделает код более универсальным и независимым от сторонних прокси-библиотек:
SAP.LogonControl.1 для управления авторизацией и создания соединения.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 на любом новом рабочем месте.