Регистры сведений — один из ключевых объектов конфигурации 1С:Предприятие 8.3, который позволяет хранить и обрабатывать данные с привязкой к периодам или без неё. Они незаменимы для учета курсов валют, остатков на складах, цен номенклатуры и других динамических параметров. Но как правильно создать регистр сведений, чтобы он решал бизнес-задачи, а не создавал проблемы?
Многие разработчики сталкиваются с трудностями при выборе между периодическими и непериодическими регистрами, настройке измерений и ресурсов, а также при написании запросов к этим объектам. В этой статье мы разберём процесс создания регистра сведений от А до Я — от теоретических основ до практических примеров с кодом.
Особое внимание уделим типичным ошибкам, которые приводят к замедлению работы базы или потере данных. Вы узнаете, как оптимизировать структуру регистра, избежать дублирования записей и правильно организовать доступ к данным через запросы. А в конце статьи — FAQ с ответами на самые частые вопросы по работе с регистрами сведений.
Что такое регистр сведений и зачем он нужен
Регистр сведений в 1С — это объект конфигурации, предназначенный для хранения информации, которая может изменяться во времени. В отличие от справочников, где данные хранятся в виде иерархических структур, регистры сведений оптимизированы для работы с периодическими данными (например, курсы валют на каждую дату) или непериодическими (например, настройки программы).
Основные преимущества регистров сведений:
- 📅 Поддержка периодов — можно хранить историю изменений (например, цены товаров по датам)
- 🔍 Быстрый доступ через запросы и методы платформы
- 🛠️ Гибкая структура — настраиваемые измерения, ресурсы и реквизиты
- 🔄 Возможность записи движений из документов
Регистры сведений делятся на два основных типа:
- Независимые — данные записываются напрямую (например, курсы валют ЦБ)
- Подчиненные документам — записи создаются при проведении документов (например, остатки товаров после приходной накладной)
Пример использования: если вам нужно хранить актуальные цены номенклатуры с возможностью отката к предыдущим значениям, регистр сведений с периодичностью по дате будет оптимальным решением. А для хранения статичных параметров (например, настроек печати чеков) подойдет непериодический регистр.
Типы регистров сведений: какой выбрать для вашей задачи
Перед созданием регистра сведений необходимо определиться с его типом. От этого зависит логика работы, производительность и даже архитектура вашей конфигурации. Рассмотрим основные варианты:
1. Непериодический регистр — хранит данные без привязки ко времени. Подходит для:
- 🔧 Настроек программы (например, параметры интеграции с банком)
- 📋 Статичных справочников (например, соответствие артикулов поставщиков)
- 🔑 Права доступа пользователей к определенным функциям
2. Периодический регистр — хранит историю изменений с привязкой к дате/времени. Используется для:
- 💰 Курсов валют и ставок налогов
- 📦 Цен номенклатуры и скидок
- 📊 Остатков на складах (в простых конфигурациях)
3. Регистр сведений с подчинением документу — записи создаются автоматически при проведении документов. Пример:
- 📄 Остатки товаров после приходных/расходных накладных
- 💳 Состояние расчетов с контрагентами
Важный нюанс: если вам нужно хранить данные с высокой частотой изменений (например, остатки товаров в реальном времени), рассмотрите возможность использования регистров накопления вместо регистров сведений — они оптимизированы для таких задач.
Для хранения данных с ежедневными изменениями (например, курсы валют) используйте периодический регистр с периодичностью "День". Это ускорит выборку актуальных данных.
Пошаговая инструкция: создание регистра сведений в конфигураторе
Теперь перейдем к практике. Создадим периодический регистр сведений для хранения курсов валют. Следуйте инструкции:
Шаг 1. Открытие конфигуратора
Запустите 1С:Предприятие в режиме конфигуратора. Для этого:
- 🖥️ Выберите нужную базу в списке
- 🔧 Нажмите кнопку
Конфигуратор - 🔑 Введите пароль (если требуется)
Шаг 2. Создание нового объекта
В дереве объектов конфигурации:
- Правой кнопкой кликните на папку
Регистры сведений - Выберите
Добавить - Введите имя регистра, например
КурсыВалют
Шаг 3. Настройка основных параметров
На вкладке Основные укажите:
- 📝 Имя: КурсыВалют
- 📅 Периодичность: По дате (если нужно хранить историю)
- 🔄 Подчинение документу: Не устанавливать (если регистр независимый)
- 🔒 Режим записи: Оперативный или Управляемый (в зависимости от задачи)
Шаг 4. Добавление измерений и ресурсов
На вкладке Данные создайте:
- 🪙 Измерение
Валюта(тип:СправочникСсылка.Валюты) - 💱 Ресурс
Курс(тип:Число(10,4)) - 📅 Реквизит
ДатаКурса(тип:Дата, если периодичность не по дате)
☑️ Проверка перед сохранением регистра
Шаг 5. Сохранение и обновление конфигурации
После настройки:
- Нажмите
ОКдля сохранения регистра - Выполните
Обновление конфигурации базы данных(менюКонфигурация → Обновить конфигурацию базы данных) - Перезапустите 1С в режиме предприятия для проверки
Работа с регистром сведений: запись и чтение данных
Создать регистр — это только половина дела. Теперь нужно научиться с ним работать. Рассмотрим основные методы взаимодействия на примере нашего регистра курсов валют.
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С:Зарплата и управление персоналом | ГрафикиРаботыСотрудников | Хранение графиков работы с привязкой к периодам | Периодический (по месяцу) |
| 1С:ERP | НастройкиПользователей | Индивидуальные настройки интерфейса | Непериодический |
| 1С:Розница | ОстаткиТоваров | Текущие остатки на складах (в упрощенных конфигурациях) | Подчинен документам |
Обратите внимание, что в сложных конфигурациях (например, 1С:ERP) для учета остатков чаще используются регистры накопления, а регистры сведений применяются для вспомогательных данных.
В типовых конфигурациях часто встречаются регистры сведений с предопределенными элементами. Например, в регистре В конфигураторе откройте нужный регистр сведений (например, "КурсыВалют"), перейдите на вкладку "Данные" и изучите состав измерений, ресурсов и реквизитов. Это поможет понять логику работы типовых механизмов.КурсыВалют обычно есть предопределенные валюты (доллар, евро), которые нельзя удалить.
Как посмотреть структуру стандартного регистра?
FAQ: Ответы на частые вопросы о регистрах сведений
Как удалить все записи из регистра сведений?
Для полной очистки регистра используйте метод Очистить():
РегистрыСведений.КурсыВалют.Очистить();
⚠️ Внимание: Эта операция необратима! Предварительно сделайте резервную копию базы.
Для selective удаления используйте запрос с конструкцией УДАЛИТЬ.
Можно ли создать регистр сведений с периодичностью "Минута"?
Технически да, но это крайне не рекомендуется. Каждая запись занимает место в базе, и при периодичности "Минута" за день будет создаваться 1440 записей на каждый набор измерений.
Используйте такую периодичность только для критически важных данных (например, котировки акций в реальном времени) и настройте автоматическое архивирование.
Как получить первую запись из регистра сведений?
Используйте метод ПолучитьПервые() с сортировкой:
ПервыеЗаписи = РегистрыСведений.КурсыВалют.ПолучитьПервые(10, "Период ВОЗР");
ПерваяЗапись = ПервыеЗаписи[0];
Для получения самой ранней записи по конкретной валюте добавьте отбор.
Чем регистр сведений отличается от регистра накопления?
Основные различия:
- 📊 Регистр сведений хранит "срезы" данных на определенные моменты времени
- 📈 Регистр накопления хранит приходы/расходы и может рассчитывать остатки
- ⚡ Регистры накопления оптимизированы для операций по учету (склад, денежные средства)
Пример: для учета цен товаров подходит регистр сведений, а для учета остатков на складе — регистр накопления.
Как сделать резервную копию только одного регистра сведений?
Платформа 1С не поддерживает выборочное резервное копирование отдельных регистров. Варианты решения:
- Создать обработку, которая экспортирует данные регистра в XML/JSON
- Использовать
Запрос.Выгрузить()для сохранения данных в файл - Сделать полную копию базы и затем очистить ненужные данные
Для регулярного бэкапа настройте регламентное задание по выгрузке критичных регистров.