Ошибка при вызове конструктора двоичные данные

Обновлено: 26.04.2024

Как правило, ошибка возникает при фоновом обмене данными между базами 1С или запуске синхронизации вручную. Что делать при появлении этой ошибки и куда смотреть.

Текст: «Ошибка при вызове конструктора (COMObject) по причине: -2147221005(0x800401F3): Недопустимая строка с указанием класса».

Решение — в регистрации библиотеки comcntr.dll из каталога программы для корректного вызова COMConnector.

Подготовительные действия

  • отключите службу Агента сервера 1С:Предприятия и программы, возможно использующие регистрируемую DLL;
  • если ранее использовалась библиотека устаревшей версии, удалите регистрацию comcntr.dll, запустив команду вызова regsvr32 с ключом /u.

Подходы к решению

В командной строке с правами Администратора выполните команду:

2. Переустановка платформы с внесением исправлений

  • запускаем консоль «Службы компонентов»;
  • добавляем новый элемент, переходим «Компьютеры» — «Мой компьютер» — из списка выбираем «Приложения COM+»;
  • выбираем «Создать» — «Приложение»;
  • в Мастере установки выбираем второй вариант «Создать новое приложение», в поле «Введите имя нового приложения:» вводим «V83COMConnector», «Способ активации» устанавливаем «Серверное приложение», нажимаем «Далее»;
  • выбираем учетную запись под которой запускается приложение, по умолчанию — «Текущий (вошедший в систему) пользователь»;
  • на этапах «Добавление ролей приложения» и «Добавление пользователей для ролей» нажимаем «Далее», а затем «Готово».

В ветке только что созданного приложения переходим в подветку «Компоненты» и создаем компонент:

  • в контекстном меню выбираем «Создать» — «Компонент»;
  • кликаем по первому варианту «Установка новых компонентов»;
  • в открывшемся диалоге выбираем необходимый файл comcntr.dll и нажимаем «Открыть»;
  • нажимаем «Далее» и «Готово».

Обратите внимание: после установки измените свойства объекта. Для этого переходим к ветке V83COMConnector:

  • открываем свойства созданного компонента, переходим в ветку V83COMConnector — «Свойства»;
  • на вкладке «Безопасность», в «Авторизация» снимаем флаг «Принудительная проверка доступа для приложений»;
  • в «Политика программных ограничений» устанавливаем флаг «Применить политику программных ограничений» и выбираем «Уровень ограничений:» — «Неограниченный»;
  • нажимаем «Применить» — «ОК».

Полная версия со снимками экранов — в статье на Дзен-канале.

Использование 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.

Ошибка при вызове конструктора (COMOбъект)

Версию можно указать и в ярлыке запуска 1С.

Можно еще попробовать самостоятельно создать COM + , но лично из своего опыта могу сказать это не помогает. Самый действенный вариант это установка х32 клиента. Так как компонента которая необходимо работает только с х32.

Так же проблема может быть непосредственно в самом коде.

Ошибка (COMOбъект) : 1 комментарий

Хотелось бы узнать и утвердиться в том, что ваша информация действительно сможет помочь людям в данной ситуации с переустановкой офисных центров и вызовов мастеров, в принципе информация интересная, информативная, но слишком много заумных слов

Начиная с версии технологической платформы 8.3.9 средства для работы с двоичными данными претерпели существенные изменения. В этой статье я постараюсь рассказать как о старых, так и о новых инструментах для работы с двоичными данными. При написании статьи использовалась версия технологической платформы 8.3.12

Общая информация

Если раньше, до версии технологической платформы 8.3.9, мы располагали только объектом ДвоичныеДанные, то к настоящему времени у нас имеется целый набор объектов, которые серьезно расширяют наши возможности по манипуляциям с двоичными данными. Рассмотрим все эти объекты чуточку подробнее.

Двоичные данные

Экземпляры объекта ДвоичныеДанные содержат двоичные данные, которые считываются из файла. При это объект ДвоичныеДанные является достаточно многофункциональным — мы можем:

  • читать двоичные данные из файла и записывать их в файл;
  • передавать их между клиентом и сервером при помощи временного хранилища;
  • передавать и получать их по сети;
  • хранить их базе данных в реквизитах вида ХранилищеЗначения;
  • превратить двоичные данные в объект вида Картинка (при определенных условиях конечно);
  • хранить двоичные данные в макетах;
  • шифровать и расшифровывать, подписывать и проверять подписи;

Наверняка я что-то пропустил, но главное должно быть понятно — несмотря на значительное развитие средств работы с двоичными данными, объект ДвоичныеДанные остается ключевым.

Потоки

Это группа объектов назначение которых заключается в работе с потоками данных.

Поток — этот объект представляет собой поток данных из которого можно читать и/или записывать в него данные. Данный объект не имеет конструктора, а получить экземпляр объекта можно при помощи различных методов других объектов.

ФайловыйПоток — специализированный вариант объекта Поток, предназначенный для работы с данными находящимися в файлах на диске.

ПотокВПамяти — специализированный вариант объекта Поток, предназначенный для работы с данными находящимися в оперативной памяти.

МенеджерФайловыхПотоков — этот объект предоставляет типовые методы для работы с файлами (открытие и создание). Создать экземпляр этого объекта нельзя — имеется объект глобального контекста ФайловыеПотоки который и предоставляет доступ к методам менеджера.

Чтение и запись

ЧтениеДанных — этот объект предназначен для чтения различных типов данных из различных источников (потоки, файлы, двоичные данные).

РезультатЧтенияДанных — этот объект содержит описание результата чтения данных из потока. Объект не имеет конструктора, получить экземпляр объекта можно при помощи методов других объектов.

БуферДвоичныхДанных — этот объект представляет собой коллекцию байтов фиксированного размера, имеется возможность произвольного доступа и изменения по месту.

ЗаписьДанных — этот объект предназначен для записи различных типов данных в приемник.

Практическая часть

Итак, у нас достаточно много различных объектов, которые, в свою очередь, имеют много разных свойств и методов. Разобраться во всем этом более подробно помогут практические примеры, к ним и перейдем.

Многие объекты — ДвоичныеДанные, Поток, ФайловыйПоток, ПотокВПамяти, ЧтениеДанных, ЗаписьДанных, РезультатЧтенияДанных имеют пары синхронных и асинхронных методов, например: ЗаписатьНачатьЗапись, ЗакрытьНачатьЗакрытие. Асинхронные методы нужны для обеспечения возможности одинаковой работы и в тонком клиенте, и в веб-клиенте.

Подробнее про синхронные и асинхронные методы можно прочесть в этой статье.

Двоичные данные

Ниже приведены примеры основных операций с объектом ДвоичныеДанные.



Обработка позволяет выгружать информацию в конфигурации 1С версий 8.2.
Удобно использовать когда необходимо выгрузить информацию, а использование "ВыгрузкаЗагрузкаДанныхXML.epf" невозможно из-за несовпадения структур выгружаемых объектов.
Обработка не призвана заменить или конкурировать с Конвертацией, однако использование Конвертации зачастую бывает неоправданно долго.

БУДУ РАД ВЫСЛАННЫМ ОШИБКАМ И ЗАМЕЧАНИЯМ, ОСОБЕННО С ИСПРАВЛЕННЫМ /ДОРАБОТАННЫМ КОДОМ.

  • Доработана эргономика настройки синхронизируемых элементов. Табличная часть переделана на дерево значений.
  • Исправлены выявленные в процессе работы ошибки. Добавлено сохранение настроек в Файл.
  • Выявлена платформенная 1С ошибка - COM-соединение не работает, если у вас на машине стоят две версии платформы. Почему-то не находит dll-ку.
  • Переписана полностью на платформу 8.2. (8.2.14.519).
  • Оптимизировано быстродействие, переписано определение типов. Убрал «невостребованный» с моей точки зрения функционал. Доработана возможность подключения к файловой базе. Исправлены ошибки выявленные в версии 2.1.
  • Ограничения - недотестирована выгрузка объектов (отключена выгрузка через COM):
    • ПланВидовРасчета;
    • ПланСчетов;
    • Задачи;
    • БизнесПроцесс;
    • ПланОбмена;
    • РегистрРасчета;
    • РегистрБухгалтерии;

    Версия 2.1 Проведено дополнительное тестирование. Устранены выявленные ошибки. Доработан интерфейс, внешний вид, добавлена маленькая справка. После проведенный доработок текущее описание обработки не переделывалось.

    Версия 2. Скомпонована более универсально, добавлен функционал регистрации в ПланОбмена, добавлено сравнение Данных, устранены замеченные ошибки. Из-за недостатка времени доработка ведется только при крайней необходимости. Поставляется "Как Есть" - есть вероятность потери данных при перегрузке через COM. Тестировалась на 8.1.

    Возможности обработки:

    Выгрузка объектов в другую базу посредством COM -соединения.

    Формирование простых отчетов на базе построителя отчета по выбранному объекту /объектам. Результат выводится на экран или в таблицу значений.


    вывести на экран - будет сформирована печатная форма результатов запроса.

    вывести в таблицу – выводит данные в таблицу значений внизу формы.

    результат в план обмена – регистрирует выбранные объекты в план обмена.
    Режим доступен, если узел плана обмена заполнен.

    Выгрузить через COM – выгружает объекты в другую базу посредством COM- соединения.

    Описание формы инструментария

    При открытии обработки формируется дерево метаданных.

    При заполненном поле «ПланОбмена», метаданные ограничиваются регистрируемыми объектами выбранного плана обмена.

    Обработка отмеченных объектов возможна по отдельности или по всем: «ОбработатьСтроку» или «ОбработатьОтмеченные».

    Объекты МД с настроенными отборами отмечаются в дереве значком «*».


    Кнопки панели управления позволяют:

    Действия с деревом метаданных: свернуть, развернуть, отметить, снять отметки.

    Открыть форму списка выбранного объекта метаданных.

    Распечатать дерево метаданных

    Полностью зарегистрировать или отменить регистрацию всего объекта в плане обмена.

    Сохранить/восстановить настройку на диск.



    Открывает/скрывает таблицу значений (Предварительный анализ результатов в таблице значений)

    Проведение тонкой настройки отборов, указание перегружаемых полей, замена элементов, синхронизация объектов

    Форма тонкой настройки открывается по двойному клику на строке дерева объектов.

    Возможны настройки:


    Настройка соответствий реквизитов с COM -объектом:

    Настройка требуется, если объекты в базах имеют различную структуру.

    Пример 1: требуется перегрузить справочник Клиенты в справочник Контрагенты.

    Необходимо ввести наименование справочника в Сom-базе. В дальнейшем при выгрузке объектов для реквизитов данного типа будет устанавливаться соответствующий тип автоматически.

    Пример 2: Различаются наименования реквизитов.

    Пример 3: требуется перегрузить только несколько реквизитов.

    Настройка замен:

    Настройка замен возможна для справочников. При настроенной замене будет происходить подмена элементов.

    Пример 1: В новой базе создан новый предопределенный элемент.

    Описание приемов работы с обработкой.

    Выгрузка данных через com-соединение.

    Для простой выгрузки данных через com-соединение достаточно установить режим “Выгрузить через COM”. Если настройка отборов не требуется, то дополнительных действий более не требуется. В момент подключения будут заполнены соответствия объектов и реквизитов и т.д.

    Соответствие реквизитов будет устанавливаться по Com-имени, если оно было заполнено в форме тонкой настройки.

    Алгоритм выгрузки оптимизирован для больших объемов: при выгрузке, определение Com-ссылок происходит только один раз, в дальнейшем ссылка получается из таблицы соответствий.

    Запись всех объектов в Com-базе происходит в режиме: ОбменДанными.Загрузка=Истина.

    Ограничения на применение COM – технологии в 1С, из личного опыта (рецензии приветствуются только с примером реализации).

    • Сверка может производится только по простым типам: дата, число, строка. (ограничение на строки для SQL 2000 не более 25 символов, SQL 2005 не более 256 символов)

    В SQL 2000 ограничение 25 символов срабатывает на больших объемах, на маленьких проходит без проблем и с большим количеством записей -- наблюдал лично.

    • Нет возможности использовать в COM - base механизм транзакций.
    • В случаях размещения в процедурах ПередЗаписью(), ПриЗаписи() дополнительных действий с объектом может появляться ошибка записи. Для исключения ошибки в COM - base необходимо вставить блок кода:

    Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли;

    Ошибка

    Возможная Причина

    : Ошибка при вызове метода контекста (Записать): Произошла исключительная ситуация: Ошибка при выполнении обработчика –

    Получение элемента по индексу для значения не определено' ComЭлемент.Записать();

    В COM -базе. В случаях размещения в процедурах ПередЗаписью(), ПриЗаписи() дополнительных действий – возникает ошибка записи. Для использования технологии необходимо вставить блок кода:

    Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли;

    : Ошибка при вызове метода контекста (ЗарегистрироватьИзменения): Недопустимое значение параметра (параметр номер '1')
    ПланыОбмена.ЗарегистрироватьИзменения(ПланОбмена,ТКСТР[ИмяКолонки]);
    по причине:
    Недопустимое значение параметра (параметр номер '1')

    Выбран предопределенный Узел или данный объект не входит в состав объектов регистрируемых в плане обмена.

    Анна Викулина

    Двоичные данные платформы 1С:Предприятие – это универсальный объект встроенного языка программирования для работы с файлами. Благодаря объекту ДвоичныеДанные можно любой файл представить в виде последовательности байт. Объект доступен в тонком клиенте, веб-клиенте, мобильном клиенте, на сервере, толстом клиенте, внешнем соединении, мобильном приложении (клиент/сервер).

    Объект сериализуется

    Данный объект может быть сериализован в/из XML, может использоваться в реквизитах управляемой формы, а также он может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен . Имя типа XDTO может быть любым из перечисленных: base64Binary, hexBinary.

    Благодаря тому, что двоичные данные доступны и на клиенте, и на сервере, мы можем смело передавать файл в виде двоичных данных с клиента на сервер, однако рекомендованный «шаблон» для передачи файла – использовать хранилище значений.

    Задачи, для решения которых можно использовать двоичные данные:

    Работа с двоичными данными:

    Данный пример кода показывает, как прочитать двоичные данные и передать их с клиента на сервер, используя объект ДвоичныеДанные.

    Примеры по работе с двоичными данными

    Самый очевидный пример, где применяются двоичные данные, – сохранение файла в базе данных. Для хранения файла в виде двоичных данных необходимо в объекте добавить реквизит с типом «ХранилищеЗначений». Далее представлен пример кода по работе с реквизитом (заполнение значения и получение значения).

    Заполнение:

    Получение (фрагмент кода, выполняемый на сервере):

    Рассмотрим еще один пример: скачивание картинки из интернета и отображение ее на управляемой форме. Для этого также добавляем реквизит с типом ХранилищеЗначения, в котором будет помещаться картинка в двоичном формате.

    Рис.1 Скачивание картинки из интернета

    Рис.1 Скачивание картинки из интернета

    Функция, скачивающая картинку из интернета:

    Использование функции:

    Теперь у нас в реквизите «Аватар» лежат двоичные данные картинки. Чтобы картинку вывести на управляемую форму, необходимо добавить реквизит формы «Тип строка», перекинуть его на форму (drag-and-drop), либо создать самостоятельно элемент формы, указав в поле «Путь к данным» наш реквизит «Картинка», после чего изменить вид на «Поле картинки».

    Рис.2 Поле картинки

    Рис.2 Поле картинки

    По событию ПриСозданииНаСервере

    Готово, на форме у нас картинка.

    Двоичные данные и потоки

    Говоря о двоичных данных, стоит упомянуть о возможности работы с потоками. Она появилась относительно недавно, а именно в версии 8.3.9. Чтобы потоком можно было читать из двоичных данных, применяется метод ОткрытьПотокДляЧтения. Допустим, у нас в базе данных лежит заархивированный xml-файл (как хранить файлы в базе данных рассматривалось ранее). Нам нужно вывести пользователю содержимое этого файла, или у вас настроен какой-то обмен, и вы передаете файлы в заархивированном виде (для экономии трафика).

    Последовательность действий при работе с двоичными данными без использования потоков:

    • Получить двоичные данные из базы;
    • Записать их во временный файл;
    • Разархивировать;
    • Удалить временный файл;
    • Прочитать разархивированный файл.

    Последовательность действий при работе с потоками:

    • Получить двоичные данные из базы;
    • Открыть поток для чтения;
    • Разархивировать;
    • Прочитать разархивированный файл.

    Пример кода без использования потоков:

    Пример кода по работе с потоком:

    Если диск у вас на SSD, рекомендую использовать потоки не только в примере с архивацией, а везде, где это возможно. Да, в данном примере все же происходит запись на диск (разархивация), но будем надеяться, когда-нибудь 1С реализует метод двоичных данных ОткрытьПотокДляЗаписи.

    Работа с Base64

    Base64 – это стандарт, позволяющий кодировать двоичные данные в виде строки (для кодирования используется 64 символа таблицы ASCII, отсюда и название). Тип ДвоичныеДанные сериализуем, то есть его можно представить в виде XML, для этого применяется объект встроенного языка СериализаторXDTO. После сериализации данные представлены одним узлом base64Binary, содержимое которого есть последовательность байт, закодированная в формате Base64.

    строка в Base64

    Платформа 1С также позволяет кодировать двоичные данные, не прибегая к сериализации. Для этого есть две функции:

    Они преобразуются в Base64 и обратно в двоичные данные.

    Если у вас остались вопросы по работе с двоичными данными в среде 1С:Предприятие, обратитесь к нашим специалистам и получите консультацию по 1С 8.3 или воспользуйтесь услугами по сопровождению 1С.

    Читайте также: