Регистр сведений или накопления

Классический вопрос-фильтр: собеседующий проверяет, понимаете ли вы саму модель данных 1С, а не только синтаксис.

Регистр сведений хранит состояние (цена, курс, ответственный на дату), регистр накопленияресурс, который прибывает и убывает (товары на складе, деньги на счёте).

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

Что на самом деле спрашивают

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

Регистр сведений — это «фотография состояния»

Он отвечает на вопрос «какое значение было / есть у чего-то». Цена номенклатуры, курс валюты, ответственный менеджер клиента, ставка НДС — всё это состояния. У регистра сведений есть измерения (в разрезе чего храним, например Номенклатура) и ресурсы (что именно храним, например Цена). Записать в него можно и вручную, независимо от документов.

// Записываем цену номенклатуры в регистр сведений "Цены"
МенеджерЗаписи = РегистрыСведений.Цены.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период        = ТекущаяДата();
МенеджерЗаписи.Номенклатура  = ВыбраннаяНоменклатура;
МенеджерЗаписи.Цена          = 1500;
МенеджерЗаписи.Записать(Истина); // Истина — замещать существующую запись

Регистр накопления — это «счётчик ресурса»

Он отвечает на вопрос «сколько чего есть» и умеет считать остатки и обороты. У него тоже есть измерения (Склад, Номенклатура) и ресурсы (Количество, Сумма), но добавляется ключевое понятие — вид движения: Приход увеличивает ресурс, Расход уменьшает. Именно поэтому регистр накопления бывает двух типов: Остатки (можно спросить «сколько на складе прямо сейчас») и Обороты (можно спросить «сколько продали за месяц»).

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

А получают итоги не перебором записей, а через виртуальные таблицы — это быстро, потому что платформа хранит промежуточные суммы:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|   Остатки.Номенклатура,
|   Остатки.КоличествоОстаток
|ИЗ
|   РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК Остатки
|ГДЕ
|   Остатки.КоличествоОстаток > 0";
Запрос.УстановитьПараметр("Дата", ТекущаяДата());
Запрос.УстановитьПараметр("Склад", Склад);
Выборка = Запрос.Выполнить().Выбрать();

Проверка на «пограничных» примерах

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

Как отвечать

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

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

Частые ошибки на собеседовании

  • «Регистр накопления — это где много данных». Объём тут ни при чём. Различие в смысле: состояние против накапливаемого ресурса.
  • Хранить остатки товара в регистре сведений. Тогда придётся вручную пересчитывать сумму при каждом движении — потеряете и корректность, и производительность. Остатки — всегда регистр накопления.
  • Складывать цены из регистра сведений. Цена — это состояние, её берут срезом на дату, а не суммируют по периоду.
  • Путать ресурс и измерение. Измерение — «в разрезе чего» (Склад, Номенклатура), ресурс — «что считаем» (Количество, Сумма). На собеседовании любят попросить показать это на конкретном регистре.
  • Забыть про обороты. Многие помнят только про остатки и не могут ответить, как посчитать продажи за период. Регистр накопления вида «Обороты» — правильный ответ.

Итоги-шпаргалка

  • Регистр сведений — состояние на дату (цена, курс, ответственный); значения читают, а не суммируют.
  • Регистр накопления — ресурс, который прибывает и убывает (товары, деньги); есть виды движения Приход и Расход.
  • Накопление бывает типа Остатки (сколько сейчас) и Обороты (сколько за период).
  • Критерий выбора одним словом: суммируем ли величину. Суммируем — накопление, читаем состояние — сведения.
  • Итоги берут виртуальными таблицами (.Остатки(), .Обороты(), .СрезПоследних()), а не перебором.
Проверьте себя
1. Где корректнее хранить текущий остаток товара на складе?
AВ регистре сведений, обновляя ресурс вручную при каждом движении
BВ регистре накопления вида «Остатки»
CВ реквизите справочника «Номенклатура»
DВ табличной части документа «Поступление»
2. Цена номенклатуры на конкретную дату — это пример чего?
AРесурса регистра накопления, который надо суммировать
BСостояния, которое хранят в регистре сведений
CОборота за период
DДвижения с видом «Приход»