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

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

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

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

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

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

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

Что именно нужно очистить: определяем сценарий

Первый сценарий — пользователь ошибся при вводе и хочет начать заполнение заново. Если документ ещё не записан, самый быстрый способ — закрыть форму и ответить «Нет» на вопрос о сохранении. Все введённые значения исчезнут вместе с формой, а база останется нетронутой.

Второй сценарий — нужно очистить отдельные поля или табличную часть в уже заполненной форме. Здесь работают ручные приёмы: выделение значения клавишей Delete или Backspace, кнопка «Очистить» (крестик) в поле ввода, удаление строк табличной части по одной или всех сразу.

Третий сценарий — разработчик добавляет кнопку «Очистить» в собственную обработку или очищает форму программно при определённом событии. Это делается кодом на встроенном языке: обнулением реквизитов формы, вызовом Очистить() у таблиц значений и сбросом настроек.

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

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

Объект не записан и нужно начать зановоЗакройте форму без сохранения — это быстрее и безопаснее всего
Нужно очистить несколько полей в открытой формеОчищайте поля вручную крестиком или клавишей Delete
Нужно удалить все строки табличной частиВыделите все строки (Ctrl+A) и удалите, либо используйте команду очистки, если она предусмотрена конфигурацией
Очистка нужна по кнопке в самописной обработкеРеализуйте программный сброс реквизитов и таблиц в модуле формы

Очистка полей в режиме предприятия без программирования

В управляемых формах большинства конфигураций у поля ввода справа есть кнопка выбора и, при наличии значения, кнопка очистки в виде крестика. Нажатие на крестик сбрасывает значение в пустое. Если крестика нет, кликните в поле, выделите содержимое (Ctrl+A внутри поля) и нажмите Delete.

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

Табличная часть очищается через выделение строк. Установите курсор на любую строку, нажмите Ctrl+A — выделятся все строки, — затем Delete и подтвердите удаление. Учтите: в некоторых документах строки связаны с механизмом распределения или подбора, и после удаления могут остаться «хвосты» в связанных данных формы, поэтому результат стоит проверить пересчётом итогов документа.

Ручная очистка формы без записи
  1. 1
    Убедитесь, что объект не записан или вы готовы отменить изменения
  2. 2
    Очистите поля крестиком или выделением и Delete
  3. 3
    В табличной части выделите все строки (Ctrl+A) и удалите их
  4. 4
    Проверьте итоговые суммы и состояние документа в подвале формы
  5. 5
    Закройте форму без сохранения, если нужно отменить всё разом

Программная очистка реквизитов формы

В модуле формы реквизиты очищаются присваиванием пустого значения соответствующего типа. Для строки это пустая строка, для числа — ноль или Неопределено, для ссылочных типов — пустая ссылка. Универсальный вариант для ссылочных реквизитов — присвоить Неопределено, но для реквизитов составного типа это допустимо не всегда, надёжнее использовать пустую ссылку конкретного типа.

Если форма относится к объекту (например, это форма документа), данные хранятся в реквизите Объект, и очистка выполняется через него: Объект.Контрагент = Неопределено;. Для произвольных реквизитов формы обращение идёт напрямую по имени реквизита.

bsl
&НаКлиенте
Процедура ОчиститьФорму(Команда)
    Объект.Контрагент = Неопределено;
    Объект.Комментарий = "";
    Объект.Товары.Очистить();
    Модифицированность = Истина;
КонецПроцедуры

Строка Модифицированность = Истина нужна, чтобы платформа зафиксировала изменение формы и при закрытии предложила сохранить данные. Без этого признака пользователь может закрыть форму и молча потерять результат очистки — или, наоборот, не заметить, что данные изменились.

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

У табличной части объекта и у реквизита формы типа «ТаблицаЗначений» есть метод Очистить(), который удаляет все строки за один вызов. Это корректнее, чем цикл с удалением строк: цикл Пока Таблица.Количество() > 0 Цикл Таблица.Удалить(0) КонецЦикла работает, но медленнее и в нём легко ошибиться с индексами.

Если табличная часть связана с динамическим списком или данными, которые подгружаются запросом, очистка строк не сохранится — при следующем обновлении данные вернутся. В таком случае очищать нужно источник данных, а не отображение в форме.

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

Сброс настроек формы и отчёта

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

В отчётах на СКД сброс выполняется кнопкой «Стандартные настройки» в панели настроек. Если пользовательские настройки «залипли» и отчёт открывается с непонятными отборами, помогает выбор варианта отчёта заново через «Выбрать вариант» — настройки варианта заменят текущие.

Программно настройки формы очищаются через хранилище настроек: методы ХранилищеОбщихНастроек.Удалить() или ХранилищеСистемныхНастроек.Удалить() с указанием ключа объекта и пользователя. Это административная операция — удаление настроек необратимо, и применять её стоит только когда стандартный сброс из интерфейса не помогает.

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

Самая частая ошибка разработчика — очистка реквизитов формы вместо реквизитов объекта. Код меняет данные формы, а при записи объект перезаписывает их обратно, и пользователь видит, что «очистка не работает». Всегда проверяйте, где физически хранится значение: в Объект или в реквизите формы.

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

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

Типичные ошибки
01
Очистка реквизита формы вместо реквизита объекта — после записи значения возвращаются
02
Удаление строк таблицы в цикле по индексам — пропуск строк и ошибки выхода за границы
03
Очистка без установки Модифицированность — форма закрывается без вопроса и изменения теряются
04
Запись очищенного документа без проверки — в базе стираются ранее введённые данные
05
Удаление настроек из хранилища без необходимости — пользователь теряет все свои настройки безвозвратно

Проверка результата после очистки

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

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

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

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

Поля формы после очистки
Норма

Все целевые поля пустые, итоги обнулены

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

Поле возвращает старое значение при переходе — работает автозаполнение

Табличная часть
Норма

Ноль строк, итоги по колонкам пустые

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

Строки вернулись после обновления — очищено отображение, а не источник

После записи и повторного открытия
Норма

Очищенные значения сохранились пустыми

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

Данные восстановились — очищался реквизит формы, а не объекта

Итог

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

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

Частые вопросы об очистке формы в 1С

Как очистить форму, если кнопки «Очистить» в поле нет?

Кликните в поле, выделите содержимое сочетанием Ctrl+A и нажмите Delete или Backspace. Если поле возвращает значение после перехода к следующему, значит срабатывает автозаполнение конфигурации — тогда нужно менять источник значения, а не само поле.

Можно ли отменить очистку после записи документа?

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

Чем отличается присваивание Неопределено от пустой ссылки?

Неопределено — универсальное «отсутствие значения», подходит для реквизитов составного типа. Пустая ссылка (например, Справочники.Контрагенты.ПустаяСсылка()) сохраняет тип реквизита и корректнее для полей со строгой типизацией. В запросах и сравнениях эти значения ведут себя по-разному.

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

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

Как очистить настройки отчёта, если он открывается с неверными отборами?

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

Безопасно ли очищать форму в чужой конфигурации через внешнюю обработку?

Изменение данных через внешние обработки обходит часть прикладной логики формы, поэтому работайте только с копией базы или на тестовом контуре. Для типовых конфигураций безопаснее использовать штатные команды формы и документированные программные интерфейсы.