1с msscriptcontrol scriptcontrol класс не зарегистрирован
Необходимо было получить текущее время на сервере с точностью до миллисекунд. К сожалению платформа 1С вообще не знает что такое миллисекунды, у неё там свои моменты времени. Подходящего COM-объекта я не обнаружил, но на сайте MSDN нашел интересную технологию MS Script Control. Данная технология позволяет исполнять код в своем приложении на языке Visual Basic или JavaScript, то есть в 1С у нас развязываются руки и мы получаем инструмент для работы с системной информацией операционной системы WINDOWS: получить информацию о железе компьютера, записать параметр в реестр и т.д.
Что бы воспользоваться технологией MS Script Control, необходимо создать COM-объект с именем класса MSScriptControl.ScriptControl.1. На рисунке приведен ProgID (он же имя класса) в редакторе реестра:
Свойства объекта
- AllowUI - булево, при установке Истина будут выводиться элементы пользовательского интерфейса, например MsgBox;
- CodeObject - коллекция, возвращает набор объектов, созданных с помощью метода AddObject;
- Error - объект Error, содержит информацию об ошибке в скрипте, по-умолчанию объект пустой;
- Language - строка, содержит язык скрипта, на котором будет исполняться код: VBScript или JScript;
- Modules - коллекция, содержит набор модулей;
- Procedures - коллекция, содержит набор процедур;
- SitehWnd - ссылка, дескриптор окна программы, которое будет использоваться для отображения графического интерфейса пользователя;
- State - число, описывает, как будут обрабатываться события объектов, добавленные с помощью метода AddObject, по-умолчанию 0;
- Timeout - число, максимальное время исполнения скрипта в миллисекундах, по истечению которого будет сгенерирована ошибка, по-умолчанию 10000;
- UseSafeSubset - булево, при установке Истина скрипт выполняется в безопасном режиме, по-умолчанию Ложь. Используйте это свойство, если скрипт может нанести вред вашему компьютеру.
Методы объекта
- AddCode - добавляет код, процедуру или функцию в объект ScriptControl;
- AddObject - добавляет объект, который доступен в скрипте. Вряд ли в 1С этот метод будет активно использоваться;
- Eval - выполняет программный код и возвращает результат выполнения. Можно выполнять произвольный код, а так же функции, добавленные с помощью метода AddCode;
- ExecuteStatement - выполняет одну инструкцию (процедуру или фнкцию), урезанная версия метода Run, так как нельзя передавать аргументы;
- Reset - реинициализирует обработчик сценариев ScripControl (сбрасывает все значения), как будто вы его только что создали;
- Run - выполняет указанную процедуру или функцию, добавленную с помощью метода AddCode и возвращает результат выполнения;
Пример использования
В принципе, выше перечисленной информации хватит, что бы реализовать универсальную функцию выполнения скриптов на языках VBScript и JScript. Параметры нашей функции будут такими:
- ЯзыкСкрипта - строка, язык, на котором будет исполняться код;
- КодФункции - строка, функция, написанная на скриптовом языке;
- ИмяФункции - строка, имя функции, которую передаем через параметр КодФункции;
- Параметры - массив, значения параметров функции.
// Функция выполняет скрипт на языке VBScript или JScript.
//
// Параметры
// ЯзыкСкрипта - Строка - "VBScript" или "JScript";
// КодФункции - Строка - код функции на языке скрипта;
// ИмяФункции - Строка - имя выполняемой функции;
// ПараметрыФункции - массив - параметры выполняемой функции;
//
// Возвращаемое значение
// Произвольный - результат выполнения функции.
//
Функция ВыполнитьСкрипт(ЯзыкСкрипта, КодФункции, ИмяФункции, ПараметрыФункции = Неопределено)
Script = Новый COMОбъект("MSScriptControl.ScriptControl.1");
Script.Language = ЯзыкСкрипта;
СтрокаПараметров = "";
Если ПараметрыФункции <> Неопределено Тогда
Для Индекс = 0 По ПараметрыФункции.Количество() - 1 Цикл
СтрокаПараметров = СтрокаПараметров + ",ПараметрыФункции[" + Строка(Индекс) + "]";
КонецЦикла;
КонецЕсли;
СтрокаВызова = "ВозвращаемоеЗначение = Script.Run(""" + ИмяФункции + """" + СтрокаПараметров + ")";
ВозвращаемоеЗначение = Неопределено;
Попытка
Script.AddCode(КодФункции);
Выполнить(СтрокаВызова);
Исключение
ГдеОшибка = "";
КакаяОшибка = Script.Error.Source + ": " + Script.Error.Description;
Если Не ПустаяСтрока(Script.Error.Text) Тогда
КакаяОшибка = КакаяОшибка + " (" + Script.Error.Text + ")";
КонецЕсли;
ВызватьИсключение ГдеОшибка + " " + КакаяОшибка;
КонецПопытки;
Возврат ВозвращаемоеЗначение;
Код функции простой, используется два метода объекта ScriptControl - это AddCode и Run, а так же указывается язык скрипта. Пример вызова функции, которая прибавляет один день к текущей дате:
КодФункции =
"Function Tomorrow(CurDate)
|
| Tomorrow = DateAdd(""d"", 1, CurDate)
|
|End Function";
мПараметры = Новый Массив;
мПараметры.Добавить(ТекущаяДата());
РезультатВыплнения = ВыполнитьСкрипт("vbscript", КодФункции, "Tomorrow", мПараметры);
Есть код
скрипт = Новый COMОбъект("MSScriptControl.ScriptControl")
Работает на клиенте. Необходимо заставить работать на сервере 1С. Сейчас не работает, ругается
Ошибка при вызове конструктора (COMОбъект)
Сервер x64. Служба запущена от администратора. Подскажите, пожалуйста, как можно победить проблему.
(2) cool.vlad4, в том то и дело, что не нашёл я какую XXX.dll туда приделать)
есть только ocx компонента. а её туда нельзя вставить.
(9) andrewks, обернул компоненту MSScriptControl.ScriptControl.1 в COM, всё равно не работает. делал через импорт ужемустановленных компонент. может как-то по другому делать надо? на данный момент выкрутился запуском внешних обработок с помощью виндового планировщика.
(10) vithak
1. Сделать импорт из уже установленных компонент (интерфейсы не появляются и не работает).
2. Добавить из C:\Windows\SysWOW64\msscript.ocx (типа создать новую) - это добавит интерфейсы.
Если сразу начать со второго пункта, то ничего не добавляется. Делал в 2008 R2, 2012.
rule_2; nikolega; maksa2005; RickyTickyTok; viktor_and_ko; user1311287; bulpi; wowik; stupidgamer; e-9; Nuuq; aupovy; 1Cynep4eJIoBek; bvs_dd; user829615; SP2000; alexx2510; Snek; A7758735; ZOMI; + 20 – Ответить
На всякий случай продублирую здесь :
ОС: Windows Server 2012R2. Сервер 1С x64.Клиент 1С v8.3.5.1186
God_loki; eddoptimist; inclodes; viktor_and_ko; XAKEP; rbsoft; Светлый ум; user1213957; GriAI; TreeDogNight; air_mike; gubanoff; uno-c; ra9000; landrev; frkbvfnjh; rar_xxx; BoryaMbi; Misanets; bintape; e-9; AsKorysti; Jungle Murzik; гвость; CnupT; schslava; ArtSog; vladoe; avaskvas; aupovy; 1Cynep4eJIoBek; bvs_dd; Redhatych; ZyZer; x_proof; izidakg; antonov_i; FilatovRA; ice-net; zaxarovsky; pbabincev; TorLink; Zircool; Famza; andrvyst; solf; HIVvich; LostMicos; EvgeniusRusius; Navigator_KZ; user829615; + 51 – Ответить
- ссылка ведет в никуда. И где это найти непонятно что найти?
(15) Спасибо пошло!. Но все же вопрос: tsc64.dll - как правильнее устанавливать? Скачал архив, распаковал, запустил setup.exe - тишина. команда "regsvr32 tsc64.dll" помогла - под моим пользователем пошло. Но пойдет ли под другими? Куда tsc64.dll положить? Зачем setup.exe?
Особенности возникшей дисфункции
Разбираемая мной ошибка 2147221164 0x80040154 в 1C обычно связана с соединением баз данных по COM-объекту, и может иметь несколько причин:
Разберёмся со способами решения возникшей проблемы. Их два.
Способ №1. Регистрируем необходимые библиотеки
Если на ПК 32-битная ОС, то будет необходимо запустить командную строку с админ. правами, и там набрать:
C:\Windows\System32\regsvr32 «C:\Program Files (x86)\1cv8\XXXXX\bin\comcntr.dll»
Если на ПК 64-битная ОС, то данная строка должна выглядеть так:
C:\Windows\SysWOW64\regsvr32 «C:\Program Files (x86)\1cv8\ХХХХХ\bin\comcntr.dll»
Где ХХХХХ – номер вашей версии 1С
Способ №2. Создаём компоненты для исправления ошибки 2147221164 0x80040154
- Запустите консоль «Службы компонентов» (перейдите в «Панель управления», затем в «Администрирование», и здесь кликните на «Службы компонентов»);
- Здесь выберите «Мой компьютер» («Службы компонентов», затем «Компьютеры», и «Мой компьютер»). Наведите курсор на «Приложения COM+», нажмите на правую клавишу мыши, выберите «Создать» — «Приложение»;
- В открывшемся окне «Установка или создание нужного приложения» кликните на «Создать новое приложение».
- Введите имя для него (например, «ComConnector8»), а способом активации установите «Серверное приложение»;
- Учётной записью для активации приложения поставьте «Указанный пользователь». Нажмите на «Обзор», найдите учётную запись, из-под которой запускается наш сервер 1С (версия 8.3). К примеру, это может быть «USER1CV8». Пропустите следующие два пункта (дважды жмём на «Далее», а потом на «Готово)
- В ветке созданного приложения кликните на узел «Роли», а в нём – на «CreatorOwner». Наведите курсор на пункт «Пользователи», кликните на правую кнопку мышки, выберите «Создать», и «Пользователь». Затем выберите учётку, из-под которой стартует сервер 1С (к примеру, тот же «USER1CV8»);
- В ветке созданного нами приложения (в нашем случае это «ComConnector8») перейдите на узел «Компоненты». Наведите на него курсор, нажмите правую клавишу мыши, выберите «Создать», и «Компонент»;
- Затем выберите опцию «Установка новых компонентов», и в открывшемся окне найдите и кликните на нужный нам dll-файл (в нашем варианте это находящийся по пути C:\Program Files (x86)\1cv81\XXXXX\bin\comcntr.dll). Заверите создание указанного компонента;
- Откройте свойства созданного компонента, выберите вкладку «Безопасность», найдите там список «Явно установленные для выделения объектов роли», и поставьте флажок напротив «CreatorOwner».
Заключение
Ошибка при вызове конструктора (COMОбъект): -2147467225(0x80004027): Этот компонент или приложение содержит отключенные компоненты. После установки x64 версии 1С: Предприятия 8
Описание ошибки:
После установки сервера 1С: Предприятия x64-версии. Ошибка при вызове конструктора (COMОбъект): -2147467225(0x80004027): Этот компонент или приложение содержит отключенные компоненты. Для конструктора Новый COMОбъект("MSScriptControl.ScriptControl") в коде механизма версионирования конфигурации 1С: Управление торговлей, ред. 10.3, релиз 10.3.55.1. Релиз платформы 1С: Предприятия - 8.3.13.1809. Версия сервера Windows - Windows Server 2008 R2 Datacenter.
Немного к слову - был удивлен такого рода ошибкой в добавленном в УТ механизме версионирования, который был максимально выдернут из комплексной ред. 1.1 и помещен в Управление торговлей 10.3: при аналогичном переводе конфигурации 1С: Комплексная на сервер x64 на другом сервере (Windows Server 2008 R2 Standart) после перехода ошибка не возникала.
Нажатие на изображении увеличит его
: Ошибка при вызове конструктора (COMОбъект): -2147221164(0x80040154): Этот компонент или приложение содержит отключенные компоненты.
Описание решения проблемы состояло в создании Приложения COM+ с определенным набором параметров, связанных с MSScriptControl.ScriptControl. Последовательность действий следующая:
1. Запускаем "Службу компонентов" через командную строку %windir%\system32\comexp.msc или через "Панель управления" - "Администрирование" - "Службы компонентов".
2. В ветке "Корень консоли" - "Службы компонентов" - "Компьютеры" - "Мой компьютер" - "Приложения COM+" добавляем новое приложение, выбрав пункт контекстного меню "Создать" - "Приложение".
3. Откроется "Мастер установки приложений COM+". На шаге "Установка или создание нового приложения" выбирается вариант "Создать новое приложение".
Нажатие на изображении увеличит его
4. Шаг "Создание нового приложения". Ввести имя нового приложения. Для удобства понимания можно указать "1C_ScriptControl". Так же выбрать значение "Способа активации" - "серверное приложение".
5. На шаге ""Удостоверение приложения" выбрать учетную запись для запуска приложения - значение "Локальная служба - встроенная учетная запись службы".
6. На шаге "Добавление ролей приложения" оставить по умолчанию.
7. На следующем шаге "Добавление пользователей для ролей" через кнопку "Добавить" для ветки "Users" (пользователи) "Все", выполнив поиск среди пользователей и групп.
8. На следующем шаге на строке "Компоненты" в ветке созданного приложения " 1C_ScriptControl " через контекстное меню "Создать" - "Компонент".
Нажатие на изображении увеличит его
Важное замечание, если база серверная, то и пользователь, под которым будет выполняться компонента, должен быть таким же, что и тот, под который работает служба "Агент сервера 1С: Предприятие" в службах. Например, если служба агента сервера запущена под локальной системой (локальной системной учетной записью), то и компонент должен быть настроен под учетную запись локальной службы. Или если агент сервера работает под пользователем по умолчанию USR1CV8, то и компонента должна работать под "указанным пользователем".
Нажатие на изображении увеличит его
Нажатие на изображении увеличит его
Тогда в в ветке "Роли" созданного приложения " 1C_ScriptControl " нужно корректно настроить пользователей. В данном примере будет добавление прав для группы пользователей. Для этого вызываем контекстное меню и в подменю "Создать" выбираем "Пользователь".
Используя форму "Выбор: пользователи или группы", нажимая на кнопку "Дополнительно. ", выполняя "Поиск", находим группу "Все".
И последовательно нажимая кнопки "ОК" в формах в результате увидим, что группа "Все" будет добавлена в "Пользователи". После этого отказа в доступе не должно быть. Так же можете настроить и по каждому пользователю в отдельности. Но, кажется, для стабильной работы приложения - это лишнее, и группы пользователей достаточно.
"Есть люди, которым труднее других. И на них обязанность быть лучше. Другим сходит с рук, а им нет… Это вроде бы каждый обязан. Но если человек решился жить по мечте, то он обязан вдвойне. Потому что большинство по мечте жить трусит… Или благоразумие мешает. А те, кто живет по мечте, — они вроде примера. Или укора". Олег Куваев.
вторник, 24 июня 2014 г.
1с 8.3 com соединение class not registered
Одна из проблем, возникающих после установки 64-битного сервера 1С, заключается в том, что 64-битные приложения не могут запускать 32-битные DLL , которые, например, инициализируются системой при создании COM -объекта. Таким образом, код вида
на стороне сервера выполнен не будет. Точнее, его выполнение приведет к ошибке: « Class not registered »
Решить данную проблему можно с помощью создания 64-битного приложения COM +. Данное приложение способно взаимодействовать с 32-приложениями.
- Запустим консоль "Службы компонентов" (например:
- Найдем ветку «Приложения COM+» и добавим новое приложение:
- На вопрос "Установка или создание нового приложения" – необходимо ответить:"Создать новое приложение".
- Зададим имя нового приложения: V8ComConnector App ; способ активаци: "серверное приложение".
- Учетная запись для запуска приложения: здесь нам надо выбрать учетную запись под которой работает сервер 1С.
- В ветке созданного приложения находим и выделяем ветку "Роли", выбираем роль "CreatorOwner", а затем в разделе "Пользователи" создаем пользователя - учетную запись, под которой работает сервер 1С.
- В ветке созданного приложения переходим на ветку "Компоненты" и создаем компонент:
- Заходим в свойства установленного компонента и на вкладке "Безопасность", списке "Явно установленные для выделенных объектов роли" включаем флажок напротив роли CreatorOwner.
Важно: Мы создали приложение с именем "V8ComConnector App ", а это значит что в коде мы должны создавать COM -объект с аналогичным ProgID . То есть
Это не очень удобно в том случае, если мы предполагаем, что наш код будет исполняться и на сервере, и на клиенте, где может быть установлена 32-битная версия «1С: Предприятие». В этом случае придется использовать подобный код
Комментариев нет:
Поиск по этому блогу
Ярлыки
Архив блога
- апреля 2022 (1)
- марта 2022 (5)
- января 2022 (1)
- декабря 2021 (3)
- октября 2021 (3)
- сентября 2021 (1)
- августа 2021 (6)
- июля 2021 (1)
- июня 2021 (1)
- апреля 2021 (6)
- марта 2021 (14)
- февраля 2021 (3)
- января 2021 (8)
- декабря 2020 (2)
- ноября 2020 (6)
- октября 2020 (2)
- августа 2020 (4)
- июля 2020 (1)
- июня 2020 (3)
- апреля 2020 (1)
- февраля 2020 (6)
- января 2020 (5)
- декабря 2019 (1)
- ноября 2019 (1)
- октября 2019 (3)
- августа 2019 (4)
- июля 2019 (2)
- июня 2019 (1)
- мая 2019 (3)
- апреля 2019 (3)
- марта 2019 (3)
- февраля 2019 (8)
- января 2019 (5)
- декабря 2018 (7)
- ноября 2018 (2)
- октября 2018 (1)
- сентября 2018 (2)
- июля 2018 (1)
- июня 2018 (1)
- мая 2018 (1)
- апреля 2018 (1)
- февраля 2018 (2)
- января 2018 (5)
- декабря 2017 (13)
- ноября 2017 (1)
- октября 2017 (2)
- сентября 2017 (1)
- июля 2017 (2)
- июня 2017 (1)
- мая 2017 (4)
- апреля 2017 (2)
- февраля 2017 (3)
- января 2017 (2)
- декабря 2016 (3)
- ноября 2016 (9)
- октября 2016 (3)
- сентября 2016 (2)
- августа 2016 (7)
- июля 2016 (15)
- июня 2016 (8)
- мая 2016 (9)
- апреля 2016 (3)
- марта 2016 (14)
- февраля 2016 (12)
- января 2016 (11)
- декабря 2015 (6)
- ноября 2015 (14)
- октября 2015 (7)
- сентября 2015 (2)
- августа 2015 (4)
- июля 2015 (8)
- июня 2015 (3)
- мая 2015 (1)
- апреля 2015 (4)
- февраля 2015 (5)
- января 2015 (8)
- декабря 2014 (12)
- ноября 2014 (5)
- октября 2014 (18)
- сентября 2014 (10)
- августа 2014 (10)
- июля 2014 (6)
- июня 2014 (6)
- мая 2014 (14)
- апреля 2014 (5)
- февраля 2014 (4)
- января 2014 (2)
- декабря 2013 (11)
- ноября 2013 (13)
- октября 2013 (7)
- сентября 2013 (5)
- августа 2013 (17)
- июля 2013 (8)
- июня 2013 (9)
- мая 2013 (10)
- апреля 2013 (5)
- марта 2013 (12)
- февраля 2013 (10)
- января 2013 (30)
- декабря 2012 (8)
- ноября 2012 (13)
- октября 2012 (43)
- сентября 2012 (5)
- августа 2012 (10)
- июля 2012 (28)
- июня 2012 (42)
- мая 2012 (29)
- апреля 2012 (40)
- марта 2012 (31)
- февраля 2012 (22)
- января 2012 (25)
- декабря 2011 (26)
- ноября 2011 (13)
- октября 2011 (6)
- сентября 2011 (8)
- августа 2011 (12)
- июля 2011 (1)
- июня 2011 (7)
- мая 2011 (12)
- апреля 2011 (13)
- марта 2011 (8)
- февраля 2011 (10)
- января 2011 (10)
- декабря 2010 (5)
- ноября 2010 (3)
- октября 2010 (8)
- сентября 2010 (3)
- августа 2010 (2)
- июля 2010 (5)
- июня 2010 (5)
- мая 2010 (6)
- апреля 2010 (3)
- марта 2010 (6)
- февраля 2010 (1)
- января 2010 (5)
- декабря 2009 (2)
- ноября 2009 (4)
- октября 2009 (3)
- сентября 2009 (2)
- июля 2009 (2)
- июня 2009 (1)
- мая 2009 (1)
- марта 2009 (1)
- ноября 2008 (2)
- октября 2008 (3)
- сентября 2008 (2)
- августа 2008 (2)
- июля 2008 (1)
- марта 2008 (2)
- января 2008 (1)
- декабря 2007 (2)
- сентября 2007 (2)
- августа 2007 (1)
- июля 2007 (2)
- июня 2007 (2)
- сентября 2006 (2)
- августа 2006 (2)
- июля 2006 (2)
- января 2006 (3)
Сообщить о нарушении
Авторы
Российские альтернативы зарубежным сервисам
Вместо Zoom и Google Meet Webinar Meetings — российская платформа для проведения онлайн-встреч разного формата. Позволяет подключать до 1.
Читайте также: