Новый регистр сведений в конфигураторе 1С 8.3: от создания объекта до прав и записи данных
Содержание
Чтобы добавить регистр сведений
в 1С, откройте конфигуратор, выберите Конфигурация → Открыть конфигурацию, найдите в дереве ветку «Регистры сведений», щёлкните по ней правой кнопкой и выберите «Добавить». Дальше задаёте имя, измерения, ресурсы, периодичность и режим записи, даёте права в ролях и обновляете конфигурацию базы данных (F7).
Типичная ситуация: бухгалтер просит хранить договорные цены поставщиков с историей изменений, а в типовой конфигурации подходящего места нет. Справочник не подходит — он не помнит, какая цена была в марте. Под такие задачи и создают регистр сведений: таблицу, где запись однозначно определяется периодом и набором измерений.
Подготовка: где создавать новый регистр сведений
Сначала решите, куда вы добавляете объект. От этого зависит, переживёт ли доработка следующее обновление.
| Вариант | Когда подходит | Чем рискуете |
|---|---|---|
| Своя (нетиповая) конфигурация | Конфигурация без поставщика, вы её владелец | Ничем, это обычная разработка |
| Типовая конфигурация со снятой поддержкой | Доработок много, обновления ставит программист | Каждое обновление идёт через сравнение и объединение |
| Расширение конфигурации | Типовая БП, ЗУП, УТ на поддержке | Нужно следить за совместимостью с релизами |
Для типовых решений лучший путь — расширение. В актуальных версиях платформы 8.3 расширение умеет добавлять собственные регистры сведений, и основная конфигурация при этом остаётся на полной поддержке. Открывается так: Конфигурация → Расширения конфигурации, затем добавляете расширение и работаете в его дереве так же, как в основном.
Если всё же правите основную конфигурацию поставщика, включите возможность изменения: Конфигурация → Поддержка → Настройка поддержки, кнопка «Включить возможность изменения».
Перед любыми изменениями структуры сделайте выгрузку информационной базы (Администрирование → Выгрузить информационную базу, файл .dt). Откат неудачного обновления структуры без копии — долгий и не всегда возможный.
Шаг 1. Создание регистра сведений в дереве конфигурации
- Откройте конфигурацию (
Конфигурация → Открыть конфигурацию). - Разверните ветку «Регистры сведений». Она лежит рядом с «Регистрами накопления» и «Регистрами бухгалтерии».
- Правой кнопкой по ветке → «Добавить». Откроется окно редактирования объекта с вкладками.
- На вкладке «Основные» заполните:
- Имя — латиница или кириллица без пробелов, например
ЦеныПоставщиков. Имя потом попадёт в код и запросы, менять его позже неудобно. - Синоним — то, что увидит пользователь: «Цены поставщиков».
- Комментарий — зачем регистр и кто его заказал. Через год пригодится.
- Имя — латиница или кириллица без пробелов, например
- Нажмите «Далее» или переходите по вкладкам вручную.
💡 Имя давайте во множественном числе и по смыслу хранимых данных, а не по документу, который их пишет. ЦеныПоставщиков проживёт дольше, чем ДанныеИзЗаказа.
На вкладке «Подсистемы» отметьте раздел, в котором регистр должен появиться у пользователя. Без этого объект есть в базе, но в командном интерфейсе его не найти.
Шаг 2. Измерения: из чего складывается ключ записи
Измерения — это ключ. Сочетание «период + все измерения» уникально: две записи с одинаковым набором платформа не допустит.
В примере с ценами создайте на вкладке «Данные» два измерения:
- 📌
Поставщик— типСправочникСсылка.Контрагенты; - 📌
Номенклатура— типСправочникСсылка.Номенклатура.
Свойства измерения, которые стоит проверить сразу:
| Свойство | Что даёт | Когда включать |
|---|---|---|
| Основной отбор | Отбор по измерению в форме списка и наборе записей | Для измерений, по которым ищут чаще всего |
| Запрет незаполненных значений | Не даст записать строку с пустым измерением | Почти всегда, если пустое значение бессмысленно |
| Ведущее | Записи удаляются вместе с объектом-ссылкой, в форме объекта виден связанный регистр | Если запись не имеет смысла без этого объекта |
| Индексировать | Отдельный индекс по полю | Обычно не нужно: измерения и так входят в основной индекс |
Порядок измерений важен. Основной индекс строится по периоду и измерениям в том порядке, в каком они стоят в дереве. Первым ставьте то измерение, по которому чаще всего отбирают данные. Если запросы почти всегда идут «по поставщику», поставщик идёт первым.
Добавить измерение в регистр, где уже есть записи, можно. Но у старых строк новое измерение окажется пустым, и при включённом запрете незаполненных значений их не удастся перезаписать без заполнения. Продумывайте ключ до первой записи.
Шаг 3. Ресурсы и реквизиты: какие данные хранит регистр
Ресурсы — это значения, ради которых регистр создавали. В отличие от регистра накопления, у регистра сведений ресурс не обязан быть числом. Это может быть строка, дата, булево, ссылка.
Для цен поставщиков:
- 💰
Цена—Число, длина 15, точность 2; - 💱
Валюта—СправочникСсылка.Валюты.
Реквизиты — сопутствующая информация, которая не участвует в ключе и не является главным значением. Например, Комментарий (строка 150) или Ответственный (ссылка на пользователя).
Чем отличаются ресурс и реквизит на практике:
- ресурсы попадают в виртуальные таблицы срезов как основные поля и логически являются «значением по ключу»;
- реквизит хранит пояснение к записи; если по нему отбирают данные, включите у него «Индексировать».
💡 Ставьте точность числа с запасом. Цена с точностью 2 не сохранит 0,345 за штуку — округлится до 0,35. Для закупочных цен мелкой фасовки часто берут точность 4.
Шаг 4. Периодичность и режим записи регистра
Две настройки на вкладке «Основные» определяют, как регистр будет жить.
Периодичность
| Значение | Что хранит | Пример |
|---|---|---|
| Непериодический | Только актуальное значение, без истории | Настройки по организации |
| В пределах секунды | Историю с точностью до секунды | Журнал событий интеграции |
| В пределах дня | Одно значение на день по ключу | Цены, курсы |
| В пределах месяца / квартала / года | Одно значение на период | Плановые показатели, нормативы |
| В пределах регистратора | Период равен дате регистратора | Данные, жёстко привязанные к документу |
У периодического регистра появляются виртуальные таблицы СрезПоследних и СрезПервых — они отдают значение на нужную дату. Ради этого регистр сведений обычно и делают периодическим.
Платформа сама приводит период к началу интервала. Запишете цену в регистр «в пределах дня» с датой 14:30 — в базе окажется начало дня.
Режим записи
- Независимый — записи создаёт пользователь в форме списка или код через менеджер записи. Подходит для справочной информации.
- Подчинение регистратору — записи создают только документы при проведении, у каждой записи есть поле
Регистратор. Пользователь руками строку не добавит.
Режим удобнее выбрать до наполнения регистра. Переключить его позже можно, но записи придётся перезаполнять.
Шаг 5. Как записывать данные: формы, код и движения документов
Форма для ручного ввода
На вкладке «Формы» нажмите «лупу» рядом с основной формой записи и формой списка. Конструктор предложит поля — оставьте нужные и сохраните. Без явных форм платформа строит автоматические, для простого регистра их хватает.
Запись кодом в независимый регистр
Одна запись — через менеджер записи:
МенеджерЗаписи = РегистрыСведений.ЦеныПоставщиков.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = НачалоДня(ТекущаяДатаСеанса());
МенеджерЗаписи.Поставщик = Поставщик;
МенеджерЗаписи.Номенклатура = Номенклатура;
МенеджерЗаписи.Цена = 150;
МенеджерЗаписи.Валюта = Валюта;
МенеджерЗаписи.Записать();
Метод Записать() по умолчанию замещает запись с тем же ключом. Если цена на этот день у поставщика уже была, она перезапишется.
Много записей — через набор записей с отбором:
Набор = РегистрыСведений.ЦеныПоставщиков.СоздатьНаборЗаписей();
Набор.Отбор.Период.Установить(НачалоДня(ТекущаяДатаСеанса()));
Набор.Отбор.Поставщик.Установить(Поставщик);
Для Каждого Строка Из ТаблицаЦен Цикл
Запись = Набор.Добавить();
Запись.Период = НачалоДня(ТекущаяДатаСеанса());
Запись.Поставщик = Поставщик;
Запись.Номенклатура = Строка.Номенклатура;
Запись.Цена = Строка.Цена;
Запись.Валюта = Строка.Валюта;
КонецЦикла;
Набор.Записать();
Набор с отбором при записи сначала удаляет всё, что попадает под отбор, и только потом пишет новые строки. Пустой набор с отбором по поставщику сотрёт все его цены на эту дату.
Движения документа в подчинённый регистр
- Откройте нужный документ, вкладка «Движения».
- Отметьте регистр
ЦеныПоставщиковв списке регистров. Теперь документ — его регистратор. - В модуле объекта документа заполните обработчик проведения:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ЦеныПоставщиков.Записывать = Истина;
Для Каждого Строка Из Товары Цикл
Движение = Движения.ЦеныПоставщиков.Добавить();
Движение.Период = Дата;
Движение.Поставщик = Контрагент;
Движение.Номенклатура = Строка.Номенклатура;
Движение.Цена = Строка.Цена;
Движение.Валюта = ВалютаДокумента;
КонецЦикла;
КонецПроцедуры
Флаг Записывать = Истина говорит платформе записать набор движений после обработчика. При отмене проведения записи этого документа удаляются автоматически.
Конструктор движений (кнопка на вкладке «Движения» документа) сгенерирует похожий код сам — удобно для старта, но проверьте, какие поля он сопоставил.
Чтение: срез последних
Актуальные цены поставщика на дату получают запросом к виртуальной таблице:
ВЫБРАТЬ
Цены.Номенклатура,
Цены.Цена,
Цены.Валюта
ИЗ
РегистрСведений.ЦеныПоставщиков.СрезПоследних(&Дата, Поставщик = &Поставщик) КАК Цены
Условие отбора пишите в параметрах виртуальной таблицы, а не в ГДЕ. Так срез строится только по нужному поставщику, а не по всему регистру.
Шаг 6. Права доступа и роли для регистра сведений
Новый объект по умолчанию недоступен никому, кроме ролей с полными правами. Пользователь без прав получит ошибку «Недостаточно прав» при открытии раздела.
- В дереве конфигурации откройте ветку «Общие → Роли».
- Откройте роль, которой нужен доступ.
- Найдите в списке объектов ваш регистр.
- Отметьте права: «Чтение» и «Просмотр» — для тех, кто только смотрит; «Изменение» и «Редактирование» — для тех, кто вводит данные.
Разница между парами прав: «Чтение» и «Изменение» — доступ к данным вообще, в том числе из кода; «Просмотр» и «Редактирование» — интерактивный доступ через формы.
В типовых конфигурациях на БСП права раздаются через профили групп доступа. Удобнее создать свою роль (например, ЧтениеЦенПоставщиков), включить её в расширение и добавить в нужный профиль в режиме предприятия: Администрирование → Настройки пользователей и прав → Профили групп доступа.
💡 Для подчинённого регистра обычно хватает «Чтения» у тех, кто проводит документы. Запись при проведении идёт в контексте прав на документ, но если проведение падает с ошибкой прав, проверьте и «Изменение» на регистр.
Если записи нужно ограничить по организации или подразделению, используйте ограничение доступа на уровне записей (RLS) в той же роли — оно задаётся текстом условия на поле регистра.
Обновление базы и обслуживание регистра сведений
Применение изменений
После настройки нажмите F7 или Конфигурация → Обновить конфигурацию базы данных. Платформа покажет список изменений структуры — проверьте, что там только ваш новый регистр, и подтвердите.
Изменение структуры требует, чтобы с базой никто не работал. Если в базе есть пользователи, обновление может не пройти — планируйте его на время без активных сеансов и предупредите людей заранее, их сеансы придётся завершить.
Что ускоряет работу регистра
- ⚡ Порядок измерений. Первое измерение — самое частое в отборах. Перестановка после наполнения — это перестройка таблицы.
- ⚡ Отборы в параметрах виртуальных таблиц.
СрезПоследнихбез условий на большом регистре — частая причина медленных форм. - ⚡ Без запросов в цикле. Сто обращений к срезу по одной номенклатуре медленнее одного запроса со списком через
В (&Список). - ⚡ Итоги срезов. У периодического регистра есть свойства «Разрешить итоги срез последних» и «Разрешить итоги срез первых». Они ускоряют получение срезов на текущую дату за счёт отдельной таблицы, но замедляют запись. Включайте, если регистр читают часто, а пишут редко.
- ⚡ Индексы на реквизитах — только для тех, по которым реально отбирают.
Плановое обслуживание
Регистр сведений не требует пересчёта итогов, как регистр накопления. Достаточно стандартного обслуживания базы: регулярная резервная копия и при подозрении на повреждение данных — Администрирование → Тестирование и исправление в конфигураторе.
Тестирование с исправлением запускают в монопольном режиме, все пользователи должны выйти. Сначала запускайте только проверку, без режима исправления, и смотрите отчёт.
Старую историю, которая больше не нужна (например, логи интеграции за прошлые годы), удаляйте набором записей с отбором по периоду — регламентным заданием в ночное время.