Имя: Пароль:
1C
1С v8
com объект V77.Application
0 annapam1983
 
14.11.14
17:40
Здравствуйте? моя задача прочитать данные из 1С77 в 1С82. Решили (все отделом) делать это с помощью COM объекта. я написала процедуру - все как положено
Попытка
База = Новый COMОбъект("V77S.Application");
Исключение
....
РезультатПодключения=База.Initialize(База.RMTrade,СтрокаПодключения,?(ЗапускБезЗаставки = 1,"NO_SPLASH_SHOW",""));
процедура эта (назовем ее ТестПодключения) должна отрабатывать на сервере (ну допустим 1srv) под Windows Server 2012 под пользователем user1c82. На этой машине установлен 1С77 для sql. Класс зарегистирован. Com объект создается.
А Вот к базе не подключается. к любой. пробовали и "настоящую" -(sql -ную) и локальную, файловую. результат при выполнении метода Initialize вот такой:


Faulting application name: 1cv7s.exe, version: 7.70.0.27, time stamp: 0x4573fcd8
Faulting module name: Frame.dll, version: 7.70.0.14, time stamp: 0x3e9e540a
Exception code: 0xc0000005
Fault offset: 0x0000d1ad
Faulting process id: 0xc30
.....

Если под пользователем user1c82 на сервере 1srv запустить непосредственно 7-ку она любую базу открывает абсолютно нормально.


Если попробовать запустить ТестПодключения с других компов (моего или компа коллеги Win 8, Win 7)
( именно местную базу - но с такой же конфигурацией) то Com-объект благополучно создается и подключается.
Вот этот последний тест делали и из под своих пользователей и из под "user1c82".
Вопрос. что убивает мой com? Предотвращение выполнения данных?
1 Otkr
 
14.11.14
17:57
Да. 7.7 очень не любит DEP
2 GreyK
 
14.11.14
18:10
(0) runas вам в помощь, но пароли слетают часто :(
Можно ещё организовать постоянный вход пользователя для запуска 7ки.
Оба варианта связаны с понижением безопасности сервера.
3 SleepyHead
 
гуру
15.11.14
08:52
Конвертация данных вам в помощь.
4 SleepyHead
 
гуру
15.11.14
08:53
Но если КД не ходите, пробуйте по очереди создавать:

База = Новый COMОбъект("V77S.Application");
База = Новый COMОбъект("V77L.Application");
База = Новый COMОбъект("V77M.Application");
База = Новый COMОбъект("V77.Application");

какая-то одна должна сработать.
5 GreyK
 
15.11.14
12:31
(3) И как КД поможет запустить 7ку?
6 annapam1983
 
17.11.14
08:10
А не слышал ли кто такого утверждения "Из сеанса сервера 1с 8 вызвать 7.7 по OLE не получиться. Суть в том, что вызов OLE - интерактивный режим (вызывается не COM ядро, а вся программа 77).
Нужно организовывать подключение с клиентского сеанса 8"
7 annapam1983
 
17.11.14
08:11
И не  проверял ли на практике ?
8 annapam1983
 
17.11.14
08:11
База = Новый COMОбъект("V77S.Application");
База = Новый COMОбъект("V77L.Application");
База = Новый COMОбъект("V77M.Application");
База = Новый COMОбъект("V77.Application");      


понятно энто. OLE объект как раз таки создается.
9 annapam1983
 
17.11.14
08:11
у меня такой:  "V77S.Application"
10 DmitrO
 
17.11.14
08:27
А пользователь user1c82, под которым работает серверный процесс 8.2, имеет полный доступ по smb к каталогу в базы данных 7.7?
11 annapam1983
 
17.11.14
08:31
ага, имеет. вполне себе.   Сама по себе 1С-ка 7-ка  с нужной базой   стартует.  на сервере , из под usr1c82    - того самого.
12 annapam1983
 
17.11.14
08:32
Вот мне бы все -таки хотелось узнать мнение по поводу сообщения (6)
13 vde69
 
17.11.14
08:35
1. для пользователя user1c82 нужно добавить роли "Пользователь DCOM", "интерактивный вход"
2. для пользователя user1c82 нужно добавить файловый доступ на папку с базой
3. нельзя использовать ЛЮБЫЕ оконные процедуры в 7.7
14 vde69
 
17.11.14
08:35
(13) и да перезагрузить сервер 1с придется...
15 vde69
 
17.11.14
08:37
в дополнение, если будет ЛЮБАЯ ошибка, или вопрос или "сообщить" в 1с - то она зависнет....
16 annapam1983
 
17.11.14
08:38
(13) для пользователя user1c82 нужно добавить роли "Пользователь DCOM", "интерактивный вход"      

Это где ?  в конфигураторе делается?

файловый доступ есть.

оконные процедуры не используются.
17 annapam1983
 
17.11.14
08:38
в дополнение, если будет ЛЮБАЯ ошибка, или вопрос или "сообщить" в 1с - то она зависнет....    
это да...  понятно.
18 DmitrO
 
17.11.14
08:38
(6)эта мысль не лишена смысла, но слово "не получиться" тут надо заменить на "не удобно", т.к. любое модальное окно (с вопросом например) подвесит ваш COM объект.
19 vde69
 
17.11.14
08:44
(16) для ВИНДОВОГО пользователя под которым работает сервер 1с, добавляется в винде!
20 annapam1983
 
17.11.14
08:44
(18) согласна, видела такое воочию - если задать неправильный путь в строке  - коннекторе  - 7-ка, я так понимаю,  открывает диалог "Запуск 1С Предприятия"..     8-ка  в это время висит..
21 DmitrO
 
17.11.14
08:49
(20)по этой причине мы, например, и не используем V77S.Application для интеграции никогда, вместо этого используем либо прямой доступ к БД 77, либо специальный веб-сервис в 8ке, разработанный для интеграции (для 7ки разработан удобный SOAP клиент).
22 DmitrO
 
17.11.14
08:53
кстати и для интеграции между 8кой и 8кой мы теперь тоже не используем COM вообще, а используем тот же веб-сервис, но там причина несколько другая.
23 vde69
 
17.11.14
08:54
(21) для прямого доступа к файловой 7.7 надо реестр править :)

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase]
"DataCodePage"="ANSI"
"BDE"=dword:00000002
24 vde69
 
17.11.14
08:56
(22) а я использую обмен через файл и планировщики, это полностью исключает зависимость базы от второй...
25 DmitrO
 
17.11.14
09:01
(23)ну, файловых 7ок мы не держим, ну их.. :)
26 annapam1983
 
17.11.14
09:04
(23)   :)))))))
27 dk
 
17.11.14
09:13
(20) не только неправильный путь до базы
но и при первом запуске коннекта этого виндового юзера к любой базе 1с - появится окно с предложением добавить эту базу в список баз 1с77 у текущего виндового юзера
-------
короче нужно проверить есть у данного винд. юзера на данном компе / сервере эта база 1с 77 в списке баз
28 annapam1983
 
17.11.14
09:17
(20) угу. да.  хлопот-то)
29 annapam1983
 
17.11.14
09:19
переписала тест соединения на стороне клиента.  работает...  по крайней мере на моей  машине...
30 vde69
 
17.11.14
09:21
(27)для простого запуска это так (я делал проверку в реестре перед запуском)

для оле вроде не нужно, хотя может я ошибаюсь, давно уже с 7.7 ничего не делал
31 dk
 
17.11.14
09:22
для оле тоже нужно
32 Torquader
 
17.11.14
10:13
(30) Там ещё очень много окон может появляться - я делал перехватчик, который эти окна закрывает - он даже пароль авторизации умел вводить, только вот оказалось, что запуск из-под службы приводит к тому, что памяти рабочего стола оказывается меньше, чем нужно 1С, если оно открывает что-то более чем одно окно.
OLE-обмен в случае exe-файла (а 1С 7.7 запускается в отдельном процессе, в отличие от COMConnector в 8.Х) приводит к переносу данных через процессы, а также к тому, что что-то в семёрке может выполняться параллельно с работой OLE.
P.S. а записать базу в реестр перед запуском - не такая уж и проблема.