- Configuration.xml: AddOn extension, prefix bfd_, compat Version8_3_14 - CommonModule bfd_IntegrationAPIHelpers (server, privileged): JSON response, ISO date parse, UUID, email extractor, limit parser - HTTPService bfd_IntegrationAPI (rootURL=bfd-api): 11 templates - /v1/health, /v1/employees, /v1/works (+modified_since, +limit) - /v1/projects, /v1/stages, /v1/work_types, /v1/dictionaries - /v1/dept_history (+modified_since), /v1/project_register (+modified_since for MVP-3) - /v1/eva_mapping/projects, /v1/eva_mapping/clients (best-effort from BIT.RA registers) - README with step-by-step instructions for 1C developer - cfe-validate: 0 errors / 0 warnings (13/13 checks)
BIT_FlightDeck — расширение BIT.RA с REST API для bit-flight-deck
Расширение конфигурации (CFE) для BIT.RA (1С:Предприятие 8.3, режим совместимости Version8_3_14). Добавляет HTTP-сервис read-only для аналитического слоя проекта bit-flight-deck. Не изменяет существующие объекты конфигурации (никаких заимствований).
Состав расширения
bitra-cfe/
├── Configuration.xml Заголовок расширения, Purpose=AddOn, Prefix=bfd_
├── Languages/
│ └── Русский.xml Язык расширения
├── Roles/
│ └── bfd_ОсновнаяРоль/ ⚠ Дефолтная роль из cfe-init — НУЖНО НАСТРОИТЬ ПРАВА (см. ниже)
├── CommonModules/
│ └── bfd_IntegrationAPIHelpers/
│ └── Ext/Module.bsl Хелперы (JSON-ответ, парс даты, UUID, ИзвлечьEmail, ПарсЛимит)
└── HTTPServices/
└── bfd_IntegrationAPI/
└── Ext/Module.bsl 11 обработчиков GET-эндпоинтов
Что нужно сделать 1С-разработчику (по шагам)
1. Импорт расширения в Конфигуратор
- Открыть Конфигуратор BIT.RA.
- Конфигурация → Расширения конфигурации → Добавить (или клавиша Insert на дереве расширений).
- Указать имя расширения
BIT_FlightDeck, назначениеДополнение, префиксbfd_. - В созданном расширении: Конфигурация → Загрузить конфигурацию из файлов... — указать каталог
bitra-cfe/. - Проверить дерево объектов: должны быть
bfd_IntegrationAPI(HTTP-сервис),bfd_IntegrationAPIHelpers(общий модуль),bfd_ОсновнаяРоль(роль). - Обновить конфигурацию базы данных (F7).
2. Настройка роли bfd_ОсновнаяРоль
Дефолтная роль из шаблона пустая. Нужно добавить права на чтение объектов, к которым обращается API:
| Объект | Право |
|---|---|
Справочник.Пользователи |
Чтение, Просмотр |
Справочник.Подразделение |
Чтение, Просмотр |
Справочник.Офис |
Чтение, Просмотр |
Справочник.Менеджеры |
Чтение, Просмотр |
Справочник.Клиенты |
Чтение, Просмотр |
Справочник.Проекты |
Чтение, Просмотр |
Справочник.ЭтапыПроектов |
Чтение, Просмотр |
Справочник.Конфигурации |
Чтение, Просмотр |
Справочник.Договоры |
Чтение, Просмотр |
Справочник.СценарииПланирования |
Чтение, Просмотр |
Документ.Работы |
Чтение, Просмотр |
РегистрСведений.ПодразделениеСотрудников |
Чтение |
РегистрНакопления.ОборотыПроектныхПоказателей_v2 |
Чтение |
РегистрСведений.СоответствиеПроектовEVA_РА |
Чтение |
РегистрСведений.СоответствиеКонтрагентовEVA_РА |
Чтение |
Перечисление.ВидыРабот |
(доступно по умолчанию) |
HTTPСервис.bfd_IntegrationAPI |
Использование |
ОбщийМодуль.bfd_IntegrationAPIHelpers |
Использование |
Также в свойстве расширения: «Активные роли» / «Назначаемые роли» → отметить bfd_ОсновнаяРоль.
3. Создание сервисного пользователя
В режиме Предприятие (или в Конфигураторе → Администрирование → Пользователи):
- Создать пользователя
bfd_api_user. - Пароль — сгенерировать криптостойкий (~16 символов), сохранить отдельно для передачи в
.envфайла N8N. - Аутентификация: Аутентификация 1С:Предприятия (для Basic auth по HTTP).
- Запретить интерактивный вход (галка «Запрещено изменять пароль», без членства в группах с интерактивными правами).
- Назначить роли:
bfd_ОсновнаяРоль(из расширения).- Также понадобятся базовые БСП-роли:
БазовыеПрава(или эквивалент в BIT.RA), чтобы пользователь мог войти в сеанс.
4. Публикация HTTP-сервиса через Apache
В Конфигураторе: Администрирование → Публикация на веб-сервере...
В диалоге:
- Web-сервер: Apache 2.4 (выбрать установленный).
- Каталог: имя публикации (например
bitra) — будет частью URL. - Поставить галку: «Публиковать HTTP-сервисы расширений конфигурации по умолчанию».
- В списке
HTTP-сервисыотметитьbfd_IntegrationAPI. - ОК → перезапуск Apache.
URL сервиса после публикации: http://<host>/<publication-name>/hs/bfd-api/v1/...
Пример (полный URL):
http://server.local/bitra/hs/bfd-api/v1/health
http://server.local/bitra/hs/bfd-api/v1/employees
http://server.local/bitra/hs/bfd-api/v1/works?modified_since=2026-05-01
5. Тестирование через curl
# health (без auth тоже работает, но Basic auth нужна для остальных)
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')"
# Проекты
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/stages | head -c 500
# Виды работ
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
# Маппинг EVA проектов (может быть пустым — пользователь подтвердил что интеграция мёртвая)
curl -u bfd_api_user:<PASSWORD> http://server.local/bitra/hs/bfd-api/v1/eva_mapping/projects
6. Передать команде N8N (роль владельца проекта)
После успешной публикации передать:
BITRA_BASE_URL—http://<host>/<publication>/hs/bfd-api/v1BITRA_USER—bfd_api_userBITRA_PASSWORD— пароль
Эти значения попадают в файл .env проекта bit-flight-deck. На стороне N8N будут настроены HTTP Request ноды с Basic-auth.
Список эндпоинтов (полная карта)
| Метод | URL | Назначение | Параметры |
|---|---|---|---|
| GET | /v1/health |
Healthcheck | — |
| GET | /v1/employees |
Справочник.Пользователи |
— |
| GET | /v1/works |
Документ.Работы + ТЧ |
modified_since, limit |
| GET | /v1/projects |
Справочник.Проекты |
— |
| GET | /v1/stages |
Справочник.ЭтапыПроектов |
— |
| GET | /v1/work_types |
Перечисление.ВидыРабот |
— |
| GET | /v1/dictionaries |
Офисы/Подразделения/Менеджеры/Конфигурации/Договоры/Сценарии | — |
| GET | /v1/dept_history |
РегистрСведений.ПодразделениеСотрудников |
modified_since |
| GET | /v1/project_register |
РегНак.ОборотыПроектныхПоказателей_v2 (MVP-3) |
modified_since |
| GET | /v1/eva_mapping/projects |
РегистрСведений.СоответствиеПроектовEVA_РА |
— |
| GET | /v1/eva_mapping/clients |
РегистрСведений.СоответствиеКонтрагентовEVA_РА |
— |
Формат ответа
Всегда JSON, UTF-8 (без BOM), массив объектов или объект-обёртка.
Пример ответа /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. - Modul
bfd_IntegrationAPIHelpersпомечен какPrivileged=true— внутри него игнорируются ограничения RLS. Пользователь BFD_api имеет доступ ко всем строкам справочников/документов через API. Это намеренно — аналитический слой должен видеть всё. - Пароль
bfd_api_userхранится в.envпроекта (не в git). - Доступ к публикации Apache желательно ограничить firewall'ом IP-адресом N8N-сервера (или ходить через CF Tunnel/VPN внутри сети).
Связанные документы
- Спецификация:
../docs/superpowers/specs/2026-05-13-mvp1-workload-design.md - План:
../docs/superpowers/plans/2026-05-13-mvp1-workload.md— Phase 3 - Решения по транспорту: см. memory
architecture_transport_decisions