Skip to content

1С (OData)

OPORA подключается к 1С через стандартный REST/OData интерфейс. Работает с любой конфигурацией (УТ, ERP, Бухгалтерия, Розница, ЗУП, custom) — если в конфигурации включён OData service, OPORA умеет читать и записывать.

На стороне вашего 1С-администратора:

  1. Открыть конфигуратор → «Администрирование»«Публикация на веб-сервере»
  2. Галочки:
    • «Публиковать стандартный интерфейс OData»
    • «Публиковать тонкий клиент» (опционально)
  3. Применить → сервер публикации (обычно Apache / IIS) перезапустится
  4. Убедитесь что https://your-1c-server.ru/InfoBaseName/odata/standard.odata/ отдаёт XML metadata (браузером)

2. Заведите пользователя для OPORA

Section titled “2. Заведите пользователя для OPORA”

Рекомендуем отдельного пользователя 1С (не админ’а):

  1. Конфигуратор → «Администрирование»«Пользователи»«Добавить»
  2. Имя: opora-integration
  3. Пароль: openssl rand -base64 24
  4. Роли: только нужные (например «Оператор продаж» если OPORA только создаёт документы реализации; полный админ-доступ не нужен)
  5. Сохранить

SettingsSecrets:

  • onec-url: полный URL OData endpoint’а (https://your-1c-server.ru/ InfoBaseName/odata/standard.odata)
  • onec-username: opora-integration
  • onec-password: пароль
НодаЧто делает
onec.odata.listGET коллекции сущностей с $filter / $select / $top / $skip / $orderby
onec.odata.getGET одной сущности по guid’у
onec.odata.createPOST — создание
onec.odata.updatePATCH — обновление по guid’у

5. Пример: создать документ реализации

Section titled “5. Пример: создать документ реализации”
yookassa.webhook.trigger (event: payment.succeeded)
data_table.rows.get
table = "orders"
filter = {payment_id: {{trigger.object.id}}}
onec.odata.create
entity = "Document_РеализацияТоваровУслуг"
data = {
"Номер": "{{get.row.order_number}}",
"Дата": "{{get.row.created_at}}",
"Контрагент_Key": "{{get.row.customer_guid}}",
"Организация_Key": "00000000-0000-0000-0000-000000000042",
"СуммаДокумента": {{trigger.object.amount.value}}
}

Имена сущностей и полей зависят от вашей конфигурации 1С — смотрите metadata (/$metadata endpoint) чтобы узнать точные имена. Кириллица в именах — нормально, OPORA URL-encode’ит сам.

Имена полей в конфигурациях

Section titled “Имена полей в конфигурациях”

УТ 11.5:

  • Document_РеализацияТоваровУслуг
  • Catalog_Контрагенты
  • Catalog_Номенклатура

ERP 2.x:

  • Document_ЗаказКлиента
  • Document_РеализацияТоваровУслуг
  • Catalog_Партнеры

Бухгалтерия 3.0:

  • Document_РеализацияТоваровУслуг
  • Document_СчетНаОплатуПокупателю

Полный список генерируется автоматически 1С’ом и виден в $metadata.

OData-фильтры через $filter:

onec.odata.list
entity = "Catalog_Контрагенты"
filter = "НаименованиеПолное eq 'ООО Ромашка'"
select = "Ref_Key,Наименование,ИНН"
top = 10

Операторы: eq, ne, gt, lt, ge, le, and, or, startswith(Наименование, 'Ромашка'), contains(...).

  • Пользователь / пароль не верен
  • Или: в 1С пользователь залочен Блокировать вход → разблокировать в «Администрирование → Пользователи»
  • Или: OData не опубликован (вернитесь к § 1)
  • Чаще всего — имя сущности неверное (опечатка в кириллице). Проверьте $metadata
  • Для create / update: проверьте обязательные поля конфигурации. Документ не может быть создан без, например, Организация и Контрагент

Таймауты на больших выборках

Section titled “Таймауты на больших выборках”

1С-сервер медленный, OPORA по умолчанию даёт 30 секунд. Для массовых импортов используйте top + skip пагинацию и control.foreach с малым concurrency.

«Не указан измерение регистра»

Section titled “«Не указан измерение регистра»”

Проводимые документы часто требуют дополнительных реквизитов (например, склад). 1С вернёт это в теле ошибки — читайте внимательно.

  • МойСклад — альтернатива 1С для SaaS-учёта (гайд в следующей итерации; пока moysklad.customerorder.create нода работает аналогично — см. providers matrix)
  • Order-to-1C pipeline — cookbook-рецепт в подготовке; пока see «Refund coordinator» как reference, 1С-часть паттерна та же