К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как записать в регистр накопления в 1С

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

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

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

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

Что такое регистр накопления и как он устроен

Регистр накопления хранит числовые показатели в разрезе измерений. Например, регистр «ТоварыНаСкладах» хранит количество (ресурс) в разрезе номенклатуры и склада (измерения). Каждая запись в регистре называется движением и обязательно привязана к документу-регистратору.

Существует два вида регистров накопления. Регистр остатков хранит текущее состояние: каждое движение имеет вид «Приход» (увеличивает остаток) или «Расход» (уменьшает). Платформа автоматически поддерживает таблицу итогов для быстрого получения остатков на дату. Регистр оборотов хранит только суммарные обороты за период без понятия остатка — например, объёмы продаж по месяцам.

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

Запись через проведение документа

Штатный способ записи — проведение документа. В конфигураторе у документа в свойстве «Движения» отмечаются регистры, по которым он делает движения. Логика записи описывается в модуле объекта в обработчике «ОбработкаПроведения».

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

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

Для Каждого СтрокаТовара Из Товары Цикл

Движение = Движения.ТоварыНаСкладах.Добавить();

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

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

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

Движение.Склад = Склад;

Движение.Количество = СтрокаТовара.Количество;

КонецЦикла;

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

Строка «Записывать = Истина» обязательна, если набор записывается вручную или нужно гарантировать очистку старых движений при перепроведении. Без неё при повторном проведении старые движения могут остаться и задвоить остатки.

Проведение по нескольким регистрам

Один документ может двигать несколько регистров: например, «Реализация» списывает товар со склада и увеличивает долг покупателя. Для каждого регистра создаётся свой набор записей внутри общей коллекции «Движения». Все наборы записываются в одной транзакции — либо проведение успешно целиком, либо откатывается полностью.

Программная запись в регистр без документа

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

НаборЗаписей = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);

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

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

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

НоваяЗапись.Номенклатура = НоменклатураСсылка;

НоваяЗапись.Склад = СкладСсылка;

НоваяЗапись.Количество = 10;

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

Ключевой момент: регистратор обязателен. Записать набор без ссылки на документ нельзя — платформа выдаст ошибку. Поэтому для технических корректировок используют существующий документ (например, «Корректировка регистров» или «Операция»), либо создают служебный документ-заглушку.

Корректировка регистров вручную

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

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

Ручная корректировка регистра
  1. 1
    Создайте документ «Корректировка регистров» или «Операция»
  2. 2
    Выберите регистр накопления, который нужно поправить
  3. 3
    Добавьте строку движения: вид Приход или Расход, измерения, количество
  4. 4
    Проведите документ
  5. 5
    Откройте отчёт по регистру и сверьте остаток с ожидаемым

Проверка результата записи

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

В режиме предприятия движения документа видны через кнопку «Ещё → Движения документа» (в управляемых формах) или меню «Перейти → Движения по регистрам». Там видно, какие записи и в какие регистры сформировал документ.

Для программной проверки используйте запрос к виртуальной таблице остатков: «РегистрНакопления.ТоварыНаСкладах.Остатки». Если остаток стал отрицательным там, где это недопустимо, — движение сформировано с неверным видом или измерением.

Контрольные точки

Как проверить движения

Наличие записей
Норма

В движениях документа есть строки по нужному регистру

Тревожный признак

Список движений пуст — документ не проведён или регистр не отмечен в свойствах

Вид движения
Норма

Поступление товара — Приход, списание — Расход

Тревожный признак

Вид перепутан, остатки уходят в минус или завышаются

Итоговый остаток
Норма

Остаток по отчёту совпадает с фактическим/ожидаемым

Тревожный признак

Расхождение — ищите задвоенные или потерянные движения

Контроль остатков и отрицательные остатки

Для регистров остатков типовые конфигурации при проведении расходных документов проверяют, хватает ли остатка. Проверка реализуется запросом к виртуальной таблице «Остатки» с отбором по измерениям документа. Если остатка не хватает, выводится сообщение и устанавливается Отказ = Истина.

Важно учитывать момент времени: контроль на дату документа без учёта собственных движений может дать ложное срабатывание при перепроведении задним числом. Правильный подход — использовать объектную блокировку или контролировать остатки после записи движений с методом контроля, либо перепроводить последующие документы.

Типичные ошибки при записи в регистр

Большинство проблем с остатками вызвано небольшим набором повторяющихся ошибок. Их легко избежать, если знать причины.

Типичные ошибки
01
Не установлено Записывать = Истина — при перепроведении старые движения не очищаются, остатки задваиваются
02
Перепутан вид движения Приход/Расход — остатки уходят в минус или бесконечно растут
03
Запись набора без предварительного чтения — существующие движения регистратора стираются
04
Неверный период записи — движение попадает не в тот месяц, отчёты по периодам расходятся
05
Проведение документов задним числом без перепроведения последующих — остатки на промежуточные даты неверны
06
Изменение структуры регистра без пересчёта итогов — отчёты работают медленно или показывают устаревшие данные

Оптимизация и итоги регистра

Регистры остатков хранят итоги по месяцам для быстрого получения остатков. Если итоги отключены или рассчитаны не на текущий период, запросы остатков на актуальную дату замедляются. Управление итогами выполняется в режиме предприятия: «Операции → Управление итогами» (в типовых) или программно методами «УстановитьИспользованиеИтогов» и «ПересчитатьИтоги».

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

Часто задаваемые вопросы

Можно ли записать в регистр накопления без документа?

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

Почему после проведения документа в регистре нет записей?

Проверьте три вещи: отмечен ли регистр в свойстве «Движения» документа, не возникает ли отказ в обработке проведения (документ фактически не проводится), и установлено ли «Записывать = Истина» для набора записей при программном формировании движений.

Чем отличается регистр остатков от регистра оборотов?

Регистр остатков хранит текущее состояние и требует вида движения (Приход/Расход), платформа поддерживает таблицу итогов остатков. Регистр оборотов хранит только суммы за период, вида движения у записей нет, и получить остаток на дату из него нельзя.

Как исправить ошибочные движения документа?

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

Почему отчёт по остаткам работает медленно?

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

Что делать, если остатки ушли в минус?

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

Итог

Что важно запомнить

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