В процессе работы с конфигурациями 1С часто возникает необходимость избавиться от устаревших или неиспользуемых предопределенных элементов справочников. Прямое удаление таких элементов интерактивно невозможно, а изменение конфигурации с последующим удалением сопряжено с большими рисками для работоспособности системы и процесса обновлений. Рассмотрим, как безопасно и эффективно 'скрыть' или 'деактивировать' предопределенные элементы, чтобы они не мешали пользователям, при этом сохраняя целостность конфигурации.
Предопределенные элементы справочников в 1С создаются разработчиками конфигурации для обеспечения ее логики и функциональности. Они могут быть жестко 'зашиты' в код программы, использоваться в алгоритмах, отчетах или других механизмах. Их прямое удаление (даже программное через конфигуратор) может привести к серьезным ошибкам, некорректной работе функционала, а в худшем случае – к полной неработоспособности системы и проблемам при последующих обновлениях.
Поэтому основной подход заключается не в удалении, а в создании условий, при которых эти элементы становятся невидимыми или недоступными для пользователей, но остаются в базе данных.
Мы предлагаем рассмотреть несколько проверенных и безопасных методов, которые помогут нам решить эту задачу без риска для вашей системы.
Самый простой и стандартный способ 'скрыть' неиспользуемый элемент – это пометить его на удаление. В типовых списках и формах подбора 1С, если не включен специальный отбор, элементы, помеченные на удаление, по умолчанию не отображаются.
Преимущества: Простота реализации, встроенная функциональность 1С.
Недостатки: Элемент физически остается в базе данных, и при желании пользователь может включить отображение помеченных на удаление элементов. Полностью избавиться от него можно только после процедуры удаления помеченных объектов. В случае большого объема данных рекомендуется проводить удаление помеченных на удаление объектов с предварительным отбором, чтобы избежать проблем с производительностью.
Этот метод является одним из самых гибких и безопасных. Мы добавим в справочник новый реквизит, который будет служить индикатором активности элемента, и затем настроим отборы в списках, чтобы показывать только актуальные элементы.
В конфигураторе откроем наш справочник (например, ВидыНоменклатуры). Добавим новый реквизит:
НеАктуален (или Архивный, НеИспользовать).Булево.После этого обновим конфигурацию базы данных. Если вы хотите добавить реквизиты и элементы на управляемые формы легко и просто без кодирования, существуют готовые расширения, упрощающие этот процесс. Теперь каждый элемент справочника будет иметь флаг, указывающий на его актуальность.
Нам потребуется изменить форму списка справочника, чтобы она автоматически применяла отбор по новому реквизиту. Мы можем сделать это программно в модуле формы списка. Для наглядности можно также реализовать флажок в динамическом списке в 1С 8.3, чтобы пользователь сразу видел статус записи.
Рассмотрим пример кода, который можно разместить в обработчике события ПриСозданииНаСервере или отдельной процедуре, вызываемой из него:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Устанавливаем отбор при создании формы, если это не новый элемент
Если НЕ ЭтоНовый() Тогда
УстановитьОтборНаФорме();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтборНаФорме()
// Получаем текущий отбор списка
Отбор = Элементы.Список.Отбор; // 'Список' - это имя элемента формы, который отображает справочник
// Создаем новый элемент отбора для нашего реквизита 'НеАктуален'
ЭлементОтбора = Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НеАктуален"); // Имя нашего реквизита
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь; // Показываем только те элементы, у которых 'НеАктуален' = Ложь
ЭлементОтбора.Использование = Истина; // Включаем использование этого отбора
// При желании, можно сделать отбор недоступным для изменения пользователем
// ЭлементОтбора.Доступность = Ложь;
КонецПроцедуры
После этих изменений форма списка справочника будет по умолчанию показывать только те элементы, у которых реквизит НеАктуален имеет значение Ложь.
Для того чтобы быстро пометить все неактуальные предопределенные элементы, можно использовать универсальный редактор данных (УРД), который позволяет редактировать реквизиты объектов без написания кода.
Если же вы предпочитаете программный метод, можно выполнить следующий код:
&НаСервере
Процедура ВыполнитьНаСервере()
// Создаем запрос для выбора предопределенных элементов
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СправочникВидыНоменклатуры.Ссылка КАК Ссылка
|ИЗ
| Справочник.ВидыНоменклатуры КАК СправочникВидыНоменклатуры
|ГДЕ
| СправочникВидыНоменклатуры.ПометкаУдаления = ЛОЖЬ
| И СправочникВидыНоменклатуры.Предопределенный = ИСТИНА";
// Выполняем запрос и получаем результат
Результат = Запрос.Выполнить().Выбрать();
// Перебираем каждый выбранный элемент
Пока Результат.Следующий() Цикл
Объект = Результат.Ссылка.ПолучитьОбъект();
Если ТипЗнч(Объект.НеАктуален) <> Тип("Неопределено") Тогда
Объект.НеАктуален = Истина;
Объект.Записать();
КонецЕсли;
КонецЦикла;
Сообщить("Все предопределенные элементы успешно помечены как неактуальные.");
КонецПроцедуры
Преимущества: Высокая безопасность, гибкость в управлении видимостью элементов, сохранение целостности конфигурации при обновлениях.
Недостатки: Требует модификации конфигурации, что может потребовать снятия с поддержки или использования расширений.
Иногда предопределенные элементы используются в типовом коде как некие "константы". В таких случаях можно оставить элементы как есть, но перенастроить логику программы так, чтобы при интерактивном взаимодействии предлагались другие значения. Это достигается путем изменения кода в модулях выбора или подбора.
Преимущества: Не требует изменения самого справочника или его форм.
Недостатки: Подходит только для специфических случаев, требует глубокого понимания кода конфигурации.
ВНИМАНИЕ! Этот метод КРАЙНЕ не рекомендуется.
Если вы абсолютно уверены, что элемент не используется, в конфигураторе можно найти нужный справочник, на закладке "Предопределенные" найти элемент и снять флаг "Предопределенный". После обновления конфигурации базы данных элемент перестанет быть предопределенным, и его можно будет удалить стандартными средствами.
Как мы выяснили, самым безопасным и рекомендуемым методом является добавление дополнительного реквизита для индикации актуальности элемента и последующая настройка отборов. Этот подход позволяет полностью контролировать видимость элементов для пользователей, не нарушая логику работы конфигурации и не создавая проблем с обновлениями.
Применяя этот метод совместно с современными инструментами визуализации и редактирования данных, мы добиваемся стабильности и корректности функционирования всей информационной системы 1С.