Разработка и Конфигурация · 10 мин
Регистр накопления в 1С: что такое активность записей
Что означает свойство «Активность» у записи регистра накопления в 1С, как оно влияет на итоги и отчёты, как включить или отключить активность записей программно и вручную.
У каждой записи регистра накопления в 1С есть служебное поле «Активность». Оно определяет, участвует ли запись в расчёте итогов регистра: активная запись входит в остатки и обороты, неактивная — физически хранится в таблице, но на итоги не влияет. Именно поэтому один и тот же документ может «не давать остатков», хотя его движения в регистре видны.
Механизм активности используется платформой при отмене проведения: записи документа не удаляются сразу, а помечаются неактивными (в ряде режимов) либо удаляются — поведение зависит от режима записи. Разработчик может управлять активностью и вручную через свойство набора записей, что полезно при реализации сторнирования, временного отключения движений или сложных схем корректировки.
Что такое регистр накопления и где в нём живёт активность
Регистр накопления — это объект конфигурации, предназначенный для хранения количественных показателей: остатков товаров, взаиморасчётов, денежных средств, оборотов по продажам. Регистр состоит из измерений (в разрезе чего храним), ресурсов (что храним) и реквизитов (дополнительная аналитика). Каждая строка движений — это отдельная запись регистра.
Помимо пользовательских полей, у каждой записи есть системные: «Регистратор», «Номер строки», «Период», «Вид движения» (для регистров остатков) и «Активность». Поле «Активность» имеет тип «Булево»: Истина — запись активна и учитывается в итогах, Ложь — запись существует, но в итогах не участвует.
Важно понимать: неактивность — это не удаление. Запись остаётся в таблице, её видно в списке движений и в запросах к физической таблице регистра, но виртуальные таблицы «Остатки», «Обороты», «ОстаткиИОбороты» её не учитывают.
Как активность влияет на итоги и отчёты
Все стандартные механизмы получения итогов в 1С опираются на активность. Когда вы строите отчёт по остаткам товаров, платформа читает виртуальную таблицу «Остатки», которая рассчитывается только по активным записям. Если у документа движения есть, но они неактивны, отчёт покажет ноль — как будто документа и не было.
Это же касается запросов. Обращение к физической таблице регистра без отбора по активности вернёт и активные, и неактивные записи, что часто становится источником расхождений: «в таблице движения есть, а в отчёте их нет». Корректный запрос к физической таблице должен содержать условие ГДЕ Регистр.Активность, если нужны только учитываемые в итогах записи.
Как проверить, влияет ли запись на итоги
Истина (флажок установлен) — запись учитывается
Ложь — запись в остатки не попадёт
Совпадает с суммой активных движений
Отчёт меньше суммы движений — часть записей неактивна
Остаток изменяется после проведения документа
Остаток не меняется — проверьте активность и период записей
Когда записи становятся неактивными: типовые сценарии
Отмена проведения и пометка удаления
При отмене проведения документа в типовом поведении платформа удаляет его движения. Однако в некоторых режимах и при работе с наборами записей вручную записи могут оставаться в базе в неактивном состоянии. Если вы видите движения у непроведённого документа — проверьте их активность: неактивные записи для непроведённого документа — это нормальное состояние, они не искажают учёт.
Сторнирование и корректировки
В собственных механизмах сторно разработчики иногда не удаляют ошибочные движения, а снимают с них активность и добавляют корректирующие записи отдельным документом. Такой подход сохраняет историю: видно, что и когда было отменено. Платформа это допускает, потому что итоги считаются только по активным записям.
Обмены данными и загрузка
При загрузке данных через обмены или обработки набор записей иногда записывается с активностью «Ложь» — намеренно (чтобы не влиять на итоги до завершения загрузки) или по ошибке (свойство не установили явно, а обработчик выставил Ложь). После массовых загрузок полезно проверять долю неактивных записей в регистрах.
Откройте движения документа и посмотрите колонку «Активность»
Убедитесь, что активность = Ложь; если Истина — это ошибка
Добавьте в запрос условие по полю Активность
Как посмотреть и изменить активность вручную
В пользовательском режиме активность видна в форме списка движений документа: откройте документ, перейдите к его движениям по регистру и включите отображение колонки «Активность» через настройку списка. В типовых конфигурациях редактирование движений вручную обычно недоступно — и это правильно, потому что ручное изменение записей регистра разрывает связь с документом-регистратором.
Если требуется исправить движения, безопасный путь — отменить проведение документа и провести его заново. Платформа перезапишет набор записей с корректной активностью. Прямое редактирование записей в таблице через внешние инструменты — рискованная операция, которая может привести к рассинхронизации итогов и необходимости пересчёта.
Управление активностью программно
В коде активность задаётся либо для каждой записи набора индивидуально, либо для всего набора сразу. При добавлении новой записи через Добавить() активность по умолчанию равна Истина, поэтому в типовом проведении о ней обычно не думают. Но при нестандартных сценариях свойство устанавливают явно.
НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Активность = Истина; // запись будет участвовать в итогах
НоваяЗапись.Период = ДатаДокумента;
НоваяЗапись.ВидДвижения = ВидДвиженияНакопления.Приход;
НоваяЗапись.Номенклатура = Номенклатура;
НоваяЗапись.Количество = 10;
НаборЗаписей.Записать();
Чтобы сделать неактивными все движения документа без их удаления, достаточно прочитать набор, пройти по записям, установить Активность = Ложь и записать набор с замещением. Обратный приём — «оживление» записей — выполняется аналогично. Помните, что запись набора с замещением требует корректно установленного отбора по регистратору, иначе можно затронуть чужие движения.
- 1Сделайте резервную копию или выполняйте действия на копии базы
- 2Создайте набор записей регистра и установите отбор по регистратору
- 3Вызовите Прочитать() и проверьте, что записи принадлежат нужному документу
- 4Установите каждой записи Активность = Ложь
- 5Запишите набор с замещением и проверьте отчёт по остаткам
Активность и пересчёт итогов
Массовое изменение активности влияет на итоги так же, как добавление или удаление записей. Платформа хранит рассчитанные итоги в отдельных таблицах, и при записи набора они обновляются автоматически. Однако после внештатных ситуаций — сбоев, прямых правок, нештатных загрузок — итоги могут разойтись с движениями.
Признак такой проблемы: отчёт по остаткам не сходится с детальным отчётом по движениям при одинаковых отборах. В этом случае выполняется пересчёт итогов регистра: в режиме «Конфигуратор» через «Администрирование — Тестирование и исправление» (с осторожностью и на копии) либо программно методом ПересчитатьИтоги() менеджера регистра. Пересчёт строит итоги заново по активным записям.
Типичные ошибки при работе с активностью
Ошибки с активностью чаще всего проявляются не сразу, а при построении отчётов за период, поэтому их стоит знать заранее. Ниже — ситуации, которые регулярно встречаются в практике разработки и сопровождения.
Как выбрать действие
Частые вопросы
Чем активность отличается от пометки удаления документа?
Пометка удаления относится к документу-регистратору и не влияет на итоги напрямую: пока документ проведён, его движения учитываются. Активность — свойство самой записи регистра: неактивная запись не участвует в итогах независимо от состояния документа.
Почему у непроведённого документа видны движения в регистре?
Это записи, оставшиеся в таблице в неактивном состоянии. Они хранятся как история, но в остатки и обороты не входят. Если же у непроведённого документа записи активны — это ошибка, которую нужно исправлять перепроведением или очисткой движений.
Как в запросе выбрать только записи, влияющие на итоги?
Используйте виртуальные таблицы «Остатки» и «Обороты» — они сами учитывают только активные записи. Если обращаетесь к физической таблице регистра, добавьте условие ГДЕ Таблица.Активность = ИСТИНА.
Можно ли восстановить активность записей после ошибочного отключения?
Да. Прочитайте набор записей с отбором по регистратору, установите каждой записи Активность = Истина и запишите набор с замещением. После этого сверьте отчёт по остаткам с ожидаемыми данными, а при расхождениях выполните пересчёт итогов.
Влияет ли активность на скорость работы отчётов?
Неактивные записи увеличивают физический размер таблицы движений, но в расчёте итогов не участвуют. При большом объёме «мёртвых» записей имеет смысл удалять их штатными средствами (отменой проведения, свёрткой базы), чтобы не раздувать таблицы.
Нужно ли явно устанавливать активность при стандартном проведении?
Нет. При добавлении записи методом Добавить() активность по умолчанию равна Истина, и типовой обработчик проведения работает корректно без дополнительных действий. Явная установка требуется только в нестандартных сценариях: сторнировании, загрузках, временном отключении движений.
Что важно запомнить
Активность — булево свойство записи регистра накопления, определяющее её участие в итогах. Неактивные записи хранятся в базе, но не попадают в остатки и обороты. Проверяйте активность при расхождениях отчётов и движений, исправляйте движения перепроведением документа, а пересчёт итогов выполняйте только на копии и в нерабочее время.