Имя: Пароль:
1C
1С v8
Метод объект на обнаружен в comобъекте
0 John83
 
22.02.22
17:40
Обмен из УТ 10.3 в БП 2.0
В какой-то момент выдает Метод объекта не обнаружен (УстановитьСубконто)
Это про Соединение.БухгалтерскийУчет.УстановитьСубконто(
Вопрос в том, куда этот метод девается? Функция экспортная.
https://d.radikal.ru/d19/2202/b0/973929a684d0.png
1 Жан Пердежон
 
22.02.22
18:00
COM - прошлый век, пили веб-серисы
2 TormozIT
 
гуру
22.02.22
18:20
(0) инструкции препроцессора ее отключили для режима ВнешнееСоединение
3 vicof
 
22.02.22
18:49
(1) +1
4 серый КТУЛХУ
 
22.02.22
18:55
(1) веб-серисы - прошлый век, пили http-серисы
5 John83
 
22.02.22
19:55
(2) можно чуть пояснить?
почему эта ошибка возникает? В большинстве случаев метод на месте.
6 John83
 
22.02.22
19:56
(1) это допиленный типовой обмен
7 TormozIT
 
гуру
22.02.22
21:07
(5) Судя по картинке и с учетом плавающего проявления, тут не (2), а другая причина какая то, например ошибка платформы. Какая версия платформы?
8 ДедМорроз
 
22.02.22
21:07
Так в переменной может быть кто-то другой или,скажем,Неопределено.
Com здесь не виноват.
9 серый КТУЛХУ
 
22.02.22
21:09
х32 / х64 ?
10 TormozIT
 
гуру
22.02.22
23:15
Скорее всего во внешнем соединении происходит перед этим нештатная ситуация, которая приводит к его порче. Рекомендую анализировать техножурнал и журнал регистрации в базе внешнего соединения.
11 ДедМорроз
 
23.02.22
10:51
Я бы еще посмотрел внутри функции,очень возможно,что там вызывается одноименный метод для какого-то объекта,а 1с через com просунуть всю ошибку не может.
12 ДедМорроз
 
23.02.22
10:55
Еще обращаю внимание,что вы в вызов функции передаете переменную Соединение,так точно делать нельзя,т.к.или в нее что-то запишется или та база получит очень странный объект.
В любом случае,после первого вызова переменная соединения будет испорчена.
13 mistеr
 
23.02.22
11:06
(8) Картинку не смотрел?
14 TormozIT
 
гуру
23.02.22
11:07
(12)
> так точно делать нельзя
Так можно делать. Всегда так делал.
15 John83
 
23.02.22
11:36
(7) ошибка не такая критичная, но тянется уже очень давно
8.3.20.1674
16 John83
 
23.02.22
11:36
(9) х64
17 ДедМорроз
 
23.02.22
11:40
(14)когда вы в функцию com-базы передаете ссылку на саму базу,то будет выполняться преобразование туда при ввзове и преобразование обратно при возврате из функции - здесь никто не дает гарантии корректного преобразования.
Если очень хочется,то скопируйте в другую переменную значение перед передачей - явно ошибка,указанная в (0) уйдет.
18 John83
 
23.02.22
12:22
(17) сделал так
ОбъектПодключения2 = ОбъектПодключения;
ОбменДанными_УСУ.ВыгрузитьДвиженияКомплектаций(ОбъектПодключения2);
не помогло
19 John83
 
23.02.22
12:22
(10) по крайне мере в ЖР ошибок нет
20 hhhh
 
23.02.22
12:29
(19) а зачем Соединение передавать в качестве параметра? Это же бред.
21 John83
 
23.02.22
12:33
(20) что не подключаться по новой
22 acht
 
23.02.22
12:35
(20) > Это же бред.
Неа. Это совершенно обычная практика передачи параметра по ссылке. Ну, в рамках одного серверного вызова, конечно.

Детмороз гонит, потому как ему где-то почудилась передача соединения с удаленной базой в метод удаленной базы, типа Соединение.МодульУдаленнойБазы.МойМетод(Соединение).
23 lg2marvel
 
23.02.22
12:44
А в базе корреспонденте точно есть модуль БухгалтерскийУчет.УстановитьСубконто()

У меня было похожее когда у функции УстановитьСубконто была директива компиляции НаСервере.
24 acht
 
23.02.22
12:45
(23) > директива компиляции
Про это еще в (2) сказали =)
25 John83
 
23.02.22
12:47
(23) https://b.radikal.ru/b40/2202/b2/4958905b8812.png

но я бы понял, если бы вообще не работало, но почему-то не срабатывает только иногда
26 John83
 
23.02.22
12:50
почему соединение не видит мой модуль в БП?
https://a.radikal.ru/a25/2202/87/ab96dcc8ea45.png

настройки аналогичны
https://b.radikal.ru/b36/2202/f0/69f268b57d21.png
27 John83
 
23.02.22
13:00
(23) так и что сделал?
какая директива должна быть?
28 John83
 
23.02.22
13:13
в БП добавил модуль и там сделал
https://d.radikal.ru/d41/2202/04/937fb7862488.png

в УТ соответственно
https://d.radikal.ru/d02/2202/9a/131a58e9324f.png

в этом случае метод вообще ни разу не находит
29 acht
 
23.02.22
13:20
(28) Потому что внешнее соединение это не клиент и не сервер.
30 John83
 
23.02.22
13:24
(29) ааа
попробую
31 John83
 
23.02.22
13:32
неа
в БП
https://d.radikal.ru/d00/2202/94/deaa5eda9e0f.png

в УТ
https://a.radikal.ru/a10/2202/8d/2ee92479ba2e.png

как и раньше - в большинстве случаев метод есть и несколько раз не находит
32 ДедМорроз
 
23.02.22
13:48
(22) я не очень внимательно посмотрел картину на радикале.
Там передается результат вызовы функции,в которую передается соединение как параметр.
Естественно,что в рамках одной базы с переменной,содержащей com-объект ничего не происходит,а при копировании в другую переменную просто счетчик объекта увеличивается.
Понятно,что внутри функции переменную,содержащую объект,можно поменять - это из-за того,что передача происходит по ссылке,но такое поведение от типа и значения в переменной не зависит - если в ней будет число,то с ним можно точно также поступить.

Внешнее соединение выполняется в режиме толстого клиента обычного приложения - это можно увидеть,когда подписки на события будут падать с ошибкой передачи мутабельного значения с клиента на сервер.
33 acht
 
23.02.22
13:54
(32) > Внешнее соединение выполняется в режиме толстого клиента обычного приложения

Не гони. Внешнее соединение выполняется в режиме внешнего соединения. Оно не попадает по директиву компиляции "#Если Клиент", в нем недоступны некоторые типы, например КодВозвратаДиалога...
34 John83
 
23.02.22
14:51
в БП переделал из процедуры в функцию, чтобы в отладчике была видна.
И в момент ошибки метод все же на месте, но почему-то его не видит
https://b.radikal.ru/b01/2202/7f/c336435ffb43.png
35 John83
 
23.02.22
14:51
полный текст

Метод объекта не обнаружен (УстановитьСубконто)
{ОбщийМодуль.ОбменДанными_УСУ.Модуль(2013)}:                    Соединение.Прометей_ДополнительныйМодуль.УстановитьСубконто(Счет41, НоваяЗапись.СубконтоДт, 1, ПолучитьОбъектПриемника(Выборка.Номенклатура, Соединение));
{Обработка.ОбменДаннымиXML.МодульОбъекта(15061)}:        ОбменДанными_УСУ.ВыгрузитьДвиженияКомплектаций(ОбъектПодключения2);
{ОбщийМодуль.ПроцедурыОбменаДанными.Модуль(3976)}:        УспешнаяВыгрузкаИзИсточника = ОбработкаОбменаДаннымиXML.ВыполнитьВыгрузку(Истина, СтрокаСообщенияОбОшибке,
{ОбщийМодуль.ПроцедурыОбменаДанными.Модуль(4083)}:            ВыполнитьОбменДаннымиЧерезComСоединение(СтруктураНастроекОбменаДанными, ОбработкаОбменаПриемника);
{ОбщийМодуль.ПроцедурыОбменаДанными.Модуль(4387)}:    ПроизвестиОбменДаннымиПоНастройке(СтруктураНастроекОбмена);    
{ОбщийМодуль.ПроцедурыОбменаДанными.Модуль(4496)}:            ВыполнитьОбменПоНастройке(НастройкаОбменаДанными, РучнойЗапускОбменов,
{Справочник.НастройкиОбменаДанными.Форма.ФормаЭлемента.Форма(317)}:    ПроцедурыОбменаДанными.ВыполнитьОбменДаннымиПоПроизвольнойНастройке(ЭтотОбъект.Ссылка, , глЗначениеПеременной("глОбработкаАвтоОбменДанными"));
{Справочник.НастройкиОбменаДанными.Форма.ФормаЭлемента.Форма(324)}:    ПроизвестиОбменДаннымиДляНастройкиОбмена();
36 hhhh
 
23.02.22
15:40
(35) ну посмотрите в этом модуле Прометей_ДополнительныйМодуль, стоит галка внешнее соединение? Ну и директивы препроцессора проверьте.
37 pechkin
 
23.02.22
15:50
Релиз платформы какой?
Было как-то что методы пропадали и не только в ком
38 TormozIT
 
гуру
23.02.22
15:53
Автор кажается до сих пор не понял, что у COM-клиента и COM-сервера могут быть разные версии платформы. COM-сервер у него судя по телеге 8.3.18.1447, а COM-сервер 8.3.20.1674. Ему для начала надо COM-сервер поднять по последнему числу (до 8.3.18.1741)
39 TormozIT
 
гуру
23.02.22
15:53
(38) Но разными они могут быть только в случае работы COM-сервера в отдельном процессе.
40 TormozIT
 
гуру
23.02.22
15:56
Вероятно у автора еще и COM+ приложение настроено для дружбы между разными версиями платформы через COM (внешнее соединение).
41 John83
 
23.02.22
15:57
(38) где ты увидел 8.3.18.1447?
Если бы были разные версии, то вообще не работало.
42 John83
 
23.02.22
15:58
(37) 8.3.20.1674
если не ошибаюсь, это тянется еще с 8.2
43 John83
 
23.02.22
16:06
(36) стоит
в (31) код
44 John83
 
23.02.22
16:53
рядом с УстановитьСубконто добавил в БП функцию
#Если ВнешнееСоединение Тогда
Функция ПроверкаСвязи() Экспорт
  Возврат Истина;
КонецФункции
#КонецЕсли

В момент ошибки она без проблем отрабатывает
https://b.radikal.ru/b05/2202/c0/f89867aad0a9.png

Какие еще будут мысли?
45 hhhh
 
23.02.22
17:02
(44) попробуйте в бп запустить проверку конфигурации
46 TormozIT
 
гуру
23.02.22
17:16
47 TormozIT
 
гуру
23.02.22
17:18
(46) Может это конечно другой человек. Он четко не ответил. Может ты прояснишь этот вопрос.
48 John83
 
23.02.22
17:20
(47) я в телеге вопросы по 1с никогда не задавал
49 TormozIT
 
гуру
23.02.22
17:23
Тогда (38)-(40) мимо.
50 TormozIT
 
гуру
23.02.22
17:49
(0) Пробуй на платформе 8.3.18.1741.
51 ДедМорроз
 
23.02.22
19:36
(33) ты не совсем понял,что я хотел сказать.
Режимы внешнего соединения и толстый клиент обычное приложение,конечно,же различаются хотя бы тем,что из внешнего соединения не работают все интерыейсные функции,но режим работы с базой у них одинаковый - все вытаскивается на клиента и там обрабатывается.
52 acht
 
23.02.22
21:16
(51) > ты не совсем понял,что я хотел сказать
Это не я не понял. Это ты не можешь выразится. Ты же буквально высказал, что "Внешнее соединение выполняется в режиме толстого клиента обычного приложения".

Это не так. Внешнее соединение - это отдельный вид "клиентского приложения", такого же, как тонкий клиент и толстый клиент. Каждый из этих трех видов клиента поддерживает варианты исполнения кода как на клиенте, так и на сервере, это паралелльные вещи. Твоя фраза "все вытаскивается на клиента и там обрабатывается" такая же ложная.
53 acht
 
23.02.22
21:18
(52) Лачше, правда, сказать "каждый из этих трех видов клиенского приложения поддерживает варианты исполнения кода как в контексте своей клиентской части, так и на сервере".
54 TormozIT
 
гуру
23.02.22
22:41
Мне кажется более системной следующая терминология.
Прикладные (способные выполнять прикладной код) сеансы в базе 1С делятся на
- серверные (инструкция препроцессора Сервер)
  - фоновое задание
  - web/http/... сервис
- клиент-серверные (обязательно клиентский контекст и опционально серверный)
  - интерактивные (инструкция препроцессора Клиент)
    - обычное приложение (может работать как COM OLE Automation)
    - толстый клиент управляемое приложение (может работать как COM OLE Automation)
    - тонкий клиент управляемое приложение (может работать как COM OLE Automation)
    - веб клиент
    - мобильный клиент
  - неинтерактивые
    - внешнее соединение или же COMConnection (инструкция препроцессора ВнешнееСоединение)
55 John83
 
24.02.22
09:47
(50) говорю же и на 8.2 такое было. Сильно сомневаюсь, что версия платформы что-то поменяет.