Перейти к содержимому


ComОбъект в режиме сервера.


  • Вы не можете ответить в тему
Сообщений в теме: 19

#1 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 09 февраля 2012 - 16:22

Нужно регламентным заданием подключиться к информационной базе. Фоновое задание на сервере отрабатывает такой код:
ОбъектПодключение="V82.Application";.


//...
ТекCOMПодключение = Новый COMОбъект(ОбъектПодключения);
//...


В этом случае выходит такое сообщение об ошибке:
" {Обработка.Regl_ПереносДанных.МодульОбъекта(485)}: Ошибка при вызове конструктора (COMОбъект): Интерфейс не поддерживается: Интерфейс не поддерживается ".

Обратил внимание по совету коллеги на второй параметр - "имя сервера" или "имя компьютера" у метода Новый ComОбъект().

Переписал строчку кода таким образом:

СтруктураПодключения.ИмяСервера="Server:1741";.

ТекCOMПодключение = Новый COMОбъект(ОбъектПодключения,СтруктураПодключения.ИмяСервера);

В этом случае выходит такое сообщение об ошибке: {Обработка.Regl_ПереносДанных.МодульОбъекта(485)}: Ошибка при вызове конструктора (COMОбъект): Сервер RPC недоступен.: Сервер RPC недоступен.

Люди кто знает почему выходит ошибка в первом случае? Какой вообще может быть на стороне сервера интерфейс?

Во втором случае ошибка выходит на мой взгляд из-за того что вероятно не правильно указано имя сервера/компьютера, но такое имя используется для подключения при ТекСОМПодключение.Connect() на в режиме клиента и все работает.
Может быть кто подскажет как правильно нужно указывать второй параметр для метода НовыйСОМОбъект(П1,П2)?

Сообщение отредактировал BabySG: 09 февраля 2012 - 16:33


#2 BabySG

    Любитель программирования


  • 12 220 сообщений

Отправлено 09 февраля 2012 - 16:39

А на сервере клиент 1С установлен (не серверна часть?)
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#3 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 10 февраля 2012 - 06:09

Вы имеется ввиду можно ли на сервере открыть 1с предприятие или что?

#4 uza

    1С, VBA (EXCEL), VB (.NET + WEB)


  • 1 348 сообщений

Отправлено 10 февраля 2012 - 08:20

Ну вообще можно и без клиента 1С засетупленого на сервере. Ибо ком конектилка обеспечивается либой comcntr.dll, а она сетупица как с сервером так и с клиентом.
Другое дело что автор зачем-то пытается цепануться к 1С как к OLE серверу (а это однозначно требует наличия клиента), вместо того, чтобы воспользоваться COM соединением. Типа не
cntr = Новый COMObject("V82.Application");
А cntr = Новый COMObject("V81.COMConnector"); / Новый COMObject("V82.COMConnector");

Очень редко когда 1С действительно нужно стартовать как ОЛЕ сервер - ибо более ресурсоемко и зачастую более кривовато.
Не все полезно - что в БД залезло

#5 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 10 февраля 2012 - 11:23

Uza, допустим я установил такое соединение.
Строка подключения Srvr = "server:1741"; Ref = "ИмяБазы";Usr = "ИмяПользователя";
ТекCOMОбъект = Новый COMObject("V82.COMConnector");
ТекCOMПодключение = ТекCOMОбъект.Connect(СтрокаПодключения);

Могу ли я потом строить через это соединение запросы.
Запрос = ТекCOMПодключение.NewObject("Запрос");

Или использовать такой код:
ИмяЗначенияПеречисленияCOM    = ТекCOMПодключение.XMLString(СсылкаНаПеречислениеCOM);

Сообщение отредактировал alexburn: 10 февраля 2012 - 11:29


#6 BabySG

    Любитель программирования


  • 12 220 сообщений

Отправлено 10 февраля 2012 - 11:28

Можно

И ознакомьтесь с этим сообщением http://www.1c-pro.ru/topic10105.html
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#7 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 22 февраля 2012 - 12:24

Оказывается действительно можно строить запросы таким образом.

Соединение устанавливается, из подключенной базы выборка результата запроса на некоторые виды документов получается на ура.

Однако сегодня при запросе на один вид документа
Запрос=ТекСОМПодключение.NewObject(Запрос);
//...  Текст запроса, параметры.
Возврат Запрос.Выполнить().Выбрать() // В этой строке выходит ошибка.

Описание ошибки: " при выполнении запроса возникла исключительная ситуация".

Что значит исключительная ситуация?

В отладчике вытащил текст запроса, открыл подключаемую базу и выполнил запрос с этим текстом в консоли запросов - все нормально выполняется.

В чем может быть причина такого поведения СОМ- подключения - по одним видам документов выполняется запрос, по другим выходит ошибка из-за исключительной ситуации?

#8 BabySG

    Любитель программирования


  • 12 220 сообщений

Отправлено 22 февраля 2012 - 19:41

А прав хватает на выполнение запроса?
Посмотрите в ЖР целевой базы что пишут
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#9 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 24 февраля 2012 - 06:20

По идее прав должно хватать. Пользователю под которым я подключаюсь назначено много ролей, одна из них с полными правами.



При СОМ подключении будет то использовано имя пользователя, которое указано в строке подключения? Или что то другое?

Сообщение отредактировал Amplifier: 24 февраля 2012 - 06:22


#10 BabySG

    Любитель программирования


  • 12 220 сообщений

Отправлено 24 февраля 2012 - 08:49

1. Оберните выполнение запроса в попытку и проанализируйте описание ошибки
2. Все-таки посмотрите в ЖР ыелевой базы что пишут в этот момент
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#11 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 24 февраля 2012 - 09:23

1) Это было сделано первым делом, еще до создания темы.
Описание ошибки такое "Произошла исключительная ситуация. Ошибка выполнения запроса ".
Гуглил, нашел несколько похожих тем, но там довольно банальные случаи где то запятая стоит в тексте запроса перед словом "из", где не корректно передаются в запрос(СомОбъект) параметры. О чем и говорится описаниях ошибки по этим случаям. В моем случае ничего подобного не пишется, говорится только что есть ошибка при выполнении запроса. Я не знаю где причину искать, либо в базе приемнике, коде или в базе источнике.

2) В если под целевой базовый вы понимаете ту базу к которой идет подключение через СомОбъект, то там ничего не пишут по этому поводу. Есть записи что стартован сеанс через приложение СомПодключение и что он был завершен.

В базе приемнике журнал регистрации еще не смотрел, сейчас посмотрю.

#12 shurikvz

    Ветеран


  • 5 241 сообщений

Отправлено 24 февраля 2012 - 09:33

А версия платформы какая?
Если не ошибаюсь в каком-то из релизов платформы был баг, связанный с тем, что если к базе подключаешься через COM, то в случае если возникает ошибка, описание удаленной ошибки не возвращалось.

Upd:
Вот нашел о чем я говорил (если дело в этом конечно), это баг зафиксированный для платформы 8.2.14. Исправлен в 8.2.15.

Цитата

10087413 (SW622232) Описание ошибки при возврате исключения из COM сервера
Проблема:
При возникновении исключения в Предприятии, используемом в качестве COM сервера, в вызвавшее приложение информация об исключении передается только частично.
Дата публикации:
2011-09-08

Сообщение отредактировал shurikvz: 24 февраля 2012 - 09:34

Now, this bell tolling softly for another, says to me: Thou must die...

#13 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 27 февраля 2012 - 06:21

Версия платформы 8.2.14.540.
Спасибо за информацию возможно благодаря ей выявить причину.

Сообщение отредактировал Amplifier: 27 февраля 2012 - 06:22


#14 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 27 февраля 2012 - 08:26

" При возникновении исключения " - имеется ввиду ошибка связанная с исключительной ситуацией или такой код:
Попытка Исключение КонецПопытки ?

Сообщение отредактировал Amplifier: 27 февраля 2012 - 08:31


#15 BabySG

    Любитель программирования


  • 12 220 сообщений

Отправлено 27 февраля 2012 - 09:18

Просмотр сообщенияAmplifier (27 февраля 2012 - 08:26) писал:

" При возникновении исключения " - имеется ввиду ошибка связанная с исключительной ситуацией или такой код:
Попытка Исключение КонецПопытки ?
1. Разделите ВЫПОЛНИТ и ВЫБРАТЬ в разные строчки кода
2. Оберните в попытку каждую из строчек
3. Покажите сам текст запроса.
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#16 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 27 февраля 2012 - 11:45

Текст запроса одинаков для множества видов документов, разница лишь в имени документа.

Однако в этом случае выходит ошибка:
"ВЫБРАТЬ Разрешенные
	Док.Ссылка,
	Представление(Док.Ссылка) КАК Представление,
	Док.Проведен,
	Док.ПометкаУдаления,		
	ПРЕДСТАВЛЕНИЕ(Док.Номер) КАК ОлеНомер,
	ПРЕДСТАВЛЕНИЕ(Док.Дата) КАК ОлеДата
ИЗ
	Документ.НачислениеЗарплатыРаботникамОрганизаций КАК Док
ГДЕ

	Док.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода

УПОРЯДОЧИТЬ ПО
	Док.Дата"
.

Ошибка происходит в этом коде

Попытка
Результат=Запрос.Выполнить();
Исключение

КонецПопытки;

Описание ошибки: " ИмяОбработки.МодульОбъекта(1914)}:
Ошибка при вызове метода контекста (Выполнить): Произошла исключительная ситуация:
Ошибка выполнения запроса".

А в этом случае запрос выполняется нормально, выборка результата запроса тоже нормально делается:

" ВЫБРАТЬ Разрешенные
	Док.Ссылка,
	Представление(Док.Ссылка) КАК Представление,
	Док.Проведен,
	Док.ПометкаУдаления,		
	ПРЕДСТАВЛЕНИЕ(Док.Номер) КАК ОлеНомер,
	ПРЕДСТАВЛЕНИЕ(Док.Дата) КАК ОлеДата
ИЗ
	Документ.НачислениеПоБольничномуЛисту КАК Док
ГДЕ

	Док.ПериодРегистрации МЕЖДУ &НачПериода И &КонПериода

УПОРЯДОЧИТЬ ПО
	Док.Дата"
.

Когда был другой способ подключения (см выше по теме) запрос выполнялся в обоих случаях. Однако предыдущий способ подключения не работал в режиме сервера, при работе фонового задания. По совету форумчанина сделал подключение через сом коннектор и получилась такая ситуация.

#17 BabySG

    Любитель программирования


  • 12 220 сообщений

Отправлено 27 февраля 2012 - 13:56

Включите в поля выборки поле Док.Дата
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#18 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 27 февраля 2012 - 15:24

Удалось заставить запрос выполниться. Как выяснилось права, а точнее ограничения доступа к данным в ролях.

Я первым делом посмотрел на права юзера под которым идет подключение, есть ли у него полные права, оказалось что есть, при чем у полных прав никаких ограничений нет. На этом успокоился, потому что насколько мне известно механизм доступа по ролям работает по принципу "ИЛИ" - если что то разрешено пользователю в одной из ролей назначенных ему, то он может это делать или видеть или ему это доступно. Потом успешно выполнил под этим пользователем запрос в консоли.

Сравнил по окнам редактирования два документа, один переносится другой нет, различия были в ролях. У того документа который по которому выполнялся запрос - по двум ролям не было ограничений доступа к данным, а по которому не выполнялся они были. После устранения этих ограничений запрос стал выполняться.

По идее благодаря роли с полными правами все равно был должен остаться доступ к этому виду документа.

Я что ошибался в понимании механизма ограничения доступа к данным по ролям или тут какой то нюанс вызывает не стандартный характер работы этого механизма?

BabySG и shurikvz спасибо.

Uza ваша цитата:
"Очень редко когда 1С действительно нужно стартовать как ОЛЕ сервер - ибо более ресурсоемко и зачастую более кривовато."

А в каких случаях это нужно делать? Назовите пожалуйста один или несколько наиболее типичных случаев.

#19 uza

    1С, VBA (EXCEL), VB (.NET + WEB)


  • 1 348 сообщений

Отправлено 27 февраля 2012 - 15:31

* Затрудняюсь ответить. В моей практике такой необходимости не возникало.
В случае с 7.7 - таким образом можно было обеспечивать интерактивную реакцию пользователя на какие либо события.
Вот что об этом говорит нам справка

Цитата

Описание:
Система 1С:Предприятие может использоваться внешними приложениями в качестве Automation-сервера. При работе в качестве Automation-сервера 1С:Предприятие предоставляет доступ ко всем свойствам и методам своего глобального контекста, а также включение и выключение пользовательского интерфейса (главного окна 1С:Предприятия 8.1).Кроме того, Automation-сервер 1С:Предприятия имеет дополнительные свойства и методы для выполнения действий, специфичных для работы в режиме Automation.
Основное назначение Automation-сервера 1С:Предприятие в управлении приложением 1С:Предприятия 8.1 из других приложений и выполнение действий аналогичных интерактивным действиям, например, построение отчетов.
Для запуска системы 1С:Предприятие в качестве Automation-сервера из внешнего приложения, выполняется следующая последовательность действий:

Сообщение отредактировал uza: 27 февраля 2012 - 15:34

Не все полезно - что в БД залезло

#20 Amplifier

    Частый гость


  • 77 сообщений

Отправлено 28 марта 2012 - 07:30

ТекCOMОбъект = Новый COMObject("V82.COMConnector");
Почему то при исполнении данного кода стала появляться такая ошибка, описание ошибки следующее:

"При попытке соединения с COM-сервером произошла следующая ошибка:
¶{Обработка.ПереносДанных82КССУППАвтомат_0_3.МодульОбъекта(498)}:
Ошибка при вызове конструктора (COMObject): Invalid class string: Invalid class string"

При том что режиме клиента все работает нормально, а вот при работе фонового задания стала появляться данная ошибка. На весриях платформы 8.2.14.540 подобным даже не пахло. Дней до этого на платформе 8.2.15.294 данный код на стороне сервера тоже отрабатывался нормально. А вот вчера на платформе 8.2.15.294 стала возникать подобная ошибка.
Один человек, увидев код текст описания ошибки сказал что нужно перезагрузить сервак.

Ваше мнение форумчане?





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных