Как документ становится регистратором и пишет движения в регистры 1С 8.3

· 9 мин

Содержание

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

Типичная ситуация: бухгалтер видит в оборотно-сальдовой ведомости странный остаток на 41 счёте, проваливается в отчёт и находит строку, за которой стоит конкретная «Реализация товаров и услуг». Этот документ и есть регистратор строки. Ниже — как такая связь устроена в конфигураторе, как её настроить и где она чаще всего ломается.

Регистратор в 1С: суть и роль в учёте

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

Документ при проведении переносит свои данные в регистры. Эти записи называют движениями, а документ — их регистратором. Платформа связывает записи с документом жёстко:

  • 📌 у записи регистра есть обязательный реквизит Регистратор со ссылкой на документ;
  • 📌 записи одного регистратора в одном регистре образуют набор записей, его читают и пишут целиком;
  • 📌 при повторном проведении старый набор заменяется новым, а не дополняется;
  • 📌 при отмене проведения или пометке на удаление движения удаляются (поведение задаёт настройка документа, о ней ниже).

Регистратором в 8.3 может быть только документ. Справочник, обработка или бизнес-процесс движений в регистры с подчинением не пишут. Если нужно записать данные в регистр без документа, используют регистр сведений в независимом режиме.

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

Какие регистры подчиняются регистратору: сравнение

«Видами регистраторов» часто называют виды регистров. Точнее говорить так: регистратор всегда один по природе — документ, а регистры по-разному с ним связаны. От вида регистра зависит, обязательна ли эта связь и что именно документ туда пишет.

Вид регистраПодчинение регистраторуЧто хранитПример в типовых
Регистр накопленияВсегдаОстатки и обороты по измерениямТовары на складах, взаиморасчёты
Регистр бухгалтерииВсегдаПроводки Дт/Кт по плану счетовХозрасчётный в БП 3.0
Регистр расчётаВсегдаНачисления и удержания с периодами действияНачисления в ЗУП 3.1
Регистр сведенийПо выбору: «Независимый» или «Подчинение регистратору»Значения на дату или без периодаЦены номенклатуры, курсы валют

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

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

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

Как назначить документ регистратором в конфигураторе

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

Шаг 1. Отметить регистр в движениях документа

  1. Откройте окно редактирования документа «ПриходТовара».
  2. Перейдите на вкладку «Движения».
  3. В свойстве «Проведение» оставьте значение «Разрешить».
  4. В списке регистров отметьте флажком «ОстаткиТоваров».

После этого тип реквизита Регистратор у регистра автоматически дополнится типом ДокументСсылка.ПриходТовара. Руками этот тип не правят.

Шаг 2. Настроить поведение движений

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

СвойствоЗначенияЧто меняет
Удаление движенийУдалять автоматически / Удалять автоматически при отмене проведения / Не удалять автоматическиКогда платформа сама очищает наборы записей
Запись движений при проведенииЗаписывать выбранные / Записывать модифицированныеКакие наборы пишутся после обработки проведения
Оперативное проведениеРазрешить / ЗапретитьБудет ли документ проводиться «сейчас» с контролем остатков

Для нового документа обычно достаточно «Удалять автоматически» и «Записывать выбранные». Режим «Не удалять автоматически» встречается в старых типовых: там движения очищает сам код, и если его забыть, при отмене проведения записи останутся в регистре.

Шаг 3. Написать обработку проведения

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

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

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

	Для Каждого СтрокаТЧ Из Товары Цикл
		Движение = Движения.ОстаткиТоваров.ДобавитьПриход();
		Движение.Период = Дата;
		Движение.Номенклатура = СтрокаТЧ.Номенклатура;
		Движение.Склад = Склад;
		Движение.Количество = СтрокаТЧ.Количество;
	КонецЦикла;

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

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

Шаг 4. Обновить конфигурацию и проверить

Сохраните конфигурацию (Конфигурация → Обновить конфигурацию базы данных или F7), запустите базу в режиме 1С:Предприятие, создайте и проведите документ. Затем откройте список регистра и посмотрите колонку «Регистратор».

Регистраторы на практике: четыре рабочих приёма

Найти все движения конкретного документа

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

В запросе отбор делают так:

ВЫБРАТЬ
	Т.Номенклатура,
	Т.Количество,
	Т.ВидДвижения
ИЗ
	РегистрНакопления.ОстаткиТоваров КАК Т
ГДЕ
	Т.Регистратор = &Документ

Поле Регистратор проиндексировано платформой, такой отбор работает быстро.

Прочитать и переписать набор записей кодом

Иногда нужно поправить движения без перепроведения: например, при доработке обработки загрузки. Работают через набор записей с отбором по регистратору:

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

Записать() без параметров заменяет весь набор этого регистратора. Если отбор не установить, запись завершится ошибкой: набор подчинённого регистра без регистратора не пишется.

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

Ручная корректировка в БП 3.0

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

Получить реквизиты регистратора в отчёте

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

Решение — сузить тип через ВЫРАЗИТЬ:

ВЫБРАТЬ
	ВЫРАЗИТЬ(Т.Регистратор КАК Документ.ПриходТовара).Поставщик КАК Поставщик,
	Т.Количество
ИЗ
	РегистрНакопления.ОстаткиТоваров КАК Т
ГДЕ
	Т.Регистратор ССЫЛКА Документ.ПриходТовара

А для даты используйте поле Период самого регистра, а не Регистратор.Дата.

Ошибки с регистраторами и как их не допустить

Диагностика: выберите симптом

Ещё две ошибки проектирования, которые потом дорого исправлять:

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

Как ускорить проведение и запросы по регистратору

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

  1. Управляемые блокировки. Для документов с контролем остатков в начале проведения ставьте блокировку БлокировкаДанных на нужные измерения, а не на весь регистр.
  2. Контроль остатков после записи. Вместо чтения остатков до формирования движений установите Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина, запишите движения и уже затем запросом проверьте, не ушли ли остатки в минус. При минусе выставите Отказ = Истина, транзакция откатится.
  3. Разделение итогов. В свойствах регистра накопления включают «Разрешить разделение итогов». Параллельные документы перестают ждать друг друга на одной строке итогов.
  4. Виртуальные таблицы с периодичностью «Регистратор». В ОстаткиИОбороты можно задать периодичность Регистратор и получить обороты по каждому документу без ручной группировки.
  5. Минимум полей в движениях. Не дублируйте в регистр реквизиты, которые и так есть в документе: при необходимости их получают через ВЫРАЗИТЬ.
Проверка нового регистратора перед сдачей
Выполнено: 0 / 6

Отладка движений: чем и как искать ошибку

Отладчик конфигуратора

Поставьте точку останова в ОбработкаПроведения модуля объекта документа и запустите отладку (F5). Проведение идёт на сервере, поэтому в клиент-серверной базе на сервере должна быть включена отладка. В табло посмотрите Движения.ИмяРегистра после цикла: сколько строк сформировано и что в полях.

Консоль запросов

Внешняя обработка «Консоль запросов» помогает выбрать все записи регистра по документу (запрос из раздела про практику) и сравнить с тем, что документ должен был записать. Удобно сразу проверить ВидДвижения и Активность.

Замер производительности

Если документ проводится долго, включите в конфигураторе Отладка → Замер производительности, проведите документ и отключите замер. В результате видно, на какой строке модуля ушло время: обычно это запрос к остаткам или обращение к реквизитам через точку.

Тестирование и исправление информационной базы

Битые ссылки на удалённые регистраторы и записи без документа находит Администрирование → Тестирование и исправление в конфигураторе. Включите проверку логической и ссылочной целостности.

Тестирование с исправлением требует монопольного доступа: пользователей нужно выгнать из базы, их сеансы будут закрыты. Перед запуском сделайте выгрузку .dt.

Сверка после исправлений

После правки кода перепроведите документы за период и сравните остатки по регистру до и после. В БП 3.0 для этого есть групповое перепроведение в разделе «Операции», в своей конфигурации — простая обработка, которая перебирает документы и вызывает Записать(РежимЗаписиДокумента.Проведение).

Частые вопросы о регистраторах

Может ли у одного регистра быть несколько регистраторов?
Да. Регистратором регистра может быть любое число документов. Тип поля «Регистратор» тогда составной.
Может ли один документ быть регистратором нескольких регистров?
Да, это обычная ситуация. Реализация в БП 3.0 пишет проводки, движения по товарам, НДС и взаиморасчётам одновременно.
Чем регистратор отличается от последовательности документов?
Последовательность хранит порядок документов для восстановления расчётов, а регистратор — источник конкретных записей регистра. Документ может входить в последовательность и при этом быть регистратором.
Почему у записи регистра сведений нет регистратора?
Регистр работает в режиме «Независимый». Записи в нём создают вручную или кодом без связи с документом.
Что будет с движениями, если документ пометить на удаление?
Типовой документ при пометке на удаление отменяет проведение, и его движения удаляются. Физически документ исчезает после удаления помеченных объектов.