Skip to content

Commit 3210f81

Browse files
authored
Merge pull request #33 from Segate-ekb/develop
Develop
2 parents ec93a25 + 72f47ad commit 3210f81

788 files changed

Lines changed: 147644 additions & 35268 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/copilot-instructions.md

Lines changed: 207 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,207 @@
1+
# Copilot Instructions for Integration Subsystem (Подсистема интеграции)
2+
3+
## Project Overview
4+
5+
This is a **1C:Enterprise 8.3** integration subsystem that handles message queues for outgoing/incoming data flows with validation (OpenAPI 3.0), multi-threading, and monitoring (Prometheus).
6+
7+
## Architecture
8+
9+
### Core Data Flow
10+
```
11+
ИсходныеДанные (Source Data) → ПотокДанных (Data Flow) → Подписчик (Subscriber)
12+
13+
Обработчик (Handler) executes custom BSL code
14+
```
15+
16+
### Key Objects by Layer
17+
| Layer | Objects | Purpose |
18+
|-------|---------|---------|
19+
| **Catalogs** | `инт_ПотокиДанных`, `инт_Подписчики`, `инт_Схемы`, `инт_Эндпоинты` | Configuration entities |
20+
| **Registers** | `инт_ОчередьИсходящихСообщений`, `инт_ОчередьВходящихСообщений`, `инт_ТекущийСтатус*` | Message queues and status tracking |
21+
| **Common Modules** | `инт_*` prefix (e.g., `инт_ВалидаторПакетов`, `инт_ОтправкаИсходящихСообщений`) | Business logic |
22+
23+
### Subscriber Types
24+
HTTP arbitrary, Integration Subsystem (cross-database), RabbitMQ, JRPC 2.0, Kafka
25+
26+
## Development Workflow
27+
28+
### Initial Setup
29+
```batch
30+
# Clone and configure
31+
git clone <repo>
32+
copy env.json.example env.json
33+
prepare.cmd # Creates database in build/ib, loads YAXUNIT extension
34+
```
35+
36+
### Daily Workflow (Git-flow based)
37+
```batch
38+
git checkout -b feature/xxx develop
39+
update.cmd # MANDATORY: Sync DB with branch config (prevents phantom changes)
40+
# ... develop ...
41+
decompile.bat # Export config changes to src/cf
42+
git commit -m "..."
43+
```
44+
45+
### TDD Development Cycle (Red-Green-Refactor)
46+
47+
Iterative loop until the feature is complete:
48+
49+
```
50+
┌─ 1. Составить план (спецификация / задача)
51+
52+
│ ┌──────────────── inner loop ────────────────┐
53+
│ │ 2. Написать / дополнить тесты │
54+
│ │ → src/cfe/YAXUnit/CommonModules/ │
55+
│ │ │
56+
│ │ 3. Написать / изменить код │
57+
│ │ → src/cf/ (конфигурация) │
58+
│ │ │
59+
│ │ 4. Обновить базу данных │
60+
│ │ > update.cmd │
61+
│ │ │
62+
│ │ 5. Запустить тесты │
63+
│ │ > test.cmd │
64+
│ │ │
65+
│ │ 6. Проверить результат │
66+
│ │ → build/test-reports/ (Allure XML) │
67+
│ │ → exit code: 0 = OK, иначе — провал │
68+
│ │ │
69+
│ │ если тесты красные ──► повтор с шага 2/3 │
70+
│ └────────────────────────────────────────────┘
71+
72+
└─ 7. Финализация
73+
> decompile.bat # выгрузить и тесты, и код в src/
74+
> git add . && git commit
75+
```
76+
77+
#### Шаг 4 — `update.cmd`: что происходит
78+
79+
| Этап | Команда | Результат |
80+
|------|---------|-----------|
81+
| 1 | `vrunner update-dev --src src/cf --disable-support` | Загрузка конфигурации из `src/cf``build/ib` |
82+
| 2 | `vrunner compileexttocfe --src src/cfe/YAXUNIT --out build/YAXUNIT.cfe` | Сборка расширения тестов в `.cfe` |
83+
| 3 | `vrunner run ... ЗагрузитьРасширениеВРежимеПредприятия.epf` | Загрузка расширения YAXUNIT в базу |
84+
| 4 | `vrunner run ... ЗапуститьОбновлениеИнформационнойБазы` | Обновление БД в режиме Предприятия |
85+
86+
> **Важно:** `update.cmd` обновляет **и** основную конфигурацию, **и** расширение с тестами.
87+
> Это значит, что после изменения _любых_ исходников (код или тесты) достаточно одного вызова `update.cmd`.
88+
89+
#### Шаг 5 — `test.cmd`: что происходит
90+
91+
| Этап | Команда | Результат |
92+
|------|---------|-----------|
93+
| 1 | Генерация `build/yaxunit-config.json` | Конфиг с абсолютными путями для YAXUnit |
94+
| 2 | `vrunner run --command "RunUnitTests=..."` | Запуск 1С:Предприятие с параметром YAXUnit |
95+
| 3 | Чтение `build/test-reports/exitCode.txt` | Код возврата: `0` — все тесты пройдены |
96+
97+
Отчёты в формате Allure сохраняются в `build/test-reports/`.
98+
99+
#### Практические рекомендации
100+
101+
- **Не открывайте Конфигуратор** одновременно с `update.cmd` — файл БД блокируется.
102+
- Если нужно отлаживать тест вручную, используйте VS Code task **"Run current feature in 1C:Enterprise + WAIT"** — он не закрывает 1С после прогона.
103+
- При добавлении **нового** общего модуля тестов: добавьте его в `src/cfe/YAXUnit/`, а не в основную конфигурацию.
104+
- После окончания работы **всегда** выполняйте `decompile.bat` — он выгрузит и `src/cf`, и `src/cfe/YAXUnit`.
105+
106+
### Key Commands
107+
| Command | Purpose |
108+
|---------|---------|
109+
| `prepare.cmd` | Initial DB setup from `src/cf` + YAXUNIT extension |
110+
| `update.cmd` | Update existing DB: config + YAXUNIT extension + DB update |
111+
| `decompile.bat` | Export configuration to `src/cf` and extension to `src/cfe/YAXUnit` |
112+
| `build.cmd` | Compile to `build/1cv8.cf` |
113+
| `test.cmd` | Run YAXUNIT tests, reports to `build/test-reports/` |
114+
115+
## Testing with YAXUNIT
116+
117+
Tests are located in extension `src/cfe/YAXUnit/CommonModules/`. Naming convention:
118+
- `ОМ_*` — tests for Common Modules (e.g., `ОМ_инт_ВалидаторПакетов`)
119+
- `РС_*_ММ` — tests for Information Registers Manager Module
120+
- `СПР_*_ММ` — tests for Catalogs Manager Module
121+
122+
### Test Structure Pattern
123+
```bsl
124+
Процедура ИсполняемыеСценарии() Экспорт
125+
ЮТТесты.УдалениеТестовыхДанных().ВТранзакции()
126+
.ДобавитьТестовыйНабор("НазваниеНабора")
127+
.ДобавитьТест("ИмяТеста")
128+
.ДобавитьТест("ТестСПараметрами").СПараметрами("value1");
129+
КонецПроцедуры
130+
131+
Процедура ИмяТеста() Экспорт
132+
// Arrange
133+
ИсходныеДанные = ГенераторТестовыхДанных.демо_Документ();
134+
135+
// Act + Assert using fluent API
136+
ЮТест.ОжидаетЧто(Результат).НеРавно(Неопределено);
137+
ЮТест.ОжидаетЧтоТаблицаБазы("РегистрСведений.инт_*").СодержитЗаписи(Предикат);
138+
КонецПроцедуры
139+
```
140+
141+
### Test Data Generation
142+
Use `ГенераторТестовыхДанных` module for creating test fixtures:
143+
- `ГенераторТестовыхДанных.ПотокДанныхИсходящий()` / `ПотокДанныхВходящий()`
144+
- `ГенераторТестовыхДанных.демо_Документ()`
145+
146+
### Running Tests
147+
Configure in `tests/uaxunit_config.json`. Launch parameter: `RunUnitTests=<path>\tests\uaxunit_config.json`
148+
149+
## Code Conventions
150+
151+
### Module Regions (strict order)
152+
```bsl
153+
#Область ПрограммныйИнтерфейс // Public API
154+
#Область СлужебныйПрограммныйИнтерфейс // Internal API (used by subsystem)
155+
#Область СлужебныеПроцедурыИФункции // Private implementation
156+
```
157+
158+
### Naming Prefixes
159+
- `инт_` — Integration subsystem core objects
160+
- `пэм` — Prometheus metrics objects
161+
- `ИТКВ_` — Developer console toolkit (ancillary)
162+
163+
### Validation via OpenAPI 3.0
164+
```bsl
165+
// Validate data against schema
166+
Ошибки = инт_ВалидаторПакетов.Валидировать(МодельДанных, "ИмяСхемы", СпецификацияJSON);
167+
```
168+
Schemas stored in `инт_Схемы` catalog, test fixtures in `tests/fixtures/schema.json`.
169+
170+
### Message Registration Pattern
171+
```bsl
172+
// Register message for outgoing flow
173+
ИдентификаторСообщения = РегистрыСведений.инт_ОчередьИсходящихСообщений.ЗарегистрироватьСообщение(
174+
ИсходныеДанные, // Source object reference or FixedStructure
175+
ПотокДанных, // CatalogRef.инт_ПотокиДанных
176+
РегистрироватьДубль // Optional: skip duplicates by hash
177+
);
178+
```
179+
180+
## Правила запуска терминальных команд (для AI-агента)
181+
182+
> **CRITICAL** — несоблюдение этих правил приводит к прерыванию сборки / тестов.
183+
184+
1. **`timeout: 0`** — для `update.cmd`, `test.cmd`, `prepare.cmd`, `build.cmd` и любых команд, запускающих 1С:Предприятие или Конфигуратор. Эти команды могут выполняться 1–5 минут. Никогда не ставь фиксированный timeout — используй `0` (без лимита).
185+
2. **Не отправляй новых команд**, пока предыдущая не завершилась. Отправка команды в занятый терминал вызывает `Ctrl+C``Terminate batch job (Y/N)` и убивает текущий процесс.
186+
3. **Маркер завершения**`update.cmd` и `test.cmd` печатают финальную строку при успехе:
187+
- `update.cmd``=== update.cmd COMPLETED SUCCESSFULLY ===`
188+
- `test.cmd` → проверяй `exit code` и содержимое `build/test-reports/exitCode.txt`
189+
4. **Не запускай команды в фоне** (`isBackground: true`), если тебе нужен результат для следующего шага. Используй `isBackground: false` + `timeout: 0`.
190+
5. **Ошибка блокировки ИБ** (`Ошибка блокировки информационной базы`) — означает, что 1С:Предприятие или Конфигуратор ещё открыт. Сообщи пользователю и дождись закрытия, не пытайся повторять автоматически в цикле.
191+
192+
## Tooling
193+
194+
- **vrunner** (vanessa-runner) — build automation, configured in `tools/JSON/vrunner.json`
195+
- **precommit4onec** — git hooks for code quality
196+
- **BSL Language Server** — linting (directives like `// BSLLS:Typo-off` disable specific rules)
197+
- **Platform version**: 8.3.24.1548
198+
199+
## File Structure
200+
```
201+
src/cf/ # Main configuration source (decompiled XML)
202+
src/cfe/YAXUnit/ # Test extension with YAXUNIT framework
203+
build/ib/ # Development database
204+
tools/JSON/ # vrunner, vanessaBdd, vanessaTdd configs
205+
tests/fixtures/ # Test data (OpenAPI schemas, etc.)
206+
features/ # Vanessa BDD feature files
207+
```

.github/workflows/build-docs.yml

Lines changed: 0 additions & 79 deletions
This file was deleted.

0 commit comments

Comments
 (0)