Администрирование · 10 мин
Внешнее соединение в 1С: что это и как его настроить
Внешнее соединение в 1С: что это, как работает COM-соединение между базами, настройка V83.COMConnector, примеры кода, типичные ошибки и способы их устранения.
Внешнее соединение в 1С — это способ подключиться к информационной базе извне: из другой базы 1С, из стороннего приложения или из скрипта, не запуская полноценный клиент 1С:Предприятие. Через такое соединение можно читать и записывать данные, вызывать функции общих модулей, создавать документы и справочники — при этом пользовательский интерфейс базы не открывается вообще.
Чаще всего под внешним соединением понимают COM-соединение через объект V83.COMConnector (для платформы 8.3), но термин шире: к внешним подключениям относят также работу через веб-сервисы, HTTP-сервисы и механизм внешнего соединения при запуске обработок. В этой статье разберём, как устроен каждый вариант, когда какой выбирать и как настроить COM-соединение между двумя базами 1С шаг за шагом.
Типовой сценарий выглядит так: есть база «Управление торговлей» и база «Бухгалтерия», нужно переносить документы из одной в другую по расписанию. Вместо выгрузки в файл база-источник подключается к базе-приёмнику напрямую через внешнее соединение и записывает объекты в обход пользователя. Это быстрее файлового обмена, но требует аккуратной настройки прав и понимания ограничений.
Как устроено внешнее соединение: основные варианты
Термин «внешнее соединение» объединяет несколько технически разных механизмов. Их важно различать, потому что настройка, требования к инфраструктуре и ограничения у них отличаются.
COM-соединение (V83.COMConnector). Классический способ для Windows-инфраструктуры. Одна база (или внешняя программа) создаёт COM-объект коннектора, указывает строку подключения к целевой базе и получает объектную ссылку на неё. Работает и с файловыми, и с клиент-серверными базами.
Веб-сервисы и HTTP-сервисы. База публикуется на веб-сервере (IIS или Apache), и обращение идёт по протоколу SOAP или HTTP. Это кроссплатформенный вариант: подключаться могут системы на любой ОС и любом языке программирования. Требует публикации базы и написания кода сервиса в конфигурации.
Внешнее соединение через Automation Server (V83.Application). Похоже на COM-соединение, но запускает полноценное приложение 1С без видимого окна. Используется реже, так как тяжелее по ресурсам и медленнее коннектора.
Когда внешнее соединение — правильный выбор
Внешнее соединение оправдано, когда нужен прямой программный доступ к данным базы: обмен между конфигурациями в реальном времени, интеграция с сайтом или CRM, фоновая загрузка данных из сторонних систем, запуск обработок из планировщика задач Windows. Во всех этих случаях открывать сеанс пользователя не требуется — достаточно технической учётной записи.
Не стоит использовать COM-соединение, если базы находятся на разных площадках без общей сети, если подключаться должна система на Linux, или если требуется высокая отказоустойчивость при нестабильном канале. В этих сценариях надёжнее HTTP-сервисы или очереди сообщений: они не зависят от платформы и проще переживают обрывы связи.
Сравнение способов подключения
Быстро и просто для Windows-сети; не работает кроссплатформенно и требует совпадения битности компонентов
Подходит для интеграции разнородных систем; требует публикации базы и разработки сервиса
Гибкий REST-подобный обмен, удобен для мобильных и веб-клиентов; формат данных нужно проектировать самостоятельно
Не требует постоянной связи между базами; медленнее и с задержкой актуальности данных
Настройка COM-соединения между базами 1С
Для работы COM-соединения нужно три вещи: зарегистрированный компонент коннектора на машине, откуда выполняется подключение; строка соединения с целевой базой; учётная запись в целевой базе с достаточными правами. Разберём каждый шаг.
Компонент V83.COMConnector регистрируется автоматически при установке платформы, если при установке отмечен соответствующий компонент. Если соединение создаётся с сервера 1С или с другой машины без полной установки, компонент нужно зарегистрировать вручную командой regsvr32 для библиотеки comcntr.dll из каталога bin нужной версии платформы. Важно: битность компонента должна совпадать с битностью процесса, который его вызывает.
Строка соединения для файловой базы выглядит как File="C:\Bases\Trade";Usr="Robot";Pwd="secret", для клиент-серверной — Srvr="Server1C";Ref="Trade";Usr="Robot";Pwd="secret". В коде подключение выполняется в несколько строк:
Коннектор = Новый COMОбъект("V83.COMConnector");
Соединение = Коннектор.Connect("Srvr=""Server1C"";Ref=""Trade"";Usr=""Robot"";Pwd=""secret""");
НовыйДок = Соединение.Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДок.Дата = ТекущаяДата();
НовыйДок.Записать();
- 1Убедитесь, что на машине-источнике зарегистрирован компонент V83.COMConnector нужной версии платформы
- 2Создайте в целевой базе отдельного пользователя с минимально необходимыми правами
- 3Сформируйте строку соединения: File для файловой базы или Srvr+Ref для клиент-серверной
- 4Напишите код подключения с обработкой исключений через Попытка/Исключение
- 5Проверьте подключение тестовым запросом — например, чтением одного элемента справочника
- 6Настройте регламентное задание или внешний вызов для регулярной работы
Безопасность и права доступа
Внешнее соединение проходит аутентификацию как обычный сеанс: логин и пароль проверяются, действуют все роли и ограничения доступа. Это значит, что учётная запись для обмена должна иметь только те права, которые реально нужны: если загружаются только документы реализации, не давайте ей права администратора. Компрометация такого пароля — прямой путь к порче данных.
Пароль в открытом виде в коде — частая и опасная практика. Безопаснее хранить параметры подключения в защищённом хранилище, в настройках обмена внутри базы с ограниченным доступом или передавать их через переменные окружения. Также учитывайте: каждое COM-соединение занимает одну лицензию 1С на время сеанса, поэтому соединение нужно явно освобождать после завершения работы, присваивая переменной значение Неопределено.
Типичные ошибки и их устранение
Большинство проблем с внешним соединением диагностируется по тексту исключения. Ошибка «Класс не зарегистрирован» означает, что компонент V83.COMConnector не установлен или не совпадает битность — проверьте регистрацию comcntr.dll. Ошибка доступа к файловой базе чаще всего связана с тем, что база открыта в монопольном режиме или у процесса нет прав на каталог.
Для клиент-серверных баз типичная проблема — неверное имя сервера или базы в строке соединения, а также блокировка соединения брандмауэром. Если подключение проходит, но данные не видны, проверьте права пользователя и дату запрета изменения данных: соединение подчиняется всем ограничениям целевой базы.
Как проверить, что соединение работает корректно
После настройки проверьте соединение минимальным тестом: прочитайте один элемент справочника или получите количество документов за день. Если чтение проходит, но запись падает — проблема в правах или в логике заполнения объектов, а не в самом соединении. Полезно журналировать каждый сеанс обмена: время подключения, количество обработанных объектов, текст ошибок.
В клиент-серверном варианте активные внешние соединения видны в консоли кластера серверов 1С в списке сеансов — они отображаются с типом «COM-соединение». Это удобно для контроля: если после завершения обмена сеанс остаётся висеть, значит, код не освобождает соединение.
Как проверить результат
Запрос возвращает данные без исключений
Ошибка аутентификации или «класс не зарегистрирован»
Сеанс появляется на время обмена и закрывается после
Сеансы накапливаются и не завершаются
Документ создан, проведён, виден в интерфейсе
Документ не создаётся или создаётся пустым
События обмена фиксируются без ошибок
Ошибки доступа или блокировок в каждом сеансе
Частые вопросы о внешнем соединении 1С
Чем внешнее соединение отличается от обычного сеанса пользователя?
Функционально — почти ничем: действуют те же права и лицензии. Разница в том, что внешнее соединение не запускает интерфейс и управляется полностью программно из внешнего кода, а сеанс пользователя открывает клиентское приложение.
Расходует ли COM-соединение лицензию 1С?
Да, на время активного соединения занимается одна лицензия, как при обычном сеансе. Поэтому важно освобождать соединение сразу после завершения работы, иначе лицензии будут исчерпаны «зависшими» сеансами.
Можно ли подключиться к базе 1С из Linux или из Python?
Напрямую через COM — нет, это Windows-технология. Для кроссплатформенных сценариев опубликуйте в целевой базе HTTP-сервис или веб-сервис и обращайтесь к нему по HTTP из любого языка, включая Python.
Что делать при ошибке «Класс не зарегистрирован»?
Зарегистрируйте компонент вручную: выполните regsvr32 для файла comcntr.dll из каталога bin нужной версии платформы. Убедитесь, что битность регистрируемой библиотеки совпадает с битностью процесса, который создаёт COM-объект.
Безопасно ли давать внешнему соединению полные права?
Нет. Создайте отдельного пользователя с минимально необходимым набором ролей. Если учётные данные утечут, ущерб будет ограничен только теми объектами, к которым у этой записи есть доступ.
Почему соединение обрывается при больших объёмах данных?
Чаще всего из-за таймаутов и длинных транзакций. Разбивайте обмен на порции, записывайте объекты пакетами по несколько десятков, фиксируйте прогресс, чтобы при обрыве можно было продолжить с места сбоя, а не начинать заново.
Что важно запомнить
Внешнее соединение — это программный доступ к базе 1С без интерфейса, чаще всего через V83.COMConnector. Для настройки нужны зарегистрированный компонент, строка соединения и отдельный пользователь с минимальными правами. Соединение расходует лицензию и требует явного освобождения, а отладку обмена всегда проводите на копии базы.