Имя: Пароль:
1C
1С v8
Подключение через СОМОбъект из 8.2 к 7.7 (Ошибка при создании объекта)
0 america2013
 
22.11.13
07:53
Доброго времени суток, уважаемые знатоки 1С !
Прошу помочь мне с такой проблемой (изначально я нашел похожее описание здесь: v8: Как из 8.2 через ком подключиться к 7.7 SQL, но потом пошел дальше). Изначально имею код:

    v7 = Новый COMObject("V77.Application");
    Пользователь = "админ";
    Пароль ="админ";
ПутьКБазе77 = "D:\bases\база2012";
    v7.Initialize(v7.RMTrade,"/D" + ПутьКБазе77+ " /N"+Пользователь+" /P" + Пароль,"NO_SPLASH_SHOW");  
        Спр = v7.СоздатьОбъект("Справочник.Валюты");
        Спр.Выбрать();
        
        Пока Спр.ПолучитьЭлемент() = 1 Цикл  
            Сообщить(Спр.Наименование);    
        КонецЦикла;

Цель у меня какая: подключиться к базе 7.7 из 8.2 и делать выборки некоторых объектов, как если бы я находился в Конфигураторе 7.7. На данный момент имею ошибку:
{Форма.Форма.Форма(31)}: Метод объекта не обнаружен (СоздатьОбъект)
        Спр = v7.СоздатьОбъект("Справочник.Валюты");

Что может быть не так?
1 america2013
 
22.11.13
09:03
Строку

Спр = v7.СоздатьОбъект("Справочник.Валюты");

заменил на:

Спр = v7.CreateObject("Справочник.Валюты");

Ошибок нет, но 1с 8.2 стала просто зависать((((

Уважаемые, прошу, не проходите мимо!
2 ДенисЧ
 
22.11.13
09:05
В каком месте виснет?
3 america2013
 
22.11.13
09:05
При выполнении этой процедуры.
4 Рэйв
 
22.11.13
09:11
И чего всех прет подключатся из 8.х к 7.7.?
из 7.7. к 8.х по СОМ намного удобнее же работать!
Мазохисты.
5 anaed
 
22.11.13
09:13
(0) по твоей ссылке 9-ый пост v8: Как из 8.2 через ком подключиться к 7.7 SQL
может дело в  COMObject("V77.Application"); вместо COMObject("V1CEnterprise.Application"); ?
6 america2013
 
22.11.13
09:18
(5) Менял
    v7 = Новый COMObject("V77.Application");
на
v7 = Новый COMObject("V1CEnterprise.Application");

результат прежний, ошибка остается:

{Форма.Форма.Форма(33)}: Ошибка при вызове метода контекста (CreateObject)
        Спр = v7.CreateObject("Справочник.Валюты");
по причине:
Произошла исключительная ситуация (1С:Предприятие): Неудачная попытка создания объекта (Справочник.Валюты): 0
7 Масянька
 
22.11.13
09:21
По уму нужно     v7.Initialize(v7.RMTrade,"/D" + ПутьКБазе77+ " /N"+Пользователь+" /P" + Пароль,"NO_SPLASH_SHOW");   делать в Попытке. Попробуй, посмотри на результат.
7.7 стоит правильно - прописана в реестре и т.д.?
8 ЧессМастер
 
22.11.13
09:22
(4) +100500
9 ЧессМастер
 
22.11.13
09:22
(0) тебе принципиально подключатся к 77 из 82 ? сделай наоборот или подключайся к 77 по ОЛЕ
10 america2013
 
22.11.13
09:25
(4) и (9) В моем случае база 8.2 одна, а 7.7 - несколько.

Я пробовал сделать:

    v7 = Новый COMОбъект("V77.ComConnector");

но получил ошибку:

{Форма.Форма.Форма(4)}: Ошибка при вызове конструктора (COMОбъект)
    v7 = Новый COMОбъект("V77.ComConnector");
по причине:
Недопустимая строка с указанием класса

Что не так?


(7) Пробовал и попытку, ошибка та же, про установку и реестр не в курсе, ставил не я.
11 anaed
 
22.11.13
09:25
12 Масянька
 
22.11.13
09:32
(10) То есть подключается без проблем?
13 ДенисЧ
 
22.11.13
09:32
"V77.ComConnector"
Мечта...
14 Рэйв
 
22.11.13
09:34
(13)+100
15 бомболюк
 
22.11.13
09:35
попробуй уж зараз и
v7.EvalExpr("СоздатьОбъект(""Справочник.Валюты"")");
у меня помнится только так и работало.
16 america2013
 
22.11.13
09:36
(12) Подключается без проблем СОМОбъект получаю.

(13) Я же описал в (10), что якобы не найден класс.


(11) и (15) Успел применить, но без результатно:



{Форма.Форма.Форма(2)}: Ошибка при вызове конструктора (COMObject)
    v7 = Новый COMObject("V77M.Application");
по причине:
Недопустимая строка с указанием класса

Заменил на предыдущую:

v7 = Новый COMObject("V77.Application");





{Форма.Форма.Форма(35)}: Ошибка при вызове метода контекста (EvalExpr)
        Спр = v7.EvalExpr("CreateObject(""Справочник.Валюты"")");
по причине:
Произошла исключительная ситуация (1С:Предприятие): Неудачная попытка создания объекта (Справочник.Валюты): 0
17 Рэйв
 
22.11.13
09:38
(16)>>Ошибка при вызове конструктора (COMObject)

У меня впечатление что ты запускаешь 77 по ярлыку с сервера, а на самой машине локально 77 у тебя нет.
Оно тогда такое и пишет.
18 Guk
 
22.11.13
09:38
(16) а на кой тут EvalExpr использовать?...
19 anaed
 
22.11.13
09:39
(16) Уже второй раз справочник не может создать, он там вообще есть нет?)))
20 Guk
 
22.11.13
09:39
(17) если бы 77 не было, оно бы вообще не подключилось...
21 Рэйв
 
22.11.13
09:40
(20)Так он и пишет, что ошибка конструктора
22 america2013
 
22.11.13
09:40
(17), (20) Как устанавливалась 7.7 не в курсе, но вручную запустить и зайти в базу я могу и справочник такой конечно же есть.
23 Guk
 
22.11.13
09:41
(21) он пишет, что ошибка создания справочника. я бы тоже самое написал на месте 77. но при этом соединение уже установлено, иначе оно раньше вывалилось...
24 Guk
 
22.11.13
09:43
(22) я не спец конечно, но может попробовать
Спр = v7.CreateObject("Справочник.Валюты");
25 hhhh
 
22.11.13
09:44
(23) он пишет Метод объекта не обнаружен (СоздатьОбъект). Это типично для отсутствия подключения.
26 america2013
 
22.11.13
09:44
Пробовал другой объект создать, на данный момент имею код:

    v7 = Новый COMObject("V77.Application");
    Пользователь = "админ";
    Пароль ="админ";
    Попытка
        v7.Initialize(v7.RMTrade,"/D" + ПутьКБазе77+ " /N"+Пользователь+" /P" + Пароль,"NO_SPLASH_SHOW");   //RMAccnt
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
        Спр = v7.CreateObject("Справочник.Банки");    


Ошибка:

{Форма.Форма.Форма(34)}: Ошибка при вызове метода контекста (CreateObject)
        Спр = v7.CreateObject("Справочник.Банки");    
по причине:
Произошла исключительная ситуация (1С:Предприятие): Неудачная попытка создания объекта (Справочник.Банки): 0
27 Guk
 
22.11.13
09:45
(25) т.е. программист не проверяет, установлено у него соединение или нет? мне такое даже в голову придти не могло...
28 Rie
 
22.11.13
09:46
(16) А инициализация-то - где?
29 Rie
 
22.11.13
09:47
(26) Initialize не ошибку порождает, а выдаёт 1 или 0.
30 Рэйв
 
22.11.13
09:47
Соединение =v7.Initialize(.......
31 Рэйв
 
22.11.13
09:47
Спр = Соединение.CreateObject("Справочник.Банки");
32 ЧессМастер
 
22.11.13
09:48
(16) у тебя подключение происходит ? ты в мониторе пользователей его видешь ?
33 america2013
 
22.11.13
09:49
(27) Перед строкой

Спр = v7.CreateObject("Справочник.Банки");

получаю в отладчике:

Свойство  Значение      Тип
v7      COMОбъект    COMОбъект
34 america2013
 
22.11.13
09:51
(32) В Мониторе вижу среди активных пользователей.
35 Rie
 
22.11.13
09:52
(30) Соединение у тебя - это будет число. Поэтому (31) - нонсенс.
36 america2013
 
22.11.13
09:54
Делал:

    Попытка
        Соединение = v7.Initialize(v7.RMTrade,"/D" + ПутьКБазе77+ " /N"+Пользователь+" /P" + Пароль,"NO_SPLASH_SHOW");   //RMAccnt
    Исключение
        Сообщить(ОписаниеОшибки());
    КонецПопытки;
        Спр = Соединение.CreateObject("Справочник.Банки");    

Получил:

{Форма.Форма.Форма(34)}: Значение не является значением объектного типа (CreateObject)
        Спр = Соединение.CreateObject("Справочник.Банки");
37 Рэйв
 
22.11.13
09:55
(35) да, с СОМ перепутал:-)
38 ЧессМастер
 
22.11.13
09:55
(36) попробуй выполнить этот код с машины где точно установлена 1С 7.7
39 Масянька
 
22.11.13
09:55
Рабочий код (правда под 8.1), работает по сей день:

Процедура ПодключитьсяНажатие(Элемент)
    
    БД = "";
    
    БД = Новый COMОбъект("V77.Application");
    
    Попытка
        СтрокаПодключения = "/D""" + СокрЛП(ПутьКБазеДанных) + """/N""" + СокрЛП(Пользователь) + """ /P""" + СокрЛП(Пароль) + """";
        Открыта = БД.Initialize(БД.RMTrade, СтрокаПодключения, "NO_SPLASH_SHOW");
        Если Открыта Тогда
            ЕстьПодключение = Истина;
            ЭлементыФормы.СообщениеОПодключении.Заголовок = "База успешно подключена."
        Иначе
             Предупреждение("Ошибка при подключении!");
            ЕстьПодключение = Ложь;
        КонецЕсли;
    Исключение
         Предупреждение("Ошибка при подключении!");
        ЕстьПодключение = Ложь;
    КонецПопытки;
    
КонецПроцедуры
40 Rie
 
22.11.13
09:56
(36) Initialize выдаёт _число_!!!
Если Соединение=1 Тогда
    Спр = v7.CreateObject(.....
41 america2013
 
22.11.13
09:59
(39) С подключением и инициализацией у меня проблем нет, проблемы начинаются, когда в этом подключении начинаю создавать объекты.
42 Масянька
 
22.11.13
10:00
(41) Господи! Да как же тяжело с вами.....
Тебе "Открыта = БД.Initialize(БД.RMTrade, СтрокаПодключения, "NO_SPLASH_SHOW");", что возвращает?
43 america2013
 
22.11.13
10:05
(42) Ошибка при подключении
44 Масянька
 
22.11.13
10:06
(43) Слава Богу! Еще вопросы есть? Иди рой - как установлена 7.7.
45 George Wheels
 
22.11.13
10:15
ПутьКБазе в строке подключения возьми в кавычки.

В отладчике должен увидеть:
/D"D:\bases\база2012" /Nадмин /Pадмин
46 america2013
 
22.11.13
10:23
(44) Переустановил платформу, удалил базу из списка, добавл снова, ошибка прежняя:

(45) Строку подключения имею в виде:
/D"D:\bases\база2012" /Nадмин /Pадмин
(то есть так же)

Ошибка в подключении(((
47 america2013
 
22.11.13
10:24
Взял в "" пользователя и пароль, то же самое.
48 hhhh
 
22.11.13
10:24
(46) какую переустановил? 7.7?
49 Масянька
 
22.11.13
10:25
(460 как переустановил платформу?
50 america2013
 
22.11.13
10:25
(48) Переустановил 7.7. Просто по верху запустил установщик.
51 Масянька
 
22.11.13
10:28
(50) Wind'а какая стоит?
52 america2013
 
22.11.13
10:30
(50) Windows 7 Домашняя базовая
53 hhhh
 
22.11.13
10:31
(50) поищи V77.Application в реестре windows
54 hhhh
 
22.11.13
10:32
(52) почему домашняя. Поставьте нормальный windows
55 Масянька
 
22.11.13
10:35
(52) Не знаю точно, но - тут могут быть проблемы. Домашняя базовая - урезана по куче всего.
А сама 7.7 точно запускается на этом же компе?
56 america2013
 
22.11.13
10:37
(55) Запускается на этом компе

(53) Есть в реесте (если нужно)
HKEY_CLASSES_ROOT\V77.Application

HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{63112D80-94F0-11D2-9F39-008048DA120F}

HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{63112D80-94F0-11D2-9F39-008048DA120F}\ProgID

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\V77.Application

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{63112D80-94F0-11D2-9F39-008048DA120F}
57 america2013
 
22.11.13
10:41
Пробовал на другом компе (Видовс 7 Проф), 8.2 и 7.7 установлена цивильно, ошибка при подключении.
58 Масянька
 
22.11.13
10:46
(56) 64 бита?
59 Масянька
 
22.11.13
10:54
В реестре найди - HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles - что там в путях?
60 america2013
 
22.11.13
11:50
(58) Да, 64.

(59) Есть ветка:
HKEY_USERS\S-1-5-21-1419102363-2094869754-1374439945-1000\Software\1C\1Cv7\7.7\Titles

Параметр:
D:\bases\база2012\
Значение:
(рабочая)
61 dk
 
22.11.13
11:56
я пропустил или не было информации 8-ка файловая или скульная?
62 america2013
 
22.11.13
11:58
1С:Предприятие 8.2 (8.2.18.96)

База на SQL-сервере.
63 dk
 
22.11.13
12:02
базу 7.7. над прописать для виндового юзера, под которым сервер 1с крутится
на винде где сервер 1с крутится
64 Масянька
 
22.11.13
12:03
(60) И как 7.7 переустанавливал?
65 america2013
 
22.11.13
12:05
Просто запустил установщик (по верху). Не удалял перед этим, т.к. куча прописанных баз. Обязательно сносить всё перед повторной установкой?
66 Масянька
 
22.11.13
12:07
(65) Подробнее: какой установщик?
67 america2013
 
22.11.13
12:12
(66) Какой на предприятии дали : ) У всех такой стоит. Но на стандартный из коробки мало похож.
68 america2013
 
22.11.13
12:16
...пытался из своих запасов установить (коробка, диск, 1с 7.7, 7.70.027), но ругается на версию Виндовс((((((
69 hhhh
 
22.11.13
12:39
(68) так эта штука из (0), она наКлиенте или НаСервере?
70 america2013
 
22.11.13
12:47
(69) 8.2 запускается на клиенте, никаких директив не указываю, база 8.2 лежит на сервере, на компе-клиенте лежит база 7.7, к ней пытаемся подключиться.

Строка подключения верного формата:
/D"D:\bases\база2012" /N"админ" /P"админ"
Нужны ли эти все кавычки?
71 dk
 
22.11.13
12:52
(70) а почему думаешь, что на клиенте?
создай файловую и там проверь, вот это будет на клиенте точно ))
72 Масянька
 
22.11.13
12:53
(70) На каком сервере и на каком компе? Они разные (физически)?
73 hhhh
 
22.11.13
13:02
(70) не где запускается 8.2, а эта процедура, что там написано? И в каком модуле она?
74 George Wheels
 
22.11.13
13:16
(70) D:\bases\база2012 - это на сервере или на твоём компе?
75 america2013
 
22.11.13
13:26
База 7.7 локальная, на моем компе (к ней жажду подключиться), база 8.2 на сервере (по сути не нужна). Сама процедура во внешней обработке в модуле формы.
76 dk
 
22.11.13
13:30
уже сотка не за горами, а автор все еще не впиливает
77 Масянька
 
22.11.13
13:32
(76) Сегодня такая традиция....
78 america2013
 
22.11.13
13:39
У меня был опыт подключения базы SQL 1с 8.2, также из базы на SQL 1с 8.2, вся разница была в строке подключения (сервер, кластер), но что здесь может быть не верно указано:

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


Строка подключения (в отладке) имеет вид:
/D"D:\bases\база2012" /N"админ" /P"админ"
79 america2013
 
22.11.13
13:49
Попытка-Исключение - обязательно? Если без попытки, то Открыта возвращает - Истина, но после строк:

        Спр = v7.CreateObject("Справочник.Валюты");    
        Спр.Выбрать();

На долго зависает, хотя в справочнике Валюты не более 10 элементов.

Может быть его надо потом как-то закрывать?
80 George Wheels
 
22.11.13
13:53
(79) В Исключение используй ИнформацияОбОшибке().
Проверка на открытость не нужна. Если база не откроется, то сработает Исключение.
81 George Wheels
 
22.11.13
13:55
(79) Закрывать нужно v7.
v7 = "" или v7 = Неопределено
82 George Wheels
 
22.11.13
14:00
(81) + Если не закроешь, то процесс зависнет в памяти и закроется только после выхода из 8.2. Поэтому при втором запуске обработки подключение к базе не произойдет.

И ещё если 77 закроется неправильно, то придётся её запускать в монопольном режиме.
83 Масянька
 
22.11.13
14:05
(79) У себя на компе запусти "Диспетчер задач" - там нет зависших сеансов 7.7?
84 america2013
 
22.11.13
14:23
Благодарю вас, дорогие мои, что до сих пор уделяете внимание : ) Но правда, не в состоянии я самостоятельно сообразить(((

Есть прогресс!!!

(83) Каждый раз при неудачной попытке проверяю диспетчер, про 1с 7.7 все чисто.

На данный момент код значительно упростился и работает без ошибок:

    v7 = "";
    v7 = Новый COMObject("V77.Application");
    Попытка
        СтрокаПодключения = "/D""" + СокрЛП(ПутьКБазе77) + """ /N""" + СокрЛП(Пользователь) + """ /P""" + СокрЛП(Пароль) + """";
        Открыта = v7.Initialize(v7.RMTrade, СтрокаПодключения, "NO_SPLASH_SHOW");
    Исключение
        Сообщить(ИнформацияОбОшибке());
    КонецПопытки;
        Спр = v7.CreateObject("Справочник.Валюты");    
        Спр.Выбрать();
    v7 = "";



И что же я в итоге увидел: открылась форма списка справочника 7.7 ! Где я просил её открыться? Потом заменил строку:
Спр.Выбрать();
на
Спр.ВыбратьЭлементы();

И... все заработало. Как надо. Последний вопрос - теперь в конфигураторе 8.2 буду писать синтаксис из 7.7 ?
85 america2013
 
22.11.13
14:26
...даже сетевые папки видит:
ПутьКБазе77 = "\\192.168.0.239\база\";
86 america2013
 
25.11.13
10:27
Подключение к базе установлено.

Использую код:

    ВыбДок = v7.CreateObject("Документ.СчетФактура");    
    
    
    ВыбДок.ВыбратьДокументы(НачПериода, КонПериода);
    
    Пока ВыбДок.ПолучитьДокумент() = 1 Цикл  
        Сообщить(ВыбДок.НомерДок);
    КонецЦикла;

где, начДата и конДата - реквизиты на форме 8.2.

Документы выводятся ВСЕ, но не за период начала и окончания.
Подскажите пожалуйста, как из этого подключения выбрать документы за определенный период?
87 america2013
 
25.11.13
10:28
*где, НачПериода и КонПериода - реквизиты на форме 8.2
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.