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

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

Как очистить элемент формы в 1С: поля, таблицы и реквизиты

Как очистить элемент формы в 1С: поле ввода, табличную часть, список и реквизиты. Готовые примеры кода для обычных и управляемых форм, типичные ошибки.

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

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

Ниже разобраны рабочие приёмы для типовых сценариев: очистка поля ввода, табличной части документа, динамического списка, программный сброс реквизитов формы и особенности управляемых форм. Примеры кода приведены на встроенном языке 1С.

Как устроена связь элемента формы с данными

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

Поэтому правильный подход — всегда работать с данными. Если очистить только «картинку» (например, попытаться управлять текстом элемента напрямую), при следующем обновлении формы значение вернётся из реквизита, и очистка «сотрётся».

Очистка поля ввода

Поле ввода связано с реквизитом простого типа: строкой, числом, датой или ссылкой. Чтобы очистить его, присвойте реквизиту пустое значение соответствующего типа.

// Управляемая форма, реквизит "Контрагент" типа СправочникСсылка

Объект.Контрагент = Неопределено;

// или строго пустая ссылка нужного типа:

Объект.Контрагент = Справочники.Контрагенты.ПустаяСсылка();

// Строковый и числовой реквизиты формы

Комментарий = "";

СуммаОплаты = 0;

ДатаОтгрузки = '00010101';

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

На обычной форме логика та же: очищаете реквизит или поле данных объекта, а затем при необходимости обновляете отображение. В толстом клиенте обычных форм элементы обновляются автоматически при изменении связанных данных.

Очистка табличной части и таблицы значений

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

// Очистка табличной части документа

Объект.Товары.Очистить();

// Очистка таблицы значений — реквизита формы

ТаблицаРезультатов.Очистить();

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

// Удаление строк по условию через НайтиСтроки

Отбор = Новый Структура("Пометка", Ложь);

СтрокиКУдалению = ТаблицаРезультатов.НайтиСтроки(Отбор);

Для Каждого Строка Из СтрокиКУдалению Цикл

ТаблицаРезультатов.Удалить(Строка);

КонецЦикла;

Очистка динамического списка и отборов

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

// Установка отбора, скрывающего все записи

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");

ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

ЭлементОтбора.ПравоеЗначение = Неопределено;

ЭлементОтбора.Использование = Истина;

Если задача обратная — пользователь «очистил» список случайным отбором и ничего не видит, — нужно сбросить пользовательские настройки отбора. Для этого удалите или отключите элементы отбора, установленные интерактивно, либо верните настройки компоновки к стандартным.

Маршрут решения

Как выбрать действие

Нужно очистить одно поле (строка, число, ссылка)Присвойте реквизиту пустое значение соответствующего типа
Нужно удалить все строки табличной части или таблицы значенийВызовите метод Очистить() у коллекции строк
Нужно удалить часть строк по условиюИспользуйте НайтиСтроки() с отбором и удаляйте найденные строки
Пустым должен стать динамический списокИзмените отбор или параметры запроса, метод Очистить() к списку неприменим

Очистка реквизитов формы и обновление отображения

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

// Принудительное обновление отображения данных формы

ЭтаФорма.ОбновитьОтображениеДанных();

// Обновление конкретного элемента

Элементы.Товары.Обновить();

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

Типовой порядок очистки формы
  1. 1
    Определите, с какими данными связан элемент: реквизит объекта, реквизит формы, таблица или динамический список
  2. 2
    Очистите данные подходящим способом: присваивание пустого значения или метод Очистить()
  3. 3
    При необходимости вызовите ОбновитьОтображениеДанных() на управляемой форме
  4. 4
    Проверьте визуально: поля пустые, таблица без строк, список не показывает лишнего
  5. 5
    Проверьте запись объекта: очистка не должна приводить к ошибкам проверки заполнения

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

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

Чтобы форма открывалась «чистой», можно обработать событие ПриСозданииНаСервере и явно сбросить нужные реквизиты, либо отключить автоматическое сохранение настроек для конкретных элементов. Для списков помогает очистка сохранённых пользовательских настроек через стандартную обработку или программно через ХранилищеСистемныхНастроек.

Удаление настроек — операция необратимая для конкретного пользователя: восстановить его прежние отборы и колонки после очистки не получится. Предупреждайте пользователей, если добавляете кнопку «Сбросить настройки».

Типичные ошибки и как их избежать

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

Вторая частая проблема — очистка таблицы значений, которая является реквизитом формы, через создание новой таблицы вместо вызова Очистить(). Присваивание новой пустой таблицы может нарушить связь с элементом формы, особенно если таблица передавалась между клиентом и сервером. Метод Очистить() сохраняет существующий объект коллекции и не ломает привязку.

Третья группа ошибок связана с контекстом выполнения. На клиенте управляемой формы недоступны многие серверные методы — например, запросы к базе. Если очистка требует обращения к данным (проверить ссылки, подобрать замену), выносите логику в серверную процедуру с директивой &НаСервере или &НаСервереБезКонтекста.

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

Проверка результата

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

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

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

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

Поле ввода после очистки
Норма

Поле визуально пустое, реквизит содержит пустое значение нужного типа

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

Поле снова показывает старое значение после обновления формы — очищен элемент, а не данные

Табличная часть после Очистить()
Норма

Количество строк равно нулю, элемент таблицы пуст

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

Строки остались — очищалась другая коллекция или локальная копия таблицы

Запись объекта
Норма

Объект записывается без ошибок либо выдаёт понятное сообщение о незаполненном поле

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

Ошибка приведения типов — вероятно, присвоено Неопределено вместо пустой ссылки

Динамический список
Норма

Список показывает ожидаемый набор записей после изменения отбора

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

Список не меняется — отбор установлен не на тот список или не включено использование

Итог

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

Очищайте данные, а не элементы формы: пустое значение для полей, Очистить() для таблиц, отбор для динамических списков. Учитывайте тип реквизита, помните, что ПриИзменении при программной очистке не срабатывает, и проверяйте результат и визуально, и в данных.

Частые вопросы

Как очистить поле ввода на управляемой форме по кнопке?

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

Почему после Очистить() таблица на форме не очищается?

Чаще всего метод вызван не у той коллекции: например, у локальной копии таблицы, полученной через Выгрузить(), а не у реквизита формы. Проверьте, что очищается именно реквизит, связанный с элементом. Также убедитесь, что после серверного вызова данные корректно возвращены в реквизит формы.

Как очистить значение поля составного типа?

Для поля составного типа корректно присваивать Неопределено — оно очищает значение независимо от того, какой тип был выбран ранее. Если нужно ограничить выбор одним типом после очистки, дополнительно настройте кнопку выбора типа или параметры выбора у элемента.

Можно ли очистить динамический список методом Очистить()?

Нет, у динамического списка такого метода нет — он лишь отображает результат запроса к базе данных. Чтобы список стал пустым, установите отбор, которому не соответствует ни одна запись, или измените параметры произвольного запроса списка.

Как сбросить все отборы, которые пользователь установил в списке?

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

Опасно ли очищать табличную часть проведённого документа?

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