Регистры 1С 8.3: какой вид выбрать и как задать его структуру
Содержание
Настройка реестра в 1С почти всегда означает настройку регистра в Конфигураторе: Конфигурация → Регистры сведений (или накопления, бухгалтерии) → Добавить, затем задать измерения, ресурсы, периодичность и режим записи. Реестра Windows платформа для учёта не использует, а слово «реестр» прижилось из-за созвучия с «регистром» и из бумажных «реестров документов».
Частая ошибка новичка — выбрать вид регистра по названию, а не по вопросу, на который он должен отвечать. «Сколько товара на складе» — это регистр накопления с видом «Остатки». «Какая цена действовала на дату» — периодический регистр сведений . Перепутаете — и через полгода придётся переделывать структуру на заполненной базе.
Что такое регистр в 1С и чем виды отличаются
Регистр — это таблица, в которой хранятся данные в разрезе нескольких параметров. Параметры называются измерениями, хранимые значения — ресурсами, дополнительные поля — реквизитами.
В платформе 8.3 четыре вида регистров:
| Вид | На какой вопрос отвечает | Кто пишет данные | Пример |
|---|---|---|---|
| Регистр сведений | Какое значение у параметра (на дату) | Пользователь, код или документ | Курсы валют, цены, ставки |
| Регистр накопления | Сколько пришло, ушло и осталось | Только документ-регистратор | Остатки товаров, взаиморасчёты |
| Регистр бухгалтерии | Какие проводки и сальдо по счетам | Только документ-регистратор | Хозрасчётный регистр |
| Регистр расчёта | Какие начисления за период | Только документ-регистратор | Начисления зарплаты |
Отдельно от регистров существуют печатные «реестры» — отчёты и списки документов. Их не настраивают в метаданных: это отчёт или динамический список с отбором.
Перед созданием регистра сформулируйте один вопрос, который бухгалтер или менеджер будет задавать к данным. Вопрос подсказывает вид регистра и состав измерений точнее любой схемы.
Как создать и настроить регистр сведений
Регистр сведений хранит справочную информацию, которая меняется во времени или зависит от нескольких параметров сразу. Цена номенклатуры по виду цен — классический пример.
Создание объекта
- Откройте базу в режиме
Конфигуратори откройте дерево конфигурации. - Найдите ветку
Регистры сведений, щёлкните правой кнопкой →Добавить. - На вкладке «Основные» задайте имя латиницей или кириллицей без пробелов, например
ЦеныНоменклатуры, и синоним. - Перейдите на вкладку «Данные» и добавьте измерения, ресурсы и реквизиты.
- Назначьте права в ролях и сохраните конфигурацию:
Конфигурация → Обновить конфигурацию базы данных(F7).
Периодичность
Свойство «Периодичность» определяет, хранит ли регистр историю значений.
- 📌 Непериодический — одна актуальная запись на набор измерений. Подходит для настроек и соответствий.
- 📅 В пределах секунды, дня, месяца, квартала, года — история значений на даты с выбранной точностью.
- 🧾 По позиции регистратора — период совпадает с моментом документа; доступен только при подчинении регистратору.
Для цен обычно хватает точности до дня. Секундная периодичность нужна, если в течение дня значение меняется несколько раз и это важно для учёта.
Режим записи
| Режим | Как попадают данные | Когда выбирать |
|---|---|---|
| Независимый | Вручную, через форму записи или код | Справочные данные: курсы, настройки, тарифы |
| Подчинение регистратору | Только движениями документа | Значение должно появляться и исчезать вместе с документом |
При подчинении регистратору записи удаляются при отмене проведения документа. В независимом режиме их нужно чистить самому.
Измерения, ресурсы и реквизиты
Для ЦеныНоменклатуры разумная структура такая:
- 🔑 измерения:
Номенклатура,ВидЦены; - 💰 ресурс:
Цена(число, 15 знаков, 2 после запятой); - 📝 реквизит:
ВалютаилиКомментарий.
У измерения есть полезные флаги: «Ведущее» (при удалении объекта-владельца удаляются и записи регистра), «Запрет незаполненных значений», «Основной отбор». Комбинация значений всех измерений и периода уникальна: две записи с одинаковым набором платформа не запишет.
Запись значения в независимый регистр кодом:
МенеджерЗаписи = РегистрыСведений.ЦеныНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = НачалоДня(ТекущаяДатаСеанса());
МенеджерЗаписи.Номенклатура = Номенклатура;
МенеджерЗаписи.ВидЦены = ВидЦены;
МенеджерЗаписи.Цена = 1250;
МенеджерЗаписи.Записать();
Получение действующей цены на дату — через виртуальную таблицу среза последних:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Цены.Номенклатура,
| Цены.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, ВидЦены = &ВидЦены) КАК Цены";
Запрос.УстановитьПараметр("Дата", ТекущаяДатаСеанса());
Запрос.УстановитьПараметр("ВидЦены", ВидЦены);
Результат = Запрос.Выполнить().Выгрузить();
Условие отбора пишите в параметрах виртуальной таблицы, а не в секции ГДЕ. Так платформа отбирает записи до расчёта среза, и запрос работает быстрее.
Регистры накопления и бухгалтерии: настройка движений
Регистр накопления
Регистр накопления копит числовые показатели и всегда подчинён регистратору. Вручную записи в него не вносят — только документы.
Главное свойство — «Вид регистра»:
- 📦 Остатки — хранит приход и расход, умеет считать остатки на любую дату. Пример: товары на складах.
- 📈 Обороты — хранит только суммы за период, без остатков. Пример: продажи по менеджерам.
Ресурсы регистра накопления бывают только числовыми. Строку или ссылку туда не поставить — для них есть измерения и реквизиты.
Порядок настройки:
- Создайте регистр:
Регистры накопления→Добавить, выберите вид. - На вкладке «Данные» добавьте измерения (
Номенклатура,Склад) и ресурсы (Количество,Сумма). - Откройте документ, который будет делать движения, вкладку «Движения». Отметьте регистр в списке.
- Нажмите «Конструктор движений» и сопоставьте поля табличной части с измерениями и ресурсами.
- Проверьте сгенерированный код в модуле объекта и обновите конфигурацию БД.
Конструктор создаёт обработчик проведения примерно такого вида:
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого ТекСтрока Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрока.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрока.Количество;
Движение.Сумма = ТекСтрока.Сумма;
КонецЦикла;
КонецПроцедуры
Регистр остатков сам не запрещает уход в минус. Контроль отрицательных остатков пишется в коде проведения: запрос к таблице остатков после записи движений и Отказ = Истина при нехватке.
Регистр бухгалтерии
Регистр бухгалтерии работает в паре с планом счетов. Без плана счетов его не создать: свойство «План счетов » обязательно.
Что настраивают:
- 📊 План счетов — сначала создают его, задают счета и виды субконто (через план видов характеристик). Максимальное количество субконто — свойство плана счетов.
- 🔁 Корреспонденция — флажок в регистре. С ним каждая запись хранит пару «Дт — Кт», без него — отдельные записи по дебету и кредиту.
- ⚖️ Балансовый — свойство измерений и ресурсов. Балансовые ресурсы сходятся по дебету и кредиту, небалансовые (например, количество) — нет.
Движения в регистр бухгалтерии — это проводки. Их тоже формирует документ через вкладку «Движения».
Регистр расчёта настраивается похоже, но требует плана видов расчёта и нужен в зарплатных решениях. В обычных учётных доработках его создают редко.
Таблица значений вместо регистра: когда это оправдано
Таблица значений — объект в памяти. Она живёт, пока выполняется код, и не сохраняется в базе. Поэтому она не замена регистру, а инструмент для промежуточных расчётов.
| Задача | Регистр | Таблица значений |
|---|---|---|
| Хранить данные между сеансами | ✅ | ❌ |
| Получать остатки и срезы на дату | ✅ | ❌ |
| Собрать данные для расчёта или печати | Избыточно | ✅ |
| Сгруппировать и свернуть строки перед записью | — | ✅ |
| Передать набор строк в запрос | — | ✅ через параметр |
Типичный приём — собрать строки, свернуть и передать в запрос как временную таблицу:
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
ТЗ.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число"));
// ... заполнение строк ...
ТЗ.Свернуть("Номенклатура", "Количество");
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст =
"ВЫБРАТЬ
| Т.Номенклатура,
| Т.Количество
|ПОМЕСТИТЬ ВТ_Товары
|ИЗ
| &ТЗ КАК Т";
Запрос.УстановитьПараметр("ТЗ", ТЗ);
Запрос.Выполнить();
Колонкам таблицы значений, которая уходит в запрос, обязательно задавайте типы через ОписаниеТипов. Без типов запрос выдаст ошибку.
Если данные должны храниться, но к ним не нужны срезы и остатки, рассмотрите табличную часть документа или справочника. Хранить таблицу значений в реквизите через ХранилищеЗначения можно, но отбирать по таким данным запросом нельзя.
Индексы, итоги и производительность регистров
Структура регистра закладывается один раз, а ошибки в ней дают тормоза на годы. Несколько правил практика.
Порядок и состав измерений
- 🎯 Ставьте первыми измерения, по которым чаще всего отбирают данные. Порядок измерений влияет на порядок полей в индексе таблицы.
- ✂️ Не добавляйте измерение «на всякий случай». Каждое лишнее измерение увеличивает число записей итогов.
- 🧩 Избегайте составного типа в измерениях без необходимости: такие поля хранятся несколькими колонками и хуже работают в отборах.
- 📏 Строковые измерения задавайте фиксированной длины. Строки неограниченной длины нельзя индексировать и сравнивать в условиях запроса.
Индексирование реквизитов
У реквизитов регистра есть свойство «Индексировать»: «Не индексировать», «Индексировать», «Индексировать с доп. упорядочиванием». Включайте индекс, только если по реквизиту реально отбирают данные. Каждый индекс замедляет запись.
Итоги
Регистры накопления с видом «Остатки» и регистры бухгалтерии хранят итоги — заранее рассчитанные остатки по периодам. Благодаря им остаток на дату считается быстро, без перебора всех движений.
Где управлять итогами:
- в пользовательском режиме:
Все функции → Стандартные → Управление итогами— установка периода рассчитанных итогов, пересчёт, включение и выключение; - в Конфигураторе:
Администрирование → Тестирование и исправление→ флажок «Пересчёт итогов».
Для регистров с частой параллельной записью в свойствах есть «Разрешить разделение итогов». Оно снижает блокировки, когда несколько пользователей одновременно проводят документы по одним и тем же измерениям.
Для оборотных регистров накопления доступны агрегаты — заранее сгруппированные обороты по выбранным измерениям и периодам. Они ускоряют отчёты по большим объёмам, но требуют обслуживания.
Пересчёт итогов и тестирование базы нагружают сервер и ставят блокировки, а для тестирования и исправления нужен монопольный режим. Перед запуском сделайте резервную копию и предупредите пользователей: их сеансы нужно будет завершить. Делайте это вне рабочего времени.
Изменение регистров в типовой конфигурации
В типовой конфигурации на поддержке структуру регистров лучше не трогать напрямую. Изменение объекта поставщика усложняет каждое следующее обновление.
Варианты:
- 🧩 Расширение конфигурации — в актуальных версиях платформы в расширении можно создать собственный регистр и делать в него движения из подписок или переопределённых обработчиков. Типовые объекты при этом не меняются.
- 🛠 Включение возможности изменения — правка объекта поставщика. Применяйте, если без изменения типового регистра задачу не решить, и фиксируйте каждое изменение.
После любого изменения структуры платформа выполняет реструктуризацию таблиц при обновлении конфигурации базы данных. На регистре с миллионами записей это может занять заметное время — планируйте окно обслуживания.
Меняете периодичность или состав измерений у заполненного регистра — сначала проверьте на копии базы. Платформа перестроит таблицу, но смысл старых записей может не совпасть с новой структурой.
Частые ошибки при настройке регистров
Движения.ИмяРегистра.Записывать = Истина. Проверьте оба места.Ещё две ошибки проектирования, которые проявляются не сразу:
- ❌ Регистр сведений вместо накопления. Остатки, записанные в регистр сведений «итоговой цифрой», невозможно восстановить на прошлую дату и проверить по документам.
- ❌ Независимый режим там, где нужен регистратор. При отмене проведения документа данные остаются в регистре и искажают учёт.
Частые вопросы
Хранит ли 1С настройки в реестре Windows?
ibases.v8i в профиле пользователя (%APPDATA%\1C\1CEStart).Как посмотреть содержимое регистра без отчёта?
Сервис → Параметры и включите флажок отображения команды «Все функции». Затем откройте Все функции → Регистры накопления (или сведений) и нужный регистр — откроется список записей.