Здравствуйте!

Есть База № 1, из которой, с помощью COM-соединени выгружаю документ в Базу № 2.
При этом, в базе № 2 есть штатная подписка на событие ПередЗаписью этого документа. Из-за этого документ не выгружается, вываливается ошибка "Ошибка при выполнении обработчика - 'ПередЗаписью' Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода".

Я понимаю проблему: Когда документ в Базе № 2 записывается, то он выглядит не как "ДокументОбъект", а как "COMДокументОбъект", и подписке на события это не нравится, ей нужен документ в привычном виде. Но вот как это решить? Убирать саму подписку на событие не хочется. Отказываться от COM-обмена тоже не надо. Может есть ещё варианты:)?
---
так может в этом и проблема, что в контексте внешнего соединения он скомпилироваться не может? или там все четко разрулено инструкциями препроцессора и никакая процедура типа Предупреждение() или типа того не потребует компиляции во внешнем соединении?

попробуйте процедуру этой подписки перенести в отдельный общий модуль с галкой Сервер и Внешнее соединение
---
- ошибка именно на строке вызова метода записи? - может вы передаете в МойКомДокументОбъект.Записать(ПараметрЗаписи) ПараметрЗаписи - созданный на стороне базы, из которой вы соединяетесь, а не в которой должны записать документ. ПараметрЗаписи - тоже должен быть ком объектом, созданным на стороне базы, к которой подключились
- может быть проблема в самом модуле документа? он у вас вообще на стороне сервера компилируется?
---
Да, при Записи. У меня в Базе № 1 просто стандартная строка типа "COMДокумент.Записать();", без параметров. Всё делается на сервере.

Когда вываливается та ошибка "передача мутабельного бла-бла-бла", там ещё и выходит строка "ОбновитьСвязьПредметыФинансированиеПередЗаписью ().".

ОбновитьСвязьПредметыФинансирование - это и есть Подписка на событие "ПередЗаписью" этого документа
---
проверь модули на галки клиент и сервер.
Затем контекст какой? Обе базы на УФ?
---
Проверил, выше писал, что там стоит. Обе базы на УФ.
Контекст так сделан разработчиками ГМЗ. В этом общем модуле, который привязан к данной подписке на события, есть и клиентские процедуры и серверные.
---
так может в этом и проблема, что в контексте внешнего соединения он скомпилироваться не может? или там все четко разрулено инструкциями препроцессора и никакая процедура типа Предупреждение() или типа того не потребует компиляции во внешнем соединении?

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

Чтобы создать документ в Базе № 2, пишем же "COMСоединение.Документы.НазваниеДокумента.СоздатьДокумент();".
И он сам становится как "COMДокументОбъект". А с "ДокументОбъект" вроде же нельзя работать?
---
Документы.НазваниеДокумента.СоздатьДокумент() - создаете документ в базе № 2.
 Затем заполняете его реквизиты данными полученными из базы №1.
Записываете...
---
Опять недопонимаю:)

Вот сижу я в конфигураторе Базы № 1. Если я просто напишу "Документы.НазваниеДокумента.СоздатьДокумент()" то это будет создан документ в Базе № 1, а не в Базе 2. Да и в базе № 1, у меня вообще нет такого документа - ошибку выдаст.

А вот чтобы он создался в Базе № 2, я подключаюсь к Базе № 2 из Базы № 1. Т.е. в Базе № 1 пишу "Соединение = Новый COMОбъект("V83.COMConnector");". Дальше стандартно указываю путь к Базе № 2, логин и пароль, под которым подключаюсь к ней и т.д.

Затем "НовыйCOMДок = Соединение.Документы.Закупка.СоздатьДокумент();"
---
выгружаю документ в Базу № 2 - увидел "выгружаю"... привык, что обычно подключаемся из той базы (№2) в которой надо создавать документ, к той из которой только забрать данные...
---
В Базе №2 документ штатным образом пробовали записывать? То есть открыть форму, создать документ, записать его.
В толстом клиенте у подписок на события могут быть глюки, которые выглядят как раз так, как вы описали
---
Да, вручную там всё хорошо, документ создаётся и проводится в итоге.
---
попробуйте поставить у модуля обработчика подписки на событие флажок "Внешнее соединение".
---
Да вот не хотелось пока менять функционал типовой конфигурации:). Но попробую ,если других вариантов не останется.
---
Ясно одно, что COMДокументОбъект тут ни при чем. Для всех документов в стандартных конфигурациях вызывается множество подписок на события, хотя бы ПередЗаписьюДокументаДатаЗапретаРедактирования. И если бы был глюк с обработкой их при вызове через COM, то он бы был повсеместным.
Но я заметил, что у всех модулей, обрабатывающих эти подписки в УПП, стоит флажок ВнешнееСоединение (по крайней мере, исключений я не нашел). Поэтому, скорее всего, дело в этом. И разработчики вашей конфигурации просто забыли воткнуть этот флажок в свой модуль, обрабатывающий это событие
---
Да. Вообще я выгружаю в конфу "Государственные и муниципальные закупки". Типовая 1С-совская, но малораспространённая:).
Там в модуле подписки стоит Сервер, Клиент, Вызов сервера. А Внешнее соединение не стоит.
---
Поставил Внешнее соединение. Не работает. Ошибка стала вываливаться чуть по другому:

"При подписке ОбновитьСвязьПредметыФинансирование на событие ПередЗаписью произошла ошибка. Метод обработчика события ОбновитьСвязьПредметыФинансированиеПередЗаписью не найден."

При этом вручную созданный документ без проблем записывается и проводится (с попаданием в код этой подписки).
---
ТотДокументВCOM.ОбменДанными.Загрузка = Истина; не предлагать?
---
Нет:).

У меня так и написано:
"Попытка
 ТотДокументВCOM.ОбменДанными.Загрузка = Истина;
 ТотДокументВCOM.Записать();
Исключение
 ВызватьИсключение "Ошибка при записи объекта ГМЗ по причине: " + ОписаниеОшибки();
КонецПопытки;"
---
А режим запуска "Обычное прилоджение" у пользователя под которым запускаете не решает проблему?
---
Спасибо, помогла галочка внешенне соединение в свойствах модуля!