Новый регистр сведений в конфигураторе 1С 8.3: от создания объекта до прав и записи данных

· 10 мин

Содержание

Чтобы добавить регистр сведений в 1С, откройте конфигуратор, выберите Конфигурация → Открыть конфигурацию, найдите в дереве ветку «Регистры сведений», щёлкните по ней правой кнопкой и выберите «Добавить». Дальше задаёте имя, измерения, ресурсы, периодичность и режим записи, даёте права в ролях и обновляете конфигурацию базы данных (F7).

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

Подготовка: где создавать новый регистр сведений

Сначала решите, куда вы добавляете объект. От этого зависит, переживёт ли доработка следующее обновление.

ВариантКогда подходитЧем рискуете
Своя (нетиповая) конфигурацияКонфигурация без поставщика, вы её владелецНичем, это обычная разработка
Типовая конфигурация со снятой поддержкойДоработок много, обновления ставит программистКаждое обновление идёт через сравнение и объединение
Расширение конфигурацииТиповая БП, ЗУП, УТ на поддержкеНужно следить за совместимостью с релизами

Для типовых решений лучший путь — расширение. В актуальных версиях платформы 8.3 расширение умеет добавлять собственные регистры сведений, и основная конфигурация при этом остаётся на полной поддержке. Открывается так: Конфигурация → Расширения конфигурации, затем добавляете расширение и работаете в его дереве так же, как в основном.

Если всё же правите основную конфигурацию поставщика, включите возможность изменения: Конфигурация → Поддержка → Настройка поддержки, кнопка «Включить возможность изменения».

Перед любыми изменениями структуры сделайте выгрузку информационной базы (Администрирование → Выгрузить информационную базу, файл .dt). Откат неудачного обновления структуры без копии — долгий и не всегда возможный.

Шаг 1. Создание регистра сведений в дереве конфигурации

  1. Откройте конфигурацию (Конфигурация → Открыть конфигурацию).
  2. Разверните ветку «Регистры сведений». Она лежит рядом с «Регистрами накопления» и «Регистрами бухгалтерии».
  3. Правой кнопкой по ветке → «Добавить». Откроется окно редактирования объекта с вкладками.
  4. На вкладке «Основные» заполните:
    • Имя — латиница или кириллица без пробелов, например ЦеныПоставщиков. Имя потом попадёт в код и запросы, менять его позже неудобно.
    • Синоним — то, что увидит пользователь: «Цены поставщиков».
    • Комментарий — зачем регистр и кто его заказал. Через год пригодится.
  5. Нажмите «Далее» или переходите по вкладкам вручную.

💡 Имя давайте во множественном числе и по смыслу хранимых данных, а не по документу, который их пишет. ЦеныПоставщиков проживёт дольше, чем ДанныеИзЗаказа.

На вкладке «Подсистемы» отметьте раздел, в котором регистр должен появиться у пользователя. Без этого объект есть в базе, но в командном интерфейсе его не найти.

Шаг 2. Измерения: из чего складывается ключ записи

Измерения — это ключ. Сочетание «период + все измерения» уникально: две записи с одинаковым набором платформа не допустит.

В примере с ценами создайте на вкладке «Данные» два измерения:

  • 📌 Поставщик — тип СправочникСсылка.Контрагенты;
  • 📌 Номенклатура — тип СправочникСсылка.Номенклатура.

Свойства измерения, которые стоит проверить сразу:

СвойствоЧто даётКогда включать
Основной отборОтбор по измерению в форме списка и наборе записейДля измерений, по которым ищут чаще всего
Запрет незаполненных значенийНе даст записать строку с пустым измерениемПочти всегда, если пустое значение бессмысленно
ВедущееЗаписи удаляются вместе с объектом-ссылкой, в форме объекта виден связанный регистрЕсли запись не имеет смысла без этого объекта
ИндексироватьОтдельный индекс по полюОбычно не нужно: измерения и так входят в основной индекс

Порядок измерений важен. Основной индекс строится по периоду и измерениям в том порядке, в каком они стоят в дереве. Первым ставьте то измерение, по которому чаще всего отбирают данные. Если запросы почти всегда идут «по поставщику», поставщик идёт первым.

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

Шаг 3. Ресурсы и реквизиты: какие данные хранит регистр

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

Для цен поставщиков:

  • 💰 Цена — Число, длина 15, точность 2;
  • 💱 Валюта — СправочникСсылка.Валюты.

Реквизиты — сопутствующая информация, которая не участвует в ключе и не является главным значением. Например, Комментарий (строка 150) или Ответственный (ссылка на пользователя).

Чем отличаются ресурс и реквизит на практике:

  • ресурсы попадают в виртуальные таблицы срезов как основные поля и логически являются «значением по ключу»;
  • реквизит хранит пояснение к записи; если по нему отбирают данные, включите у него «Индексировать».

💡 Ставьте точность числа с запасом. Цена с точностью 2 не сохранит 0,345 за штуку — округлится до 0,35. Для закупочных цен мелкой фасовки часто берут точность 4.

Шаг 4. Периодичность и режим записи регистра

Две настройки на вкладке «Основные» определяют, как регистр будет жить.

Периодичность

ЗначениеЧто хранитПример
НепериодическийТолько актуальное значение, без историиНастройки по организации
В пределах секундыИсторию с точностью до секундыЖурнал событий интеграции
В пределах дняОдно значение на день по ключуЦены, курсы
В пределах месяца / квартала / годаОдно значение на периодПлановые показатели, нормативы
В пределах регистратораПериод равен дате регистратораДанные, жёстко привязанные к документу

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

Платформа сама приводит период к началу интервала. Запишете цену в регистр «в пределах дня» с датой 14:30 — в базе окажется начало дня.

Режим записи

  • Независимый — записи создаёт пользователь в форме списка или код через менеджер записи. Подходит для справочной информации.
  • Подчинение регистратору — записи создают только документы при проведении, у каждой записи есть поле Регистратор. Пользователь руками строку не добавит.

Режим удобнее выбрать до наполнения регистра. Переключить его позже можно, но записи придётся перезаполнять.

Какой режим записи нужен вашему регистру?

Шаг 5. Как записывать данные: формы, код и движения документов

Форма для ручного ввода

На вкладке «Формы» нажмите «лупу» рядом с основной формой записи и формой списка. Конструктор предложит поля — оставьте нужные и сохраните. Без явных форм платформа строит автоматические, для простого регистра их хватает.

Запись кодом в независимый регистр

Одна запись — через менеджер записи:

МенеджерЗаписи = РегистрыСведений.ЦеныПоставщиков.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = НачалоДня(ТекущаяДатаСеанса());
МенеджерЗаписи.Поставщик = Поставщик;
МенеджерЗаписи.Номенклатура = Номенклатура;
МенеджерЗаписи.Цена = 150;
МенеджерЗаписи.Валюта = Валюта;
МенеджерЗаписи.Записать();

Метод Записать() по умолчанию замещает запись с тем же ключом. Если цена на этот день у поставщика уже была, она перезапишется.

Много записей — через набор записей с отбором:

Набор = РегистрыСведений.ЦеныПоставщиков.СоздатьНаборЗаписей();
Набор.Отбор.Период.Установить(НачалоДня(ТекущаяДатаСеанса()));
Набор.Отбор.Поставщик.Установить(Поставщик);

Для Каждого Строка Из ТаблицаЦен Цикл
	Запись = Набор.Добавить();
	Запись.Период = НачалоДня(ТекущаяДатаСеанса());
	Запись.Поставщик = Поставщик;
	Запись.Номенклатура = Строка.Номенклатура;
	Запись.Цена = Строка.Цена;
	Запись.Валюта = Строка.Валюта;
КонецЦикла;

Набор.Записать();

Набор с отбором при записи сначала удаляет всё, что попадает под отбор, и только потом пишет новые строки. Пустой набор с отбором по поставщику сотрёт все его цены на эту дату.

Движения документа в подчинённый регистр

  1. Откройте нужный документ, вкладка «Движения».
  2. Отметьте регистр ЦеныПоставщиков в списке регистров. Теперь документ — его регистратор.
  3. В модуле объекта документа заполните обработчик проведения:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)

	Движения.ЦеныПоставщиков.Записывать = Истина;

	Для Каждого Строка Из Товары Цикл
		Движение = Движения.ЦеныПоставщиков.Добавить();
		Движение.Период = Дата;
		Движение.Поставщик = Контрагент;
		Движение.Номенклатура = Строка.Номенклатура;
		Движение.Цена = Строка.Цена;
		Движение.Валюта = ВалютаДокумента;
	КонецЦикла;

КонецПроцедуры

Флаг Записывать = Истина говорит платформе записать набор движений после обработчика. При отмене проведения записи этого документа удаляются автоматически.

Конструктор движений (кнопка на вкладке «Движения» документа) сгенерирует похожий код сам — удобно для старта, но проверьте, какие поля он сопоставил.

Чтение: срез последних

Актуальные цены поставщика на дату получают запросом к виртуальной таблице:

ВЫБРАТЬ
	Цены.Номенклатура,
	Цены.Цена,
	Цены.Валюта
ИЗ
	РегистрСведений.ЦеныПоставщиков.СрезПоследних(&Дата, Поставщик = &Поставщик) КАК Цены

Условие отбора пишите в параметрах виртуальной таблицы, а не в ГДЕ. Так срез строится только по нужному поставщику, а не по всему регистру.

Шаг 6. Права доступа и роли для регистра сведений

Новый объект по умолчанию недоступен никому, кроме ролей с полными правами. Пользователь без прав получит ошибку «Недостаточно прав» при открытии раздела.

  1. В дереве конфигурации откройте ветку «Общие → Роли».
  2. Откройте роль, которой нужен доступ.
  3. Найдите в списке объектов ваш регистр.
  4. Отметьте права: «Чтение» и «Просмотр» — для тех, кто только смотрит; «Изменение» и «Редактирование» — для тех, кто вводит данные.

Разница между парами прав: «Чтение» и «Изменение» — доступ к данным вообще, в том числе из кода; «Просмотр» и «Редактирование» — интерактивный доступ через формы.

В типовых конфигурациях на БСП права раздаются через профили групп доступа. Удобнее создать свою роль (например, ЧтениеЦенПоставщиков), включить её в расширение и добавить в нужный профиль в режиме предприятия: Администрирование → Настройки пользователей и прав → Профили групп доступа.

💡 Для подчинённого регистра обычно хватает «Чтения» у тех, кто проводит документы. Запись при проведении идёт в контексте прав на документ, но если проведение падает с ошибкой прав, проверьте и «Изменение» на регистр.

Если записи нужно ограничить по организации или подразделению, используйте ограничение доступа на уровне записей (RLS) в той же роли — оно задаётся текстом условия на поле регистра.

Обновление базы и обслуживание регистра сведений

Применение изменений

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

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

Что ускоряет работу регистра

  • ⚡ Порядок измерений. Первое измерение — самое частое в отборах. Перестановка после наполнения — это перестройка таблицы.
  • ⚡ Отборы в параметрах виртуальных таблиц. СрезПоследних без условий на большом регистре — частая причина медленных форм.
  • ⚡ Без запросов в цикле. Сто обращений к срезу по одной номенклатуре медленнее одного запроса со списком через В (&Список).
  • ⚡ Итоги срезов. У периодического регистра есть свойства «Разрешить итоги срез последних» и «Разрешить итоги срез первых». Они ускоряют получение срезов на текущую дату за счёт отдельной таблицы, но замедляют запись. Включайте, если регистр читают часто, а пишут редко.
  • ⚡ Индексы на реквизитах — только для тех, по которым реально отбирают.

Плановое обслуживание

Регистр сведений не требует пересчёта итогов, как регистр накопления. Достаточно стандартного обслуживания базы: регулярная резервная копия и при подозрении на повреждение данных — Администрирование → Тестирование и исправление в конфигураторе.

Тестирование с исправлением запускают в монопольном режиме, все пользователи должны выйти. Сначала запускайте только проверку, без режима исправления, и смотрите отчёт.

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

Частые вопросы по регистрам сведений

Можно ли добавить регистр сведений без конфигуратора?
Нет. Регистр — объект метаданных, его создают в конфигураторе: в основной конфигурации или в расширении. В режиме предприятия меняются только данные.
Почему в регистре не сохраняется вторая запись с той же датой?
Период и измерения образуют уникальный ключ. Вторая запись с тем же ключом замещает первую или вызывает ошибку «Запись с такими ключевыми полями существует». Добавьте измерение или повысьте точность периодичности.
Чем регистр сведений отличается от регистра накопления?
Регистр сведений хранит значение по ключу на дату, ресурсы любого типа. Регистр накопления копит приход и расход числовых ресурсов и считает остатки и обороты.
Можно ли изменить периодичность у наполненного регистра?
Технически да, но при уменьшении точности записи с одним ключом внутри нового периода схлопнутся. Сначала выгрузите данные, затем меняйте и перезаполняйте.
Почему пользователь не видит новый регистр в меню?
Обычно регистр не включён ни в одну подсистему или у роли пользователя нет права «Просмотр». Проверьте вкладку «Подсистемы» объекта и права в роли.