Коннектор 1С¶
Коннектор 1С переносит в базу знаний компании организации, контрагентов, подразделения, номенклатуру и договоры из учётной базы 1С — через стандартный интерфейс OData, только на чтение. Статья для администраторов, которые подключают 1С к платформе. Обоснование — TAI-ADR-0056 (решение 7).
Как устроен¶
Коннектор — агент описанием onec-connector пакета company-knowledge, вид
исполнителя observer (см. Агенты описанием). Его
контейнер работает на узле fleet в сети, откуда видна база 1С, и раз в интервал
делает проход:
sequenceDiagram
participant A as onec-connector
participant O as 1С (OData)
participant CP as Control Plane
participant M as Память
A->>CP: GET /agents/me — ревизия: адрес, база, профиль, интервал
loop каждый intervalSeconds
A->>O: GET $metadata — сверка с профилем
A->>O: GET <набор>?$select=Ref_Key,DataVersion,DeletionMark,…&$top=500&$skip=…
A->>O: карточки только изменившихся записей
A->>CP: POST /knowledge/snapshots — полный снимок на объект
CP->>M: сверка: открыть, изменить, закрыть
A->>CP: ревизия изменилась? — выход 75, узел поднимет новую
end
$metadata. Профиль сверяется с базой. Объект, чьего набора сущностей или полей в базе нет, пропускается с предупреждением в журнале — его записи в базе знаний не закрываются.- Дельта по
DataVersion. По каждому объекту постранично (по 500 строк) читаютсяRef_Key,DataVersion,DeletionMarkи поля фильтра. Карточка дочитывается только у записи с новой версией, остальные берутся из кэша состояния. - Полный снимок. Из кэша собирается полный снимок источника
onec:<база>на каждый объект профиля (scope— набор сущностей, напримерCatalog_Номенклатура#items). Запись, пропавшая из 1С или помеченная на удаление, в снимок не попадает и закрывается сверкой. Без изменений в 1СsnapshotIdтот же, и память узнаёт повтор. - Состояние (кэш версий и карточек) — файл в томе реплики. Он сохраняется только после того, как ядро приняло снимки.
Сбой — ни одного снимка
Сбой любой страницы OData прерывает проход целиком: снимки не отправляются, состояние не меняется, записи не закрываются. Следующий проход начинает заново. Сбой отправки в ядро тоже оставляет прежнее состояние.
Запросы к 1С — только GET к <baseUrl>/odata/standard.odata/<набор> с
$format=json, $select, $top/$skip и $metadata; таймаут запроса — 60 секунд.
Профили типовых конфигураций¶
Профиль — данные: какие наборы сущностей OData читать, в какой вид онтологии
company@1 их класть, какое поле — ключ, какие поля — атрибуты, какой фильтр строк и
какие связи строить по полям-ссылкам.
| Профиль | Конфигурация | Объекты |
|---|---|---|
bp30 |
1С:Бухгалтерия предприятия 3.0 | Catalog_Организации, Catalog_Контрагенты, Catalog_ПодразделенияОрганизаций, Catalog_Номенклатура (группы и позиции), Catalog_ДоговорыКонтрагентов |
ut11 |
1С:Управление торговлей 11 | Catalog_Организации, Catalog_Контрагенты, Catalog_СтруктураПредприятия, Catalog_Номенклатура (группы и позиции), Catalog_ДоговорыКонтрагентов |
erp2 |
1С:ERP Управление предприятием 2 | как ut11 |
ka2 |
1С:Комплексная автоматизация 2 | как ut11 |
zup3 |
1С:Зарплата и управление персоналом 3 | Catalog_Организации, Catalog_ПодразделенияОрганизаций, Catalog_Должности |
Что читает и чего не читает¶
| Объект 1С | Вид | Ключ | Атрибуты | Связи |
|---|---|---|---|---|
| организации | legal_entity, own: true |
ИНН | полное и краткое наименование, ИНН, КПП, ОГРН | — |
| контрагенты — только юридические лица, не группы | legal_entity, own: false |
ИНН | полное и краткое наименование, ИНН, КПП | — |
| подразделения | org_unit |
unit:onec:<база>:<Ref_Key> |
наименование, код | unit_of — к родителю или организации |
| группы номенклатуры | offering_group |
group:onec:<база>:<Ref_Key> |
наименование | item_of — к родительской группе |
| номенклатура | offering |
offering:onec:<база>:<Ref_Key> |
полное наименование, артикул, тип (product, service, work — по признаку конфигурации) |
item_of — к группе |
| договоры контрагентов | agreement |
agreement:onec:<база>:<Ref_Key> |
номер, предмет (наименование), дата, срок действия → validUntil |
party_to — от контрагента к договору |
должности (zup3) |
role |
role:<Ref_Key> |
наименование | — |
Запись без ключа (например, контрагент без ИНН) в снимок не попадает. Пустые ссылки и
пустые даты 1С (0001-01-01) атрибутами не становятся.
Сотрудники и физические лица не читаются
Ни один профиль не читает справочники сотрудников и физических лиц; контрагент
берётся, только если он юридическое лицо. Даже профиль зарплатной конфигурации
читает только организации, подразделения и должности. Людей в базе знаний нет —
роли связываются с платформой атрибутом platformRole
(см. База знаний компании).
Коннектор ничего не пишет в 1С: у него нет ни одного запроса, кроме чтения.
Учётные данные¶
Служебный пользователь OData — секрет узла onec-credentials: файл в каталоге
секретов узла, в контейнере — /run/secrets/onec-credentials. Формат —
login:password или JSON {"user": "…", "password": "…"}.
- Секрет перечитывается каждый цикл: смена пароля не требует перезапуска.
- Значение уходит только заголовком
Authorization(Basic). В журналы, исключения, снимки и артефакты оно не попадает, в окружение процесса — тоже. - Нет файла или он не разбирается — цикл пропускается с предупреждением (без значения), агент продолжает работать.
- 1С ответила
401или403— проход прерывается с сообщением «проверьте секрет».
Права пользователя OData
Выдайте служебному пользователю в 1С только чтение и только тех объектов, что перечислены в профиле: коннектору другого не нужно.
Описание агента¶
apiVersion: taimen.ai/v1
kind: Agent
key: onec-connector
spec:
displayName: 1C connector
identity:
kind: agent
permissions: [observations.write]
work:
workspace: ${KNOWLEDGE_WORKSPACE_ID}
executor:
kind: observer
params:
entrypoint: taimen_onec.agent:observe
intervalSeconds: 3600
config:
baseUrl: http://1c.example.local/accounting
base: accounting
profile: bp30
placement:
requires: [onec-access]
secrets: [onec-credentials]
resources: {cpus: 0.5, memoryMb: 256}
state: stopped
| Параметр | Что значит |
|---|---|
work.workspace |
workspace базы знаний, куда идут снимки (переменная установки KNOWLEDGE_WORKSPACE_ID) |
config.baseUrl |
адрес публикации базы; запросы идут на <baseUrl>/odata/standard.odata/… |
config.base |
имя базы — часть источника onec:<base> и ключей записей |
config.profile |
bp30, ut11, erp2, ka2 или zup3 |
intervalSeconds |
как часто делать проход; по умолчанию 3600 |
identity.permissions |
observations.write — право на POST /knowledge/snapshots |
Не меняйте base у работающего коннектора
Имя базы входит в источник и в ключи. Новое имя — новый источник: записи со старыми ключами останутся под старым источником и не закроются сами.
Процесс коннектора завершается кодом 2, если конфигурация неверна (нет
baseUrl, base или profile, неизвестный профиль, у агента нет work.workspace,
исполнитель не observer); 0 — агент остановлен; 75 — новая ревизия описания,
узел поднимет контейнер на ней.
Установка и включение¶
- Онтология. В дереве workspace базы знаний включён пакет
company@1(см. Регистрация и включение). -
Образ коннектора на машине узла — собирается из корня поставки:
-
Узел fleet в сети, откуда видна 1С: метка
onec-access, исполнительobserverс этим образом, секретonec-credentials(см. Узлы и fleet): -
Проверка профиля на базе — без записи в платформу:
taimen-onec check --base-url http://1c.example.local/accounting --profile bp30 \ --credentials-file ./onec-credentials{ "Catalog_Организации": {"ok": true, "missing": []}, "Catalog_Номенклатура#items": {"ok": false, "missing": ["Услуга"]} }Код выхода
0— все объекты профиля есть в базе. Объект сok: falseконнектор будет пропускать. -
Описание агента — адрес, имя базы и профиль в
executor.params.config,state: running; применение пакетаcompany-knowledge(см. Пакеты каталога). Контроллер fleet разместит агента на узле с меткой и секретом.
Типичные проблемы¶
| Симптом | Причина | Что делать |
|---|---|---|
| агент не размещается | нет узла с меткой onec-access, секретом onec-credentials или исполнителем observer |
проверить node.yaml и каталог секретов узла |
| в журнале «проход пропущен» | секрета нет, он пуст или не разбирается | записать login:password или JSON {user, password} |
| «1С отказала в доступе (401/403)» | неверный логин или пароль, нет прав на объекты | проверить пользователя OData в 1С |
| «1С недоступна» | узел не видит 1С, публикация OData не работает | проверить сеть узла и baseUrl |
| «объект … пропущен — в базе нет …» | конфигурация отличается от типовой профиля | taimen-onec check; выбрать другой профиль; данные объекта загрузить таблицей |
| процесс завершается с кодом 2 | конфигурация агента неверна | проверить executor.params.config и work.workspace |
| контрагента нет в базе знаний | это физическое лицо или у него нет ИНН | так задумано: физические лица не читаются, запись без ключа пропускается |
| записи не закрываются после удаления в 1С | проход прерывается сбоем | устранить сбой; закрытие случится на первом успешном проходе |