Как правильно выбрать регистр?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Выбор правильного регистра в 1С
Регистры — фундамент хранения данных в 1С. Выбор типа регистра влияет на всю архитектуру системы. Нужно понимать, когда использовать какой.
Типы регистров в 1С
1. Регистр накопления (Accumulation Register)
Используется для фактов, которые накапливаются во времени:
- Движения товаров (приходы/расходы на складах)
- Движения денежных средств (приход/расход денег)
- Трудозатраты (начисления/удержания)
Структура:
- Период (дата факта)
- Тип движения (Приход/Расход)
- Измерения (Склад, Товар, Контрагент)
- Ресурсы (Количество, Сумма)
2. Регистр сведений (Information Register)
Для текущего состояния, которое меняется во времени:
- Курсы валют (курс на дату)
- Сведения о сотрудниках (должность, подразделение)
- Цены товаров (цена актуальна на дату)
- Остатки материалов
Отличие: одно значение вместо приход/расход.
3. Бухгалтерский регистр (Accounting Register)
Для двойной записи:
- Счёты (дебет/кредит)
- Используется в системах учёта
- Более сложная структура
4. Налоговый регистр (Tax Register)
Для налоговых расчётов, редко используется.
Критерии выбора
Выбираю РЕГИСТР НАКОПЛЕНИЯ если:
- Нужно отслеживать движения (приходы и расходы)
- История важна (нужны все факты)
- Нужно считать остатки на дату (итоги по измерениям)
- Пример: склад, касса, счёт в банке
// Правильно: остатки считаются по Регистру накопления
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Склад,
| Остатки.Товар,
| СУММА(Остатки.КоличествоОстаток) КАК КоличествоНаДату
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(&ДатаНа, ) КАК Остатки
|СГРУППИРОВАТЬ ПО
| Остатки.Склад,
| Остатки.Товар";
Выбираю РЕГИСТР СВЕДЕНИЙ если:
- Нужно хранить текущее состояние
- История важна (версионированные данные)
- Не нужны приходы/расходы
- Пример: цены, курсы, должности сотрудников
// Правильно: текущая цена товара на дату
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Товар,
| Цены.Цена
|ИЗ
| РегистрСведений.ЦеныТоваров(&ДатаНа) КАК Цены";
Типичные ошибки
❌ Ошибка 1: Использовать Справочник вместо Регистра
// Плохо: остатки в справочнике
Справочник.Товары
Реквизиты:
Наименование
ОстатокНаСегодня // Плохо! Меняется каждый день
Проблемы:
- История потеряется
- Трудно запросить остаток на другую дату
- Синхронизация в других местах кода
Хорошо:
// Правильно: остатки в регистре
РегистрНакопления.ОстаткиТоваров
Измерения: Склад, Товар
Ресурсы: КоличествоПриход, КоличествоРасход
❌ Ошибка 2: Использовать Регистр накопления для текущего состояния
// Плохо: должность в регистре накопления
РегистрНакопления.ДолжностиСотрудников
"Приход" = когда назначен
"Расход" = когда уволен
Проблема: это не факт движения, это просто состояние.
Хорошо:
РегистрСведений.ДолжностиСотрудников // версионированный
Периодичность: День
Измерения: Сотрудник
Ресурсы: Должность, Подразделение
Сложный пример: Выбор между Накоплением и Сведениями
Задача: хранить остатки товаров
Вариант 1: Регистр накопления
РегистрНакопления.ОстаткиТоваров
Измерения:
Склад
Товар
Ресурсы:
КоличествоПриход
КоличествоРасход
Плюсы:
- Полная история всех движений
- Встроенная функция остатков
- Быстрый расчёт на дату
Минусы:
- Может быть громоздко если движений очень много
Вариант 2: Регистр сведений
РегистрСведений.ОстаткиТоваров
Периодичность: День
Измерения:
Склад
Товар
Ресурсы:
Количество
Плюсы:
- Хранит явно "остаток на дату"
- Проще запросы
Минусы:
- Нужно вычислять остаток вручную из документов
- Легче ошибиться в расчётах
Мой выбор: Регистр накопления для остатков (более надёжно).
Практический подход к выбору
-
Спрашиваю себя: это факт или состояние?
- Факт → Регистр накопления
- Состояние → Регистр сведений
-
Нужна ли история?
- Да → любой регистр (оба хранят историю)
- Нет → Справочник
-
Нужны ли итоги по периодам?
- Да (остатки на дату) → Регистр накопления
- Нет (текущее значение) → Регистр сведений
-
Скорость запросов?
- Критична → Регистр сведений (проще JOIN)
- Нормально → Регистр накопления
Производительность
Регистр накопления:
- Медленнее на запись (несколько строк за операцию)
- Быстро на чтение (встроенные остатки)
Регистр сведений:
- Быстро на запись (одна строка)
- Средне на чтение (обычный SELECT)
Вывод
Выбор регистра — важное архитектурное решение:
- Накопление: для движений, приходов/расходов
- Сведения: для текущего состояния и справочных данных
- Бухгалтерский: только для двойной записи (редко)
Подумай о природе данных в первую очередь, потом о производительности.