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