NODEDC_1C/IN/1с-план апи.md

327 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Да, теперь картина понятная.
У тебя сейчас:
* **1С:Предприятие 8.3.27**
* **Бухгалтерия предприятия, редакция 2.0**
* база в режиме **файловая**
* клиент **толстый**
* каталог базы: `x:\1C\База бухгалтерии`
Это значит: **быстрее всего вам идти через публикацию базы на веб-сервере и включение стандартного OData/REST**, а потом уже поверх этого делать свой backend. Платформа 1С умеет автоматически формировать REST-интерфейс после публикации решения на веб-сервере; через него можно получать списки документов, справочников, записей регистров, в том числе с фильтрами, а также читать/создавать/изменять объекты. 1С прямо называет автоматически генерируемый REST/OData основным инструментом интеграции со сторонними системами. ([v8.1c.ru][1])
## Что делать дальше
### План на 2 этапа
**Этап А — быстро получить доступ к данным без ручных выгрузок**
Поднимаете **OData/REST**.
**Этап Б — сделать нормальный боевой коннектор**
Поверх OData делаете **свой Node-сервис**, который:
* тянет данные по расписанию,
* хранит слепки и дельты,
* нормализует 1С-структуру,
* отдаёт уже удобное API вашему ассистенту.
А когда станет ясно, какие именно бухгалтерские сценарии нужны, добавляете в 1С **HTTP-сервисы** для кастомных запросов. 1С поддерживает создание собственных HTTP-сервисов; они удобны как лёгкие RPC/REST-эндпоинты, где вы сами формируете ответ встроенным языком. ([v8.1c.ru][2])
---
# Практический пошаговый план
## Шаг 1. Зафиксировать цель интеграции
Сразу не делать “полный двусторонний API”.
На старте нужен режим:
**read-only + синхронизация в вашу систему**
То есть:
* ничего в 1С не пишем;
* только читаем;
* строим внешний аналитический/операционный слой.
Это резко снижает риск.
---
## Шаг 2. Проверить, есть ли доступ к Конфигуратору
Вот это критично.
Без Конфигуратора или 1С-разработчика, который умеет:
* публиковать базу на веб-сервере,
* настраивать доступ,
* включать OData,
* при необходимости добавлять HTTP-сервисы,
вы не поедете.
### Что нужно спросить у 1С-ника
Одной фразой:
> Нужно опубликовать файловую базу 1С на локальном веб-сервере и включить стандартный интерфейс OData на чтение.
Это уже предметная задача.
---
## Шаг 3. Поднять веб-публикацию базы
REST/OData в 1С работает **после публикации прикладного решения на веб-сервере**. Это прямо официальный базовый принцип. ([v8.1c.ru][1])
### Что это значит practically
Ваш 1С-ник должен:
* открыть **Конфигуратор**;
* опубликовать базу на **IIS** или **Apache**;
* включить публикацию стандартного интерфейса OData;
* выдать вам URL.
Обычно итог выглядит концептуально так:
* база была локальной файловой;
* стала доступна по HTTP внутри сети, например:
* `http://<server>/<base>/odata/...`
* или похожий путь, который сформирует публикация.
Я сейчас не даю точный шаблон URL, потому что он зависит от имени публикации и настроек веб-сервера.
---
## Шаг 4. Включить OData только для чтения и только для нужных сущностей
В Библиотеке стандартных подсистем у 1С есть отдельный механизм настройки доступа к данным через стандартный интерфейс OData. ([v8.1c.ru][3])
### Что открывать наружу на старте
Не всё подряд. Только:
* документы покупателей
* документы поставщиков
* банковские выписки / платежные документы
* кассовые документы
* журнал проводок / регистр бухгалтерии, если доступен через публикацию
* контрагенты
* договоры контрагентов
* номенклатура
* статьи затрат
* статьи ДДС
* прочие доходы и расходы
То есть тот минимум, который у тебя уже руками выгружался.
---
## Шаг 5. Проверить OData простым тестом
После публикации проверяете не “сложный сценарий”, а очень простой:
1. Открывается ли metadata/корень сервиса.
2. Возвращается ли список, например, контрагентов или документов.
3. Работают ли фильтры по дате.
Официально REST/OData в 1С рассчитан как раз на получение списков документов, справочников и записей регистров с фильтрами. ([v8.1c.ru][1])
---
## Шаг 6. Между 1С и ассистентом ставите свой backend
Вот это обязательно.
### Архитектура
**1С (OData) → ваш sync-service → Postgres / storage → ассистент / UI**
### Почему так
Потому что нельзя строить продукт так:
* UI каждый раз бьёт прямо в 1С;
* ассистент напрямую лезет в 1С;
* куча запросов летит в боевую бухгалтерскую базу.
Это будет и хрупко, и больно.
### Что делает sync-service
* хранит `last_sync_at`
* тянет данные пачками
* складывает сырые JSON/таблицы
* нормализует в свои сущности
* считает дельты
* строит витрины:
* документы
* движения
* контрагенты
* объяснение суммы
* хвосты
* изменения за день
---
## Шаг 7. Не делать realtime на старте
Это важно.
На старте не нужен “живой поток каждую секунду”.
Нужен режим:
* раз в 5 минут,
* или раз в 15 минут,
* или по кнопке “обновить”.
У 1С всё есть для интеграции и синхронизации по расписанию, и БСП отдельно поддерживает синхронизацию по требованию и в автоматическом режиме по расписанию. ([v8.1c.ru][3])
Для бухгалтерии этого обычно достаточно.
---
## Шаг 8. После OData — добавить HTTP-сервисы под умные сценарии
Когда базовый доступ заработает, вы быстро упрётесь в то, что OData даёт “сырые объекты”, а вам нужны бизнес-запросы:
* дай документы, изменённые после последней синхронизации;
* дай расхождения по контрагентам;
* дай хвосты перед закрытием;
* дай цепочку, из чего сложилась сумма;
* дай нетипичные ручные операции.
Вот под это уже делаются **HTTP-сервисы внутри 1С**, потому что 1С позволяет создавать произвольные HTTP-сервисы и самим формировать тело ответа. ([v8.1c.ru][2])
---
# Что конкретно делать тебе сейчас
Вот совсем без воды.
## Прямо сейчас
Составь и передай 1С-разработчику такой список задач:
### ТЗ-минимум
1. **Опубликовать файловую базу 1С на локальном веб-сервере**.
2. **Включить стандартный REST/OData-интерфейс**.
3. **Настроить отдельного пользователя только на чтение** для интеграции.
4. **Ограничить опубликованные сущности** стартовым списком:
* контрагенты
* договоры контрагентов
* номенклатура
* статьи затрат
* статьи ДДС
* документы покупателей
* документы поставщиков
* банковские документы
* кассовые документы
* проводки / регистры бухучёта, если доступны через публикацию
5. **Отдать тестовый URL и учётку** для проверки из внешней системы.
### ТЗ-второй очереди
6. Добавить **HTTP-сервисы** под кастомные выборки:
* изменения за период,
* дельта после последней синхронизации,
* список незакрытых хвостов,
* проводки, повлиявшие на сумму,
* документы закрытия месяца.
---
# Что будете делать вы в Node.DC
## Первая версия коннектора
Делаете сервис с 4 методами:
* `syncReferenceData()`
тянет справочники
* `syncDocuments(from, to)`
тянет документы по периоду
* `syncAccountingMovements(from, to)`
тянет движения/проводки
* `getDelta(since)`
тянет только изменения с момента последней синхронизации
### В хранилище
Минимум такие таблицы:
* `onec_counterparties`
* `onec_contracts`
* `onec_items`
* `onec_cashflow_articles`
* `onec_cost_articles`
* `onec_documents_raw`
* `onec_postings_raw`
* `onec_sync_log`
---
# Какой результат должен быть через 12 дня работы
Не “полный AI для бухгалтерии”.
А вот такой checkpoint:
### Должно заработать
* автоматически читаем из 1С контрагентов;
* автоматически читаем документы за день/месяц;
* автоматически читаем проводки/движения;
* без ручных Excel;
* данные падают в ваше хранилище;
* можно сделать первый экран:
* “что изменилось с последнего sync”
* “какие документы/движения добавились”
* “какие контрагенты/суммы затронуты”
Если этого нет — дальше думать про ассистента рано.
---
# Самая короткая стратегия
## Что не делать
* не строить ассистента поверх ручных выгрузок;
* не лезть сразу в онтологию и сложные смыслы;
* не пытаться “читать SQL-таблицы 1С в лоб”.
## Что делать
* публикация базы,
* OData,
* read-only пользователь,
* sync-service,
* своё хранилище,
* потом HTTP-сервисы под умные кейсы.
---
# Твой следующий практический ход
Открой у себя и проверь, есть ли вообще **Конфигуратор 1С** для этой базы.
Если есть — это следующий рабочий шаг.
Если его нет, значит нужен человек с доступом к конфигуратору/администрированию.
Если хочешь, я следующим сообщением соберу тебе **готовое короткое ТЗ для 1С-разработчика** — буквально списком, что именно ему нужно сделать, без лишней теории.
[1]: https://v8.1c.ru/platforma/rest-interfeys/ "REST интерфейс | Интеграция - платформа 1С:Предприятие"
[2]: https://v8.1c.ru/platforma/http-servisy/ "HTTP-сервисы | Интеграция - платформа 1С:Предприятие"
[3]: https://v8.1c.ru/tekhnologii/standartnye-biblioteki/1s-biblioteka-standartnykh-podsistem/integratsiya-s-drugimi-prilozheniyami-i-podsistemami/ "Интеграция с другими приложениями и подсистемами | 1С:Библиотека стандартных подсистем"