Содержание:
1. Почему может возникнуть ошибка при вызове конструктора (COM-объект 1С)?
2. С помощью чего можно исправить ошибку при вызове конструктора (COM-объект 1С)?
3. Параметры при вызове конструктора (COM-объект 1С), которые регистрируют компоненты строки кода перед регистрируемым dll-файлом
1. Почему может возникнуть ошибка при вызове конструктора (COM-объект 1С)?
Когда ты начинающий специалист 1С, то иногда приходится чувствовать себя шаманом с бубном, так как не знаешь причин ошибки и как её исправить тоже.
Сегодня мы разберем одну из ошибок, которые появляются при работе с базой, а именно ошибку при вызове конструктора (COM-объект 1С).
Ситуацию такую, мы можем наблюдать при загрузке с Excel при использовании (COM-объекта 1С), при обмене между базами. Ситуаций, когда возникает данное сообщение с возникшей проблемой довольно много при работе с программой.
Как правило, данная ошибка возникает из-за того, что при установке платформы1С не произошла автоматическая регистрация 64-х разрядной компоненты, которая отвечает за использование COM-соединения 1С 8.3. А почему это произошло, спросите? Все очень просто и в то же время сложно, если не знаешь, в чем все ядро проблемы. А причина в том, что те, у кого выдаются такие ошибки, используют 32(86) – разрядную операционную систему и ставят вместо платформы необходимой разрядности их системы, платформу 1С предназначенную для совсем другой системы.
2. С помощью чего можно исправить ошибку при вызове конструктора (COM-объект 1С)?
Исправить данную ошибку, довольно легко. Для этого необходимо всего лишь зарегистрировать библиотеку dll в реестре при помощи командной строки или программы PowerShell, в зависимости от того, что любите использовать, и команды regsvr32.
Для того чтобы выполнить команду, достаточно будет в строке написать такой текст команды «regsvr32 «C:Program Files1cv88.3.ХХ.ХХХХbincomcntr.dll»». Вместо «ХХ.ХХХХ» необходимо указать необходимый релиз платформы, библиотеку которой, необходимо зарегистрировать в реестре системы.
Если все выполнено правильно и регистрация произошла успешно, то должно выдать сообщение, как на скриншоте, об успешной регистрации библиотеки.
Администратор: Командная строка
3. Параметры при вызове конструктора (COM-объект 1С), которые регистрируют компоненты строки кода перед регистрируемым dll-файлом
Также есть некоторые особенности команды, которая регистрирует компоненты.
На данный момент я знаю только 4 параметра (которые при написании строки кода указываются перед регистрируемым dll-файлом):
· /u — параметр, отменяет регистрацию
· /i — параметр, который позволяет при необходимости, в зависимости от библиотеки.
· /n —параметр используется только для установки компоненты 1С, в основном пишется вместе с предыдущим (/I);
· /s – возможность отключить все сообщения при регистрации;
Существует, также, один немаловажный момент, что в зависимости от версии командной строки, иногда приходится прописывать путь к самой утилите.
Кстати, существуют специальные программы-инструменты, которые помогают регистрировать компоненты, без знания команд и утилит администрирования, зарегистрировать библиотеку и продолжить работать дальше.
Таких программ достаточно много и писать, какое-то одно название смысла нет.
Для того чтобы быстро и качественно решать такие проблемы, необходимо изучать разнообразные статьи, для повышения уровня знаний и квалификации.
Специалист компании «Кодерлайн»
Олег Мороз
NyanXiho 0 / 0 / 0 Регистрация: 12.03.2022 Сообщений: 2 |
||||
1 |
||||
Ошибка при создании конструктора структуры12.03.2022, 16:30. Показов 512. Ответов 1 Метки c++ (Все метки)
Добрый день, при создании конструктора структуры у меня появляется ошибка
__________________
0 |
Nishen 1172 / 833 / 359 Регистрация: 26.02.2015 Сообщений: 3,743 |
||||
12.03.2022, 16:45 |
2 |
|||
Сообщение было отмечено NyanXiho как решение Решение
1 |
Первая статья в новом 2021 году будет посвящена программе 1С. Это связанна с тем что данное ПО очень распространено. Так как альтернативы пока что нет. К типовым конфигурация претензий практически нет, в них не появляются ошибки, при обновлении, переносе и других манипуляциях. Что нельзя сказать о самопысных конфигурациях или измененных типовых. Как правило занимаются этим программисты не высокого уровня, так как час разработки профессионала стоить достаточно дорого. В результате конечный пользователь получаем огромные проблемы которые возникают после каких либо манипуляций либо с базой или клиентами. Сегодня поговорим об одной интересной ошибки которая появляется при попытке распечатать какой либо документ «Ошибка при вызове конструктора (COMOбъект) класс не зарегистрирован».
Использование COMOбъектов в 1С это прошлый век, сейчас уже ни кто так не пишет. Раньше с его помощью реализовали печать документов. Они выгружались в OpenLibre Office и от туда уже печатались.
Появиться такая ошибка может после
1 Обновления платформы
2 Переустановки ОС и 1С
3 Обновление конфигурации
4 Проблем с офисными пакетами
5 и т.д.
Это самые распространенные.
У меня есть еще несколько статей в которых я рассказывал как можно исправить различные ошибки 1С рекомендую прочитать.
Ошибка при отправке запроса на сервер
При появлении ошибки в 1С нет кнопки подробнее
Как настроить сортировку в отчете
Как сохранить обработку (как внешнюю)
Как указать версию платформы
Как посмотреть изменения в конфигурации
Три способа избавиться от ошибки «Ошибка при вызове конструктора…»
И так после каких либо манипуляций с 1С у вас стала появляться ошибка.
Ошибка при вызове конструктора (COMOбъект): -2147221164(0x80040154) класс не зарегистрирован
Первый способ
Самое простое это переустановить офисные пакеты OpenLibre, так же как вариант если у вас стоял Open поставить Libre и на оборот. Это нужно для того чтобы обновить специальный компонент.
Второй способ
Попробовать зарегистрировать самостоятельно, для этого запускаем командную строку от имени администратора, переходим в каталог введя команду.
cd windowssyswow64
И регистрируем
regsvr32 «C:Program Files (x86)1cv88.3.16.18.14comcntr.dll»
Кстати данную манипуляцию нужно проводить на сервере.
Третий способ
Установить 32 битную версию клиента 1С, можно даже поверх х64. В итоге у вас появиться два ярлычка для запуска, один для х32 второй х64.
Версию можно указать и в ярлыке запуска 1С.
Можно еще попробовать самостоятельно создать COM + , но лично из своего опыта могу сказать это не помогает. Самый действенный вариант это установка х32 клиента. Так как компонента которая необходимо работает только с х32.
Так же проблема может быть непосредственно в самом коде.
Ramzes7000 |
|
||
---|---|---|---|
{ОбщийМодуль.СтандартныеОтчеты.Модуль(4132)}: Ошибка при вызове конструктора (ХранилищеЗначения)
НастройкиДляИстории = XMLСтрока(Новый ХранилищеЗначения(СтруктураНастроек)); по причине: Переданное значение не может быть помещено в ХранилищеЗначения, поскольку не сериализуется или содержит вложенный несериализуемый элемент как исправить? |
Yandex |
|
||
---|---|---|---|
E_Migachev |
|
||
---|---|---|---|
смотри что в СтруктураНастроек, видимо оно неправильно формируется |
Ramzes7000 |
|
||
---|---|---|---|
этого не было пока я не увеличил длину номера документов создав нумератор и присвоив его нескольким документам |
E_Migachev |
|
||
---|---|---|---|
|
смотри как формируется СтруктураНастроек |
Ramzes7000 |
|
||
---|---|---|---|
структура формируется нормально отрабатывает без ошибок или может нужно обратить на что-то внимание? |
Ramzes7000 |
|
||
---|---|---|---|
Ура поборол!
нормально работает в релизе 8.2.15 необходимо просто установить режаи совместимости в самой конфигурации (выбрать совместимость с 8.2.13) Изменено 07.12.11 14:17:10 |
E_Migachev |
|
||
---|---|---|---|
(5) Ramzes7000, поздравляю *13 |
Linx |
|
||
---|---|---|---|
|
Сейчас тоже столкнулся, при переходе на 8.3, отключил режим совместимости. Пока нашел такое: http://pro1c.org.ua/index.php?showtopic=6543 Код 1C v 8.х
Вроде, более логичное решение, чем режим совместимости. Но нужно еще погуглить. |
Подсказка: Вы можете добавить любую страничку в Избранное щелкнув по значку |
Структура в 1С
В языке программирования 1С, есть несколько коллекций (множеств) значений. Каждые из них имеют свои возможности и предназначение, хотя иногда имеют одинаковые методы (например Количество()).
Структура — один из основных видов коллекций, по сути, это массив именованных значений.
Какие особенности имеет структура
- Имя (Ключ) значения всегда строка, которое не может начинаться на цифру и содержать некоторые символы (пробел,%,?,>,< и другие);
- ключ не может быть пустым;
- значение может быть произвольного типа, в том числе «Неопределенно» или же Структура(вложенная);
- ключ уникален во всей структуре;
- регистр ключа имеет значение («Ключ» не равно «ключ»);
- структура может быть пустой(не содержать значений);
- значения могут быть инициализированы при создании, либо заполнены поочередно;
- является универсальным транспортным значением для всех платформ 1с и видов исполнения (не мутабельное);
- возможно использование в системной процедуре ЗаполнитьЗначения();
- тип «Структура» не хранится в базе данных (это рабочее, промежуточное значение или свойство объекта);
- ключ нельзя изменить (переименовать);
- скоростью обращения к значению обычно пренебрегают при небольших коллекциях, но структура не является индексированной таблицей (скорость опредяеляется скоростью памяти, перебора значений до искомого).
Приемы работы со структурой
//Создание структуры:
Структура = Новый Структура;
Структура = Новый Структура("Ключ1,Ключ2","Значение1",2);
//Обращение к значению структуры
Значение1 = Структура.Ключ1;
Значение2 = Структура["Ключ2"];
//Добавление значения
Структура.Вставить("Ключ3", Дата(1,1,1));
//Замена значения - если "Ключ3" существует, значение заменяется, иначе добавляется
Структура.Вставить("Ключ3", Дата(2020,11,1));
//Удаление одного значения
Структура.Удалить("Ключ2");
//Удаление всех значений
Структура.Очистить();
//Перебор значений
Для каждого ЭлементСтруктуры из Структура Цикл
Сообщить(ЭлементСтруктуры.Ключ);
Сообщить(ЭлементСтруктуры.Значение);
КонецЦикла;
//Копирование значений структуры
Структура = Новый Структура("Ключ1,Ключ2","Значение1",2);
СтруктураПриемник = Новый Структура("Ключ1,Ключ2");
ЗаполнитьЗначенияСвойств(СтруктураПриемник,Структура);
//Проверка наличия значения с определенным ключом в структуре
Если Структура.Свойство(«Ключ») = Ложь Тогда //Используется как функция
Структура.Вставить(«Ключ»,»Теперь ключ есть»);
Значение = Неопределено;
Структура.Свойство(«Ключ»,Значение); //Используется как процедура
Сообщить(Значение); //Значение стало «Теперь ключ есть»
КонецЕсли;
//У объекта есть служебное свойство: ДополнительныеСвойства
Документ = Документы.РеализацияТоваровИУслуг.СоздатьОбъект();
Документ.ДополнительныеСвойства.Вставить("Ключ1",2);
У структуры есть объект-потомок — «ФиксированнаяСтруктура», ее значения нельзя поменять: вставить, удалить, остальные методы у них одинаковы, поэтому она и называется фиксированной.
Фиксированную структуру можно инициализировать при создании на основании структуры.
Структура = Новый Структура("ИмяЗначения",0);
Фикс = Новый ФиксированнаяСтруктура(Структура);
Сообщить(Фикс.ИмяЗначения);
Никакая реклама не поможет продать то, что продать невозможно.