Подключение к 1С 7.7 из 1С 8.2 на сервере (x64) по технологии OLE

1. mikhanik1 54 29.11.16 16:11 Сейчас в теме
Доброго дня!

Столкнулся недавно с одной проблемкой, решением которой и хочу поделиться. У многих, я думаю, в переходной период (при переходе с 1С 7.7 на 1С 8.Х) возникает необходимость подтягивать какие-либо данные из старой конфигурации. В случае с отчетами это иногда удобнее делать онлайн, подключаясь к базе 1С 7.7 через OLE. В случае, если используется клиент-серверный вариант базы 1С 8.Х и используете управляемое приложение для работы, то реально обработать какой либо вменяемый объем данных можно только на серверной стороне. Соответственно вызов 1С 7.7 базы будет производиться сервером. Вот здесь обычно и возникают проблемы. Начнем с того, что на сервере (имеется ввиду машина, где установлен сервер 1С Предприятие 8.Х) должна быть корректно установлена платформа 1С Предприятие 7.7. Из 1С 8.Х пробуем создать OLE-объект v77.application (пример v77 = новый comобъект( v77s.application);). Получилось - ура, у вас все хорошо, можно продолжать спокойно программировать дальше. Если вылетает с ошибкой типа «незарегистрированный класс» и т.д., значит, OLE-сервер 1С Предприятие 7.7 корректно не зарегистрировался. Далее все манипуляции должны выполняться на машине с установленным сервером 1С Предприятие 8.Х. Набираем в командной строке «dcomcnfg», в «Корень консоли/Службы компонентов/Компьютеры/Мой компьютер/Настройка DCOM» ищем «V77.GeneralPropPage». Отсутствие означает наличие проблемы в установке платформы 1С предприятие 7.7. Если нашли, то сейчас просто запоминаем где мы это нашли. В прикрепленном архиве есть 2 файла, сейчас нам нужен «v77_ole.reg». Объединяем его с реестром. Из 1С 8.Х еще раз пробуем создать OLE-объект v77.application (пример v77 = новый comобъект( v77s.application);) Закрываем - открываем «dcomcnfg». «V77.GeneralPropPage» должна появиться. Теперь обращаем внимание на текст ошибки при вызове метода «comобъект( v77s.application)». Если ошибки нет, то понятное дело – работаем себе дальше по своему усмотрению. Если вылетает с ошибкой типа: отказано в доступе или интерфейс не поддерживается, то мы на верном пути, просто еще не дошли куда нужно. Дело в том, что сервер у нас х64, а OLE-сервер 1С 7.7 х32. Для того чтобы такой вызов был осуществлен необходима заглушка. Берем из архива второй файл – «v77_ole_x64.reg» и объединяем его с реестром. После этого еще раз пробуем создать OLE-объект v77.application (пример v77 = новый comобъект( v77s.application);). Если и теперь ошибка, скорее всего косяк с правами. Смотрим, от какого пользователя запускается сервер 1С Предприятие 8.Х. В приложении «dcomcnfg» для объекта «V77.GeneralPropPage» (мы же запомнили, где он расположен) на вкладке безопасность даем права на доступ, запуск и активацию пользователю, из-под которого запускается сервер 1С Предприятие 8.Х. Вообще, права лучше бы проверить в первую очередь при любых проблемах с OLE-объектами. Обычно после этого все работает без перезагрузки. Правда перезагрузка не помешает.

P.S. Разобрал конкретный пример, поэтому в некоторых аппаратно-программных конфигурациях что-то может пойти не так. Но вектор, как говорится, задан, дальше попробуйте сами разобраться. Впрочем, в большинстве случаев описанная выше процедура должна помочь.

P.S. Здесь я в качестве платформы 1С предприятие 7.7 использовал ее SQL-серверный вариант. Для других версий платформы или нестандартном расположении папки с платформой 1С 7.7 необходимо подкорректировать пути в файлах реестра из архива и использовать соответствующий comобъект (например: «v77.application»).

P.S. Думаю, описанные выше процедуры помогут при проблемах с OLE доступом к 1С 7.7 на компьютерах с операционными системами windows x64 и в конфигурациях без сервера 1С Предприятие 8.Х.

Удачного дня и хорошей работы!
Прикрепленные файлы:
v77_ole.zip
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. mamonth 10.09.21 09:39 Сейчас в теме
2. vovaapril 47 06.02.18 10:15 Сейчас в теме
Давно мучаюсь с подключением к 7.7 через OLE.
Есть самописная обработка по перекачке данных из базы 7.7 в 8.3.
База77 = Новый COMObject("V77S.Application") никаких ошибок не вызывает, а вот следующий оператор при запуске на windows server 2012 r2
База77.Initialize(База77.RMTrade, "/d""" +КаталогБД+""""+Польз,"NO_SPLASH_SHOW") вызывает падение. Runtime error. Неизвестная ошибка при вызове метода Initialize.
Но когда я запускаю со своего компа на Win7 x64 всё идёт без запинки.
3. Xershi 1520 06.02.18 10:24 Сейчас в теме
Давно есть моя публикация на эту тему.
Возможно найдете решение своих проблем.
4. vovaapril 47 06.02.18 11:54 Сейчас в теме
(3) Ага, посмотрел. Из того что ещё не делал - поправил ветку реестра HKEY_LOCAL_MACHINE>SYSTEM>CurrentControlSet>Control>Session Manager>SubSystems .
Но всё равно крашится:
Сигнатура проблемы


7.7 на серваке запускается без проблем, работают несколько пользователей. Когда 8.3 создаёт объект V77.Aplication никаких проблем не возникает. Если неправильно указать путь к базе или пользователя то 7.7 даёт выбрать, а вот потом при коннекте к базе процесс 7.7 падает. В 8.3 срабатывает исключение.
Смотрел на своём компьютере (где всё работает) настройки DCOM. Вообще ни одного пункта V77 нет и при этом работает, на сервере по многочисленным советам добавлял ветки в реестр, но это не повлияло. Установщик 1С один и тот же.
5. vovaapril 47 06.02.18 12:45 Сейчас в теме
(3) Кажется нашёл в чём дело, запустив перед обращением к базе 7.7 через OLE отладчик 7.7. Падение вызывает неудачная попытка загрузки одной из внешних компонент, загрузка которой идёт в операторе Попытка Исключение. При обычном запуске неудачная загрузка пропускается без лишних сообщений.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот