1c-epf-build · git:20260826.45eb139 · 2026-08-26 · sha256 415c27f4a8dc5b8e

1c-epf-build git:20260826.45eb139A

Immutable. This exact content is served forever at /api/v1/blob/415c27f4a8dc5b8e.

---
name: 1c-epf-build
description: Собрать внешнюю обработку 1С (EPF/ERF) из XML-исходников. Используй когда пользователь просит собрать, скомпилировать обработку или получить EPF/ERF файл из исходников
argument-hint: <ProcessorName>
allowed-tools:
  - Bash
  - Read
  - Glob
  - Grep
---

# /epf-build — Сборка обработки

## Usage

```
/epf-build <ProcessorName> [SrcDir] [OutDir]
```

| Параметр      | Обязательный | По умолчанию | Описание                             |
|---------------|:------------:|--------------|--------------------------------------|
| ProcessorName | да           | —            | Имя обработки (имя корневого XML)    |
| SrcDir        | нет          | `src`        | Каталог исходников                   |
| OutDir        | нет          | `build`      | Каталог для результата               |

## Параметры подключения (опционально)

Предпочтительно использовать конкретную базу — это надёжнее и не требует создания временной базы.

1. Прочитай `.v8-project.json` из корня проекта. Возьми `v8path` и разреши базу:
2. Если пользователь указал параметры подключения (путь, сервер) — используй напрямую
3. Если указал базу по имени — ищи по id / alias / name в `.v8-project.json`
4. Если не указал — сопоставь текущую ветку Git с `databases[].branches`
5. Если ветка не совпала — используй `default`
6. Если `.v8-project.json` нет или база не найдена — не указывай параметры подключения: скрипт автоматически создаст временную базу. Для EPF со ссылочными типами (CatalogRef, DocumentRef и т.д.) генерируются заглушки метаданных. Временная база удаляется после сборки.

Если `v8path` не задан — автоопределение: `Get-ChildItem "C:\Program Files\1cv8\*\bin\1cv8.exe" | Sort -Desc | Select -First 1`
Если использованная база не зарегистрирована — после выполнения предложи добавить через `/db-list add`.

## Команда

```powershell
powershell.exe -NoProfile -File skills/1c-epf-build/scripts/epf-build.ps1 <параметры>
```

### Параметры скрипта

| Параметр | Обязательный | Описание |
|----------|:------------:|----------|
| `-V8Path <путь>` | нет | Каталог bin платформы (или полный путь к 1cv8.exe) |
| `-InfoBasePath <путь>` | * | Файловая база |
| `-InfoBaseServer <сервер>` | * | Сервер 1С (для серверной базы) |
| `-InfoBaseRef <имя>` | * | Имя базы на сервере |
| `-UserName <имя>` | нет | Имя пользователя |
| `-Password <пароль>` | нет | Пароль |
| `-SourceFile <путь>` | да | Путь к корневому XML-файлу исходников |
| `-OutputFile <путь>` | да | Путь к выходному EPF/ERF-файлу |
| `-StrictLog` | нет | Отказ в журнале поднимает код возврата до 1, даже если платформа вернула 0 |
| `-AdditionalV8Arguments <список>` | нет | Аргументы платформы через запятую, доходят и до временной базы |

> `*` — опционально. Если не указано — автоматически создаётся временная база со заглушками метаданных

## Примеры

```powershell
# Сборка обработки (файловая база)
powershell.exe -NoProfile -File skills/1c-epf-build/scripts/epf-build.ps1 -InfoBasePath "C:\Bases\MyDB" -SourceFile "src/МояОбработка.xml" -OutputFile "build/МояОбработка.epf"

# Серверная база
powershell.exe -NoProfile -File skills/1c-epf-build/scripts/epf-build.ps1 -InfoBaseServer "srv01" -InfoBaseRef "MyDB" -UserName "Admin" -Password "secret" -SourceFile "src/МояОбработка.xml" -OutputFile "build/МояОбработка.epf"
```

## После пересборки: кеш метаданных по имени файла

Платформа (по сообщениям, начиная с 8.3.11) кеширует метаданные внешней обработки, привязывая кеш к
**имени файла**. Пересобрал обработку под тем же именем - в сеансе может подхватиться структура из
кеша: новые реквизиты и команды "не видны", хотя в файле они есть. Лечится сменой UUID обработки при
пересборке либо новым именем файла.

**Своей проверкой это не подтверждено** - нужна живая платформа, в тестовом контуре набора ее нет.
Источник - свод правил проекта [1c-ai-dev-env](https://github.com/Pradushkoai/1c-ai-dev-env) (MIT).
Как проверить у себя: собрать обработку, открыть в сеансе, добавить реквизит, пересобрать под тем же
именем и открыть снова, не перезапуская сеанс. Реквизита нет - кеш есть.

## Дополнительные аргументы платформы

Аргумент, которого нет среди параметров навыка, передается ключом `-AdditionalV8Arguments`
списком через запятую: `-AdditionalV8Arguments "/UseHwLicenses+,/ClearCache"`. Разделитель
запятая, а не пробел, потому что значение аргумента платформы само содержит пробелы.

Постоянный набор задается в `.v8-project.json` рядом с проектом:

```json
{
  "v8args": ["/UseHwLicenses+"],
  "ibcmdargs": ["--verbose"]
}
```

Файл ищется вверх по дереву от целевого каталога. Аргументы вызова заменяют значение из
настроек целиком, а не дополняют его: иначе снять заданный в проекте аргумент было бы нечем.

## Вывод платформы

Потоки процесса перехватываются в файлы и печатаются под заголовком `--- Вывод платформы ---`.
Кодировка определяется по содержимому: платформа пишет в кодировке консоли (866 на русской
Windows), утилита администрирования и часть сборок - в UTF-8. Вывод показывается и при
успешном завершении: платформа сообщает предупреждения, не меняя код возврата.