Разработка и Конфигурация · 11 мин
Как создать оборотный регистр накопления в 1С
Пошаговая инструкция по созданию оборотного регистра накопления в 1С: измерения, ресурсы, движения документов, запросы по оборотам, типичные ошибки и проверка результата.
Оборотный регистр накопления в 1С хранит не остатки на дату, а суммы оборотов за произвольный период: продажи по менеджерам, суммы оплат по контрагентам, количество отгруженных товаров по заказам. В отличие от регистра остатков, у оборотного регистра нет видов движений «Приход» и «Расход» — каждая запись просто добавляет значение ресурса в оборот, а итог считается виртуальной таблицей «Обороты» за выбранный интервал.
Типовой сценарий: нужен отчёт «Продажи по контрагентам за месяц», но хранить остатки бессмысленно — важна сумма за период. Для этого создают оборотный регистр с измерениями «Контрагент» и «Номенклатура», ресурсом «СуммаПродажи» и подключают его к документу «Реализация товаров и услуг» как регистратор.
Ниже разобран полный цикл работы: от создания объекта в конфигураторе до проведения документа, проверки движений и построения запроса по виртуальной таблице оборотов. Инструкция подходит для управляемого приложения на платформе 8.3, но логика та же и в обычных формах.
Когда нужен оборотный регистр, а не регистр остатков
Выбор вида регистра определяется природой данных. Если показатель имеет смысл «на момент времени» — складские остатки, взаиморасчёты, резервы — нужен регистр остатков. Если показатель существует только «за период» — выручка, количество продаж, сумма начисленных бонусов — нужен оборотный регистр. Попытка хранить продажи в регистре остатков приводит к бессмысленным «остаткам продаж» и лишним движениям.
Второй критерий — скорость отчётов. Оборотный регистр хранит итоги по периодам (обычно помесячно), поэтому отчёт за месяц или квартал строится быстро даже на больших объёмах. Если бы те же данные считались выборкой из документов, отчёт сканировал бы все строки табличных частей за период.
Остатки или обороты
Подходит для показателей на дату: товары на складе, долги клиентов. Требует видов движения Приход/Расход и контроля отрицательных остатков.
Подходит для показателей за период: продажи, оплаты, начисления. Проще в проведении, но не отвечает на вопрос «сколько сейчас».
Подходит для хранения значений без суммирования: цены, курсы, настройки. Не даёт итогов и оборотов.
Создание регистра в конфигураторе
Откройте конфигуратор, в дереве конфигурации найдите ветку «Регистры накопления» и добавьте новый объект. На закладке «Основные» задайте имя, например «Продажи», и обязательно установите вид регистра «Обороты» — именно этот переключатель отличает оборотный регистр от регистра остатков. После выбора вида поле «Вид движения» в записях исчезает.
На закладке «Данные» добавьте измерения — аналитические разрезы, по которым будут группироваться обороты. Для регистра продаж это обычно «Контрагент», «Номенклатура», «Организация» или «Менеджер». Каждое измерение увеличивает количество хранимых комбинаций, поэтому добавляйте только те разрезы, которые реально нужны в отчётах.
Затем добавьте ресурсы — числовые показатели, которые суммируются: «Количество», «Сумма», «СуммаНДС». Тип ресурса — Число с разумной длиной и точностью, например Число(15,2) для денежных сумм. Реквизиты регистра используйте для дополнительных атрибутов записи, по которым не нужны итоги, но нужна фильтрация.
Подключение документа-регистратора
Оборотный регистр не заполняется сам — записи в него делают документы. Откройте свойства регистра, закладку «Регистраторы» (или свойства документа, закладку «Движения») и отметьте документы, которые будут формировать движения: «РеализацияТоваровУслуг», «ОтчетОРозничныхПродажах» и т.п. Один регистр может обслуживать несколько видов документов.
После включения документа в регистраторы платформа позволит использовать конструктор движений. В модуле документа создайте обработку проведения, нажмите кнопку «Конструктор движений», выберите регистр — конструктор сгенерирует типовой код заполнения записей из табличной части. Это удобная отправная точка, которую затем дорабатывают под реальную логику.
Код обработки проведения
Типовой обработчик проведения для оборотного регистра продаж выглядит так: для каждой строки табличной части создаётся запись движения, заполняются измерения и ресурсы. Ключевое отличие от регистра остатков — не указывается ВидДвижения.
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.Продажи.Записывать = Истина;
Для Каждого СтрокаТовары Из Товары Цикл
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Контрагент = Контрагент;
Движение.Номенклатура = СтрокаТовары.Номенклатура;
Движение.Количество = СтрокаТовары.Количество;
Движение.Сумма = СтрокаТовары.Сумма;
КонецЦикла;
КонецПроцедуры
Обратите внимание на строку Движения.Продажи.Записывать = Истина; — без неё набор записей не будет записан в базу, и документ проведётся «молча», не оставив движений. Это одна из самых частых причин «пустого» регистра у начинающих разработчиков.
Для оптимизации на больших табличных частях вместо цикла по строкам используют запрос к табличной части с группировкой и заполнение движений из результата запроса. Это сокращает число обращений к данным и упрощает сворачивание одинаковых аналитик.
- 1Создайте регистр накопления, установите вид «Обороты»
- 2Добавьте измерения (аналитика) и ресурсы (суммируемые показатели)
- 3Включите документы-регистраторы в движения регистра
- 4Напишите обработку проведения с заполнением записей и Записывать = Истина
- 5Обновите конфигурацию базы данных, проведите тестовый документ
- 6Проверьте движения документа и постройте отчёт по виртуальной таблице Обороты
Чтение данных: виртуальная таблица «Обороты»
Главная ценность оборотного регистра — виртуальная таблица «Обороты», которая принимает параметры: начало периода, конец периода, периодичность (по дням, месяцам, регистратору) и отбор. Запрос к ней возвращает уже сгруппированные итоги, что и обеспечивает скорость отчётов.
ВЫБРАТЬ
ПродажиОбороты.Контрагент КАК Контрагент,
ПродажиОбороты.КоличествоОборот КАК Количество,
ПродажиОбороты.СуммаОборот КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(
&НачалоПериода,
&КонецПериода,
Месяц,
) КАК ПродажиОбороты
Имена полей ресурсов в виртуальной таблице получают суффикс «Оборот»: ресурс «Сумма» превращается в поле «СуммаОборот». Если указать периодичность «Регистратор», можно увидеть, какие документы сформировали оборот, — это удобно для расшифровки отчёта.
Для построения отчёта удобнее всего использовать СКД (систему компоновки данных): создайте отчёт, в наборе данных укажите тот же запрос к виртуальной таблице, добавьте параметры периода в «Параметры» СКД и настройте группировки. Пользователь получит отчёт с отборами и периодом без единой строки кода формы.
Всегда передавайте границы периода в виртуальную таблицу параметрами, а не фильтруйте результат в условии ГДЕ после выборки. Отбор внутри виртуальной таблицы выполняется по итоговым данным и работает в разы быстрее, чем полное сканирование с последующей фильтрацией.
Проверка результата и типичные ошибки
После обновления конфигурации проведите тестовый документ и откройте его движения: в форме документа «Ещё → Движения документа» или через меню «Перейти». Должна появиться запись с правильным периодом, заполненными измерениями и суммой. Затем постройте отчёт по виртуальной таблице за период документа — оборот должен совпасть с суммой документа.
Отдельно проверьте перепроведение: отмените проведение и проведите документ снова. Обороты не должны задваиваться — платформа автоматически замещает набор записей регистратора. Если суммы удваиваются, скорее всего, записи добавляются вручную без привязки к регистратору или нарушена логика набора записей.
Как проверить результат
Записи есть, период равен дате документа, измерения заполнены
Список движений пуст — забыли Записывать = Истина или документ не включён в регистраторы
Сумма оборота равна сумме проведённых документов
Сумма удвоена или равна нулю — ошибка в обработке проведения
После повторного проведения итог не меняется
Итог растёт при каждом проведении — движения добавляются без замещения
Ограничения и границы применения
Оборотный регистр не отвечает на вопрос «сколько осталось на дату». Если в будущем понадобится и остаток, и оборот по одной аналитике, иногда создают два регистра (остатков и оборотный) и проводят документ по обоим. Это нормальная практика, но она удваивает объём записей — принимайте такое решение осознанно.
Второе ограничение — периодичность итогов. Платформа хранит итоги оборотов помесячно; запросы за период внутри месяца пересчитываются по записям. На очень больших объёмах это заметно, поэтому для тяжёлых аналитических отчётов применяют периодичность «Регистратор» только при необходимости расшифровки.
Наконец, не используйте оборотный регистр как замену бухгалтерским проводкам: для учётных регистров с корреспонденцией счетов предназначен регистр бухгалтерии. Оборотный регистр накопления — инструмент оперативной и управленческой аналитики.
Часто задаваемые вопросы
Чем оборотный регистр отличается от регистра остатков?
Регистр остатков хранит значения на момент времени и требует видов движения «Приход» и «Расход»; итог по нему — остаток на дату. Оборотный регистр суммирует значения за период без видов движения; его итог — оборот между двумя датами. Выбор зависит от природы показателя: «сколько сейчас» — остатки, «сколько за период» — обороты.
Можно ли заполнить оборотный регистр без документа?
Технически набор записей регистра можно создать программно и записать, указав произвольный регистратор, но запись без регистратора невозможна — поле «Регистратор» обязательно. Для первоначального ввода данных обычно создают служебный документ «Ввод начальных данных» и проводят его по регистру.
Почему отчёт по регистру показывает пусто, хотя документы проведены?
Проверьте три вещи: включён ли документ в регистраторы регистра, есть ли строка Движения.ИмяРегистра.Записывать = Истина в обработке проведения и попадает ли дата документа в период виртуальной таблицы. Также убедитесь, что после изменения кода конфигурация базы данных была обновлена.
Как увидеть, какие документы сформировали оборот?
Укажите в виртуальной таблице «Обороты» периодичность «Регистратор» — в результате появится поле «Регистратор», и каждая строка оборота будет привязана к конкретному документу. В отчётах на СКД это используют для расшифровки итогов до документов.
Сколько измерений можно добавить в регистр?
Платформа допускает десятки измерений, но практический предел определяется производительностью: каждая комбинация значений измерений создаёт отдельную строку итогов. Обычно достаточно 3–6 измерений; если разрезов больше, часть аналитики выносят в реквизиты или в отдельные регистры.
Нужно ли пересчитывать итоги оборотного регистра?
В штатной работе платформа поддерживает итоги актуальными автоматически. Пересчёт итогов (через «Администрирование — Обслуживание» или метод УстановитьИспользованиеИтогов) требуется после массовой загрузки данных с отключёнными итогами или при подозрении на рассинхронизацию после сбоев.
Что важно запомнить
Оборотный регистр накопления создаётся с видом «Обороты», содержит измерения для аналитики и ресурсы для суммирования, заполняется движениями документов-регистраторов с обязательным Записывать = Истина, а данные читаются через виртуальную таблицу «Обороты» с параметрами периода. Проверяйте результат по движениям документа и совпадению суммы отчёта с суммой проведённых документов.