Очистка реквизитов в 1С 8.3: вручную, массово и программно
Содержание
Чтобы очистить реквизит в 1С у одного объекта, достаточно открыть его карточку и удалить значение в поле. А вот когда реквизит нужно очистить сразу у сотен документов или элементов справочника — поле за полем это уже не вариант. Тогда работают два механизма: обработка «Групповое изменение реквизитов» без единой строки кода и программная очистка через консоль кода или внешнюю обработку .
Сразу поправлю частое заблуждение: очистить данные через консоль запросов нельзя. Консоль запросов только читает данные, менять их она не умеет. Для записи пустого значения нужен другой инструмент — о нём ниже.
Разберём все рабочие способы: от удаления одного значения мышкой до скрипта, который обходит выборку и чистит реквизит у всех объектов. Отдельно — как очистить реквизит табличной части, а не только шапки.
Когда какой способ подходит
Способ очистки зависит от количества объектов и от того, есть ли доступ к Конфигуратору.
Любая массовая очистка меняет данные необратимо. Перед запуском на рабочей базе сделайте резервную копию, а сложные правки сначала прогоните на копии базы.
Очистить значение одного реквизита вручную
Самый простой случай — убрать значение в карточке объекта.
- Откройте нужный документ или элемент справочника двойным щелчком.
- Встаньте в поле реквизита, который нужно очистить.
- Для текстового или числового поля выделите значение и нажмите
Delete. - Для ссылочного реквизита (контрагент, склад, организация) нажмите кнопку с крестиком
×в правой части поля — она очищает выбранное значение. - Нажмите
ЗаписатьилиПровести и закрыть.
Для даты поле очищается тем же крестиком или вводом пустого значения через календарь.
Если список объектов редактируемый (например, список номенклатуры с включённым редактированием в строке), значение можно стереть прямо в ячейке списка, не открывая карточку. Встаньте в ячейку, очистите её и нажмите стрелку вниз или Enter — строка сохранится.
Отдельно стоит различать реквизит объекта и реквизит формы. Реквизит формы — это служебное поле, которое существует только пока форма открыта (флажок, вспомогательное поле отбора). Его «очистка» ничего не меняет в базе: закрыли форму — значение исчезло. В базе хранятся только реквизиты объекта, и чистить имеет смысл именно их.
Если поле подсвечено красным и очиститься не даёт — реквизит обязателен для заполнения. Платформа не запишет объект с пустым обязательным реквизитом, это ограничение конфигурации, а не ошибка.
Массовая очистка через «Групповое изменение реквизитов»
Когда объектов много, помогает стандартная обработка «Групповое изменение реквизитов». Она входит в библиотеку стандартных подсистем, поэтому доступна в типовых конфигурациях на управляемых формах — БП 3.0, ЗУП 3.1, УТ 11, КА, ERP.
Открыть её можно через главное меню:
- Включите пункт
Все функции:Главное меню → Сервис → Параметрыи поставьте галкуОтображать команду "Все функции". - Затем
Главное меню → Все функции → Стандартные → Групповое изменение реквизитов.
Порядок очистки:
- В поле
Изменятьвыберите тип объекта — например,Документы → Реализация товаров и услугилиСправочники → Номенклатура. - При необходимости настройте
Отбор, чтобы ограничить список нужными объектами. - На закладке
Реквизитынайдите реквизит, который нужно очистить, и включите галку напротив него. - Поле значения оставьте пустым — именно пустое значение и запишется в реквизит.
- Нажмите
Изменить реквизиты.
Обработка покажет, сколько объектов обработано и были ли ошибки. Если часть объектов записать не удалось (например, из-за обязательности реквизита или блокировки другим пользователем), она выведет список проблемных объектов — их придётся разобрать отдельно.
Когда нужно очистить реквизит не у всех, а только у объектов по условию, задайте Отбор перед запуском. Отбор поддерживает сравнение по реквизитам: можно, например, очистить Склад только в документах за прошлый год или только у номенклатуры определённой группы. Сложное условие на встроенном языке задаётся на дополнительной закладке обработки — туда же выводится предварительный список того, что будет изменено.
По умолчанию групповое изменение пишет данные напрямую, без проведения документов. Если от реквизита зависят движения по регистрам, после очистки документы нужно перепровести. В настройках обработки есть флажок перепроведения — включайте его осознанно, перепроведение сотен документов на рабочей базе лучше делать, когда пользователи вышли.
Галку группового изменения можно ставить сразу на несколько реквизитов — тогда за один проход очистятся все выбранные поля.
Не всё поддаётся групповому изменению. Вычисляемые реквизиты, а также поля, которые разработчик конфигурации явно запретил менять этой обработкой, в списке реквизитов не появятся или будут недоступны. Это защита: такие значения подчиняются логике модуля, и ручная очистка их бы сломала. Если нужного реквизита в списке нет — это как раз такой случай, и очищать его нужно штатным способом конфигурации.
Программная очистка реквизита кодом
Если нужен хитрый отбор или очистка по условию, которое обработка не умеет, пишут небольшой скрипт. Выполнять его удобно в консоли кода (внешняя обработка «Консоль кода» или аналогичная из арсенала администратора).
Пустое значение зависит от типа реквизита:
- ссылочный тип —
Справочники.Контрагенты.ПустаяСсылка(); - составной тип (может содержать разные ссылки) —
Неопределено; - строка —
""; - число —
0; - дата —
'00010101'(пустая дата).
Пример: очистить реквизит Комментарий у всех элементов справочника «Номенклатура».
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.ПолучитьОбъект();
Объект.Комментарий = "";
Объект.Записать();
КонецЦикла;
Очистить ссылочный реквизит Склад у документов за период удобнее через запрос с отбором, чтобы не читать всю таблицу целиком:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Дата МЕЖДУ &Начало И &Конец";
Запрос.УстановитьПараметр("Начало", НачалоДня('20250101'));
Запрос.УстановитьПараметр("Конец", КонецДня('20251231'));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Склад = Справочники.Склады.ПустаяСсылка();
Объект.Записать();
КонецЦикла;
Метод Записать() сохраняет объект без проведения. Если нужно сразу провести документ
, используйте Объект.Записать(РежимЗаписиДокумента.Проведение).
При большом объёме не держите всю очистку в одной транзакции и не выбирайте все объекты в память разом: запись каждого объекта оформляйте отдельно, а выборку обходите потоково, как в примерах выше. Так блокировки снимаются по ходу дела и база не перегружается. Если какой-то объект заблокирован другим пользователем, Записать() вызовет исключение — оберните запись в Попытка … Исключение … КонецПопытки, чтобы один занятый объект не оборвал обработку всех остальных.
Реквизит регистра сведений чистят через набор записей: читают набор по отбору, присваивают реквизиту пустое значение в каждой записи и записывают набор обратно.
Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Набор.Отбор.Номенклатура.Установить(ВыбраннаяНоменклатура);
Набор.Прочитать();
Для Каждого Запись Из Набор Цикл
Запись.Комментарий = "";
КонецЦикла;
Набор.Записать();
Присваивание Неопределено ссылочному реквизиту платформа при записи превратит в пустую ссылку. Но для реквизита с конкретным типом нагляднее и безопаснее писать ПустаяСсылка() — сразу видно, какой тип имеется в виду.
Очистка табличной части и её колонок
Реквизиты бывают не только в шапке, но и в строках табличной части. Здесь два разных действия.
Удалить все строки целиком — метод Очистить() у табличной части:
Объект.Товары.Очистить();
Объект.Записать();
Очистить одну колонку, оставив строки на месте — обход строк в цикле:
Для Каждого Строка Из Объект.Товары Цикл
Строка.Склад = Справочники.Склады.ПустаяСсылка();
КонецЦикла;
Объект.Записать();
Вручную строку табличной части чистят так же, как поле шапки: встают в ячейку и жмут крестик или Delete. Всю таблицу очищает команда Еще → Очистить над табличной частью (в разных конфигурациях команда может называться немного иначе).
«Групповое изменение реквизитов» тоже умеет чистить колонки табличных частей — на закладке Реквизиты они идут отдельной веткой под табличной частью документа.
Инструмент в разных конфигурациях
Путь к «Групповому изменению реквизитов» почти одинаков во всех типовых решениях на библиотеке стандартных подсистем, различается только набор объектов, которые можно изменять.
| Конфигурация | Путь к обработке |
|---|---|
| Бухгалтерия 3.0 | Все функции → Стандартные → Групповое изменение реквизитов |
| ЗУП 3.1 | Все функции → Стандартные → Групповое изменение реквизитов |
| Управление торговлей 11 | Все функции → Стандартные → Групповое изменение реквизитов |
| КА 2, ERP | Все функции → Стандартные → Групповое изменение реквизитов |
В старых конфигурациях на обычных формах стандартной обработки может не быть — там очистку делают внешней обработкой через Конфигуратор. Программный способ с ПолучитьОбъект() и Записать() работает одинаково во всех версиях платформы 8.3.
Внешняя обработка для регулярной очистки
Если реквизит нужно чистить регулярно — например, обнулять служебное поле после обмена, — удобно оформить логику как внешнюю обработку (.epf).
Порядок такой:
- В Конфигураторе создайте внешнюю обработку:
Файл → Новый → Внешняя обработка. - Добавьте форму с кнопкой и в её модуль вынесите код очистки (обход выборки и запись пустого значения).
- Сохраните файл
.epfна диск. - В пользовательском режиме подключите обработку:
Все функции → Стандартные → Внешние обработки(или добавьте в справочник дополнительных обработок, если конфигурация это поддерживает).
Для автоматической очистки по расписанию тот же код оформляют как регламентное задание. Запускать очистку по расписанию стоит в нерабочее время, чтобы массовая запись не мешала пользователям.
В типовых конфигурациях внешнюю обработку удобнее подключить не через Все функции, а через справочник дополнительных отчётов и обработок: Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки. Там обработке назначают вид (заполнение объекта, создание связанных объектов) и права доступа
, после чего она появляется в командах у нужных объектов. Это аккуратнее, чем запускать .epf файлом вручную: обработка хранится в базе, под контролем прав, и доступна тем, кому положено.
Не усложняйте без нужды. Если очистка разовая, внешняя обработка избыточна — хватит консоли кода или стандартного группового изменения.
Частые ошибки при очистке реквизитов
Несколько промахов, из-за которых очистка «не срабатывает» или ломает данные.
- 🔴 Пытаются чистить данные консолью запросов. Запрос только читает. Для записи нужна консоль кода, обработка или ручная правка.
- 🔴 Забывают перепровести документы . Групповое изменение по умолчанию пишет реквизит без проведения — движения по регистрам остаются старыми, пока документы не перепроведены.
- 🔴 Чистят обязательный реквизит. Платформа не даст записать объект с пустым обязательным полем — сначала снимают обязательность в конфигурации или выбирают другое значение.
- 🔴 Работают без копии. Массовая очистка необратима. Нет резервной копии — нет и отката.
- 🔴 Присваивают значение не того типа. Ссылочному реквизиту нужна пустая ссылка нужного типа, а не пустая строка или
0.
Частые вопросы
Можно ли очистить реквизит через консоль запросов?
Чем пустая ссылка отличается от `Неопределено`?
Справочники.Склады.ПустаяСсылка(). Неопределено используют для реквизитов составного типа. При записи платформа приводит Неопределено к пустой ссылке, но для типизированного реквизита нагляднее сразу писать пустую ссылку.