Отладка 1С по COM-коннектору?

1. SanchoD 303 20.06.22 17:48 Сейчас в теме
Приветствую, коллеги!

Делаю обработку по переносу данных из базы в базу по COM-у. Столкнулся с исключением при попытке записать документ в базе-получателе.
Ошибка маловразумительная, хотелось бы поточнее выйти на причину.
Запустил базу-получатель в режиме отладки с автоматическим подключением внешних соединений на сервере. Но отловить исполняемый код по COM-соединению не могу. Ни процедура ПередЗаписью(), ни ПриЗаписи() не перехватывается. Хотя среди подключенных предметов отладки появляется серверное подключение через COM.
Можно ли и как отловить и отладить код, выполняемый через COM-соединение?
Найденные решения
21. spacecraft 22.06.22 17:58 Сейчас в теме
(20)
ДокументОбъектПриЗаписи

это метод подписки на событие. Причем похоже общий для всех документов. Т.е. смотрите подписку не конкретного нужного документа, а подписку на событие ПриЗаписи для всех документов. Найдите эту процедуру и посмотрите свойства общего модуля (в котором она расположена). Указан флаг ВнешнееСоединение ?
mistervoron; ValeroBo; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Vitaly1C8 20.06.22 17:54 Сейчас в теме
(1) почему не ведете отладку на стороне где создается COM-объект ?
4. SanchoD 303 20.06.22 18:23 Сейчас в теме
(2) веду. но там все идет хорошо, до строки ДокументCOM.Записать(). И срабатывает исключение.
Ошибка при этом такая:

Ошибка при выполнении обработчика - 'ПриЗаписи'
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ДокументОбъектПриЗаписи ()

Но я подключаюсь из серверной процедуры Базы-источника к Базе-приемнику. И соответственно ничего не передаю с клиента.
Что там (в Базе-приемнике) происходит - черный ящик.
6. ishelper 20.06.22 18:33 Сейчас в теме
(1)
Ошибка маловразумительная
Такой же (маловразумительный) ответ устроит?
(4)
Попытка передачи с клиента на сервер мутабельного значения
Гуглить не пробовали? Бывает полезно, например:
https://infostart.ru/1c/articles/123256/
https://forum.infostart.ru/forum9/topic197506/
12. SanchoD 303 20.06.22 22:31 Сейчас в теме
(6) Смотрел. Не нашел ответа что мне надо исправить. Для этого и хотел пошагово пройтись по исполняемому в базе-получателе коду.
7. nikolasx 59 20.06.22 18:36 Сейчас в теме
(4) Да, в этих ссылка и есть ответ на ваши ошибки https://infostart.ru/1c/articles/123256/
9. Vitaly1C8 20.06.22 21:47 Сейчас в теме
(4) предлагаю следующее: документ записывать но не проводить; затем зайти в базу приемник и
1. провести его (если ошибки нет) см 2
2. провести его программно из обработки в базе приемнике (если ошибки нет) см 3
3. проводить в режиме Док.ОбменДанными.Загрузка = Истина
что-нибудь из выше перечисленного может помочь ...
10. SanchoD 303 20.06.22 22:09 Сейчас в теме
(9) Это все еще до проведения заканчивается ошибкой, при записи.
13. unknown181538 153 21.06.22 00:05 Сейчас в теме
(4) Ну это, вероятнее всего, подписка на событие ПриЗаписи()
Но что там за пробелема с мутабельностью не понятно. Да и отладкой вы это не поймаете, т.к. там должен передаваться ДокументОбъект платформой...
15. SanchoD 303 21.06.22 09:27 Сейчас в теме
(13) Да, так и есть. Вся хрень происходит после команды Записать() из Базы-источника. И дальше происходит вся движуха по событию ПриЗаписи() в Базе-приемнике. И вот отладка именно в базе-приемнике помогла бы выйти на конкретный модуль/процедуру/функцию где что-то пошло не так. Собственно о чем и прошу помочь - указать как это можно сделать, если конечно можно.
14. winapi 60 21.06.22 00:13 Сейчас в теме
(1) покажите код, где создаете и записываете документ. Скорей всего вы подключаетесь через V83.Application, а не через COMConnector. В этом и проблема.
16. SanchoD 303 21.06.22 17:00 Сейчас в теме
(14) Вот так подключаюсь:

&НаСервере
Функция Подключение(V8)

Если (СокрЛП(Объект.ИмяБазы)="") И (СокрЛП(Объект.ИмяСервера)="") И (СокрЛП(Объект.ПутьКБазе)="") Тогда
СообщениеСообщить("Не настроено подключение к ИБ!");
Возврат 0;
КонецЕсли;

Попытка
Попытка
ИБ = Новый COMObject("V83.COMConnector");
Исключение
СтрСообщения = "Невозможно создать объект '"+"V83.ComConnector"+"'
|Попробуйте зарегистрировать COM-объект командой: regsvr32 (Каталог BIN 1C 8.3)\comcntr.dll";
СообщениеСообщить(СтрСообщения);
Объект.Лог.ДобавитьСтроку(СтрСообщения);
Возврат 0;
КонецПопытки;
ИмяПользователя = Объект.Пользователь;
ПарольПользователя = Объект.Пароль;
Если Объект.ТипБазы=0 Тогда
ПутьКБазе = Объект.ПутьКБазе;
СтрокаПодключения = "File="""+ПутьКБазе+""";Usr="""+ИмяПользователя+""";Pwd="""+ПарольПользователя+"""";
Иначе
Сервер83 = Объект.ИмяСервера;
База83 = Объект.ИмяБазы;
СтрокаПодключения = "Srvr="""+Сервер83+""";Ref="""+База83+""";Usr="""+ИмяПользователя+""";Pwd="""+ПарольПользователя+"""";
КонецЕсли;

V8 = ИБ.Connect(СтрокаПодключения);
СтрСообщения = "Подключена база. ("+ТекущаяДата()+")";
СообщениеСообщить(СтрСообщения);
Возврат 1;
Исключение
СтрСообщения = "Не удалось подключиться к базе.";
СообщениеСообщить(ОписаниеОшибки());
Возврат 0;
КонецПопытки;

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

А вот про V83.Application спасибо. Возможно что так взлетит.
19. ignorant 22.06.22 16:39 Сейчас в теме
(1)
			Попытка
				ОбъектДокумент.Записать (БазаПолучатель.РежимЗаписиДокумента.Запись);
			Исключение
				Сообщить ("Не записан Документ : " + ОписаниеОшибки());
			КонецПопытки;
ОписаниеОшибки() покажите
20. SanchoD 303 22.06.22 17:23 Сейчас в теме
(19)Не удалось записать документ ЗаказПоставщику № от 20.06.2022 15:57:51 .({амд_Реализация Документ.РеализацияТоваровУслуг.МодульОбъекта(1101)}: Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация (1C:Enterprise 8.3.20.1590): Ошибка при выполнении обработчика - 'ПриЗаписи'
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ДокументОбъектПриЗаписи ().)
21. spacecraft 22.06.22 17:58 Сейчас в теме
(20)
ДокументОбъектПриЗаписи

это метод подписки на событие. Причем похоже общий для всех документов. Т.е. смотрите подписку не конкретного нужного документа, а подписку на событие ПриЗаписи для всех документов. Найдите эту процедуру и посмотрите свойства общего модуля (в котором она расположена). Указан флаг ВнешнееСоединение ?
mistervoron; ValeroBo; +2 Ответить
3. nikolasx 59 20.06.22 18:00 Сейчас в теме
Можно смотреть в журнал регистрации, поставить в попытку "запись объекта" и в исключении делать запись в журнал регистрации с описанием ошибки. И лучше уже забыть про обмен через COM-соединение - это погибель в новых реалиях!
5. SanchoD 303 20.06.22 18:26 Сейчас в теме
(3) Да, так и делаю. Записываю в Попытке и в Исключении получаю текст ошибки:

Ошибка при выполнении обработчика - 'ПриЗаписи'
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ДокументОбъектПриЗаписи ()

Мало что говорит она мне. Подключаюсь и работаю из серверной процедуры модуля объекта Базы-источника. Что там и где передает клиент на сервер в Базе-получателе не понятно.
17. spacecraft 21.06.22 18:53 Сейчас в теме
(5) если нет доступа к конфигуратору/отладчику базы, к которой подключаетесь, то ничего сделать не сможете. Проблема на той стороне.
Возможно в подписке на событие идет обращение к серверному модулю с передачей чего-то "незаконного" :) и не предусмотрели, что возможно выполнение по внешнему соединению (а это разновидность клиента). Т.е. при обычном выполнении модуль объекта выполняется на сервере (в том числе и подписка), а при внешнем соединении, соответственно на клиенте (ВнешнееСоединение). Вот и происходит ошибка при передачи с клиента на сервер мутабельного значения. А при обычной работе происходит передача с сервера на сервер, соответственно и ошибки не будет.

Как минимум нужно убедиться, что подписка на событие расположена в общем модуле, для которого проставлен флаг ВнешнееСоединение.
ValeroBo; unknown181538; +2 Ответить
18. SanchoD 303 22.06.22 11:04 Сейчас в теме
(17) Доступ к конфигуратору базы-приемника есть. Включаю там отладку с автоматическим подключение внешних соединений. Но включенный замер не перехватывает исполнение кода внешним соединением, хотя оно (внешнее соединение) есть в списке подключенных.
Перелопатил общие модули, которые вызывались из подписки на событие ПриЗаписи. Были несколько без флажка "Внешнее соединение", но их установка не решила проблему. Я так понимаю, что там еще куча процедур/функций вызывается из других модулей. Всем флажок не поставишь. Хотелось бы выйти на конкретный парасик. Но видно нет такого инструмента.
8. ishelper 20.06.22 18:58 Сейчас в теме
+(6) На всякий случай: надеюсь, базовое ограничение передачи данных через COM у вас выполняется?
через ком передача возможна примитивных типов: число, дата, строка, булево.
все остальное формируется на другой стороне.
если передавать объект, форму и т.п. - выползет как раз вот такая ошибка.
11. SanchoD 303 20.06.22 22:12 Сейчас в теме
(8) Да, конечно, передаю через КОМ только простые типы. Причем для исключения передачи чего-то недозволенного, сделал тестовое создание документа, передав через КОМ только дату. И абсолютно пустой документ не смог записаться, вывалив ту же самую ошибку.
22. ValeroBo 25.01.23 01:39 Сейчас в теме
Столкнулся с такой же проблемой, и в этой ветке уже есть решение (почему-то не отмеченное как решение): комментарии spacecraft от 22.06.2022 17:58, 18:53.

Действительно проблема была в базе-приемнике, а именно в подписке на событие ПриЗаписи, обработчик которого находился в модуле, где не была установлена галка "Внешнее соединение". Установил галку "Внешнее соединение" в свойствах соответствующего общего модуля - и это решило проблему.

spacecraft, спасибо!
kaaasteeen; +1 Ответить
23. zlexuzz 16.03.23 16:02 Сейчас в теме
(21) Спасибо тебе, добрый человек! Полдня голову ломал.
Оставьте свое сообщение

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