Правка движений регистра накопления: формы документа, корректировки и код

· 10 мин

Содержание

Регистр накопления в 1С 8.3 редактируют не напрямую, а через документ-регистратор. Пользователь в БП 3.0 открывает движения документа кнопкой Дт/Кт, ставит флажок «Ручная корректировка (разрешает редактирование движений документа)» и правит строки на вкладке нужного регистра. Программист меняет записи через набор записей с отбором по регистратору. Третий путь, самый безопасный, — провести отдельный корректирующий документ.

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

Как устроен регистр накопления и когда его правят

Регистр накопления хранит движения: сколько пришло, сколько ушло, какой оборот. Из них платформа считает итоги — остатки на дату и обороты за период. Примеры в БП 3.0: учёт НДС по покупкам и продажам, расчёты по партиям для налогового учёта. В УТ 11 — товары на складах, товары организаций, расчёты с клиентами.

Регистры бывают двух видов, и правка у них отличается:

Вид регистраЧто хранитЧто видно в записи
ОстатковПриход и расход, из них — остаток на датуЕсть поле «Вид движения»: приход или расход
ОборотовТолько суммы за период, без остаткаВида движения нет, только измерения и ресурсы

Править регистр приходится в ситуациях, когда документом ошибку не исправить:

  • 📦 после неудачного обмена или загрузки в базе остались «висящие» остатки без понятного источника;
  • 🧾 отчёт по НДС или по партиям показывает сумму, которой нет в бухгалтерских проводках;
  • 🔁 документ провели по старому алгоритму, а после обновления конфигурации перепроводить его нельзя — закрыт период;
  • 🛠 в доработанной конфигурации ошибка в обработке проведения записала неверные движения.

Если ошибка в самом документе (не тот склад, не то количество) — исправьте документ и перепроведите его. Ручная правка движений поверх неверного документа даст расхождение между печатной формой и учётом.

Какими способами можно изменить данные регистра

Перед правкой полезно понять, какой инструмент подходит. Сравнение способов:

СпособКто делаетКогда подходитРиски
Исправить и перепровести документПользовательОшибка в реквизитах документаМинимальные, если период открыт
Ручная корректировка движений документа (БП 3.0)Бухгалтер с правамиНужно поменять одну-две строки конкретного документаПравка теряется при снятии флажка
Документ «Операция» с движениями по регистрам (БП 3.0)БухгалтерНужно добавить или сторнировать движения отдельной датойНужно точно знать измерения регистра
Оприходование и списание товаров, инвентаризацияКладовщик, бухгалтерРасхождение складских остатковДвижения затрагивают и бухучёт
Набор записей в кодеПрограммистМассовая правка, доработанные конфигурацииМожно испортить итоги, нужна копия
Пересчёт итоговАдминистраторДвижения верные, а итоги врутНужен монопольный режим в Конфигураторе
Что у вас не так с регистром?

Пошаговая правка движений документа в БП 3.0

Самый частый случай: нужно отредактировать регистр накопления у одного документа в 1С:Бухгалтерии 3.0. Ниже порядок для интерфейса «Такси».

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

  1. Откройте документ из журнала.
  2. Нажмите кнопку Дт/Кт в командной панели документа (подсказка у неё — «Показать проводки и другие движения документа»).
  3. Откроется форма «Движения документа». Сверху — проводки, ниже или на соседних вкладках — регистры накопления и сведений, в которые документ сделал записи.

Вкладки показывают только те регистры, по которым у документа уже есть движения. Пустых вкладок нет.

Шаг 2. Включите ручную корректировку

Поставьте флажок «Ручная корректировка (разрешает редактирование движений документа)» вверху формы. Поля станут доступны для изменения.

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

Шаг 3. Измените строки

На вкладке нужного регистра:

  • ✏️ поменяйте значения ресурсов — количество, сумму, сумму НДС;
  • ➕ добавьте строку, если движения не хватает, и заполните все измерения: организацию, контрагента, договор, счёт-фактуру и т. п.;
  • ❌ удалите лишнюю строку.

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

Шаг 4. Запишите и проверьте

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

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

Чтобы вернуть автоматические движения, снимите флажок и перепроведите документ. Ручные изменения пропадут, регистр заполнится заново по данным документа.

Если нужно новое движение отдельной датой

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

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

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

Изменить движения одного документа

&НаСервереБезКонтекста
Процедура ИсправитьКоличество(ДокументСсылка, Номенклатура, НовоеКоличество)

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

		Для Каждого Запись Из Набор Цикл
			Если Запись.Номенклатура = Номенклатура Тогда
				Запись.Количество = НовоеКоличество;
			КонецЕсли;
		КонецЦикла;

		Набор.Записать(); // режим замещения: старые записи регистратора заменяются
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;

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

Что здесь важно:

  • 🔑 отбор по регистратору обязателен. Без него Записать() в режиме замещения не поймёт, какие записи заменять;
  • 📖 Прочитать() перед правкой. Иначе вы запишете пустой набор и сотрёте все движения документа;
  • 🧮 итоги регистра платформа обновит сама при записи набора, отдельный пересчёт не нужен.

Добавить запись в регистр остатков

Запись = Набор.Добавить();
Запись.Период       = ДокументСсылка.Дата;
Запись.ВидДвижения  = ВидДвиженияНакопления.Расход;
Запись.Активность   = Истина;
Запись.Склад        = Склад;
Запись.Номенклатура = Номенклатура;
Запись.Количество   = 5;

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

Найти отрицательные остатки после правки

Запрос = Новый Запрос;
Запрос.Текст =
	"ВЫБРАТЬ
	|	Остатки.Склад,
	|	Остатки.Номенклатура,
	|	Остатки.КоличествоОстаток
	|ИЗ
	|	РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
	|ГДЕ
	|	Остатки.КоличествоОстаток < 0";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
	Сообщить(СтрШаблон("%1, %2: %3",
		Выборка.Склад, Выборка.Номенклатура, Выборка.КоличествоОстаток));
КонецЦикла;

Запрос стоит выполнить до и после правки. Если список отрицательных остатков вырос, вы списали лишнее.

Отключить проверки при записи

Если в модуле набора записей есть обработчик ПередЗаписью, он может отклонить вашу правку или дописать свои строки. На время служебной записи ставят Набор.ОбменДанными.Загрузка = Истина перед Записать(). Тогда обработчики модуля набора не выполняются.

Флаг загрузки отключает и проверки, которые защищают учёт. Используйте его только в разовой обработке и только когда понимаете, что делает обработчик.

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

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

  1. Запись набора без отбора по регистратору. Код выполнится, но заменит не те записи или выдаст ошибку о незаполненном регистраторе.
  2. Правка без проверки закрытого периода. Изменение старого документа в БП меняет данные прошлых отчётов. Если декларация уже сдана, расхождение всплывёт при камеральной проверке.
  3. Правка регистра без проводок. Многие регистры БП дублируют бухгалтерский учёт. Изменили сумму в регистре НДС — проверьте, что проводка по счёту 19 или 68 тоже соответствует.
  4. Незаполненное измерение. Строка без договора или без счёта-фактуры попадает в отчёты отдельной строкой «пусто» и не закрывается последующими документами.
  5. Ручная корректировка, о которой забыли. Через полгода документ перепроводят после исправления реквизитов, а движения остаются старыми.

Перед любой правкой движений в рабочей базе сделайте резервную копию. В файловом варианте достаточно выгрузки в .dt через Администрирование → Выгрузить информационную базу в Конфигураторе, в клиент-серверном — копии средствами СУБД.

Отличия правки регистров в БП, УТ и самописных конфигурациях

Механизм регистра одинаков для всей платформы 8.3. Различаются инструменты, которые конфигурация даёт пользователю.

КонфигурацияЧем править движенияЧем исправлять остатки товаров
Бухгалтерия предприятия 3.0Флажок ручной корректировки в форме Дт/Кт, документ «Операция»Инвентаризация товаров, оприходование и списание товаров (раздел Склад)
Управление торговлей 11Флажка ручной корректировки в типовых формах нет, правят документом или кодомПересчёт товаров, оприходование излишков и списание недостач (раздел Склад и доставка)
Самописная или сильно доработаннаяЗависит от разработчика, обычно только кодДокументы, которые предусмотрел разработчик

В УТ 11 регистров накопления значительно больше, чем в БП, и многие связаны между собой. Остаток товара хранится сразу в нескольких: на складе, у организации, в резерве под заказ. Если поправить один регистр кодом, остальные останутся прежними. Поэтому в УТ 11 правильнее исправлять складские остатки документами, а не прямой записью в регистр.

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

Обработки и инструменты для массовой правки

Ручная корректировка годится для единичных документов. Когда неверных движений десятки, их правят обработками.

Режим «Все функции»

Включается в главном меню Сервис → Параметры флажком «Отображать команду “Все функции”». После этого меню «Все функции» открывает любой регистр накопления как список. Список удобен для поиска и отбора: видно регистратор, период, измерения. Но добавить или изменить запись прямо в списке нельзя, поскольку все записи регистра накопления подчинены регистратору. Двойной щелчок по строке открывает документ-регистратор.

Внешняя обработка

Для массовой правки программист пишет внешнюю обработку (.epf) по образцу кода выше: запрос отбирает регистраторы с ошибкой, цикл переписывает набор каждого из них. Порядок работы:

  1. Выгрузите базу и разверните копию.
  2. Прогоните обработку на копии, сверьте отчёты до и после.
  3. Запустите на рабочей базе, лучше в нерабочее время.
  4. Сохраните список изменённых документов — он пригодится при проверке.

В БП 3.0 внешнюю обработку подключают через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки либо открывают через меню Файл → Открыть, если у пользователя есть права на открытие внешних обработок.

Пересчёт итогов

Если движения верные, а остатки в отчётах неправильные, проблема в итогах. Их пересчитывают двумя способами:

  • 🔧 в Конфигураторе: Администрирование → Тестирование и исправление, флажок «Пересчёт итогов». Нужен монопольный режим, поэтому всех пользователей придётся вывести из базы;
  • 💻 кодом: РегистрыНакопления.ТоварыНаСкладах.ПересчитатьИтоги(). Монопольный режим не требуется, но на большом регистре процедура идёт долго и блокирует таблицы итогов.

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

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

Можно ли удалить запись регистра накопления, не удаляя документ?
Да. В БП 3.0 — через ручную корректировку движений документа: удалите строку и запишите. В коде — прочитайте набор по регистратору, удалите запись методом Удалить() и запишите набор.
Почему после перепроведения ручная правка пропала?
Значит, флажок ручной корректировки был снят или правку делали кодом. При проведении документ заново формирует свои движения и затирает старые.
Можно ли изменить период записи регистра, чтобы перенести остаток на другую дату?
Технически поле периода в наборе доступно, но так делать не стоит: запись перестанет совпадать с датой документа. Правильнее сторнировать движение старым документом и создать новый на нужную дату.
Какие права нужны для ручной корректировки движений в БП 3.0?
Флажок доступен пользователям с полными правами или с ролью, разрешающей редактирование движений. Если флажок серый, обратитесь к администратору базы.
Что делать, если регистр накопления показывает остаток, а в оборотно-сальдовой ведомости его нет?
Регистр и бухгалтерские проводки разошлись. Найдите документ с разницей отчётом по регистру с детализацией до регистратора и поправьте ту часть, которая неверна: проводку или движение регистра.