327 lines
14 KiB
Markdown
327 lines
14 KiB
Markdown
Да, теперь картина понятная.
|
||
|
||
У тебя сейчас:
|
||
|
||
* **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`
|
||
|
||
---
|
||
|
||
# Какой результат должен быть через 1–2 дня работы
|
||
|
||
Не “полный 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С:Библиотека стандартных подсистем"
|