Работа с реестрами (или регистрами) является фундаментом построения любой сложной учетной системы на платформе 1С:Предприятие. Именно эти объекты отвечают за хранение исторических данных, срезов состояний и агрегацию информации в реальном времени. Если вы задаетесь вопросом, как сделать реестр в 1С, важно понимать, что речь идет о создании объектов метаданных, которые программист конфигурирует, а не о простых справочниках.
Процесс создания требует четкого понимания бизнес-логики: что именно мы хотим хранить, как часто эти данные будут меняться и каким образом их планируется выбирать в отчетах. Неправильная архитектура регистра может привести к критическому замедлению работы базы данных при росте объема информации.
В этом руководстве мы разберем пошаговый алгоритм создания регистров, их настройку и особенности использования в коде. Вы узнаете, чем отличаются регистры сведений от регистров накопления и как правильно организовать структуру хранения данных для максимальной производительности системы.
Выбор типа регистра для решения задачи
Первым шагом перед началом разработки является определение типа объекта. В 1С существует несколько видов регистров, и каждый из них решает специфические задачи. Ошибка на этом этапе может потребовать полной переделки архитектуры в будущем. Основной выбор стоит между Регистром сведений и Регистром накопления.
Регистры сведений предназначены для хранения информации, зависящей от времени, но не предназначенной для сложного математического анализа оборотов. Они идеально подходят для хранения курсов валют, цен номенклатуры на определенную дату или статусов заказов. Такие объекты хранят данные в виде срезов: «на момент времени» или «последний».
В отличие от них, регистры накопления созданы для учета количественных и денежных сумм. Они позволяют автоматически рассчитывать остатки и обороты за любой произвольный период. Если ваша задача — складской учет, взаиморасчеты с контрагентами или учет денежных средств, без этого типа объектов не обойтись.
⚠️ Внимание: Попытка хранить большие объемы детальных исторических данных в регистре сведений вместо регистра накопления приведет к экспоненциальному росту времени выполнения запросов при попытке посчитать остатки за период.
Создание и базовая настройка объекта
Процесс создания начинается в конфигураторе. В дереве метаданных необходимо найти ветку «Регистры сведений» или «Регистры накопления», нажать правую кнопку мыши и выбрать «Добавить». Сразу после создания объекту следует присвоить осмысленное имя, например, ЦеныНоменклатуры или ОборотыТоваров.
В свойствах нового объекта ключевым параметром является «Периодичность». Для регистров сведений она может быть установлена в значение «В пределах дня», «В пределах месяца» или «Независимая». Выбор зависит от того, как часто могут меняться данные. Если цена товара может измениться несколько раз за день, выбирайте минимальную периодичность.
Для регистров накопления важным параметром является «Вид регистра». Он может быть «Остатки» или «Обороты». Режим «Остатки» оптимизирован для получения сальдо на дату, тогда как «Обороты» лучше справляется с анализом движений за период, но требует больше ресурсов для расчета текущих остатков.
Используйте префиксы в именах регистров, соответствующие подсистеме, к которой они относятся. Это упростит навигацию в большом проекте, где могут быть сотни объектов метаданных.
Структура регистра: Измерения, Ресурсы и Реквизиты
Сердцем любого регистра является его структура. Она состоит из трех основных элементов: измерений, ресурсов и реквизитов. Понимание разницы между ними критически важно для корректной работы системы. Измерения определяют уникальность записи.
Комбинация всех измерений вместе с периодом (для регистров сведений) должна быть уникальной. Например, для регистра цен измерениями будут «Номенклатура» и «ТипЦены». Нельзя сохранить две разные цены для одного товара и одного типа цены в один и тот же момент времени. Добавление лишних измерений «на всякий случай» — грубая ошибка.
Ресурсы — это числовые поля, которые подлежат агрегации (суммированию). В регистре накопления это количество и сумма. В регистре сведений ресурсы могут использоваться для хранения числовых характеристик, которые не суммируются, но важны для отбора. Реквизиты хранят дополнительную текстовую или ссылочную информацию, не участвующую в уникальности записи.
| Элемент структуры | Назначение | Пример использования | Уникальность |
|---|---|---|---|
| Измерение | Группировка и уникальность | Склад, Номенклатура | Да, в комплексе |
| Ресурс | Числовые данные для итогов | Количество, Сумма | Нет, суммируется |
| Реквизит | Дополнительная информация | Комментарий, Ответственный | Нет |
| Период | Временная привязка | Дата документа | Часть ключа |
При проектировании структуры всегда задавайте себе вопрос: «Буду ли я делать отбор или группировку по этому полю в отчетах?». Если да, то это поле должно быть измерением. Если поле нужно только для отображения в печатной форме, лучше сделать его реквизитом, чтобы не раздувать ключевую часть таблицы.
Технические ограничения на количество измерений
Хотя платформа 1С не имеет жесткого ограничения на количество измерений, рекомендуется не превышать 5-7 измерений. Большое количество измерений усложняет написание запросов и может негативно сказаться на производительности индексов базы данных.
Регистрация движений и проведение документов
Сам по себе регистр — это лишь хранилище. Данные в него попадают через движения, которые формируются документами. Чтобы сделать реестр рабочим, необходимо написать код в модуле документа. Обычно это делается в процедуре ОбработкаПроведения.
Для работы с данными используется специальный объект — НаборЗаписей. Он загружает существующие движения документа или создает новые.
Движения = Документы.РеализацияТоваровУслуг.СоздатьНаборДвижений();
Движения.Записать();
Внутри набора записей вы создаете новую строку, заполняете измерения и ресурсы, а затем добавляете её в коллекцию. Тип движения (Приход или Расход) задается свойством Запись.ВидДвижения. Для регистров сведений вид движения не используется, там запись просто перезаписывает предыдущее состояние по ключу.
☑️ Проверка перед записью движений
⚠️ Внимание: Никогда не модифицируйте движения чужих документов напрямую из кода текущего документа. Это нарушает принцип неизменности истории и может привести к рассинхронизации данных при перепроведении документов в хронологическом порядке.
Получение данных: Срезы и Виртуальные таблицы
Главная мощь регистров 1С раскрывается при выборке данных через язык запросов. Платформа предоставляет механизм виртуальных таблиц, который избавляет разработчика от написания сложных алгоритмов выборки актуальных данных. Вы обращаетесь к специальным таблицам, а система сама оптимизирует запрос.
Для регистров сведений наиболее часто используются срезы. СрезПервых позволяет получить первые записи за период, а СрезПоследних — самые свежие данные на момент времени. Это критически важно для получения актуальных цен или курсов валют на дату документа.
Для регистров накопления доступны таблицы Остатки и Обороты. Таблица остатков мгновенно возвращает сальдо на дату, используя предварительно рассчитанные итоговые таблицы. Использование виртуальных таблиц гарантирует, что ваш запрос будет выполнен максимально быстро, независимо от объема накопленных данных за годы работы.
ВЫБРАТЬ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ) КАК ЦеныНоменклатурыСрезПоследних
Использование виртуальных таблиц (Срезы, Остатки, Обороты) является обязательным стандартом разработки в 1С. Прямой запрос к основной таблице регистра без веской причины считается ошибкой архитектуры.
Оптимизация и обслуживание регистров
По мере роста базы данных регистры могут занимать гигабайты места. Для поддержания высокой скорости работы необходимо регулярно проводить профилактические мероприятия. Одним из таких инструментов является удаление помеченных объектов и проведение перепроведения документов.
Также стоит обращать внимание на настройки итогов. Для больших регистров накопления рекомендуется включать ведение итогов. Это позволяет системе хранить предварительно рассчитанные суммы, что ускоряет получение остатков в тысячи раз. Однако включение итогов немного замедляет проведение документов.
Важно следить за тем, чтобы в регистрах не накапливались «висячие» движения от удаленных документов. Регулярный запуск обработки «Коррекция итогов» помогает выявить и исправить ситуации, когда расчетные суммы расходятся с фактическими движениями из-за сбоев в работе системы.
⚠️ Внимание: Интерфейс и точные названия пунктов меню для администрирования итогов могут отличаться в зависимости от версии платформы 1С (8.2, 8.3) и режима работы (толстый/тонкий клиент). Всегда сверяйтесь с документацией к вашей конкретной конфигурации перед выполнением операций обслуживания.
Часто задаваемые вопросы (FAQ)
В чем главная ошибка при создании измерений?
Самая частая ошибка — добавление в измерения полей, которые не используются для группировки или отбора в отчетах. Например, добавление поля «Комментарий» в измерения. Это делает ключ записи уникальным для каждого комментария, что предотвращает агрегацию данных и раздувает таблицу.
Можно ли изменить структуру регистра после начала работы базы?
Технически можно добавить реквизиты, но изменение состава измерений или типов данных существующих полей требует конвертации базы данных и может привести к потере части исторических данных. Такие изменения нужно планировать на этапе проектирования.
Как выбрать между регистром сведений и справочником?
Если данные зависят от времени (меняются цены, курсы, статусы) и нужно хранить историю изменений — используйте регистр сведений. Если данные статичны и характеризуют сам объект (название товара, его артикул) — используйте справочник.
Почему запрос к регистру работает медленно?
Чаще всего причина в отсутствии индексов по полям, используемым в отборе, или в обращении к основной таблице вместо виртуальной. Также проверьте, не слишком ли много измерений в регистре и используется ли полнотекстовый поиск там, где он не нужен.