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

Администрирование · 13 мин

Запуск внешнего соединения 1С: что это такое и как его использовать

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

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

Термин «внешнее соединение» используется в двух близких смыслах. Первый — режим запуска толстого клиента с ключом /Execute или через объект ВнешнееСоединение, когда сеанс работает без пользовательского интерфейса. Второй — программный объект COM-соединителя (V83.COMConnector), который позволяет установить соединение с базой из внешнего приложения. Оба сценария решают одну задачу: выполнить код внутри базы 1С извне.

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

Что такое внешнее соединение и как оно работает

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

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

Важно понимать различие скорости и возможностей. COM-соединение передаёт каждый вызов через механизм COM, что заметно медленнее при обходе больших выборок. Встроенное внешнее соединение между базами 1С работает быстрее, но доступно только из кода на встроенном языке. В обоих случаях недоступны интерактивные возможности: предупреждения, вопросы пользователю, открытие форм — вызов таких методов приведёт к ошибке.

Когда внешнее соединение — правильный выбор

Внешнее соединение оправдано, когда нужно выполнить логику именно внутри целевой базы: вызвать экспортную функцию общего модуля, провести документ со всеми проверками, выполнить сложный запрос с обработкой результата на стороне 1С. Типовой сценарий — обмен между двумя самописными или доработанными конфигурациями, где стандартные планы обмена не подходят.

Другой частый случай — интеграция со сторонними системами на Windows: скрипт PowerShell, приложение на C# или Python через COM-объект забирает остатки, цены или создаёт заказы. Это просто в реализации, но привязывает решение к Windows-окружению и требует установленной платформы 1С на машине, откуда идёт подключение.

Однако внешнее соединение — не универсальный ответ. Если обмен должен работать через интернет, между разными операционными системами или с высокой нагрузкой, правильнее смотреть в сторону HTTP- и веб-сервисов, которые публикует сама 1С, либо механизмов EnterpriseData и планов обмена.

Сравнение способов интеграции

COM-соединитель (V83.COMConnector)

Подходит для Windows-скриптов и приложений; требует установленной платформы и совпадения версий, работает только локально или в локальной сети.

Объект ВнешнееСоединение в коде 1С

Быстрый обмен между двумя базами 1С; недоступен из сторонних языков, обе базы должны быть доступны с сервера.

HTTP/веб-сервисы 1С

Кроссплатформенно, работает через интернет; требует публикации на веб-сервере и разработки API внутри конфигурации.

Планы обмена / EnterpriseData

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

Как запустить внешнее соединение через COM-соединитель

Для подключения из внешнего приложения используется COM-объект V83.COMConnector. Он регистрируется в системе при установке платформы; если регистрация слетела, компоненту можно зарегистрировать вручную командой regsvr32 для библиотеки comcntr.dll из каталога bin нужной версии платформы. Разрядность имеет значение: 64-разрядное приложение требует 64-разрядного соединителя.

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

// Пример на VBScript

Set connector = CreateObject("V83.COMConnector")

Set connection = connector.Connect("Srvr=""Server1"";Ref=""Trade"";Usr=""Обмен"";Pwd=""secret"";")

// Теперь доступны данные базы

остатки = connection.Справочники.Номенклатура.Выбрать()

Внутри кода 1С аналогичное подключение выполняется проще — через объект ВнешнееСоединение либо тот же COMConnector, созданный как COMОбъект. Второй вариант до сих пор встречается в старых обработках, хотя прямое внешнее соединение предпочтительнее по производительности.

Порядок запуска COM-соединения
  1. 1
    Убедитесь, что на машине установлена платформа 1С той же версии, что и сервер, и зарегистрирована comcntr.dll нужной разрядности.
  2. 2
    Создайте в целевой базе отдельного пользователя для интеграции с минимально необходимыми правами.
  3. 3
    Сформируйте строку подключения: Srvr и Ref для серверной базы или File для файловой, плюс Usr и Pwd.
  4. 4
    Создайте объект V83.COMConnector и вызовите Connect со строкой подключения.
  5. 5
    Выполните нужные операции и освободите объект соединения, чтобы сеанс завершился и лицензия освободилась.

Запуск в режиме внешнего соединения из командной строки

Отдельный сценарий — запуск толстого клиента в режиме внешнего соединения. Исполняемый файл 1cv8.exe поддерживает параметры командной строки, позволяющие стартовать базу в нужном режиме и сразу выполнить внешнюю обработку. Это удобно для задач по расписанию: планировщик Windows запускает команду, обработка выполняется, сеанс закрывается.

cmd
"C:\Program Files\1cv8\8.3.22.1750\bin\1cv8.exe" ENTERPRISE /S"Server\Trade" /N"Обмен" /P"secret" /Execute"C:\Обмен\Загрузка.epf" /DisableStartupDialogs

Ключ /Execute указывает файл внешней обработки, которая запустится после входа. Ключи /DisableStartupDialogs и /DisableStartupMessages подавляют стартовые окна. Для файловой базы вместо /S используется /F"путь_к_каталогу". Обработка должна сама завершать сеанс вызовом ЗавершитьРаботуСистемы(Ложь), иначе процесс останется висеть.

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

Права, лицензии и безопасность

Каждое внешнее соединение — это сеанс, который занимает клиентскую лицензию. Если скрипт подключается в цикле или не освобождает объект соединения, лицензии быстро исчерпываются, и пользователи получают ошибку «не найдено свободной лицензии». Всегда явно завершайте соединение и обрабатывайте исключения, чтобы объект освобождался даже при ошибке.

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

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

Типичные ошибки и их устранение

Самая частая проблема — ошибка создания объекта V83.COMConnector («класс не зарегистрирован»). Причины: платформа не установлена на машине, не зарегистрирована comcntr.dll, либо несовпадение разрядности — 32-разрядный скрипт пытается использовать 64-разрядный компонент или наоборот. Лечится регистрацией библиотеки нужной разрядности через regsvr32 от имени администратора.

Вторая группа ошибок — отказ в подключении: неверные имя сервера или базы, недоступность сервера 1С по сети, неверный логин или пароль, блокировка базы. Текст исключения обычно содержит причину; проверяйте строку подключения, доступность сервера и то, не установлена ли в базе блокировка соединений.

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

Типичные ошибки
01
Не освобождён объект соединения — сеансы копятся, лицензии заканчиваются, пользователи не могут войти.
02
Пароль администратора в открытом виде в скрипте — компрометация всей базы при утечке файла.
03
Вызов интерактивных методов (Вопрос, ОткрытьФорму) в коде, исполняемом через внешнее соединение — исключение и обрыв обмена.
04
Несовпадение версии или разрядности COM-соединителя с сервером — ошибка создания объекта или отказ в соединении.
05
Обход больших выборок поэлементно через COM — обмен длится часами вместо минут из-за накладных расходов на каждый вызов.

Как проверить, что соединение работает корректно

После настройки проверьте базовые признаки успешного подключения. Объект соединения создался без исключения, простой запрос или чтение константы возвращает ожидаемое значение, а в консоли кластера (или в списке активных пользователей файловой базы) виден сеанс с типом «COM-соединение» или «Внешнее соединение» под нужным пользователем.

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

Контрольные точки

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

Создание объекта соединения
Норма

Connect выполняется без исключения, объект возвращён

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

Ошибка «класс не зарегистрирован» или отказ в соединении

Сеанс в консоли кластера
Норма

Виден сеанс типа COM-соединение под интеграционным пользователем

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

Сеанса нет или он под неожиданным пользователем

Завершение работы
Норма

После конца скрипта сеанс исчезает, лицензия освобождается

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

Сеанс висит, количество занятых лицензий растёт

Выполнение кода
Норма

Данные читаются/пишутся, ошибок в журнале регистрации нет

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

Исключения на интерактивных вызовах или ошибках прав

FAQ

Чем внешнее соединение отличается от COM-соединения?

Строго говоря, COM-соединение — это один из способов установить внешнее соединение: через COM-объект V83.COMConnector из внешнего приложения. Термин «внешнее соединение» шире: он включает также прямое подключение между базами 1С через объект ВнешнееСоединение и режим запуска клиента без интерфейса. В разговорной практике термины часто смешивают.

Расходует ли внешнее соединение лицензию 1С?

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

Можно ли подключиться через COM-соединитель к базе на Linux-сервере?

Сервер 1С может работать на Linux — это не проблема. Но сам COM-соединитель существует только для Windows, поэтому приложение, которое устанавливает соединение, должно работать на Windows-машине с установленной платформой 1С. Для кроссплатформенных сценариев используйте HTTP-сервисы.

Почему возникает ошибка «Класс не зарегистрирован» при создании V83.COMConnector?

Чаще всего не зарегистрирована библиотека comcntr.dll или нарушена разрядность: 32-разрядный процесс не видит 64-разрядный компонент и наоборот. Зарегистрируйте DLL нужной разрядности командой regsvr32 из каталога bin установленной платформы, запустив командную строку от имени администратора.

Можно ли через внешнее соединение открыть форму или показать сообщение пользователю?

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

Что выбрать для интеграции с сайтом: COM-соединение или HTTP-сервис?

Для сайта предпочтительнее HTTP-сервис, опубликованный на веб-сервере: он не требует установки платформы на стороне сайта, работает через стандартные протоколы и лучше масштабируется. COM-соединение оправдано только в закрытой локальной сети на Windows-инфраструктуре при небольших объёмах обмена.

Итог

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

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