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

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

Как очистить поле выбора в 1С

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

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

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

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

Как очистить поле выбора в пользовательском режиме

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

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

Учтите: если поле отмечено как обязательное (подчёркнуто красным или выдаёт предупреждение при записи), система не позволит провести или записать объект с пустым значением. В этом случае сначала выясните, почему поле обязательно, — возможно, вместо очистки нужно просто заменить значение на корректное.

Очистка поля в пользовательском режиме
  1. 1
    Откройте форму документа или элемента справочника
  2. 2
    Нажмите крестик справа от поля либо выделите значение и нажмите Delete
  3. 3
    Убедитесь, что поле визуально пустое
  4. 4
    Нажмите «Записать» или «Провести и закрыть»
  5. 5
    Если появилось сообщение о незаполненном поле — замените значение вместо очистки

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

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

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

bsl
// Универсальная очистка
Объект.Контрагент = Неопределено;

// Явная очистка пустой ссылкой — предпочтительно
Объект.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
Объект.СтавкаНДС = Перечисления.СтавкиНДС.ПустаяСсылка();

// Очистка реквизита формы (управляемая форма)
ЭтаФорма.ВыбранныйСклад = Справочники.Склады.ПустаяСсылка();

Если очистка выполняется в обработчике на клиенте (например, в ПриИзменении другого поля), присваивайте значение через данные формы, а не через свойства элемента. Свойство ТекстРедактирования у поля ввода менять не следует — оно отражает введённый текст, а не значение реквизита, и его установка не очищает данные.

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

Частая задача — сбрасывать зависимое поле, когда изменилось главное. Классический пример: при смене контрагента нужно очистить договор, потому что старый договор относится к прежнему контрагенту. Для этого в модуле формы создаётся обработчик события ПриИзменении основного поля.

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

bsl
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
    Если ЗначениеЗаполнено(Объект.Договор)
        И ВладелецДоговора(Объект.Договор) <> Объект.Контрагент Тогда
        Объект.Договор = Неопределено;
    КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ВладелецДоговора(Договор)
    Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Договор, "Владелец");
КонецФункции

Настройка кнопки очистки и поведения поля

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

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

Ещё одно полезное свойство — ВыборГруппИЭлементов и параметры связей выбора (СвязиПараметровВыбора). Они не очищают поле сами, но определяют, какие значения доступны, и влияют на то, нужно ли сбрасывать значение при смене родительского поля. Автоматический сброс при нарушении связи платформа не выполняет — это зона ответственности кода формы.

Как проверить, что очистка сработала

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

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

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

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

Внешний вид поля после очистки
Норма

Поле пустое, крестик очистки скрыт

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

Старое значение осталось или вернулось после записи

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

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

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

Ошибка «Поле не заполнено» там, где пустое значение допустимо

ЗначениеЗаполнено() в коде
Норма

Возвращает Ложь после очистки

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

Возвращает Истина — очищен не тот реквизит или значение переустанавливается

Связанные данные (печать, отчёты)
Норма

Старое значение нигде не подтягивается

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

В печатной форме или движениях осталось прежнее значение

Типичные ошибки и ограничения

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

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

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

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

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

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

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

Почему у поля нет крестика для очистки?

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

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

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

Почему после очистки значение появляется снова?

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

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

В пользовательском режиме — так же: крестик в ячейке или Delete. В коде обращайтесь к строке табличной части: Объект.Товары[0].Склад = Справочники.Склады.ПустаяСсылка(). После изменения строки на форме может потребоваться установить признак модифицированности.

Можно ли запретить пользователю очищать конкретное поле?

Да. Установите у реквизита проверку заполнения «Выдавать ошибку» — тогда объект не запишется с пустым значением. Дополнительно можно отключить кнопку очистки у элемента формы и в обработчике ПриИзменении восстанавливать прежнее значение с поясняющим сообщением.

Как очистить значение в параметре отчёта на СКД?

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