К статье
Практический материал

Разработка и Конфигурация · 11 мин

Как сделать регистр накопления в 1С

Как сделать регистр накопления в 1С: выбор вида регистра, измерения и ресурсы, проведение документов, движения в коде, проверка результата и типичные ошибки.

Регистр накопления — один из ключевых объектов конфигурации 1С, который хранит количественные и суммовые показатели: остатки товаров на складах, взаиморасчёты с контрагентами, движение денежных средств. Без правильно спроектированного регистра невозможно построить отчёты по остаткам и оборотам, поэтому ошибки на этапе создания приводят к неверным данным в учёте.

Создание регистра накопления выполняется в конфигураторе и занимает несколько минут, если структура продумана заранее. Основная работа — не нажатие кнопок, а выбор вида регистра, набора измерений и ресурсов, а также написание движений в модуле документа-регистратора.

Ниже разобран полный цикл: от проектирования структуры до проверки движений документа, с примерами кода, типичными ошибками и критериями выбора между остаточным и оборотным регистром.

Что нужно определить до создания регистра

Прежде чем открывать конфигуратор, ответьте на три вопроса. Первый — что именно хранит регистр: остатки на конкретный момент (складские запасы, долги) или только обороты за период (сумма продаж, количество отгрузок). От этого зависит вид регистра, который нельзя будет поменять без потери данных.

Второй вопрос — в каких разрезах нужны данные. Каждый разрез становится измерением: номенклатура, склад, контрагент, организация. Измерений не должно быть слишком много: каждое лишнее измерение увеличивает таблицу итогов и замедляет запросы, но недостающее измерение потом придётся добавлять с перепроведением всех документов.

Третий вопрос — какие числовые показатели накапливаются. Это будущие ресурсы: количество, сумма, себестоимость. Ресурс всегда числовой; если нужно хранить текст или ссылку, используйте реквизиты регистра — они не участвуют в итогах, но доступны в движениях.

Выбор вида регистра: остатки или обороты

Остаточный регистр хранит приходы и расходы и автоматически рассчитывает остаток на любую дату. Платформа поддерживает виртуальные таблицы остатков, что ускоряет отчёты. Используйте его для товаров на складах, взаиморасчётов, денег на счетах — всего, где нужен ответ на вопрос «сколько сейчас».

Оборотный регистр хранит только обороты за период, без понятия прихода и расхода. Он проще и быстрее, но не умеет отвечать на вопрос об остатке. Подходит для показателей вроде «объём продаж», «количество оказанных услуг», где анализируется период, а не момент времени.

Сравнение вариантов

Регистр остатков

Когда нужны остатки на дату: товары, долги, деньги. Поддерживает контроль остатков, но требует корректных видов движения (приход/расход).

Оборотный регистр

Когда анализируются только обороты за период: продажи, начисления. Быстрее и проще, но остаток получить нельзя.

Создание регистра в конфигураторе

Откройте конфигуратор, в дереве конфигурации найдите ветку «Регистры накопления», вызовите контекстное меню и выберите «Добавить». На закладке «Основные» задайте имя (например, ТоварыНаСкладах), синоним и вид регистра — «Остатки» или «Обороты». Для оборотного регистра дополнительно укажите периодичность: в пределах секунды, дня, месяца и т.д.

На закладке «Данные» добавьте измерения, ресурсы и реквизиты. Для измерений укажите тип — обычно ссылка на справочник. Для ресурсов задайте тип «Число» с нужной длиной и точностью: для количества обычно достаточно 15 знаков и 3 знаков после запятой, для сумм — 15 и 2. Не завышайте точность без необходимости — это влияет на объём хранения.

На закладке «Регистраторы» отметьте документы, которые будут делать движения по регистру: например, «ПриходнаяНакладная» и «РасходнаяНакладная». После этого в модуле каждого документа появится возможность обращаться к набору записей регистра через Движения.ТоварыНаСкладах.

Порядок создания регистра
  1. 1
    В дереве конфигурации откройте «Регистры накопления» → «Добавить»
  2. 2
    Задайте имя, синоним и вид регистра (остатки/обороты)
  3. 3
    На закладке «Данные» добавьте измерения, ресурсы и реквизиты
  4. 4
    На закладке «Регистраторы» отметьте документы, формирующие движения
  5. 5
    Обновите конфигурацию базы данных (F7)
  6. 6
    Запрограммируйте движения в обработке проведения документов

Программирование движений документа

Движения формируются в процедуре ОбработкаПроведения модуля документа. Для каждой строки табличной части создаётся запись набора: устанавливается вид движения (для остаточного регистра), заполняются измерения и ресурсы.

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

Движения.ТоварыНаСкладах.Записывать = Истина;

Для Каждого СтрокаТовары Из Товары Цикл

Движение = Движения.ТоварыНаСкладах.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Номенклатура = СтрокаТовары.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = СтрокаТовары.Количество;

КонецЦикла;

КонецПроцедуры

Для расходного документа код аналогичен, но вид движения — ВидДвиженияНакопления.Расход. Если структура движений сложная, удобнее сначала выгрузить табличную часть запросом в таблицу значений и заполнить набор методом Загрузить() — так код короче и быстрее при большом числе строк.

Свойство Записывать = Истина обязательно: без него набор записей не будет записан в базу, и документ проведётся «молча», без движений. Это одна из самых частых причин «пустого» регистра у начинающих разработчиков.

Контроль остатков при расходе

Для остаточных регистров часто требуется запретить отрицательные остатки: нельзя списать товар, которого нет на складе. Контроль выполняется запросом к виртуальной таблице остатков РегистрНакопления.ТоварыНаСкладах.Остатки с отбором по измерениям документа.

Типовой подход: после формирования движений записать набор (Движения.ТоварыНаСкладах.Записать()), затем запросом получить отрицательные остатки по затронутым позициям и, если они есть, установить Отказ = Истина с сообщением пользователю. Проверку после записи движений платформа выполняет корректно, так как транзакция проведения откатится при отказе.

Учтите, что контроль по дате документа без учёта более поздних движений может пропустить отрицательный остаток «в середине» периода. Если документы вводятся задним числом, контроль лучше выполнять на актуальную границу итогов или перепроводить последующие документы.

Проверка результата

После обновления конфигурации и проведения тестового документа откройте движения документа: в пользовательском режиме — кнопка «Движения документа» (или меню «Ещё» → «Движения документа»). Убедитесь, что записи появились, виды движений верны, а измерения и ресурсы заполнены.

Затем постройте универсальный отчёт или отчёт «Остатки и обороты» по регистру: остаток на дату после прихода должен равняться проведённому количеству. Проведите расходный документ и проверьте уменьшение остатка. Если отчёт пуст при наличии движений — проверьте, рассчитаны ли итоги регистра и не установлен ли отбор, исключающий данные.

Контрольные точки

Как проверить результат

Движения документа
Норма

Записи есть, вид движения и значения ресурсов соответствуют табличной части

Тревожный признак

Список движений пуст при проведённом документе — не установлено Записывать = Истина

Отчёт по остаткам
Норма

Остаток равен сумме приходов минус расходы

Тревожный признак

Остаток нулевой или отрицательный без причины — ошибка в виде движения или периоде записи

Перепроведение документа
Норма

Движения обновляются, дублей нет

Тревожный признак

Суммы удваиваются — набор записывается без очистки или движения добавляются дважды

Типичные ошибки и их последствия

Самая распространённая ошибка — забытое Движения.Регистр.Записывать = Истина: документ проводится, но регистр остаётся пустым. Вторая по частоте — неверный вид движения: расход записан как приход, и остатки растут вместо уменьшения. Обе ошибки легко выявляются просмотром движений тестового документа.

К более тяжёлым последствиям приводит избыточное число измерений «на всякий случай» и хранение в ресурсах того, что должно быть реквизитом. Первое раздувает таблицы итогов и замедляет отчёты, второе искажает суммы: например, если цену сделать ресурсом, в оборотах она будет суммироваться, что бессмысленно.

Типичные ошибки
01
Не установлено Записывать = Истина — документ проводится без движений, регистр пуст
02
Перепутан вид движения приход/расход — остатки уходят в минус или растут бесконтрольно
03
Измерения добавлены «про запас» — замедление отчётов и рост базы
04
Цена или ставка сделана ресурсом — бессмысленные суммы в оборотах вместо того, чтобы быть реквизитом
05
Контроль остатков выполняется без учёта документов, введённых задним числом

Часто задаваемые вопросы

Чем регистр накопления отличается от регистра сведений?

Регистр накопления хранит числовые показатели и поддерживает итоги: остатки и обороты. Регистр сведений хранит произвольные значения в разрезе измерений (например, цены номенклатуры или курсы валют) и не имеет ресурсов-итогов. Для количественного учёта нужен регистр накопления, для хранения параметров — регистр сведений.

Можно ли изменить вид регистра с остатков на обороты после ввода данных?

Технически изменение возможно в конфигураторе, но оно приводит к перестройке таблиц регистра и фактической потере накопленных движений в прежнем смысле. Безопасный путь — создать новый регистр нужного вида, перенести движения обработкой и перепровести документы, предварительно сделав резервную копию.

Нужно ли вручную удалять движения при отмене проведения?

Нет. При отмене проведения платформа автоматически очищает наборы записей документа по всем регистрам, где он является регистратором. Ручное удаление требуется только в нестандартных сценариях, например при программной записи наборов вне механизма проведения.

Сколько измерений допустимо в регистре накопления?

Жёсткого практического лимита, который встречается в реальных проектах, обычно нет, но каждое измерение увеличивает таблицу итогов и время расчёта остатков. Ориентируйтесь на реально нужные аналитические разрезы отчётов: чаще всего достаточно двух-пяти измерений. Редко используемую аналитику лучше выносить в реквизиты.

Почему отчёт по остаткам показывает неверные данные при корректных движениях?

Частая причина — сдвинутая или нерассчитанная граница итогов регистра. Проверьте границу итогов в режиме «Управление итогами» и при необходимости выполните полный пересчёт. Также убедитесь, что в отчёте не задан отбор или период, исключающий часть данных.

Можно ли делать движения по регистру без документа-регистратора?

Штатно каждая запись регистра накопления привязана к регистратору — документу. Обойти это не получится: регистратор обязателен. Если нужны корректировочные записи, создайте служебный документ «Корректировка регистров» или «Операция» и делайте движения через него — это стандартная и аудируемая практика.

Итог

Что важно запомнить

Правильный регистр накопления начинается с проектирования: вид (остатки/обороты), минимально необходимые измерения и числовые ресурсы. Движения программируются в обработке проведения с обязательным Записывать = Истина, результат проверяется просмотром движений и отчётом по остаткам. Перед изменением структуры регистра в рабочей базе делайте резервную копию.