Разработка и Конфигурация · 11 мин
Как удалить реквизит формы в 1С
Как удалить реквизит формы в 1С: через конструктор формы, программно и через изменение конфигурации. Разбор ошибок, рисков и проверки результата.
Реквизит формы в 1С — это данные, которые хранятся внутри формы и используются для отображения, редактирования или промежуточных вычислений, но не записываются в базу данных напрямую. Со временем формы обрастают лишними реквизитами: что-то добавили для отладки, что-то осталось после рефакторинга, а часть вообще создавалась программно и «зависла». Удаление таких реквизитов — рутинная задача разработчика, но у неё есть нюансы: реквизит может быть связан с элементом формы, использоваться в коде модулей или создаваться динамически.
Способ удаления зависит от того, как реквизит был создан. Реквизиты, добавленные в конфигураторе при разработке формы, удаляются через конструктор формы. Реквизиты, созданные программно методом ИзменитьРеквизиты(), убираются правкой кода. А если речь идёт о реквизите объекта конфигурации (справочника, документа), который выводится на форму, — это уже изменение структуры метаданных с обновлением базы данных, и к нему нужно подходить осторожнее.
Что такое реквизит формы и чем он отличается от реквизита объекта
Прежде чем удалять, важно понять, что именно вы удаляете. Реквизит формы существует только в контексте конкретной формы: он хранится в её данных, пока форма открыта, и не влияет на структуру базы данных. Типичные примеры — флажки настроек отображения, промежуточные суммы, служебные таблицы значений для динамических списков.
Реквизит объекта (справочника, документа, обработки) — это часть метаданных. Он описан в конфигурации, для него создаётся колонка в таблице базы данных, и на форме он отображается как основной реквизит (например, «Объект»). Удаление такого реквизита — это изменение конфигурации с последующим обновлением структуры базы, и данные в колонке будут безвозвратно потеряны.
Признак, по которому их легко различить в конструкторе формы: реквизиты объекта находятся в иерархии основного реквизита (обычно «Объект» или «Запись») и подсвечены как данные объекта, а собственные реквизиты формы лежат на верхнем уровне списка реквизитов формы.
Удаление реквизита через конструктор формы
Стандартный сценарий — удаление реквизита, который был добавлен вручную при разработке формы. Действия выполняются в конфигураторе, без изменения структуры базы данных.
- 1Откройте конфигуратор и найдите нужный объект (справочник, документ, обработку)
- 2Раскройте ветку «Формы» и откройте нужную форму двойным щелчком
- 3Перейдите на вкладку «Реквизиты» в правой части редактора формы
- 4Найдите реквизит в списке, выделите его и нажмите Del или кнопку «Удалить»
- 5Удалите связанный элемент формы на вкладке с деревом элементов, если он остался
- 6Проверьте модуль формы на обращения к удалённому реквизиту и сохраните конфигурацию
После нажатия Del платформа может выдать предупреждение, если реквизит связан с элементом формы. В ряде версий платформа удаляет связанный элемент автоматически, в других — элемент остаётся, но теряет привязку к данным, и форма при открытии выдаст ошибку вида «Поле не найдено». Поэтому после удаления реквизита обязательно просмотрите дерево элементов формы и удалите «осиротевшие» поля, декорации и колонки таблиц.
Завершающий шаг — проверка модуля формы. Быстрый способ: в модуле формы нажмите Ctrl+Shift+F (глобальный поиск) и поищите имя удалённого реквизита по всей конфигурации. Обращения могут быть в обработчиках событий формы, в командах, а также в других формах и общих модулях, если реквизит передавался как параметр.
Удаление программно созданного реквизита
Если реквизит создавался кодом через ИзменитьРеквизиты(), в конструкторе формы вы его не увидите — он появляется только в момент выполнения. Такой реквизит «удаляется» правкой кода: либо полностью убирается блок его добавления, либо, если нужно удалить динамически, используется тот же метод с массивом удаляемых реквизитов.
&НаСервере
Процедура УдалитьВременныйРеквизит()
Удаляемые = Новый Массив;
Удаляемые.Добавить("ВременныйИтог");
ИзменитьРеквизиты(, Удаляемые);
КонецПроцедурыМетод ИзменитьРеквизиты(Добавляемые, Удаляемые) принимает два массива: первый — описания новых реквизитов (объекты ОписаниеРеквизитаФормы), второй — имена удаляемых. Учтите ограничение: метод доступен только на сервере и только в контексте формы. Также нельзя удалить реквизит, который связан с элементом формы, — сначала нужно удалить элемент программно (Элементы.Удалить()) или отвязать его от данных.
Удаление реквизита объекта метаданных
Если под «реквизитом формы» вы на самом деле имеете в виду реквизит справочника или документа, который выводится на форму, порядок другой. Откройте объект конфигурации, перейдите на вкладку «Данные», выделите реквизит и удалите его. Затем обновите конфигурацию базы данных (F7 или меню «Конфигурация — Обновить конфигурацию базы данных»).
При обновлении платформа предупредит о потере данных: колонка в таблице будет удалена вместе со всеми значениями. Восстановить их после обновления невозможно. Поэтому перед удалением реквизита объекта сделайте резервную копию базы или, как минимум, выгрузите значения реквизита в файл, если они могут понадобиться.
Альтернатива удалению — скрыть реквизит с формы (удалить только элемент формы) и исключить его из интерфейса, оставив в метаданных. Это безопасный вариант, когда данные ещё могут понадобиться, а «мусор» в интерфейсе мешает пользователям.
Как проверить, что удаление ничего не сломало
После удаления реквизита формы минимальная проверка — открыть форму в режиме предприятия и выполнить типовые действия: заполнение, запись, переключение вкладок, выполнение команд. Ошибки вида «Поле объекта не обнаружено» или «Реквизит не найден» укажут на пропущенные обращения.
Для тщательной проверки используйте глобальный поиск (Ctrl+Shift+F) по имени реквизита по всей конфигурации, включая модули объектов, общие модули и другие формы. Если конфигурация большая и есть расширения, проверьте и их модули — расширение может обращаться к реквизиту основной формы.
Как проверить результат
Форма открывается без сообщений об ошибках
Ошибка «Поле не найдено» или «Реквизит не найден»
Совпадений нет или остались только комментарии
Найдены обращения в модулях формы, команд или расширений
Документ или элемент справочника записывается штатно
Ошибки при записи, падение обработчиков
Нет элементов с пустым путём к данным
Поля и колонки без привязки к данным
Типичные ошибки и как их избежать
Самая частая ошибка — удалить реквизит, но оставить элемент формы, который на него ссылается. Форма перестаёт открываться, и пользователи видят ошибку при запуске. Вторая по частоте — забыть про код: обращение к реквизиту через ЭтаФорма[ИмяРеквизита] или напрямую по имени в модуле. Такие обращения синтаксическая проверка модуля не всегда отловит, если имя собирается динамически.
Отдельный случай — реквизиты с признаком «Сохраняемые данные» или реквизиты, значения которых передаются между клиентом и сервером. Их удаление может сломать обработчики ожидания и фоновые операции, которые читают эти данные по завершении. Проверяйте длинные операции и оповещения.
Когда удалять не нужно: альтернативы
Не всегда удаление — лучшее решение. Если реквизит используется редко, но его удаление требует переписывания кода, достаточно убрать элемент с формы, оставив данные. Если реквизит объекта нужно убрать из интерфейса, но данные ценны — скройте его через настройку формы или функциональные опции.
Как выбрать действие
Ещё одна альтернатива — функциональные опции: реквизит остаётся в конфигурации, но его видимость управляется настройками. Это удобно, когда разным подразделениям нужен разный состав полей, а удалять и возвращать реквизит при каждом изменении требований нерационально.
Что важно запомнить
Реквизит формы удаляется на вкладке «Реквизиты» редактора формы, программно созданный — правкой кода с ИзменитьРеквизиты(). Перед удалением уберите связанные элементы и найдите все обращения в модулях. Реквизит объекта метаданных удаляется только с обновлением базы и резервной копией — данные колонки теряются безвозвратно.
Частые вопросы
Почему реквизит не удаляется — кнопка неактивна?
Скорее всего, это не собственный реквизит формы, а реквизит основного объекта (внутри «Объект» или «Запись») — он удаляется только в метаданных объекта. Также удаление недоступно, если форма открыта в режиме расширения без права изменения, либо конфигурация находится на поддержке без возможности редактирования.
Удалил реквизит, а форма перестала открываться. Что делать?
Откройте форму в конфигураторе и найдите элементы с пустым путём к данным — обычно это поле или колонка таблицы, ссылавшиеся на удалённый реквизит. Удалите их или привяжите к другому реквизиту. Затем глобальным поиском проверьте модуль формы на обращения по имени.
Можно ли удалить реквизит формы без конфигуратора, в режиме предприятия?
Нет. Состав реквизитов формы — часть разработки, он меняется только в конфигураторе или программно кодом формы. Пользователь в режиме предприятия может лишь скрыть элементы через «Изменить форму», но сами реквизиты останутся.
Как удалить реквизит, добавленный расширением конфигурации?
Откройте расширение в конфигураторе, найдите заимствованную форму и удалите реквизит там. Изменения вносятся в модуль расширения, а не в основную конфигурацию. После сохранения расширения и обновления реквизит исчезнет у пользователей.
Потеряются ли данные при удалении реквизита формы?
Нет, если это именно реквизит формы — он не хранится в базе и живёт только пока открыта форма. Данные теряются только при удалении реквизита объекта метаданных с последующим обновлением конфигурации базы данных — в этом случае обязательно делайте резервную копию.
Как найти все формы, где используется одноимённый реквизит?
Используйте глобальный поиск (Ctrl+Shift+F) по имени реквизита с областью поиска «Вся конфигурация». В результатах будут и модули форм, и запросы, и обращения из общих модулей. Для точности ищите с учётом контекста — одноимённые реквизиты в разных формах не связаны между собой.