Разработка и Конфигурация · 11 мин
Регистр сведений в 1С: измерения и ресурсы простыми словами
Разбираем устройство регистра сведений в 1С: что такое измерения и ресурсы, чем они отличаются, как выбрать периодичность и режим подчинения регистратору.
Регистр сведений в 1С — это объект конфигурации для хранения информации в разрезе заданных аналитик: цен товаров, курсов валют, кадровых данных сотрудников, адресов контрагентов. В отличие от справочника, регистр не описывает сам объект учёта, а хранит сведения о нём, привязанные к измерениям.
Структура любого регистра сведений строится из двух обязательных групп полей: измерений и ресурсов. Понимание разницы между ними — ключ к правильному проектированию: ошибка на этапе выбора, что сделать измерением, а что ресурсом, приводит к дублированию данных, невозможности хранить историю и проблемам с производительностью запросов.
Дополнительно у регистра есть системные поля (период, регистратор) и реквизиты — вспомогательные поля, которые не участвуют в формировании ключа записи. Ниже разберём каждый элемент на практических примерах.
Что такое измерения регистра сведений
Измерение — это разрез, в котором ведётся хранение данных. Проще говоря, измерения отвечают на вопрос «для кого или для чего хранится значение». В регистре «Цены номенклатуры» измерениями будут «Номенклатура» и «Тип цен», в регистре «Курсы валют» — измерение «Валюта».
Ключевое свойство измерений: комбинация их значений формирует уникальный ключ записи. В непериодическом регистре не может существовать двух записей с одинаковым набором измерений — платформа выдаст ошибку нарушения уникальности при попытке записи. Если регистр периодический, уникальность проверяется по комбинации «период + измерения».
Типы данных измерений обычно ссылочные: справочники, документы, перечисления, планы видов характеристик. Можно использовать примитивные типы (строка, число, дата), но делать это стоит осознанно: ссылочные измерения дают контроль целостности и удобную аналитику в отчётах.
Что такое ресурсы и чем они отличаются от измерений
Ресурс — это значение, которое хранится в разрезе измерений. Для регистра цен ресурсом будет «Цена», для курсов валют — «Курс» и «Кратность», для кадрового регистра — «Оклад» или «Процент надбавки». Ресурсы отвечают на вопрос «что именно мы храним».
Практическая разница проста: измерения нельзя изменить у существующей записи без её удаления и создания новой (меняется ключ), а ресурсы можно перезаписывать сколько угодно. Если по одному и тому же товару цена меняется — обновляется ресурс, измерения остаются прежними.
Признак правильного выбора: если значение участвует в идентификации записи («цена чего?» — товара), это измерение; если это само хранимое данное («сколько стоит?» — 1500), это ресурс. Числовые ресурсы в запросах можно суммировать и усреднять, измерения — только группировать.
| Критерий | Измерение | Ресурс |
|---|---|---|
| Роль | Ключ записи, разрез аналитики | Хранимое значение |
| Уникальность | Комбинация не может повторяться | Значения могут совпадать у разных записей |
| Изменение | Только через удаление и новую запись | Свободно перезаписывается |
| Типичные типы | Ссылки на справочники, перечисления | Числа, строки, даты, булево |
| Пример (цены) | Номенклатура, Тип цен | Цена |
Реквизиты: третья группа полей
Реквизиты регистра сведений — необязательные поля, которые не входят в ключ записи и не являются основным хранимым значением. Они нужны для дополнительных характеристик записи: комментария, автора изменения, признака актуальности.
Типичный пример: в регистре «Ответственные лица» измерение — «Организация», ресурс — «Ответственный», а реквизит — «Дата назначения» или «Комментарий». Реквизит не влияет на уникальность и не индексируется как измерение, поэтому отборы по реквизитам работают медленнее.
Периодичность и подчинение регистратору
Регистр сведений может быть непериодическим или периодическим. Периодический регистр добавляет в ключ системное поле «Период», что позволяет хранить историю изменений: например, все значения курса валюты по датам. Доступна периодичность от секунды до года, а также режим «в пределах секунды» для регистров, подчинённых регистратору.
Независимый регистр заполняется вручную или программно — например, курсы валют загружаются обработкой. Регистр, подчинённый регистратору, заполняется движениями документов: каждая запись привязана к документу-регистратору, и при отмене проведения документа его записи удаляются автоматически.
Как выбрать режим регистра
Как спроектировать структуру регистра: порядок действий
Проектирование начинается с вопроса «в разрезе чего храним данные». Ответ формирует список измерений. Затем определяется, что является хранимым значением — это ресурсы. Всё остальное, что нужно «до кучи», выносится в реквизиты.
Не увлекайтесь количеством измерений: каждое измерение расширяет ключ и усложняет запись. Если какой-то разрез нужен только в редких отчётах, возможно, его место в реквизитах. Обратная ошибка — сделать измерением то, что на самом деле значение: например, добавить «Цену» в измерения, чтобы хранить несколько цен по одному товару. Правильное решение в таком случае — добавить измерение «Тип цен», а цену оставить ресурсом.
- 1Сформулируйте, какую информацию хранит регистр, и в разрезе чего она нужна
- 2Выпишите разрезы — это кандидаты в измерения
- 3Определите хранимые значения — это ресурсы
- 4Решите, нужна ли история: если да — включите периодичность
- 5Определите, будут ли записи создаваться документами — тогда подчините регистратору
- 6Проверьте уникальность: попробуйте мысленно создать две записи с одинаковыми измерениями — если это осмысленно, структура неверна
Чтение и запись данных: практические приёмы
Для работы с регистром в коде используются менеджер регистра, наборы записей и запросы. Типовые операции: получение последнего значения через ПолучитьПоследнее() для периодических регистров, выборка среза последних в запросе через виртуальную таблицу СрезПоследних, запись через набор записей с установленным отбором.
// Срез последних цен на дату
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Номенклатура КАК Номенклатура,
| Цены.Цена КАК Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК Цены";
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Результат = Запрос.Выполнить().Выгрузить();При записи программным способом помните: набор записей с отбором по измерениям при вызове Записать() полностью замещает записи по этому отбору. Если нужно изменить один ресурс у одной записи — сначала прочитайте набор, измените значение и запишите обратно, либо используйте менеджер записи.
Типичные ошибки и как их проверить
Чаще всего проблемы возникают не в коде, а на этапе проектирования структуры. Ниже — ошибки, которые встречаются в реальных конфигурациях, и способы их распознать.
Как проверить результат
Повторная запись с теми же измерениями вызывает контролируемую ошибку или осознанно перезаписывается
Дублирующиеся записи с одинаковым смыслом накапливаются
Срез последних на прошлую дату возвращает корректное старое значение
Старое значение безвозвратно затирается новым
Отборы идут по измерениям, запросы выполняются быстро
В условиях запросов фигурируют реквизиты, время выполнения растёт с объёмом данных
Удобный приём самопроверки: опишите регистр одной фразой «для каждого [измерения] храним [ресурс]». Если фраза звучит естественно — структура верна. Например: «для каждого сочетания товара и типа цен храним цену». Если фраза не складывается, значит, измерение или ресурс выбраны неверно.
Что важно запомнить
Измерения — это ключ записи и разрезы хранения, ресурсы — сами хранимые значения. Периодичность добавляет историю, подчинение регистратору связывает записи с документами. Правильная структура определяется вопросом «в разрезе чего храним что», а ошибки проектирования проявляются в дублях, потере истории и медленных запросах.
Частые вопросы
Можно ли изменить тип измерения после того, как регистр заполнен данными?
Технически конфигуратор позволит изменить тип, но при реструктуризации несовместимые значения будут потеряны. Безопасный путь — выгрузить данные, изменить структуру на копии базы, проверить результат и только потом переносить в рабочую базу с резервной копией.
Сколько измерений может быть у регистра сведений?
Жёсткого практического лимита для типовых задач нет, но каждое измерение входит в уникальный индекс и увеличивает стоимость записи и чтения. На практике регистры с двумя-четырьмя измерениями работают оптимально; большее количество — повод пересмотреть модель данных.
Чем регистр сведений отличается от справочника?
Справочник хранит сами объекты учёта с уникальными элементами (товары, контрагенты), а регистр сведений — дополнительную информацию об этих объектах в заданных разрезах. У записи регистра нет кода, наименования и иерархии, но есть ключ из измерений и возможность хранить историю по периодам.
Когда нужен периодический регистр, а когда достаточно непериодического?
Периодический нужен, когда значение меняется во времени и требуется знать его на любую дату: курсы валют, цены, кадровые данные. Если значение одно и история не интересна (например, текущий признак использования), непериодический регистр проще и экономичнее по ресурсам.
Что такое виртуальные таблицы «СрезПоследних» и «СрезПервых»?
Это автоматически доступные таблицы периодического регистра, которые возвращают актуальные значения ресурсов на указанную дату. Срез последних показывает последнее установленное значение на момент времени, срез первых — самое раннее. Они избавляют от ручного поиска максимальной даты в запросах.
Может ли ресурс быть ссылкой на справочник?
Да, тип ресурса не ограничен примитивами: ресурсом может быть ссылка на справочник, документ или перечисление. Например, в регистре «Ответственные лица» ресурс «Ответственный» — это ссылка на справочник физических лиц или пользователей.