Разработка и Конфигурация · 12 мин
Периодичность по позиции регистратора в 1С: что это такое
Что означает периодичность «по позиции регистратора» в регистрах сведений 1С, чем отличается от вариантов «в пределах секунды» и «в пределах дня», как выбрать и настроить.
Периодичность «по позиции регистратора» — это свойство периодического регистра сведений в 1С, при котором уникальность записи определяется не датой, а конкретным документом-регистратором, создавшим эту запись. Проще говоря, платформа запоминает не «что было на 10:00 15 марта», а «что установил документ Приказ № 17 от 15.03». За один и тот же момент времени может существовать несколько записей, если их провели разные документы.
Этот режим встречается в типовых конфигурациях повсеместно: кадровые сведения, цены номенклатуры, курсы валют, учетные политики. Понимание того, как работает позиция регистратора, критично для разработчика и консультанта, потому что от него зависят виртуальные таблицы «СрезПоследних» и «СрезПервых», поведение запросов и корректность отчетов.
Ошибка в выборе периодичности — одна из самых дорогих на этапе проектирования: поменять её на работающей базе с накопленными данными сложно, а иногда невозможно без переноса данных. Поэтому разбираться в теме нужно до создания регистра, а не после обнаружения странных цифр в отчетах.
Какие виды периодичности существуют в регистрах сведений
При создании периодического регистра сведений платформа предлагает несколько вариантов периодичности: «в пределах секунды», «в пределах минуты», «в пределах часа», «в пределах дня», «в пределах месяца», «в пределах квартала», «в пределах года» и «по позиции регистратора». Первые семь вариантов определяют точность, с которой хранится период записи, и гарантируют уникальность: на один период может приходиться только одна запись с данным набором измерений.
Вариант «по позиции регистратора» принципиально другой. Он не ограничивает количество записей на дату — вместо этого регистр становится подчинён регистратору, и каждая запись идентифицируется документом. Платформа перестаёт контролировать уникальность по периоду: два приказа о приёме на работу, проведённые одной датой, спокойно создадут две записи.
Важное следствие: регистр с периодичностью «по позиции регистратора» всегда подчинён регистратору. Режим «независимый» для него недоступен — записи можно создавать только проведением документов, а не вручную через форму списка. Это логично: если уникальность определяется документом, то без документа записи существовать не могут.
Сравнение вариантов периодичности
Подходит для независимых данных: курсы валют, настройки, графики. Уникальность по периоду, записи можно вводить вручную. Ограничение — одна запись на период.
Подходит для данных, которые устанавливаются документами: кадровые приказы, цены, учетная политика. Несколько записей на одну дату разрешены, но ручной ввод невозможен.
Как платформа определяет «последнюю» запись при срезе
Ключевой момент, который нужно понять: при периодичности «по позиции регистратора» срез последних работает не по дате, а по позиции документа. Позиция — это упорядоченная пара «дата документа + ссылка на документ». Если два документа имеют одинаковую дату и время, «позже» считается тот, у которого ссылка больше по внутреннему порядку сравнения.
Это порождает классическую проблему: пользователь создаёт два документа одной датой, например «Установка цен» утром и «Установка цен» вечером, а срез последних возвращает данные не того документа, который ожидался. Причина — сравнение ссылок, а не времени создания документа в базе. Платформа не знает, какой документ ввели позже физически; она сравнивает только дату и ссылку.
При работе с запросами это нужно учитывать явно. Виртуальная таблица «СрезПоследних» корректно отработает автоматически, но если вы строите собственный запрос по физической таблице регистра, сортировать записи по полю «Период» недостаточно — нужно добавлять сортировку по регистратору, иначе результат при совпадающих датах будет непредсказуемым.
Когда выбирать периодичность по позиции регистратора
Выбирайте этот режим, когда значение сведения по своей природе устанавливается документом и допустимо несколько изменений в один день. Типичные примеры: кадровые данные сотрудника (приём, перевод, увольнение могут происходить одной датой), цены номенклатуры (несколько документов установки цен за день), параметры учетной политики, статусы договоров.
Не выбирайте этот режим, если данные вводятся вручную без документов — например, курсы валют, загружаемые обработкой, или настройки обмена. Для них подойдёт независимый регистр с периодичностью «в пределах дня» или «в пределах секунды». Попытка использовать «по позиции регистратора» для таких данных вынудит создавать искусственные документы-регистраторы, что усложнит конфигурацию без выигрыша.
Ещё один критерий — нужна ли история изменений, привязанная к первичке. Если аудитор должен видеть, каким именно приказом установлен оклад сотрудника, подчинение регистратору даёт это «из коробки»: у каждой записи есть ссылка на документ, и стандартные отчеты покажут движения по документам.
Как выбрать периодичность
Настройка регистра в конфигураторе: порядок действий
Создайте регистр сведений, откройте его свойства и установите режим записи «Подчинение регистратору». После этого в поле «Периодичность» станет доступен вариант «По позиции регистратора» — выберите его. Платформа автоматически добавит стандартные реквизиты «Период» и «Регистратор».
Далее определите измерения и ресурсы. Измерения — это координаты, по которым ведётся история (например, «Сотрудник» или «Номенклатура»), ресурсы — сами значения (оклад, цена). Помните, что срез последних строится по комбинации измерений: чем больше измерений, тем тяжелее виртуальные таблицы.
Затем укажите документы, которые будут выступать регистраторами: в свойствах документа на вкладке «Движения» отметьте созданный регистр и напишите код формирования движений в обработке проведения. Без этого документ не создаст записей, и регистр останется пустым.
- 1Создайте регистр сведений, установите режим «Подчинение регистратору»
- 2В свойстве «Периодичность» выберите «По позиции регистратора»
- 3Добавьте измерения и ресурсы с корректными типами
- 4В документе-регистраторе отметьте регистр на вкладке «Движения»
- 5Напишите формирование движений в обработке проведения
- 6Проведите тестовый документ и проверьте записи через консоль запросов или срез последних
Особенности запросов и виртуальных таблиц
Для регистра с такой периодичностью доступны виртуальные таблицы «СрезПоследних» и «СрезПервых». Они работают по позиции регистратора: на указанную дату выбирается запись с максимальной позицией, не превышающей заданный момент. В параметрах среза можно передать дату — тогда учитываются документы до конца этой даты.
Тонкость: если параметр среза передан без времени, платформа трактует его как конец дня. Если вам нужен срез «на начало дня» до проведения каких-либо документов, передавайте момент времени явно, иначе получите данные документов, проведённых в течение этого дня.
При соединении среза с другими таблицами следите за тем, чтобы условия по измерениям попадали в параметры виртуальной таблицы, а не в секцию ГДЕ. Фильтрация в параметрах выполняется на уровне индексов регистра и работает заметно быстрее, особенно на больших объёмах данных.
Перед проектированием проверьте, как аналогичная задача решена в типовой конфигурации. Например, сведения о сотрудниках и ценах номенклатуры в типовых решениях используют именно подчинённые периодические регистры — это подтверждённый практикой шаблон, который не стоит перепридумывать без необходимости.
Типичные ошибки и ограничения
Самая частая ошибка — ожидание, что срез последних вернёт данные «последнего по времени ввода» документа. Платформа сравнивает дату документа и ссылку, а не момент физического создания. Документ, созданный позже, но с более ранней датой, проиграет документу с более поздней датой.
Вторая ошибка — попытка изменить периодичность существующего регистра с данными. Переход с «в пределах дня» на «по позиции регистратора» требует добавления регистратора к каждой записи, обратный переход — разрешения конфликтов нескольких записей на одну дату. В обоих случаях нужна обработка конвертации данных и тестирование на копии базы.
Третья группа проблем — производительность. Срез последних по регистру с миллионами записей без фильтрации по измерениям способен надолго заблокировать отчет. Проектируйте измерения так, чтобы типовые запросы фильтровались по индексированным полям, и не делайте измерением реквизит с высокой вариативностью без необходимости.
Проверка корректности работы регистра
После настройки проверьте поведение на контрольном примере: создайте два документа-регистратора по одному измерению с разными датами, затем два документа с одинаковой датой, но разным временем. Постройте срез последних на каждый момент и убедитесь, что возвращается ожидаемая запись.
Дополнительно проверьте отмену проведения: при отмене проведения документа его записи должны исчезать из регистра, а срез последних — «откатываться» к предыдущему документу. Если записи остаются, проверьте настройки движений документа и код обработки проведения.
Как проверить результат
Возвращаются данные второго документа
Возвращаются данные первого документа или пустой результат
Записи документа удалены, срез показывает предыдущее значение
Записи остались в регистре
Срез выбирает запись по ссылке — поведение стабильно и воспроизводимо
Результат меняется от запуска к запуску
Платформа блокирует ввод — регистр подчинён регистратору
Ручной ввод доступен — значит, режим подчинения настроен неверно
Частые вопросы
Можно ли в регистре «по позиции регистратора» сделать две записи одним документом на одну дату?
Да, если записи различаются по измерениям — например, один документ устанавливает цены для разной номенклатуры. А вот две записи с одинаковым набором измерений и одним регистратором создать нельзя: платформа контролирует уникальность в этих границах.
Чем «по позиции регистратора» отличается от «в пределах секунды»?
Вариант «в пределах секунды» гарантирует одну запись на конкретную секунду по каждому набору измерений и допускает независимый режим с ручным вводом. «По позиции регистратора» разрешает несколько записей на один момент времени от разных документов, но требует подчинения регистратору и сравнивает записи по паре «дата + ссылка».
Почему срез последних вернул не тот документ, который я вводил последним?
Потому что платформа не знает порядок физического ввода — она сравнивает дату документа и ссылку. Если даты и время совпадают, «побеждает» документ с большей ссылкой. Решение — устанавливать документам разное время в пределах дня.
Можно ли получить срез последних на начало дня, до проведения документов?
Да. Передайте в параметр виртуальной таблицы момент времени, соответствующий началу дня (00:00:00), а не просто дату. Если передать дату без времени, срез будет построен на конец дня и включит все документы этого дня.
Как перейти с периодичности «в пределах дня» на «по позиции регистратора»?
Прямого переключения недостаточно: каждой существующей записи нужно назначить регистратор. Обычно создают служебные документы-регистраторы обработкой, переносят записи, затем меняют настройку регистра. Всю процедуру выполняют на копии базы со сверкой срезов до и после миграции.
Влияет ли периодичность на скорость отчетов?
Косвенно — да. Виртуальные таблицы срезов строятся по индексам регистра, и при большом объёме данных фильтрация в параметрах среза работает значительно быстрее, чем отбор в секции ГДЕ. Сам режим «по позиции регистратора» дополнительных тормозов не создаёт, но требует грамотного проектирования измерений.
Что важно запомнить
Периодичность «по позиции регистратора» привязывает записи регистра сведений к документам, а не к моментам времени: несколько записей на одну дату разрешены, ручной ввод невозможен, срезы строятся по паре «дата + ссылка». Выбирайте режим для данных, устанавливаемых документами, и не меняйте периодичность на рабочей базе без конвертации и копии.