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

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

Как удалить реквизит формы в 1С

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

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

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

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

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

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

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

Удаление реквизита через конструктор формы

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

Порядок действий
  1. 1
    Откройте конфигуратор и найдите нужный объект (справочник, документ, обработку)
  2. 2
    Раскройте ветку «Формы» и откройте нужную форму двойным щелчком
  3. 3
    Перейдите на вкладку «Реквизиты» в правой части редактора формы
  4. 4
    Найдите реквизит в списке, выделите его и нажмите Del или кнопку «Удалить»
  5. 5
    Удалите связанный элемент формы на вкладке с деревом элементов, если он остался
  6. 6
    Проверьте модуль формы на обращения к удалённому реквизиту и сохраните конфигурацию

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

Завершающий шаг — проверка модуля формы. Быстрый способ: в модуле формы нажмите Ctrl+Shift+F (глобальный поиск) и поищите имя удалённого реквизита по всей конфигурации. Обращения могут быть в обработчиках событий формы, в командах, а также в других формах и общих модулях, если реквизит передавался как параметр.

Удаление программно созданного реквизита

Если реквизит создавался кодом через ИзменитьРеквизиты(), в конструкторе формы вы его не увидите — он появляется только в момент выполнения. Такой реквизит «удаляется» правкой кода: либо полностью убирается блок его добавления, либо, если нужно удалить динамически, используется тот же метод с массивом удаляемых реквизитов.

bsl
&НаСервере
Процедура УдалитьВременныйРеквизит()
    Удаляемые = Новый Массив;
    Удаляемые.Добавить("ВременныйИтог");
    ИзменитьРеквизиты(, Удаляемые);
КонецПроцедуры

Метод ИзменитьРеквизиты(Добавляемые, Удаляемые) принимает два массива: первый — описания новых реквизитов (объекты ОписаниеРеквизитаФормы), второй — имена удаляемых. Учтите ограничение: метод доступен только на сервере и только в контексте формы. Также нельзя удалить реквизит, который связан с элементом формы, — сначала нужно удалить элемент программно (Элементы.Удалить()) или отвязать его от данных.

Удаление реквизита объекта метаданных

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

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

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

Как проверить, что удаление ничего не сломало

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

Для тщательной проверки используйте глобальный поиск (Ctrl+Shift+F) по имени реквизита по всей конфигурации, включая модули объектов, общие модули и другие формы. Если конфигурация большая и есть расширения, проверьте и их модули — расширение может обращаться к реквизиту основной формы.

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

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

Открытие формы в режиме предприятия
Норма

Форма открывается без сообщений об ошибках

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

Ошибка «Поле не найдено» или «Реквизит не найден»

Глобальный поиск по имени реквизита
Норма

Совпадений нет или остались только комментарии

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

Найдены обращения в модулях формы, команд или расширений

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

Документ или элемент справочника записывается штатно

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

Ошибки при записи, падение обработчиков

Дерево элементов формы
Норма

Нет элементов с пустым путём к данным

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

Поля и колонки без привязки к данным

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

Самая частая ошибка — удалить реквизит, но оставить элемент формы, который на него ссылается. Форма перестаёт открываться, и пользователи видят ошибку при запуске. Вторая по частоте — забыть про код: обращение к реквизиту через ЭтаФорма[ИмяРеквизита] или напрямую по имени в модуле. Такие обращения синтаксическая проверка модуля не всегда отловит, если имя собирается динамически.

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

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

Когда удалять не нужно: альтернативы

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

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

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

Реквизит формы больше нигде не используетсяУдалите реквизит и связанный элемент формы, проверьте модуль поиском
Реквизит создан программно через ИзменитьРеквизитыУберите код добавления или вызовите ИзменитьРеквизиты с массивом удаляемых
Реквизит объекта содержит нужные данныеНе удаляйте: скройте элемент формы или выгрузите данные перед удалением
Реквизит добавлен расширением конфигурацииУдаляйте его в модуле расширения, а не в основной конфигурации

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

Итог

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

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

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

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

Скорее всего, это не собственный реквизит формы, а реквизит основного объекта (внутри «Объект» или «Запись») — он удаляется только в метаданных объекта. Также удаление недоступно, если форма открыта в режиме расширения без права изменения, либо конфигурация находится на поддержке без возможности редактирования.

Удалил реквизит, а форма перестала открываться. Что делать?

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

Можно ли удалить реквизит формы без конфигуратора, в режиме предприятия?

Нет. Состав реквизитов формы — часть разработки, он меняется только в конфигураторе или программно кодом формы. Пользователь в режиме предприятия может лишь скрыть элементы через «Изменить форму», но сами реквизиты останутся.

Как удалить реквизит, добавленный расширением конфигурации?

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

Потеряются ли данные при удалении реквизита формы?

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

Как найти все формы, где используется одноимённый реквизит?

Используйте глобальный поиск (Ctrl+Shift+F) по имени реквизита с областью поиска «Вся конфигурация». В результатах будут и модули форм, и запросы, и обращения из общих модулей. Для точности ищите с учётом контекста — одноимённые реквизиты в разных формах не связаны между собой.