К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Подключение из 8.2 к 7.7 по ОЛЕ

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


Гость
1 - 06.12.2012 - 14:50
База="";
База=Новый COMОбъект("V77.Application");
Попытка
СтрокаПодключения = "/D"""+СокрЛП(ПутьКБазе)+""" /N"""+СокрЛП(Пользователь)+""" /P"""+СокрЛП(Пароль)+"""";
Открыта=База.Initialize(База.RMTrade,СтрокаПодключ ения,"NO_SPLASH_SHOW");
Если Открыта Тогда
ЕстьПодключение = Истина;
Сообщить("Есть подключение");
Иначе
Предупреждение("Ошибка при подключении!");
ЕстьПодключение = Ложь;
КонецЕсли;
Исключение
Предупреждение("Ошибка при подключении!");
ЕстьПодключение = Ложь;
КонецПопытки;
Возврат ЕстьПодключение;
Гость
2 - 06.12.2012 - 15:43
V77s.Application
Гость
3 - 06.12.2012 - 19:45
DeiMos, и v77 и v77s пробовал - результат одинаковый
Гость
4 - 06.12.2012 - 22:14
Скорее всего, попортился реестр. Где этот самый Application связан с утилитой. И с ее расположением, естественно.
Проще всего для исправления инсталлировать "семерку" заново.
Ну, или глянуть комп, где все хорошо вызывается, и сравнить соответствующие ветви реестра.
Гость
5 - 06.12.2012 - 22:29
И исчё... Бывают трудности, если имеются несколько (т.е. больше одного BIN-а с екзешникоми разных компонент. Например, один - для бухии, другой - для расчета. И вызов ОЛЕ должен быть адресным: вызывать екзешник с определенного БИНа. Вот здесь не обойтись правкой реестра, ибо инсталлятор засандаливает один адрес БИНа для всех апликаторов: и v77s, и v77l, v77m, и, конечно v77. Затирая прежнюю работу инсталлятора другой компоненты.
Но это полбеды: по каким-то неизвестным причинам эта тонкая настройка реестра ломается. Поскольку у данного клиента я не торчу постоянно, обнаружить "когда" мне не удалось. И, между прочим, все юзеры, цепляющиеся к базам, не имеют никаких прав (виндовых, конечно) лазать в этот реестр, и что-то менять.
Но тем не менее...
Гость
6 - 07.12.2012 - 06:15
VZ, две базы лежат на одном сервере рядом, одна SQL а другая ДБФ - к дбф подключается без проблем... что может быть с скл базой?
Гость
7 - 07.12.2012 - 10:51
скажу даже больше - проверил подключение из 77 к 77 с той же строкой подключения и все работает! и даже если запускать это все в клиентской части на своем компе - все работает, а на сервере - ну никак( чего серверу то не хватает?
Гость
8 - 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-разрядных осей PROGRA~2 - это Program Files (x86). Бо именно в этот раздел должен быть запулен "семерочный" екзешник. А ветвь {63112D80-94F0-11D2-9F39-008048DA120F** содержать параметр InprocHandler32 со значением Ole32.dll.
Аналогичное строение реестра для V77s.Application и прочих ".Application"-ов.
При поиске V77.Application видны соответствующие соседи. А рядом с {63112D80-94F0-11D2-9F39-008048DA120F** - их параметры. Все разложено по кучкам ;)
Гость
9 - 07.12.2012 - 12:18
VZ спасибо! пойду админа мучать а то к серверу доступ только у него
Гость
10 - 07.12.2012 - 12:32
посмотрели все вроде на месте и совпадает. Ну это и логично - на том же сервере к дбфной базе без проблем подключается. я вот думаю может проблема в 2005 SQL?
Гость
11 - 07.12.2012 - 17:00
10-exDenver > Вроде?
"Аналогичное строение реестра для V77s.Application" - точно присутствует?
Гость
12 - 07.12.2012 - 17:39
10-exDenver > Смотреть надо, начиная с очевидного. OLE-сервер организует не "1С", хоть "семерка", хот "восьмерка", да хоть "тридцатьчетверка". А ось. А ей все равно на вызывающий клиент.
Потому надо внимательно изучить строки подключения на предмет ошибок. Путь к базе может быть без кавычек, если нет внутренних пробелов, или от в нотации 8.2 (пример: C:\PROGRA~2\1Cv77\BIN\1cv7.exe). Хотя представление 8.2 в NT-ых осях может быть запрещено (конкретное место реестра не помню, и искать сейчас не буду).
Лучше всего строку вызова отладить в значке. Т.е., делаем значок вызова конкретной базы с конкретным пользователем, конкретным пассом. Если все отлично запускается, перетаскиваем параметры в модуль в скобки Initialize (без начала C:\PROGRA~2\1Cv77\BIN\1cv7.exe - это подставит ось из реестра).
Сообщение "Неизвестная ошибка" может быть при нарушении баланса кавычек.
Можно выкинуть ключи /N и /P (из-за чего появтся приглашение ввести юзера и пароль ручками), и заводить их потом, последовательно, убедившись, что инициализация клюет на путь к базе.
Гость
13 - 07.12.2012 - 17:49
+12 Пользуйся утилами, которые могут показать захват базы. Например, 1calmin. Starter1C тоже это умеет (мой выбор).
Гость
14 - 07.12.2012 - 18:28
VZ, я в (7) писал что с этой же строкой подключения в клиентской части подключение проходит - т.е. на моем локальном компе с компоненатми и правами все в норме. а на сервере происходят какие странности
Гость
15 - 07.12.2012 - 19:42
DEP?
Гость
16 - 07.12.2012 - 20:01
14-exDenver > Сервер OLE вызывается из той же среды, где его инициировал клиент. Т.е., если клиент в локальном компе - значит, и сервер OLE вызывается с того же локального компа. Если клиент на снрвенре - соответственно, и OLE-сервер должен быть на сервере. Потому как при вызове COM-объекта V77.Application ось лезет в свой реестр.
И причем здесь "на моем локальном компе с компоненатми и правами все в норме"? А на сервере - все в норме? Реестр правильно настроен для вызова сом-объекта, или как?
15-DeiMos > DEP здесь непричем: если можно вызвать одноэсину интерактивно, значит, можно вызапть как и оле-объект.
Другое дело, что пользователь "1С" может не обладать правами работать с оле-вызовом. Но это забота ТС проверить.
17 - 08.12.2012 - 05:52
много раз обращал внимание на тот факт, что ОС запоминает в реестре путь к приложению при каждом его вызове. Мне тоже нужно было неоднократно настраивать OLE-обмен между V82 и V77.
К примеру V77 на компе не установлена,запускаю её с флэшки, прописываю путь к базе, открываю базу, закрываю её. Цепляюсь к V77 из V82 - всё работает.
Переношу bin V77 на комп локально, флэшку вынимаю. Снова запускаю V77 теперь уже с HDD, закрываю. Снова цепляюсь цепляюсь к V77 из V82 - снова всё работает.
Гость
18 - 10.12.2012 - 08:50
доброго времени суток всем!
16 - я это все понимаю
У меня задача чтобы подключение к 7.7 работало на сервере, т.е под пользователем под которым запущен сервер 1с 8.2. При условии что база 7.7 лежит на SQL2005. Все необходимые права у этого пользователя есть (проверял даже с предоставлением админских прав). COM-объект создается, а на строке Initialize вешается... При этом я вижу в мониторе что пользователь зашел в базу. Подключение к рядом лежащей базе в формате ДБФ проходит на ура (т.е. проблемы с написанием пути отпадают). Вот и не могу понять в чем проблема
19 - 11.12.2012 - 07:53
(18) А база 77 самописная? ВК какие-нить используются?
Попробуй эксперимента ради взять типовую Бухгалтерию 7.7, создай базу на SQL2005 и подключись к ней штатными средствами из БП8.2 хотя бы для переноса справочников :)
Ну и, попробуй наконец так
База=Новый COMObject("V1CEnterprise.Application");
20 - 11.12.2012 - 07:56
19+ надеюсь, что у тебя comcntr.dll из правильной папки Bin зарегистрирован как OLE-сервер
Гость
21 - 12.12.2012 - 09:28
19 - попробовал к новой базе на 2005, пробовал к базе на 2000, перебрал все вариации объектов... у меня БП82 нет к сожалению - только документооборот, попробую поискать конфу
Гость
22 - 12.12.2012 - 12:43
пробовал запускать на самом сервере 1с под пользователем под которым запущен сервер - с директивой &НаКлиенте все отрабатывает, а &НаСервере - фигвам... замучался сам и админа замучал
23 - 12.12.2012 - 14:09
(22) стрянно всё это, что-то в твоей консерватории не тогойт ...
а ты директиву &НаСервере c каким обработчиком используешь??? уж не "ПриОткрытии(Отказ)" ли???
нужно использовать обработчик ПриСозданииНаСервере(...), как то так

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


К списку вопросов






Copyright ©, Все права защищены