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