Получитьобъект com ошибка

   developer1

07.10.13 — 14:53

Добрый день,

возникла следующая проблема.

Имеется модуль с простыми функциями типа отметить документ на удаление по номеру или провести документ по номеру.

Функция ПометитьРасходнаяНакладная(Номер, ПометкаУдаление, ПометкаПроведение) Экспорт

    Попытка

        документ = Документы.РасходнаяНакладная.НайтиПоНомеру(Номер).ПолучитьОбъект();

        ПометитьДокумент(документ, ПометкаУдаление, ПометкаПроведение);

        Возврат «ok»;

    Исключение

        Инфо = ИнформацияОбОшибке();        

        Возврат «Описание='» + Инфо.Описание + «‘»;

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

КонецФункции

Функция ПометитьДокумент(Документ, ПометкаУдаление, ПометкаПроведение)

    Документ.УстановитьПометкуУдаления(ПометкаУдаление);

    Если ПометкаПроведение

    Тогда

        Документ.Записать(РежимЗаписиДокумента.Проведение);

    Иначе

        Документ.Проведен = Ложь;

        Документ.Записать();

    КонецЕсли

КонецФункции

Проблема с методом .ПолучитьОбъект() — при вызове функции ПометитьРасходнаяНакладная через COM из .NET приложения вылетает исключение, которое не перехватывается в теле функции ПометитьРасходнаяНакладная и более того некорректно сериализуется. То есть на стороне .NET приходит объект Exception с указателями-null’ами, не несущий никакой информации.

Что интересно:

— если эти функции вызываются непосредственно из 1С, то все прекрасно работает.

— если изменить тип документа с РасходнаяНакладная на некоторый другой, то все выполняется корректно. Есть еще как минимум один тип, для которого это также не работает. Заметить отличия этих типов документов от других, с которыми все ок, не удалось

— гарантируется, что сам вызов через COM осуществляется, если убрать проблемный вызов .ПолучитьОбъект(), то вызов отрабатывает корректно

-COM соединение выполняется под тем же аккаунтом, под которым функция корректно работает при выполнении через 1С:Предприятие

-другие методы типа .ПолучитьФорму() этой же ссылки работают корректно

Итого: непонятная ошибка, которая не ловится trycatch и возникает при вызове метода .ПолучитьОбъект на ссылках документа типа РасходнаяНакладная при соединении через COM.

.NET код:

var connection = GetConnection();

                var msg = connection.ПроведениеДокументов.ПометитьРасходнаяНакладная(docNumber, true, false);

Могу выложить код GetConnection() если необхдимо

   ДенисЧ

1 — 07.10.13 — 14:55

Сначала найти, потом проверить найденность, потому уже получать объект

   developer1

2 — 07.10.13 — 14:58

(1) Гарантируется, что объект с заданным номером в базе есть и, повторюсь, этот код с такими же параметрами корректно отрабатывает будучи вызванным через 1С Предприятие. Да и наверняка тогда поймалось бы исключение в самой функции ПометитьРасходнаяНакладная

   Serginio1

3 — 07.10.13 — 15:00

Посмотри подписчики при записи. И посмотри стоит ли у этих модулей галка внешнее соединение

   Serginio1

4 — 07.10.13 — 15:07

Или смотри модуль РасходнаяНакладная, что там вызывается при инициализации в модуле расходной накладной

   developer1

5 — 07.10.13 — 15:33

(4) Спасибо за помощь, но не вижу каких-либо проблем.

Насчет ПриЗаписи, причем оно тут?

Галка «Внешнее соединение» установлена, однако и с ней и без нее эффект одинаковый. Работает с другими документами и другими методами и без «внешнего соединения».

В модуле РасходнаяНакладная вообще нет никаких функций, связанных с инициализацией (или я их не вижу).

Вообще чисто гипотетически как может возникнуть описанная ситуация?

1) не ловится исключение в ПометитьРасходнаяНакладная

2) работает через 1С Предприятие

3) не работает через COM и только для некоторых типов документов

   hhhh

6 — 07.10.13 — 15:34

(5) НайтиПоНомеру(Номер) — это гарантированно не найдет. Пиши не через задницу, а по-человечески

НайтиПоНомеру(Номер, Дата)

   developer1

7 — 07.10.13 — 15:49

(6) четвертый день вижу 1С, НайтиПоНомеру(Номер) находит то, что нужно, повторюсь, код работает будучи вызванным через 1С Предприятие.

Поискал по коду 1С — почти всюду НайтиПоНомеру используется без второго аргумента.

Из того, что сейчас прочитал — второй аргумент целесообразен при использовании периодичной нумерации (так?). В свойствах РасходнаяНакладная Периодичность «Непериодический».

Готов попробовать тем не менее. Не представляю только какую дату указывать. Дата(0)?

   Serginio1

8 — 07.10.13 — 15:52

(5) Не функций а кода который вызывает функции из других модулей. Код инициализации это код после последней процедуры функции модуля

   developer1

9 — 07.10.13 — 15:55

(8) Спасибо за пояснение. В модуле объекта РасходнаяНакладная кроме процедур и одной глобальной переменной нет никакого другого кода.

   Serginio1

10 — 07.10.13 — 16:00

(7) ТекущаяДата()

док = Документы.РасходнаяНакладная.НайтиПоНомеру(Номер);

Сделай проверку на неопределено

Если док=неопределено Тогда

возврат «Не найден документ»;

а на строчке

документ=Док.ПолучитьОбъект();

в отладчике «Шагнуть В»;

   developer1

11 — 07.10.13 — 16:20

(10) Изменил:

ссылка = Документы.РасходнаяНакладная.НайтиПоНомеру(Номер, ТекущаяДата());

        Если ссылка = Неопределено

        Тогда

            Возврат «Doc not found»;

        Иначе

            документ = ссылка.ПолучитьОбъект();

            ПометитьДокумент(документ, ПометкаУдаление, ПометкаПроведение);

            Возврат «Ok!»;            

        КонецЕсли

Запустил под отладчиком привязав вызов

ПроведениеДокументов.ПометитьРасходнаяНакладная(«00008121»,Истина,Ложь);

к одному из событий интерфейса. В результате ПолучитьОбъект отработал корректно. При «Шагнуть В» вход внутрь не выполнился. Я не знаю типично ли это для системных вызовов в 1С или мне нужно изменить какие-то настройки отладчика.

Проверил и вызов через COM — все то же исключение, которое даже не удается идентифицировать.

   Serginio1

12 — 07.10.13 — 16:34

Ну тогда

ЗаписьЖурналаРегистрации(«ПометитьРасходнаяНакладная»,

        УровеньЖурналаРегистрации.Информация, , ,

        «Выполнено » + СтрСообщения);

в руки и трассируй

   developer1

13 — 07.10.13 — 17:12

(12) не понимаю смысла. я и так знаю какой оператор приводит к ошибке, как мне мои же сообщения в журнале должны помочь?

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

   Serginio1

14 — 07.10.13 — 17:16

(13) Ну хотя бы в

Исключение

        Инфо = ИнформацияОбОшибке();    

ЗаписьЖурналаРегистрации(«ПометитьРасходнаяНакладная»,

        УровеньЖурналаРегистрации.Информация, , ,

        «Описание='» + Инфо.Описание);

    
        Возврат «Описание='» + Инфо.Описание + «‘»+Инфо.ИмяМодуля+ «‘»+Инфо.НомерСтроки ;

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

А откуда знаешь, если отладчиком не пользуешься?

   developer1

15 — 07.10.13 — 17:25

(14) первый пост, объяснил все там.

Как до этого дошел — опытным путем, вызывая разные методы вместо .ПолучитьОбъект и проверяя другие типы документов (не РасходнаяНакладная). Возвращается «Ok» (ну или я ставил Возвраты сразу до или после оператора с .ПолучитьОбъект).

Если документ не найден, вызывается некорректный метод или не указаны обязательный аргументы (что я только не делал) и т.д. и т.п., то исключение в ПометитьРасходнаяНакладная перехватывается и мне на .NET клиент возвращается ошибка «Описание='» + Инфо.Описание + «‘»;

Еще раз — ошибка в .ПолучитьОбъект для документа типа РасходнаяНакладная при соединении через COM. Это ОЧЕНЬ странно и именно поэтому я пишу все это.

Я не вижу никакого смысла имея

Исключение

    Инфо = ИнформацияОбОшибке();        

    Возврат «Описание='» + Инфо.Описание + «‘»;

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

писать

Исключение

        Инфо = ИнформацияОбОшибке();    

ЗаписьЖурналаРегистрации(«ПометитьРасходнаяНакладная»,

        УровеньЖурналаРегистрации.Информация, , ,

        «Описание='» + Инфо.Описание);

    
        Возврат «Описание='» + Инфо.Описание + «‘»+Инфо.ИмяМодуля+ «‘»+Инфо.НомерСтроки ;

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

   hhhh

16 — 07.10.13 — 17:33

(15) ну разобрались же. Дату надо указать. Почему странно? Детский сад.

ведь понятно же и во всех букварях написано, что по COM надо все параметры указывать, а иначе будет параметр NULL.

   developer1

17 — 07.10.13 — 17:35

(16) разобрались? По-моему нет. Дальше начала не продвинулись

   Serginio1

18 — 07.10.13 — 17:37

(15) Не пиши. А вообще то всегда хорошо регистрировать ошибки и знать почему и когда они произошли. При этом ошибка у тебя не возвращается. Хозяин барин.

   Славен

19 — 07.10.13 — 17:42

(16)имхо, тут бесполезно что-то пояснять

   developer1

20 — 07.10.13 — 17:48

(18) добавил, проверил, предсказуемо в журнал ничего не добавилось. Проблема все та же — невозможно даже перехватить КОНКРЕТНО ЭТО исключение в 1С, соответственно ничего не возвращается и не пишется в журнал.

Писал выше, что другие ситуации типа некорректного метода или некорректных параметров отлично перехватываются и на стороне .NET’а (даже) я получаю соответствующую диагностику.

Почему так — не знаю, это и хотел понять малой кровью.

   shurikvz

21 — 07.10.13 — 17:52

(11) НЕ

————-

ссылка = Документы.РасходнаяНакладная.НайтиПоНомеру(Номер, ТекущаяДата());

        Если ссылка = Неопределено

————-

а

————-

ссылка = Документы.РасходнаяНакладная.НайтиПоНомеру(Номер, ТекущаяДата());

        Если ссылка = Неопределено ИЛИ ссылка.Пустая()

————-

   Serginio1

22 — 07.10.13 — 17:54

(20) Ну можно еще потрассировать

ЗаписьЖурналаРегистрации(«ПометитьРасходнаяНакладная»,

        УровеньЖурналаРегистрации.Информация, , ,

        «ссылка.ПолучитьОбъект();»);

   документ = ссылка.ПолучитьОбъект();

ЗаписьЖурналаРегистрации(«ПометитьРасходнаяНакладная»,

        УровеньЖурналаРегистрации.Информация, , ,

        «ПометитьДокумент»);

            ПометитьДокумент(документ, ПометкаУдаление, ПометкаПроведение);

   shurikvz

23 — 07.10.13 — 17:55

А, и попробуйте не ИнформацияОбОшибке(), а ОписаниеОшибки().

   zladenuw

24 — 07.10.13 — 17:57

а какая платформа точно ? ТИИ делал базы ?

   developer1

25 — 07.10.13 — 18:39

(22) заметил появление записи в журнале

«Описание=’Error calling context method (ПолучитьОбъект)»

появляется она далеко не всегда и не сразу после вызова (то есть я уже получил результат, а запись в журнале появляется с приличной задержкой). Получается, Ваша правда.

Что можно об этом сказать?

(24) Насчет ТИИ — узнал об этом только сейчас, запустил тестирование и, может быть, зря — уже несколько минут конфигуратор висит.

Версия 8.2.16.368

   Serginio1

26 — 07.10.13 — 18:43

(25) Добавь еще  Инфо.Описание + «‘»+Инфо.ИмяМодуля+ «‘»+Инфо.НомерСтроки

   wPa

27 — 07.10.13 — 18:52

документ = Документы.РасходнаяНакладная.НайтиПоНомеру(Номер).ПолучитьОбъект();

Если ЗначениеЗаполнено(документ) Тогда

ПометитьДокумент

   wPa

28 — 07.10.13 — 18:53

точнее

документСсылка = Документы.РасходнаяНакладная.НайтиПоНомеру(Номер);

Если ЗначениеЗаполнено(документСсылка ) Тогда

ПометитьДокумент(документСсылка .ПолучитьОбъект())

   developer1

29 — 07.10.13 — 19:08

(26)

«Описание=’Error calling context method (ПолучитьОбъект)’; ‘ОбщийМодуль.ПроведениеДокументов.Модуль’; 22;»

Строка 22 это

документ = ссылка.ПолучитьОбъект();

   Славен

30 — 07.10.13 — 19:10

(29)тебе уже сказали нихрена он сылку не получил, без указания  периода найтипономеру не работает по ком

   developer1

31 — 07.10.13 — 19:20

(28) а вот это сработало, вопрос как быть дальше? в интерфейсе 1C Предприятия этот документ есть и без каких-либо видимых проблем, также наблюдаю его в базе

(30) уже давно исправил, так что мимо

   ilya_i

32 — 07.10.13 — 19:37

вызов .ПолучитьОбъект() выполняет код вне процедур в модуле объекта, может туда копать.

   Serginio1

33 — 07.10.13 — 20:56

Посмотри подписчики. Ошибка может  происходить при компиляции модуля

   Serginio1

34 — 08.10.13 — 10:17

Установи в конфигураторе ПараметрыМодулипроверка галку напротив внешнее соединение. И сделай проверку модуля или проверка модулей в меню конфигурация

   developer1

35 — 08.10.13 — 12:55

Я ошибся с утверждением насчет ЗначениеЗаполнено(ссылка). Все нормально и через COM.

(34) сделал, в модуле РасходнаяНакладная нашлась ошибка

{Документ.РасходнаяНакладная.МодульОбъекта(201,98)}: Переменная не определена (глВалютаУпр)

    Запрос.УстановитьПараметр(«Курс»,(КурсДокумента/КратностьДокумента)/ПолучитьКурсКратностьВалюты(<<?>>глВалютаУпр,Дата)); (Проверка: Внешнее соединение)

глВалютаУпр как я понял — глобальная переменная, устанавливаемая при запуске приложения

// Обработка события ПриНачалеРаботыСистемы

Процедура ПриНачалеРаботыСистемы()

…    глВалютаУпр=Константы.ВалютаУправленческогоУчета.Получить();

строка 201 с ошибкой это в

Процедура ОбработкаПроведения

вызов которой так и не осуществляется, ошибка в ПолучитьОбъект — раньше, может ли все равно это быть причиной? Заметил, что подобной ошибки для «Толстый клиент» нет.

И тем не менее. Как-то удалось получить подробную ошибку в журнале

{ОбщийМодуль.ПроведениеДокументов.Модуль(22)}: Error calling context method (ПолучитьОбъект)

            документ = ссылка.ПолучитьОбъект();

because:

No element selected!

то есть проверка ЗначениеЗаполнено(ссылка) проходит, а дальше не удается получить объект.

   developer1

36 — 08.10.13 — 13:10

Так, это все в модуле «Модуль обычного приложения», а в «Модуль внешнего соединения» ничего нет.

Режим запуска приложения — «Обычное приложение».

В этом причина?

   developer1

37 — 08.10.13 — 13:33

Да :). там уже другие ошибки, но они хотя бы «постоянны» и информативны.

Спасибо

   Serginio1

38 — 08.10.13 — 13:38

Для интереса сделай так

#Если НЕ ВнешнееСоединение Тогда

Запрос.УстановитьПараметр(«Курс»,(КурсДокумента/КратностьДокумента)/ПолучитьКурсКратностьВалюты(глВалютаУпр,Дата));

#иначе

Запрос.УстановитьПараметр(«Курс»,(КурсДокумента/КратностьДокумента)/ПолучитьКурсКратностьВалюты(Константы.ВалютаУправленческогоУчета.Получить(),Дата));

#КонецЕсли

   Serginio1

39 — 08.10.13 — 13:42

Или пропиши в модуле внешнего соединения эту переменную и метод

  

developer1

40 — 08.10.13 — 16:07

(39) ну я сразу так и сделал, таким образом заработало

  

Солнце

01.08.13 — 09:44

Пишу так

Книга = ПолучитьCOMОбъект(Файл,»Excel.Application»);

Ошибка: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: No such interface supported

А если так

Книга = ПолучитьCOMОбъект(Файл);

Ошибка: Ошибка при вызове метода контекста (ПолучитьCOMОбъект): Ошибка получения объекта COM: Moniker cannot open file

Код что первый что втрой в файловой базе выполняется на ура…

А в серверной не хочет…

На сервере установлен Excel.

Код выполняется на сервере….

Помогите справиться с проблемкой…

  

Лефмихалыч

Модератор

1 — 01.08.13 — 09:46

(0) на сервере нет нужных COM-объектов. Установить MSOffice на сервер.

  

Солнце

2 — 01.08.13 — 09:50

MSOffice Установлен…

  

Солнце

3 — 01.08.13 — 09:54

Эксель = Новый COMОбъект(«Excel.Application»);

Книга = Эксель.WorkBooks.Open(Файл);

К Excel подключается а к открытию файла говорит:

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

• Указан несуществующий файл или путь.

• Файл используется другой программой.

• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.

Хотя доступ есть к нему… Файл нигде не используется и он закрыт!

  

Солнце

4 — 01.08.13 — 10:03

Никто не может помочь?…((

  

Лефмихалыч

Модератор

5 — 01.08.13 — 10:05

(2) он установлен на клиенте, а не на сервере. Установите офис на сервер

  

Лефмихалыч

Модератор

7 — 01.08.13 — 10:06

а, ну или файла нет на сервере.

В переменной «Файл» поди путь относительно твоей клиентской машины?

  

Солнце

9 — 01.08.13 — 10:07

(7) сетевой путь такие же ошибки делает

  

lEvGl

10 — 01.08.13 — 10:07

а что значит «выполняется на сервере» — регламентное задание?

  

Солнце

11 — 01.08.13 — 10:08

Нет процедура выполняется &НаСервере

  

Лефмихалыч

Модератор

12 — 01.08.13 — 10:09

(9) а у пользователя, под которым сервер 1С предприяти запущен, права-то на шару есть?

  

Солнце

13 — 01.08.13 — 10:09

(12) Конечно

  

Serginio1

14 — 01.08.13 — 10:09

  

Лефмихалыч

Модератор

15 — 01.08.13 — 10:10

(13) не верю

  

wowik

16 — 01.08.13 — 10:10

Лефмихалыч, +100. Сам недавно с этой ерундой занимался. Все по делу.

  

Солнце

17 — 01.08.13 — 10:11

(15) Все права настроены. Права на все даны!

  

Лефмихалыч

Модератор

18 — 01.08.13 — 10:13

(17) Ты имя пользователя, под которым служба сервера запущена-то хоть знаешь?

  

Лефмихалыч

Модератор

19 — 01.08.13 — 10:14

да и не через шару надо на сервер файлы передавать, а через временное хранилище

  

lEvGl

20 — 01.08.13 — 10:14

(15) если права точно есть, тогда попробуйте через ADODB

Connection = Новый COMОбъект («ADODB.Connection»);

    Connection.Open («Provider=Microsoft.ACE.OLEDB.12.0;Data Source=» + Файл + «;Extended Properties=»»Excel 8.0;HDR=Yes;IMEX=1″»»);

    Catalog = Новый COMОбъект («ADOX.Catalog»);

    Catalog.ActiveConnection = Connection;

    ИмяЛиста = Catalog.Tables.Item(0).Name;

    

    String = «Select * from [» + ИмяЛиста + «]»;

    Recordset = Новый COMОбъект («ADODB.Recordset»);

    Recordset.Open (String, Connection, 2, 3);

Пока НЕ Recordset.EOF() Цикл

Строка = СокрЛП(Строка(Recordset.Fields(1).Value));

КонецЦикла;

  

Солнце

21 — 01.08.13 — 10:15

USR1CV82

  

lEvGl

22 — 01.08.13 — 10:16

(21) возможно админ менял пользователя, из под которого rphost запускается

  

Лефмихалыч

Модератор

23 — 01.08.13 — 10:16

(21) тебе эксель русским языком все сказал в (3)

  

Галахад

24 — 01.08.13 — 10:17

Права можно так проверить:

Файл = Новый Файл(ИмяФайла);

Файл.Удалить()

  

Serginio1

25 — 01.08.13 — 10:18

(17) Посмотри права DCOM

  

Солнце

26 — 01.08.13 — 10:18

(22)Не менял

  

Солнце

27 — 01.08.13 — 10:18

(25) Дали

  

Лефмихалыч

Модератор

28 — 01.08.13 — 10:20

как вариант — на клиентской тачке висит срежи процессов excel.exe, созданный при отладке ы файловом варианте и корректно не закрытый при завершении обработки. Этот процесс залочил файл.

  

lEvGl

29 — 01.08.13 — 10:20

(26) может процесс экселя на сервере висит — занял файл. проверьте — (24)

  

Солнце

30 — 01.08.13 — 10:21

(28)Это тоже проверяла

  

Солнце

31 — 01.08.13 — 10:21

(29) НЕТУ

  

Солнце

32 — 01.08.13 — 10:21

(24) есть права)

  

Лефмихалыч

Модератор

33 — 01.08.13 — 10:21

(30) тогда я знаю ответ — не твой день

  

lEvGl

34 — 01.08.13 — 10:21

ПРОВЕРЬТЕ через удаление

Добрый день, возникла следующая проблема. Имеется модуль с простыми функциями типа отметить документ на удаление по номеру или провести документ по номеру. Проблема с методом .ПолучитьОбъект — при вызове функции ПометитьРасходнаяНакладная через COM из .NET приложения вылетает исключение, которое не перехватывается в теле функции ПометитьРасходнаяНакладная и более того некорректно сериализуется. То есть на стороне .NET приходит объект Exception с указателями-null’ами, не несущий никакой информации. Что интересно: — если эти функции вызываются непосредственно из 1С, то все прекрасно работает. — если изменить тип документа с РасходнаяНакладная на некоторый другой, то все выполняется корректно. Есть еще как минимум один тип, для которого это также не работает. Заметить отличия этих типов документов от других, с которыми все ок, не удалось — гарантируется, что сам вызов через COM осуществляется, если убрать проблемный вызов .ПолучитьОбъект, то вызов отрабатывает корректно -COM соединение выполняется под тем же аккаунтом, под которым функция корректно работает при выполнении через 1С:Предприятие -другие методы типа .ПолучитьФорму этой же ссылки работают корректно Итого: непонятная ошибка, которая не ловится trycatch и возникает при вызове метода .ПолучитьОбъект на ссылках документа типа РасходнаяНакладная при соединении через COM. .NET код: Могу выложить код GetConnection если необхдимо

Сначала найти, потом проверить найденность, потому уже получать объект

Гарантируется, что объект с заданным номером в базе есть и, повторюсь, этот код с такими же параметрами корректно отрабатывает будучи вызванным через 1С Предприятие. Да и наверняка тогда поймалось бы исключение в самой функции ПометитьРасходнаяНакладная

Посмотри подписчики при записи. И посмотри стоит ли у этих модулей галка внешнее соединение

Или смотри модуль РасходнаяНакладная, что там вызывается при инициализации в модуле расходной накладной

Спасибо за помощь, но не вижу каких-либо проблем. Насчет ПриЗаписи, причем оно тут? Галка «Внешнее соединение» установлена, однако и с ней и без нее эффект одинаковый. Работает с другими документами и другими методами и без «внешнего соединения». В модуле РасходнаяНакладная вообще нет никаких функций, связанных с инициализацией (или я их не вижу). Вообще чисто гипотетически как может возникнуть описанная ситуация? 1) не ловится исключение в ПометитьРасходнаяНакладная 2) работает через 1С Предприятие 3) не работает через COM и только для некоторых типов документов

НайтиПоНомеру(Номер) — это гарантированно не найдет. Пиши не через задницу, а по-человечески НайтиПоНомеру(Номер, Дата)

четвертый день вижу 1С, НайтиПоНомеру(Номер) находит то, что нужно, повторюсь, код работает будучи вызванным через 1С Предприятие. Поискал по коду 1С — почти всюду НайтиПоНомеру используется без второго аргумента. Из того, что сейчас прочитал — второй аргумент целесообразен при использовании периодичной нумерации (так?). В свойствах РасходнаяНакладная Периодичность «Непериодический». Готов попробовать тем не менее. Не представляю только какую дату указывать. Дата?

Не функций а кода который вызывает функции из других модулей. Код инициализации это код после последней процедуры функции модуля

Спасибо за пояснение. В модуле объекта РасходнаяНакладная кроме процедур и одной глобальной переменной нет никакого другого кода.

Сделай проверку на неопределено Если док=неопределено Тогда возврат «Не найден документ»; а на строчке документ=Док.ПолучитьОбъект; в отладчике «Шагнуть В»;

Изменил: Запустил под отладчиком привязав вызов ПроведениеДокументов.ПометитьРасходнаяНакладная(«00008121»,Истина,Ложь); к одному из событий интерфейса. В результате ПолучитьОбъект отработал корректно. При «Шагнуть В» вход внутрь не выполнился. Я не знаю типично ли это для системных вызовов в 1С или мне нужно изменить какие-то настройки отладчика. Проверил и вызов через COM — все то же исключение, которое даже не удается идентифицировать.

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

Ну хотя бы в Исключение ЗаписьЖурналаРегистрации(«ПометитьРасходнаяНакладная», А откуда знаешь, если отладчиком не пользуешься?

первый пост, объяснил все там. Как до этого дошел — опытным путем, вызывая разные методы вместо .ПолучитьОбъект и проверяя другие типы документов (не РасходнаяНакладная). Возвращается «Ok» (ну или я ставил Возвраты сразу до или после оператора с .ПолучитьОбъект). Если документ не найден, вызывается некорректный метод или не указаны обязательный аргументы (что я только не делал) и т.д. и т.п., то исключение в ПометитьРасходнаяНакладная перехватывается и мне на .NET клиент возвращается ошибка «Описание=’» + Инфо.Описание + «‘»; Еще раз — ошибка в .ПолучитьОбъект для документа типа РасходнаяНакладная при соединении через COM. Это ОЧЕНЬ странно и именно поэтому я пишу все это. Я не вижу никакого смысла имея Исключение писать

ну разобрались же. Дату надо указать. Почему странно? Детский сад. ведь понятно же и во всех букварях написано, что по COM надо все параметры указывать, а иначе будет параметр NULL.

разобрались? По-моему нет. Дальше начала не продвинулись

Не пиши. А вообще то всегда хорошо регистрировать ошибки и знать почему и когда они произошли. При этом ошибка у тебя не возвращается. Хозяин барин.

имхо, тут бесполезно что-то пояснять

добавил, проверил, предсказуемо в журнал ничего не добавилось. Проблема все та же — невозможно даже перехватить КОНКРЕТНО ЭТО исключение в 1С, соответственно ничего не возвращается и не пишется в журнал. Писал выше, что другие ситуации типа некорректного метода или некорректных параметров отлично перехватываются и на стороне .NET’а (даже) я получаю соответствующую диагностику. Почему так — не знаю, это и хотел понять малой кровью.

НЕ а         Если ссылка = Неопределено ИЛИ ссылка.Пустая ————-

Ну можно еще потрассировать ЗаписьЖурналаРегистрации(«ПометитьРасходнаяНакладная»,

А, и попробуйте не ИнформацияОбОшибке, а ОписаниеОшибки.

а какая платформа точно ? ТИИ делал базы ?

заметил появление записи в журнале «Описание=’Error calling context method (ПолучитьОбъект)» появляется она далеко не всегда и не сразу после вызова (то есть я уже получил результат, а запись в журнале появляется с приличной задержкой). Получается, Ваша правда. Что можно об этом сказать? Насчет ТИИ — узнал об этом только сейчас, запустил тестирование и, может быть, зря — уже несколько минут конфигуратор висит.

Добавь еще  Инфо.Описание + «‘»+Инфо.ИмяМодуля+ «‘»+Инфо.НомерСтроки

«Описание=’Error calling context method (ПолучитьОбъект)’; ‘ОбщийМодуль.ПроведениеДокументов.Модуль’; 22;» Строка 22 это документ = ссылка.ПолучитьОбъект;

тебе уже сказали нихрена он сылку не получил, без указания  периода найтипономеру не работает по ком

а вот это сработало, вопрос как быть дальше? в интерфейсе 1C Предприятия этот документ есть и без каких-либо видимых проблем, также наблюдаю его в базе уже давно исправил, так что мимо

вызов .ПолучитьОбъект выполняет код вне процедур в модуле объекта, может туда копать.

Посмотри подписчики. Ошибка может  происходить при компиляции модуля

Установи в конфигураторе ПараметрыМодулипроверка галку напротив внешнее соединение. И сделай проверку модуля или проверка модулей в меню конфигурация

Я ошибся с утверждением насчет ЗначениеЗаполнено(ссылка). Все нормально и через COM. сделал, в модуле РасходнаяНакладная нашлась ошибка {Документ.РасходнаяНакладная.МодульОбъекта(201,98)}: Переменная не определена (глВалютаУпр) глВалютаУпр как я понял — глобальная переменная, устанавливаемая при запуске приложения строка 201 с ошибкой это в Процедура ОбработкаПроведения вызов которой так и не осуществляется, ошибка в ПолучитьОбъект — раньше, может ли все равно это быть причиной? Заметил, что подобной ошибки для «Толстый клиент» нет. И тем не менее. Как-то удалось получить подробную ошибку в журнале {ОбщийМодуль.ПроведениеДокументов.Модуль}: Error calling context method (ПолучитьОбъект)             документ = ссылка.ПолучитьОбъект; because: No element selected! то есть проверка ЗначениеЗаполнено(ссылка) проходит, а дальше не удается получить объект.

Так, это все в модуле «Модуль обычного приложения», а в «Модуль внешнего соединения» ничего нет. Режим запуска приложения — «Обычное приложение». В этом причина?

Да :). там уже другие ошибки, но они хотя бы «постоянны» и информативны. Спасибо

Для интереса сделай так #Если НЕ ВнешнееСоединение Тогда Запрос.УстановитьПараметр(«Курс»,(КурсДокумента/КратностьДокумента)/ПолучитьКурсКратностьВалюты(глВалютаУпр,Дата)); #иначе Запрос.УстановитьПараметр(«Курс»,(КурсДокумента/КратностьДокумента)/ПолучитьКурсКратностьВалюты(Константы.ВалютаУправленческогоУчета.Получить,Дата)); #КонецЕсли

Или пропиши в модуле внешнего соединения эту переменную и метод

ну я сразу так и сделал, таким образом заработало

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

После сбоя или некорректного завершения работы гипервизора VirtualBox можно столкнуться с критической ошибкой запуска платформы, при этом в описании ошибки будет указано, что не удалось получить COM-объект VirtualBox. Причины, по которым не удается обнаружить зарегистрированный в системе COM-объект могут быть разные, поэтому нужно обращать внимание на детали ошибки.

Если в детальном описании вы видите «Document is empty» (пустой документ), с большой долей вероятности причиной ошибки стало повреждение конфигурационного файла гипервизора.

Document is empty

Примечание: приведенные ниже способы также эффективны в отношении ошибок «xmlParseCharRef: invalid xmlChar value 0», «Extra content at the end of the document» и других, в описании которых имеется указание на конфигурационный файл VirtualBox.xml.

VirtualBox xml

Это неприятность, но она не настоль серьезна, как, скажем, повреждение файла-контейнера виртуальной машины, из-за чего последнюю пришлось бы удалить. Устранить эту неполадку можно как минимум двумя способами.

Восстановление из резервной копии

Данные о конфигурации VirtualBox хранятся не в одном, а в двух файлах: основном VirtualBox.xml и резервном VirtualBox.xml-prev. Воспользуйтесь этим.

Завершите работу всех запущенных виртуальных машин и самого гипервизора, после чего откройте Диспетчер задач и убедитесь, что все процессы программы действительно завершены.

Затем перейдите в расположение %userprofile%.VirtualBox, найдите там файл VirtualBox.xml и переименуйте его в VirtualBox.bak. Файл же VirtualBox.xml-prev, напротив, переименуйте в VirtualBox.xml.

Восстановление из резервной копии

Готово, можете запускать гипервизор и виртуальные машины.

Пересоздание конфигурационного файла

Если первый способ не помог, а такое может быть в случае повреждение обоих файлов, предоставьте платформе виртуализации возможность пересоздать конфигурационный файл.

Точно так же завершите все процессы приложения, перейдите в %userprofile%.VirtualBox и переименуйте оба указанных в описании первого способа файла, добавив или изменив их расширения на BAK.

Запустите VirtualBox.

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

Запустите VirtualBox

Нажмите кнопку «Добавить» и укажите путь к файлу настроек VBOX, расположенному в той же директории, в которой хранится файл-контейнер виртуальной машины.

Файл VBOX — этот тот же XML-документ, только в специальном формате. Программа считает его и добавит связанную виртуальную машину в список, доступный для управления через графический интерфейс.

VBOX

Через меню «Машина» -> «Добавить» импортируйте другие виртуальные машины,

Добавить

проверьте их работоспособность и, если все они работают нормально, удалите переименованные конфигурационные файлы как более ненужные.

Загрузка…

Ошибка получения объекта com: отказано в доступе.

Данная ошибка возникла при использовании библиотеки, например HASP, которая была зарегистрирована с помощью COM+. Такая регистрация помогает использовать 32 разрядные библиотеки на 64 разрядных серверах. Подробное описание действий по регистрации библиотек легко найти на просторах интернета.

После регистрации не всегда проходит все гладко по созданию COM объекта. Может возникнуть ошибка доступа к COM объекту, которая звучит примерно так:

Ошибка получения объекта COM: отказано в доступе.

Что бы избавиться от ошибки, откройте оснастку «Службы компонентов». Раскройте дерево служб и в ветке COM+ найди нужную службу, откройте её свойства (см. рисунок 1).

Рисунок 1. Свойства приложения COM+

В свойствах перейдите на вкладку Безопасность и для пункта «принудительная проверка доступа для приложений» снимите галочку (см. рисунок 2). Проверьте создание COM объекта.

Рисунок 2. Снятие принудительной проверки доступа для COM+

Если создание COM объекта не увенчалось успехом, попробуйте установить политику программных ограничений в неограниченный уровень (см. рисунок 3).

Рисунок 3. Неограниченный уровень политики программных ограничений

Если требуется, чтобы приложение COM+ могли запускать пользователи сети, не проходящие проверку подлинности, роли приложения должны включать анонимного пользователя. В Microsoft Windows Vista® анонимный пользователь не включается по умолчанию в группу «Все». Этот тип пользователя можно добавить в мастере установки приложения COM+ при установке или создании нового приложения. В мастере на странице Добавление ролей приложения щелкните Добавить роль, введите «АНОНИМНЫЙ ВХОД» и нажмите кнопку ОК.

Many Windows users are not able to access Oracle VirtualBox as when they try to launch a VM on your Windows 11/10 computer, they see the following error message.

Failed to acquire the VirtualBox COM object, The application will terminate.

Failed to acquire the VirtualBox COM object

In this article, we are going to see why you are seeing this error and will try to resolve this with some simple solutions.

Why am I seeing “Failed to acquire the VirtualBox COM object” in VirtualBox?

Usually, one may see this error because of a lack of permissions. Even if you are an admin, you have to make sure that you are running the application as an administrator, otherwise, you will see the error in question. Other than that, the issue can be because of incompatibility, antivirus blocking the VM, and more.

If you are seeing “Failed to Acquire the VirtualBox COM Object” in Oracle VirtualBox, these are the things you can do to resolve the error.

  1. Run VirtualBox as an administrator
  2. Install VirtualBox as an administrator
  3. Disable your antivirus
  4. Restore Access Control List (ACL) Permissions
  5. Move .Virtualbox folder to a different location.

Let us talk about them in detail.

1] Run VirtualBox as an administrator

As mentioned earlier, the issue can be a lack of permission and you can run the application as an administrator to gain that permission. You can always right-click on the VirtualBox and select Run as administrator, but if you want to always open the app as an administrator, then follow the given steps.

  1. Right-click on VirtualBox Shortcut and select Properties.
  2. Go to the Compatibility tab.
  3. Tick Run the program as an administrator.
  4. Now, click Apply > Ok.

Reopen VM and hopefully, you will not see the error message.

However, you should know that running it as an admin is not secure.

2] Install VirtualBox as an administrator

If opening the app as an admin is to no avail, then you may have to install VirtualBox with administrative privileges. To do that, first, uninstall the application. You can do that from Settings > Apps > Apps & features, select the program, and click Uninstall.

Now, you can right-click on the VirtualBox installation package and select Run as administrator. Now, follow the usual process to install the application on your system and you will be good to go.

3] Disable your antivirus

Next up, if the issue persists, then we have to assume that your antivirus is preventing your VirtualBox from functioning. Therefore, we would recommend you to temporarily disable the antivirus that you may have, for the VirtualBox to work on your system.

4] Restore Access Control List (ACL) Permissions

To reset File & Folder permissions to default, launch the command prompt as an Administrator and navigate through the tree of folders you need to fix. Then run the following command:

ICACLS * /T /Q /C /RESET

ICACLS will reset the permissions of all the folders, files, and subfolders to default.

5] Move .Virtualbox folder to a different location

The error message can be because of a corrupted Virtualbox.xml file or some other file present in the Virtualbox folder. So, it is recommended to move the entire Virtualbox folder to a different location, so that, it creates a new folder from the scratch and resolves the issue for you.

First of all close VirtualBox, then navigate to the following location.

C:Users<UserName>

Replace <UserName> with your username.

Right-click on .Virtualbox folder, and select Cut. Now, go to some other location and paste the folder there.

Finally, open VirtualBox and check if the issue persists.

How do I fix VirtualBox Failed to open session for virtual machine?

If you get Failed to open session for virtual machine error while starting a virtual machine, you need to run the VirtualBox with administrator permission. Following that, you can disable your antivirus or any other security shield that you have installed on your PC. Apart from that, it is suggested to restore Access Control List or ACL permissions as well.

That’s all! Hope it helped.

Related reads:

  • VirtualBox Interface has active connections message when shutting down
  • VirtualBox Failed to attach the USB device to the virtual machine.

turboq, криво написанный модуль документа!

Добавлено через 5 минут

Цитата
Сообщение от turboq
Посмотреть сообщение

не понятно почему вызывается ОбработкаЗаполнения

Она не вызывается! Она пытается скомпилироваться! Но так как при подключении через ComConnector РежимДиалогаВопрос НЕ СУЩЕСТВУЕТ, модуль документа не может быть скомпилирован.
Для таких случаев когда в модуле объекта необходимо реализовать работу с диалогом используют инструкции препроцессору

1C
1
2
3
#Если Клиент Тогда
   РежимДиалогаВопрос
#КонецЕсли

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

Цитата
Сообщение от turboq
Посмотреть сообщение

а если просто в этой базе создаю объект документа нет

В базе код исполняется на клиенте и РежимДиалогаВопрос есть поэтому все происходит без ошибок

Используй не ComConnector, V8.Application для подключения, тогда тебе будут доступны интерфейсные вещи

Добавлено через 5 минут
================================================================================ =======================================
из описания внешнего соединения (СП) Жирным выделил что тебе следует почитать про КомСоединения

Описание:

В общем и целом работа с 1С:Предприятием 8 через внешнее соединение подобна работе с 1С:Предприятием в режиме Automation сервера. Основные отличия заключаются в следующем:

  • В случае Automation сервера запускается полноценное приложение 1С:Предприятия 8, а в случае внешнего соединения запускается относительно небольшой внутрипроцессный COM-сервер.
  • При работе через внешнее соединение не доступны функциональные возможности, так или иначе связанные с организацией пользовательского интерфейса 1С:Предприятия 8;
  • При работе внешнего соединения не используется модуль управляемого приложения (модуль обычного приложения) конфигурации 1С:Предприятия 8. Его роль при работе с внешним соединением играет модуль внешнего соединения.

При использовании внешнего соединения имеются следующие преимущества по сравнению с использованием Automation сервера:

  • Более быстрая установка соединения, так как не требуется создания отдельного процесса операционной системы, а все действия производятся в рамках вызывающего процесса;
  • Более быстрое обращение к свойствам и методам объектов 1C:Предприятия, так как для организации обращения не требуется организации межпроцессной коммуникации;
  • Меньший расход ресурсов операционной системы.

Для организации доступа к данным 1С:Предприятия 8 через внешнее соединение, выполняется следующая последовательность действий:

  • создается менеджер COM-соединений, с помощью которого производится установка соединения;
  • производится обращение к методу Connect менеджера COM-соединений. Метод Connect возвращает внешнее соединение с информационной базой 1С:Предприятия 8;
  • через внешнее соединение производится обращение к допустимым методам, свойствам и объектам информационной базы, с которой установлено соединение.

Важно! В связи с отсутствием пользовательского интерфейса не все объекты, а также свойства и методы можно использовать во внешнем соединении.
Внешнее соединение предоставляет полный доступ к своему глобальному контексту. Поэтому внешнее соединение в качестве своих методов может иметь: системные константы, значения заданных в конфигураторе объектов, доступ к которым осуществляется с помощью менеджеров (например, константы, перечисления, справочники, документы, журналы документов, отчеты, обработки, планы видов характеристик, планы счетов, планы видов расчета, регистры), а также переменные, объявленные в модуле внешнего соединения с ключевым словом Экспорт.

Доступность:

Интеграция.

Приветствую всех на страницах блога К76, сегодня покажу как я лично разрешил проблему запуска программы VirtualBox и конкретных виртуальных машин, находящихся под её управлением. В качестве вводной информации ошибку можно охарактеризовать в следующих скринах. Для начала программа ответила на попытку запуска как-то общё. Мол, Не удалось получить COM-объект VirtualBox:

completely failed to instantiate clsid

ошибка не удалось получить COM-объект VirtualBox

NtCreateFileDeviceVBoxDrvStub failed

Не удалось открыть сессию для виртуальной машины

Проблема появилась для меня неожиданно (ну, как всегда), что послужило причиной точно уже неизвестно. В качестве предположения выдвину факт, что хозяйская Windows 10 за мгновение до случившегося была проверена на целостность образа при помощи инструмента DISM. При этом консоль отрапортовала об успешном исправлении системных ошибок. Это или что-то иное послужило, однако, появлением ошибки Не удалось получить COM-объект и иже с ней при попытке запустить VirtualBox. От первой сиюминутной проблемы с запуском самой программы я избавился сразу, просто запустив VirtualBox от имени администратора. Однако попробовав запустить любую из гостевых «виртуалок» я последовательно увидел две следующие ошибки:

NtCreateFileDeviceVBoxDrvStub failed

Не удалось открыть сессию для виртуальной машины

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

драйвер virtualbox вылетел

Таким образом, я воспользовался шансом вернуть существующий драйвер к жизни. Для начала убедимся, что в Диспетчере задач никаких процессов со стороны VirtualBox нет. Если есть, завершим их работу.

  • Отправляемся в папку

C:Program FilesOracleVirtualBoxdriversvboxdrv

откуда устанавливаем драйвер VBoxDrv.inf, числящийся в коротком списке:

установка драйвера virtualbox

  • Операция заняла секунды, после чего из консоли команд от имени администратора для статистики можно было бы проверить проверить состояние успешно работающего драйвера указанной в том же окне командой:
sc start vboxdrv

sc start vboxdrv

До того, используя указанную чуть выше команду, я бы увидел, видимо, такое сообщение консоли:

Имя_службы: vboxdrv
        Тип                : 1  KERNEL_DRIVER
        Состояние          : 1  STOPPED
        Код_выхода_WIN32   : 2  (0x2)
        Код_выхода_службы  : 0  (0x0)
        Контрольная_точка  : 0x0
        Ожидание           : 0x0

Короче говоря, перезапуска Windows не понадобилось. Каждая из гостевых машин ожила, фоном устанавливая погибший до сего драйвер. Соглашаясь с перемежающимися окнами установки драйвера со стороны UAC Windows, все виртуальные машины запустились на этот раз без проблем.

Успехов.

Понравилась статья? Поделить с друзьями:
  • Поляков работа над ошибками образ учителя
  • Получить фиаско может каждый спортсмен речевая ошибка
  • Поляков работа над ошибками о чем
  • Получить фиаско лексическая ошибка
  • Поляков работа над ошибками краткое содержание брифли