Регистры 1С 8.3: какой вид выбрать и как задать его структуру

· 10 мин

Содержание

Настройка реестра в 1С почти всегда означает настройку регистра в Конфигураторе: Конфигурация → Регистры сведений (или накопления, бухгалтерии) → Добавить, затем задать измерения, ресурсы, периодичность и режим записи. Реестра Windows платформа для учёта не использует, а слово «реестр» прижилось из-за созвучия с «регистром» и из бумажных «реестров документов».

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

Что такое регистр в 1С и чем виды отличаются

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

В платформе 8.3 четыре вида регистров:

ВидНа какой вопрос отвечаетКто пишет данныеПример
Регистр сведенийКакое значение у параметра (на дату)Пользователь, код или документКурсы валют, цены, ставки
Регистр накопленияСколько пришло, ушло и осталосьТолько документ-регистраторОстатки товаров, взаиморасчёты
Регистр бухгалтерииКакие проводки и сальдо по счетамТолько документ-регистраторХозрасчётный регистр
Регистр расчётаКакие начисления за периодТолько документ-регистраторНачисления зарплаты

Отдельно от регистров существуют печатные «реестры» — отчёты и списки документов. Их не настраивают в метаданных: это отчёт или динамический список с отбором.

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

Как создать и настроить регистр сведений

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

Создание объекта

  1. Откройте базу в режиме Конфигуратор и откройте дерево конфигурации.
  2. Найдите ветку Регистры сведений, щёлкните правой кнопкой → Добавить.
  3. На вкладке «Основные» задайте имя латиницей или кириллицей без пробелов, например ЦеныНоменклатуры, и синоним.
  4. Перейдите на вкладку «Данные» и добавьте измерения, ресурсы и реквизиты.
  5. Назначьте права в ролях и сохраните конфигурацию: Конфигурация → Обновить конфигурацию базы данных (F7).

Периодичность

Свойство «Периодичность» определяет, хранит ли регистр историю значений.

  • 📌 Непериодический — одна актуальная запись на набор измерений. Подходит для настроек и соответствий.
  • 📅 В пределах секунды, дня, месяца, квартала, года — история значений на даты с выбранной точностью.
  • 🧾 По позиции регистратора — период совпадает с моментом документа; доступен только при подчинении регистратору.

Для цен обычно хватает точности до дня. Секундная периодичность нужна, если в течение дня значение меняется несколько раз и это важно для учёта.

Режим записи

РежимКак попадают данныеКогда выбирать
НезависимыйВручную, через форму записи или кодСправочные данные: курсы, настройки, тарифы
Подчинение регистраторуТолько движениями документаЗначение должно появляться и исчезать вместе с документом

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

Измерения, ресурсы и реквизиты

Для ЦеныНоменклатуры разумная структура такая:

  • 🔑 измерения: Номенклатура, ВидЦены;
  • 💰 ресурс: Цена (число, 15 знаков, 2 после запятой);
  • 📝 реквизит: Валюта или Комментарий.

У измерения есть полезные флаги: «Ведущее» (при удалении объекта-владельца удаляются и записи регистра), «Запрет незаполненных значений», «Основной отбор». Комбинация значений всех измерений и периода уникальна: две записи с одинаковым набором платформа не запишет.

Запись значения в независимый регистр кодом:

МенеджерЗаписи = РегистрыСведений.ЦеныНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = НачалоДня(ТекущаяДатаСеанса());
МенеджерЗаписи.Номенклатура = Номенклатура;
МенеджерЗаписи.ВидЦены = ВидЦены;
МенеджерЗаписи.Цена = 1250;
МенеджерЗаписи.Записать();

Получение действующей цены на дату — через виртуальную таблицу среза последних:

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

Условие отбора пишите в параметрах виртуальной таблицы, а не в секции ГДЕ. Так платформа отбирает записи до расчёта среза, и запрос работает быстрее.

Регистры накопления и бухгалтерии: настройка движений

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

Регистр накопления копит числовые показатели и всегда подчинён регистратору. Вручную записи в него не вносят — только документы.

Главное свойство — «Вид регистра»:

  • 📦 Остатки — хранит приход и расход, умеет считать остатки на любую дату. Пример: товары на складах.
  • 📈 Обороты — хранит только суммы за период, без остатков. Пример: продажи по менеджерам.

Ресурсы регистра накопления бывают только числовыми. Строку или ссылку туда не поставить — для них есть измерения и реквизиты.

Порядок настройки:

  1. Создайте регистр: Регистры накопления → Добавить, выберите вид.
  2. На вкладке «Данные» добавьте измерения (Номенклатура, Склад) и ресурсы (Количество, Сумма).
  3. Откройте документ, который будет делать движения, вкладку «Движения». Отметьте регистр в списке.
  4. Нажмите «Конструктор движений» и сопоставьте поля табличной части с измерениями и ресурсами.
  5. Проверьте сгенерированный код в модуле объекта и обновите конфигурацию БД.

Конструктор создаёт обработчик проведения примерно такого вида:

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

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

Регистр бухгалтерии

Регистр бухгалтерии работает в паре с планом счетов. Без плана счетов его не создать: свойство «План счетов » обязательно.

Что настраивают:

  • 📊 План счетов — сначала создают его, задают счета и виды субконто (через план видов характеристик). Максимальное количество субконто — свойство плана счетов.
  • 🔁 Корреспонденция — флажок в регистре. С ним каждая запись хранит пару «Дт — Кт», без него — отдельные записи по дебету и кредиту.
  • ⚖️ Балансовый — свойство измерений и ресурсов. Балансовые ресурсы сходятся по дебету и кредиту, небалансовые (например, количество) — нет.

Движения в регистр бухгалтерии — это проводки. Их тоже формирует документ через вкладку «Движения».

Регистр расчёта настраивается похоже, но требует плана видов расчёта и нужен в зарплатных решениях. В обычных учётных доработках его создают редко.

Таблица значений вместо регистра: когда это оправдано

Таблица значений — объект в памяти. Она живёт, пока выполняется код, и не сохраняется в базе. Поэтому она не замена регистру, а инструмент для промежуточных расчётов.

ЗадачаРегистрТаблица значений
Хранить данные между сеансами✅❌
Получать остатки и срезы на дату✅❌
Собрать данные для расчёта или печатиИзбыточно✅
Сгруппировать и свернуть строки перед записью—✅
Передать набор строк в запрос—✅ через параметр

Типичный приём — собрать строки, свернуть и передать в запрос как временную таблицу:

ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
// ... заполнение строк ...
ТЗ.Свернуть("Номенклатура", "Количество");

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

Колонкам таблицы значений, которая уходит в запрос, обязательно задавайте типы через ОписаниеТипов. Без типов запрос выдаст ошибку.

Если данные должны храниться, но к ним не нужны срезы и остатки, рассмотрите табличную часть документа или справочника. Хранить таблицу значений в реквизите через ХранилищеЗначения можно, но отбирать по таким данным запросом нельзя.

Индексы, итоги и производительность регистров

Структура регистра закладывается один раз, а ошибки в ней дают тормоза на годы. Несколько правил практика.

Порядок и состав измерений

  • 🎯 Ставьте первыми измерения, по которым чаще всего отбирают данные. Порядок измерений влияет на порядок полей в индексе таблицы.
  • ✂️ Не добавляйте измерение «на всякий случай». Каждое лишнее измерение увеличивает число записей итогов.
  • 🧩 Избегайте составного типа в измерениях без необходимости: такие поля хранятся несколькими колонками и хуже работают в отборах.
  • 📏 Строковые измерения задавайте фиксированной длины. Строки неограниченной длины нельзя индексировать и сравнивать в условиях запроса.

Индексирование реквизитов

У реквизитов регистра есть свойство «Индексировать»: «Не индексировать», «Индексировать», «Индексировать с доп. упорядочиванием». Включайте индекс, только если по реквизиту реально отбирают данные. Каждый индекс замедляет запись.

Итоги

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

Где управлять итогами:

  • в пользовательском режиме: Все функции → Стандартные → Управление итогами — установка периода рассчитанных итогов, пересчёт, включение и выключение;
  • в Конфигураторе: Администрирование → Тестирование и исправление → флажок «Пересчёт итогов».

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

Для оборотных регистров накопления доступны агрегаты — заранее сгруппированные обороты по выбранным измерениям и периодам. Они ускоряют отчёты по большим объёмам, но требуют обслуживания.

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

Изменение регистров в типовой конфигурации

В типовой конфигурации на поддержке структуру регистров лучше не трогать напрямую. Изменение объекта поставщика усложняет каждое следующее обновление.

Варианты:

  • 🧩 Расширение конфигурации — в актуальных версиях платформы в расширении можно создать собственный регистр и делать в него движения из подписок или переопределённых обработчиков. Типовые объекты при этом не меняются.
  • 🛠 Включение возможности изменения — правка объекта поставщика. Применяйте, если без изменения типового регистра задачу не решить, и фиксируйте каждое изменение.

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

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

Частые ошибки при настройке регистров

Диагностика: выберите симптом

Ещё две ошибки проектирования, которые проявляются не сразу:

  • ❌ Регистр сведений вместо накопления. Остатки, записанные в регистр сведений «итоговой цифрой», невозможно восстановить на прошлую дату и проверить по документам.
  • ❌ Независимый режим там, где нужен регистратор. При отмене проведения документа данные остаются в регистре и искажают учёт.

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

Хранит ли 1С настройки в реестре Windows?
Нет, учётные данные и настройки баз платформа в реестре Windows не держит. Список информационных баз, например, хранится в файле ibases.v8i в профиле пользователя (%APPDATA%\1C\1CEStart).
Как посмотреть содержимое регистра без отчёта?
Откройте главное меню (кнопка с тремя полосками в заголовке окна) → Сервис → Параметры и включите флажок отображения команды «Все функции». Затем откройте Все функции → Регистры накопления (или сведений) и нужный регистр — откроется список записей.
Чем регистр сведений отличается от справочника?
Справочник хранит объекты со ссылкой, на которые можно ссылаться из документов. Регистр сведений хранит значения в разрезе измерений и даты, ссылки на запись у него нет.
Можно ли сделать движения в регистр накопления без документа?
Нет. Регистр накопления всегда подчинён регистратору, записи без документа-регистратора не бывает.
Сколько измерений делать в регистре?
Ровно столько, сколько разрезов нужно для анализа. На практике в учётных регистрах редко бывает больше пяти-шести: каждое лишнее измерение раздувает итоги и замедляет запись.