В мире 1С:Предприятие термины «реквизит» и «ресурс» часто становятся источником путаницы — особенно для новичков. Оба понятия относятся к хранению данных, но служат принципиально разным целям. Ошибка в их применении может привести к некорректной работе отчётов, сложностям при интеграции или даже потере данных. Эта статья поможет разобраться, почему ресурсы нельзя использовать как реквизиты, а реквизиты — как ресурсы, несмотря на внешнее сходство.
Если вы программист 1С, администратор или аналитик, работающий с конфигурациями типа УТ 11, БП 3.0 или ЗУП 3.1, понимание этой разницы критично. Например, добавление лишнего реквизита в регистр накопления может замедлить обработку данных на 30-40%, а неправильное использование ресурсов — исказить итоги в отчётах. Далее мы разберёмся, как эти элементы устроены «под капотом», где их правильно применять, и какие подводные камни ждут при ошибках.
1. Что такое реквизит в 1С: определение и назначение
Реквизит — это атрибут объекта конфигурации (справочника, документа, регистра и т.д.), который хранит дополнительную информацию о нём. Например, в справочнике Номенклатура реквизитами могут быть Артикул, Вес или Производитель. Главная особенность реквизитов — они привязаны к конкретной записи и описывают её свойства.
Реквизиты делятся на два типа:
- 📌 Стандартные — заложены в платформу по умолчанию (например,
НаименованиеилиКодв справочниках). - 🔧 Дополнительные — создаются разработчиком для расширения функционала (например,
СрокГодностидля номенклатуры).
Важно: реквизиты не участвуют в агрегации данных (подсчёте сумм, количеств и т.п.). Их задача — хранить статичную или слабо изменяющуюся информацию. Например, если в документе ПоступлениеТоваров добавить реквизит ТемператураХранения, платформа не будет автоматически суммировать или анализировать это значение в отчётах.
Чтобы ускорить работу с реквизитами, используйте индексирование. В свойствах реквизита установите флаг Индексировать — это ускорит поиск по нему в больших справочниках (от 10 000 записей).
2. Ресурсы в 1С: зачем они нужны и как работают
Ресурсы — это специальные поля, которые используются исключительно в регистрах (накопления, сведений, бухгалтерии) для хранения данных, подлежащих агрегации. В отличие от реквизитов, ресурсы участвуют в расчётах итогов, фильтрации и группировке. Например, в регистре накопления ТоварыНаСкладах ресурсами будут Количество и Сумма — платформа автоматически суммирует их при формировании отчётов.
Ключевые особенности ресурсов:
- 📊 Агрегируются: платформа сама подсчитывает суммы, средние значения, максимумы/минимумы по ресурсам.
- 🔄 Изменяются динамически: при проведении документов значения ресурсов обновляются (например, при поступлении товара увеличивается
Количество). - 📈 Используются в виртуальных таблицах: ресурсы формируют основу для отчётов типа
ОстаткиТоваровилиПродажиПоКонтрагентам.
Пример: в регистре сведений ЦеныНоменклатуры ресурсом будет поле Цена. Если вы попытаетесь сделать его реквизитом, платформа не сможет автоматически выводить актуальную цену в отчётах — придётся писать дополнительный код.
3. Сравнение реквизитов и ресурсов: таблица ключевых различий
| Критерий | Реквизит | Ресурс |
|---|---|---|
| Где используется | Любые объекты конфигурации (справочники, документы, регистры) | Только в регистрах (накопления, сведений, бухгалтерии) |
| Агрегация данных | ❌ Нет | ✅ Да (суммы, количества, средние значения) |
| Изменяемость | Может быть статичным (например, Артикул) или редко изменяемым |
Динамически обновляется при проведении документов |
| Пример использования | Поле Производитель в справочнике Номенклатура |
Поле Количество в регистре ТоварыНаСкладах |
| Влияние на производительность | Минимальное (если не индексировать большие справочники) | Высокое (неправильные ресурсы замедляют пересчёт итогов) |
Из таблицы видно, что ресурсы — это «расчётные» поля, а реквизиты — «описательные». Попытка использовать их не по назначению ведёт к двум типовым проблемам:
- Если сделать ресурс реквизитом — придётся вручную писать код для подсчёта итогов (например, суммировать
Количествопо всем записям регистра). - Если сделать реквизит ресурсом — платформа будет тратить время на ненужную агрегацию (например, пытаться суммировать
Артикул).
Ресурсы оптимизированы для быстрых расчётов, а реквизиты — для хранения справочной информации. Их нельзя заменять друг другом без потери функциональности.
4. Когда использовать реквизиты, а когда — ресурсы
Выбор между реквизитом и ресурсом зависит от логики работы данных. Вот чек-лист для принятия решения:
☑️ Как выбрать между реквизитом и ресурсом
Примеры из реальных конфигураций:
- 📦 В документе
РеализацияТоваровполеСуммаДокументадолжно быть ресурсом в регистре накопленияПродажи, чтобы автоматически суммироваться в отчётах. - 🏷️ В справочнике
КонтрагентыполеИНН— это реквизит, так как оно не участвует в расчётах. - 📅 В регистре сведений
ГрафикРаботыполеЧасыРаботы— ресурс, потому что по нему строятся отчёты о загрузке сотрудников.
Ошибка в выборе приводит к:
- ⚠️ Замедлению работы: лишние ресурсы в регистрах увеличивают время пересчёта итогов.
- ⚠️ Потере функциональности: если сделать ресурс реквизитом, придётся вручную писать код для агрегации.
- ⚠️ Сложностям при обновлении: неверная структура данных может конфликтовать с типовыми отчётами.
Что будет, если в регистре накопления сделать все поля реквизитами?
Платформа не сможет автоматически формировать остатки и обороты. Например, отчёт ВедомостьПоТоварамНаСкладах покажет пустые итоги, так как не будет данных для суммирования. Придётся писать отдельные запросы с ручным подсчётом, что увеличит нагрузку на сервер.
5. Технические нюансы: как платформа работает с реквизитами и ресурсами
Под капотом 1С:Предприятие обрабатывает реквизиты и ресурсы по-разному:
Реквизиты хранятся в таблицах базы данных как обычные колонки. Например, реквизит Артикул в справочнике Номенклатура будет колонкой в таблице _Reference123 (где 123 — внутренний идентификатор справочника). Доступ к реквизитам осуществляется через механизм ПолучениеДанных или прямые запросы.
Ресурсы хранятся в специальных структурах — виртуальных таблицах регистров. Платформа автоматически поддерживает их актуальность через механизм пересчёта итогов. Например, при проведении документа ПоступлениеТоваров платформа обновляет ресурс Количество в регистре ТоварыНаСкладах и пересчитывает итоги по всем измерениям (складам, номенклатуре).
Ключевые отличия на уровне СУБД:
// Пример запроса к реквизиту (простое чтение)
ВЫБРАТЬ
Номенклатура.Артикул КАК Артикул
ИЗ
Справочник.Номенклатура КАК Номенклатура
// Пример запроса к ресурсу (использует виртуальную таблицу)
ВЫБРАТЬ
ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток
ИЗ
РегистрНакопления.ТоварыНаСкладах.Остатки(&ТекущаяДата,) КАК ТоварыНаСкладахОстатки
Обратите внимание: виртуальные таблицы ресурсов (.Остатки(), .Обороты()) — это динамические представления, которые платформа строит «на лету». Они не существуют в базе как физические таблицы, что позволяет экономить место на диске.
Чтобы ускорить работу с ресурсами, используйте предопределённые виртуальные таблицы с параметром Периодичность. Например, РегистрНакопления.ТоварыНаСкладах.Остатки(&НачалоДня, &КонецДня, День) вернёт данные с точностью до дня, что быстрее, чем по секундам.
6. Типичные ошибки и как их избежать
Даже опытные разработчики иногда путают реквизиты и ресурсы. Вот самые распространённые ошибки и способы их решения:
Ошибка 1: Использование реквизита вместо ресурса в регистре
🔹 Пример: В регистре накопления Продажи поле СуммаПродажи сделано реквизитом.
🔹 Последствия: Отчёт ВыручкаПоКонтрагентам не покажет суммы — придётся писать ручной запрос с СУММА().
🔹 Решение: Перенести СуммаПродажи в ресурсы регистра.
Ошибка 2: Добавление лишних ресурсов в регистр
🔹 Пример: В регистре ТоварыНаСкладах ресурсами сделаны Количество, Сумма, Вес и Объём.
🔹 Последствия: Пересчёт итогов замедляется в 2-3 раза, так как платформа агрегирует все ресурсы.
🔹 Решение: Оставить только Количество и Сумма как ресурсы, а Вес и Объём вынести в реквизиты.
Ошибка 3: Хранение изменяемых данных в реквизитах документов
🔹 Пример: В документе ЗаказПокупателя поле СтатусОплаты сделано реквизитом, хотя оно меняется при поступлении денег.
🔹 Последствия: При изменении статуса придётся перепровести документ, иначе данные разойдутся.
🔹 Решение: Использовать регистр сведений с ресурсом СтатусОплаты и измерением ДокументРасчётов.
Перед добавлением нового поля в регистр спросите себя: «Нужно ли это поле для расчётов итогов?» Если нет — делайте его реквизитом.
⚠️ Внимание: В конфигурациях на управляемых формах (например, УТ 11 или БП 3.0) неправильное использование ресурсов может привести к ошибкам при фоновом пересчёте итогов. Всегда проверяйте логику работы регистров в Консоли запросов перед обновлением базы.
7. Практические примеры: реквизиты и ресурсы в типовых конфигурациях
Рассмотрим, как реквизиты и ресурсы применяются в стандартных конфигурациях 1С:
Пример 1: Регистр накопления ТоварыНаСкладах (УТ 11)
- 📌 Ресурсы:
Количество,Сумма— участвуют в расчёте остатков и оборотов. - 📌 Реквизиты:
Цена,ПроцентНДС— хранят справочную информацию о партии товара.
Пример 2: Документ ПоступлениеТоваров (БП 3.0)
- 📌 Реквизиты:
Контрагент,Договор,Склад— описывают условия документа. - 📌 Ресурсы: В регистре
ТоварыНаСкладах(куда документ делает движения) —КоличествоиСумма.
Пример 3: Регистр сведений ЦеныНоменклатуры (УТ 11)
- 📌 Ресурс:
Цена— по ней строятся отчёты и прайс-листы. - 📌 Реквизиты:
ВалютаЦены,ТипЦены— уточняют условия применения цены.
В типовых конфигурациях ресурсы всегда используются для данных, которые:
- Нужно суммировать (например,
Количествотоваров). - Нужно анализировать в динамике (например,
Остатокна складе). - Изменяются при проведении документов (например,
СуммаДолгаконтрагента).
⚠️ Внимание: В конфигурациях 1С:ERP и 1С:КА 2.4 некоторые регистры используют сложные ресурсы с несколькими измерениями (например,СуммаВВалютеиСуммаВРублях). При модификации таких регистров обязательно тестируйте пересчёт итогов вТестЦентре.
FAQ: Частые вопросы о реквизитах и ресурсах в 1С
Можно ли преобразовать реквизит в ресурс без потери данных?
Технически да, но это требует ручной миграции данных. Например, если в регистре ТоварыНаСкладах поле Количество было реквизитом, а стало ресурсом, нужно:
- Создать новый ресурс
КоличествоНовое. - Написать обработку, которая перенесёт данные из реквизита в ресурс.
- Удалить старый реквизит и переименовать новый ресурс.
Важно: перед таким изменением сделайте резервную копию базы!
Почему в отчёте не показываются данные по ресурсу?
Чаще всего это происходит из-за:
- 🔹 Неправильного периода в виртуальной таблице (например, запрашиваете остатки на дату, когда движений ещё не было).
- 🔹 Отсутствия движений по регистру (документы не проведены или проводки не сформированы).
- 🔹 Ошибок в настройках отчёта (неверно указаны измерения или ресурсы).
Проверьте запрос в Консоли запросов с явным указанием периода:
ВЫБРАТЬ
РегистрНакопления.ТоварыНаСкладах.Остатки(&НачалоДня, &КонецДня, ).Количество
Как добавить новый ресурс в существующий регистр?
Алгоритм:
- Откройте регистр в конфигураторе (
Объекты → Регистры накопления → [Ваш регистр]). - В разделе
Ресурсыдобавьте новый ресурс (например,Объём). - Обновите конфигурацию базы данных.
- Настройте документы, которые должны записывать данные в новый ресурс (добавьте движения).
Важно: после добавления ресурса пересчитайте итоги регистра через Администрирование → Поддержка и обслуживание → Тестирование и исправление → Пересчёт итогов.
Можно ли в одном регистре использовать и реквизиты, и ресурсы?
Да, это стандартная практика. Например, в регистре ТоварыНаСкладах:
- 📌 Ресурсы:
Количество,Сумма— для расчётов. - 📌 Реквизиты:
ЦенаПоступления,Серия— для справочной информации.
Главное правило: реквизиты не должны дублировать ресурсы (например, не нужно делать реквизит КоличествоЗапасное, если уже есть ресурс Количество).
Как ресурсы влияют на производительность?
Ресурсы увеличивают нагрузку на систему при:
- 🔹 Пересчёте итогов: чем больше ресурсов, тем дольше платформа обновляет виртуальные таблицы.
- 🔹 Запросах с группировкой: если в запросе используются несколько ресурсов, СУБД тратит больше времени на агрегацию.
- 🔹 Фоновых заданиях: регламентные операции (например, закрытие месяца) работают медленнее.
Рекомендации:
- 🔸 Используйте не более 5-7 ресурсов в одном регистре.
- 🔸 Для редко используемых данных создавайте отдельные регистры.
- 🔸 Настраивайте периодичность пересчёта итогов (например, только по завершении дня).