В процессе эксплуатации 1С:Управление нашей фирмой (УНФ) пользователи и администраторы часто сталкиваются с ситуацией, когда предопределенный элемент справочника (например, конкретный склад, касса или статья движения денежных средств) становится ненужным. Однако стандартная пометка на удаление для таких объектов часто недоступна или заблокирована платформой. В этой статье мы подробно разберем, как справиться с этой задачей, начиная от самых безопасных методов и заканчивая программными инструментами.
Предопределенные элементы — это объекты справочников, которые создаются не пользователем в режиме «1С:Предприятие», а разработчиком в Конфигураторе. Они имеют специальную иконку с желтым «шариком» и жестко связаны с логикой программы. Система ожидает, что этот элемент всегда существует, так как на него могут ссылаться алгоритмы проведения документов, отчеты или настройки интеграции.
Проанализируем основные причины, по которым удаление затруднено:
ИмяПредопределенныхДанных.Рассмотрим ситуацию, когда по складу или иному элементу было «овер много движений», включая маркировку и складские акты. В этом случае физическое удаление — это самый опасный путь, который может привести к потере целостности базы данных.
Посмотрим, как сделать элемент неактивным без удаления:
Недействителен, установим соответствующую галочку. В 1С:УНФ это скроет элемент из большинства списков подбора.Этот метод хорош тем, что сохраняет историю движений и не ломает логику программы, где данный склад может быть прописан как «основной» в настройках пользователя.
Если нам все же необходимо превратить предопределенный элемент в обычный, чтобы пометить его на удаление, воспользуемся штатным инструментом. Разберем этот процесс по шагам:
Склады).Имя предопределенных данных.После этой операции иконка «шарика» исчезнет, и элемент станет обычным. Теперь его можно пометить на удаление стандартным способом. Для безопасного удаления таких объектов с контролем ссылочной целостности подойдёт обработка для очистки и удаления элементов справочников.
Для программистов существует более быстрый способ — использование внешней обработки или консоли кода. Выясним, какой код поможет очистить признак предопределенности.
Проанализируем пример кода:
// Получаем ссылку на наш склад
СкладОбъект = Справочники.Склады.НайтиПоНаименованию("Старый склад").ПолучитьОбъект();
// Очищаем имя предопределенных данных
СкладОбъект.ИмяПредопределенныхДанных = "";
// Записываем объект
Попытка
СкладОбъект.Записать();
Сообщить("Элемент успешно отвязан от конфигурации");
Исключение
Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;
Важно помнить: если в модулях конфигурации встречается обращение вида Справочники.Склады.ОсновнойСклад, а вы очистили это имя, программа выдаст ошибку при выполнении этого кода. Перед удалением обязательно убедитесь, что этот элемент не зашит в программный код.
Часто проблема возникает в результате выгрузки из другой базы, когда в справочнике появляется два одинаковых элемента: один — предопределенный, другой — пришедший через обмен. В этом случае удалять предопределенный нельзя — нужно «слить» их. Чтобы избежать появления дублей предопределённых элементов при миграции, удобно использовать инструмент для переноса данных между конфигурациями 1С с гибкой настройкой полей сопоставления.
Рассмотрим порядок действий:
Чтобы ситуация не повторилась, в правилах синхронизации (EnterpriseData) или в «Пульте управления сопоставлением данных» необходимо вручную связать эти объекты по УИД (GUID) или по полю Имя предопределенных данных до начала обмена.
Иногда возникают «фантомные» предопределенные элементы, которые видны в списке, но отсутствуют в Конфигураторе (или наоборот). Это признак повреждения таблиц базы данных. В такой ситуации мы рекомендуем выполнить следующие действия в режиме Конфигуратора: для регулярного создания архивов и тестирования баз можно использовать программу для автоматического обслуживания 1С.
Резюме: Удаление предопределенного элемента — это крайняя мера. Если на элементе завязаны движения документов, лучше всего использовать метод переименования или инструмент «Поиск и удаление дублей». Если же удаление необходимо, используйте Групповое изменение реквизитов с включенными служебными полями, предварительно убедившись, что на данный объект нет жестких ссылок в программном коде 1С:УНФ.