Как устроены регистры 1С:Предприятия 8.3 и зачем каждый из четырёх видов
Содержание
Регистр в 1С — это таблица, где программа хранит итоговые данные учёта: остатки товаров, долги контрагентов, курсы валют, проводки, начисления зарплаты. Документ сам по себе ничего не «знает» про остатки. При проведении он записывает в регистры строки-движения, а отчёты и проверки читают уже регистры. В 1С:Предприятии 8.3 четыре вида регистров: сведений, накопления, бухгалтерии и расчёта.
Пользователю регистры нужны, чтобы понять, откуда отчёт взял цифру. Разработчику — чтобы правильно спроектировать учёт и быстро получать данные запросом. Оба взгляда разобраны на примерах из типовых конфигураций БП 3.0 и ЗУП 3.1.
Регистр в 1С как «журнал фактов» учёта
Удобнее всего представить регистр как журнал, в который пишут только факты, без пояснений. «12 марта на склад Основной пришло 50 штук товара А. Основание — поступление № 15». Такая строка называется движением или записью регистра.
У любого регистра есть три типа полей:
- 📐 Измерения — разрезы, по которым ведут учёт: склад, номенклатура, контрагент, договор.
- 🔢 Ресурсы — то, что считают: количество, сумма, курс, цена. У регистров накопления и бухгалтерии ресурсы только числовые.
- 📝 Реквизиты — дополнительная информация к записи, по которой итоги не считаются. Например, комментарий или ответственный.
Почему не хватает одних документов? Чтобы узнать остаток товара на дату, пришлось бы перебрать все приходы и расходы за всю историю базы. Регистр накопления хранит ещё и готовые итоги по периодам. Поэтому остаток на любую дату платформа получает быстро, даже в базе с миллионами строк.
Правило, которое объясняет почти все «странные» цифры в отчётах: отчёт показывает не документы, а движения регистров. Документ записан, но не проведён — движений нет, и в отчёте его не будет.
Четыре вида регистров в 1С: сравнение
| Вид регистра | Что хранит | Как пишется | Пример в типовых |
|---|---|---|---|
| Регистр сведений | Значения в разрезе измерений, часто во времени | Документом или вручную | Курсы валют, цены номенклатуры |
| Регистр накопления | Приход и расход, остатки или обороты | Только документом-регистратором | Товары на складах, продажи |
| Регистр бухгалтерии | Проводки Дт/Кт по плану счетов | Только документом-регистратором | Регистр «Хозрасчетный» в БП 3.0 |
| Регистр расчёта | Начисления и удержания с периодами действия | Только документом-регистратором | Начисления зарплаты в ЗУП 3.1 |
Главное отличие регистра сведений — он может жить без документов. Остальные три всегда связаны с регистратором: документом, который сформировал движения. Удалили или распровели документ — его движения исчезли вместе с ним.
Как посмотреть регистры в пользовательском режиме
- Включите команду «Все функции»:
Главное меню → Сервис → Параметры, флажок «Отображать команду Все функции». - Откройте
Главное меню → Все функции. - Разверните ветку нужного вида: «Регистры сведений», «Регистры накопления» и т. д.
- Двойной щелчок по регистру открывает список его записей. Его можно отобрать и вывести в Excel.
Движения конкретного документа удобнее смотреть из самого документа. В БП 3.0 для этого служит кнопка ДтКт в форме документа: она открывает проводки и движения по всем регистрам.
Регистры накопления: остатки, обороты и движения
Регистр накопления — рабочая лошадка любой конфигурации. Склад, взаиморасчёты, продажи, резервы, себестоимость — всё это регистры накопления.
При создании разработчик выбирает вид регистра:
- 📦 Остатки — для того, что можно «пересчитать на полке»: товары на складе, задолженность, деньги в кассе. Каждое движение имеет вид
ПриходилиРасход. - 📈 Обороты — для того, что только накапливается и не имеет остатка: продажи, закупки, выпуск. Вида движения нет.
Пример регистра «Товары на складах» вида Остатки:
| Период | Регистратор | Вид движения | Склад | Номенклатура | Количество |
|---|---|---|---|---|---|
| 01.03 | Поступление № 15 | Приход | Основной | Товар А | 50 |
| 05.03 | Реализация № 40 | Расход | Основной | Товар А | 12 |
| 09.03 | Перемещение № 3 | Расход | Основной | Товар А | 8 |
Остаток товара А на складе Основной после 9 марта: 50 − 12 − 8 = 30 штук. Именно эту цифру покажет ведомость по товарам.
Как документ пишет движения
В модуле объекта документа в процедуре ОбработкаПроведения формируют набор записей. Упрощённый пример для поступления:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ТоварыНаСкладах.Записывать = Истина;
Для Каждого СтрокаТовары Из Товары Цикл
Движение = Движения.ТоварыНаСкладах.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Склад = Склад;
Движение.Номенклатура = СтрокаТовары.Номенклатура;
Движение.Количество = СтрокаТовары.Количество;
КонецЦикла;
КонецПроцедуры
Поле Регистратор заполнять не нужно: платформа подставит ссылку на документ сама. Флаг Записывать = Истина говорит платформе записать набор после выхода из процедуры.
Как получить остаток запросом
Для регистра вида Остатки платформа даёт виртуальные таблицы Остатки, Обороты и ОстаткиИОбороты. Для оборотного регистра — только Обороты.
ВЫБРАТЬ
ТоварыОстатки.Номенклатура,
ТоварыОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&НаДату, Склад = &Склад) КАК ТоварыОстатки
Условие Склад = &Склад стоит в параметрах виртуальной таблицы, а не в ГДЕ. Так платформа отбирает данные до расчёта остатков, а не после. На больших базах разница во времени бывает в десятки раз.
Регистры сведений: справочная информация во времени
Регистр сведений хранит значения, которые не складываются, а заменяются. Курс доллара на сегодня не прибавляется к вчерашнему — он просто действует с новой даты.
Ключевая настройка — периодичность:
- Непериодический — одна запись на комбинацию измерений, без истории. Подходит для настроек и соответствий.
- В пределах секунды / дня / месяца / квартала / года — у каждой записи есть период. Можно узнать значение на любую дату.
- В пределах позиции регистратора — для регистров, подчинённых документу, когда на одну секунду приходится несколько записей.
Вторая настройка — режим записи:
| Режим | Кто пишет | Когда выбирать |
|---|---|---|
| Независимый | Пользователь вручную, обработка, код | Курсы, настройки, адреса, соответствия |
| Подчинение регистратору | Только документ при проведении | Цены, установленные документом, кадровые события |
В режиме «Подчинение регистратору» записи живут вместе с документом. Отменили проведение — записи удалились.
Срез последних
Самый частый вопрос к периодическому регистру: какое значение действовало на дату. Для этого есть виртуальная таблица СрезПоследних:
ВЫБРАТЬ
Курсы.Валюта,
Курсы.Курс,
Курсы.Кратность
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта) КАК Курсы
Если курс загружали 1, 5 и 10 числа, запрос на 7 число вернёт значение от 5 числа. Есть и обратная таблица СрезПервых — первое значение после даты, она нужна реже.
Регистр сведений с измерениями «Номенклатура» и «Склад» и ресурсом «Количество» — частая ошибка новичка. Остатки так не хранят: при каждом движении придётся читать и перезаписывать запись, а история пропадёт. Для остатков нужен регистр накопления.
Регистры бухгалтерии и план счетов
Регистр бухгалтерии хранит проводки. Без плана счетов он не существует: в его свойствах указывают план счетов , и каждая запись ссылается на счёт.
Особенности, которых нет у других регистров:
- 🔀 Корреспонденция. При включённом свойстве запись имеет две стороны —
СчетДтиСчетКт, как привычная проводка. Без корреспонденции запись одна, с признаком дебета или кредита. - 🗂 Субконто. Аналитика задаётся не измерениями регистра, а видами субконто в плане счетов. У счёта 60 это контрагент, договор и документ расчётов, у счёта 41 — номенклатура и склад. Максимальное число субконто на счёт задаётся в плане счетов. В БП 3.0 оно равно трём.
- ⚖️ Балансовые ресурсы. Ресурс «Сумма» балансовый: дебет и кредит проводки равны. Количество и валютная сумма — забалансовые, они указываются для каждой стороны отдельно.
В 1С:Бухгалтерии 3.0 все проводки живут в одном регистре «Хозрасчетный». ОСВ, карточка счёта, анализ субконто — это отчёты по нему. Налоговый учёт по налогу на прибыль ведётся в том же регистре, через отдельные ресурсы сумм НУ, ПР и ВР.
Виртуальные таблицы регистра бухгалтерии: Остатки, Обороты, ОстаткиИОбороты, ОборотыДтКт, ДвиженияССубконто. Последняя возвращает проводки в привычном виде, со всеми субконто в одной строке.
ВЫБРАТЬ
Остатки.Субконто1 КАК Контрагент,
Остатки.СуммаОстатокКт КАК Долг
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(
&НаДату,
Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПоставщиками), ,
) КАК Остатки
Этот запрос показывает кредитовое сальдо по счёту 60.01 в разрезе контрагентов на дату.
Регистры расчёта и учёт взаиморасчётов
Здесь легко запутаться из-за названия. Регистр расчёта не предназначен для взаиморасчётов с покупателями и поставщиками. Долги контрагентов в оперативном учёте хранят регистры накопления вида Остатки, а в бухгалтерском — счета 60, 62, 76 в регистре бухгалтерии.
Регистр расчёта нужен для периодических вычислений, где результат зависит от других начислений и от времени. Классика — зарплата:
- 📅 Период действия. У записи есть даты начала и окончания. Оклад начислен за 1–31 марта, больничный — за 10–14 марта.
- ⏩ Вытеснение. Больничный вытесняет оклад за свои дни. Платформа считает фактический период действия оклада сама: 1–9 и 15–31 марта.
- 🧮 База. Отпускные считаются от начислений за прошлые месяцы. Виртуальная таблица
БазаНачислениясобирает эту базу. - 🔁 Перерасчёты. Если задним числом провели больничный, платформа отмечает зависимые записи для перерасчёта.
Регистр расчёта всегда связан с планом видов расчёта (виды начислений и удержаний) и обычно — с регистром сведений графиков работы. Самостоятельно его почти не создают. В типовых конфигурациях он встречается в ЗУП 3.1 и в ERP с блоком зарплаты.
В 1С:Бухгалтерии 3.0 зарплату тоже можно считать, но там нет такой механики вытеснения и перерасчётов, как в ЗУП. Поэтому сложные кадровые случаи, например отзыв из отпуска с перерасчётом, ведут в ЗУП.
Какой регистр выбрать: подсказка разработчику
Когда добавляете свой учёт в расширение или собственную конфигурацию, ответьте себе на три вопроса.
Чем меньше измерений, тем быстрее регистр. Каждое лишнее измерение множит число строк в таблице итогов. Если поле нужно только для информации, делайте его реквизитом, а не измерением.
Ошибки при работе с регистрами 1С
Отчёт не видит документ. Документ записан, но не проведён, или проведён в другом периоде. Проверьте движения кнопкой ДтКт или через «Все функции».
После изменения структуры регистра данные «поехали». Добавили измерение — старые движения его не заполнили. Документы, которые формируют движения, нужно перепровести. В БП для этого есть обработка «Групповое перепроведение документов» в разделе Операции.
Остатки на дату считаются медленно или неверно. Итоги регистров накопления и бухгалтерии хранятся до определённой даты. Если они повреждены или не пересчитаны, помогает Все функции → Стандартные → Управление итогами. Пересчёт итогов на большой базе идёт долго и нагружает сервер. Делайте его вне рабочего времени, когда пользователи не проводят документы.
Отрицательные остатки. Регистр накопления сам не запрещает расход больше прихода. Контроль пишут в коде проведения или включают в настройках конфигурации, если он там предусмотрен. Отрицательный остаток — сигнал, что поступление проведено позже расхода или не проведено вовсе.
Отбор в ГДЕ вместо параметров виртуальной таблицы. Запрос работает, но медленно, а для таблиц остатков иногда даёт другие строки. Отбор по измерениям ставьте в параметр «Условие».
Ручная правка движений. В БП у документа можно включить ручную корректировку проводок. После этого перепроведение больше не пересчитывает движения автоматически. Ручные правки потом забывают, и ОСВ расходится с документами. Пользуйтесь этим только осознанно и отмечайте в комментарии документа.
Не удаляйте записи регистров накопления и бухгалтерии напрямую, обработкой или через конфигуратор. Записи принадлежат документу, и при следующем перепроведении он запишет их снова. Если движения неверные — исправляйте документ.
Частые вопросы
Можно ли записать в регистр накопления без документа?
Чем ресурс отличается от реквизита?
Где посмотреть, в какие регистры пишет документ?
ДтКт в форме проведённого документа.