Разработка и Конфигурация · 10 мин
1С 8: как очистить все реквизиты документа
Как очистить все реквизиты документа в 1С 8: встроенный язык, обработчики, групповая обработка. Примеры кода, риски, проверка результата и типичные ошибки.
Очистка всех реквизитов документа в 1С 8 — задача, которая возникает при тестировании конфигурации, подготовке демонстрационной базы, исправлении ошибочно введённых документов и при разработке обработок заполнения. В зависимости от ситуации применяются разные подходы: программный перебор реквизитов объекта, стандартные обработчики, типовые механизмы группового изменения или ручная корректировка.
Важно понимать разницу между очисткой реквизитов шапки, табличных частей и движений документа. Проведённый документ хранит данные не только в реквизитах, но и в регистрах, поэтому простое обнуление полей не отменяет его влияние на учёт. Перед любыми массовыми изменениями обязательно делается резервная копия информационной базы.
Ниже разобраны рабочие способы очистки: от простого цикла по метаданным до групповой обработки, а также ограничения, типичные ошибки и способы проверки результата.
Что именно нужно очищать: шапка, табличные части и движения
Документ в 1С 8 состоит из нескольких логических частей. Реквизиты шапки — это поля вроде номера, даты, контрагента, организации, комментария. Табличные части — списки товаров, услуг, сотрудников и прочих строк. Движения — записи в регистрах (накопления, сведений, бухгалтерии), которые документ формирует при проведении.
Очистка реквизитов шапки и табличных частей не затрагивает движения автоматически. Если документ проведён, его записи в регистрах останутся до тех пор, пока не будет отменено проведение или документ не будет перепроведён с пустыми данными. Это частая причина «фантомных» остатков: пользователь обнулил поля, а отчёты продолжают показывать старые суммы.
Также учитывайте стандартные реквизиты: номер и дату очистить нельзя — они обязательны для существования документа. Ссылка, пометка удаления и признак проведения — это не реквизиты в обычном смысле, а системные свойства объекта, и управляются они отдельными методами.
Программная очистка реквизитов через метаданные
Универсальный способ — перебрать коллекцию реквизитов через объект метаданных документа и присвоить каждому неопределённое или пустое значение. Такой код не зависит от конкретной конфигурации и работает для любого вида документов.
Ключевой приём — метод Метаданные() объекта документа и коллекция Реквизиты. Для каждого реквизита берётся его тип, и полю присваивается пустое значение этого типа через ОписаниеТипа.ПривестиЗначение(). Это безопаснее, чем присваивать Неопределено, потому что некоторые типизированные поля не принимают Неопределено без ошибки при записи.
Процедура ОчиститьРеквизитыДокумента(ДокОбъект) Экспорт
МетаданныеДокумента = ДокОбъект.Метаданные();
Для Каждого Реквизит Из МетаданныеДокумента.Реквизиты Цикл
ПустоеЗначение = Реквизит.Тип.ПривестиЗначение();
ДокОбъект[Реквизит.Имя] = ПустоеЗначение;
КонецЦикла;
Для Каждого ТабличнаяЧасть Из МетаданныеДокумента.ТабличныеЧасти Цикл
ДокОбъект[ТабличнаяЧасть.Имя].Очистить();
КонецЦикла;
КонецПроцедурыПример вызова для конкретного документа: получить объект по ссылке, передать его в процедуру, затем записать. Если документ проведён, запись в режиме РежимЗаписиДокумента.Запись сохранит изменения без перепроведения, но движения останутся — об этом ниже.
ДокОбъект = ДокументСсылка.ПолучитьОбъект();
Если ДокОбъект.Проведен Тогда
ДокОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
ОчиститьРеквизитыДокумента(ДокОбъект);
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);Очистка табличных частей и стандартных реквизитов
Табличные части очищаются методом Очистить(), который удаляет все строки. Перебирать строки и удалять их по одной не нужно — это медленнее и бессмысленно. Если требуется удалить не все строки, а только часть по условию, используйте цикл с обратным индексом или метод НайтиСтроки() с последующим удалением найденных.
Стандартные реквизиты шапки, которые можно менять, — это, например, «Комментарий» и «Ответственный» (если он определён как реквизит). Номер и дата изменяются, но не очищаются: платформа не позволит записать документ с пустой датой. Организация и другие ключевые реквизиты в типовых конфигурациях часто проверяются обработчиками заполнения и проверки — при записи с пустыми значениями может сработать контроль и запись будет отклонена.
Очистка через ОбменДанными.Загрузка
Установка ДокОбъект.ОбменДанными.Загрузка = Истина отключает обработчики событий и проверки при записи. Это удобно для служебных обработок, но опасно: пропускаются все контрольные механизмы, включая подписки на события, которые могут поддерживать целостность связанных данных. Используйте режим только в тестовых базах или когда точно понимаете, какие обработчики будут пропущены.
Очистка движений проведённого документа
Если задача — полностью «обнулить» документ в учёте, одной очистки реквизитов недостаточно. Движения удаляются двумя способами: отменой проведения (Записать(РежимЗаписиДокумента.ОтменаПроведения)) или установкой пометки удаления. Второй вариант предпочтительнее, если документ вообще не нужен: помеченный документ не участвует в отчётах, а физически удаляется штатной обработкой «Удаление помеченных объектов».
Ручная очистка наборов записей через коллекцию Движения объекта возможна, но это низкоуровневый приём: для каждого регистра нужно вызвать Очистить() и записать набор. В типовых сценариях он не требуется — отмена проведения делает то же самое корректно.
Групповая очистка без программирования
Если нужно очистить реквизиты у множества документов, а писать код нет возможности, используйте типовую обработку «Групповое изменение реквизитов» (в конфигурациях на БСП она доступна в разделе администрирования). Она позволяет выбрать вид документов, отбор по условиям и установить выбранным реквизитам новое значение, включая пустое.
Ограничение обработки: она работает с реквизитами шапки и не очищает табличные части, а также не отменяет проведение. Для проведённых документов потребуется отдельная операция отмены проведения или пометки на удаление. Внешние универсальные обработки «поиск и замена значений» дают больше гибкости, но должны применяться с той же осторожностью.
Сравнение вариантов
Полный контроль: шапка, табличные части, движения. Требует навыков разработки и тестирования.
Без кода, только реквизиты шапки, не трогает табличные части и проведение.
Подходит, если документ не нужен вовсе; очищает влияние на учёт, но не поля объекта.
Для единичных документов; медленно и подвержено ошибкам при большом числе полей.
Проверка результата и типичные ошибки
После очистки откройте документ в пользовательском режиме и убедитесь, что поля пустые, табличные части не содержат строк, а статус проведения соответствует ожиданию. Для проведённых ранее документов дополнительно сформируйте отчёт по регистрам, которые документ двигал, — остатки по нему должны исчезнуть после отмены проведения.
Программно результат проверяется чтением объекта: перебор реквизитов с проверкой на пустое значение через ЗначениеЗаполнено() и контроль количества строк табличных частей методом Количество().
Как проверить результат
Поля пустые или содержат значения по умолчанию
Часть полей сохранила старые значения — вероятно, сработал обработчик заполнения
Ноль строк
Строки остались — очистка не выполнялась или объект не был записан
Движений документа нет
Остатки на месте — проведение не отменено
FAQ
Можно ли очистить реквизиты документа без программирования?
Да, для реквизитов шапки подойдёт типовая обработка «Групповое изменение реквизитов» в конфигурациях на Библиотеке стандартных подсистем. Табличные части и движения она не обрабатывает — для них нужен код или пометка на удаление.
Почему после очистки полей отчёты всё равно показывают суммы документа?
Потому что отчёты строятся по регистрам, а не по реквизитам документа. Записи в регистрах удаляются только при отмене проведения, перепроведении с пустыми данными или пометке документа на удаление.
Чем отличается очистка реквизитов от пометки на удаление?
Очистка обнуляет поля, но документ остаётся в базе и, если проведён, продолжает влиять на учёт. Пометка на удаление исключает документ из отчётов и проведения, а физически он удаляется штатной обработкой удаления помеченных объектов.
Как очистить только часть реквизитов, а не все?
В программном варианте добавьте в цикл по метаданным условие по имени реквизита или ведите список исключений. В обработке группового изменения просто отметьте только нужные реквизиты для установки значения.
Что делать, если документ с очищенными полями не записывается?
Скорее всего, срабатывает проверка заполнения обязательных реквизитов или обработчик записи. Посмотрите текст ошибки: в нём указано, какое поле не заполнено. Варианты — оставить обязательные поля заполненными либо выполнять операцию в тестовой базе с отключёнными проверками.
Очищаются ли номер и дата документа?
Нет. Номер и дата — обязательные стандартные реквизиты, платформа не позволит записать документ с пустой датой. Их можно изменить, но не очистить.
Что важно запомнить
Полная очистка документа включает три уровня: реквизиты шапки (перебор через метаданные), табличные части (метод Очистить) и движения (отмена проведения или пометка удаления). Любые массовые операции выполняются только после резервного копирования и предварительной проверки на копии базы.