V83.COMConnector: Поле объекта не обнаружено (Справочники)

1. Ligret 02.08.18 23:09 Сейчас в теме
Доброго времени суток,

Пожалуйста, помогите с решением следующей задачи: 2 базы 1С 8.3.12.1412, управляемые формы, подключение между базами через COMConnector:

&НаКлиенте
Процедура Подключить()
	БазаУправленка=Новый COMОбъект("V83.COMConnector");
	Попытка
		БазаУправленка.Connect("Srvr = ""ххх"";Ref = ""хх""; Usr = ""хх""; Pwd = ""хх""");
	Исключение
                Возврат;
	КонецПопытки;
              
        Касса = БазаУправленка.Справочники.Кассы;
КонецПроцедуры	
Показать


Как результат COMОбъект живой, но при попытке доступа к БазаУправленка.Справочники.Кассы, выдает сообщение об ошибке «Поле объекта не обнаружено (Справочники)». Тоже с БазаУправленка.NewObject("Запрос"). При этом в журнале регистрации удаленной базы имеется запись о начале, успешной аутентификации и последующем завершении сеанса, все одним временем, секунда в секунду.

Где грабельки? Тыкните, пожалуйста, носом.
По теме из базы знаний
Найденные решения
11. Bene_Valete 188 03.08.18 08:02 Сейчас в теме
(8) Вам сначала нужно поместить полученное подключение в переменную, и возвращать уже ее:
&НаСервере
Функция ПодключениеКУдаленнойБазе()
Соединение=Новый COMОбъект("V83.COMConnector");
Попытка
БазаУправленка = Соединение.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
"ru='Произошла ошибка подключения к базе'; "));
БазаУправленка = Неопределено;
КонецПопытки;

Возврат БазаУправленка;
КонецФункции

&НаСервере
Процедура ПодключитьсяСервер()
БазаУправленка = ПодключениеКУдаленнойБазе();
Запрос = БазаУправленка.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| Кассы.Ссылка КАК Ссылка,
| Кассы.Наименование КАК Наименование
|ИЗ
| Справочник.Кассы КАК Кассы";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
….
КонецЦикла;
БазаУправленка = Неопределено;
КонецПроцедуры
Показать
alina0587; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Timur.V 78 03.08.18 00:02 Сейчас в теме
В исключение нужно не возврат писать, а сообщение об ошибке.

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось подключиться к базе" + ОписаниеОшибки(); 
Сообщение.Сообщить();


Может кэш почистить.

Что-нибудь такое работает, ниже?
Док = БазаУправленка.Документы.ПлатежноеПоручение.СоздатьДокумент(); 
3. Bene_Valete 188 03.08.18 03:06 Сейчас в теме
Переделайте следующим образом:
&НаКлиенте
Процедура Подключить()
    БазаУправленка=Новый COMОбъект("V83.COMConnector");
    Попытка
       Подключение =  БазаУправленка.Connect("Srvr = ""ххх"";Ref = ""хх""; Usr = ""хх""; Pwd = ""хх""");
    Исключение
       Сообщить(ОписаниеОшибки());
    КонецПопытки;
              
        Касса = Подключение.Справочники.Кассы;
КонецПроцедуры    
Показать
4. shutilin 03.08.18 04:58 Сейчас в теме
&НаКлиенте - вы даже свои справочники не увидите, а уж в подключенной базе и подавно.
5. Bene_Valete 188 03.08.18 05:26 Сейчас в теме
(4) Верное замечание, соединение нужно возвращать на клиенте, а дальнейшие операции производить на сервере

&НаСервере
Процедура КомандаВыполнитьНаСервере()
	
	Соединение = УстановитьCOMСоединение(); 
        Касса = Соединение.Справочники.Кассы;

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

Функция УстановитьCOMСоединение()
        		
    Попытка
        Коннектор = Новый COMObject("V83.COMConnector");
        Соединение = Коннектор.Connect("Srvr = ""ххх"";Ref = ""хх""; Usr = ""хх""; Pwd = ""хх""");
        Возврат Соединение;
    Исключение
        ТекстСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
        ВызватьИсключение ТекстСообщенияОбОшибке;
    КонецПопытки;
    
КонецФункции

Показать
6. shutilin 03.08.18 06:08 Сейчас в теме
(5) Нет-нет, всё на сервере.
В Вашем примере функция кстати тоже выполняется на севере, по умолчанию, т.к. не указано &НаКлиенте.
7. Bene_Valete 188 03.08.18 06:48 Сейчас в теме
(6) :) Действительно, я сегодня не в себе
Но по крайней мере код должен быть рабочий))
13. Boneman 298 03.08.18 09:17 Сейчас в теме
(4)
&НаКлиенте - вы даже свои справочники не увидите, а уж в подключенной базе и подавно.

Да свои не увидит,
а у базы в ком соединении, независимо откуда к ней подключились, там свой сервер..и все объекты там доступны.
8. Ligret 03.08.18 07:45 Сейчас в теме
Передал модуль, запускаю &НаСервере, СОМОбъект живой, но снова, ни через NewObject, ни через Справочники, ни через Документы, доступа к объектам удаленной базе нет, сообщение об ошибке «Метод объекта не обнаружен»

&НаСервере
Функция ПодключениеКУдаленнойБазе()
	БазаУправленка=Новый COMОбъект("V83.COMConnector");
	Попытка
		БазаУправленка.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
	Исключение
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
		"ru='Произошла ошибка подключения к базе'; "));
		БазаУправленка = Неопределено;
	КонецПопытки;
	
	Возврат	БазаУправленка;
КонецФункции

&НаСервере
Процедура ПодключитьсяСервер()
	БазаУправленка = ПодключениеКУдаленнойБазе();	
	Запрос = БазаУправленка.NewObject("Запрос");
	Запрос.Текст = "ВЫБРАТЬ
	|	Кассы.Ссылка КАК Ссылка,
	|	Кассы.Наименование КАК Наименование
	|ИЗ
	|	Справочник.Кассы КАК Кассы";
	
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
	  ….
	КонецЦикла;
	БазаУправленка = Неопределено;
КонецПроцедуры
Показать


То ли я, то ли лыжи... Несколькими годами раньше, на обычных базах, я десятки документов и справочника переносил, буду пробовать через V83.Application
9. Octopus 337 03.08.18 07:49 Сейчас в теме
(8)
&НаСервере
Функция ПодключениеКУдаленнойБазе()
    БазаУправленка=Новый COMОбъект("V83.COMConnector");
    Попытка
        МойКоннектор = БазаУправленка.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
    Исключение
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
        "ru='Произошла ошибка подключения к базе'; "));
        БазаУправленка = Неопределено;
    КонецПопытки;
    
    Возврат    МойКоннектор;
Показать
ben19791010; +1 Ответить
10. Denis_CFO 48 03.08.18 07:51 Сейчас в теме
(8) подключение похоже к другой базе не проходит, вы вот так сделайте:
БазаУправленка = ПодключениеКУдаленнойБазе(); 
Если  БазаУправленка = Неопределено Тогда  
Возврат;
КонецЕсли    
Запрос = БазаУправленка.NewObject("Запрос");
11. Bene_Valete 188 03.08.18 08:02 Сейчас в теме
(8) Вам сначала нужно поместить полученное подключение в переменную, и возвращать уже ее:
&НаСервере
Функция ПодключениеКУдаленнойБазе()
Соединение=Новый COMОбъект("V83.COMConnector");
Попытка
БазаУправленка = Соединение.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
"ru='Произошла ошибка подключения к базе'; "));
БазаУправленка = Неопределено;
КонецПопытки;

Возврат БазаУправленка;
КонецФункции

&НаСервере
Процедура ПодключитьсяСервер()
БазаУправленка = ПодключениеКУдаленнойБазе();
Запрос = БазаУправленка.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| Кассы.Ссылка КАК Ссылка,
| Кассы.Наименование КАК Наименование
|ИЗ
| Справочник.Кассы КАК Кассы";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
….
КонецЦикла;
БазаУправленка = Неопределено;
КонецПроцедуры
Показать
alina0587; +1 Ответить
12. Bene_Valete 188 03.08.18 08:12 Сейчас в теме
(8) разница между
БазаУправленка.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");

и
БазаКом =БазаУправленка.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");


в том, что в первом случае(в вашем коде), вы создаете ком-объект с базой, но никуда его не помещаете, поэтому не можете к нему обратиться, а если вы поместите его в переменную, как в указанном примере, то в ней уже будет содержаться "ваша база" и соответственно можно будет обращаться к ее объектам.
ben19791010; Octopus; +2 Ответить
14. Ligret 03.08.18 10:09 Сейчас в теме
Вот это я затупил! Bene_Valete, огромная благодарность, за подсказку! Также благодарю всех откликнувшихся за участие.
15. Bene_Valete 188 03.08.18 10:10 Сейчас в теме
(14) Пожалуйста, рада помочь :)
16. janibeg 2 23.04.19 12:02 Сейчас в теме
Похожая ошибка:
Метод объекта не обнаружен (NewObject)
ЗапросCOM = Подключение.NewObject("Запрос");

Но только у меня com объект создается без проблем:
, а вот запрос не хочет создавать через ком.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот