Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Подключение из 8.2 к 7.7 по ОЛЕ (http://forums.kuban.ru/f1040/podklyuchenie_iz_8_2_k_7_7_po_ole-3397614.html)

exDenver 06.12.2012 13:05

Подключение из 8.2 к 7.7 по ОЛЕ
 
Доброго времени суток. Есть необходимость перноса некоторых данных из 8.2 в 7.7. при попытке инициализировать 7.7 выдает ошибку: Ошибка при вызове метода контекста (Initialize): Неизвестная ошибка. База 7.7 на SQL 2005, с дбфной базой отрабатывает нормально. Где собака порылась - не могу понять

z1x1x 06.12.2012 14:50

База="";
База=Новый COMОбъект("V77.Application");
Попытка
СтрокаПодключения = "/D"""+СокрЛП(ПутьКБазе)+""" /N"""+СокрЛП(Пользователь)+""" /P"""+СокрЛП(Пароль)+"""";
Открыта=База.Initialize(База.RMTrade,СтрокаПодключения,"NO_SPLASH_SHOW");
Если Открыта Тогда
ЕстьПодключение = Истина;
Сообщить("Есть подключение");
Иначе
Предупреждение("Ошибка при подключении!");
ЕстьПодключение = Ложь;
КонецЕсли;
Исключение
Предупреждение("Ошибка при подключении!");
ЕстьПодключение = Ложь;
КонецПопытки;
Возврат ЕстьПодключение;

DeiMos 06.12.2012 15:43

V77s.Application

exDenver 06.12.2012 19:45

DeiMos, и v77 и v77s пробовал - результат одинаковый

VZ 06.12.2012 22:14

Скорее всего, попортился реестр. Где этот самый [em]Application[/em] связан с утилитой. И с ее расположением, естественно.
Проще всего для исправления инсталлировать "семерку" заново.
Ну, или глянуть комп, где все хорошо вызывается, и сравнить соответствующие ветви реестра.

VZ 06.12.2012 22:29

И исчё... Бывают трудности, если имеются несколько (т.е. больше одного BIN-а с екзешникоми разных компонент. Например, один - для бухии, другой - для расчета. И вызов ОЛЕ должен быть адресным: вызывать екзешник с определенного БИНа. Вот здесь не обойтись правкой реестра, ибо инсталлятор засандаливает один адрес БИНа для всех апликаторов: и v77s, и v77l, v77m, и, конечно v77. Затирая прежнюю работу инсталлятора другой компоненты.
Но это полбеды: по каким-то неизвестным причинам эта тонкая настройка реестра ломается. Поскольку у данного клиента я не торчу постоянно, обнаружить "когда" мне не удалось. И, между прочим, все юзеры, цепляющиеся к базам, не имеют никаких прав (виндовых, конечно) лазать в этот реестр, и что-то менять.
Но тем не менее...

exDenver 07.12.2012 06:15

VZ, две базы лежат на одном сервере рядом, одна SQL а другая ДБФ - к дбф подключается без проблем... что может быть с скл базой?

exDenver 07.12.2012 10:51

скажу даже больше - проверил подключение из 77 к 77 с той же строкой подключения и все работает! и даже если запускать это все в клиентской части на своем компе - все работает, а на сервере - ну никак( чего серверу то не хватает?

VZ 07.12.2012 12:10

7-exDenver > Внимательно читать (5). Для вызова 1С в качестве сервера OLE, последний должен быть прописан в реестре. Это первое, что надо проверить.
Ищем в реестре ветку V77.Application. Находим (в HLCR). И смотрим подветвь CLSD. Там адрес ветви реестра, где оси надо искать исполняемую часть: {63112D80-94F0-11D2-9F39-008048DA120F**
Ищем эту самую ветвь реестра, находим. Там есть параметр LocalServer32, где находится эта самая серверная часть олейного соединения. Например, C:\PROGRA~2\1Cv77\BIN\1cv7.exe. Смотрим, соответствует ли это действительности. Нет - поправляем.
Кстати, для 64-разрядных осей [em]PROGRA~2[/em] - это [em]Program Files (x86)[/em]. Бо именно в этот раздел должен быть запулен "семерочный" екзешник. А ветвь {63112D80-94F0-11D2-9F39-008048DA120F** содержать параметр InprocHandler32 со значением Ole32.dll.
Аналогичное строение реестра для V77s.Application и прочих ".Application"-ов.
При поиске V77.Application видны соответствующие соседи. А рядом с {63112D80-94F0-11D2-9F39-008048DA120F** - их параметры. Все разложено по кучкам ;)

exDenver 07.12.2012 12:18

VZ спасибо! пойду админа мучать а то к серверу доступ только у него

exDenver 07.12.2012 12:32

посмотрели все вроде на месте и совпадает. Ну это и логично - на том же сервере к дбфной базе без проблем подключается. я вот думаю может проблема в 2005 SQL?

DeiMos 07.12.2012 17:00

10-exDenver > Вроде?
"Аналогичное строение реестра для V77s.Application" - точно присутствует?

VZ 07.12.2012 17:39

10-exDenver > Смотреть надо, начиная с очевидного. OLE-сервер организует не "1С", хоть "семерка", хот "восьмерка", да хоть "тридцатьчетверка". А ось. А ей все равно на вызывающий клиент.
Потому надо внимательно изучить строки подключения на предмет ошибок. Путь к базе может быть без кавычек, если нет внутренних пробелов, или от в нотации 8.2 (пример: [em]C:\PROGRA~2\1Cv77\BIN\1cv7.exe[/em]). Хотя представление 8.2 в NT-ых осях может быть запрещено (конкретное место реестра не помню, и искать сейчас не буду).
Лучше всего строку вызова отладить в значке. Т.е., делаем значок вызова конкретной базы с конкретным пользователем, конкретным пассом. Если все отлично запускается, перетаскиваем параметры в модуль в скобки Initialize (без начала [em]C:\PROGRA~2\1Cv77\BIN\1cv7.exe[/em] - это подставит ось из реестра).
Сообщение "Неизвестная ошибка" может быть при нарушении баланса кавычек.
Можно выкинуть ключи /N и /P (из-за чего появтся приглашение ввести юзера и пароль ручками), и заводить их потом, последовательно, убедившись, что инициализация клюет на путь к базе.

VZ 07.12.2012 17:49

+12 Пользуйся утилами, которые могут показать захват базы. Например, 1calmin. Starter1C тоже это умеет (мой выбор).

exDenver 07.12.2012 18:28

VZ, я в (7) писал что с этой же строкой подключения в клиентской части подключение проходит - т.е. на моем локальном компе с компоненатми и правами все в норме. а на сервере происходят какие странности

DeiMos 07.12.2012 19:42

DEP?

VZ 07.12.2012 20:01

14-exDenver > Сервер OLE вызывается из той же среды, где его инициировал клиент. Т.е., если клиент в локальном компе - значит, и сервер OLE вызывается с того же локального компа. Если клиент на снрвенре - соответственно, и OLE-сервер должен быть на сервере. Потому как при вызове COM-объекта V77.Application ось лезет в [b]свой[/b] реестр.
И причем здесь "на моем локальном компе с компоненатми и правами все в норме"? А на сервере - все в норме? Реестр правильно настроен для вызова сом-объекта, или как?
15-DeiMos > DEP здесь непричем: если можно вызвать одноэсину интерактивно, значит, можно вызапть как и оле-объект.
Другое дело, что пользователь "1С" может не обладать правами работать с оле-вызовом. Но это забота ТС проверить.

oops! 08.12.2012 05:52

много раз обращал внимание на тот факт, что ОС запоминает в реестре путь к приложению при каждом его вызове. Мне тоже нужно было неоднократно настраивать OLE-обмен между V82 и V77.
К примеру V77 на компе не установлена,запускаю её с флэшки, прописываю путь к базе, открываю базу, закрываю её. Цепляюсь к V77 из V82 - всё работает.
Переношу bin V77 на комп локально, флэшку вынимаю. Снова запускаю V77 теперь уже с HDD, закрываю. Снова цепляюсь цепляюсь к V77 из V82 - снова всё работает.

exDenver 10.12.2012 08:50

доброго времени суток всем!
16 - я это все понимаю
У меня задача чтобы подключение к 7.7 работало на сервере, т.е под пользователем под которым запущен сервер 1с 8.2. При условии что база 7.7 лежит на SQL2005. Все необходимые права у этого пользователя есть (проверял даже с предоставлением админских прав). COM-объект создается, а на строке Initialize вешается... При этом я вижу в мониторе что пользователь зашел в базу. Подключение к рядом лежащей базе в формате ДБФ проходит на ура (т.е. проблемы с написанием пути отпадают). Вот и не могу понять в чем проблема

oops! 11.12.2012 07:53

(18) А база 77 самописная? ВК какие-нить используются?
Попробуй эксперимента ради взять типовую Бухгалтерию 7.7, создай базу на SQL2005 и подключись к ней штатными средствами из БП8.2 хотя бы для переноса справочников :)
Ну и, попробуй наконец так
База=Новый COMObject("V1CEnterprise.Application");

oops! 11.12.2012 07:56

19+ надеюсь, что у тебя comcntr.dll из правильной папки Bin зарегистрирован как OLE-сервер

exDenver 12.12.2012 09:28

19 - попробовал к новой базе на 2005, пробовал к базе на 2000, перебрал все вариации объектов... у меня БП82 нет к сожалению - только документооборот, попробую поискать конфу

exDenver 12.12.2012 12:43

пробовал запускать на самом сервере 1с под пользователем под которым запущен сервер - с директивой &НаКлиенте все отрабатывает, а &НаСервере - фигвам... замучался сам и админа замучал

oops! 12.12.2012 14:09

(22) стрянно всё это, что-то в твоей консерватории не тогойт ...
а ты директиву &НаСервере c каким обработчиком используешь??? уж не "ПриОткрытии(Отказ)" ли???
нужно использовать обработчик ПриСозданииНаСервере(...), как то так

да и ваще, ты зачем эту директиву используешь??? ведь если не указано где исполнять, по умолчанию выбирается - &НаСервере

oops! 12.12.2012 14:13

(23) да и потом, у тебя конфа под 8.2 в режиме управляемого приложения работает, или в обычном режиме?

exDenver 13.12.2012 06:46

23-24 Конфа работает в режиме управляемого приложения, на данный момент подключение запускается по кнопке с формы. &НаСервере я написал тут просто для наглядности). В общем написал я одному человеку статейку которого по переносу данных из 82 в 77 через OLE нашел в нете. он ответил вот что: "Из сеанса сервера 1с 8 вызвать 7.7 по OLE не получиться. Суть в том, что вызов OLE - интерактивный режим (вызывается не COM ядро, а вся программа 77).
Нужно организовывать подключение с клиентского сеанса 8." В общем можно считать тему закрытой)


Текущее время: 08:09. Часовой пояс GMT +3.