Справочники и Данные · 12 мин
Как очистить реквизит документа в 1С
Способы очистить реквизит документа в 1С: вручную, через групповую обработку и кодом. Проверка результата, типичные ошибки и меры безопасности перед изменением данных.
Очистка реквизита документа — типовая задача, которая возникает при исправлении ошибочно заполненных данных, подготовке базы к свёртке, удалении устаревших значений или нормализации аналитики. В зависимости от масштаба задачи применяются разные методы: ручное редактирование одного документа, групповая обработка для десятков объектов или программная очистка через встроенный язык 1С.
Главный риск при очистке реквизитов — нарушение целостности данных. Если реквизит участвует в проведении, проверках заполнения, нумерации или обменах, его удаление может привести к ошибкам при перепроведении, расхождениям в отчётах и сбоям синхронизации. Поэтому перед массовыми изменениями обязательно делается резервная копия и анализируется, где используется очищаемое значение.
Ниже разобраны рабочие способы очистки для управляемых и обычных форм, условия выбора метода, примеры кода и контрольные точки для проверки результата.
Когда требуется очистка реквизита и что проверить заранее
Очистка реквизита нужна в нескольких типовых ситуациях: значение заполнено ошибочно и мешает корректному учёту; реквизит больше не используется после изменения методологии учёта; данные попали в документ при загрузке из внешней системы с ошибками; требуется убрать устаревшие ссылки на помеченные на удаление объекты.
Перед очисткой выясните три вещи. Во-первых, участвует ли реквизит в проведении: если его значение попадает в движения по регистрам, очистка без перепроведения оставит в учёте старые данные. Во-вторых, есть ли на реквизит проверка заполнения — тогда документ нельзя будет записать с пустым значением без изменения конфигурации. В-третьих, передаётся ли реквизит в обмены с другими базами: очистка в одной системе может вызвать конфликты при синхронизации.
Ручная очистка реквизита в форме документа
Для одного или нескольких документов самый безопасный способ — ручное редактирование. Откройте документ, найдите нужное поле, выделите значение и удалите его клавишей Delete или Backspace, затем запишите документ. Если документ проведён, система предложит перепровести его — соглашайтесь, чтобы движения по регистрам обновились.
Для реквизитов ссылочного типа в управляемых формах удобно использовать кнопку очистки (крестик) справа от поля ввода. Для реквизитов в табличной части очистка выполняется в каждой строке отдельно либо через контекстное меню строки.
Если поле недоступно для редактирования, возможные причины: документ проведён и форма заблокирована настройками, у пользователя нет прав на изменение, включён запрет изменения данных в закрытом периоде (дата запрета редактирования). В последнем случае потребуется администратор с правом изменения даты запрета.
Массовая очистка через групповое изменение реквизитов
Когда документов десятки или сотни, ручная работа нерациональна. В типовых конфигурациях на управляемых формах (БСП) есть встроенная обработка «Групповое изменение реквизитов». Она открывается из списка документов: выделите нужные строки, вызовите контекстное меню или кнопку «Ещё» и выберите пункт «Изменить выделенные». В обычных формах и в разделе «Администрирование» доступна похожая обработка «Групповая обработка справочников и документов».
Порядок работы типовой: выберите в списке реквизит для изменения, оставьте новое значение пустым (или установите признак очистки, если обработка его предлагает), запустите выполнение. Обработка последовательно открывает каждый объект, меняет значение и записывает документ. В конце она показывает отчёт: сколько объектов изменено и какие не удалось обработать с указанием причин.
- 1Сделайте резервную копию базы или выгрузку данных
- 2Откройте список документов и отберите нужные записи отбором
- 3Выделите документы и запустите «Изменить выделенные» (групповое изменение реквизитов)
- 4Выберите реквизит и задайте пустое значение
- 5Запустите обработку и изучите отчёт о необработанных объектах
- 6Проверьте несколько документов вручную и при необходимости перепроведите их
Учтите ограничение: групповая обработка записывает документы в обычном режиме, поэтому сработают все проверки заполнения и контроли закрытого периода. Документы, не прошедшие проверки, останутся без изменений — их придётся обрабатывать индивидуально.
Программная очистка через встроенный язык
Для сложных условий отбора, больших объёмов или регулярных операций используют программный способ. Документ выбирается запросом или выборкой, затем для каждого объекта реквизиту присваивается пустое значение и объект записывается.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Дата МЕЖДУ &Начало И &Конец
| И НЕ РеализацияТоваровУслуг.Комментарий = """"";
Запрос.УстановитьПараметр("Начало", НачалоГода(ТекущаяДатаСеанса()));
Запрос.УстановитьПараметр("Конец", КонецГода(ТекущаяДатаСеанса()));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
ДокОбъект.Комментарий = "";
ДокОбъект.Записать();
КонецЦикла;
Для ссылочных реквизитов пустое значение задаётся через Неопределено либо через пустую ссылку конкретного типа, например Справочники.Контрагенты.ПустаяСсылка(). Если реквизит составного типа, безопаснее присваивать Неопределено.
Режим записи выбирайте осознанно. Записать() без параметров просто сохраняет документ; для проведённых документов используйте Записать(РежимЗаписиДокумента.Проведение), чтобы пересчитались движения, или РежимЗаписиДокумента.ОтменаПроведения, если проведение нужно снять. Вызов с параметром РежимЗаписиДокумента.Запись сохранит объект без перепроведения — движения при этом не изменятся.
При программной очистке большого массива записывайте объекты в транзакции порциями (например, по 100–500 документов), а не в одной гигантской транзакции. Так проще откатиться при ошибке и меньше риск блокировок в многопользовательском режиме. Перед запуском на рабочей базе выполните код на копии и посчитайте, сколько объектов попало в выборку.
Очистка реквизита табличной части
Реквизиты табличной части очищаются отдельно для каждой строки. Групповая обработка типовых конфигураций обычно работает только с реквизитами шапки, поэтому для табличных частей чаще всего нужен программный способ.
ДокОбъект = Ссылка.ПолучитьОбъект();
Для Каждого Строка Из ДокОбъект.Товары Цикл
Строка.Серия = Неопределено;
КонецЦикла;
ДокОбъект.Записать();
Если требуется очистить табличную часть целиком, используйте метод ДокОбъект.Товары.Очистить(). Но оцените последствия: у проведённого документа очистка табличной части без перепроведения оставит в регистрах старые движения, а при перепроведении движения будут удалены полностью, что может обнулить учётные остатки по этому документу.
Сравнение способов очистки
Подходит для 1–5 документов. Полный контроль, но медленно и риск пропустить документ при большем объёме.
Оптимально для десятков и сотен документов без программирования. Ограничение: работает с реквизитами шапки и соблюдает все проверки, часть объектов может не обработаться.
Для больших объёмов, сложных отборов и табличных частей. Требует навыков разработки и обязательного теста на копии базы.
Проверка результата и откат изменений
После очистки убедитесь, что результат соответствует ожиданиям. Откройте несколько обработанных документов и проверьте целевое поле визуально. Затем сформируйте отчёт по регистрам, на которые влияет документ, чтобы убедиться, что движения соответствуют новым данным.
Для массовых операций полезно программно посчитать количество документов, где реквизит ещё заполнен, — запросом с условием «не равно пустому значению». Если после обработки таких документов осталось больше нуля, разберите причины: закрытый период, проверки заполнения, отсутствие прав.
Если результат неудовлетворительный, восстановление возможно только из резервной копии — штатной функции «отменить групповое изменение» в 1С нет. Именно поэтому копия базы перед массовой операцией — не формальность, а единственный способ отката.
Как проверить результат
Поле пустое, документ записывается без ошибок
Ошибка проверки заполнения или старое значение на месте
Движения соответствуют очищенным данным после перепроведения
В регистрах остались записи со старым значением реквизита
Количество документов с заполненным реквизитом равно нулю
Остались необработанные документы — ищите причину в правах или закрытом периоде
Типичные ошибки при очистке реквизитов
Самая частая ошибка — очистка реквизита у проведённого документа записью без перепроведения. Формально поле становится пустым, но движения по регистрам сохраняют старые значения, и отчёты продолжают показывать прежние данные. Пользователь считает задачу выполненной, а расхождение всплывает при сверке.
Вторая распространённая проблема — присвоение строки «» реквизиту ссылочного типа или наоборот. Типы должны соответствовать: для ссылки — пустая ссылка или Неопределено, для строки — пустая строка, для даты — значение '00010101' (дата по умолчанию), для булева — Ложь. Несоответствие типов вызовет ошибку исполнения.
FAQ
Можно ли очистить реквизит у документа в закрытом периоде?
Стандартными средствами — нет: сработает дата запрета редактирования. Нужно временно сдвинуть дату запрета (это делает администратор), выполнить изменение и вернуть запрет обратно. Альтернатива — программная запись с отключённым контролем, но это обход контроля и должен быть согласован с ответственными за учёт.
Чем очистка отличается от установки значения «Не указано»?
Очистка записывает пустое значение реквизита. Значение вроде «Не указано» — это обычно реальный элемент справочника или строка, то есть реквизит остаётся заполненным. В отчётах и отборах эти состояния обрабатываются по-разному: пустое значение отбирается условием «не заполнено», а «Не указано» — как обычная ссылка.
Как массово найти все документы, где реквизит заполнен?
Используйте консоль запросов или отбор в динамическом списке с условием «реквизит не равно пустому значению». Для ссылочных реквизитов условие строится по сравнению с пустой ссылкой, для строк — с пустой строкой. Так проще оценить объём работ до запуска обработки.
Очистится ли реквизит в связанных документах автоматически?
Нет. Каждый документ хранит собственное значение реквизита. Если одно и то же значение используется в цепочке связанных документов (например, заказ, реализация, счёт-фактура), очищать его нужно в каждом объекте отдельно, либо настраивать механизм синхронизации значений в конфигурации.
Безопасно ли очищать реквизит через прямую запись в SQL-базу?
Нет, это крайне нежелательно. Прямая правка таблиц СУБД обходит всю бизнес-логику 1С: проверки, движения, регистрацию изменений для обменов, версионирование. Результатом могут стать рассинхронизация обменов и повреждение данных. Используйте только штатные механизмы платформы.
Что делать, если после очистки реквизит заполнился снова?
Проверьте три источника: обмен данными с другой базой (значение приходит при синхронизации), подписки на события и обработчики заполнения в конфигурации (значение подставляется при записи), регламентные задания загрузки данных. Найдите механизм заполнения через поиск ссылок на реквизит в конфигураторе и скорректируйте его.
Что важно запомнить
Одиночный документ очищайте вручную с перепроведением, массовые операции — групповой обработкой или кодом на копии базы. Пустое значение подбирайте по типу реквизита, а после очистки проверяйте движения по регистрам и остаток заполненных документов запросом. Резервная копия перед массовым изменением обязательна — штатного отката в 1С нет.