Работа с COM-объектами в 1С:Предприятие 8 — это мощный инструмент для интеграции с внешними системами, автоматизации задач и расширения функциональности платформы. Однако многие разработчики сталкиваются с проблемой: где физически хранятся эти классы, как их правильно зарегистрировать и почему иногда 1С их «не видит»? Если вы ищете ответы на вопросы вроде «где найти COM-классы для 1С», «как подключить внешнюю компоненту» или «почему не работает CreateObject», эта статья поможет разобраться во всех нюансах.

COM-объекты (Component Object Model) позволяют взаимодействовать с Windows-приложениями, библиотеками и даже оборудованием через стандартные механизмы ОС. Но их управление требует понимания не только синтаксиса , но и особенностей регистрации в системе. Далее мы рассмотрим все ключевые аспекты: от поиска готовых решений до диагностики ошибок.

⚠️ Внимание: Работа с COM-объектами в 1С 8.3 и более новых версиях имеет особенности из-за усиленной безопасности. Некоторые классы могут блокироваться антивирусами или политиками Windows — это нормальная практика, а не ошибка платформы.

1. Что такое COM-классы в 1С и зачем они нужны

COM-объекты в контексте 1С:Предприятие — это внешние компоненты, которые расширяют возможности платформы за счёт интеграции с другими программами или системами. Например, с их помощью можно:

  • 📄 Работать с файлами через Microsoft Office (Excel, Word) напрямую из 1С;
  • 🖨️ Управлять оборудованием (сканеры, принтеры, весы);
  • 🌐 Интегрироваться с API сторонних сервисов (банки, маркетплейсы, CRM);
  • 🔧 Автоматизировать задачи с использованием скриптов на VBScript или PowerShell.

В отличие от встроенных механизмов , COM-объекты позволяют выйти за рамки стандартного функционала. Например, если вам нужно сгенерировать сложный отчёт в Excel с диаграммами и формулами, проще сделать это через Excel.Application, чем писать аналогичный код на встроенном языке.

Однако у этого подхода есть и минусы:

  • ⚠️ Зависимость от ОС: COM работает только на Windows;
  • 🔒 Проблемы с безопасностью: антивирусы могут блокировать регистрацию;
  • 🐢 Низкая производительность по сравнению с нативными решениями.
📊 Как часто вы используете COM-объекты в 1С?
Постоянно
Иногда
Раньше пробовал, но отказался
Никогда не использовал

2. Где физически хранятся COM-классы для 1С

COM-объекты не являются частью платформы — они регистрируются в операционной системе Windows и становятся доступны для всех приложений, включая 1С:Предприятие. Их физическое расположение зависит от типа компоненты:

Тип COM-объекта Где хранится Примеры
Встроенные в Windows C:\Windows\System32\ или C:\Windows\SysWOW64\ Scripting.FileSystemObject, WScript.Shell
Сторонние библиотеки (DLL) Папка с установленной программой или C:\Program Files\ Capicom (для работы с сертификатами), AddInExpress
Самостоятельно разработанные Любая папка (нужна регистрация через regsvr32) Кастомные ActiveX-компоненты
1С:Внешние компоненты Папка с базой 1С или %APPDATA%\1C\1cv8\ 1C:Enterprise 8. External Component

Чтобы увидеть все зарегистрированные в системе COM-объекты, можно воспользоваться утилитами:

  • 🔍 OLEView (входит в Windows SDK);
  • 📋 RegEdit — поиск по ветке HKEY_CLASSES_ROOT\CLSID;
  • 💻 PowerShell: команда Get-ChildItem HKLM:\SOFTWARE\Classes -ErrorAction SilentlyContinue | Where-Object { $_.PSChildName -match '{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}}' }.

⚠️ Внимание: Не все COM-объекты, видимые в реестре, будут доступны из . Платформа использует 32-битные процессы, поэтому 64-битные компоненты нужно регистрировать отдельно (через %windir%\SysWOW64\regsvr32).

3. Как подключить COM-объект в 1С: пошаговая инструкция

Подключение COM-объекта в 1С:Предприятие 8 осуществляется с помощью функции CreateObject() или GetObject(). Рассмотрим процесс на примере подключения Microsoft Excel:

  1. Убедитесь, что Excel установлен на компьютере.

  2. Проверьте регистрацию объекта в системе (см. раздел 2).

  3. В коде используйте:

    Excel = CreateObject("Excel.Application");
    

    Excel.Visible = Истина;

  4. Для работы с файлами добавьте обработку ошибок:

    Попытка
    

    Excel = CreateObject("Excel.Application");

    Исключение

    Сообщить("Ошибка создания объекта: " + ОписаниеОшибки());

    КонецПопытки;

Если объект не создаётся, проверьте:

Установлена ли программа, предоставляющая объект?|Зарегистрирован ли объект в системе?|Совпадает ли разрядность 1С и COM-объекта?|Нет ли блокировки антивирусом?-->

Для внешних компонент 1С (файлы .cpx или .dll) процесс отличается:

  1. Поместите файл компоненты в папку с базой или в %APPDATA%\1C\1cv8\ExtComp\.

  2. Зарегистрируйте её в системе:

    regsvr32 /s "C:\Путь\К\Файлу.dll"
  3. В коде 1С подключите через Новый("AddIn.ИмяКомпоненты.Класс").

💡

Если при регистрации DLL появляется ошибка 0x80070005, запустите командную строку от имени администратора и повторите команду.

4. Популярные COM-классы для 1С и где их скачать

Некоторые COM-объекты поставляются вместе с Windows или Microsoft Office, но для специфических задач требуются сторонние библиотеки. Вот список востребованных решений:

COM-объект Назначение Где скачать Пример кода
Scripting.FileSystemObject Работа с файлами и папками Входит в Windows ФС = CreateObject("Scripting.FileSystemObject");
Capicom Работа с сертификатами и ЭЦП Официальный сайт Microsoft (устарело, но ещё используется) Capi = CreateObject("CAPICOM.Store");
AddInExpress Создание расширений для 1С add-in-express.com МойAddIn = Новый("AddIn.МойМодуль.Класс");
1C:Enterprise 8. External Component Интеграция с оборудованием (сканеры, ККТ) Партнёрские решения 1С Сканер = Новый("AddIn.Атол.Scaner");
SAPbobsCOM Интеграция с SAP Business One Официальный сайт SAP SAP = CreateObject("SAPbobsCOM.Company");

⚠️ Внимание: Некоторые библиотеки (например, Capicom) официально не поддерживаются в новых версиях Windows. Для работы с ЭЦП в 1С лучше использовать встроенные механизмы платформы или сертифицированные решения от партнёров.

Для поиска редких COM-классов:

  • 🔎 Форумы 1С (Infostart, ITS);
  • 📦 Репозитории GitHub (поиск по ключевым словам 1C COM);
  • 📚 Документация партнёров 1С (например, Атол, Штрих-М).
Где искать COM-классы для работы с фискальными регистраторами?

Для интеграции с ККТ (Атол, Штрих-М, Вики-Принт) используйте официальные драйверы производителей. Они обычно поставляются в виде COM-объектов или Native API. Например, для Атол это библиотека DriverFR.dll, которую можно скачать на сайте atol.ru. В 1С подключение осуществляется через Новый("AddIn.Атол.Fptr10").

5. Типичные ошибки при работе с COM в 1С и как их исправить

Ошибки при работе с COM-объектами в часто связаны с неверной регистрацией, конфликтами разрядности или ограничениями безопасности. Рассмотрим самые распространённые случаи:

Ошибка: «Не удаётся создать объект» (0x80040154)

Причина: COM-объект не зарегистрирован в системе или зарегистрирован для другой разрядности.

Решение:

  • Зарегистрируйте объект командой regsvr32 "путь\к\файлу.dll";
  • Для 32-битной 1С используйте %windir%\SysWOW64\regsvr32;
  • Проверьте наличие файла DLL в указанном пути.

Ошибка: «Класс не зарегистрирован» (0x80040155)

Причина: Неправильный ProgID или CLSID, либо объект заблокирован политиками безопасности.

Решение:

  • Уточните правильное имя класса в документации;
  • Проверьте реестр Windows на наличие записи;
  • Отключите временно антивирус и повторите попытку.

Ошибка: «Отказано в доступе» (0x80070005)

Причина: Недостаточно прав для создания объекта или блокировка UAC.

Решение:

  • Запустите 1С от имени администратора;
  • Добавьте путь к DLL в исключения антивируса;
  • Проверьте права на папку с компонентой.

⚠️ Внимание: В 1С:Предприятие 8.3.20+ усилены меры безопасности. Если COM-объект требует повышенных прав, его работа может быть заблокирована даже при корректной регистрации. В таких случаях используйте внешние обработки с явным запросом прав.

💡

Перед использованием сторонних COM-объектов всегда проверяйте их совместимость с версией 1С и разрядностью ОС. Некоторые библиотеки (например, для старого оборудования) могут не работать в 64-битных системах.

6. Альтернативы COM-объектам в современных версиях 1С

С выходом 1С:Предприятие 8.3.18+ появились альтернативные механизмы интеграции, которые постепенно вытесняют COM:

  • 🌐 HTTP-Сервисы и REST API — для работы с облачными сервисами;
  • 🔌 Native API — для подключения оборудования без COM;
  • 📦 Внешние компоненты на .NET (через 1C:Enterprise Development Tools);
  • 📝 Встроенные механизмы (например, работа с Excel через ЗаписьXML).

Преимущества альтернатив:

Механизм Плюсы Минусы
COM Широкие возможности, поддержка старого оборудования Проблемы с разрядностью, зависимость от ОС
HTTP-Services Кросс-платформенность, безопасность Требует настройки сервера
.NET-компоненты Высокая производительность, современные библиотеки Сложность разработки

Пример замены Excel COM на встроенные механизмы:

// Старый способ (COM)

Excel = CreateObject("Excel.Application");

Книга = Excel.Workbooks.Add();

Лист = Книга.Worksheets(1);

Лист.Cells(1,1).Value = "Привет";

// Новый способ (без COM)

Таблица = Новый ТаблицаЗначений;

Таблица.Колонки.Добавить("Столбец1");

Строка = Таблица.Добавить();

Строка.Столбец1 = "Привет";

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ОткрытьФайл("C:\output.xml");

Таблица.ЗаписатьXML(ЗаписьXML);

⚠️ Внимание: Полный отказ от COM в 1С пока невозможен, так как многие устройства (например, фискальные регистраторы) по-прежнему требуют ActiveX-компоненты. Однако для новых проектов рекомендуется использовать современные альтернативы.

7. Как создать свой COM-объект для 1С

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

  1. Выбрать язык разработки: C++ (классический вариант), C# (через Interop), Delphi.

  2. Реализовать интерфейсы IUnknown, IDispatch (для достаточно IDispatch).

  3. Скомпилировать библиотеку .dll и зарегистрировать её.

  4. Подключить в 1С через CreateObject или Новый("AddIn.Имя").

Пример минимального кода на C# (с использованием Interop):

[ComVisible(true)]

[Guid("YOUR-GUID-HERE")]

[ProgId("MyComObject.For1C")]

public class MyComClass

{

public string HelloWorld()

{

return "Привет из COM-объекта!";

}

}

Для компиляции и регистрации:

  1. Скомпилируйте проект в Visual Studio;

  2. Зарегистрируйте DLL:

    regasm /codebase MyComObject.dll
  3. В 1С используйте:

    Объект = CreateObject("MyComObject.For1C");
    

    Сообщить(Объект.HelloWorld());

⚠️ Внимание: При разработке COM-объектов для 1С учитывайте:

  • 1С работает в однопоточном режиме — ваш объект должен быть потокобезопасным;
  • Используйте STA-режим ([STAThread] в C#);
  • Избегайте модальных окон — они могут заблокировать интерфейс 1С.

FAQ: Частые вопросы по COM-классам в 1С

🔹 Почему 1С не видит COM-объект, хотя он зарегистрирован?

Проверьте:

  1. Совпадает ли разрядность 1С и COM-объекта (32/64 бит);
  2. Запущена ли 1С от имени администратора (если объект требует прав);
  3. Не блокирует ли антивирус доступ к DLL;
  4. Правильно ли указан ProgID (например, "Excel.Application", а не "Excel").
🔹 Можно ли использовать COM-объекты в Linux-версии 1С?

Нет, COM — это технология Microsoft, работающая только на Windows. Для Linux-версий 1С используйте:

  • HTTP-сервисы;
  • Native-библиотеки;
  • Внешние компоненты на Java или Python (через 1C:Enterprise Development Tools).
🔹 Как обновить COM-объект без перерегистрации?

Если вы обновили DLL, но не хотите перерегистрировать её на всех компьютерах:

  1. Используйте регистрацию в реестре через инсталлятор;
  2. Разместите DLL в папке с базой 1С и подгружайте динамически:
  3. ПутьКDLL = "C:\Базы1C\МояБаза\MyCom.dll";
    

    Объект = CreateObject("Scriptlet.TypeLib").GuidFromPath(ПутьКDLL);

    Если Не ЗначениеЗаполнено(Объект) Тогда

    Сообщить("Ошибка загрузки DLL!");

    КонецЕсли;

🔹 Где найти документацию по COM-объектам для 1С?

Официальная документация:

  • Microsoft Docs — для стандартных объектов (Excel, Word);
  • Документация 1С — раздел «Внешние компоненты»;
  • Сайты производителей оборудования (например, Атол, Штрих-М).

Для редких объектов ищите примеры на:

🔹 Как отладить работу COM-объекта в 1С?

Инструменты для отладки:

  • Process Monitor — мониторинг обращений к реестру и файлам;
  • OLEView — просмотр зарегистрированных объектов;
  • DebugView — вывод отладочных сообщений из DLL;
  • 1С:Отладчик — для пошагового выполнения кода в 1С.

Пример кода для логгирования в COM-объекте (C#):

System.Diagnostics.Debug.WriteLine("COM-объект создан!");

System.Diagnostics.Debug.WriteLine("Передан параметр: " + inputParam);

Чтобы увидеть эти сообщения, запустите DebugView от имени администратора.