Правка движений регистра накопления: формы документа, корректировки и код
Содержание
Регистр накопления в 1С 8.3 редактируют не напрямую, а через документ-регистратор. Пользователь в БП 3.0 открывает движения документа кнопкой Дт/Кт, ставит флажок «Ручная корректировка (разрешает редактирование движений документа)» и правит строки на вкладке нужного регистра. Программист меняет записи через набор записей с отбором по регистратору. Третий путь, самый безопасный, — провести отдельный корректирующий документ.
Причина простая: каждая запись регистра накопления привязана к документу, который её создал. Записи «сами по себе» в нём не бывают. Поэтому изменить остатки или обороты в 1С можно только тремя способами: поправить исходный документ, поправить его движения или добавить новый документ с нужными движениями.
Как устроен регистр накопления и когда его правят
Регистр накопления хранит движения: сколько пришло, сколько ушло, какой оборот. Из них платформа считает итоги — остатки на дату и обороты за период. Примеры в БП 3.0: учёт НДС по покупкам и продажам, расчёты по партиям для налогового учёта. В УТ 11 — товары на складах, товары организаций, расчёты с клиентами.
Регистры бывают двух видов, и правка у них отличается:
| Вид регистра | Что хранит | Что видно в записи |
|---|---|---|
| Остатков | Приход и расход, из них — остаток на дату | Есть поле «Вид движения»: приход или расход |
| Оборотов | Только суммы за период, без остатка | Вида движения нет, только измерения и ресурсы |
Править регистр приходится в ситуациях, когда документом ошибку не исправить:
- 📦 после неудачного обмена или загрузки в базе остались «висящие» остатки без понятного источника;
- 🧾 отчёт по НДС или по партиям показывает сумму, которой нет в бухгалтерских проводках;
- 🔁 документ провели по старому алгоритму, а после обновления конфигурации перепроводить его нельзя — закрыт период;
- 🛠 в доработанной конфигурации ошибка в обработке проведения записала неверные движения.
Если ошибка в самом документе (не тот склад, не то количество) — исправьте документ и перепроведите его. Ручная правка движений поверх неверного документа даст расхождение между печатной формой и учётом.
Какими способами можно изменить данные регистра
Перед правкой полезно понять, какой инструмент подходит. Сравнение способов:
| Способ | Кто делает | Когда подходит | Риски |
|---|---|---|---|
| Исправить и перепровести документ | Пользователь | Ошибка в реквизитах документа | Минимальные, если период открыт |
| Ручная корректировка движений документа (БП 3.0) | Бухгалтер с правами | Нужно поменять одну-две строки конкретного документа | Правка теряется при снятии флажка |
| Документ «Операция» с движениями по регистрам (БП 3.0) | Бухгалтер | Нужно добавить или сторнировать движения отдельной датой | Нужно точно знать измерения регистра |
| Оприходование и списание товаров, инвентаризация | Кладовщик, бухгалтер | Расхождение складских остатков | Движения затрагивают и бухучёт |
| Набор записей в коде | Программист | Массовая правка, доработанные конфигурации | Можно испортить итоги, нужна копия |
| Пересчёт итогов | Администратор | Движения верные, а итоги врут | Нужен монопольный режим в Конфигураторе |
Пошаговая правка движений документа в БП 3.0
Самый частый случай: нужно отредактировать регистр накопления у одного документа в 1С:Бухгалтерии 3.0. Ниже порядок для интерфейса «Такси».
Шаг 1. Откройте движения документа
- Откройте документ из журнала.
- Нажмите кнопку
Дт/Ктв командной панели документа (подсказка у неё — «Показать проводки и другие движения документа»). - Откроется форма «Движения документа». Сверху — проводки, ниже или на соседних вкладках — регистры накопления и сведений, в которые документ сделал записи.
Вкладки показывают только те регистры, по которым у документа уже есть движения. Пустых вкладок нет.
Шаг 2. Включите ручную корректировку
Поставьте флажок «Ручная корректировка (разрешает редактирование движений документа)» вверху формы. Поля станут доступны для изменения.
Флажок фиксирует движения: при перепроведении документа программа их больше не пересчитывает. Это и плюс, и ловушка. Если позже вы исправите сумму в самом документе, регистр останется со старыми цифрами.
Шаг 3. Измените строки
На вкладке нужного регистра:
- ✏️ поменяйте значения ресурсов — количество, сумму, сумму НДС;
- ➕ добавьте строку, если движения не хватает, и заполните все измерения: организацию, контрагента, договор, счёт-фактуру и т. п.;
- ❌ удалите лишнюю строку.
Дату в строке и регистратор менять бесполезно: регистратор задан самим документом, а дата должна совпадать с датой документа, иначе остатки поедут на другой период.
Шаг 4. Запишите и проверьте
Нажмите «Записать и закрыть» в форме движений. Затем сформируйте отчёт, который строится по этому регистру: для регистров НДС — книгу покупок или продаж, для партий — оборотно-сальдовую ведомость по счёту с налоговыми суммами. Цифры должны сойтись с ожидаемыми.
Документы с ручной корректировкой видно в журнале по значку и по реквизиту. Перед закрытием месяца отберите их и проверьте: при групповом перепроведении такие документы не пересчитываются, и старая ошибка может «пережить» обновление алгоритма.
Чтобы вернуть автоматические движения, снимите флажок и перепроведите документ. Ручные изменения пропадут, регистр заполнится заново по данным документа.
Если нужно новое движение отдельной датой
Когда правку надо отразить не задним числом, а текущим периодом, используйте документ «Операция». Он находится в разделе Операции → Операции, введённые вручную. Создайте операцию, через командную панель документа добавьте к ней нужные регистры накопления и заполните строки так же, как в шаге 3. В отличие от правки старого документа, такая запись не трогает закрытые периоды.
Программное редактирование регистра накопления: примеры кода
Программист работает с объектом «НаборЗаписей». Он читает все записи одного регистратора, позволяет изменить их и записывает обратно целиком. Имя регистра ТоварыНаСкладах и его измерения в примерах условные: подставьте свои из дерева метаданных.
Изменить движения одного документа
&НаСервереБезКонтекста
Процедура ИсправитьКоличество(ДокументСсылка, Номенклатура, НовоеКоличество)
НачатьТранзакцию();
Попытка
Набор = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(ДокументСсылка);
Набор.Прочитать();
Для Каждого Запись Из Набор Цикл
Если Запись.Номенклатура = Номенклатура Тогда
Запись.Количество = НовоеКоличество;
КонецЕсли;
КонецЦикла;
Набор.Записать(); // режим замещения: старые записи регистратора заменяются
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
Что здесь важно:
- 🔑 отбор по регистратору обязателен. Без него
Записать()в режиме замещения не поймёт, какие записи заменять; - 📖
Прочитать()перед правкой. Иначе вы запишете пустой набор и сотрёте все движения документа; - 🧮 итоги регистра платформа обновит сама при записи набора, отдельный пересчёт не нужен.
Добавить запись в регистр остатков
Запись = Набор.Добавить();
Запись.Период = ДокументСсылка.Дата;
Запись.ВидДвижения = ВидДвиженияНакопления.Расход;
Запись.Активность = Истина;
Запись.Склад = Склад;
Запись.Номенклатура = Номенклатура;
Запись.Количество = 5;
Строку добавляют в уже прочитанный набор, затем вызывают Набор.Записать(). Для регистра оборотов свойства ВидДвижения нет — строку с ним код не пропустит.
Найти отрицательные остатки после правки
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Остатки.Склад,
| Остатки.Номенклатура,
| Остатки.КоличествоОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
|ГДЕ
| Остатки.КоличествоОстаток < 0";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить(СтрШаблон("%1, %2: %3",
Выборка.Склад, Выборка.Номенклатура, Выборка.КоличествоОстаток));
КонецЦикла;
Запрос стоит выполнить до и после правки. Если список отрицательных остатков вырос, вы списали лишнее.
Отключить проверки при записи
Если в модуле набора записей есть обработчик ПередЗаписью, он может отклонить вашу правку или дописать свои строки. На время служебной записи ставят Набор.ОбменДанными.Загрузка = Истина перед Записать(). Тогда обработчики модуля набора не выполняются.
Флаг загрузки отключает и проверки, которые защищают учёт. Используйте его только в разовой обработке и только когда понимаете, что делает обработчик.
Какие ошибки ломают регистр и как их не допустить
Правка регистра накопления в 1С ломается не на сложных местах, а на мелочах. Чаще других встречаются пять ошибок:
- Запись набора без отбора по регистратору. Код выполнится, но заменит не те записи или выдаст ошибку о незаполненном регистраторе.
- Правка без проверки закрытого периода. Изменение старого документа в БП меняет данные прошлых отчётов. Если декларация уже сдана, расхождение всплывёт при камеральной проверке.
- Правка регистра без проводок. Многие регистры БП дублируют бухгалтерский учёт. Изменили сумму в регистре НДС — проверьте, что проводка по счёту 19 или 68 тоже соответствует.
- Незаполненное измерение. Строка без договора или без счёта-фактуры попадает в отчёты отдельной строкой «пусто» и не закрывается последующими документами.
- Ручная корректировка, о которой забыли. Через полгода документ перепроводят после исправления реквизитов, а движения остаются старыми.
Перед любой правкой движений в рабочей базе сделайте резервную копию. В файловом варианте достаточно выгрузки в .dt через Администрирование → Выгрузить информационную базу в Конфигураторе, в клиент-серверном — копии средствами СУБД.
Отличия правки регистров в БП, УТ и самописных конфигурациях
Механизм регистра одинаков для всей платформы 8.3. Различаются инструменты, которые конфигурация даёт пользователю.
| Конфигурация | Чем править движения | Чем исправлять остатки товаров |
|---|---|---|
| Бухгалтерия предприятия 3.0 | Флажок ручной корректировки в форме Дт/Кт, документ «Операция» | Инвентаризация товаров, оприходование и списание товаров (раздел Склад) |
| Управление торговлей 11 | Флажка ручной корректировки в типовых формах нет, правят документом или кодом | Пересчёт товаров, оприходование излишков и списание недостач (раздел Склад и доставка) |
| Самописная или сильно доработанная | Зависит от разработчика, обычно только код | Документы, которые предусмотрел разработчик |
В УТ 11 регистров накопления значительно больше, чем в БП, и многие связаны между собой. Остаток товара хранится сразу в нескольких: на складе, у организации, в резерве под заказ. Если поправить один регистр кодом, остальные останутся прежними. Поэтому в УТ 11 правильнее исправлять складские остатки документами, а не прямой записью в регистр.
Чтобы узнать, какие регистры затрагивает документ, откройте его в Конфигураторе и посмотрите вкладку «Движения». В пользовательском режиме то же видно в отчёте о движениях документа, если он есть в вашей конфигурации.
Обработки и инструменты для массовой правки
Ручная корректировка годится для единичных документов. Когда неверных движений десятки, их правят обработками.
Режим «Все функции»
Включается в главном меню Сервис → Параметры флажком «Отображать команду “Все функции”». После этого меню «Все функции» открывает любой регистр накопления как список. Список удобен для поиска и отбора: видно регистратор, период, измерения. Но добавить или изменить запись прямо в списке нельзя, поскольку все записи регистра накопления подчинены регистратору. Двойной щелчок по строке открывает документ-регистратор.
Внешняя обработка
Для массовой правки программист пишет внешнюю обработку
(.epf) по образцу кода выше: запрос отбирает регистраторы с ошибкой, цикл переписывает набор каждого из них. Порядок работы:
- Выгрузите базу и разверните копию.
- Прогоните обработку на копии, сверьте отчёты до и после.
- Запустите на рабочей базе, лучше в нерабочее время.
- Сохраните список изменённых документов — он пригодится при проверке.
В БП 3.0 внешнюю обработку подключают через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки либо открывают через меню Файл → Открыть, если у пользователя есть права на открытие внешних обработок.
Пересчёт итогов
Если движения верные, а остатки в отчётах неправильные, проблема в итогах. Их пересчитывают двумя способами:
- 🔧 в Конфигураторе:
Администрирование → Тестирование и исправление, флажок «Пересчёт итогов». Нужен монопольный режим, поэтому всех пользователей придётся вывести из базы; - 💻 кодом:
РегистрыНакопления.ТоварыНаСкладах.ПересчитатьИтоги(). Монопольный режим не требуется, но на большом регистре процедура идёт долго и блокирует таблицы итогов.
Пересчёт итогов в рабочее время замедлит работу всех пользователей, а запуск тестирования в Конфигураторе потребует закрыть все сеансы. Планируйте его на вечер или выходной.
Частые вопросы
Можно ли удалить запись регистра накопления, не удаляя документ?
Удалить() и запишите набор.