1с ошибка при вызове конструктора описаниетипов
Как правило, ошибка возникает при фоновом обмене данными между базами 1С или запуске синхронизации вручную. Что делать при появлении этой ошибки и куда смотреть.
Текст: «Ошибка при вызове конструктора (COMObject) по причине: -2147221005(0x800401F3): Недопустимая строка с указанием класса».
Решение — в регистрации библиотеки comcntr.dll из каталога программы для корректного вызова COMConnector.
Подготовительные действия
- отключите службу Агента сервера 1С:Предприятия и программы, возможно использующие регистрируемую DLL;
- если ранее использовалась библиотека устаревшей версии, удалите регистрацию comcntr.dll, запустив команду вызова regsvr32 с ключом /u.
Подходы к решению
В командной строке с правами Администратора выполните команду:
2. Переустановка платформы с внесением исправлений
- запускаем консоль «Службы компонентов»;
- добавляем новый элемент, переходим «Компьютеры» — «Мой компьютер» — из списка выбираем «Приложения COM+»;
- выбираем «Создать» — «Приложение»;
- в Мастере установки выбираем второй вариант «Создать новое приложение», в поле «Введите имя нового приложения:» вводим «V83COMConnector», «Способ активации» устанавливаем «Серверное приложение», нажимаем «Далее»;
- выбираем учетную запись под которой запускается приложение, по умолчанию — «Текущий (вошедший в систему) пользователь»;
- на этапах «Добавление ролей приложения» и «Добавление пользователей для ролей» нажимаем «Далее», а затем «Готово».
В ветке только что созданного приложения переходим в подветку «Компоненты» и создаем компонент:
- в контекстном меню выбираем «Создать» — «Компонент»;
- кликаем по первому варианту «Установка новых компонентов»;
- в открывшемся диалоге выбираем необходимый файл comcntr.dll и нажимаем «Открыть»;
- нажимаем «Далее» и «Готово».
Обратите внимание: после установки измените свойства объекта. Для этого переходим к ветке V83COMConnector:
- открываем свойства созданного компонента, переходим в ветку V83COMConnector — «Свойства»;
- на вкладке «Безопасность», в «Авторизация» снимаем флаг «Принудительная проверка доступа для приложений»;
- в «Политика программных ограничений» устанавливаем флаг «Применить политику программных ограничений» и выбираем «Уровень ограничений:» — «Неограниченный»;
- нажимаем «Применить» — «ОК».
Полная версия со снимками экранов — в статье на Дзен-канале.
Гарантируется, что объект с заданным номером в базе есть и, повторюсь, этот код с такими же параметрами корректно отрабатывает будучи вызванным через 1С Предприятие. Да и наверняка тогда поймалось бы исключение в самой функции ПометитьРасходнаяНакладная
Или смотри модуль РасходнаяНакладная, что там вызывается при инициализации в модуле расходной накладной
Спасибо за помощь, но не вижу каких-либо проблем. Насчет ПриЗаписи, причем оно тут? Галка "Внешнее соединение" установлена, однако и с ней и без нее эффект одинаковый. Работает с другими документами и другими методами и без "внешнего соединения". В модуле РасходнаяНакладная вообще нет никаких функций, связанных с инициализацией (или я их не вижу). Вообще чисто гипотетически как может возникнуть описанная ситуация? 1) не ловится исключение в ПометитьРасходнаяНакладная 2) работает через 1С Предприятие 3) не работает через COM и только для некоторых типов документов
НайтиПоНомеру(Номер) - это гарантированно не найдет. Пиши не через задницу, а по-человечески НайтиПоНомеру(Номер, Дата)
четвертый день вижу 1С, НайтиПоНомеру(Номер) находит то, что нужно, повторюсь, код работает будучи вызванным через 1С Предприятие. Поискал по коду 1С - почти всюду НайтиПоНомеру используется без второго аргумента. Из того, что сейчас прочитал - второй аргумент целесообразен при использовании периодичной нумерации (так?). В свойствах РасходнаяНакладная Периодичность "Непериодический". Готов попробовать тем не менее. Не представляю только какую дату указывать. Дата?
Не функций а кода который вызывает функции из других модулей. Код инициализации это код после последней процедуры функции модуля
Спасибо за пояснение. В модуле объекта РасходнаяНакладная кроме процедур и одной глобальной переменной нет никакого другого кода.
Сделай проверку на неопределено Если док=неопределено Тогда возврат "Не найден документ"; а на строчке документ=Док.ПолучитьОбъект; в отладчике "Шагнуть В";
Изменил: Запустил под отладчиком привязав вызов ПроведениеДокументов.ПометитьРасходнаяНакладная("00008121",Истина,Ложь); к одному из событий интерфейса. В результате ПолучитьОбъект отработал корректно. При "Шагнуть В" вход внутрь не выполнился. Я не знаю типично ли это для системных вызовов в 1С или мне нужно изменить какие-то настройки отладчика. Проверил и вызов через COM - все то же исключение, которое даже не удается идентифицировать.
Ну хотя бы в Исключение ЗаписьЖурналаРегистрации("ПометитьРасходнаяНакладная", А откуда знаешь, если отладчиком не пользуешься?
первый пост, объяснил все там. Как до этого дошел - опытным путем, вызывая разные методы вместо .ПолучитьОбъект и проверяя другие типы документов (не РасходнаяНакладная). Возвращается "Ok" (ну или я ставил Возвраты сразу до или после оператора с .ПолучитьОбъект). Если документ не найден, вызывается некорректный метод или не указаны обязательный аргументы (что я только не делал) и т.д. и т.п., то исключение в ПометитьРасходнаяНакладная перехватывается и мне на .NET клиент возвращается ошибка "Описание='" + Инфо.Описание + "'"; Еще раз - ошибка в .ПолучитьОбъект для документа типа РасходнаяНакладная при соединении через COM. Это ОЧЕНЬ странно и именно поэтому я пишу все это. Я не вижу никакого смысла имея Исключение писать
ну разобрались же. Дату надо указать. Почему странно? Детский сад. ведь понятно же и во всех букварях написано, что по COM надо все параметры указывать, а иначе будет параметр NULL.
Не пиши. А вообще то всегда хорошо регистрировать ошибки и знать почему и когда они произошли. При этом ошибка у тебя не возвращается. Хозяин барин.
заметил появление записи в журнале "Описание='Error calling context method (ПолучитьОбъект)" появляется она далеко не всегда и не сразу после вызова (то есть я уже получил результат, а запись в журнале появляется с приличной задержкой). Получается, Ваша правда. Что можно об этом сказать? Насчет ТИИ - узнал об этом только сейчас, запустил тестирование и, может быть, зря - уже несколько минут конфигуратор висит.
"Описание='Error calling context method (ПолучитьОбъект)'; 'ОбщийМодуль.ПроведениеДокументов.Модуль'; 22;" Строка 22 это документ = ссылка.ПолучитьОбъект;
а вот это сработало, вопрос как быть дальше? в интерфейсе 1C Предприятия этот документ есть и без каких-либо видимых проблем, также наблюдаю его в базе уже давно исправил, так что мимо
Установи в конфигураторе ПараметрыМодулипроверка галку напротив внешнее соединение. И сделай проверку модуля или проверка модулей в меню конфигурация
Я ошибся с утверждением насчет ЗначениеЗаполнено(ссылка). Все нормально и через COM. сделал, в модуле РасходнаяНакладная нашлась ошибка : Переменная не определена (глВалютаУпр) глВалютаУпр как я понял - глобальная переменная, устанавливаемая при запуске приложения строка 201 с ошибкой это в Процедура ОбработкаПроведения вызов которой так и не осуществляется, ошибка в ПолучитьОбъект - раньше, может ли все равно это быть причиной? Заметил, что подобной ошибки для "Толстый клиент" нет. И тем не менее. Как-то удалось получить подробную ошибку в журнале : Error calling context method (ПолучитьОбъект) документ = ссылка.ПолучитьОбъект; because: No element selected! то есть проверка ЗначениеЗаполнено(ссылка) проходит, а дальше не удается получить объект.Документ.РасходнаяНакладная.МодульОбъекта(201,98)>
Так, это все в модуле "Модуль обычного приложения", а в "Модуль внешнего соединения" ничего нет. Режим запуска приложения - "Обычное приложение". В этом причина?
Суть и причины дисфункции
Данная ошибка относится к регулярно встречающимся ошибкам 1С, и фиксируется у многих пользователей. Единственного и эффективного рецепта её решения не существует, так как она может иметь уникальную основу, и вызывается особенностями программного кода в конкретной системе.
Тем не менее к числу наиболее популярных причин ошибки 2147221005 относятся следующие:
Обновите вашу конфигурацию 1С до актуальной версии
Первым делом убедитесь, что вы используете самую свежую версию конфигурации 1С. При подключении к нужным базам для выполнения обмена она может попытаться использовать устаревшую платформу (к примеру, 8.2), которая фактически отсутствует. Потому обновите вашу версию конфигурации до актуального релиза, а потом попробуйте осуществить требуемое подключение.
Запускайте 1С с правами админа
Убедитесь, что вы запускаете систему под учётной записью администратора, а не ограниченного в правах «Гостя» или аналога.
Измените код программы
В некоторых случаях код программы может устареть и не соответствовать текущей версии 1С. Эффективным решением ошибки 2147221005 является замена строки кода:
После указанной замены проблема может быть решена.
Зарегистрируйте в системе библиотеку comcntr.dll
Если вы пользуетесь Виндовс 64, то необходимо провести корректную регистрацию в системе библиотеки comcntr.dll . Нажмите на Win+R, введите следующую строку:
C:\Windows\SysWOW64\regsvr32 «c:\Program Files(x86)\1cv8\8.3.12.1469\bin\comcntr.dll»
Вместо «8.3.12.1469» укажите установленную у вас версию технологической платформы. После этого нажмите на ввод. Указанная регистрация может помочь избавиться от ошибки 2147221005 в 1С.
Проверьте наличие установленного в системе Excel
Наличие установленного в системе Excel является необходимым элементом при обращении к нему системы 1С. Потому рекомендуем убедиться, что Эксель в системе установлен корректно, для чего нажмите Win+R, введите там Excel , и нажмите ввод. Если программа запустилась, тогда всё работает корректно. Если нет, тогда следует установить (переустановить) Excel (комплекс «MS Office») на вашей машине (машинах).
Используйте специализированные форумы 1С
Заключение
Например, во время синхронизации возникает ошибка Обмен данными.ОбменЗарплата3Бухгалтерия3.Отправка данных со следующим содержимом:
Причины возникновения ошибки -2147221005(0x800401F3)
Данная ошибка относится к регулярно встречающимся ошибкам 1С, и фиксируется у многих пользователей. Единственного и эффективного рецепта её решения не существует, так как она может иметь уникальную основу, и вызывается особенностями программного кода в конкретной системе.
Тем не менее к числу наиболее популярных причин ошибки -2147221005(0x800401F3) относятся следующие:
Обновление конфигурации до последней версии
Вопрос обновления конфигурации 1С на примере «1С:Бухгалтерия 3.0» я рассматривал ранее. Поэтому здесь не имеет смысла описывать данный процесс.
Запускайте 1С с правами администратора
Убедитесь, что вы запускаете систему под учётной записью администратора, а не ограниченного в правах «Гостя» или аналога.
Измените код программы
В некоторых случаях код программы может устареть и не соответствовать текущей версии 1С. Эффективным решением ошибки -2147221005(0x800401F3) является замена строки кода:
После указанной замены проблема может быть решена.
Довольно часто ошибка возникает после обновления платформы, когда во время установки новой версии не регистрируется компонента comcntr.dll .
Для регистрации компоненты вручную необходимо выполнить в PowerShell от имени администратора следующие команды:
C:\Windows\SysWOW64\regsvr32 /u "c:\Program Files\1cv8\8.3.17.1851\bin\comcntr.dll" или C:\Windows\SysWOW64\regsvr32 /u "c:\Program Files (x86)\1cv8\8.3.17.1851\bin\comcntr.dll"
C:\Windows\SysWOW64\regsvr32 "c:\Program Files\1cv8\8.3.17.1851\bin\comcntr.dll" или C:\Windows\SysWOW64\regsvr32 "c:\Program Files (x86)\1cv8\8.3.17.1851\bin\comcntr.dll"
Использование COMOбъектов в 1С это прошлый век, сейчас уже ни кто так не пишет. Раньше с его помощью реализовали печать документов. Они выгружались в Open\Libre Office и от туда уже печатались.
Появиться такая ошибка может после
1 Обновления платформы
2 Переустановки ОС и 1С
3 Обновление конфигурации
4 Проблем с офисными пакетами
Это самые распространенные.
Три способа избавиться от ошибки «Ошибка при вызове конструктора…»
И так после каких либо манипуляций с 1С у вас стала появляться ошибка.
Первый способ
Самое простое это переустановить офисные пакеты Open\Libre, так же как вариант если у вас стоял Open поставить Libre и на оборот. Это нужно для того чтобы обновить специальный компонент.
Второй способ
Попробовать зарегистрировать самостоятельно, для этого запускаем командную строку от имени администратора, переходим в каталог введя команду.
regsvr32 «C:\Program Files (x86)\1cv8\8.3.16.18.14\comcntr.dll»
Кстати данную манипуляцию нужно проводить на сервере.
Третий способ
Установить 32 битную версию клиента 1С, можно даже поверх х64. В итоге у вас появиться два ярлычка для запуска, один для х32 второй х64.
Версию можно указать и в ярлыке запуска 1С.
Можно еще попробовать самостоятельно создать COM + , но лично из своего опыта могу сказать это не помогает. Самый действенный вариант это установка х32 клиента. Так как компонента которая необходимо работает только с х32.
Так же проблема может быть непосредственно в самом коде.
Ошибка (COMOбъект) : 1 комментарий
Хотелось бы узнать и утвердиться в том, что ваша информация действительно сможет помочь людям в данной ситуации с переустановкой офисных центров и вызовов мастеров, в принципе информация интересная, информативная, но слишком много заумных слов
Читайте также: