Разработка и Конфигурация · 9 мин
Чем ресурс отличается от реквизита в 1С
Разбираем разницу между ресурсом, измерением и реквизитом регистра в 1С: назначение, примеры, правила выбора и типичные ошибки при проектировании.
В конфигураторе 1С у регистров (сведений, накопления, бухгалтерии, расчёта) есть три вида «полей»: измерения, ресурсы и реквизиты. Новички часто путают ресурс и реквизит, потому что оба выглядят как обычные поля с типом данных. Но между ними принципиальная разница: ресурс — это числовое (или иное) значение, которое система хранит, суммирует и по которому строятся итоги, а реквизит — это просто дополнительная информация к строке, не участвующая в итогах.
Ошибка в выборе типа поля приводит к реальным проблемам: если показатель, по которому нужны остатки и обороты, создать реквизитом, отчёты перестанут его суммировать, а виртуальные таблицы остатков его просто не покажут. Обратная ошибка — сделать ресурсом справочное поле — увеличивает размер индексов и замедляет проведение документов.
Ниже разберём назначение каждого вида поля, правила выбора, влияние на производительность и типичные ошибки при проектировании регистров.
Что такое ресурс регистра и зачем он нужен
Ресурс — это хранимое значение регистра. Для регистра накопления типа «Остатки» ресурс — это то, что система умеет складывать и вычитать: платформа автоматически рассчитывает по ресурсам итоги и хранит их в служебных таблицах итогов. Именно ресурсы доступны в виртуальных таблицах Остатки, Обороты, ОстаткиИОбороты.
Классические примеры ресурсов:
- «Количество» и «Сумма» в регистре «ТоварыНаСкладах»;
- «ОстатокДней» в регистре учёта отпусков;
- «Курс» в регистре сведений «КурсыВалют» — здесь ресурс не суммируется, но всё равно является хранимым значением, которое «отвечает на вопрос» измерения.
Для регистра сведений ресурс — это значение, соответствующее комбинации измерений: например, измерение «Номенклатура», ресурс «Цена». Логика та же: измерение задаёт вопрос, ресурс даёт ответ.
Что такое реквизит регистра
Реквизит регистра — это дополнительная, неагрегируемая информация, «прикреплённая» к строке движения. Платформа хранит реквизит вместе с записью, но никогда не суммирует его, не включает в итоги и не выводит в виртуальных таблицах остатков и оборотов. Получить реквизит можно только из основной таблицы регистра — например, обратившись к таблице движений целиком.
Типичные примеры реквизитов:
- «Комментарий» к строке движения;
- «Ответственный» — кто внёс запись;
- «НомерВходящегоДокумента» — справочные данные из первички;
- «ПричинаСписания» — пояснение, по которому иногда фильтруют движения в запросах.
Реквизит можно использовать в отборе запроса к физической таблице регистра, но этот отбор не будет использовать индексы итогов — на больших объёмах такой запрос заметно медленнее, чем обращение к виртуальной таблице.
Ключевые отличия: сводная таблица
| Критерий | Ресурс | Реквизит |
|---|---|---|
| Назначение | Хранимое значение, ответ на вопрос измерения | Дополнительная информация к строке |
| Участие в итогах | Да: остатки и обороты рассчитываются по ресурсам | Нет, никогда не суммируется |
| Виртуальные таблицы | Доступен в «Остатки», «Обороты», «ОстаткиИОбороты» | Недоступен, только физическая таблица |
| Типичный тип данных | Число, иногда дата или ссылка (в регистрах сведений) | Любой: строка, ссылка, булево |
| Влияние на производительность | Увеличивает таблицы итогов | Увеличивает только основную таблицу |
Короткая мнемоника: если поле должно «складываться» в отчёте — это ресурс. Если оно только поясняет строку — это реквизит.
Как выбрать: практический алгоритм
При проектировании регистра задайте себе три вопроса о каждом поле:
- Нужно ли по этому полю получать остаток или оборот за период? Если да — это ресурс.
- Должно ли поле суммироваться, усредняться или иначе агрегироваться в отчётах? Если да — ресурс.
- Поле только поясняет запись и читается «как есть»? Тогда это реквизит.
Отдельный случай — когда поле определяет, о чём запись, а не сколько. Например, «Склад», «Организация», «Валюта» — это не ресурсы и не реквизиты, а измерения: по ним строятся разрезы итогов. Частая ошибка — сделать «Склад» реквизитом, после чего остатки по складам получить штатными средствами уже нельзя.
Как выбрать тип поля
Влияние на производительность и хранение
Каждый ресурс регистра накопления попадает в таблицы итогов, которые платформа пересчитывает при проведении документов и при расчёте итогов за период. Чем больше ресурсов, тем тяжелее операции записи и тем больше места занимают итоги. Поэтому не стоит создавать ресурсы «про запас».
Реквизиты хранятся только в основной таблице движений и не нагружают механизм итогов. Но у них есть своя цена: обращение к реквизиту требует соединения с физической таблицей регистра, что в запросах к виртуальным таблицам превращается в дорогое соединение больших таблиц. Если отчёт массово вытаскивает реквизит к каждой строке остатков — это повод пересмотреть структуру.
Типичные ошибки при проектировании
Первая и самая распространённая ошибка — создать суммовой показатель реквизитом, потому что «по нему не нужны остатки, только обороты». На деле обороты тоже считаются по ресурсам: реквизит в виртуальной таблице оборотов не появится, и отчёт придётся строить по физической таблице с полным сканированием.
Вторая ошибка — делать ресурсом то, что не суммируется: например, «Цену» в регистре накопления. Сумма цен по строкам не имеет смысла, а итоги платформа всё равно будет считать. Цену обычно выносят либо в регистр сведений, либо вычисляют как «Сумма / Количество».
Как проверить, что всё сделано правильно
После проектирования регистра выполните простую проверку: постройте в консоли запросов обращение к виртуальной таблице Остатки или Обороты. Все показатели, нужные в отчётах, должны быть доступны там как ресурсы, а все разрезы — как измерения. Если нужного поля нет — оно создано реквизитом.
Дополнительно проверьте поведение при проведении документа: сформируйте движения, затем отчёт по регистру. Значения ресурсов должны корректно складываться, а реквизиты — отображаться только при детализации до строк движений.
Как проверить результат
Поле создано ресурсом и суммируется корректно
Поля нет в виртуальной таблице — оно реквизит, отчёт по итогам его не покажет
Сумма/остаток интерпретируемы (количество, сумма)
Сумма бессмысленна (например, сумма цен или ставок) — поле не должно быть ресурсом
Поле — измерение, отбор идёт по индексам итогов
Отбор по реквизиту тормозит на больших объёмах
Что важно запомнить
Ресурс — хранимое значение, участвующее в итогах и доступное в виртуальных таблицах; реквизит — дополнительная информация к строке без агрегации. Правило выбора: суммируется — ресурс, задаёт разрез — измерение, только поясняет — реквизит. Ошибка в выборе ломает отчёты и производительность.
Частые вопросы
Можно ли по реквизиту регистра строить отбор в запросе?
Да, но только при обращении к физической таблице регистра (например, РегистрНакопления.ТоварыНаСкладах без виртуальной таблицы). Такой запрос не использует итоги и на больших объёмах работает медленно. Если отбор нужен постоянно, поле стоит сделать измерением.
Может ли ресурс быть не числом?
Да. В регистрах сведений ресурсом может быть строка, дата, булево или ссылка — например, ресурс «Ответственный» в регистре сведений о документах. Ограничение на числовой тип действует для регистров накопления, где ресурсы суммируются.
Что будет, если изменить реквизит на ресурс в рабочей базе?
При обновлении конфигурации выполнится реструктуризация таблиц. Существующие значения реквизита в ресурс автоматически не переедут корректно во всех случаях, а итоги потребуется пересчитать. Перед таким изменением сделайте резервную копию и протестируйте обновление на копии базы.
Чем реквизит регистра отличается от реквизита документа?
Принцип похож: реквизит документа — это поле с дополнительной информацией о документе. Разница в контексте: у документа нет «ресурсов», там есть шапка и табличные части. Понятие «ресурс» существует только у регистров, где платформа считает итоги.
Почему в отчёте СКД не видно моего поля регистра?
Скорее всего, поле создано реквизитом, а набор данных построен на виртуальной таблице «Остатки» или «Обороты», где реквизиты недоступны. Либо добавьте соединение с физической таблицей движений, либо пересмотрите тип поля в конфигураторе.
Когда поле лучше сделать измерением, а не реквизитом?
Когда по нему нужно анализировать итоги в разрезе: получать остатки по складам, обороты по контрагентам, фильтровать отчёты. Измерение входит в индексы итогов, реквизит — нет. Если сомневаетесь, спросите себя: «Понадобится ли мне остаток в разрезе этого поля?» Если да — это измерение.