Регистры сведений — один из ключевых объектов конфигурации 1С:Предприятие 8.3, который позволяет хранить и обрабатывать данные с привязкой к периодам или без неё. Они незаменимы для учета курсов валют, остатков на складах, цен номенклатуры и других динамических параметров. Но как правильно создать регистр сведений, чтобы он решал бизнес-задачи, а не создавал проблемы?

Многие разработчики сталкиваются с трудностями при выборе между периодическими и непериодическими регистрами, настройке измерений и ресурсов, а также при написании запросов к этим объектам. В этой статье мы разберём процесс создания регистра сведений от А до Я — от теоретических основ до практических примеров с кодом.

Особое внимание уделим типичным ошибкам, которые приводят к замедлению работы базы или потере данных. Вы узнаете, как оптимизировать структуру регистра, избежать дублирования записей и правильно организовать доступ к данным через запросы. А в конце статьи — FAQ с ответами на самые частые вопросы по работе с регистрами сведений.

📊 Для каких целей вы чаще всего используете регистры сведений?
Хранение курсов валют
Учет цен номенклатуры
Настройки пользователей
Другие периодические данные
Не использую

Что такое регистр сведений и зачем он нужен

Регистр сведений в — это объект конфигурации, предназначенный для хранения информации, которая может изменяться во времени. В отличие от справочников, где данные хранятся в виде иерархических структур, регистры сведений оптимизированы для работы с периодическими данными (например, курсы валют на каждую дату) или непериодическими (например, настройки программы).

Основные преимущества регистров сведений:

  • 📅 Поддержка периодов — можно хранить историю изменений (например, цены товаров по датам)
  • 🔍 Быстрый доступ через запросы и методы платформы
  • 🛠️ Гибкая структура — настраиваемые измерения, ресурсы и реквизиты
  • 🔄 Возможность записи движений из документов

Регистры сведений делятся на два основных типа:

  1. Независимые — данные записываются напрямую (например, курсы валют ЦБ)
  2. Подчиненные документам — записи создаются при проведении документов (например, остатки товаров после приходной накладной)

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

Типы регистров сведений: какой выбрать для вашей задачи

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

1. Непериодический регистр — хранит данные без привязки ко времени. Подходит для:

  • 🔧 Настроек программы (например, параметры интеграции с банком)
  • 📋 Статичных справочников (например, соответствие артикулов поставщиков)
  • 🔑 Права доступа пользователей к определенным функциям

2. Периодический регистр — хранит историю изменений с привязкой к дате/времени. Используется для:

  • 💰 Курсов валют и ставок налогов
  • 📦 Цен номенклатуры и скидок
  • 📊 Остатков на складах (в простых конфигурациях)

3. Регистр сведений с подчинением документу — записи создаются автоматически при проведении документов. Пример:

  • 📄 Остатки товаров после приходных/расходных накладных
  • 💳 Состояние расчетов с контрагентами

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

💡

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

Пошаговая инструкция: создание регистра сведений в конфигураторе

Теперь перейдем к практике. Создадим периодический регистр сведений для хранения курсов валют. Следуйте инструкции:

Шаг 1. Открытие конфигуратора

Запустите 1С:Предприятие в режиме конфигуратора. Для этого:

  • 🖥️ Выберите нужную базу в списке
  • 🔧 Нажмите кнопку Конфигуратор
  • 🔑 Введите пароль (если требуется)

Шаг 2. Создание нового объекта

В дереве объектов конфигурации:

  1. Правой кнопкой кликните на папку Регистры сведений
  2. Выберите Добавить
  3. Введите имя регистра, например КурсыВалют

Шаг 3. Настройка основных параметров

На вкладке Основные укажите:

  • 📝 Имя: КурсыВалют
  • 📅 Периодичность: По дате (если нужно хранить историю)
  • 🔄 Подчинение документу: Не устанавливать (если регистр независимый)
  • 🔒 Режим записи: Оперативный или Управляемый (в зависимости от задачи)

Шаг 4. Добавление измерений и ресурсов

На вкладке Данные создайте:

  • 🪙 Измерение Валюта (тип: СправочникСсылка.Валюты)
  • 💱 Ресурс Курс (тип: Число(10,4))
  • 📅 Реквизит ДатаКурса (тип: Дата, если периодичность не по дате)

☑️ Проверка перед сохранением регистра

Выполнено: 0 / 5

Шаг 5. Сохранение и обновление конфигурации

После настройки:

  1. Нажмите ОК для сохранения регистра
  2. Выполните Обновление конфигурации базы данных (меню Конфигурация → Обновить конфигурацию базы данных)
  3. Перезапустите в режиме предприятия для проверки

Работа с регистром сведений: запись и чтение данных

Создать регистр — это только половина дела. Теперь нужно научиться с ним работать. Рассмотрим основные методы взаимодействия на примере нашего регистра курсов валют.

1. Запись данных в регистр

Для добавления новой записи используйте следующий код:

Запись = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

Запись.Валюта = Справочники.Валюты.НайтиПоНаименованию("Доллар США");

Запись.Период = ТекущаяДата();

Запись.Курс = 92.50;

Запись.Записать();

2. Чтение данных из регистра

Для получения актуального курса на определенную дату:

МенеджерЗапросов = Новый Запрос;

МенеджерЗапросов.Текст =

"ВЫБРАТЬ

| КурсыВалют.Курс КАК Курс

|ИЗ

| РегистрСведений.КурсыВалют КАК КурсыВалют

|ГДЕ

| КурсыВалют.Валюта = &Валюта

| И КурсыВалют.Период = ДАТАВРЕМЯ(ГОД(&Дата), МЕСЯЦ(&Дата), ДЕНЬ(&Дата))";

МенеджерЗапросов.УстановитьПараметр("Валюта", Справочники.Валюты.ДолларСША);

МенеджерЗапросов.УстановитьПараметр("Дата", ТекущаяДата());

Результат = МенеджерЗапросов.Выполнить();

Если НЕ Результат.Пустой() Тогда

Сообщить("Актуальный курс: " + Результат[0].Курс);

Иначе

Сообщить("Курс не найден!");

КонецЕсли;

3. Получение последней записи

Если нужно получить самый свежий курс независимо от даты:

ПоследнийКурс = РегистрыСведений.КурсыВалют.ПолучитьПоследние(ТекущаяДата(), Валюта);

Если ПоследнийКурс.Пустой() Тогда

// Обработка случая, когда курс не найден

КонецЕсли;

Обратите внимание: при работе с периодическими регистрами всегда указывайте период выборки. Иначе вы рискуете получить все записи за всю историю, что может существенно замедлить выполнение запроса.

Что делать если запрос к регистру работает слишком долго?

Если запрос выполняется более 5 секунд, проверьте: 1) правильность индексов (должны быть на измерениях), 2) наличие фильтра по периоду, 3) объем данных в регистре. Для больших регистров (более 100 000 записей) рассмотрите возможность архивирования старых данных.

Оптимизация регистров сведений: советы от экспертов

Неправильно спроектированный регистр сведений может стать узким местом вашей конфигурации. Вот ключевые рекомендации по оптимизации:

1. Правильный выбор периодичности

  • 📅 По дате — если данные меняются раз в день (курсы валют)
  • По секунде — только если действительно нужна такая точность (например, лог действий пользователей)
  • Без периодичности — если данные никогда не меняются (используйте справочники)

2. Оптимальное количество измерений

Каждое дополнительное измерение увеличивает размер регистра. Старайтесь ограничиться 3-4 измерениями. Если нужно больше — рассмотрите возможность нормализации данных.

3. Индексирование полей

Все измерения регистра автоматически индексируются. Для ускорения выборки по ресурсам можно создать дополнительные индексы через Индексировать в свойствах реквизита.

4. Архивирование старых данных

Для регистров с большой историей (более 100 000 записей) настройте автоматическое архивирование старых данных в отдельную таблицу. Это можно сделать через обработку, которая будет запускаться по расписанию.

5. Использование отборов

Всегда применяйте отборы в запросах к регистрам. Например:

Запрос.Текст = "ВЫБРАТЬ ... ГДЕ Период МЕЖДУ &НачалоПериода И &КонецПериода";
💡

Регистры сведений с периодичностью "Секunda" могут создавать тысячи записей в день. Используйте такую периодичность только при крайней необходимости!

Типичные ошибки при работе с регистрами сведений

Даже опытные разработчики иногда допускают ошибки при работе с регистрами сведений. Вот наиболее распространенные проблемы и способы их избежать:

1. Дублирование записей

Причина: отсутствие проверки на существование записи перед добавлением.

Решение: всегда проверяйте наличие записи:

Если НЕ РегистрыСведений.КурсыВалют.НайтиСрезПоследних(ТекущаяДата(), Валюта).Пустой() Тогда

// Запись уже существует

КонецЕсли;

2. Неправильная периодичность

Пример: использование периодичности "Секunda" для курсов валют, которые обновляются раз в день.

Последствия: огромный объем данных и замедление работы.

3. Отсутствие обработки ошибок

Всегда обрабатывайте исключения при работе с регистрами:

Попытка

Запись.Записать();

Исключение

ЗаписатьЖурналРегистрации(ОписаниеОшибки(), УровеньЖурналаРегистрации.Ошибка);

КонецПопытки;

4. Чтение всех записей без фильтра

Запрос вида ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют вернет все записи за всю историю, что может заблокировать базу.

5. Несогласованность данных

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

💡

Для отладки проблем с регистрами сведений используйте отчет "Анализ использования регистров" в конфигураторе (меню "Администрирование → Поддержка и обслуживание").

Примеры использования регистров сведений в типовых конфигурациях

Давайте рассмотрим, как регистры сведений применяются в стандартных конфигурациях и какие задачи они решают:

Конфигурация Регистр сведений Назначение Тип
1С:Бухгалтерия КурсыВалют Хранение официальных курсов ЦБ РФ Периодический (по дате)
1С:Управление торговлей ЦеныНоменклатуры Актуальные и исторические цены товаров Периодический (по дате)
1С:Зарплата и управление персоналом ГрафикиРаботыСотрудников Хранение графиков работы с привязкой к периодам Периодический (по месяцу)
1С:ERP НастройкиПользователей Индивидуальные настройки интерфейса Непериодический
1С:Розница ОстаткиТоваров Текущие остатки на складах (в упрощенных конфигурациях) Подчинен документам

Обратите внимание, что в сложных конфигурациях (например, 1С:ERP) для учета остатков чаще используются регистры накопления, а регистры сведений применяются для вспомогательных данных.

В типовых конфигурациях часто встречаются регистры сведений с предопределенными элементами. Например, в регистре КурсыВалют обычно есть предопределенные валюты (доллар, евро), которые нельзя удалить.

Как посмотреть структуру стандартного регистра?

В конфигураторе откройте нужный регистр сведений (например, "КурсыВалют"), перейдите на вкладку "Данные" и изучите состав измерений, ресурсов и реквизитов. Это поможет понять логику работы типовых механизмов.

FAQ: Ответы на частые вопросы о регистрах сведений

Как удалить все записи из регистра сведений?

Для полной очистки регистра используйте метод Очистить():

РегистрыСведений.КурсыВалют.Очистить();

⚠️ Внимание: Эта операция необратима! Предварительно сделайте резервную копию базы.

Для selective удаления используйте запрос с конструкцией УДАЛИТЬ.

Можно ли создать регистр сведений с периодичностью "Минута"?

Технически да, но это крайне не рекомендуется. Каждая запись занимает место в базе, и при периодичности "Минута" за день будет создаваться 1440 записей на каждый набор измерений.

Используйте такую периодичность только для критически важных данных (например, котировки акций в реальном времени) и настройте автоматическое архивирование.

Как получить первую запись из регистра сведений?

Используйте метод ПолучитьПервые() с сортировкой:

ПервыеЗаписи = РегистрыСведений.КурсыВалют.ПолучитьПервые(10, "Период ВОЗР");

ПерваяЗапись = ПервыеЗаписи[0];

Для получения самой ранней записи по конкретной валюте добавьте отбор.

Чем регистр сведений отличается от регистра накопления?

Основные различия:

  • 📊 Регистр сведений хранит "срезы" данных на определенные моменты времени
  • 📈 Регистр накопления хранит приходы/расходы и может рассчитывать остатки
  • ⚡ Регистры накопления оптимизированы для операций по учету (склад, денежные средства)

Пример: для учета цен товаров подходит регистр сведений, а для учета остатков на складе — регистр накопления.

Как сделать резервную копию только одного регистра сведений?

Платформа 1С не поддерживает выборочное резервное копирование отдельных регистров. Варианты решения:

  1. Создать обработку, которая экспортирует данные регистра в XML/JSON
  2. Использовать Запрос.Выгрузить() для сохранения данных в файл
  3. Сделать полную копию базы и затем очистить ненужные данные

Для регулярного бэкапа настройте регламентное задание по выгрузке критичных регистров.