Разработка и Конфигурация · 11 мин
Как создать периодический регистр сведений в 1С
Пошаговая инструкция по созданию периодического регистра сведений в 1С: настройка периодичности, измерений, режима подчинения, заполнение и получение срезов.
Периодический регистр сведений в 1С предназначен для хранения значений, которые изменяются во времени: курсов валют, цен номенклатуры, окладов сотрудников, ставок налогов, адресов контрагентов. В отличие от обычного регистра сведений, каждая запись здесь привязана к дате, и система умеет автоматически возвращать значение «на последнюю дату» через виртуальные таблицы среза.
Типичная ошибка начинающих разработчиков — хранить историю изменений в реквизитах справочника или вручную добавлять поле «Дата» в независимый регистр. Это ломает типовые механизмы: теряется возможность быстро получить срез последних значений в запросе, усложняется проверка уникальности и контроль заполнения. Правильно спроектированный периодический регистр решает эти задачи штатными средствами платформы.
Ниже разобран полный цикл работы: от выбора режима подчинения и периодичности до программного заполнения и получения срезов в запросах. Инструкция применима к конфигурациям на управляемых формах (8.3), но большинство шагов идентичны и в обычном приложении.
Когда нужен именно периодический регистр сведений
Регистр сведений стоит делать периодическим, если значение зависит от даты и важна история его изменений. Классические примеры: курсы валют (меняются каждый день), цены номенклатуры по видам цен, ФИО физического лица (может меняться при смене фамилии), адреса и телефоны контрагентов, процентные ставки, настройки учётной политики организации.
Если значение не имеет истории и просто описывает объект — например, штрихкод товара или ответственный по договору — достаточно непериодического регистра сведений. Лишняя периодичность усложняет структуру и замедляет запросы, потому что к каждой записи добавляется поле периода и виртуальные таблицы срезов.
Как выбрать тип регистра
Создание регистра в конфигураторе: базовые шаги
Откройте конфигуратор, в дереве конфигурации найдите ветку «Регистры сведений» и добавьте новый объект через контекстное меню. Задайте имя без пробелов (например, КурсыВалют или ЦеныНоменклатуры) и синоним, который увидят пользователи.
На закладке «Основные» установите ключевые свойства: периодичность и режим записи. Именно они определяют, как регистр будет хранить данные и какие виртуальные таблицы станут доступны в запросах. Остальные свойства (представление, подсистемы, права) настраиваются по общим правилам.
- 1В дереве конфигурации откройте «Регистры сведений» и добавьте новый объект
- 2Задайте имя и синоним регистра
- 3На закладке «Основные» выберите периодичность и режим записи (независимый или подчинён регистратору)
- 4Добавьте измерения — по каким разрезам хранится значение
- 5Добавьте ресурсы — сами хранимые значения, при необходимости реквизиты
- 6Настройте подсистемы, права и формы списка
- 7Обновите конфигурацию базы данных (F7) и проверьте регистр в режиме 1С:Предприятие
Настройка периодичности
Периодичность определяет точность даты записи и принимает значения: в пределах секунды, дня, месяца, квартала, года, а также «Непериодический». Для курсов валют обычно достаточно «в пределах дня» — одна запись на валюту в день. Для цен номенклатуры часто используют «в пределах секунды», чтобы несколько документов установки цен могли сработать в один день.
Важно понимать механику уникальности: комбинация «период + измерения» должна быть уникальной для независимого регистра. Если периодичность — день, платформа не даст создать две записи с одинаковыми измерениями в один день. Поэтому не занижайте периодичность без необходимости, но и не завышайте: лишняя точность в секундах усложняет ручной ввод.
Периодичность влияет и на виртуальные таблицы: «СрезПоследних» и «СрезПервых» доступны только у периодических регистров. Если позже выяснится, что периодичность выбрана неверно, изменить её можно, но при существующих записях потребуется аккуратная реструктуризация — делайте это на копии базы.
Режим подчинения: независимый или подчинён регистратору
Это принципиальный выбор, который нельзя изменить без потери данных. Независимый регистр заполняется вручную, обработкой или программно — записи живут сами по себе. Регистр, подчинённый регистратору, заполняется только движениями документа: при проведении документа записи появляются, при отмене проведения — удаляются автоматически.
Правило выбора простое. Если значение появляется в результате хозяйственной операции, оформленной документом (установка цен документом «Установка цен номенклатуры», назначение оклада кадровым приказом), — используйте подчинение регистратору. Если данные загружаются извне или вводятся напрямую (курсы валют с сайта ЦБ, настройки обмена) — независимый режим.
Независимый vs подчинённый регистратору
Записи вводятся вручную или программно, удаляются только явно. Подходит для загружаемых справочных данных. Нет автоматической очистки при отмене операции.
Записи создаются движениями документа и удаляются при отмене проведения. Обеспечивает целостность, но требует документа-регистратора и обработчика проведения.
Измерения, ресурсы и реквизиты
Измерения — это аналитические разрезы, по которым хранится значение. Для курсов валют измерение одно — «Валюта». Для цен — «Номенклатура» и «ВидЦены». Измерения входят в ключ уникальности записи, поэтому включайте только действительно необходимые разрезы: каждое лишнее измерение увеличивает объём хранения и усложняет запросы.
Ресурсы — сами хранимые значения: курс, цена, процент, оклад. Реквизиты — дополнительная поясняющая информация, которая не участвует в срезах как значение, но доступна в записях (например, комментарий или автор изменения). Частая ошибка — делать реквизитом то, что должно быть ресурсом: срез последних возвращает ресурсы, и если нужное поле оформлено реквизитом, получить его через срез штатно не выйдет.
Заполнение регистра: вручную, обработкой и программно
Ручной ввод доступен через форму списка регистра в режиме 1С:Предприятие, если регистр включён в подсистемы и у пользователя есть права. Для независимого регистра пользователь создаёт запись, указывает период, измерения и значение ресурса.
Программная запись для независимого регистра выполняется через менеджер записи или набор записей:
МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДатаСеанса();
МенеджерЗаписи.Валюта = ВалютаСсылка;
МенеджерЗаписи.Курс = 92.5;
МенеджерЗаписи.Записать();
Для регистра, подчинённого регистратору, записи добавляются в модуле документа в обработке проведения через набор записей движений. Перед записью набора устанавливается отбор по регистратору, а при отмене проведения платформа очищает движения автоматически.
Получение данных: срез последних и срез первых
Главное преимущество периодического регистра — виртуальные таблицы. «СрезПоследних» возвращает актуальные значения ресурсов на указанную дату для каждой комбинации измерений, «СрезПервых» — самые ранние значения. Пример запроса актуальных курсов:
ВЫБРАТЬ
Курсы.Валюта,
Курсы.Курс
ИЗ
РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, ) КАК Курсы
Параметр &ДатаСреза задаёт момент, на который берутся значения; второй параметр — условие отбора по измерениям (например, Валюта = &Валюта). Всегда передавайте дату среза явно: срез без даты строится на максимальную дату и в моментных отчётах может дать неожиданный результат. В построителях отчётов на СКД срезы подключаются как виртуальные таблицы с теми же параметрами.
Как проверить результат
В свойствах регистра выбрана нужная периодичность, записи создаются без ошибок уникальности
Невозможно ввести две записи за один день при необходимости — периодичность занижена
Запрос к СрезПоследних возвращает актуальные значения на заданную дату
Срез пустой или возвращает устаревшие значения — проверьте период записей
При отмене проведения регистратора записи удаляются
Записи остаются после отмены — регистр не подчинён регистратору или движение не очищено
Права, интерфейс и ограничения
Не забудьте настроить права: у ролей пользователей должны быть права на чтение регистра для отчётов и на изменение — для тех, кто вводит данные. Для регистра, подчинённого регистратору, права на изменение обычно не дают напрямую — данные меняются только через документы.
Учтите ограничения платформы. Регистр сведений не хранит итоги и обороты — для сумм и количеств нужен регистр накопления. Записи независимого регистра при больших объёмах (сотни тысяч строк) стоит индексировать продуманным выбором измерений, а массовую загрузку выполнять наборами записей с отключёнными итогами там, где это применимо. Для обмена данными регистр включается в планы обмена как обычный объект конфигурации.
Если значение нужно «на каждый день» в отчёте, а записи есть только на даты изменений, используйте соединение срезов через периоды или постройте запрос с последующим заполнением пропусков в СКД — не создавайте фиктивные ежедневные записи, это раздувает таблицу без пользы.
Частые вопросы
Чем периодический регистр сведений отличается от регистра накопления?
Регистр сведений хранит значения в разрезе измерений и периода (курс, цена, ставка), а регистр накопления — числовые показатели с остатками или оборотами (количество на складе, суммы продаж). Для истории значений используйте регистр сведений, для учёта движений ресурсов — регистр накопления.
Можно ли изменить периодичность у регистра с данными?
Технически да, но при реструктуризации записи с совпадающими ключами могут конфликтовать или теряться. Перед изменением сделайте резервную копию, проверьте результат на копии базы и при необходимости предварительно выгрузите данные в промежуточное хранилище.
Почему срез последних возвращает пустой результат?
Чаще всего дата среза раньше всех записей регистра, либо отбор по измерениям исключает все записи. Проверьте периоды фактических записей, корректность параметра даты и условие во втором параметре виртуальной таблицы.
Как записать данные в регистр, подчинённый регистратору, программно?
Напрямую — нельзя, записи создаются только через движения документа. В обработке проведения документа заполните набор записей: Движения.ИмяРегистра.Добавить(), установите период, измерения и ресурсы. При отмене проведения платформа очистит движения автоматически.
Нужна ли периодичность «в пределах секунды» для цен номенклатуры?
Да, если цены могут устанавливаться несколькими документами в один день — иначе вторая запись за день вызовет ошибку уникальности. Если изменения гарантированно не чаще раза в день, достаточно периодичности «в пределах дня».
Как получить историю изменений значения, а не только последнее?
Обратитесь к физической таблице регистра без виртуальной таблицы: РегистрСведений.КурсыВалют с упорядочиванием по периоду. Виртуальные таблицы срезов нужны только для значений на конкретную дату.
Что важно запомнить
Периодический регистр сведений создаётся в конфигураторе с выбором периодичности и режима подчинения. Независимый режим — для ручного и загружаемого ввода, подчинённый регистратору — для данных документов. Измерения образуют ключ уникальности вместе с периодом, ресурсы доступны в срезах последних и первых. Перед изменением структуры регистра с данными всегда делайте резервную копию.