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