Интеграция 1С 8.3 с сайтом, CRM и другими программами: выбор способа и настройка
Содержание
Чтобы подключить сервисы 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:
- Установите Apache 2.4 (или включите роль IIS) на сервере, который видит базу 1С.
- При установке платформы отметьте компонент «Модули расширения веб-сервера». Без него в списке веб-серверов публикации будет пусто.
- Запустите Конфигуратор от имени администратора Windows: публикация меняет файл
httpd.conf. - Откройте
Администрирование → Публикация на веб-сервере. - Задайте имя публикации латиницей, например
buh. Это имя войдёт в адрес:http://server/buh/. - Отметьте нужное: «Публиковать HTTP-сервисы по умолчанию», «Публиковать стандартный интерфейс OData», при необходимости веб-сервисы (SOAP).
- Нажмите «Опубликовать» и перезапустите службу 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 выбирается в мастере. Для нетиповых сочетаний правила обмена делают в конфигурации «Конвертация данных
».
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С сам, без открытых сеансов пользователей. Проверьте, что в свойствах информационной базы в консоли кластера не включена «Блокировка регламентных заданий».
- Файловая база. Задания выполняются в одном из открытых клиентских сеансов. Никто не зашёл в базу — обмен не идёт. Для регулярной интеграции это повод перейти на клиент-серверный вариант.
- Пользователь задания. Укажите отдельного пользователя с нужными правами, а не администратора.
- Интервал. Для обмена заказами обычно хватает 5–15 минут. Запуск каждую минуту при выгрузке тысяч позиций создаёт очередь и блокировки.
- Повтор при сбое. В расписании есть настройки повтора при аварийном завершении. Задайте 2–3 попытки с паузой, чтобы кратковременный сбой сети не останавливал обмен до утра.
💡 Для событийного обмена (заказ создан — сразу отправить) не вызывайте внешний сервис прямо при записи документа. Если сервис не ответит, пользователь не сможет провести документ . Лучше записать документ в очередь (регистр сведений ), а отправлять её регламентным заданием.
Диагностика ошибок интеграции и логирование
Ошибку ищут по цепочке: внешняя система → веб-сервер → 1С.
Журнал регистрации
Журнал открывают через Администрирование → Обслуживание → Журнал регистрации или из Конфигуратора. Отбирайте по пользователю интеграции и по времени ошибки.
Свои события пишите с понятным именем, чтобы их легко было отфильтровать:
ЗаписьЖурналаРегистрации("Интеграция.Сайт", УровеньЖурналаРегистрации.Информация,,,
СтрШаблон("Загружено заказов: %1", Формат(Количество, "ЧГ=0")));
Хорошая практика — хранить не только ошибки, но и итог каждого сеанса обмена: сколько получено, создано, пропущено. Для разбора спорных случаев сохраняйте тело входящего запроса в отдельный регистр сведений с датой и сроком хранения 2–4 недели.
Логи веб-сервера
Журнал 1С не покажет запросы, которые не дошли до базы. Их ищите в access.log и error.log Apache (по умолчанию в каталоге logs) или в журналах IIS. Код ответа и время запроса там видны сразу.
Безопасность данных при подключении внешних сервисов
Интеграционный доступ — частая дыра. Минимальный набор мер:
- 👤 Отдельный пользователь под каждую внешнюю систему. Роли — только на нужные объекты и сервисы, без «Полных прав».
- 🔒 HTTPS. Basic-авторизация по HTTP передаёт пароль в открытом виде. Сертификат на веб-сервер ставится один раз, Let’s Encrypt бесплатен.
- 🌍 Не открывайте публикацию всему интернету. Ограничьте доступ по IP-адресам внешней системы на уровне файрвола или веб-сервера, либо используйте VPN.
- 🗝 Пароли и токены не в коде. В конфигурациях на БСП для этого есть безопасное хранилище; в коде модуля и в константах, видимых пользователям, их не держат.
- 🧩 Внешние обработки для обмена запускайте в безопасном режиме или с профилем безопасности, если интеграцию писал подрядчик.
- 📏 Ограничение объёма. В своём HTTP-сервисе проверяйте размер входящего тела и количество строк, чтобы один ошибочный запрос не загрузил сервер.
Перед первым запуском записи данных в рабочую базу сделайте резервную копию и проверьте обмен на копии базы. Ошибка в сопоставлении полей за один прогон создаёт сотни дублей контрагентов и номенклатуры.