Каждый день тысячи компаний вручную переносят данные между 1С и сайтом, CRM или маркетплейсом. Python решает эту проблему за несколько десятков строк кода - если знать, к какому API обращаться и какой метод выбрать под задачу.
В этой статье - три рабочих метода подключения Python к 1С:Предприятие 8.3, конкретные примеры запросов и алгоритм выбора под вашу задачу.
Зачем бизнесу Python + 1С
1С - центральная учётная система у большинства российских компаний: там хранятся остатки товаров, заказы, контрагенты, финансы. Python умеет делать то, что 1С делает плохо или вообще не умеет: вызывать внешние API, обрабатывать большие массивы данных, строить ML-модели, работать с асинхронными очередями.
Типичные задачи, которые решает связка Python + 1С:
- Синхронизация остатков товаров между 1С и интернет-магазином
- Загрузка заказов с Wildberries или Ozon в 1С-документы
- Автоматическая отправка счётов из 1С в CRM или на email
- Сбор аналитических данных из 1С в BI-систему (Power BI, Metabase)
- Генерация отчётов и их публикация в Telegram-боте
Когда интеграция окупается
Если менеджер тратит больше двух часов в день на копирование данных между системами - интеграция окупится за несколько недель. Ещё один триггер: любая задача, где данные должны быть актуальны с лагом меньше 15 минут (цены, остатки, статусы заказов).
Три метода подключения к 1С из Python
Платформа 1С:Предприятие 8.3 даёт три официальных способа интеграции и один обходной: OData, кастомные HTTP-сервисы, COM-соединение и прямой SQL.
OData - стандартный REST-интерфейс 1С
OData (Open Data Protocol) встроен в платформу начиная с версии 8.3. Это полноценный REST API: работает поверх HTTP, возвращает данные в JSON или XML, поддерживает CRUD-операции. Доступен без написания кода на стороне 1С - нужна только публикация базы на веб-сервере.
Плюсы OData: работает на Linux и Windows, не требует разработчика 1С для базового использования, поддерживает фильтрацию ($filter), выборку полей ($select), раскрытие связей ($expand), пагинацию ($top, $skip). Работает с облачным 1cfresh.com.
Минусы OData: отсутствует бизнес-логика - доступен только CRUD над объектами метаданных. Производительность при сложных запросах ниже, чем у кастомных HTTP-сервисов 1С.
Кастомные HTTP-сервисы 1С
В конфигурации 1С разработчик создаёт HTTP-сервис: описывает URL-шаблоны, методы (GET/POST/PUT) и пишет обработчики на встроенном языке 1С. Python вызывает этот endpoint как обычный REST API.
Плюсы HTTP-сервиса: полная свобода в бизнес-логике - агрегации, бизнес-правила, сложные выборки, кастомный формат ответа.
Минусы HTTP-сервиса: для написания и поддержки сервиса нужен разработчик 1С.
COM-соединение 1С с Python (только Windows)
Через V83.COMConnector Python напрямую вызывает объекты и методы конфигурации 1С. Это мощный метод - доступно буквально всё, что умеет 1С. Но работает исключительно на Windows с установленным клиентом 1С.
Плюсы COM-соединения: прямой доступ к любым объектам конфигурации, максимальная гибкость.
Минусы COM-соединения: жёсткая привязка к Windows, хрупкость при обновлениях платформы, сложность отладки.
Прямой SQL (только для чтения, осторожно)
К базе 1С можно подключиться через pyodbc и читать данные SQL-запросами. Структура таблиц 1С не документирована официально и меняется с обновлениями платформы - этот метод подходит только для разовых аналитических выгрузок, не для продакшн-интеграции.
Сравнение методов интеграции 1С с Python
| Критерий | OData | HTTP-сервис 1С | COM-соединение |
|---|---|---|---|
| Нужен 1С-разработчик | Нет | Да | Нет (нужен COM-клиент) |
| ОС | Любая | Любая | Только Windows |
| Бизнес-логика на стороне 1С | Нет | Да | Да |
| Формат данных | JSON / XML | JSON / XML / любой | Объекты COM |
| Сложность настройки | Низкая | Средняя | Высокая |
| Продакшн-надёжность | Высокая | Высокая | Низкая |
| Работает с | Да | Нет* | Нет |
| Пагинация / фильтрация | Встроена | Ручная | Ручная |
⚠️ Данные о поддержке HTTP-сервисов в 1cfresh уточняйте на .
Когда что выбрать
- OData - стартовая точка для 90% задач: читать справочники, создавать документы, синхронизировать данные. Не нужен 1С-разработчик.
- HTTP-сервис - когда нужно выполнить бизнес-операцию (провести документ, пересчитать остатки) или агрегировать данные на стороне 1С.
- COM - только для legacy Windows-систем или сценариев с локальными скриптами на том же сервере.
Как подключить Python к 1С через OData: шаг за шагом
Шаг 1. Публикация базы 1С на веб-сервере для OData
В Конфигураторе 1С: Администрирование → Публикация на веб-сервере. Задайте имя публикации (например, mybase), укажите каталог веб-сервера (IIS или Apache), активируйте галочку «Публиковать стандартный интерфейс OData».
После публикации документ метаданных доступен по адресу:
GET http://your-server/mybase/odata/standard.odata/$metadata
Для 1cfresh.com публикация уже выполнена - используйте адрес вида:
https://msk1.1cfresh.com/a/ea/XXXXXX/odata/standard.odata/
Откройте $metadata первым делом: этот endpoint возвращает XML-описание всех объектов базы (справочники, документы, регистры, их поля и типы) и заменяет любую документацию по конфигурации.
Шаг 2. GET-запрос к 1С через OData из Python - читаем контрагентов
Следующий Python-код выполняет GET-запрос к справочнику «Контрагенты» базы 1С через OData и выводит первые 10 активных записей, выбирая только поля Code, Description и Ref_Key:
import requests
from requests.auth import HTTPBasicAuth
BASE_URL = "http://your-server/mybase/odata/standard.odata"
AUTH = HTTPBasicAuth("username", "password")
url = f"{BASE_URL}/Catalog_Контрагенты"
params = {
"$format": "json",
"$select": "Description,Code,Ref_Key",
"$top": 10,
"$filter": "DeletionMark eq false",
}
response = requests.get(url, params=params, auth=AUTH)
response.raise_for_status()
contractors = response.json()["value"]
for c in contractors:
print(c["Code"], c["Description"])
Параметр
$expand=*раскрывает все связанные объекты - используйте его аккуратно, ответ может быть очень большим.
Шаг 3. POST-запрос к 1С через OData - создание контрагента из Python
Следующий код создаёт нового контрагента в справочнике 1С через POST-запрос к OData и возвращает Ref_Key (GUID) созданного объекта:
import json
import requests
from requests.auth import HTTPBasicAuth
BASE_URL = "http://your-server/mybase/odata/standard.odata"
AUTH = HTTPBasicAuth("username", "password")
new_contractor = {"Description": "ООО Ромашка", "Code": "00000123", "ИНН": "7701234567"}
response = requests.post(
f"{BASE_URL}/Catalog_Контрагенты",
params={"$format": "json"},
headers={"Content-Type": "application/json"},
data=json.dumps(new_contractor),
auth=AUTH,
)
response.raise_for_status()
print("Создан:", response.json()["Ref_Key"])
Шаг 4. PATCH и DELETE в 1С через OData - обновление и удаление объекта
Следующий код демонстрирует частичное обновление (PATCH) и пометку на удаление (DELETE) объекта 1С по его GUID (Ref_Key):
import json
import requests
from requests.auth import HTTPBasicAuth
BASE_URL = "http://your-server/mybase/odata/standard.odata"
AUTH = HTTPBasicAuth("username", "password")
ref_key = "550e8400-e29b-41d4-a716-446655440000" # GUID объекта из Ref_Key
# PATCH - частичное обновление поля Description
requests.patch(
f"{BASE_URL}/Catalog_Контрагенты(guid'{ref_key}')",
params={"$format": "json"},
headers={"Content-Type": "application/json"},
data=json.dumps({"Description": "ООО Ромашка обновлённая"}),
auth=AUTH,
)
# DELETE - пометить объект на удаление
requests.delete(f"{BASE_URL}/Catalog_Контрагенты(guid'{ref_key}')", auth=AUTH)
Ref_Key - уникальный GUID объекта в 1С, аналог первичного ключа в СУБД. Возвращается автоматически в каждом JSON-ответе OData и используется в URL для PATCH и DELETE операций.
Архитектура продакшн-интеграции Python и 1С
Микросервис на FastAPI
Для серьёзных проектов оберните логику обращения к 1С в отдельный Python-микросервис. FastAPI + Pydantic даёт автоматическую документацию (Swagger), валидацию входных данных и удобное тестирование. Docker упрощает деплой:
# docker-compose.yml (фрагмент)
services:
1c-bridge:
build: ./1c_bridge
command: uvicorn main:app --host 0.0.0.0 --port 8000
environment:
- ONS_BASE_URL=http://1c-server/mybase/odata/standard.odata
- ONS_USER=api_user
- ONS_PASS=secure_password
ports:
- "8000:8000"
Этот микросервис принимает вебхуки от Bitrix24 или маркетплейса и транслирует их в 1С-операции.
Безопасность API 1С: HTTPS и авторизация
API 1С нельзя открывать в интернет без HTTPS - трафик с Basic Auth в открытом HTTP виден любому перехватчику. Минимальная конфигурация для продакшна:
- Reverse-proxy (nginx) с SSL-сертификатом (Let's Encrypt)
- Фильтрация по IP - разрешить только серверу с Python-кодом
- Отдельный пользователь 1С для API с ограниченными правами
- Логирование всех запросов
Типичные ошибки при работе с 1С OData из Python
Ошибка 401 Unauthorized
Причина: неверный логин/пароль в Basic Auth или в настройках публикации не включена «Аутентификация пользователей 1С».
Решение: откройте Конфигуратор → Администрирование → Публикация на веб-сервере и проверьте настройки аутентификации.
Ошибка 404 Not Found
Причина: база не опубликована, опечатка в имени базы или в названии объекта метаданных (имена регистрозависимы!).
Решение: откройте $metadata endpoint - он вернёт точные имена всех доступных объектов базы.
Пустой массив value: [] в ответе
Причина: объект метаданных не включён в список публикации OData или у пользователя API нет прав на чтение этого объекта.
Решение: добавьте объект в список публикации и проверьте роли пользователя в 1С.
Кодировка в именах объектов 1С
Имена справочников на русском в URL нужно передавать как есть - библиотека requests автоматически выполнит URL-кодирование.
На практике 80% проблем с 1С API решается в первые полчаса - чаще всего это неверный URL или забытая публикация. Держите вкладку с
$metadataоткрытой.
Альтернативное мнение
Часть 1С-разработчиков настаивает: правильная интеграция должна строиться через встроенные механизмы обмена 1С (планы обмена, EnterpriseData) - они транзакционно безопасны и учитывают особенности платформы. Этот подход оправдан для сложных двусторонних синхронизаций с высокими требованиями к консистентности данных. Для большинства же задач - выгрузка каталога, создание заказов, получение остатков - OData через Python проще, быстрее и не требует экспертизы в платформе 1С.
Нетривиальный факт
Протокол OData - стандарт OASIS (как и Open Document Format), принятый в том числе Microsoft для Azure DevOps, SAP и Power BI. Это значит: Python-код, написанный для работы с 1С через OData, с минимальными правками заработает и с SAP, и с SharePoint - интерфейс один и тот же.
FAQ
Нужен ли разработчик 1С, чтобы подключить Python?
Для OData - нет. Достаточно опубликовать базу через Конфигуратор. Для кастомных HTTP-сервисов нужен специалист 1С, зато получите полную свободу в логике.
Работает ли 1С API на Linux?
OData - да, работает на любой ОС, потому что это обычный HTTP. COM-соединение привязано к Windows и не работает на Linux/Mac.
Какую библиотеку Python использовать для 1С API?
requests для синхронных вызовов - покрывает 95% задач. aiohttp или httpx - для асинхронных. FastAPI - если нужен промежуточный микросервис.
Как авторизоваться в 1С API из Python?
Стандартно - HTTP Basic Auth: HTTPBasicAuth('user', 'password') в requests. Обязательно через HTTPS в продакшне, иначе логин/пароль передаются открытым текстом.
Можно ли работать с облачным 1С (1cfresh.com)?
Да. С 2022 года поддерживает OData для чтения и записи. Документация - .
Как получить GUID (Ref_Key) объекта для PATCH/DELETE?
Ref_Key содержится в каждом JSON-ответе OData автоматически. В URL используется формат guid'550e8400-...'.
Что такое $metadata в 1С OData и зачем он нужен?
$metadata - служебный endpoint, возвращающий XML-описание всех объектов базы: типы, поля, связи. Открывайте его первым делом - он заменяет любую документацию по конфигурации.
Источники
- 1С - «REST интерфейс | Интеграция - платформа 1С:Предприятие» -
- 1cfresh.com - «Протокол OData» -
- Modus BI - «Интеграция 1С и КХД через HTTP- и WS-сервисы» -
- Surf - «Интеграция Python и 1С» -
- 42clouds - «Настройка и возможности интерфейса OData» -




.svg.webp)


