Приветствую, коллеги!

Делаю обработку по переносу данных из базы в базу по COM-у. Столкнулся с исключением при попытке записать документ в базе-получателе.
Ошибка маловразумительная, хотелось бы поточнее выйти на причину.
Запустил базу-получатель в режиме отладки с автоматическим подключением внешних соединений на сервере. Но отловить исполняемый код по COM-соединению не могу. Ни процедура ПередЗаписью(), ни ПриЗаписи() не перехватывается. Хотя среди подключенных предметов отладки появляется серверное подключение через COM.
Можно ли и как отловить и отладить код, выполняемый через COM-соединение?
---
ДокументОбъектПриЗаписи
это метод подписки на событие. Причем похоже общий для всех документов. Т.е. смотрите подписку не конкретного нужного документа, а подписку на событие ПриЗаписи для всех документов. Найдите эту процедуру и посмотрите свойства общего модуля (в котором она расположена). Указан флаг ВнешнееСоединение ?
---
почему не ведете отладку на стороне где создается COM-объект ?
---
веду. но там все идет хорошо, до строки ДокументCOM.Записать(). И срабатывает исключение.
Ошибка при этом такая:

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

Но я подключаюсь из серверной процедуры Базы-источника к Базе-приемнику. И соответственно ничего не передаю с клиента.
Что там (в Базе-приемнике) происходит - черный ящик.
---
Ошибка маловразумительная Такой же (маловразумительный) ответ устроит?
(4) Попытка передачи с клиента на сервер мутабельного значения Гуглить не пробовали? Бывает полезно, например:
https://infostart.ru/1c/articles/123256/
https://forum.infostart.ru/forum9/topic197506/
---
Смотрел. Не нашел ответа что мне надо исправить. Для этого и хотел пошагово пройтись по исполняемому в базе-получателе коду.
---
Да, в этих ссылка и есть ответ на ваши ошибки https://infostart.ru/1c/articles/123256/
---
предлагаю следующее: документ записывать но не проводить; затем зайти в базу приемник и
1. провести его (если ошибки нет) см 2
2. провести его программно из обработки в базе приемнике (если ошибки нет) см 3
3. проводить в режиме Док.ОбменДанными.Загрузка = Истина
что-нибудь из выше перечисленного может помочь ...
---
Это все еще до проведения заканчивается ошибкой, при записи.
---
Ну это, вероятнее всего, подписка на событие ПриЗаписи()
Но что там за пробелема с мутабельностью не понятно. Да и отладкой вы это не поймаете, т.к. там должен передаваться ДокументОбъект платформой...
---
Да, так и есть. Вся хрень происходит после команды Записать() из Базы-источника. И дальше происходит вся движуха по событию ПриЗаписи() в Базе-приемнике. И вот отладка именно в базе-приемнике помогла бы выйти на конкретный модуль/процедуру/функцию где что-то пошло не так. Собственно о чем и прошу помочь - указать как это можно сделать, если конечно можно.
---
покажите код, где создаете и записываете документ. Скорей всего вы подключаетесь через V83.Application, а не через COMConnector. В этом и проблема.
---
Вот так подключаюсь:

&НаСервере
Функция Подключение(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 спасибо. Возможно что так взлетит.
---
```1c
    Попытка
    ОбъектДокумент.Записать (БазаПолучатель.РежимЗаписиДокумента.Запись);
    Исключение
    Сообщить ("Не записан Документ : " + ОписаниеОшибки());
    КонецПопытки;
```
 ОписаниеОшибки() покажите
---
Не удалось записать документ ЗаказПоставщику № от 20.06.2022 15:57:51 .({амд_Реализация Документ.РеализацияТоваровУслуг.МодульОбъекта(1101)}: Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация (1C:Enterprise 8.3.20.1590): Ошибка при выполнении обработчика - 'ПриЗаписи'
Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ДокументОбъектПриЗаписи ().)
---
ДокументОбъектПриЗаписи
это метод подписки на событие. Причем похоже общий для всех документов. Т.е. смотрите подписку не конкретного нужного документа, а подписку на событие ПриЗаписи для всех документов. Найдите эту процедуру и посмотрите свойства общего модуля (в котором она расположена). Указан флаг ВнешнееСоединение ?
---
Можно смотреть в журнал регистрации, поставить в попытку "запись объекта" и в исключении делать запись в журнал регистрации с описанием ошибки. И лучше уже забыть про обмен через COM-соединение - это погибель в новых реалиях!
---
Да, так и делаю. Записываю в Попытке и в Исключении получаю текст ошибки:

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

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

Как минимум нужно убедиться, что подписка на событие расположена в общем модуле, для которого проставлен флаг ВнешнееСоединение.
---
Доступ к конфигуратору базы-приемника есть. Включаю там отладку с автоматическим подключение внешних соединений. Но включенный замер не перехватывает исполнение кода внешним соединением, хотя оно (внешнее соединение) есть в списке подключенных.
Перелопатил общие модули, которые вызывались из подписки на событие ПриЗаписи. Были несколько без флажка "Внешнее соединение", но их установка не решила проблему. Я так понимаю, что там еще куча процедур/функций вызывается из других модулей. Всем флажок не поставишь. Хотелось бы выйти на конкретный парасик. Но видно нет такого инструмента.
---
+(6) На всякий случай: надеюсь, базовое ограничение передачи данных через COM у вас выполняется?
через ком передача возможна примитивных типов: число, дата, строка, булево.
все остальное формируется на другой стороне.
если передавать объект, форму и т.п. - выползет как раз вот такая ошибка.
---
Да, конечно, передаю через КОМ только простые типы. Причем для исключения передачи чего-то недозволенного, сделал тестовое создание документа, передав через КОМ только дату. И абсолютно пустой документ не смог записаться, вывалив ту же самую ошибку.
---
Столкнулся с такой же проблемой, и в этой ветке уже есть решение (почему-то не отмеченное как решение): комментарии spacecraft от 22.06.2022 17:58, 18:53.

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

spacecraft, спасибо!
---
Спасибо тебе, добрый человек! Полдня голову ломал.
---
https://docs.rbsoft.ru/otladka-com-soedineniya-k-1s83