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

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

1С 8: как очистить все реквизиты документа

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

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

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

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

Что именно нужно очищать: шапка, табличные части и движения

Документ в 1С 8 состоит из нескольких логических частей. Реквизиты шапки — это поля вроде номера, даты, контрагента, организации, комментария. Табличные части — списки товаров, услуг, сотрудников и прочих строк. Движения — записи в регистрах (накопления, сведений, бухгалтерии), которые документ формирует при проведении.

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

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

Программная очистка реквизитов через метаданные

Универсальный способ — перебрать коллекцию реквизитов через объект метаданных документа и присвоить каждому неопределённое или пустое значение. Такой код не зависит от конкретной конфигурации и работает для любого вида документов.

Ключевой приём — метод Метаданные() объекта документа и коллекция Реквизиты. Для каждого реквизита берётся его тип, и полю присваивается пустое значение этого типа через ОписаниеТипа.ПривестиЗначение(). Это безопаснее, чем присваивать Неопределено, потому что некоторые типизированные поля не принимают Неопределено без ошибки при записи.

1c
Процедура ОчиститьРеквизитыДокумента(ДокОбъект) Экспорт
	МетаданныеДокумента = ДокОбъект.Метаданные();
	Для Каждого Реквизит Из МетаданныеДокумента.Реквизиты Цикл
		ПустоеЗначение = Реквизит.Тип.ПривестиЗначение();
		ДокОбъект[Реквизит.Имя] = ПустоеЗначение;
	КонецЦикла;
	Для Каждого ТабличнаяЧасть Из МетаданныеДокумента.ТабличныеЧасти Цикл
		ДокОбъект[ТабличнаяЧасть.Имя].Очистить();
	КонецЦикла;
КонецПроцедуры

Пример вызова для конкретного документа: получить объект по ссылке, передать его в процедуру, затем записать. Если документ проведён, запись в режиме РежимЗаписиДокумента.Запись сохранит изменения без перепроведения, но движения останутся — об этом ниже.

1c
ДокОбъект = ДокументСсылка.ПолучитьОбъект();
Если ДокОбъект.Проведен Тогда
	ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
ОчиститьРеквизитыДокумента(ДокОбъект);
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);

Очистка табличных частей и стандартных реквизитов

Табличные части очищаются методом Очистить(), который удаляет все строки. Перебирать строки и удалять их по одной не нужно — это медленнее и бессмысленно. Если требуется удалить не все строки, а только часть по условию, используйте цикл с обратным индексом или метод НайтиСтроки() с последующим удалением найденных.

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

Очистка через ОбменДанными.Загрузка

Установка ДокОбъект.ОбменДанными.Загрузка = Истина отключает обработчики событий и проверки при записи. Это удобно для служебных обработок, но опасно: пропускаются все контрольные механизмы, включая подписки на события, которые могут поддерживать целостность связанных данных. Используйте режим только в тестовых базах или когда точно понимаете, какие обработчики будут пропущены.

Очистка движений проведённого документа

Если задача — полностью «обнулить» документ в учёте, одной очистки реквизитов недостаточно. Движения удаляются двумя способами: отменой проведения (Записать(РежимЗаписиДокумента.ОтменаПроведения)) или установкой пометки удаления. Второй вариант предпочтительнее, если документ вообще не нужен: помеченный документ не участвует в отчётах, а физически удаляется штатной обработкой «Удаление помеченных объектов».

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

Групповая очистка без программирования

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

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

Сравнение вариантов

Программный перебор метаданных

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

Групповое изменение реквизитов

Без кода, только реквизиты шапки, не трогает табличные части и проведение.

Пометка на удаление

Подходит, если документ не нужен вовсе; очищает влияние на учёт, но не поля объекта.

Ручная правка в форме

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

Проверка результата и типичные ошибки

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

Программно результат проверяется чтением объекта: перебор реквизитов с проверкой на пустое значение через ЗначениеЗаполнено() и контроль количества строк табличных частей методом Количество().

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

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

Реквизиты шапки в форме документа
Норма

Поля пустые или содержат значения по умолчанию

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

Часть полей сохранила старые значения — вероятно, сработал обработчик заполнения

Табличные части
Норма

Ноль строк

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

Строки остались — очистка не выполнялась или объект не был записан

Отчёты по регистрам
Норма

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

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

Остатки на месте — проведение не отменено

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

FAQ

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

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

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

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

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

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

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

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

Что делать, если документ с очищенными полями не записывается?

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

Очищаются ли номер и дата документа?

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

Итог

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

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