| name | xbsl-pattern-register |
| description | Паттерны XBSL для работы с регистрами в 1С:Элемент — синтаксис существенно отличается от классической 1С, используй до написания кода.
Вызывай когда: документ делает движения по регистру; нужен приход/расход/списание/ поступление на склад; проведение документа меняет остатки или обороты; нужна отмена проведения; документ записывает данные в регистр сведений при проведении.
РегистрНакопления (паттерны A1–A5, B): приход, расход или проводки при проведении документа (ПослеЗаписи, НаборЗаписей); замена старых движений при повторном проведении; отмена проведения (очистка движений); контроль / запрет отрицательных остатков.
РегистрСведений (паттерны C1–C4): запись/обновление данных по измерениям (Замещать = Истина); добавление без перезаписи (Замещать = Ложь); удаление записей по фильтру; срез последних для периодических регистров (СрезПоследних).
НЕ для: отчётов по регистрам, создания объектов РН/РС, форм, справочников.
|
| compatibility | Requires Python 3. |
Во всех командах ниже {python} означает python в Windows и python3 в macOS/Linux/WSL. Выбирай команду сразу по текущей ОС, не запускай оба варианта.
Движения по регистру накопления (XBSL)
Шаг 1: Извлеки метаданные через скрипт
Запусти скрипт для регистра и для документа — это даст все нужные имена полей:
{python} .claude/skills/xbsl-pattern-register/scripts/extract_meta.py <путь-к-регистру.yaml>
{python} .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