При сопровождении или обновлении конфигураций на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда привычные объекты метаданных (регистры, справочники, документы) внезапно меняют свое имя, получая префикс Удалить или Удалить_. Это вызывает сбои в работе внешних отчетов, написанных на СКД, и ставит в тупик разработчиков. В этой статье мы подробно разберем, почему это происходит, что делать с данными и как правильно адаптировать свои доработки под новую структуру конфигурации.
Проанализируем причины появления таких правок в конфигурации. Согласно официальным стандартам разработки «1С», прямое удаление объекта метаданных из состава конфигурации — это крайняя мера, которая может привести к безвозвратной потере данных у пользователей. Чтобы процесс перехода на новые механизмы был плавным, разработчики используют механизм вывода из эксплуатации.
Рассмотрим основные этапы этого процесса:
Удалить. С этого момента объект считается устаревшим (deprecated).ЛимитыПродаж появляется ЛимитыПродажНовый или данные распределяются по другим таблицам). При обновлении запускаются специальные процедуры миграции данных.Выясним причину ошибки в вашем отчете. Если СКД перестал находить таблицу, это означает, что логика программы больше не опирается на старый регистр. Посмотрим на практические шаги по поиску замены:
Во-первых, проанализируем свойство объекта Предупреждение при использовании. В современных конфигурациях разработчики обязаны заполнять это поле. Откройте Конфигуратор, найдите ваш объект с префиксом Удалить, нажмите правую кнопку мыши и выберите «Свойства». В разделе «Справка» или в поле предупреждения часто прямо написано: «Используйте вместо этого объекта регистр [ИмяНовогоРегистра]».
Во-вторых, разберем механизм обновления через БСП (Библиотеку стандартных подсистем). Основная логика переноса данных сосредоточена в модулях обновления. Попробуем найти их через глобальный поиск по конфигурации. Нам нужно искать старое имя объекта (без префикса). Обратите внимание на общие модули, названия которых заканчиваются на ОбновлениеИнформационнойБазы[ПрефиксКонфигурации].
Пример того, как может выглядеть процедура миграции в коде:
Процедура ПеренестиДанныеВНовыйРегистр() Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| УдалитьРегистр.Номенклатура,
| УдалитьРегистр.Количество
|ИЗ
| РегистрСведений.УдалитьЛимитыПродаж КАК УдалитьРегистр";
Результат = Запрос.Выполнить().Выгрузить();
// Далее идет логика записи в новый объект...
КонецПроцедуры
Рассмотрим ситуацию, предложенную в обсуждении: можно ли просто подставить имя РегистрСведений.Удалить[Имя] в запрос отчета? Технически — да, отчет может заработать, но это крайне рискованно по нескольким причинам:
НаборЗаписей.Очистить(). В итоге вы получите пустой отчет.Разберем по шагам, как правильно исправить отчет, если вы обнаружили объект с префиксом Удалить:
ПриУстановкеПараметровСеанса.Посмотрим на пример того, как можно программно проверить, помечен ли объект на удаление, если вы пишете универсальную обработку:
МетаданныеОбъекта = Метаданные.РегистрыСведений.Найти("УдалитьЛимитыПродаж");
Если МетаданныеОбъекта <> Неопределено Тогда
Если СтрНайти(МетаданныеОбъекта.Имя, "Удалить") > 0 Тогда
Сообщить("Внимание: Используется устаревший объект!");
КонецЕсли;
КонецЕсли;
Появление префикса Удалить — это не «глупый вопрос», а сигнал к тому, что архитектура системы перешла на новый уровень. Использование таких объектов в долгосрочной перспективе недопустимо. Рекомендуем всегда отслеживать Состав изменений в описании релиза и своевременно переводить свои доработки на актуальные таблицы данных. Это гарантирует корректность отчетов и отсутствие проблем при последующих обновлениях системы.