В общем, вывод такой - объект, который сериализуем, а точнее, IDispatch для него должен существовать на момент использования его сериализованного представления.
Удалять этот объект нужно уже после использования его сериализованного представления
Поэтому придется пойти другим путем - я добавил в 1С++ спец.класс "Сериализация" с единственным методом "Сериализовать", в деструкторе этого класса и будет удаляться существующий IDispatch
И клиентский код выглядит очень просто, без всяких доп. фишек
Например, приведенный выше пример от Степана будет выглядеть так:
Процедура Тест_ПередачаВСкриптСПомощьюСериализовать() Экспорт
//Система = СоздатьОбъект("Система");
//Т = СоздатьОбъект("ТаблицаЗначений");
//лТекст = Система.Сериализовать(Т);
//Сообщить("<"+лТекст+">");
Scr=СоздатьОбъект("MSScriptControl.ScriptControl");
scr.Language="vbscript";
Т = СоздатьОбъект("ТаблицаЗначений");
Т.НоваяКолонка("t1");
Т.НоваяСтрока();
лНужноеЗначение = 111;
Т.t1 = лНужноеЗначение;
Сериализация = СоздатьОбъект("Сериализация");
Scr.AddCode("
|Function TestVT
| Set v=GetObject("""+Сериализация.Сериализовать(Т)+""")
| v.SelectLines()
| v.GetLine()
| TestVT=v.t1
|End Function");
Если Scr.Eval("TestVT()") <> лНужноеЗначение Тогда
Предупреждение("Неуспех");
Иначе
Предупреждение("Успех");
КонецЕсли;
КонецПроцедуры
Что и требовалось
PS повторный вызов Сериализовать() удалит предыщий IDispatch, т.е. лика также не будет.
Нормальное решение, что скажете?