К статье
Практический материал

Разработка и Конфигурация · 9 мин

Измерение и ресурс в 1С: в чём разница и как не ошибиться при проектировании

Разбираем разницу между измерением и ресурсом в регистрах 1С: назначение, примеры, типичные ошибки проектирования и как проверить правильность структуры.

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

Разница между измерением и ресурсом лежит в самой логике хранения. Измерение отвечает на вопрос «в разрезе чего хранится значение», а ресурс — «что именно хранится». Например, в регистре «Цены номенклатуры» измерениями будут «Номенклатура» и «Вид цены», а ресурсом — «Цена»: цена хранится в разрезе товара и вида цены.

Что такое измерение и какую роль оно играет

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

Именно по измерениям строятся индексы, выполняются отборы и срезы. Когда вы в запросе пишете условие ГДЕ Номенклатура = &Номенклатура, поиск идёт по индексу измерения — быстро. Если бы тот же реквизит был ресурсом, отбор по нему потребовал бы полного сканирования таблицы.

Типичные примеры измерений: «Номенклатура», «Склад», «Организация», «Контрагент», «Валюта», «Сотрудник». Общий признак — это ссылочные или перечислимые значения, по которым данные группируются и фильтруются.

Что такое ресурс и как он используется

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

Ключевая особенность ресурсов регистра накопления — поддержка агрегатных функций. Виртуальные таблицы «Остатки» и «Обороты» строятся именно по ресурсам: запрос Остатки.КоличествоОстаток вернёт сумму движений по ресурсу «Количество» в разрезе измерений. Если бы «Количество» ошибочно сделали измерением, получить остаток штатными средствами было бы невозможно.

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

Сравнение измерения и ресурса по ключевым признакам

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

Из таблицы видно главное практическое следствие: если по полю нужно отбирать, группировать или строить уникальность — это измерение. Если по полю нужно суммировать, получать остатки или просто хранить значение — это ресурс.

Как решить, куда поместить новое поле

При проектировании задайте о поле три вопроса. Первый: участвует ли оно в уникальной идентификации записи? Если две записи с разными значениями этого поля — это разные строки, поле должно быть измерением. Второй: нужно ли по полю фильтровать и группировать данные в отчётах и запросах? Если да — измерение, иначе отборы будут медленными. Третий: нужно ли по полю считать суммы, остатки или обороты? Если да — только ресурс.

Классический пример дилеммы — «Характеристика номенклатуры». Если учёт остатков ведётся по характеристикам, она обязательно измерение: иначе остатки по характеристикам не получить. А вот «Комментарий к строке» — очевидный ресурс или реквизит: по нему не фильтруют и не группируют.

Маршрут решения

Как выбрать тип поля

По полю нужны отборы, группировки или уникальность записиДелайте поле измерением
По полю нужны суммы, остатки, оборотыДелайте поле ресурсом
Поле — справочная информация без отборов и итоговСделайте его реквизитом регистра, чтобы не раздувать ключ
Поле-ссылка нужно и для отбора, и редкоИзмерение: цена ошибки с ресурсом выше из-за медленных отборов

Реквизиты регистра — третий вариант, о котором забывают

Кроме измерений и ресурсов у регистра есть реквизиты. Это дополнительная информация, которая не входит в ключ записи, не участвует в итогах, но сохраняется вместе со строкой. Типичные примеры: «Ответственный», «Комментарий», «Документ-основание» в регистре сведений.

Частая ошибка — делать реквизиты измерениями «на всякий случай». Каждое лишнее измерение расширяет уникальный ключ, увеличивает индексы и замедляет запись. Обратная ошибка — помещать в ресурс то, по чему потом потребуется отбор: запросы начнут тормозить, а переделка структуры в заполненной базе потребует переноса данных.

Типичные ошибки
01
Числовое поле, по которому нужны остатки, сделали измерением — итоги и виртуальные таблицы недоступны, приходится перепроектировать регистр
02
Поле для отбора сделали ресурсом — запросы сканируют всю таблицу, отчёты тормозят на больших объёмах
03
Лишние измерения «про запас» — раздувается ключ записи, растут индексы, падает скорость записи
04
Справочный комментарий сделали измерением — две записи с разными комментариями считаются разными строками, данные дублируются

Особенности для разных видов регистров

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

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

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

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

Как проверить правильность структуры до запуска

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

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

Контрольные точки

Как проверить результат

Отбор по полю в запросе
Норма

Запрос выполняется быстро, план показывает использование индекса

Тревожный признак

Полное сканирование таблицы, отчёт «подвисает»

Виртуальная таблица Остатки
Норма

Нужный числовой показатель доступен как ресурс итогов

Тревожный признак

Показателя нет в остатках — он ошибочно сделан измерением

Запись дублей
Норма

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

Тревожный признак

Появляются дубли строк из-за лишнего измерения в ключе

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

Можно ли использовать ресурс в отборе запроса?

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

Может ли измерение быть числовым?

Может, и иногда это оправдано — например, измерение «Процент ставки» в регистре скидок. Но число, которое нужно суммировать или по которому считаются остатки, числовым измерением быть не должно — только ресурсом.

Чем реквизит регистра отличается от ресурса?

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

Сколько измерений может быть у регистра?

Платформа допускает десятки измерений, но практический предел ниже: каждое измерение расширяет ключ и индексы. Если измерений больше 5–7, стоит пересмотреть структуру — возможно, часть полей должна быть реквизитами или вынесена в отдельный регистр.

Что будет, если в регистре сведений записать строку с уже существующим набором измерений?

Новая запись заменит старую: значения ресурсов и реквизитов будут перезаписаны. Это штатное поведение, на нём основано обновление цен, курсов и настроек. Ошибки уникальности не возникает именно потому, что ключ определяет одну строку.

Как безопасно перенести поле из ресурса в измерение в рабочей базе?

Сделайте резервную копию, добавьте новое измерение, напишите обработку, которая читает существующие записи и перезаписывает их с заполненным новым полем, сверьте итоги до и после. Только после успешной проверки удаляйте старый ресурс. Всю операцию сначала отрабатывайте на копии базы.

Итог

Что важно запомнить

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