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

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

Регистры в 1С: как устроены и как с ними работать

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

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

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

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

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

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

Четыре вида регистров и когда какой применять

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

Вид регистраЧто хранитТипичное применение
СведенияЗначения в разрезе измерений, без количества и суммКурсы валют, цены номенклатуры, штрихкоды, настройки
НакопленияКоличественные и суммовые показателиОстатки товаров, взаиморасчёты, продажи, резервы
БухгалтерииПроводки по плану счетовБухгалтерский и налоговый учёт
РасчётаНачисления и удержания с периодом действияЗарплата, отпускные, больничные

Регистры сведений

Регистр сведений хранит пары «измерение → значение ресурса». Он может быть периодическим (значение действует с определённой даты, например курс валюты) или непериодическим (например, штрихкод товара). Важное свойство — режим подчинения регистратору: независимый регистр сведений можно редактировать вручную, подчинённый заполняется только документами.

Регистры накопления

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

Маршрут решения

Как выбрать вид регистра

Нужно знать значение на дату (курс, цена)Регистр сведений, периодический
Нужно знать остаток на дату (товары, долги)Регистр накопления с видом «Остатки»
Нужен только оборот за период (продажи, выручка)Регистр накопления с видом «Обороты»
Нужны проводки по счетамРегистр бухгалтерии
Нужны начисления с периодом действия и вытеснениемРегистр расчёта

Измерения, ресурсы и реквизиты: структура регистра

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

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

Как документы формируют движения

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

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

1c
Процедура ОбработкаПроведения(Отказ, Режим)
  Движения.ОстаткиТоваров.Записывать = Истина;
  Для Каждого Строка Из Товары Цикл
    Движение = Движения.ОстаткиТоваров.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Период = Дата;
    Движение.Номенклатура = Строка.Номенклатура;
    Движение.Склад = Склад;
    Движение.Количество = Строка.Количество;
  КонецЦикла;
КонецПроцедуры

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

Итоги, виртуальные таблицы и скорость отчётов

Для регистров накопления с видом «Остатки» платформа автоматически поддерживает таблицу итогов — предрассчитанные остатки на начало каждого месяца. Благодаря этому запрос «остатки на дату» не сканирует все записи с начала времён, а берёт ближайший итог и досчитывает движения за неполный период.

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

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

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

Как проверить и исправить данные регистра

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

Далее откройте этот документ и посмотрите его движения. Если движения не соответствуют табличной части — проблема в коде проведения или в данных документа. Часто помогает простое перепроведение документа: старые записи удаляются, новые формируются заново по актуальным данным. Для массового исправления существуют обработки группового перепроведения, но запускать их нужно вне часов пик и после резервной копии.

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

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

Как проверить корректность регистра

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

Записи соответствуют табличной части по суммам и количеству

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

Движений нет или они отличаются от данных документа

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

Сходится с суммой приходов минус расходы по записям

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

Отчёт показывает значение, не подтверждаемое записями

Скорость отчёта по остаткам
Норма

Отчёт открывается за секунды

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

Отчёт выполняется минутами — проверьте итоги и виртуальные таблицы

Отрицательные остатки
Норма

Остатков со знаком минус нет

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

Есть минус — ищите документы, проведённые задним числом

Практические рекомендации по проектированию

При создании собственного регистра начинайте с вопроса, на который он должен отвечать. Из этого вопроса напрямую следуют вид регистра и состав измерений. Не копируйте структуру «на вырост»: лишние измерения и ресурсы увеличивают объём базы и стоимость каждой записи.

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

Порядок создания регистра накопления
  1. 1
    Определите вопрос учёта: остаток на дату или оборот за период
  2. 2
    Создайте регистр накопления с нужным видом в конфигураторе
  3. 3
    Добавьте измерения по разрезам будущих отчётов и ресурсы по показателям
  4. 4
    Укажите документы-регистраторы на закладке «Регистраторы»
  5. 5
    Напишите обработку проведения с заполнением движений
  6. 6
    Проведите тестовый документ и проверьте движения и отчёт по остаткам
Полезная привычка при отладке: после изменения кода проведения всегда перепроводите тестовый документ и смотрите его движения глазами, а не только итоговый отчёт. По записям регистра ошибку в логике видно сразу, а по свёрнутому отчёту она может маскироваться другими документами.
ПЗ
Практическое замечание

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

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

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

Почему документ проведён, а в отчёте данных нет?

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

Что произойдёт с записями регистра при отмене проведения документа?

Платформа автоматически удалит все движения этого документа из всех регистров, где он является регистратором. Остатки и обороты пересчитаются. Вручную ничего очищать не требуется.

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

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

Почему отчёт по остаткам работает медленно?

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

Нужно ли вручную удалять старые записи регистров для экономии места?

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

Итог

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

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