← Назад к вопросам

Как правильно выбрать регистр?

2.0 Middle🔥 141 комментариев
#Регистры#Стандарты разработки

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Выбор правильного регистра в 1С

Регистры — фундамент хранения данных в 1С. Выбор типа регистра влияет на всю архитектуру системы. Нужно понимать, когда использовать какой.

Типы регистров в 1С

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

Используется для фактов, которые накапливаются во времени:

  • Движения товаров (приходы/расходы на складах)
  • Движения денежных средств (приход/расход денег)
  • Трудозатраты (начисления/удержания)

Структура:

- Период (дата факта)
- Тип движения (Приход/Расход)
- Измерения (Склад, Товар, Контрагент)
- Ресурсы (Количество, Сумма)

2. Регистр сведений (Information Register)

Для текущего состояния, которое меняется во времени:

  • Курсы валют (курс на дату)
  • Сведения о сотрудниках (должность, подразделение)
  • Цены товаров (цена актуальна на дату)
  • Остатки материалов

Отличие: одно значение вместо приход/расход.

3. Бухгалтерский регистр (Accounting Register)

Для двойной записи:

  • Счёты (дебет/кредит)
  • Используется в системах учёта
  • Более сложная структура

4. Налоговый регистр (Tax Register)

Для налоговых расчётов, редко используется.

Критерии выбора

Выбираю РЕГИСТР НАКОПЛЕНИЯ если:

  1. Нужно отслеживать движения (приходы и расходы)
  2. История важна (нужны все факты)
  3. Нужно считать остатки на дату (итоги по измерениям)
  4. Пример: склад, касса, счёт в банке
// Правильно: остатки считаются по Регистру накопления
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Остатки.Склад,
    |    Остатки.Товар,
    |    СУММА(Остатки.КоличествоОстаток) КАК КоличествоНаДату
    |ИЗ
    |    РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаНа, ) КАК Остатки
    |СГРУППИРОВАТЬ ПО
    |    Остатки.Склад,
    |    Остатки.Товар";

Выбираю РЕГИСТР СВЕДЕНИЙ если:

  1. Нужно хранить текущее состояние
  2. История важна (версионированные данные)
  3. Не нужны приходы/расходы
  4. Пример: цены, курсы, должности сотрудников
// Правильно: текущая цена товара на дату
Запрос.Текст = 
    "ВЫБРАТЬ
    |    Цены.Товар,
    |    Цены.Цена
    |ИЗ
    |    РегистрСведений.ЦеныТоваров(&ДатаНа) КАК Цены";

Типичные ошибки

❌ Ошибка 1: Использовать Справочник вместо Регистра

// Плохо: остатки в справочнике
Справочник.Товары
    Реквизиты:
        Наименование
        ОстатокНаСегодня  // Плохо! Меняется каждый день

Проблемы:

  • История потеряется
  • Трудно запросить остаток на другую дату
  • Синхронизация в других местах кода

Хорошо:

// Правильно: остатки в регистре
РегистрНакопления.ОстаткиТоваров
    Измерения: Склад, Товар
    Ресурсы: КоличествоПриход, КоличествоРасход

❌ Ошибка 2: Использовать Регистр накопления для текущего состояния

// Плохо: должность в регистре накопления
РегистрНакопления.ДолжностиСотрудников
    "Приход" = когда назначен
    "Расход" = когда уволен

Проблема: это не факт движения, это просто состояние.

Хорошо:

РегистрСведений.ДолжностиСотрудников // версионированный
    Периодичность: День
    Измерения: Сотрудник
    Ресурсы: Должность, Подразделение

Сложный пример: Выбор между Накоплением и Сведениями

Задача: хранить остатки товаров

Вариант 1: Регистр накопления

РегистрНакопления.ОстаткиТоваров
    Измерения:
        Склад
        Товар
    Ресурсы:
        КоличествоПриход
        КоличествоРасход

Плюсы:

  • Полная история всех движений
  • Встроенная функция остатков
  • Быстрый расчёт на дату

Минусы:

  • Может быть громоздко если движений очень много

Вариант 2: Регистр сведений

РегистрСведений.ОстаткиТоваров
    Периодичность: День
    Измерения:
        Склад
        Товар
    Ресурсы:
        Количество

Плюсы:

  • Хранит явно "остаток на дату"
  • Проще запросы

Минусы:

  • Нужно вычислять остаток вручную из документов
  • Легче ошибиться в расчётах

Мой выбор: Регистр накопления для остатков (более надёжно).

Практический подход к выбору

  1. Спрашиваю себя: это факт или состояние?

    • Факт → Регистр накопления
    • Состояние → Регистр сведений
  2. Нужна ли история?

    • Да → любой регистр (оба хранят историю)
    • Нет → Справочник
  3. Нужны ли итоги по периодам?

    • Да (остатки на дату) → Регистр накопления
    • Нет (текущее значение) → Регистр сведений
  4. Скорость запросов?

    • Критична → Регистр сведений (проще JOIN)
    • Нормально → Регистр накопления

Производительность

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

  • Медленнее на запись (несколько строк за операцию)
  • Быстро на чтение (встроенные остатки)

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

  • Быстро на запись (одна строка)
  • Средне на чтение (обычный SELECT)

Вывод

Выбор регистра — важное архитектурное решение:

  • Накопление: для движений, приходов/расходов
  • Сведения: для текущего состояния и справочных данных
  • Бухгалтерский: только для двойной записи (редко)

Подумай о природе данных в первую очередь, потом о производительности.

Как правильно выбрать регистр? | PrepBro