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