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

1. SanchoD 295 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 295 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 295 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 295 20.06.22 22:09 Сейчас в теме
(9) Это все еще до проведения заканчивается ошибкой, при записи.
13. unknown181538 151 21.06.22 00:05 Сейчас в теме
(4) Ну это, вероятнее всего, подписка на событие ПриЗаписи()
Но что там за пробелема с мутабельностью не понятно. Да и отладкой вы это не поймаете, т.к. там должен передаваться ДокументОбъект платформой...
15. SanchoD 295 21.06.22 09:27 Сейчас в теме
(13) Да, так и есть. Вся хрень происходит после команды Записать() из Базы-источника. И дальше происходит вся движуха по событию ПриЗаписи() в Базе-приемнике. И вот отладка именно в базе-приемнике помогла бы выйти на конкретный модуль/процедуру/функцию где что-то пошло не так. Собственно о чем и прошу помочь - указать как это можно сделать, если конечно можно.
14. winapi 60 21.06.22 00:13 Сейчас в теме
(1) покажите код, где создаете и записываете документ. Скорей всего вы подключаетесь через V83.Application, а не через COMConnector. В этом и проблема.
16. SanchoD 295 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 295 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 295 20.06.22 18:26 Сейчас в теме
(3) Да, так и делаю. Записываю в Попытке и в Исключении получаю текст ошибки:

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

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

Как минимум нужно убедиться, что подписка на событие расположена в общем модуле, для которого проставлен флаг ВнешнееСоединение.
ValeroBo; unknown181538; +2 Ответить
18. SanchoD 295 22.06.22 11:04 Сейчас в теме
(17) Доступ к конфигуратору базы-приемника есть. Включаю там отладку с автоматическим подключение внешних соединений. Но включенный замер не перехватывает исполнение кода внешним соединением, хотя оно (внешнее соединение) есть в списке подключенных.
Перелопатил общие модули, которые вызывались из подписки на событие ПриЗаписи. Были несколько без флажка "Внешнее соединение", но их установка не решила проблему. Я так понимаю, что там еще куча процедур/функций вызывается из других модулей. Всем флажок не поставишь. Хотелось бы выйти на конкретный парасик. Но видно нет такого инструмента.
8. ishelper 20.06.22 18:58 Сейчас в теме
+(6) На всякий случай: надеюсь, базовое ограничение передачи данных через COM у вас выполняется?
через ком передача возможна примитивных типов: число, дата, строка, булево.
все остальное формируется на другой стороне.
если передавать объект, форму и т.п. - выползет как раз вот такая ошибка.
11. SanchoD 295 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) Спасибо тебе, добрый человек! Полдня голову ломал.
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день