Добрый день.
Возникла необходимость синхронизации баз 1С:ERP Управление предприятием 2.1 (2.1.1.13) и ИТРП: Производственное предприятие 2002 Стандарт. Сервер 1с8.3 находится на Windows 2008 x64.
Синхронизация осуществляется в регламентном задании на стороне 1с8.3. Процесс представляет собой проверку буферных таблиц и при наличии в них данных выполняется подключение к 1с77 через V77S.Application и дальнейшая обработка данных.
На локальной базе 1с8.3 все работало нормально, но при переносе на серверную возникли проблемы с V77S.Application. COMОбъект создается, но при попытке подключения метод Initialize() выдает 0 и на этом все. При этом никаких исключений не появляется, а 1cv7s.exe висит в процессах около 1 секунды и затем закрывается.
Были мысли, что выскакивает какое ни будь диалоговое окно, но при выдаче разрешения взаимодействия с рабочим столом серверу 1С8.3 были обнаружены только консоли сервера. Диалоговое окно можно поймать, если не была добавлена база в список баз клиента 1с77.
Базу 1с77 пробовал локальную и SQLную – эффект один и тот же, на локальной базе 1с8.3 работает, на серверной – нет.
По советам добавил V77.GeneralPropPage через реестр – не помогло.
Вход в обе базы в режиме предприятия через клиент 1с77, который находится на Windows 2008, проходит нормально.
В общем нужно каким-то образом заставить V77S.Application нормально подключаться из сервиса, но как это сделать не совсем ясно…
Ниже привожу код, который осуществляет подключение к 1с77.
&НаСервере
Функция ПроверкаНаВалидностьCOMСоединения(COMОбъект)
Попытка
Если COMОбъект <> Неопределено Тогда
COMОбъект.ПолучитьТА();
Возврат Истина;
КонецЕсли;
Исключение
КонецПопытки;
Возврат Ложь;
КонецФункции
&НаСервере
Функция ПолучитьCOMСоединение(база = "D:\MD7_0\", логин = "_xxx_", пароль = "")
COMОбъект = Неопределено;
ПутьБазы = база;
Пароль = пароль;
Пользователь = логин;
COMОбъект = Новый COMОбъект("V77S.Application");
Попытка
Пользователь = ?(ПустаяСтрока(Пользователь), "", " /N" + Пользователь);
Пароль = ?(ПустаяСтрока(Пароль), "", " /P" + Пароль);
Если COMОбъект.Initialize(COMОбъект.RMTrade, "/D""" + ПутьБазы + """" + Пользователь + Пароль, "NO_SPLASH_SHOW") = 0 Тогда
COMОбъект = Неопределено;
Иначе
КонецЕсли;
Исключение
COMОбъект = Неопределено;
КонецПопытки;
Если Не ПроверкаНаВалидностьCOMСоединения(COMОбъект) Тогда
COMОбъект = Неопределено;
КонецЕсли;
Возврат COMОбъект;
КонецФункции