Движения по регистру накопления (XBSL)
Шаг 1: Извлеки метаданные через скрипт
Запусти скрипт для регистра и для документа — это даст все нужные имена полей:
python3 .claude/skills/xbsl-pattern-register/scripts/extract_meta.py <путь-к-регистру.yaml>
python3 .claude/skills/xbsl-pattern-register/scripts/extract_meta.py <путь-к-документу.yaml>
Скрипт выводит JSON. Для регистра:
- register_kind — нужен ли ВидЗаписи (needs_record_type: true → нужен, только для Остатки)
- dimensions — измерения (в ДобавитьЗапись и ГДЕ — без суффикса)
- resources — ресурсы (в ДобавитьЗапись — без суффикса; в запросе к .Остатки — добавь суффикс Остаток)
Для документа:
- header_fields — реквизиты шапки
- tables — табличные части и их реквизиты
- handler_file — имя файла .xbsl для обработчика
Если .xbsl документа уже существует — прочитай его, чтобы не затереть код.
Шаг 2: Выбери паттерн
РегистрНакопления
| Задача | Паттерн |
|---|---|
| Приход в регистр Остатки | A1 |
| Расход из регистра Остатки | A2 |
| Движение в регистр Обороты | A3 |
| Как работает очистка при повторном проведении / удалении | A4 |
| Два регистра одновременно | A5 |
| Запрет уйти в минус / контроль остатков | B |
РегистрСведений
| Задача | Паттерн |
|---|---|
| Записать / обновить данные по ключу (Замещать = Истина) | C1 |
| Добавить данные без перезаписи существующих (Замещать = Ложь) | C2 |
| Удалить записи по фильтру | C3 |
| Получить актуальное значение (СрезПоследних, периодический РС) | C4 |
Шаблоны кода:
- РегистрНакопления: references/движения-рн.md
- РегистрСведений: references/движения-рс.md
Шаг 3: Напиши или дополни файл модуля
РегистрНакопления: файл <ИмяДокумента>.Объект.xbsl рядом с <ИмяДокумента>.yaml.
Если файл уже существует — дополни, не перезаписывай.
РегистрСведений: код пишется туда, откуда вызывается запись — это может быть .xbsl документа, общего модуля или самого РС (обработчики ПередЗаписью/ПослеЗаписи на НаборЗаписей). Уточни у пользователя, где должен находиться код.
Проверь перед финалом
@Обработчикстоит над методомПослеЗаписиВидЗаписиуказан только еслиВидРегистра: Остатки(для Обороты — не нужен)- РН:
НаборЗаписей.Фильтр.Установить(Регистратор = Ссылка)вызван доЗаписать() - РС: встроенного Регистратора нет — фильтр только по измерениям; привязки записей к документу на уровне платформы не существует
- В запросе к
.Остатки: Измерения — без суффикса, Ресурсы — с суффиксомОстаток - Контроль остатков (паттерн B) идёт после
НаборЗаписей.Записать()
Объяснения “почему” и детали платформы: references/теория.md