User decided to patch the main BIT.RA configuration instead of installing an extension. - bitra-cfe/ removed in previous step - bitra-patch/ added with BSL files for direct copy-paste into Configurator: - CommonModules/bfd_IntegrationAPIHelpers/Module.bsl (134 lines) — privileged server helpers - HTTPServices/bfd_IntegrationAPI/Module.bsl (478 lines) — 11 GET handlers - README.md (274 lines): step-by-step Configurator instructions: - object properties (CommonModule flags, HTTPService rootURL, URL templates, methods) - role permissions matrix (15 BIT.RA objects + HTTPService + CommonModule) - user bfd_api_user creation - Apache publication - curl tests for each endpoint
Доработка BIT.RA — read-only REST API для bit-flight-deck
Доработка самой конфигурации BIT.RA (не расширение). Добавляются 3 объекта метаданных + 1 пользователь + публикация на Apache.
Объекты для добавления в конфигурацию
1. Общий модуль bfd_IntegrationAPIHelpers
Путь в дереве: Общие → Общие модули → Добавить.
Свойства модуля (на вкладке свойств):
| Свойство | Значение |
|---|---|
| Имя | bfd_IntegrationAPIHelpers |
| Синоним | BFD: API helpers |
| Глобальный | Ложь |
| Сервер | Истина |
| Вызов сервера | Истина |
| Клиент (управляемое приложение) | Ложь |
| Клиент (обычное приложение) | Ложь |
| Внешнее соединение | Истина |
| Привилегированный | Истина ⚠️ важно |
| Повторное использование возвращаемых значений | Не использовать |
Код модуля — вставить целиком из CommonModules/bfd_IntegrationAPIHelpers/Module.bsl.
2. HTTP-сервис bfd_IntegrationAPI
Путь в дереве: Общие → HTTP-сервисы → Добавить.
Свойства сервиса:
| Свойство | Значение |
|---|---|
| Имя | bfd_IntegrationAPI |
| Синоним | BFD: Integration API |
| Корневой URL | bfd-api |
| Повторное использование сессий | Не использовать |
Шаблоны URL и методы. Внутри HTTP-сервиса добавляем 11 шаблонов URL. Для каждого:
- Правой кнопкой на сервис → Добавить → Шаблон URL.
- Задать имя шаблона и URL (см. таблицу).
- Внутри шаблона: правой кнопкой → Добавить → Метод. Имя —
Get, HTTP-метод —GET, Обработчик — имя функции (автодополнится по<ИмяШаблона><ИмяМетода>).
| Имя шаблона | URL | Имя метода | HTTP | Обработчик (функция в модуле HTTP-сервиса) |
|---|---|---|---|---|
Health |
/v1/health |
Get |
GET | HealthGet |
Employees |
/v1/employees |
Get |
GET | EmployeesGet |
Works |
/v1/works |
Get |
GET | WorksGet |
Projects |
/v1/projects |
Get |
GET | ProjectsGet |
Stages |
/v1/stages |
Get |
GET | StagesGet |
WorkTypes |
/v1/work_types |
Get |
GET | WorkTypesGet |
Dictionaries |
/v1/dictionaries |
Get |
GET | DictionariesGet |
DeptHistory |
/v1/dept_history |
Get |
GET | DeptHistoryGet |
ProjectRegister |
/v1/project_register |
Get |
GET | ProjectRegisterGet |
EvaMappingProjects |
/v1/eva_mapping/projects |
Get |
GET | EvaMappingProjectsGet |
EvaMappingClients |
/v1/eva_mapping/clients |
Get |
GET | EvaMappingClientsGet |
Код модуля HTTP-сервиса — открыть «Модуль» сервиса и вставить целиком из HTTPServices/bfd_IntegrationAPI/Module.bsl.
3. Роль bfd_API_Чтение
Путь в дереве: Общие → Роли → Добавить.
Свойства роли:
| Свойство | Значение |
|---|---|
| Имя | bfd_API_Чтение |
| Синоним | BFD: API чтение |
Права на объекты (в таблице прав отметить галочки):
| Объект | Чтение | Просмотр | Использование |
|---|---|---|---|
Справочник.Пользователи |
✓ | ✓ | — |
Справочник.Подразделение |
✓ | ✓ | — |
Справочник.Офис |
✓ | ✓ | — |
Справочник.Менеджеры |
✓ | ✓ | — |
Справочник.Клиенты |
✓ | ✓ | — |
Справочник.Проекты |
✓ | ✓ | — |
Справочник.ЭтапыПроектов |
✓ | ✓ | — |
Справочник.Конфигурации |
✓ | ✓ | — |
Справочник.Договоры |
✓ | ✓ | — |
Справочник.СценарииПланирования |
✓ | ✓ | — |
Документ.Работы |
✓ | ✓ | — |
РегистрСведений.ПодразделениеСотрудников |
✓ | — | — |
РегистрНакопления.ОборотыПроектныхПоказателей_v2 |
✓ | — | — |
РегистрСведений.СоответствиеПроектовEVA_РА |
✓ | — | — |
РегистрСведений.СоответствиеКонтрагентовEVA_РА |
✓ | — | — |
Перечисление.ВидыРабот |
✓ | — | — |
HTTPСервис.bfd_IntegrationAPI |
— | — | ✓ |
ОбщийМодуль.bfd_IntegrationAPIHelpers |
— | — | ✓ |
| Запуск тонкого клиента / толстого / веб-клиента | — | — | (по необходимости) |
Важно: в свойствах роли отметить «Устанавливать права для новых объектов» = Ложь (роль строго ограниченная).
4. Пользователь bfd_api_user
В режиме Предприятие (или Конфигуратор → Администрирование → Пользователи) создать:
| Поле | Значение |
|---|---|
| Имя | bfd_api_user |
| Полное имя | BFD: API service user |
| Аутентификация 1С:Предприятия | ✓ (для Basic auth) |
| Пароль | сгенерировать криптостойкий 16+ символов, передать в команду N8N |
| Аутентификация ОС | — |
| Запрещено изменять пароль | ✓ |
| Запрещено восстанавливать пароль | ✓ |
| Запрет интерактивного входа | ✓ (если есть такая настройка) |
| Роли | bfd_API_Чтение + минимальная роль для входа (БазовыеПрава или эквивалент в BIT.RA) |
Публикация на Apache
Конфигуратор → Администрирование → Публикация на веб-сервере...
Настройки:
- Веб-сервер: Apache 2.4.
- Каталог: имя публикации, например
bitra(будет частью URL). - HTTP-сервисы: галочкой включить
bfd_IntegrationAPI. - Публиковать HTTP-сервисы по умолчанию (если есть такая опция) — можно не включать, поскольку отметили вручную.
После Save — Apache перезапустить.
Итоговый URL базовый:
http://<host>/<publication-name>/hs/bfd-api/v1/
Пример (если host=server.local, publication=bitra):
http://server.local/bitra/hs/bfd-api/v1/health
Тестирование через curl
# Health (Basic auth обязательна для HTTP-сервисов 1С)
curl -u bfd_api_user:<PASSWORD> http://server.local/bitra/hs/bfd-api/v1/health
# Сотрудники
curl -u bfd_api_user:<PASSWORD> http://server.local/bitra/hs/bfd-api/v1/employees | head -c 500
# Работы за вчера
curl -u bfd_api_user:<PASSWORD> "http://server.local/bitra/hs/bfd-api/v1/works?modified_since=$(date -d 'yesterday' '+%Y-%m-%d')" | head -c 500
# Проекты
curl -u bfd_api_user:<PASSWORD> http://server.local/bitra/hs/bfd-api/v1/projects | head -c 1000
# Виды работ (быстро проверить что аутентификация работает + перечисление читается)
curl -u bfd_api_user:<PASSWORD> http://server.local/bitra/hs/bfd-api/v1/work_types
# Справочники одним запросом
curl -u bfd_api_user:<PASSWORD> http://server.local/bitra/hs/bfd-api/v1/dictionaries | head -c 2000
# История подразделений
curl -u bfd_api_user:<PASSWORD> "http://server.local/bitra/hs/bfd-api/v1/dept_history?modified_since=2024-01-01" | head -c 500
Если что-то возвращает HTTP 500 с {"error":"..."} — посмотреть журнал регистрации 1С (там полный стек ошибки запроса).
Что передать команде N8N
После публикации:
BITRA_BASE_URL—http://<host>/<publication>/hs/bfd-api/v1BITRA_USER—bfd_api_userBITRA_PASSWORD— пароль
Эти значения попадают в .env проекта bit-flight-deck (на стороне сервера WSL).
Список эндпоинтов (полная карта)
| Метод | URL | Назначение | Параметры |
|---|---|---|---|
| GET | /v1/health |
Healthcheck | — |
| GET | /v1/employees |
Справочник.Пользователи |
— |
| GET | /v1/works |
Документ.Работы + ТЧ |
modified_since, limit (по умолчанию 1000, max 10000) |
| GET | /v1/projects |
Справочник.Проекты |
— |
| GET | /v1/stages |
Справочник.ЭтапыПроектов |
— |
| GET | /v1/work_types |
Перечисление.ВидыРабот (14 значений) |
— |
| GET | /v1/dictionaries |
Офисы/Подразделения/Менеджеры/Конфигурации/Договоры/Сценарии — одним JSON | — |
| GET | /v1/dept_history |
РегистрСведений.ПодразделениеСотрудников |
modified_since |
| GET | /v1/project_register |
РегНак.ОборотыПроектныхПоказателей_v2 (для MVP-3) |
modified_since |
| GET | /v1/eva_mapping/projects |
РегистрСведений.СоответствиеПроектовEVA_РА (best-effort из мёртвой интеграции) |
— |
| GET | /v1/eva_mapping/clients |
РегистрСведений.СоответствиеКонтрагентовEVA_РА |
— |
Формат ответа
Всегда JSON, UTF-8 (без BOM), массив объектов или объект-обёртка. Все ID объектов — строковый UUID без префикса класса (8-4-4-4-12 hex).
Пример ответа /v1/employees
[
{
"id": "f5631644-1948-11ee-94f0-c578ab9a5932",
"full_name": "Иванов Иван",
"email": "iivanov@1cbit.ru",
"eva_id": "CmfPerson:abc...",
"office": "ЕКБ",
"department": "Группа РП №2",
"rate": 1500.00,
"is_active": true,
"should_fill_report": true
}
]
Пример ответа /v1/works
[
{
"id": "...",
"number": "WK-000123",
"date": "2026-05-13T00:00:00",
"employee_id": "...",
"department": "Группа РП №2",
"office": "ЕКБ",
"approved": true,
"total_hours": 8.0,
"comment": "",
"rows": [
{
"row_index": 1,
"description": "Разработка отчёта по продажам",
"hours": 4.0,
"work_type": "ЛУРВ (платно)",
"work_type_code": "ЛУРВ",
"client_id": "...",
"client_name": "ООО Ромашка",
"manager_id": "...",
"project_id": "...",
"stage_id": "...",
"request_number": "RQ-555",
"lt_id": "",
"work_done": true
}
]
}
]
Ошибки
При исключении внутри обработчика возвращается:
{ "error": "Описание ошибки 1С" }
с HTTP-кодом 500.
Безопасность и эксплуатация
- Все эндпоинты требуют Basic Auth (пользователь
bfd_api_user). - Модуль
bfd_IntegrationAPIHelpersимеетПривилегированный=Истина— внутри его методов игнорируются ограничения RLS. Это намеренно — аналитический слой должен видеть всё. - Пароль
bfd_api_userхранить в.envпроекта (не в git). - Доступ к публикации Apache желательно ограничить firewall'ом до IP-адреса сервера N8N.
- Под нагрузкой полл происходит каждые 30 минут (
/works,/projects), раз в сутки (справочники). Это минимальная нагрузка на BIT.RA. - Для MVP-1 не нужны:
/v1/project_register,/v1/eva_mapping/*— они подключатся в MVP-3 / при оживлении EVA-РА интеграции.
Файлы кода
- CommonModules/bfd_IntegrationAPIHelpers/Module.bsl — модуль помощников (вставить целиком в одноимённый общий модуль).
- HTTPServices/bfd_IntegrationAPI/Module.bsl — модуль HTTP-сервиса (вставить целиком в «Модуль» HTTP-сервиса).
Связанные документы
- Спецификация:
../docs/superpowers/specs/2026-05-13-mvp1-workload-design.md - План:
../docs/superpowers/plans/2026-05-13-mvp1-workload.md— Phase 3 - Северная звезда:
../docs/superpowers/PROJECT_GOAL.md