Если вы только начинаете работать с платформой 1С:Предприятие или пытаетесь разобраться в её внутренней кухне, то термин «регистры» наверняка вызывал у вас вопросы. Это один из ключевых объектов конфигурации, без которого невозможно представить учет данных, аналитику или формирование отчетов. Но что такое регистры на самом деле? Почему их так много видов, и какой из них выбрать для конкретной задачи?

В этой статье мы разберём регистры 1С от А до Я: от базовых принципов работы до практических примеров применения. Вы узнаете, чем регистр накопления отличается от регистра сведений, как правильно их настраивать, и какие ошибки чаще всего допускают новички. А если вы разработчик — найдёте здесь советы по оптимизации работы с регистрами и примеры кода на встроенном языке .

Неважно, занимаетесь ли вы бухгалтерией, торговлей или пишете собственные конфигурации, понимание регистров поможет вам эффективнее работать с данными и избегать типичных проблем. Давайте начнём с главного: что же такое регистр в и зачем он нужен?

Что такое регистр в 1С и зачем он нужен

В 1С:Предприятие регистр — это специальный объект конфигурации, предназначенный для хранения и обработки данных. Если проводить аналогию с базой данных, то регистр можно сравнить с таблицей, но с расширенными возможностями. Главное отличие от обычных таблиц в том, что регистры оптимизированы для работы с движениями документов и поддерживают различные механизмы агрегации данных.

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

По сути, регистры решают три ключевые проблемы:

  • 📊 Агрегация данных — автоматически рассчитывают итоги (суммы, количества, средние значения) по заданным критериям.
  • 🔍 Быстрый поиск — позволяют получать данные по сложным фильтрам без полного сканирования базы.
  • 🔄 Синхронизация — обеспечивают согласованность данных между разными подразделениями или периодами.

Без регистров пришлось бы каждый раз пересчитывать все документы (например, все приходные и расходные накладные), чтобы узнать текущий остаток товара. Это заняло бы огромное количество времени и ресурсов. Регистры же хранят уже готовые итоги и обновляют их при каждом изменении данных.

📊 Какой тип регистров вы используете чаще всего?
Регистры накопления
Регистры сведений
Регистры бухгалтерии
Регистры расчетов
Не знаю, что это

Виды регистров в 1С: краткий обзор

В 1С:Предприятие 8 существует четыре основных типа регистров, каждый из которых решает свои задачи. Давайте кратко разберём их особенности и области применения.

Тип регистра Назначение Примеры использования Особенности
Регистр накопления Учёт количественных и суммовых показателей (остатки, обороты) Остатки товаров на складе, денежные средства в кассе, задолженность контрагентов Поддерживает остатки и обороты, может работать с несколькими измерениями
Регистр сведений Хранение справочной информации с привязкой к периодам или без неё Курсы валют, цены номенклатуры, графики работы сотрудников Может быть периодическим или независимым от времени
Регистр бухгалтерии Ведение бухгалтерского учёта (проводки, субконто) Учёт основных средств, расчёты с поставщиками, налоговый учёт Тесно интегрирован с планом счетов, поддерживает корреспонденцию
Регистр расчётов Учёт взаиморасчётов (дебиторская/кредиторская задолженность) Расчёты с покупателями, начисление зарплаты, учёт авансов Поддерживает механизм «расчёт — корректировка — закрытие»

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

Выбор правильного типа регистра зависит от задачи:

  • 📦 Нужно вести остатки товаров? → Регистр накопления.
  • 💰 Требуется хранить историю цен? → Регистр сведений (периодический).
  • 📑 Нужно формировать бухгалтерские проводки? → Регистр бухгалтерии.
  • 🤝 Учитываете задолженность клиентов? → Регистр расчётов.
💡

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

Регистры накопления: устройство и примеры использования

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

Основные компоненты регистра накопления:

  • 📋 Измерения — параметры, по которым группируются данные (например, Склад, Номенклатура).
  • 💰 Ресурсы — количественные показатели (например, Количество, Сумма).
  • 🔧 Реквизиты — дополнительная информация (например, Серия, Срок годности).
  • Периодичность — определяет, как часто обновляются данные (по дням, месяцам и т.д.).

Рассмотрим пример. Допустим, у нас есть регистр накопления «ТоварыНаСкладах» с измерениями Склад и Номенклатура, а также ресурсом Количество. При проведении документа «Поступление товаров» система создаёт запись в регистре:


Движение.Регистр = РегистрыНакопления.ТоварыНаСкладах;

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = ТекущаяДата();

Движение.Склад = Документ.Склад;

Движение.Номенклатура = Документ.Номенклатура;

Движение.Количество = Документ.Количество;

Чтобы получить остатки по этому регистру, можно использовать запрос:


Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ТоварыНаСкладахОстатки.Склад КАК Склад,

| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,

| ТоварыНаСкладахОстатки.КоличествоОстаток КАК Количество

|ИЗ

| РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата) КАК ТоварыНаСкладахОстатки";

Запрос.УстановитьПараметр("Дата", ТекущаяДата());

Результат = Запрос.Выполнить();

💡

Регистры накопления могут работать в двух режимах: остатков (текущее состояние) и оборотов (изменения за период). Для анализа продаж удобнее использовать обороты, а для учёта запасов — остатки.

Один из частых вопросов: чем регистр накопления отличается от таблицы в базе данных? Основное отличие — в механизме обновления. Регистр автоматически пересчитывает итоги при проведении документов, тогда как обычная таблица требует ручного обновления. Кроме того, регистры поддерживают виртуальные таблицы (например, Остатки, Обороты), которые ускоряют получение данных.

⚠️ Внимание: При изменении структуры регистра накопления (добавлении/удалении измерений или ресурсов) может потребоваться полный пересчёт итогов. В больших базах это занимает значительное время, поэтому такие операции лучше проводить в нерабочее время.

Регистры сведений: когда и как их применять

Если регистры накопления предназначены для учёта динамических данных (остатков, оборотов), то регистры сведений используются для хранения статической или периодической информации. Например, курсы валют, цены номенклатуры, графики работы сотрудников.

Особенность регистров сведений в том, что они могут быть:

  • 📅 Периодическими — данные привязаны к дате (например, курс доллара на 10.05.2026).
  • 🔗 Непериодическими — данные не зависят от времени (например, список ответственных лиц).
  • 🔄 Подчинёнными — запись привязана к другому объекту (например, цены для конкретного контрагента).

Рассмотрим пример создания регистра сведений для хранения курсов валют. Структура регистра может выглядеть так:

  • 📌 Измерение: Валюта (ссылка на справочник валют).
  • 💱 Ресурс: Курс (число, 10 знаков после запятой).
  • 📅 Периодичность: День (курс может меняться ежедневно).

Чтобы записать данные в регистр, можно использовать следующий код:


Регистр = РегистрыСведений.КурсыВалют;

НаборЗаписей = Регистр.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Валюта.Установить(Справочники.Валюты.НайтиПоНаименованию("Доллар США"));

НаборЗаписей.Отбор.Период.Установить(ТекущаяДата());

НаборЗаписей.Прочитать();

Если Не НаборЗаписей.Количество() = 0 Тогда

Запись = НаборЗаписей[0];

Иначе

Запись = НаборЗаписей.Добавить();

КонецЕсли;

Запись.Курс = 90.50; // Текущий курс

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

Для получения актуального курса валют на определённую дату используйте запрос:


Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| КурсыВалютСрезПоследних.Валюта КАК Валюта,

| КурсыВалютСрезПоследних.Курс КАК Курс

|ИЗ

| РегистрСведений.КурсыВалют.СрезПоследних(&Дата) КАК КурсыВалютСрезПоследних

|ГДЕ

| КурсыВалютСрезПоследних.Валюта = &Валюта";

Запрос.УстановитьПараметр("Дата", ТекущаяДата());

Запрос.УстановитьПараметр("Валюта", Справочники.Валюты.ДолларСША);

Результат = Запрос.Выполнить();

Регистры сведений часто используются для:

  • 💰 Хранения цен номенклатуры (с привязкой к контрагенту или типу цен).
  • 📅 Учёта графиков работы сотрудников (сменность, выходные).
  • 📊 Сохранения пользовательских настроек (например, последние используемые отчёты).
⚠️ Внимание: Если вы используете периодический регистр сведений, убедитесь, что данные записываются с правильной датой. Ошибка в периоде может привести к тому, что система будет брать устаревшие значения.
Как ускорить работу с регистрами сведений?

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

ВЫБРАТЬ ПЕРВЫЕ 1

КурсыВалютСрезПоследних.Курс КАК Курс

ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&Дата) КАК КурсыВалютСрезПоследних

ГДЕ КурсыВалютСрезПоследних.Валюта = &Валюта

Это особенно полезно, если в регистре хранятся данные за длительный период (годы).

Регистры бухгалтерии: связь с планом счетов

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

Особенности регистров бухгалтерии:

  • 📑 Поддерживают корреспонденцию счетов (дебет и кредит).
  • 🔗 Могут использовать субконто (аналитика по счетам, например, контрагенты, договоры).
  • 📊 Позволяют формировать оборотно-сальдовую ведомость и другие бухгалтерские отчёты.

Пример структуры регистра бухгалтерии для учёта расчётов с поставщиками:

  • 📌 Измерения:
    • Организация (юридическое лицо).
    • Контрагент (поставщик или покупатель).
    • Договор (основание для расчётов).
  • 💰 Ресурсы:
    • Сумма (денежное выражение операции).
    • Валюта (если учёт ведётся в иностранной валюте).

При проведении документа «Поступление товаров и услуг» система автоматически формирует движения по регистру бухгалтерии. Например, проводка по оприходованию товара может выглядеть так:


Движение = Движения.Бухгалтерия.Добавить();

Движение.Период = Документ.Дата;

Движение.СчетДт = ПланСчетов.Товары; // Счёт 41

Движение.СчетКт = ПланСчетов.РасчетыСПоставщиками; // Счёт 60

Движение.Сумма = Документ.СуммаДокумента;

Движение.Контрагент = Документ.Контрагент;

Движение.Договор = Документ.Договор;

Движение.Организация = Документ.Организация;

Для получения оборотов по счёту (например, чтобы узнать сумму покупок у поставщика за месяц) можно использовать запрос:


Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| БухгалтерияОбороты.Контрагент КАК Контрагент,

| СУММА(БухгалтерияОбороты.СуммаОборотДт) КАК Дебет,

| СУММА(БухгалтерияОбороты.СуммаОборотКт) КАК Кредит

|ИЗ

| РегистрБухгалтерии.ХозРасчеты.Обороты(&НачалоПериода, &КонецПериода, ,

| Счет = &Счет AND Контрагент = &Контрагент) КАК БухгалтерияОбороты

|СГРУППИРОВАТЬ ПО

| БухгалтерияОбороты.Контрагент";

Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ТекущаяДата()));

Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ТекущаяДата()));

Запрос.УстановитьПараметр("Счет", ПланСчетов.РасчетыСПоставщиками);

Запрос.УстановитьПараметр("Контрагент", Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка"));

Результат = Запрос.Выполнить();

Регистры бухгалтерии поддерживают следующие виртуальные таблицы:

  • 📊 Обороты() — обороты по счёту за период.
  • 📈 Остатки() — сальдо (остатки) на начало и конец периода.
  • 🔍 ОборотноСальдоваяВедомость() — комбинированный отчёт по оборотам и остаткам.
⚠️ Внимание: При изменении плана счетов или структуры субконто в регистре бухгалтерии обязательно проверьте корректность существующих проводок. Несоответствие счетов или субконто может привести к ошибкам в отчётности.

Регистры расчётов: учёт взаиморасчётов

Если ваша задача — учёт дебиторской и кредиторской задолженности, то регистры расчётов станут вашим главным помощником. Они предназначены для отслеживания состояния расчётов между организациями, сотрудниками, контрагентами и другими участниками бизнес-процессов.

Особенности регистров расчётов:

  • 🔄 Поддерживают механизм «расчёт — корректировка — закрытие».
  • 📅 Могут хранить историю изменений (например, пересчёт задолженности).
  • 💳 Часто используются для учёта авансов, кредитов, зарплат.

Пример структуры регистра расчётов для учёта взаиморасчётов с покупателями:

  • 📌 Измерения:
    • Организация.
    • Контрагент.
    • Договор.
  • 💰 Ресурсы:
    • СуммаДолга.
    • СуммаОплаты.
  • 📅 Периодичность: обычно День или Месяц.

При проведении документа «Реализация товаров и услуг» система формирует запись в регистре расчётов:


Движение = Движения.ВзаиморасчетыСПокупателями.Добавить();

Движение.Период = Документ.Дата;

Движение.Организация = Документ.Организация;

Движение.Контрагент = Документ.Контрагент;

Движение.Договор = Документ.Договор;

Движение.СуммаДолга = Документ.СуммаДокумента;

Движение.ВидДвижения = ВидДвиженияРасчетов.Расчет;

Для получения информации о задолженности покупателя используйте запрос к виртуальной таблице Остатки:


Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| ВзаиморасчетыСПокупателямиОстатки.Контрагент КАК Контрагент,

| ВзаиморасчетыСПокупателямиОстатки.Договор КАК Договор,

| ВзаиморасчетыСПокупателямиОстатки.СуммаДолгаОстаток КАК Долг

|ИЗ

| РегистрРасчетов.ВзаиморасчетыСПокупателями.Остатки(&Дата) КАК ВзаиморасчетыСПокупателямиОстатки

|ГДЕ

| ВзаиморасчетыСПокупателямиОстатки.СуммаДолгаОстаток > 0";

Запрос.УстановитьПараметр("Дата", ТекущаяДата());

Результат = Запрос.Выполнить();

Регистры расчётов поддерживают следующие виды движений:

  • 📝 Расчёт — первичная запись о задолженности.
  • 🔄 Корректировка — изменение суммы долга.
  • 💰 Закрытие — погашение задолженности.

Настроены ли все необходимые измерения (организация, контрагент, договор)?

Указаны ли ресурсы для учёта сумм долга и оплат?

Правильно ли заданы виды движений (расчёт, корректировка, закрытие)?

Проверены ли права доступа пользователей к регистру?

-->

Типичные ошибки при работе с регистрами и как их избежать

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

1. Неправильная структура регистра

Если вы неправильно определили измерения или ресурсы, это может привести к:

  • 🔢 Некорректным итогам в отчётах.
  • 🐢 Замедлению работы системы из-за избыточных данных.
  • 🚫 Невозможности получить нужную аналитику.

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

2. Забыли про виртуальные таблицы

Многие новички пытаются получить данные из регистра путём перебора всех записей, вместо того чтобы использовать виртуальные таблицы (Остатки, Обороты). Это приводит к:

  • 🐢 Крайне медленной работе отчётов.
  • 💥 Перегрузке сервера при больших объёмах данных.

Решение: Всегда используйте виртуальные таблицы для получения итогов. Например, вместо:


Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ СУММА(Количество) ИЗ РегистрНакопления.ТоварыНаСкладах";

Лучше писать:


Запрос = Новый Запрос;

Запрос.Текст = "ВЫБРАТЬ СУММА(КоличествоОстаток) ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата)";

3. Ошибки в периодичности

Если в периодическом регистре сведений указать неверную дату, система может:

  • 📅 Брать устаревшие данные.
  • 🚫 Не находить актуальные записи.

Решение: Всегда проверяйте, что дата в запросе соответствует периоду, за который вам нужны данные. Например, при получении курса валюты на сегодня:


Запрос.УстановитьПараметр("Дата", ТекущаяДата()); // А не вчерашняя или будущая дата!

4. Избыточные движения

Если в документе формируются лишние движения по регистрам, это может:

  • 🐢 Замедлить проведение документов.
  • 📉 Привести к некорректным итогам.

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

5. Неучтённые права доступа

Если пользователь не имеет прав на запись или чтение регистра, это приведёт к:

  • 🚫 Ошибкам при проведении документов.
  • 🔒 Невозможности сформировать отчёт.

Решение: Настройте права ролей в конфигураторе. Например, для регистра «ТоварыНаСкладах» дайте роль «Кладовщик» права на чтение и запись.

⚠️ Внимание: Если после изменения структуры регистра (например, добавления нового измерения) вы получаете ошибки при проведении документов, выполните перепроведение всех документов за затронутый период. В больших базах это может занять много времени, поэтому делайте такие изменения в нерабочее время.

FAQ: Ответы на частые вопросы о регистрах в 1С

🔹 Как узнать, какой регистр используется в конкретном документе?

Откройте документ в конфигураторе, перейдите на закладку «Движения» и посмотрите, какие регистры задействованы. Также можно воспользоваться отладчиком: поставьте точку останова на процедуре ОбработкаПроведения и посмотрите, какие движения формируются.

🔹 Можно ли обойтись без регистров и хранить всё в справочниках?

Технически можно, но это крайне неэффективно. Справочники не оптимизированы для хранения динамических данных (например, остатков товаров). Без регистров вам придётся каждый раз пересчитывать все документы, что сильно замедлит работу системы. Регистры как раз и предназначены для быстрого получения итогов.

🔹 Как ускорить работу отчётов, которые читают данные из регистров?

Вот несколько советов:

  • Используйте виртуальные таблицы