Имя: Пароль:
1C
1C 7.7
v7: Подключение через com к базе 1С 7.7
0 Vitalii72
 
02.12.16
23:16
Доброе время суток, подскажите пожалуйста, есть задача из под 8.3 подключаться к базе 7.7 и по наименованию или ИНН получать контрагента из справочника. Вот код, который использую:

&НаКлиенте
Процедура ПолучитьЗаказчика(Команда)
    
    Сообщить("Запускаем 1С 7.7",СтатусСообщения.Информация);
    Попытка
        V77 = Новый COMОбъект("V77.Application");
    Исключение
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;  
    
    Сообщить("1С 7.7 успешно запущена, соединяемся с базой",СтатусСообщения.Информация);
    
    Каталог = СокрЛП("C:\Users\Виталий\Desktop\1Cbase\1sbdb") + "\";
    Каталог77 = "C:\Users\******\Desktop\1cv77\BIN\1cv7.exe" ;
    Логин = "****";
    Пароль = "****";
    Стр    = """" + Каталог77 + """" + "enterprise /d""" + Каталог     + """"    
    + ?(Не ЗначениеЗаполнено(Логин) = 0, " /n", "")  + """" + СокрЛП("****")  + """"  
    + ?(Не ЗначениеЗаполнено(Пароль) = 0, " /p", "") + """" + СокрЛП("*****") + """";
    
    Открыта = V77.Initialize(V77.RMTrade,Стр,"NO_SPLASH_SHOW");
      
    Если Открыта = 0  Тогда
        Сообщить("Базу данных открыть не удалось!",СтатусСообщения.Информация);
        Возврат;
    КонецЕсли;
    
    Сообщить("Соединение с базой прошло успешно",СтатусСообщения.Информация);
    
    КонтрагентСОМ = V77.CreateObject("Справочник.Контрагенты");
    
    Если КонтрагентСОМ.НайтиПоНаименованию("Аванд ООО") Тогда
    Сообщить(КонтрагентСОМ);    
    Объект.Заказчик = КонтрагентСОМ;
    КонецЕсли;

    
КонецПроцедуры

Первый вопрос, если база 1с 7.7 в данный момент запущена, мне выдаёт сообщение "Базу данных открыть не удалось!". Сперва думал обычная проблема каталог пользователя занят, но зайдя под другим пользователем результат тот же. Второй вопрос как мне получить элемент справочника контрагенты из базы 7.7 в 8.3. Сейчас получаю Comhbject.
1 Alexor
 
02.12.16
23:20
Воторой вопрос, ты получаешь Сом объет.
Ты в базе 8 к Объекту.Заказчик пытаешься присвоить элемент из 7-ки.
Сообщить(КонтрагентСОМ.Наименование);
Сообщить(КонтрагентСОМ.Код);
Сообщить(КонтрагентСОМ.ИНН);

Бери эти реквизиты и ищи в своем 8 справочнике контрагентов, по реквизитам. И уже его присваивай.
2 HawkEye
 
02.12.16
23:22
(0) 1. видимо монопольно запущена...
2. НайтиПоНаименованию в 7.7 возвращает 1 или 0...
в КонтрагентСОМ - и есть элемент справочника... если найтипонаименованию = 1
3 Vitalii72
 
02.12.16
23:31
(1) (2)

спасибо за ответы

База запущена 100% в обычном режиме, если база закрыта, подключение проходит нормально.
4 Vitalii72
 
02.12.16
23:37
(1) а как найти по реквизиту в справочнике контрагенты?
Делаю:
КонтрагентСОМ = V77.CreateObject("Справочник.Контрагенты");
    
    Если КонтрагентСОМ.НайтиПоРеквезиту(Объект.ИНН) Тогда
    Сообщить(КонтрагентСОМ);    
    Объект.Заказчик = КонтрагентСОМ;
    КонецЕсли;
Выдаёт ошибку в результате.
5 Vitalii72
 
02.12.16
23:38
Объект.ИНН из формы 8.3
6 Злопчинский
 
02.12.16
23:43
(4) строкаинн = объект.инн;
И эту переменную используйте при поиске
7 Злопчинский
 
02.12.16
23:44
(4) ещё раз упомянешь про выдаёт ошибку и не приведешь сообщение об ошибке - забаню за злостное неуважение к сообществу
8 Злопчинский
 
02.12.16
23:45
(4) найти по реквизита
И возвращается число
9 Vitalii72
 
02.12.16
23:49
(8)

Спасибо за ответ, попробовал так

КонтрагентСОМ = V77.CreateObject("Справочник.Контрагенты");
    Строкаинн = объект.инн;
    Если КонтрагентСОМ.НайтиПоРеквизиту(Строкаинн) = 1 Тогда
    Сообщить(КонтрагентСОМ.Наименование);    
    Объект.Заказчик = КонтрагентСОМ.Наименование;
    КонецЕсли;


Если КонтрагентСОМ.НайтиПоРеквизиту(Строкаинн) = 1 Тогда
по причине:
Произошла исключительная ситуация (1С:Предприятие): Неверное имя реквизита!
10 Злопчинский
 
02.12.16
23:51
(9) в базе 77
11 Злопчинский
 
02.12.16
23:51
(9) открой сигтакспомощние для 77 и прочитай параметры метода найтипореквизиту
12 Vitalii72
 
02.12.16
23:57
(11)

Да, через синтакспомощника нашёл, спасибо. Пытаюсь сейчас найти, почему не подключается к базе 1с 7.7 из 8.3 если она запущена под любым пользователем.
13 HawkEye
 
02.12.16
23:58
(9) во первых, надо указать имя реквизита... 7.7 не обладает телепатическими способностями угадывать желания разработчика.

во вторых, если 7.7 - ТиС, то НайтиПоРеквизиту для ИНН - работать не будет.

в третьих, "Объект.Заказчик = КонтрагентСОМ.Наименование";
заказчик у тебя строка?

зы. не надо пытаться угадать код... надо внятно изложить что есть и что надо....
14 Злопчинский
 
03.12.16
00:02
(12) заходишь под уже зашедшим пользователем
15 Vitalii72
 
03.12.16
00:26
(14)

Пробовал под другим, не пускает, тоже думал каталог пользователя занят.
16 Злопчинский
 
03.12.16
00:41
(15) а что говорит когда не может войти
17 Vitalii72
 
03.12.16
01:45
(16)

Доходит до этой строки
Открыта = V77.Initialize(V77.RMTrade,Стр,"NO_SPLASH_SHOW");

а дальше значение Открыто встаёт 0 и соответственно собщение "Базу данных открыть не удалось".    
    Если Открыта = 0  Тогда
        Сообщить("Базу данных открыть не    удалось!",СтатусСообщения.Информация);
        Возврат;
    КонецЕсли;

В другом топике на мисте есть схожая проблема, только её пытаются решить через МонопольныйРежимOLE, но если я правильно понимаю, база будет заблокирована для остальных (
18 Torquader
 
03.12.16
02:32
А нахрена вы ему в Стр 1Cv7.exe пихаете ? Оно ему как рыбке зонтик.
19 Torquader
 
03.12.16
02:35
И потом, /u задаёт каталог пользователя, отличный от самой базы - если его задать, то можно будет войти второй раз.
20 Torquader
 
03.12.16
02:40
Result=V77.Initialize(V77.rmTrade,"Enterprise /dC:\1SBASE\ /uC:\1SBASE\OLEUSER\ /nOleUser /pOlePass /tC:\TEMP\","NO_SPLASH_SHOW");
21 Aleksey
 
03.12.16
06:50
Я бы отказался бы от оле v7 в пользу прямого доступа к дбф файлам. Меньше проблем будет с индексированием и прочей фигней
22 Провинциальный 1сник
 
03.12.16
07:07
(19) Как раз наоборот, если каталог пользователя не задан - можно заходить сколько угодно раз. Если задан - только один.
23 Shved_72
 
03.12.16
07:39
77оле часто остаётся висеть как процесс. Найти и убить через диспетчер задач
24 Vitalii72
 
03.12.16
11:19
(20) (22)

Вообще убрал Стр, сделал как у Вас, каталог пользователя пробовал убирать и ставить, все равно не хочет грузить. Просто даже запускаю 7.7 под одним пользователем, а из 8.3 под вторым, не выходит (.
25 Vitalii72
 
03.12.16
11:19
Если закрыть 7.7, всё проходит ок и ищет по ИНН
26 Vitalii72
 
03.12.16
11:21
Открыта = V77.Initialize(V77.RMTrade,"Enterprise /dC:\Users\Виталий\Desktop\1Cbase\1sbdb\ /uC:\Users\Виталий\Desktop\1Cbase\1sbdb\usrVit\ /nВиталий /p**** /tC:\TEMP\","NO_SPLASH_SHOW");
27 Злопчинский
 
03.12.16
11:22
(24)  под пользователем под которым ты заходишь в 77 отключены права использования как олесервера
28 Vitalii72
 
03.12.16
11:25
(27)
просто через com соединение не сделать, без Оле? просто ищу сейчас информацию как решить проблему и отзывы не очень.
29 Cool_Profi
 
03.12.16
11:25
(28) А чем, по твоему, отличается ком от оле в случае 77?
30 Злопчинский
 
03.12.16
11:26
Второй вариант что у тебя запускается однопользовательская
31 Vitalii72
 
03.12.16
11:33
(30)

Попробовал открыть через обычные режим 2 разных у чётки, не фига, значит реально дело не в коде. Спасибо, хоть знаю куда смотреть сейчас!
32 Torquader
 
05.12.16
01:56
(31) Если нет ключа /m (монопольно) при запуске и в окне выбора галочка "монопольно" не снимается, что у вас локальный однопользовательский ключ - два раза не зайти.
33 Web00001
 
05.12.16
04:00
(7) Он просто сам их не читает :)
Основная теорема систематики: Новые системы плодят новые проблемы.