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

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

Как работают регистры в 1С: устройство, виды и практическое применение

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

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

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

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

Что такое регистр и из чего он состоит

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

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

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

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

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

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

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

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

Сравнение видов регистров

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

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

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

Остатки товаров, денег, взаиморасчётов. Приход/расход, быстрые остатки на дату. Требует документа-регистратора.

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

Продажи, выручка, начисления за период. Нет понятия остатка, только сумма за интервал.

Регистр бухгалтерии

Проводки по плану счетов с дебетом, кредитом и субконто. Только для бухгалтерского учёта.

Как документы создают движения по регистрам

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

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

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

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

Виртуальные таблицы: остатки, обороты и срезы

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

Например, запрос ОстаткиТоваров.Остатки(&Дата, Склад = &Склад) вернёт остаток каждой номенклатуры на указанный момент с отбором по складу. Важная тонкость: виртуальной таблице остатков нужно передавать момент времени и отборы именно через параметры виртуальной таблицы, а не в секции ГДЕ — это принципиально влияет на производительность, потому что отбор в параметрах применяется до вычисления итогов.

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

Типичные ошибки при работе с регистрами
01
Отбор по измерению в секции ГДЕ вместо параметров виртуальной таблицы — запрос сканирует все итоги и работает в разы медленнее.
02
Соединение с виртуальной таблицей остатков без указания периода — получаете остатки на текущую дату вместо даты документа.
03
Хранение аналитики в реквизитах регистра — по таким полям нельзя построить группировку в отчёте.
04
Контроль остатков после записи движений без блокировки — при параллельной работе пользователи уводят остатки в минус.
05
Расход по регистру остатков без проверки достаточности — отрицательные остатки и некорректная себестоимость.

Итоги, производительность и скорость отчётов

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

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

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

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

Остаток в отчёте против суммы движений
Норма

Отчёт по виртуальной таблице остатков совпадает с суммой приходов минус расходы по карточке регистра

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

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

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

Остатки по всем измерениям неотрицательны

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

Минус по номенклатуре или складу — расход проведён до прихода или без контроля

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

У проведённого документа есть записи, у непроведённого — нет

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

Непроведённый документ имеет движения — нарушена логика обработки проведения

Регистры сведений на практике: цены и курсы

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

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

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

Как найти и исправить ошибки в движениях

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

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

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

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

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

Частые вопросы о регистрах 1С

Чем регистр накопления «остатки» отличается от «обороты»?

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

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

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

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

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

Что делать, если остаток по товару ушёл в минус?

Минус означает, что расход проведён раньше прихода или в большем количестве. Найдите отчётом с детализацией до документа первый момент появления минуса, проверьте даты и время приходных и расходных документов, затем исправьте данные в документах и перепроведите их в правильной последовательности. Включение контроля остатков при проведении предотвращает повторение ситуации.

Как узнать, какие регистры изменяет конкретный документ?

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

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

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