Если вы работаете с платформой 1С:Предприятие, то рано или поздно столкнётесь с необходимостью вести учёт операций, которые требуют не только фиксации остатков, но и анализа оборотов за период. Здесь на помощь приходит оборотный регистр накопления — один из ключевых объектов конфигурации, который часто вызывает вопросы у начинающих разработчиков и бухгалтеров. В отличие от регистров сведений или бухгалтерских регистров, оборотные регистры накопления специализируются на хранении данных о движениях (приход/расход) с возможностью получения остатков на любую дату.
В этой статье мы разберём, что такое оборотный регистр накопления, чем он отличается от других типов регистров в 1С 8.3, как его создать и настроить, а также приведём практические примеры использования. Особое внимание уделим типичным ошибкам при работе с этими регистрами и способам их оптимизации для крупных баз данных. Если вы только начинаете осваивать конфигурирование в 1С или хотите углубить свои знания — этот материал будет полезен.
Что такое оборотный регистр накопления и зачем он нужен
Оборотный регистр накопления — это объект конфигурации 1С:Предприятие, предназначенный для хранения информации о движениях (приходных и расходных операциях) с возможностью получения остатков на произвольную дату. В отличие от регистров сведений, которые хранят только текущие значения, оборотные регистры фиксируют все изменения за период, что позволяет:
- 📊 Вести количественный и суммовой учёт (например, товаров на складе или денежных средств на счёте).
- 🔄 Отслеживать обороты за любой интервал времени (день, месяц, год).
- 📅 Получать остатки на конкретную дату, включая ретроспективу.
- 🔍 Строить аналитические отчёты по движениям (например, оборотно-сальдовую ведомость).
Классический пример использования — учёт товарных запасов. Когда товар поступает на склад, фиксируется приходное движение; при продаже — расходное. Регистр автоматически рассчитывает остаток на любую дату, исходя из суммы всех предыдущих операций. Аналогично работают регистры для учёта денежных средств, взаиморасчётов с контрагентами или рабочего времени сотрудников.
Важно понимать, что оборотный регистр накопления не заменяет бухгалтерские счета, а дополняет их, предоставляя более гибкие инструменты для оперативного учёта. Например, в типовой конфигурации 1С:Бухгалтерия регистры накопления используются для управления запасами, а бухгалтерские регистры — для формирования проводок.
Структура оборотного регистра накопления: из чего он состоит
Любой оборотный регистр накопления в 1С 8.3 состоит из нескольких ключевых компонентов, которые определяют его функциональность. Рассмотрим их подробно:
- Измерения — это аналитические разрезы, по которым ведётся учёт (например,
Номенклатура,Склад,Контрагент). Они позволяют группировать данные и получать остатки в нужных разрезах. - Ресурсы — количественные или суммовые показатели, которые накапливаются (например,
Количество,Сумма). Именно по ресурсам регистр ведёт учёт оборотов. - Реквизиты — дополнительные атрибуты движений (например,
Цена,ВалютнаяСумма). Они не участвуют в расчёте остатков, но могут использоваться в отчётах. - Периодичность — определяет, как часто регистр будет обновлять остатки (например,
В пределах дняилиПо позициям регистратора).
Пример структуры регистра для учёта товаров на складе:
| Компонент | Пример значения | Назначение |
|---|---|---|
| Измерение | Номенклатура, Склад |
Группировка остатков по товарам и складам |
| Ресурс | Количество, Сумма |
Учёт количества и стоимости товаров |
| Реквизит | Серия, СрокГодности |
Дополнительная информация о товаре |
| Периодичность | В пределах дня |
Остатки обновляются ежедневно |
Особенность оборотных регистров — они всегда работают в паре с документами-регистраторами (например, ПоступлениеТоваровУслуг или РеализацияТоваровУслуг). Именно документы формируют движения в регистре, фиксируя приход или расход.
Если в регистре много измерений, это может замедлить работу системы. Оптимизируйте структуру, оставляя только необходимые аналитические разрезы.
Отличие оборотного регистра от регистра сведений и бухгалтерского регистра
Новички часто путают оборотные регистры накопления с другими типами регистров в 1С. Разберём ключевые различия:
1. Оборотный регистр накопления vs. Регистр сведений
- 📈 Оборотный регистр хранит движения (приход/расход) и рассчитывает остатки. Пример: учёт товаров на складе.
- 📋 Регистр сведений хранит текущие значения без истории изменений. Пример: курсы валют или цены номенклатуры.
2. Оборотный регистр накопления vs. Бухгалтерский регистр
- 💰 Бухгалтерский регистр привязан к плану счетов и формирует проводки для бухгалтерского учёта. Работает по принципу двойной записи.
- 🔄 Оборотный регистр не связан с бухгалтерией и используется для оперативного учёта (склад, касса, взаиморасчёты).
3. Оборотный регистр накопления vs. Регистр остатков
- 📊 Оборотный регистр хранит и движения, и остатки. Можно получить обороты за период.
- 📉 Регистр остатков (устаревший термин) — это упрощённая версия, которая хранит только остатки без истории движений.
В современных конфигурациях 1С (например, 1С:ERP или 1С:УТ 11) оборотные регистры накопления вытеснили регистры остатков, так как предоставляют более широкие возможности для анализа.
Когда использовать регистр сведений вместо оборотного?
Регистр сведений подходит, если вам нужно хранить актуальные данные без истории изменений, например:
- Курсы валют на сегодня
- Цены номенклатуры (если не нужен анализ динамики)
- Настройки пользователей
Если же требуется отслеживать, как менялись значения во времени (например, остатки товаров), оборотный регистр накопления будет оптимальным выбором.
Как создать оборотный регистр накопления: пошаговая инструкция
Рассмотрим процесс создания оборотного регистра накопления на примере учёта товаров на складе в конфигураторе 1С 8.3.
Шаг 1. Создание объекта конфигурации
1. Откройте конфигуратор (Файл → Открыть конфигурацию).
2. В дереве объектов найдите ветку Регистры накопления и добавьте новый элемент (Добавить → Регистр накопления).
3. Укажите имя регистра, например, ТоварыНаСкладах, и выберите тип Обороты.
Шаг 2. Настройка измерений и ресурсов
Вкладка Данные:
- Добавьте измерения:
Номенклатура(тип:СправочникСсылка.Номенклатура)Склад(тип:СправочникСсылка.Склады)
- Добавьте ресурсы:
Количество(тип:Число, 15, 3)Сумма(тип:Число, 15, 2)
Шаг 3. Настройка регистраторов
На вкладке Регистраторы укажите документы, которые будут формировать движения:
ПоступлениеТоваровУслуг(для приходных движений)РеализацияТоваровУслуг(для расходных движений)
Шаг 4. Программирование движений
В модуле документа ПоступлениеТоваровУслуг добавьте код для формирования движения:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ТоварыНаСкладах.Записать;
Для Каждого ТекСтрока Из Товары Цикл
Движение = Движения.ТоварыНаСкладах.Добавить;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрока.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрока.Количество;
Движение.Сумма = ТекСтрока.Сумма;
КонецЦикла;
КонецПроцедуры
☑️ Проверка перед сохранением регистра
Примеры использования оборотных регистров накопления
Оборотные регистры накопления применяются в различных бизнес-процессах. Рассмотримные сценарии:
1. Учёт товаров на складе
Регистр фиксирует:
- 📦 Приход (поступление от поставщика).
- 🛒 Расход (продажа клиенту или списание).
- 📊 Остатки на любую дату.
Пример запроса для получения остатков:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстатки.Склад КАК Склад,
| ТоварыНаСкладахОстатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаКонца, ) КАК ТоварыНаСкладахОстатки";
Запрос.УстановитьПараметр("ДатаКонца", ТекущаяДата);
Результат = Запрос.Выполнить;
2. Учёт денежных средств в кассе
Регистр ведёт учёт:
- 💵 Поступления (от клиентов, из банка).
- 💸 Выдачи (на зарплату, подотчёт).
- 💰 Остаток наличных на дату.
3. Взаиморасчёты с контрагентами
Регистр отслеживает:
- 📝 Долги поставщиков (авансы, оплаты).
- 📉 Долги покупателей (отгрузки, возвраты).
- 🔄 Сальдо взаиморасчётов.
Во всех случаях оборотный регистр позволяет не только видеть текущие остатки, но и анализировать обороты за период — например, сколько товара поступило и было продано за месяц.
Оборотные регистры накопления незаменимы, когда нужно не только знать текущий остаток, но и понимать, за счёт каких операций он сформировался.
Типичные ошибки при работе с оборотными регистрами и как их избежать
Даже опытные разработчики иногда сталкиваются с проблемами при настройке оборотных регистров. Вот наиболее распространённые ошибки и способы их решения:
⚠️ Внимание! Если в регистре неверно указанВидДвижения(например, вместоПриходуказанРасход), это приведёт к искажению остатков. Всегда проверяйте логику движений в отладчике.
1. Несовпадение остатков с бухгалтерией
Проблема: Остатки в оборотном регистре не сходятся с данными бухгалтерских счетов.
Решение:
- Проверьте, что документы корректно формируют движения в обоих регистрах.
- Используйте отчёт
СверкаИтоговдля сравнения данных. - Убедитесь, что в регистре указаны все необходимые измерения (например,
Организация, если учёт ведётся по нескольким компаниям).
2. Медленная работа регистра при больших объёмах данных
Проблема: Запросы к регистру выполняются слишком долго (например, при формировании отчётов).
Решение:
- Оптимизируйте структуру регистра: уменьшите количество измерений.
- Используйте
Индексироватьдля часто запрашиваемых полей. - Разбейте один большой регистр на несколько поменьше (например, отдельно для товаров и денежных средств).
3. Ошибки при проведении документов
Проблема: Документ не проводится из-за ошибок в движениях регистра.
Решение:
- Проверьте, что все обязательные реквизиты движений заполнены (например,
Номенклатуране может быть пустой). - Используйте конструкцию
Попытка...Исключениедля отлова ошибок:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Попытка
Движения.ТоварыНаСкладах.Записать;
// Код формирования движений
Исключение
Сообщить(ОписаниеОшибки);
Отказ = Истина;
КонецПопытки;
КонецПроцедуры
4. Неправильные остатки после восстановления последовательности
Проблема: После восстановления последовательности документов остатки в регистре стали неверными.
Решение:
- Выполните полный перерасчёт итогов регистра (
РегистрыНакопления.ТоварыНаСкладах.ПерерасчетИтогов). - Проверьте, что даты документов не конфликтуют (например, расход не идёт раньше прихода).
⚠️ Внимание! Если в базе ведётся учёт по нескольким организациям, но в регистре не указано измерение Организация, остатки будут смешиваться. Это приведёт к искажению данных в отчётах.
Оптимизация работы с оборотными регистрами накопления
При работе с крупными базами данных (тысячи документов в день) оборотные регистры могут стать"узким местом" производительности. Вот несколько способов оптимизации:
1. Использование виртуальных таблиц
Вместо прямых обращений к регистру используйте виртуальные таблицы:
- 📅
Остатки— для получения остатков на дату. - 🔄
Обороты— для анализа движений за период. - 📈
ОстаткиИОбороты— комбинированная таблица.
Пример:
Запрос.Текст =
"ВЫБРАТЬ
| Обороты.Номенклатура КАК Номенклатура,
| СУММА(Обороты.Количество) КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Обороты(&НачалоПериода, &КонецПериода, ) КАК Обороты
|ГРУППИРОВАТЬ ПО
| Обороты.Номенклатура";
2. Периодическое обновление итогов
Настройте регламентное задание для автоматического перерасчёта итогов:
Процедура ПерерасчетИтоговРегистров
РегистрыНакопления.ТоварыНаСкладах.ПерерасчетИтогов(
НачалоГода(ТекущаяДата),
ТекущаяДата,
Истина); // Истина - перерасчёт с учётом последовательности
КонецПроцедуры
3. Разделение регистров по функционалу
Если один регистр используется для учёта разных сущностей (например, товары и материалы), разделите его на два:
- 📦
ТоварыНаСкладах— для торгового учёта. - 🔧
МатериалыНаСкладах— для производственного учёта.
4. Использование отборов в запросах
Всегда ограничивайте данные отборами по дате, складу или организации:
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.КоличествоОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &ТекСклад) КАК Остатки";
Эти методы помогут значительно ускорить работу системы, особенно в конфигурациях с высокой нагрузкой (например, 1С:ERP или 1С:УТ для крупных торговых сетей).
FAQ: Частые вопросы об оборотных регистрах накопления
Можно ли в одном регистре хранить и количество, и сумму?
Да, оборотный регистр накопления может иметь несколько ресурсов. Например, в регистре ТоварыНаСкладах часто используются ресурсы Количество (для учёта штук) и Сумма (для учёта стоимости). При этом движения по каждому ресурсу формируются независимо.
Как получить обороты за месяц по конкретному товару?
Используйте виртуальную таблицу Обороты с отбором по номенклатуре и периоду:
Запрос.Текст =
"ВЫБРАТЬ
| Обороты.Период КАК Дата,
| СУММА(Обороты.Количество) КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Обороты(
| НачалоМесяца(&Дата),
| КонецМесяца(&Дата),
| Номенклатура = &Товар)
|КАК Обороты
|ГРУППИРОВАТЬ ПО
| Обороты.Период";
Что делать, если остатки в регистре не совпадают с фактическими данными?
Сначала проверьте:
- Корректность движений в документах (особенно
ВидДвижения). - Последовательность проведения документов (расход не должен идти раньше прихода).
- Наличие"битых" движений (используйте отчёт
АнализНарушенийСсылочнойЦелостности).
Если ошибка не найдена, выполните полный перерасчёт итогов регистра.
Можно ли использовать оборотный регистр для учёта рабочего времени?
Да, это типичный сценарий. Например, регистр ОтработанноеВремя может иметь:
- Измерения:
Сотрудник,Проект. - Ресурсы:
Часы(количество отработанных часов).
Движения будут формироваться документами ТабельУчётаВремени.
Как перенести данные из регистра сведений в оборотный регистр накопления?
Для этого:
- Создайте обработку, которая читает данные из регистра сведений.
- Формируйте движения в оборотном регистре с типом
Приход(для начальных остатков). - Проведите документ-загрузчик, который выполнит перенос.
Пример кода для переноса остатков:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ОстаткиТоваров.Номенклатура КАК Номенклатура,
| ОстаткиТоваров.Склад КАК Склад,
| ОстаткиТоваров.Количество КАК Количество
|ИЗ
| РегистрСведений.ОстаткиТоваров.Последние КАК ОстаткиТоваров";
Результат = Запрос.Выполнить;
Выборка = Результат.Выбрать;
Пока Выборка.Следующий Цикл
Движение = Движения.ТоварыНаСкладах.Добавить;
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = НачалоДня(ТекущаяДата);
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Склад = Выборка.Склад;
Движение.Количество = Выборка.Количество;
КонецЦикла;