Проектирование структуры регистра сведений (РС) — это одна из базовых, но в то же время ответственных задач при разработке в системе 1С:Предприятие 8. Ошибки на этом этапе могут привести к невозможности хранения нужных данных, дублированию записей или крайне низкой производительности отчетов. Разберем подробно, чем руководствоваться при определении состава измерений, ресурсов и реквизитов.
Прежде чем приступать к созданию объекта в конфигураторе, проанализируем природу данных. В 1С регистры сведений относятся к необъектным сущностям. В отличие от справочников или документов, запись регистра не имеет уникальной ссылки (UUID), по которой к ней можно обратиться. Уникальность записи определяется ключом записи.
Рассмотрим, как распределяются роли полей:
СрезПоследних() и СрезПервых().Рассмотрим ситуацию: нам необходимо хранить комментарии пользователей, привязанные к пунктам и этапам бизнес-процесса. Процесс может иметь несколько итераций (этапов), а по каждому пункту может быть оставлено несколько комментариев. Выясним, как спроектировать такой регистр.
Проанализируем требования к полям:
Выберем те поля, которые определяют уникальность записи. Если мы сделаем измерениями только БизнесПроцесс и Этап, то система позволит сохранить только один комментарий на весь этап. Но нам нужно хранить разные комментарии по разным пунктам и авторам.
Рекомендуемая структура измерений:
Ведущее. Это гарантирует, что при удалении объекта бизнес-процесса все записи в регистре по нему очистятся автоматически.Теперь определим, что является результатом записи, а что — справочной информацией.
Ресурсы:
Реквизиты:
Проанализируем влияние типов данных на производительность. Использование Строки неограниченной длины в измерениях недопустимо — это приведет к невозможности индексации и критическому замедлению системы. Такие строки всегда должны быть либо ресурсами, либо реквизитами.
Для работы с регистрами во встроенном языке мы используем менеджер регистра. Рассмотрим пример записи данных в созданную нами структуру:
МенеджерЗаписи = РегистрыСведений.КомментарииБизнесПроцессов.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДата();
МенеджерЗаписи.БизнесПроцесс = ВыбранныйБП;
МенеджерЗаписи.Этап = НомерИтерации;
МенеджерЗаписи.Пункт = ТекущийПункт;
МенеджерЗаписи.НомерСтроки = НоваяСтрока; // Обеспечиваем уникальность
МенеджерЗаписи.Комментарий = "Текст отзыва пользователя";
МенеджерЗаписи.Проверено = Ложь;
МенеджерЗаписи.Автор = ПараметрыСеанса.ТекущийПользователь;
МенеджерЗаписи.Записать(Истина); // Истина — для замещения существующей записи с таким ключом
Если бизнес-требование звучит как «нам нужна история изменений», регистр обязательно должен быть периодическим. В этом случае платформа автоматически добавит поле Период в ключ уникальности. Это позволяет хранить разные состояния одних и тех же измерений в разные моменты времени.
Выясним разницу в использовании периодичности:
Посмотрим, как это влияет на выбор структуры. Если регистр периодический («В пределах секунды»), то поле Период само по себе обеспечивает уникальность в рамках времени. Но если в одну секунду может произойти несколько событий (например, массовая загрузка комментариев роботом), одного Периода будет недостаточно, и нам снова потребуется дополнительное измерение для обеспечения уникальности ключа.
При проектировании любого регистра сведений мы рекомендуем придерживаться следующего алгоритма:
Правильно спроектированная структура — это залог того, что ваши отчеты будут работать быстро, а данные в базе останутся целостными даже после удаления связанных объектов.