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