К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как подключить библиотеку в 1С: все рабочие способы

Способы подключения библиотек в 1С: внешние компоненты Native API и COM, общие модули, подсистемы БСП, расширения. Пошаговые инструкции, проверка результата и типичные ошибки.

Под библиотекой в 1С обычно понимают три разных вещи: внешнюю компоненту (DLL по технологии Native API или COM), готовый программный модуль на встроенном языке (общий модуль, подсистема из БСП) и внешнюю обработку с функциями. Способ подключения зависит от того, что именно вы получили: файл .dll, .epf, выгрузку конфигурации .cf или пакет расширения .cfe.

Ошибка на этапе выбора способа — самая частая причина проблем: DLL пытаются загрузить как обработку, а общий модуль — как компоненту. Перед началом работы определите тип файла и версию платформы, с которой он совместим. Внешние компоненты дополнительно делятся по разрядности (32/64 бита) и по месту выполнения — на клиенте или на сервере.

Ниже разобраны все основные сценарии: от подключения DLL в коде до добавления подсистемы в конфигурацию через сравнение и объединение. Каждый раздел завершается признаками успешного результата, чтобы вы могли сразу проверить подключение.

Определяем тип библиотеки перед подключением

Формат файла однозначно указывает на способ подключения. Файлы .dll — это внешние компоненты, они подключаются программно или помещаются в макет конфигурации. Файлы .epf и .erf — внешние обработки и отчёты, их код вызывается через объект обработки. Файлы .cf и .cfu — выгрузки конфигурации или подсистем, внедряемые через конфигуратор. Файлы .cfe — расширения, подключаемые без изменения основной конфигурации.

Отдельный случай — библиотеки, поставляемые в виде архива с исходным кодом на встроенном языке 1С (набор процедур и функций). Такой код переносится в общий модуль конфигурации. Это самый простой и самый безопасный вариант: он не требует прав на загрузку бинарных файлов и работает на любой платформе, включая Linux-серверы и веб-клиент.

Подключение внешней компоненты (DLL) из кода

Стандартный способ подключения DLL — метод глобального контекста ПодключитьВнешнююКомпоненту(). В простейшем виде компонента лежит в каталоге базы или по известному пути, и вы вызываете подключение с указанием пути и типа компоненты. После успешного подключения создаётся объект компоненты, через который доступны её методы.

ПодключитьВнешнююКомпоненту("C:\Components\MyLib.dll", "MyLib", ТипВнешнейКомпоненты.Native);

Компонента = Новый("AddIn.MyLib.MyObject");

Результат = Компонента.ВыполнитьДействие();

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

Признак успешного подключения: метод вернул Истина, объект создан без исключения, тестовый вызов метода компоненты возвращает осмысленный результат, а не падает с ошибкой «Метод объекта не обнаружен».

bsl
Если ПодключитьВнешнююКомпоненту(ПутьКФайлу, "MyLib", ТипВнешнейКомпоненты.Native) Тогда
    Компонента = Новый("AddIn.MyLib.MyObject");
Иначе
    ВызватьИсключение "Не удалось подключить внешнюю компоненту";
КонецЕсли;

Подключение компоненты через макет конфигурации

Хранить DLL вне базы ненадёжно: файл могут удалить, путь изменится, на другом компьютере его не будет. Правильная практика — поместить компоненту в макет конфигурации (или в макет обработки/расширения) как двоичные данные и подключать её оттуда методом УстановитьВнешнююКомпоненту() с адресом во временном хранилище.

Порядок действий: в конфигураторе создайте общий макет типа «Двоичные данные», загрузите в него DLL. В коде получите макет, поместите во временное хранилище, вызовите установку и подключение. Для компонент, используемых в тонком и веб-клиенте, этот путь обязателен — у клиента нет прямого доступа к файловой системе сервера.

Порядок действий
  1. 1
    Создайте общий макет типа «Двоичные данные» и загрузите в него DLL
  2. 2
    В коде получите макет: ПолучитьОбщийМакет("ИмяМакета")
  3. 3
    Поместите данные во временное хранилище
  4. 4
    Вызовите УстановитьВнешнююКомпоненту(АдресХранилища)
  5. 5
    Вызовите ПодключитьВнешнююКомпоненту и создайте объект AddIn
  6. 6
    Проверьте работу тестовым вызовом метода компоненты

В клиент-серверном режиме учитывайте, где выполняется код. Если компонента нужна на сервере, DLL должна быть совместима с серверной ОС и разрядностью сервера 1С — компонента, собранная только под Windows x86, на 64-битном Linux-сервере не загрузится. Для таких случаев разработчики компонент поставляют несколько сборок, и в макет кладут ZIP-архив с вариантами под разные платформы.

Подключение кодовой библиотеки через общий модуль

Если библиотека — это набор процедур и функций на встроенном языке, её подключают как общий модуль. В конфигураторе: ветка «Общие» → «Общие модули» → добавить новый модуль, вставить код, задать имя и флаги выполнения. После обновления конфигурации базы данных функции модуля доступны из любого места: ИмяМодуля.ИмяФункции().

Ключевые настройки модуля: флаг «Сервер» — код выполняется на сервере, «Клиент (обычное приложение)» и «Клиент (управляемое приложение)» — на клиенте, «Вызов сервера» — разрешает обращаться к серверному модулю с клиента. Для библиотек с вычислениями и работой с данными обычно достаточно серверного модуля с включённым вызовом сервера.

Если конфигурация на поддержке и изменять её нельзя, общий модуль добавляют через расширение: создайте расширение, добавьте в него общий модуль — механизм тот же, но основная конфигурация остаётся неизменной и обновляется штатно.

Подключение подсистемы из БСП или сторонней библиотеки

Библиотека стандартных подсистем (БСП) и многие отраслевые библиотеки поставляются как файлы .cf, которые внедряются через «Конфигурация → Сравнить, объединить с конфигурацией из файла». В диалоге объединения отметьте только нужные подсистемы и связанные объекты — платформа сама покажет зависимости.

После объединения проверьте: обновление конфигурации базы данных прошло без ошибок, новые подсистемы видны в интерфейсе, обработчики событий (при необходимости) прописаны в модуле управляемого приложения. Многие подсистемы БСП требуют вызова своих процедур из общих обработчиков — без этого они установлены, но не работают.

Подключение через расширение конфигурации

Расширение (.cfe) — предпочтительный способ добавить библиотеку, когда конфигурация типовая и должна оставаться на полной поддержке. Расширение загружается через «Все функции → Стандартные → Управление расширениями конфигурации» или в конфигураторе, не меняя основную конфигурацию.

В расширение можно добавить общие модули, макеты с компонентами, подсистемы и роли. Ограничения: нельзя изменять состав некоторых типов объектов, а заимствованные объекты работают только в рамках переопределения. Если библиотека требует новых объектов метаданных в основной конфигурации (например, новых регистров), расширение не подойдёт — нужна доработка конфигурации.

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

Сравнение способов подключения

Общий модуль в конфигурации

Для кода на встроенном языке. Требует снятия конфигурации с поддержки, усложняет обновление.

Расширение .cfe

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

Внешняя компонента в макете

Для DLL. Работает везде, но требует сборок под каждую платформу и разрядность.

Внешняя обработка .epf

Для переносимых функций без изменения конфигурации. Медленнее и менее удобна для частых вызовов.

Проверка подключения и типичные ошибки

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

Отдельно проверьте права: если библиотека добавляет роли, назначьте их пользователям, иначе функции будут недоступны даже при корректном подключении. В файловой базе компонента подключается локально, в клиент-серверной — на том узле, где исполняется код, и это частая причина ситуации «у разработчика работает, у пользователя нет».

Типичные ошибки
01
Подключение 32-битной DLL в 64-битном процессе — компонента не загружается, ошибка без явного указания причины
02
Хранение DLL по внешнему пути вместо макета — на другом компьютере или после переноса базы подключение перестаёт работать
03
Имя общего модуля совпадает с существующим — конфликт при объединении или неоднозначность вызовов
04
Забытый флаг «Вызов сервера» — клиентский код не видит серверные функции модуля
05
Расширение добавлено, но не проверено после обновления конфигурации — платформа молча его отключила
Контрольные точки

Как проверить результат

Возврат ПодключитьВнешнююКомпоненту
Норма

Метод вернул Истина, объект AddIn создан

Тревожный признак

Вернул Ложь или исключение при создании объекта

Вызов функции общего модуля
Норма

Функция выполняется и возвращает значение

Тревожный признак

Ошибка «Процедура или функция с указанным именем не определена»

Состояние расширения
Норма

В списке расширений стоит активный статус, нет ошибок применения

Тревожный признак

Расширение отключено или помечено как несовместимое

Частые вопросы

Можно ли подключить библиотеку без конфигуратора?

Да, в двух случаях: внешнюю обработку .epf можно открыть прямо в режиме предприятия через «Файл → Открыть» (если не запрещено правами и настройками безопасности), а расширение .cfe — загрузить через «Управление расширениями конфигурации» в режиме предприятия. Общие модули и подсистемы без конфигуратора добавить нельзя.

Почему компонента работает на одном компьютере и не работает на другом?

Чаще всего дело в разрядности процесса 1С, отсутствии системных зависимостей DLL (например, нужной версии Visual C++ Redistributable) или блокировке антивирусом. Проверьте разрядность клиента 1С, установите зависимости и добавьте файл в исключения защитного ПО.

Чем расширение лучше изменения конфигурации?

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

Как подключить библиотеку для работы в веб-клиенте?

Код на встроенном языке работает в веб-клиенте без ограничений. Внешняя компонента должна быть специально собрана для веб-клиента и упакована по правилам платформы; обычная DLL, рассчитанная на толстый клиент, в браузере работать не будет.

Что делать, если после объединения с библиотекой база не обновляется?

Откройте протокол ошибок обновления конфигурации базы данных — там указаны проблемные объекты. Типичные причины: конфликт имён, ссылки на отсутствующие объекты, ошибки реструктуризации. Если разобраться не удаётся, восстановите базу из резервной копии и повторите объединение с меньшим набором объектов.

Можно ли использовать одну компоненту на сервере и на клиенте одновременно?

Да, если у вас есть сборки под обе среды: серверную (под ОС и разрядность сервера 1С) и клиентскую. Обычно их упаковывают в один ZIP-архив в макете, и платформа выбирает подходящий вариант при установке.

Итог

Что важно запомнить

Сначала определите формат библиотеки: DLL подключается как внешняя компонента, код — через общий модуль, подсистемы — через объединение, для типовых конфигураций предпочтительно расширение. Храните компоненты в макетах, проверяйте возвращаемые значения и всегда делайте резервную копию перед изменением конфигурации.