Интеграция 1С 8.3 с сайтом, CRM и другими программами: выбор способа и настройка

· 10 мин

Содержание

Чтобы подключить сервисы 1С к внешней системе, базу публикуют на веб-сервере (Apache или IIS) через Конфигуратор → Администрирование → Публикация на веб-сервере. После этого сайт, CRM или мобильное приложение обращаются к 1С по HTTP: к своим HTTP-сервисам по адресу /hs/... или к готовому REST-интерфейсу OData по адресу /odata/standard.odata/. Когда веб-сервер не нужен, остаются обмен файлами и COM-соединение.

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

Если под «сервисами 1С» вы имеете в виду встроенные интернет-сервисы (1С:Контрагент, курсы валют, 1С-ЭДО), их подключают иначе — через Администрирование → Интернет-поддержка и сервисы и логин портала 1С:ИТС. Здесь речь об интеграции базы со сторонними программами.

Подготовка: что выяснить до подключения

Начните не с кода, а с вопросов к задаче. От ответов зависит способ.

  • 🔁 Направление. Внешняя система забирает данные из 1С, 1С сама отправляет данные наружу, или обмен двусторонний.
  • ⏱ Частота. Раз в сутки, раз в 15 минут или в момент события (новый заказ на сайте).
  • 📦 Объём. Десяток заказов в день и выгрузка 50 000 номенклатурных позиций — разные архитектуры.
  • 🌐 Сеть. Видят ли системы друг друга напрямую, нужен ли доступ из интернета, есть ли прокси.
  • 🗄 Вариант базы. Файловая или клиент-серверная. От этого зависит работа регламентных заданий и нагрузка.
  • ✏️ Право менять конфигурацию. Для своих HTTP-сервисов нужна доработка. Если конфигурация на поддержке и снимать её нельзя, доработку делают расширением.

Какой способ выбрать

СпособКогда подходитОграничения и риски
HTTP-сервис (REST)Сайт или CRM обращается к 1С онлайн, нужен свой формат JSONНужна доработка и публикация на веб-сервере
Стандартный интерфейс ODataНужно читать и записывать справочники и документы без программированияСтруктура данных повторяет метаданные 1С, бизнес-логику обойти легко
Исходящий HTTP-запрос из 1С1С сама отправляет данные во внешний APIНужен доступ из сервера 1С в интернет, обработка ошибок
Обмен файлами (XML, JSON, CSV)Системы не видят друг друга, обмен по расписаниюЗадержка, контроль «файл забрали или нет»
COM-соединениеВнешняя программа на Windows в той же сетиТолько Windows, совпадение разрядности, медленно на больших объёмах
Синхронизация данных (типовая)Обмен между двумя типовыми конфигурациями 1СРаботает только между поддерживаемыми парами конфигураций

Публикация базы на веб-сервере для подключения сервисов

Без публикации HTTP-сервисы и OData недоступны снаружи. Порядок для Windows и Apache 2.4:

  1. Установите Apache 2.4 (или включите роль IIS) на сервере, который видит базу 1С.
  2. При установке платформы отметьте компонент «Модули расширения веб-сервера». Без него в списке веб-серверов публикации будет пусто.
  3. Запустите Конфигуратор от имени администратора Windows: публикация меняет файл httpd.conf.
  4. Откройте Администрирование → Публикация на веб-сервере.
  5. Задайте имя публикации латиницей, например buh. Это имя войдёт в адрес: http://server/buh/.
  6. Отметьте нужное: «Публиковать HTTP-сервисы по умолчанию», «Публиковать стандартный интерфейс OData», при необходимости веб-сервисы (SOAP).
  7. Нажмите «Опубликовать» и перезапустите службу Apache.

Тот же результат даёт утилита webinst из каталога bin платформы. Это удобно для повторной публикации на нескольких серверах:

"C:\Program Files\1cv8\8.3.24.1548\bin\webinst.exe" -publish -apache24 -wsdir buh -dir "C:\Apache24\htdocs\buh" -connstr "Srvr=srv1c;Ref=buh;" -confpath "C:\Apache24\conf\httpd.conf"

Номер версии в пути подставьте свой. Публикация создаёт в каталоге файл default.vrd — в нём хранятся строка соединения и настройки сервисов.

Перезапуск Apache обрывает текущие сеансы веб-клиента и все запросы, которые идут через эту публикацию. Делайте его вне рабочего времени или предупредите пользователей.

Проверка: откройте в браузере http://server/buh/odata/standard.odata/. Если вместо ошибки появилось окно авторизации или XML-список ресурсов — публикация работает.

HTTP-сервисы и REST API: как подключить внешнюю систему к 1С

Есть два пути: написать свой HTTP-сервис или включить готовый OData.

Свой HTTP-сервис

HTTP-сервис — объект метаданных в ветке Общие → HTTP-сервисы. У него есть корневой URL, шаблоны адресов и методы (GET, POST и другие). Каждому методу назначается функция-обработчик в модуле сервиса.

Пример: сервис с корневым URL api, шаблон /orders/{number}, метод GET. Внешняя система запрашивает http://server/buh/hs/api/orders/125:

Функция ЗаказGET(Запрос)

    Номер = Запрос.ПараметрыURL.Получить("number");
    Если Не ЗначениеЗаполнено(Номер) Тогда
        Возврат Новый HTTPСервисОтвет(400);
    КонецЕсли;

    Данные = Новый Структура("number, status", Номер, "accepted");

    Запись = Новый ЗаписьJSON;
    Запись.УстановитьСтроку();
    ЗаписатьJSON(Запись, Данные);

    Ответ = Новый HTTPСервисОтвет(200);
    Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
    Ответ.УстановитьТелоИзСтроки(Запись.Закрыть());
    Возврат Ответ;

КонецФункции

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

💡 Возвращайте честные коды ответа: 400 — неверный запрос, 404 — объект не найден, 500 — ошибка на стороне 1С. Внешней системе проще обработать код, чем разбирать текст ошибки.

Стандартный интерфейс OData

OData позволяет читать и менять объекты без программирования. После публикации нужно указать, какие объекты доступны. В конфигурациях на БСП (Бухгалтерия 3.0, УТ 11, ЗУП 3.1) это делается в разделе Администрирование → Синхронизация данных, по ссылке настройки стандартного интерфейса OData. Там же создаётся отдельный пользователь для доступа.

Адреса строятся по типу и имени объекта:

http://server/buh/odata/standard.odata/$metadata
http://server/buh/odata/standard.odata/Catalog_Контрагенты?$format=json
http://server/buh/odata/standard.odata/Document_РеализацияТоваровУслуг?$format=json&$top=10

Запись через OData обходит формы и часть проверок, которые делает пользователь в интерфейсе. Документ можно создать с пустыми обязательными реквизитами. Для записи данных надёжнее свой HTTP-сервис с проверками.

Исходящий запрос из 1С во внешний API

Когда инициатор — 1С (отправить заказ в службу доставки, забрать остатки маркетплейса), используют HTTPСоединение:

Соединение = Новый HTTPСоединение("api.example.ru", 443,,,, 30, Новый ЗащищенноеСоединениеOpenSSL);

Запрос = Новый HTTPЗапрос("/v1/orders?status=new");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);

Ответ = Соединение.Получить(Запрос);
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();

Если Ответ.КодСостояния <> 200 Тогда
    ЗаписьЖурналаРегистрации("Интеграция.Заказы", УровеньЖурналаРегистрации.Ошибка,,,
        СтрШаблон("Код ответа %1: %2", Ответ.КодСостояния, ТелоОтвета));
    Возврат;
КонецЕсли;

Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(ТелоОтвета);
Заказы = ПрочитатьJSON(Чтение, Истина);
Чтение.Закрыть();

Шестой параметр конструктора — таймаут в секундах. Не оставляйте его пустым: без таймаута зависший внешний сервис подвесит и сеанс 1С.

Обмен данными через файлы и COM-соединение

Файловый обмен

Самый простой и самый устойчивый к сбоям сети способ. Одна сторона кладёт файл в общий каталог или на FTP, другая забирает по расписанию.

Практика, которая убирает большинство проблем:

  • 📁 Пишите файл под временным именем (orders.tmp), а после записи переименовывайте в orders.json. Так вторая сторона не прочитает недописанный файл.
  • 🗂 Обработанные файлы переносите в папку done, ошибочные — в error. Не удаляйте сразу: это ваш архив для разбора.
  • 🔤 Договоритесь о кодировке. Для JSON и XML — UTF-8. CSV из Excel часто приходит в Windows-1251.
  • 🔑 Сопоставляйте объекты по устойчивому ключу: ИНН, артикул, внешний идентификатор. Не по наименованию.

Между типовыми конфигурациями 1С файловый обмен уже настроен: Администрирование → Синхронизация данных создаёт обмен в формате EnterpriseData, каталог или FTP выбирается в мастере. Для нетиповых сочетаний правила обмена делают в конфигурации «Конвертация данных ».

Сопоставление полей
order_id (сайт)→Номер заказа клиента / внешний идентификатор
customer_inn→Контрагент (поиск по ИНН)
sku→Номенклатура (поиск по артикулу)
qty→Количество
price→Цена
vat_rate→Ставка НДС

COM-соединение

Внешняя программа на Windows (скрипт PowerShell, Python, другая учётная система) подключается к базе как клиент через компонент V83.COMConnector. Перед этим компонент регистрируют один раз под администратором:

regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\comcntr.dll"

Подключение из PowerShell к клиент-серверной базе:

$connector = New-Object -ComObject "V83.COMConnector"
$base = $connector.Connect('Srvr="srv1c";Ref="buh";Usr="exchange";Pwd="***";')

Для файловой базы строка начинается с File="D:\Bases\buh";.

Разрядность вызывающей программы и зарегистрированного comcntr.dll должна совпадать. 32-битный скрипт не увидит 64-битный компонент — отсюда ошибка «Недопустимая строка с указанием класса».

Каждое COM-подключение — полноценный сеанс 1С: он занимает лицензию и держит память. Не открывайте соединение на каждую запись, держите одно на пакет операций.

Регламентные задания: как автоматизировать подключённые сервисы

Обмен по расписанию в 1С строится на регламентных заданиях. Это объект метаданных Общие → Регламентные задания с процедурой в общем модуле и расписанием.

Где управлять в пользовательском режиме (конфигурации на БСП): Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. Там видно, когда задание запускалось, с каким результатом, и можно запустить его вручную.

Что учесть:

  1. Клиент-серверная база . Задания выполняет кластер серверов 1С сам, без открытых сеансов пользователей. Проверьте, что в свойствах информационной базы в консоли кластера не включена «Блокировка регламентных заданий».
  2. Файловая база. Задания выполняются в одном из открытых клиентских сеансов. Никто не зашёл в базу — обмен не идёт. Для регулярной интеграции это повод перейти на клиент-серверный вариант.
  3. Пользователь задания. Укажите отдельного пользователя с нужными правами, а не администратора.
  4. Интервал. Для обмена заказами обычно хватает 5–15 минут. Запуск каждую минуту при выгрузке тысяч позиций создаёт очередь и блокировки.
  5. Повтор при сбое. В расписании есть настройки повтора при аварийном завершении. Задайте 2–3 попытки с паузой, чтобы кратковременный сбой сети не останавливал обмен до утра.

💡 Для событийного обмена (заказ создан — сразу отправить) не вызывайте внешний сервис прямо при записи документа. Если сервис не ответит, пользователь не сможет провести документ . Лучше записать документ в очередь (регистр сведений ), а отправлять её регламентным заданием.

Диагностика ошибок интеграции и логирование

Ошибку ищут по цепочке: внешняя система → веб-сервер → 1С.

Диагностика: выберите симптом

Журнал регистрации

Журнал открывают через Администрирование → Обслуживание → Журнал регистрации или из Конфигуратора. Отбирайте по пользователю интеграции и по времени ошибки.

Свои события пишите с понятным именем, чтобы их легко было отфильтровать:

ЗаписьЖурналаРегистрации("Интеграция.Сайт", УровеньЖурналаРегистрации.Информация,,,
    СтрШаблон("Загружено заказов: %1", Формат(Количество, "ЧГ=0")));

Хорошая практика — хранить не только ошибки, но и итог каждого сеанса обмена: сколько получено, создано, пропущено. Для разбора спорных случаев сохраняйте тело входящего запроса в отдельный регистр сведений с датой и сроком хранения 2–4 недели.

Логи веб-сервера

Журнал 1С не покажет запросы, которые не дошли до базы. Их ищите в access.log и error.log Apache (по умолчанию в каталоге logs) или в журналах IIS. Код ответа и время запроса там видны сразу.

Безопасность данных при подключении внешних сервисов

Интеграционный доступ — частая дыра. Минимальный набор мер:

  • 👤 Отдельный пользователь под каждую внешнюю систему. Роли — только на нужные объекты и сервисы, без «Полных прав».
  • 🔒 HTTPS. Basic-авторизация по HTTP передаёт пароль в открытом виде. Сертификат на веб-сервер ставится один раз, Let’s Encrypt бесплатен.
  • 🌍 Не открывайте публикацию всему интернету. Ограничьте доступ по IP-адресам внешней системы на уровне файрвола или веб-сервера, либо используйте VPN.
  • 🗝 Пароли и токены не в коде. В конфигурациях на БСП для этого есть безопасное хранилище; в коде модуля и в константах, видимых пользователям, их не держат.
  • 🧩 Внешние обработки для обмена запускайте в безопасном режиме или с профилем безопасности, если интеграцию писал подрядчик.
  • 📏 Ограничение объёма. В своём HTTP-сервисе проверяйте размер входящего тела и количество строк, чтобы один ошибочный запрос не загрузил сервер.

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

Перед запуском интеграции в работу
Выполнено: 0 / 8

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

Расходует ли подключение по HTTP лицензии 1С?
Да. Обращение к HTTP-сервису или OData открывает сеанс в базе, и он занимает клиентскую лицензию. При частых запросах включите повторное использование сеансов в настройках публикации, чтобы не открывать новый сеанс на каждый запрос.
Можно ли подключить сервисы к базе в облаке 1С:Фреш?
Свою публикацию на веб-сервере там сделать нельзя, но стандартный интерфейс OData в сервисе доступен. Возможности ограничены настройками провайдера, их уточняют у него.
Нужен ли веб-сервер для файловой базы?
Для HTTP-сервисов и OData — да, независимо от варианта базы. Для обмена файлами и COM-соединения веб-сервер не нужен.
Что выбрать для сайта на 1С-Битрикс: модуль обмена или свой сервис?
Для стандартного обмена каталогом и заказами с сайтом в типовых конфигурациях есть готовый механизм обмена по протоколу CommerceML. Свой HTTP-сервис нужен, когда требуется нестандартный состав данных или онлайн-ответ (остаток, цена для конкретного клиента).
Почему через OData не видно нужного справочника?
Объект не включён в состав стандартного интерфейса OData. Добавьте его в настройках состава и повторите запрос к $metadata.