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

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

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

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

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

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

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

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

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

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

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

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

Простейший пример проведения приходной накладной по регистру «ОстаткиТоваров»:

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

Движения.ОстаткиТоваров.Записывать = Истина;

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

Движение = Движения.ОстаткиТоваров.Добавить();

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

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

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

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

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

КонецЦикла;

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

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

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

Способ 2. Программная запись через набор записей

Когда нужно сделать запись вне документа — например, при загрузке данных, в обработке или регламентном задании — используют объект РегистрыНакопления.ИмяРегистра.СоздатьНаборЗаписей(). Важно: набор записей всегда привязан к регистратору, поэтому без документа-регистратора запись в регистр накопления сделать нельзя.

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

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

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

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

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

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

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

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

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

Метод Записать() по умолчанию замещает существующие движения регистратора. Если нужно добавить строки к уже существующим, сначала прочитайте набор методом Прочитать(), добавьте строки и запишите с параметром Записать(Ложь) — но только при работе с уже загруженным набором.

Для массовой загрузки имеет смысл отключать итоги регистра на время записи (РегистрыНакопления.ОстаткиТоваров.УстановитьИспользованиеИтогов(Ложь)) и включать после — это заметно ускоряет запись больших объёмов. После включения итоги пересчитываются.

Способ 3. Ручная запись без программирования

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

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

Сравнение способов записи

Проведение документа

Штатный способ для всего регулярного учёта; движения контролируются логикой конфигурации, легко перепровести

Программная запись набором

Подходит для загрузок, обменов и обработок; требует аккуратности с отбором по регистратору и замещением

Ручная операция

Только разовые корректировки и ввод остатков; не привязана к первичке, усложняет аудит

Как проверить, что запись сделана правильно

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

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

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

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

Движения документа
Норма

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

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

Регистр пуст или измерения не заполнены

Отчёт по остаткам
Норма

Конечный остаток изменился на сумму/количество записи

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

Остаток не изменился или появился минус

Период записи
Норма

Дата движения совпадает с датой документа

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

Движение попало не в тот период

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

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

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

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

Ограничения и границы безопасной работы

Запись в регистр накопления возможна только от имени регистратора — документа. «Висячих» записей без документа в регистре быть не может. Период записи определяется датой регистратора, и изменить его произвольно нельзя.

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

Итог

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

Штатный путь — проведение документа с заполненными движениями и строкой Записывать = Истина. Программно запись делается набором записей с отбором по регистратору. Всегда проверяйте результат отчётом по остаткам и не вносите ручные правки без резервной копии.

Частые вопросы

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

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

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

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

Как добавить строки к существующим движениям документа?

Создайте набор записей, установите отбор по регистратору, выполните Прочитать(), добавьте новые строки и вызовите Записать(). Без чтения запись заместит старые движения новыми строками.

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

Для регистра остатков обязательно указывается вид движения (Приход или Расход), и платформа хранит итоги остатков. В оборотном регистре вид движения отсутствует — записи просто накапливают обороты за период, остаток из него не выводится.

Как исправить ошибочную запись в регистре?

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

Почему после записи задним числом остатки стали отрицательными?

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