Microsoft script control

227 пользователя считают данную страницу полезной. Информация актуальна! Страница была обновлена 16.12.2019

При установке популярной программы бухгалтерского учёта «1С» (версии 8.3) или обновления программы с версии 8.2 на 8.3, а также запуска какой-либо соответствующей процедуры, юзер может получить сообщение «Ошибка 2147221164 0x80040154 класс не зарегистрирован», вызванное отсутствием регистрации класса. Данная ошибка может быть вызвана несоответствием версий 1С на сервере и клиентском ПК, а также отсутствием регистрации необходимого класса COMConnector (dll-библиотека comcntr.dll) в ОС Виндовс. В данном материале я расскажу о сути указанной дисфункции, а также поясню, как от неё избавиться.

Стандартное сообщение о возникшей дисфункции

Особенности возникшей дисфункции

Разбираемая мной ошибка 2147221164 0x80040154 в 1C обычно связана с соединением баз данных по COM-объекту, и может иметь несколько причин:

  • Несовпадение конфигурации 1С на сервере и локальном ПК (к примеру, на сервере используется версия 8.3, а на локальном ПК – версия 8.1);
  • Невозможность прямого обращения 64-битной 1С к 32-битному файлу comcntr.dll;
  • В ОС Виндовс не зарегистрирован вышеупомянутый файл comcntr.dll.

Разбираем устранение проблемы в 1C

Разберёмся со способами решения возникшей проблемы. Их два.

Способ №1. Регистрируем необходимые библиотеки

Если на ПК 32-битная ОС, то будет необходимо запустить командную строку с админ. правами, и там набрать:

C:WindowsSystem32
egsvr32 «C:Program Files (x86)1cv8XXXXXincomcntr.dll»

Вместо XXXXX будет нужно ввести номер вашей версии 1С, к примеру, это может быть 8.3.10.2252 или иная (пройдите по указанному пути, и просмотрите номер установленной у вас версии). После этого регистрация упомянутого dll будет завершена, и «Ошибка 2147221164 0x80040154 класс не зарегистрирован» должна исчезнуть.

Уведомление об успешной регистрации dll

Если на ПК 64-битная ОС, то данная строка должна выглядеть так:

C:WindowsSysWOW64
egsvr32 «C:Program Files (x86)1cv8ХХХХХincomcntr.dll»

Где ХХХХХ – номер вашей версии 1С

Способ №2. Создаём компоненты для исправления ошибки 2147221164 0x80040154

  1. Запустите консоль «Службы компонентов» (перейдите в «Панель управления», затем в «Администрирование», и здесь кликните на «Службы компонентов»);
  2. Здесь выберите «Мой компьютер» («Службы компонентов», затем «Компьютеры», и «Мой компьютер»). Наведите курсор на «Приложения COM+», нажмите на правую клавишу мыши, выберите «Создать» — «Приложение»;

Исправление проблем с незарегистрированными классами в 1С обычно решается с помощью двух способов, обозначенных мной выше. Наибольшую эффективность показал второй из перечисленных способов, потому рекомендую воспользоваться алгоритмом его реализации для исправления ошибки 2147221164 0x80040154 на вашем PC.

Одна из проблем, возникающих после установки 64-битного сервера 1С, заключается в том, что 64-битные приложения не могут запускать 32-битные DLL , которые, например, инициализируются системой при создании COM -объекта. Таким образом, код вида

на стороне сервера выполнен не будет. Точнее, его выполнение приведет к ошибке: » Class not registered «

Решить данную проблему можно с помощью создания 64-битного приложения COM +. Данное приложение способно взаимодействовать с 32-приложениями.

Итак

  1. Запустим консоль «Службы компонентов» (например:

Пуск – Администрирование – Службы компонентов

  1. Найдем ветку «Приложения COM+» и добавим новое приложение:
  1. На вопрос «Установка или создание нового приложения» – необходимо ответить:»Создать новое приложение».
  2. Зададим имя нового приложения: V8ComConnector App ; способ активаци: «серверное приложение».
  3. Учетная запись для запуска приложения: здесь нам надо выбрать учетную запись под которой работает сервер 1С.
  4. В ветке созданного приложения находим и выделяем ветку «Роли», выбираем роль «CreatorOwner», а затем в разделе «Пользователи» создаем пользователя – учетную запись, под которой работает сервер 1С.
  5. В ветке созданного приложения переходим на ветку «Компоненты» и создаем компонент:
  1. Выбираем «Установка новых компонентов», и находим нашу DLL-компоненту.
  2. Заходим в свойства установленного компонента и на вкладке «Безопасность», списке «Явно установленные для выделенных объектов роли» включаем флажок напротив роли CreatorOwner.

Важно: Мы создали приложение с именем «V8ComConnector App «, а это значит что в коде мы должны создавать COM -объект с аналогичным ProgID . То есть

Это не очень удобно в том случае, если мы предполагаем, что наш код будет исполняться и на сервере, и на клиенте, где может быть установлена 32-битная версия «1С: Предприятие». В этом случае придется использовать подобный код

Маленький IT блог с характером 1С.

пятница, 20 февраля 2015 г.

Добавление поддержки VBScript и JScript – расширяем возможности 1С

ProgID нужного COM-объекта

Свойства объекта

  1. AllowUI – булево, при установке Истина будут выводиться элементы пользовательского интерфейса, например MsgBox;
  2. CodeObject – коллекция, возвращает набор объектов, созданных с помощью метода AddObject;
  3. Error – объект Error, содержит информацию об ошибке в скрипте, по-умолчанию объект пустой;
  4. Language – строка, содержит язык скрипта, на котором будет исполняться код: VBScript или JScript;
  5. Modules – коллекция, содержит набор модулей;
  6. Procedures – коллекция, содержит набор процедур;
  7. SitehWnd – ссылка, дескриптор окна программы, которое будет использоваться для отображения графического интерфейса пользователя;
  8. State – число, описывает, как будут обрабатываться события объектов, добавленные с помощью метода AddObject, по-умолчанию 0;
  9. Timeout – число, максимальное время исполнения скрипта в миллисекундах, по истечению которого будет сгенерирована ошибка, по-умолчанию 10000;
  10. UseSafeSubset – булево, при установке Истина скрипт выполняется в безопасном режиме, по-умолчанию Ложь. Используйте это свойство, если скрипт может нанести вред вашему компьютеру.

Методы объекта

  1. AddCode – добавляет код, процедуру или функцию в объект ScriptControl;
  2. AddObject – добавляет объект, который доступен в скрипте. Вряд ли в 1С этот метод будет активно использоваться;
  3. Eval – выполняет программный код и возвращает результат выполнения. Можно выполнять произвольный код, а так же функции, добавленные с помощью метода AddCode;
  4. ExecuteStatement – выполняет одну инструкцию (процедуру или фнкцию), урезанная версия метода Run, так как нельзя передавать аргументы;
  5. Reset – реинициализирует обработчик сценариев ScripControl (сбрасывает все значения), как будто вы его только что создали;
  6. Run – выполняет указанную процедуру или функцию, добавленную с помощью метода AddCode и возвращает результат выполнения;

Пример использования

В принципе, выше перечисленной информации хватит, что бы реализовать универсальную функцию выполнения скриптов на языках VBScript и JScript. Параметры нашей функции будут такими:

  1. ЯзыкСкрипта – строка, язык, на котором будет исполняться код;
  2. КодФункции – строка, функция, написанная на скриптовом языке;
  3. ИмяФункции – строка, имя функции, которую передаем через параметр КодФункции;
  4. Параметры – массив, значения параметров функции.

Возвращать функция конечно же будет результат выполнения скрипта. Что ж, приступим к реализации:

Script = Новый COMОбъект(«MSScriptControl.ScriptControl.1»);
Script.Language = ЯзыкСкрипта;

Возврат ВозвращаемоеЗначение;

Код функции простой, используется два метода объекта ScriptControl – это AddCode и Run, а так же указывается язык скрипта. Пример вызова функции, которая прибавляет один день к текущей дате:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *