Разрезы учёта в регистрах 1С: как устроены измерения и как с ними работать
Содержание
Измерение в 1С — это разрез, по которому регистр хранит и складывает данные: склад, номенклатура, организация, сотрудник. Если у регистра остатков товаров есть измерения «Склад» и «Номенклатура», программа сможет мгновенно ответить, сколько единиц конкретного товара лежит на конкретном складе. Сами числа (количество, сумма) хранятся в ресурсах, а измерения отвечают на вопрос «чего и где».
Измерения есть у всех видов регистров платформы 1С:Предприятие 8.3: регистров сведений, накопления, бухгалтерии и расчёта. Создаёт их разработчик в Конфигураторе. Пользователь видит измерения как колонки отчётов, группировки и отборы. Ниже — виды, отличие от ресурсов и реквизитов, настройка, запросы и ошибки, на которых чаще всего спотыкаются.
Суть измерения на простом примере
Представьте тетрадь кладовщика. В каждой строке он пишет: какой товар, на каком складе, сколько пришло или ушло. «Товар» и «склад» — это измерения. «Сколько» — ресурс.
Регистр в 1С работает так же, только хранит не строки поступлений, а умеет быстро посчитать итог по любой комбинации измерений:
- 📦 остаток всех товаров на складе «Основной»;
- 🏷️ остаток одного товара по всем складам;
- 🔍 остаток одного товара на одном складе на конкретную дату.
Набор значений всех измерений — это ключ записи. Для регистра сведений он уникален: две записи с одинаковыми измерениями (и одинаковым периодом, если регистр периодический) существовать не могут. Для регистра накопления записей с одинаковым набором измерений может быть сколько угодно — программа их суммирует.
Хорошее правило: измерение — это то, по чему вы хотите получать итоги или отбирать данные. Если по полю никогда не нужен итог и отбор, это кандидат в реквизиты.
Виды измерений по типам регистров
Слово «измерение» одно, но в разных регистрах у него разные задачи и свои свойства.
| Вид регистра | Что делает измерение | Особые свойства |
|---|---|---|
| Регистр сведений | Образует ключ записи, по нему ищут значение | «Ведущее», «Запрет незаполненных значений» |
| Регистр накопления | Разрез, по которому считаются остатки и обороты | «Использование в итогах» |
| Регистр бухгалтерии | Дополнительный разрез поверх счёта и субконто | «Балансовый» |
| Регистр расчёта | Разрез для начислений и расчёта баз | «Базовое» |
Регистр сведений
Здесь измерение работает как поле поиска. Классический пример — курсы валют: измерение «Валюта», ресурсы «Курс» и «Кратность», периодичность — день. Запрос «какой курс доллара на 15 число» сводится к поиску по измерению и дате.
Регистр накопления
Измерения задают разрезы для итогов. Платформа хранит таблицу итогов по комбинациям измерений, поэтому остатки на дату считаются быстро, без перебора всех движений. Чем больше измерений, тем больше строк в таблице итогов.
Регистр бухгалтерии
Основной разрез здесь — счёт, а аналитика по счёту задаётся через субконто. Измерения регистра бухгалтерии — это разрезы, которые нужны на всех счетах сразу. В БП 3.0 у регистра «Хозрасчетный» это организация, подразделение и валюта.
Свойство «Балансовый» означает, что по измерению должен сходиться баланс: сумма дебета равна сумме кредита в разрезе его значений.
Регистр расчёта
Измерения описывают, кому и что начислено: сотрудник, организация, подразделение. Свойство «Базовое» указывает, по каким измерениям собирается база для зависимых начислений. Например, при расчёте премии от оклада база собирается по сотруднику.
Измерение, ресурс или реквизит: как выбрать
Три вида полей регистра путают чаще всего. Разница в том, что каждый из них делает при выборке данных.
| Поле | Что хранит | Участвует в итогах | Отбор в виртуальной таблице |
|---|---|---|---|
| Измерение | Разрез учёта: товар, склад, договор | Да, как группировка | Да |
| Ресурс | Числовое значение: количество, сумма | Да, суммируется (в регистре накопления) | Нет |
| Реквизит | Справочная информация о записи: комментарий, автор | Нет | Нет |
Несколько уточнений, которые помогают не ошибиться:
- 🔢 Ресурсы регистра накопления и бухгалтерии — только числа. У регистра сведений ресурс может быть любого типа: строка, дата, ссылка.
- 📝 Реквизит виден только в физической таблице регистра. В виртуальных таблицах остатков и оборотов реквизитов нет.
- ⚖️ Если поле нужно для отбора в отчёте, но итоги по нему не нужны, реквизит с индексированием может быть выгоднее нового измерения: таблица итогов не разрастается.
Как добавить измерение в регистр: пошагово
Работа идёт в Конфигураторе. Если конфигурация типовая и стоит на поддержке, правьте не основную конфигурацию, а расширение — так обновления не превратятся в ручное сравнение.
Перед изменением структуры регистра в рабочей базе сделайте резервную копию — после обновления конфигурации платформа перестраивает таблицы.
Шаг 1. Откройте регистр
- Запустите Конфигуратор и откройте конфигурацию:
Конфигурация → Открыть конфигурацию. - В дереве метаданных разверните ветку нужного вида регистра, например
Регистры накопления. - Дважды щёлкните по регистру — откроется окно редактирования объекта.
Шаг 2. Добавьте измерение
- Перейдите на закладку
Данные. - Выделите группу
Измеренияи нажмите кнопку добавления. - Задайте имя без пробелов (
Склад), синоним для пользователя («Склад») и тип — например,СправочникСсылка.Склады.
Шаг 3. Настройте свойства
Откройте палитру свойств измерения (клавиша Alt+Enter). Чаще всего настраивают:
- ✅ «Запрет незаполненных значений» (у регистра сведений) — запись с пустым измерением не запишется;
- 🔗 «Ведущее» (у регистра сведений) — записи регистра удаляются вместе с объектом, который указан в измерении, а регистр появляется в панели навигации формы этого объекта;
- 📊 «Использование в итогах» (у регистра накопления) — можно отключить хранение итогов по редко используемому измерению;
- 🧭 «Связи параметров выбора» — ограничивает выбор значения другим полем (например, договор только этого контрагента).
Шаг 4. Заполните движения
Измерение само ничем не заполняется. Нужно дописать код в модуле документа-регистратора, обработке проведения:
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого СтрокаТЧ Из Товары Цикл
Движение = Движения.ОстаткиТоваров.ДобавитьПриход();
Движение.Период = Дата;
Движение.Склад = Склад;
Движение.Номенклатура = СтрокаТЧ.Номенклатура;
Движение.Количество = СтрокаТЧ.Количество;
КонецЦикла;
Шаг 5. Обновите базу и перепроведите
Сохраните конфигурацию и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Для этого нужен монопольный доступ к базе — предупредите пользователей, что сеансы придётся завершить.
У старых записей новое измерение будет пустым. Чтобы заполнить его, перепроведите документы за нужный период или напишите обработку, которая перезапишет наборы записей.
Измерения в типовых конфигурациях: где их увидеть
Разбирать чужие регистры — лучший способ понять, как разработчики фирмы 1С выбирают измерения. Откройте Конфигуратор в режиме просмотра и посмотрите структуру этих объектов в БП 3.0:
| Регистр | Вид | Измерения | Ресурсы |
|---|---|---|---|
| «Курсы валют» | Сведений, периодический | Валюта | Курс, Кратность |
| «Хозрасчетный» | Бухгалтерии | Организация, Подразделение, Валюта | Сумма, Количество, ВалютнаяСумма и суммы для налогового учёта |
Что видно из этих примеров:
- 🏢 Организация почти всегда первое измерение. Так данные разных юрлиц в одной базе не смешиваются, а права по организациям настраиваются через ограничение доступа.
- 💱 Валюта — измерение, потому что сумма в валюте без указания валюты бессмысленна.
- 📈 Курс — ресурс: это то значение, которое ищут по ключу «валюта + дата».
Пользователю не нужно открывать Конфигуратор, чтобы увидеть измерения. В режиме 1С:Предприятие откройте любой отчёт на системе компоновки, нажмите Настройки и посмотрите список доступных полей для группировок. Почти все поля, по которым можно сгруппировать остатки и обороты, — это измерения регистра или субконто счёта.
Как получить данные по измерениям: отчёты и запросы
Для запросов к регистрам платформа даёт виртуальные таблицы. Главное правило работы с ними — отбор по измерениям ставить в параметры таблицы, а не в ГДЕ.
Остатки на дату по складу
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.КоличествоОстаток КАК Количество
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Остатки(&Дата, Склад = &Склад) КАК Остатки";
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("Склад", Склад);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("" + Выборка.Номенклатура + ": " + Формат(Выборка.Количество, "ЧГ=0"));
КонецЦикла;
Условие Склад = &Склад внутри скобок платформа применяет до сбора итогов. Если перенести его в ГДЕ, результат будет тем же, но сначала посчитаются остатки по всем складам, и запрос станет заметно медленнее на большой базе.
Какие виртуальные таблицы есть у регистров
| Регистр | Таблица | Что возвращает |
|---|---|---|
| Сведений (периодический) | СрезПоследних | Последнее значение на дату по каждому ключу |
| Сведений (периодический) | СрезПервых | Первое значение на дату или позже |
| Накопления (остатки) | Остатки | Остатки на момент времени |
| Накопления | Обороты | Приход, расход, оборот за период |
| Накопления (остатки) | ОстаткиИОбороты | Начальный, конечный остаток и обороты |
| Бухгалтерии | Остатки, Обороты, ОборотыДтКт | Сальдо и обороты по счетам, субконто и измерениям |
В параметре «Условие» виртуальной таблицы используйте только измерения (и для регистра бухгалтерии — счёт и субконто). Отбор по ресурсу там не сработает так, как ожидается: ресурс ещё не посчитан в момент отбора.
В отчётах на СКД
В системе компоновки данных измерения автоматически становятся полями группировки и отбора. Если в наборе данных указана виртуальная таблица, отбор пользователя по измерению СКД сама переносит в параметры таблицы. Поэтому в отчёте на остатках лучше выбирать поля из виртуальной таблицы, а не соединять её с другими источниками заранее.
Связанные измерения и тонкости виртуальных таблиц
В платформе нет отдельного вида «подчинённое измерение», но на практике так называют пару измерений, где одно зависит от другого: контрагент и договор, номенклатура и характеристика, склад и ячейка.
Как связать измерения
- 🔗 В свойстве «Связи параметров выбора» у измерения «Договор» укажите
Отбор.Владелец→Контрагент. Тогда при ручном вводе записи пользователь увидит только договоры выбранного контрагента. - 📐 Порядок измерений в регистре сведений влияет на индекс: ставьте первым то измерение, по которому отбирают чаще всего.
- 🧩 Зависимое измерение не заменяет проверку данных. Если записи пишет код, проверку «договор принадлежит контрагенту» нужно делать в обработке проведения.
Приёмы, которые экономят время запросов
- Только нужные измерения. Виртуальная таблица группирует по всем измерениям, которые вы выбрали в полях. Не выбрали «Склад» — получите остаток, свёрнутый по всем складам.
- Срез последних с отбором.
СрезПоследних(&Дата, Номенклатура В (&Список))работает быстрее, чем срез по всему справочнику с отбором вГДЕ. - Периодичность оборотов. В
Обороты(&Начало, &Конец, Месяц)третий параметр добавляет полеПериоди разбивает обороты по месяцам — не нужно группировать даты вручную. - Итоги. Если по измерению отключено «Использование в итогах», запрос остатков с этим измерением будет медленнее: платформа досчитает данные по движениям.
Ошибки при проектировании измерений и как их не допустить
Ещё несколько решений, которые потом дорого исправлять:
- 🚫 Составной тип без нужды. Измерение с типом «Справочник Контрагенты, Справочник Физлица, Строка» усложняет запросы и индексы. Если вариантов два-три, подумайте о разных регистрах или о плане видов характеристик.
- 📏 Длинная строка в измерении. Строковое измерение неограниченной длины задать нельзя, а длинное фиксированное раздувает индекс. Лучше ссылка на справочник.
- 🔁 Дата как измерение. Для периодического регистра сведений и регистров с регистратором дата уже есть — это поле
Период. Отдельное измерение «Дата» обычно лишнее.
Сколько измерений можно сделать у регистра?
Можно ли переименовать измерение без потери данных?
Чем измерение отличается от субконто?
Можно ли удалить измерение, если в регистре уже есть данные?
Где пользователю увидеть измерения без Конфигуратора?
Настройки → Группировки или список полей отбора. Поля разрезов остатков и оборотов — это и есть измерения регистра.