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