Как устроен регистр накопления в 1С 8.3: от проведения документа до запроса к остаткам

· 9 мин

Содержание

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

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

Зачем в 1С нужен регистр накопления

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

Регистр накопления решает три задачи:

  • 📦 Хранит движения в едином виде. Неважно, какой документ двигал товар — поступление, перемещение или инвентаризация. В регистре всё это строки одной структуры.
  • ⚡ Быстро считает итоги. Платформа держит отдельную таблицу итогов и не суммирует все движения при каждом запросе.
  • 🔗 Связывает цифру с источником. У каждой строки есть регистратор — документ, который её создал. Из любого остатка можно дойти до конкретной накладной.

Главное правило: записи в регистр накопления не вводят руками. Их делает документ при проведении. Отменили проведение — движения исчезли, остаток пересчитался.

Остатки или обороты: два вида регистров накопления

При создании регистра разработчик выбирает свойство «Вид регистра». От него зависит, что регистр умеет считать.

ПараметрРегистр остатковРегистр оборотов
Что хранитВеличину, которая накапливается: приход увеличивает, расход уменьшаетСумму за период, без понятия «остаток»
Вид движенияЕсть: Приход или РасходНет, только значение
Виртуальные таблицыОстатки, Обороты, ОстаткиИОборотыТолько Обороты
АгрегатыНе поддерживаютсяПоддерживаются
Типичный примерТовары на складах, деньги в кассе, долги клиентовПродажи, выручка, расход по статьям

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

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

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

У каждого регистра накопления три группы полей. Их роль строго разная.

Измерения — разрезы учёта

Измерения отвечают на вопрос «в каком разрезе считаем». Для регистра товаров это Склад, Номенклатура, иногда Характеристика или Серия. Итоги платформа хранит по каждой комбинации измерений.

Каждое новое измерение умножает число комбинаций. Пять складов и 10 000 товаров — уже до 50 000 строк итогов. Добавьте измерение «Партия» — и строк может стать в разы больше.

Ресурсы — что считаем

Ресурсы — это суммируемые показатели. Тип ресурса у регистра накопления только числовой: количество, сумма, вес. Строку или ссылку ресурсом сделать нельзя — их нечем складывать.

Реквизиты — справочная информация

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

Стандартные реквизиты

Их платформа добавляет сама:

  1. Период — дата движения, обычно дата документа.
  2. Регистратор — документ, который сделал запись.
  3. НомерСтроки — порядок записи внутри набора одного регистратора.
  4. Активность — флаг, участвует ли запись в итогах.
  5. ВидДвижения — только у регистров остатков.

Как создать регистр накопления в конфигураторе

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

Шаг 1. Создайте объект

  1. Откройте конфигуратор, Конфигурация → Открыть конфигурацию.
  2. В дереве найдите ветку Регистры накопления, щёлкните правой кнопкой и выберите Добавить.
  3. Задайте имя без пробелов, например ТоварыНаСкладах, и синоним «Товары на складах».
  4. В свойстве «Вид регистра» выберите Остатки.

Шаг 2. Опишите структуру

На закладке «Данные» добавьте:

  • измерения Склад (тип СправочникСсылка.Склады) и Номенклатура (тип СправочникСсылка.Номенклатура);
  • ресурс Количество (число, например 15 знаков, 3 после запятой);
  • при необходимости — реквизит Комментарий.

Шаг 3. Укажите регистраторы

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

Шаг 4. Напишите обработчик проведения

На той же закладке есть «Конструктор движений» — он сгенерирует код по табличной части. Можно написать и вручную в модуле объекта документа:

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

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

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

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

Флаг Записывать = Истина говорит платформе записать набор движений после завершения обработчика. Регистратор указывать не нужно — им автоматически становится проводимый документ.

Шаг 5. Обновите базу и проверьте

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

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

Регистры накопления в типовых конфигурациях

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

  • 🛒 Управление торговлей 11. Учёт товаров построен на регистрах накопления: ТоварыНаСкладах хранит физическое наличие, отдельные регистры — свободные остатки, резервы, товары организаций. Продажи и себестоимость лежат в оборотном регистре ВыручкаИСебестоимостьПродаж, на нём построены аналитические отчёты по продажам.
  • 📊 Бухгалтерия предприятия 3.0. Основной учёт идёт на регистре бухгалтерии (проводки по плану счетов). Регистры накопления здесь вспомогательные: например, группа регистров по НДС, среди них НДСПредъявленный, из которых формируются книги покупок и продаж.
  • 👥 ЗУП 3.1. Регистры накопления хранят начисления, удержания и взаиморасчёты с сотрудниками, а сами расчёты зарплаты опираются ещё и на регистры расчёта.

Пользователю типовой не нужно знать имена регистров. Но полезно уметь смотреть движения документа. В БП 3.0 в форме документа есть кнопка «Показать проводки и другие движения документа» (значок «Дт Кт»): она показывает и проводки, и записи в регистрах накопления. Если отчёт показывает странный остаток, ищите документ, у которого движения не совпадают с ожиданием.

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

В 1С четыре вида регистров. На практике путают первые три.

ПризнакРегистр накопленияРегистр сведенийРегистр бухгалтерии
Что хранитДвижения числовых показателейЗначения на дату или без датыПроводки Дт/Кт по плану счетов
ИтогиОстатки и оборотыНет, срез первых/последнихОстатки и обороты по счетам и субконто
РегистраторОбязателен всегдаМожет быть, а может и не бытьОбязателен
Ручная записьНет, только из документаДа, если регистр независимыйТолько через документ (например, операцию)
Типичный примерОстатки товаровКурсы валют, цены, адресаУчёт по счетам 41, 60, 62

Простое правило выбора:

  • нужно знать «сколько осталось» или «сколько прошло за период» — регистр накопления;
  • нужно знать «какое значение действовало на дату» (цена, курс, ставка) — регистр сведений ;
  • нужен бухгалтерский учёт с корреспонденцией счетов — регистр бухгалтерии .
Какой регистр подходит под вашу задачу?

Ошибки, которые встречаются чаще других

Движения не появились после проведения

Проверьте три вещи: отмечен ли регистр на закладке «Движения» документа, стоит ли Записывать = Истина и вызывается ли код в ОбработкаПроведения, а не в другом событии. Если набор заполнен, но флаг не установлен, платформа запись не сделает.

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

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

Пустое поле «Период»

Без периода движение попадёт на пустую дату и испортит остатки на всех датах. Всегда заполняйте Период датой документа или моментом времени.

Остаток расходится с движениями

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

Как ускорить работу с регистрами накопления

Медленные отчёты и долгое проведение почти всегда упираются в то, как читают регистр.

  1. Передавайте условия в параметры виртуальной таблицы. Пишите Остатки(&Дата, Склад = &Склад), а не отбор в секции ГДЕ после таблицы. В первом случае платформа отберёт данные до расчёта итогов.
  2. Не читайте физическую таблицу движений ради остатков. Таблица РегистрНакопления.ТоварыНаСкладах без виртуальной таблицы — это все строки движений, а не итоги.
  3. Не запрашивайте остатки в цикле. Один запрос по всем товарам документа быстрее, чем сто запросов по одному товару.
  4. Держите измерений столько, сколько нужно. Лишнее измерение раздувает таблицу итогов. Справочные данные выносите в реквизиты.
  5. Включите агрегаты для оборотных регистров. На больших объёмах они заметно ускоряют отчёты по периодам. Управлять агрегатами можно в той же обработке «Управление итогами».
  6. Настройте период рассчитанных итогов. Если старые периоды закрыты, установите период итогов на конец закрытого месяца: остатки на текущую дату будут считаться от него.
  7. Разрешите разделение итогов (свойство регистра) там, где много пользователей одновременно проводят документы по одним и тем же измерениям. Это снижает конфликты блокировок при записи.

Прежде чем оптимизировать, найдите узкое место. Замер производительности в конфигураторе (Отладка → Замер производительности) покажет, на какой строке теряется время.

Частые вопросы

Можно ли записать движения в регистр накопления без документа?
Нет. У регистра накопления регистратор обязателен. Для ручной корректировки используют специальный документ — например, корректировку регистров или ввод остатков.
Почему ресурс нельзя сделать строкой?
Ресурсы суммируются при расчёте итогов. Сложить строки нельзя, поэтому платформа разрешает только числовой тип. Текст храните в реквизите.
Что будет с движениями при отмене проведения?
Платформа удалит все записи, у которых регистратор — этот документ. Остатки пересчитаются автоматически.
Чем отличается таблица «Остатки» от «ОстаткиИОбороты»?
«Остатки» даёт остаток на одну дату. «ОстаткиИОбороты» за период возвращает начальный остаток, приход, расход и конечный остаток — это основа оборотно-сальдовых отчётов.
Можно ли поменять вид регистра с «Остатки» на «Обороты»?
Технически да, но это изменение структуры: придётся переписать запросы к виртуальным таблицам и проверить код проведения. На рабочей базе такие правки делают только после проверки на копии.