V83.COMConnector: Поле объекта не обнаружено (Справочники)
Доброго времени суток,
Пожалуйста, помогите с решением следующей задачи: 2 базы 1С 8.3.12.1412, управляемые формы, подключение между базами через COMConnector:
Как результат COMОбъект живой, но при попытке доступа к БазаУправленка.Справочники.Кассы, выдает сообщение об ошибке «Поле объекта не обнаружено (Справочники)». Тоже с БазаУправленка.NewObject("Запрос"). При этом в журнале регистрации удаленной базы имеется запись о начале, успешной аутентификации и последующем завершении сеанса, все одним временем, секунда в секунду.
Где грабельки? Тыкните, пожалуйста, носом.
Пожалуйста, помогите с решением следующей задачи: 2 базы 1С 8.3.12.1412, управляемые формы, подключение между базами через COMConnector:
&НаКлиенте
Процедура Подключить()
БазаУправленка=Новый COMОбъект("V83.COMConnector");
Попытка
БазаУправленка.Connect("Srvr = ""ххх"";Ref = ""хх""; Usr = ""хх""; Pwd = ""хх""");
Исключение
Возврат;
КонецПопытки;
Касса = БазаУправленка.Справочники.Кассы;
КонецПроцедуры
ПоказатьКак результат COMОбъект живой, но при попытке доступа к БазаУправленка.Справочники.Кассы, выдает сообщение об ошибке «Поле объекта не обнаружено (Справочники)». Тоже с БазаУправленка.NewObject("Запрос"). При этом в журнале регистрации удаленной базы имеется запись о начале, успешной аутентификации и последующем завершении сеанса, все одним временем, секунда в секунду.
Где грабельки? Тыкните, пожалуйста, носом.
По теме из базы знаний
Найденные решения
(8) Вам сначала нужно поместить полученное подключение в переменную, и возвращать уже ее:
&НаСервере
Функция ПодключениеКУдаленнойБазе()
Соединение=Новый COMОбъект("V83.COMConnector");
Попытка
БазаУправленка = Соединение.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
"ru='Произошла ошибка подключения к базе'; "));
БазаУправленка = Неопределено;
КонецПопытки;
Возврат БазаУправленка;
КонецФункции
&НаСервере
Процедура ПодключитьсяСервер()
БазаУправленка = ПодключениеКУдаленнойБазе();
Запрос = БазаУправленка.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| Кассы.Ссылка КАК Ссылка,
| Кассы.Наименование КАК Наименование
|ИЗ
| Справочник.Кассы КАК Кассы";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
….
КонецЦикла;
БазаУправленка = Неопределено;
КонецПроцедуры
ПоказатьФункция ПодключениеКУдаленнойБазе()
Соединение=Новый COMОбъект("V83.COMConnector");
Попытка
БазаУправленка = Соединение.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
"ru='Произошла ошибка подключения к базе'; "));
БазаУправленка = Неопределено;
КонецПопытки;
Возврат БазаУправленка;
КонецФункции
&НаСервере
Процедура ПодключитьсяСервер()
БазаУправленка = ПодключениеКУдаленнойБазе();
Запрос = БазаУправленка.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| Кассы.Ссылка КАК Ссылка,
| Кассы.Наименование КАК Наименование
|ИЗ
| Справочник.Кассы КАК Кассы";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
….
КонецЦикла;
БазаУправленка = Неопределено;
КонецПроцедуры
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
В исключение нужно не возврат писать, а сообщение об ошибке.
Может кэш почистить.
Что-нибудь такое работает, ниже?
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не удалось подключиться к базе" + ОписаниеОшибки();
Сообщение.Сообщить();
Может кэш почистить.
Что-нибудь такое работает, ниже?
Док = БазаУправленка.Документы.ПлатежноеПоручение.СоздатьДокумент();
Переделайте следующим образом:
&НаКлиенте
Процедура Подключить()
БазаУправленка=Новый COMОбъект("V83.COMConnector");
Попытка
Подключение = БазаУправленка.Connect("Srvr = ""ххх"";Ref = ""хх""; Usr = ""хх""; Pwd = ""хх""");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Касса = Подключение.Справочники.Кассы;
КонецПроцедуры
Показать
(4) Верное замечание, соединение нужно возвращать на клиенте, а дальнейшие операции производить на сервере
&НаСервере
Процедура КомандаВыполнитьНаСервере()
Соединение = УстановитьCOMСоединение();
Касса = Соединение.Справочники.Кассы;
КонецПроцедуры
Функция УстановитьCOMСоединение()
Попытка
Коннектор = Новый COMObject("V83.COMConnector");
Соединение = Коннектор.Connect("Srvr = ""ххх"";Ref = ""хх""; Usr = ""хх""; Pwd = ""хх""");
Возврат Соединение;
Исключение
ТекстСообщенияОбОшибке = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
ВызватьИсключение ТекстСообщенияОбОшибке;
КонецПопытки;
КонецФункции
Показать
Передал модуль, запускаю &НаСервере, СОМОбъект живой, но снова, ни через NewObject, ни через Справочники, ни через Документы, доступа к объектам удаленной базе нет, сообщение об ошибке «Метод объекта не обнаружен»
То ли я, то ли лыжи... Несколькими годами раньше, на обычных базах, я десятки документов и справочника переносил, буду пробовать через V83.Application
&НаСервере
Функция ПодключениеКУдаленнойБазе()
БазаУправленка=Новый COMОбъект("V83.COMConnector");
Попытка
БазаУправленка.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
"ru='Произошла ошибка подключения к базе'; "));
БазаУправленка = Неопределено;
КонецПопытки;
Возврат БазаУправленка;
КонецФункции
&НаСервере
Процедура ПодключитьсяСервер()
БазаУправленка = ПодключениеКУдаленнойБазе();
Запрос = БазаУправленка.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| Кассы.Ссылка КАК Ссылка,
| Кассы.Наименование КАК Наименование
|ИЗ
| Справочник.Кассы КАК Кассы";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
….
КонецЦикла;
БазаУправленка = Неопределено;
КонецПроцедуры
ПоказатьТо ли я, то ли лыжи... Несколькими годами раньше, на обычных базах, я десятки документов и справочника переносил, буду пробовать через V83.Application
(8)
&НаСервере
Функция ПодключениеКУдаленнойБазе()
БазаУправленка=Новый COMОбъект("V83.COMConnector");
Попытка
МойКоннектор = БазаУправленка.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
"ru='Произошла ошибка подключения к базе'; "));
БазаУправленка = Неопределено;
КонецПопытки;
Возврат МойКоннектор;
Показать
(8) Вам сначала нужно поместить полученное подключение в переменную, и возвращать уже ее:
&НаСервере
Функция ПодключениеКУдаленнойБазе()
Соединение=Новый COMОбъект("V83.COMConnector");
Попытка
БазаУправленка = Соединение.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
"ru='Произошла ошибка подключения к базе'; "));
БазаУправленка = Неопределено;
КонецПопытки;
Возврат БазаУправленка;
КонецФункции
&НаСервере
Процедура ПодключитьсяСервер()
БазаУправленка = ПодключениеКУдаленнойБазе();
Запрос = БазаУправленка.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| Кассы.Ссылка КАК Ссылка,
| Кассы.Наименование КАК Наименование
|ИЗ
| Справочник.Кассы КАК Кассы";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
….
КонецЦикла;
БазаУправленка = Неопределено;
КонецПроцедуры
ПоказатьФункция ПодключениеКУдаленнойБазе()
Соединение=Новый COMОбъект("V83.COMConnector");
Попытка
БазаУправленка = Соединение.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
Исключение
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр(
"ru='Произошла ошибка подключения к базе'; "));
БазаУправленка = Неопределено;
КонецПопытки;
Возврат БазаУправленка;
КонецФункции
&НаСервере
Процедура ПодключитьсяСервер()
БазаУправленка = ПодключениеКУдаленнойБазе();
Запрос = БазаУправленка.NewObject("Запрос");
Запрос.Текст = "ВЫБРАТЬ
| Кассы.Ссылка КАК Ссылка,
| Кассы.Наименование КАК Наименование
|ИЗ
| Справочник.Кассы КАК Кассы";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
….
КонецЦикла;
БазаУправленка = Неопределено;
КонецПроцедуры
(8) разница между
и
в том, что в первом случае(в вашем коде), вы создаете ком-объект с базой, но никуда его не помещаете, поэтому не можете к нему обратиться, а если вы поместите его в переменную, как в указанном примере, то в ней уже будет содержаться "ваша база" и соответственно можно будет обращаться к ее объектам.
БазаУправленка.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
и
БазаКом =БазаУправленка.Connect("Srvr=""ххх""; Ref=""хх""; Usr=""хх""; Pwd=""хх"";");
в том, что в первом случае(в вашем коде), вы создаете ком-объект с базой, но никуда его не помещаете, поэтому не можете к нему обратиться, а если вы поместите его в переменную, как в указанном примере, то в ней уже будет содержаться "ваша база" и соответственно можно будет обращаться к ее объектам.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот