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

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

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

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

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

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

Ниже разберём назначение каждого вида поля, правила выбора, влияние на производительность и типичные ошибки при проектировании регистров.

Что такое ресурс регистра и зачем он нужен

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

Классические примеры ресурсов:

  • «Количество» и «Сумма» в регистре «ТоварыНаСкладах»;
  • «ОстатокДней» в регистре учёта отпусков;
  • «Курс» в регистре сведений «КурсыВалют» — здесь ресурс не суммируется, но всё равно является хранимым значением, которое «отвечает на вопрос» измерения.

Для регистра сведений ресурс — это значение, соответствующее комбинации измерений: например, измерение «Номенклатура», ресурс «Цена». Логика та же: измерение задаёт вопрос, ресурс даёт ответ.

Что такое реквизит регистра

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

Типичные примеры реквизитов:

  • «Комментарий» к строке движения;
  • «Ответственный» — кто внёс запись;
  • «НомерВходящегоДокумента» — справочные данные из первички;
  • «ПричинаСписания» — пояснение, по которому иногда фильтруют движения в запросах.

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

Ключевые отличия: сводная таблица

КритерийРесурсРеквизит
НазначениеХранимое значение, ответ на вопрос измеренияДополнительная информация к строке
Участие в итогахДа: остатки и обороты рассчитываются по ресурсамНет, никогда не суммируется
Виртуальные таблицыДоступен в «Остатки», «Обороты», «ОстаткиИОбороты»Недоступен, только физическая таблица
Типичный тип данныхЧисло, иногда дата или ссылка (в регистрах сведений)Любой: строка, ссылка, булево
Влияние на производительностьУвеличивает таблицы итоговУвеличивает только основную таблицу

Короткая мнемоника: если поле должно «складываться» в отчёте — это ресурс. Если оно только поясняет строку — это реквизит.

Как выбрать: практический алгоритм

При проектировании регистра задайте себе три вопроса о каждом поле:

  1. Нужно ли по этому полю получать остаток или оборот за период? Если да — это ресурс.
  2. Должно ли поле суммироваться, усредняться или иначе агрегироваться в отчётах? Если да — ресурс.
  3. Поле только поясняет запись и читается «как есть»? Тогда это реквизит.

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

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

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

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

Влияние на производительность и хранение

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

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

Типичные ошибки при проектировании

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

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

Типичные ошибки
01
Показатель для отчётов создан реквизитом — виртуальные таблицы его не возвращают, отчёты работают медленно или не показывают данные
02
Справочное поле (склад, контрагент) создано ресурсом — итоги по нему бессмысленны, а таблицы итогов раздуваются
03
Аналитический разрез создан реквизитом вместо измерения — невозможно получить остатки в этом разрезе штатными средствами
04
Изменение типа поля в рабочей базе без копии — риск потери данных при реструктуризации

Как проверить, что всё сделано правильно

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

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

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

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

Поле видно в виртуальной таблице Остатки/Обороты
Норма

Поле создано ресурсом и суммируется корректно

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

Поля нет в виртуальной таблице — оно реквизит, отчёт по итогам его не покажет

Итог по полю в отчёте имеет смысл
Норма

Сумма/остаток интерпретируемы (количество, сумма)

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

Сумма бессмысленна (например, сумма цен или ставок) — поле не должно быть ресурсом

Отбор по полю в отчёте работает быстро
Норма

Поле — измерение, отбор идёт по индексам итогов

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

Отбор по реквизиту тормозит на больших объёмах

Итог

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

Ресурс — хранимое значение, участвующее в итогах и доступное в виртуальных таблицах; реквизит — дополнительная информация к строке без агрегации. Правило выбора: суммируется — ресурс, задаёт разрез — измерение, только поясняет — реквизит. Ошибка в выборе ломает отчёты и производительность.

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

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

Да, но только при обращении к физической таблице регистра (например, РегистрНакопления.ТоварыНаСкладах без виртуальной таблицы). Такой запрос не использует итоги и на больших объёмах работает медленно. Если отбор нужен постоянно, поле стоит сделать измерением.

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

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

Что будет, если изменить реквизит на ресурс в рабочей базе?

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

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

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

Почему в отчёте СКД не видно моего поля регистра?

Скорее всего, поле создано реквизитом, а набор данных построен на виртуальной таблице «Остатки» или «Обороты», где реквизиты недоступны. Либо добавьте соединение с физической таблицей движений, либо пересмотрите тип поля в конфигураторе.

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

Когда по нему нужно анализировать итоги в разрезе: получать остатки по складам, обороты по контрагентам, фильтровать отчёты. Измерение входит в индексы итогов, реквизит — нет. Если сомневаетесь, спросите себя: «Понадобится ли мне остаток в разрезе этого поля?» Если да — это измерение.