Разрезы учёта в регистрах 1С: как устроены измерения и как с ними работать

· 10 мин

Содержание

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

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

Суть измерения на простом примере

Представьте тетрадь кладовщика. В каждой строке он пишет: какой товар, на каком складе, сколько пришло или ушло. «Товар» и «склад» — это измерения. «Сколько» — ресурс.

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

  • 📦 остаток всех товаров на складе «Основной»;
  • 🏷️ остаток одного товара по всем складам;
  • 🔍 остаток одного товара на одном складе на конкретную дату.

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

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

Виды измерений по типам регистров

Слово «измерение» одно, но в разных регистрах у него разные задачи и свои свойства.

Вид регистраЧто делает измерениеОсобые свойства
Регистр сведенийОбразует ключ записи, по нему ищут значение«Ведущее», «Запрет незаполненных значений»
Регистр накопленияРазрез, по которому считаются остатки и обороты«Использование в итогах»
Регистр бухгалтерииДополнительный разрез поверх счёта и субконто«Балансовый»
Регистр расчётаРазрез для начислений и расчёта баз«Базовое»

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

Здесь измерение работает как поле поиска. Классический пример — курсы валют: измерение «Валюта», ресурсы «Курс» и «Кратность», периодичность — день. Запрос «какой курс доллара на 15 число» сводится к поиску по измерению и дате.

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

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

Регистр бухгалтерии

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

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

Регистр расчёта

Измерения описывают, кому и что начислено: сотрудник, организация, подразделение. Свойство «Базовое» указывает, по каким измерениям собирается база для зависимых начислений. Например, при расчёте премии от оклада база собирается по сотруднику.

Измерение, ресурс или реквизит: как выбрать

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

ПолеЧто хранитУчаствует в итогахОтбор в виртуальной таблице
ИзмерениеРазрез учёта: товар, склад, договорДа, как группировкаДа
РесурсЧисловое значение: количество, суммаДа, суммируется (в регистре накопления)Нет
РеквизитСправочная информация о записи: комментарий, авторНетНет

Несколько уточнений, которые помогают не ошибиться:

  • 🔢 Ресурсы регистра накопления и бухгалтерии — только числа. У регистра сведений ресурс может быть любого типа: строка, дата, ссылка.
  • 📝 Реквизит виден только в физической таблице регистра. В виртуальных таблицах остатков и оборотов реквизитов нет.
  • ⚖️ Если поле нужно для отбора в отчёте, но итоги по нему не нужны, реквизит с индексированием может быть выгоднее нового измерения: таблица итогов не разрастается.
Куда положить новое поле регистра?

Как добавить измерение в регистр: пошагово

Работа идёт в Конфигураторе. Если конфигурация типовая и стоит на поддержке, правьте не основную конфигурацию, а расширение — так обновления не превратятся в ручное сравнение.

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

Шаг 1. Откройте регистр

  1. Запустите Конфигуратор и откройте конфигурацию: Конфигурация → Открыть конфигурацию.
  2. В дереве метаданных разверните ветку нужного вида регистра, например Регистры накопления.
  3. Дважды щёлкните по регистру — откроется окно редактирования объекта.

Шаг 2. Добавьте измерение

  1. Перейдите на закладку Данные.
  2. Выделите группу Измерения и нажмите кнопку добавления.
  3. Задайте имя без пробелов (Склад), синоним для пользователя («Склад») и тип — например, СправочникСсылка.Склады.

Шаг 3. Настройте свойства

Откройте палитру свойств измерения (клавиша Alt+Enter). Чаще всего настраивают:

  • ✅ «Запрет незаполненных значений» (у регистра сведений) — запись с пустым измерением не запишется;
  • 🔗 «Ведущее» (у регистра сведений) — записи регистра удаляются вместе с объектом, который указан в измерении, а регистр появляется в панели навигации формы этого объекта;
  • 📊 «Использование в итогах» (у регистра накопления) — можно отключить хранение итогов по редко используемому измерению;
  • 🧭 «Связи параметров выбора» — ограничивает выбор значения другим полем (например, договор только этого контрагента).

Шаг 4. Заполните движения

Измерение само ничем не заполняется. Нужно дописать код в модуле документа-регистратора, обработке проведения:

Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого СтрокаТЧ Из Товары Цикл
	Движение = Движения.ОстаткиТоваров.ДобавитьПриход();
	Движение.Период       = Дата;
	Движение.Склад        = Склад;
	Движение.Номенклатура = СтрокаТЧ.Номенклатура;
	Движение.Количество   = СтрокаТЧ.Количество;
КонецЦикла;

Шаг 5. Обновите базу и перепроведите

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

У старых записей новое измерение будет пустым. Чтобы заполнить его, перепроведите документы за нужный период или напишите обработку, которая перезапишет наборы записей.

Измерения в типовых конфигурациях: где их увидеть

Разбирать чужие регистры — лучший способ понять, как разработчики фирмы 1С выбирают измерения. Откройте Конфигуратор в режиме просмотра и посмотрите структуру этих объектов в БП 3.0:

РегистрВидИзмеренияРесурсы
«Курсы валют»Сведений, периодическийВалютаКурс, Кратность
«Хозрасчетный»БухгалтерииОрганизация, Подразделение, ВалютаСумма, Количество, ВалютнаяСумма и суммы для налогового учёта

Что видно из этих примеров:

  • 🏢 Организация почти всегда первое измерение. Так данные разных юрлиц в одной базе не смешиваются, а права по организациям настраиваются через ограничение доступа.
  • 💱 Валюта — измерение, потому что сумма в валюте без указания валюты бессмысленна.
  • 📈 Курс — ресурс: это то значение, которое ищут по ключу «валюта + дата».

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

Как получить данные по измерениям: отчёты и запросы

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

Остатки на дату по складу

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|	Остатки.Номенклатура КАК Номенклатура,
|	Остатки.КоличествоОстаток КАК Количество
|ИЗ
|	РегистрНакопления.ОстаткиТоваров.Остатки(&Дата, Склад = &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Склад", Склад);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить("" + Выборка.Номенклатура + ": " + Формат(Выборка.Количество, "ЧГ=0"));
КонецЦикла;

Условие Склад = &Склад внутри скобок платформа применяет до сбора итогов. Если перенести его в ГДЕ, результат будет тем же, но сначала посчитаются остатки по всем складам, и запрос станет заметно медленнее на большой базе.

Какие виртуальные таблицы есть у регистров

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

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

В отчётах на СКД

В системе компоновки данных измерения автоматически становятся полями группировки и отбора. Если в наборе данных указана виртуальная таблица, отбор пользователя по измерению СКД сама переносит в параметры таблицы. Поэтому в отчёте на остатках лучше выбирать поля из виртуальной таблицы, а не соединять её с другими источниками заранее.

Связанные измерения и тонкости виртуальных таблиц

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

Как связать измерения

  • 🔗 В свойстве «Связи параметров выбора» у измерения «Договор» укажите Отбор.Владелец → Контрагент. Тогда при ручном вводе записи пользователь увидит только договоры выбранного контрагента.
  • 📐 Порядок измерений в регистре сведений влияет на индекс: ставьте первым то измерение, по которому отбирают чаще всего.
  • 🧩 Зависимое измерение не заменяет проверку данных. Если записи пишет код, проверку «договор принадлежит контрагенту» нужно делать в обработке проведения.

Приёмы, которые экономят время запросов

  1. Только нужные измерения. Виртуальная таблица группирует по всем измерениям, которые вы выбрали в полях. Не выбрали «Склад» — получите остаток, свёрнутый по всем складам.
  2. Срез последних с отбором. СрезПоследних(&Дата, Номенклатура В (&Список)) работает быстрее, чем срез по всему справочнику с отбором в ГДЕ.
  3. Периодичность оборотов. В Обороты(&Начало, &Конец, Месяц) третий параметр добавляет поле Период и разбивает обороты по месяцам — не нужно группировать даты вручную.
  4. Итоги. Если по измерению отключено «Использование в итогах», запрос остатков с этим измерением будет медленнее: платформа досчитает данные по движениям.

Ошибки при проектировании измерений и как их не допустить

Диагностика: выберите симптом

Ещё несколько решений, которые потом дорого исправлять:

  • 🚫 Составной тип без нужды. Измерение с типом «Справочник Контрагенты, Справочник Физлица, Строка» усложняет запросы и индексы. Если вариантов два-три, подумайте о разных регистрах или о плане видов характеристик.
  • 📏 Длинная строка в измерении. Строковое измерение неограниченной длины задать нельзя, а длинное фиксированное раздувает индекс. Лучше ссылка на справочник.
  • 🔁 Дата как измерение. Для периодического регистра сведений и регистров с регистратором дата уже есть — это поле Период. Отдельное измерение «Дата» обычно лишнее.
Сколько измерений можно сделать у регистра?
Жёсткого практического предела для учётных задач нет, но каждое измерение увеличивает таблицу итогов и индекс. В типовых регистрах обычно от одного до пяти-шести измерений.
Можно ли переименовать измерение без потери данных?
Да. При переименовании в Конфигураторе данные сохраняются, но код и запросы, где использовалось старое имя, нужно исправить: синтаксический контроль покажет все такие места.
Чем измерение отличается от субконто?
Измерение регистра бухгалтерии действует на всех счетах. Субконто задаётся для каждого счёта отдельно в плане счетов и может быть разным: на счёте 60 — контрагент и договор, на 10 — номенклатура.
Можно ли удалить измерение, если в регистре уже есть данные?
Можно, но записи, которые отличались только этим измерением, после обновления базы данных станут неразличимы, а в регистре сведений возможен конфликт ключей. Сначала выгрузите базу и проверьте данные на копии.
Где пользователю увидеть измерения без Конфигуратора?
В отчёте на системе компоновки: Настройки → Группировки или список полей отбора. Поля разрезов остатков и оборотов — это и есть измерения регистра.