Разберем ситуацию, с которой сталкиваются многие разработчики при попытке использования внешних инструментов, таких как консоли СКД или запросов, в среде 64-битного сервера или клиента 1С:Предприятие. Основная проблема заключается в том, что компонент MSScriptControl.ScriptControl является устаревшим 32-битным ActiveX-объектом.
Когда вы запускаете 1С в 64-битном режиме, она не может напрямую загрузить 32-битную динамическую библиотеку в свое адресное пространство. Именно поэтому при попытке создания объекта через New COMObject("MSScriptControl.ScriptControl") система выдает ошибку о невозможности подключения или ошибку регистрации класса.
Самый простой и надежный способ вернуть функциональность инструментов, которые полагаются на ScriptControl — это запуск 1С:Предприятия под 32-битной платформой. Рассмотрим этот подход подробнее:
1cv8.exe из папки bin (для 32-битной версии), а не из папки bin64.New COMObject("MSScriptControl.ScriptControl") будет выполняться без ошибок.Этот метод часто является единственным рабочим для старых конфигураций или внешних обработок, написанных с использованием устаревших библиотек.
Если смена платформы на 32-битную невозможна по корпоративным стандартам или техническим требованиям, необходимо рассмотреть отказ от использования MSScriptControl. Современные инструменты разработки для 1С (например, актуальные версии Инструментов Разработчика) уже давно переписаны с учетом ограничений 64-битной среды.
Проанализируем, почему стоит выбрать этот путь:
ScriptControl — это компонент, имеющий множество уязвимостей, его использование в современных системах не рекомендуется Microsoft.Вычислить() или механизмы ОбщегоНазначенияКлиентСервер, которые работают в любой архитектуре платформы.Если вам все же необходимо выполнять скрипты, не прибегая к ScriptControl, рассмотрим альтернативные варианты, которые позволяют избежать ограничений архитектуры:
Использование WScript.Shell
Вместо выполнения кода внутри процесса 1С, вы можете делегировать выполнение внешнему интерпретатору, например, через WScript.Shell. Рассмотрим пример вызова внешнего VBScript:
// Пример запуска скрипта через внешний процесс
Попытка
Shell = Новый COMОбъект("WScript.Shell");
Shell.Run("cscript.exe ""C:\Scripts\MyScript.vbs""", 0, Истина);
Исключение
Сообщить("Ошибка запуска скрипта: " + ОписаниеОшибки());
КонецПопытки;
Важно понимать, что в данном случае вы лишаетесь возможности прямого обмена объектами между 1С и скриптом в памяти процесса. Данные придется передавать через временные файлы или переменные окружения.
Разберем основные выводы, к которым мы пришли:
MSScriptControl, единственным стабильным решением остается использование 32-битной платформы 1С.В завершение, если вы столкнулись с ошибкой «замер производительности отключен» в консоли, помните, что это следствие неработоспособности ScriptControl. Как только вы обеспечите корректную среду (32-бит) или обновите инструмент, замер производительности и доступ к СКД заработают автоматически.