Как узнать, в каком релизе конфигурации 1С был удален объект метаданных

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Прежде чем безвозвратно удалять объект из рабочей базы, необходимо выяснить, в каком именно релизе от него отказался разработчик решения. Это нужно для того, чтобы изучить сопроводительную документацию к обновлению, понять логику вендора и корректно перенести накопленные данные в новые структуры (например, в механизмы БСП). В этой статье мы подробно разберем как классические методы, предложенные участниками сообщества, так и современные высокотехнологичные подходы к решению этой задачи.

Проанализируем все доступные варианты — от простых ручных действий до автоматизированного анализа версий.

Метод 1. Сравнение промежуточных релизов методом «деления пополам» (бинарный поиск)

Этот способ является классическим и наиболее надежным, если у вас под рукой есть доступ к дистрибутивам прошлых обновлений или возможность их быстро скачать. Рассмотрим его алгоритм по шагам.

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

  1. Определяем «середину» исследуемого интервала релизов. В нашем примере это будет релиз примерно из середины списка, допустим, версия 2.2.4.1.
  2. Скачиваем этот промежуточный релиз и разворачиваем его конфигурацию (файл .cf) в пустую файловую базу. Для этого даже не обязательно устанавливать шаблоны, достаточно распаковать файлы обновления.
  3. Открываем конфигурацию в режиме Конфигуратора и проверяем наличие искомого объекта (например, справочника ХранилищеДополнительнойИнформации).
  4. Делаем вывод:
    • Если объект присутствует в промежуточном релизе, значит, его удалили в диапазоне между 2.2.4.1 и 2.3.8.12. Нашим новым «левым краем» поиска становится версия 2.2.4.1.
    • Если объекта в промежуточном релизе уже нет, значит, его удалили раньше — в диапазоне между 2.1.2.5 и 2.2.4.1. Нашим новым «правым краем» поиска становится версия 2.2.4.1.
  5. Повторяем процедуру для оставшейся половины диапазона. Каждый раз мы сокращаем область поиска ровно в два раза. Для 32 релизов нам понадобится максимум 5 итераций сравнения, чтобы найти точный релиз удаления.

Этот метод гарантирует 100% точный результат, однако требует времени на скачивание и разворачивание конфигураций.

Метод 2. Анализ истории изменений на портале ИТС (releases.1c.ru) без скачивания

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

Разберем, как воспользоваться этим ресурсом:

  1. Зайдем на сайт releases.1c.ru под своей учетной записью ИТС и перейдем на страницу конфигурации (например, «Аптека»).
  2. Откроем список релизов. Вместо скачивания файлов обратим внимание на ссылки в колонках разделов. Нас интересуют две возможности:
    • Изменения в версии: В этом разделе разработчики публикуют списки измененных, добавленных и удаленных объектов метаданных. Мы можем открыть страницы нескольких релизов подряд и воспользоваться стандартным поиском по странице в браузере (сочетание клавиш Ctrl + F), введя имя нашего справочника.
    • Версии библиотек: Отраслевые решения часто базируются на Библиотеке Стандартных Подсистем (БСП). Если мы знаем, что искомый объект принадлежит БСП (как в случае с ХранилищеДополнительнойИнформации), мы можем посмотреть, в каком релизе нашей конфигурации обновилась версия БСП. Затем, зная версию БСП, мы легко найдем новость на сайте ИТС о том, в какой именно версии БСП данный справочник был выведен из состава библиотеки.

Метод 3. Глобальный текстовый поиск по локальному каталогу шаблонов (tmplts)

Если вы регулярно администрируете и обновляете базы данных, на вашем сервере или локальном компьютере уже установлены десятки прошлых обновлений. Все они по умолчанию распаковываются в единый каталог шаблонов. В операционной системе Windows этот каталог обычно находится по пути: %APPDATA%\1C\1cv8\tmplts.

Каждое обновление сопровождается текстовыми файлами описания: ReadMe.txt, НовоеВВерсии.htm, UpdInfo.txt. Мы можем запустить глобальный поиск по содержимому этих файлов, не открывая конфигуратор:

  1. Откроем любой файловый менеджер с функцией глубокого поиска по тексту (например, Total Commander) или профессиональный текстовый редактор (например, VS Code).
  2. Укажем целевую папку для поиска — ваш каталог шаблонов tmplts.
  3. В строке поиска введем точное имя объекта метаданных: ХранилищеДополнительнойИнформации.
  4. Запустим поиск. Программа просканирует все файлы .htm и .txt во всех подпапках всех релизов за несколько секунд.
  5. В результатах поиска мы увидим упоминания нашего объекта. В файлах обновлений обязательно будет строка вида: «В версии X.X.X.X справочник ХранилищеДополнительнойИнформации более не используется...». Это самый быстрый способ локального поиска без разворачивания баз.

Метод 4. Использование Git и EDT для контроля истории метаданных

Если в вашей компании внедрены современные стандарты разработки, конфигурация выгружается в файлы XML (с помощью стандартной команды платформы DumpConfigToFiles, инструмента gitsync или среды разработки 1С:EDT) и хранится в репозитории Git. В этом случае задача решается буквально одной командой в консоли Git.

Посмотрим на пример работы с Git. Каждый объект конфигурации при выгрузке представляется отдельным XML-файлом или папкой. Для справочника путь будет выглядеть примерно так: Catalogs/ХранилищеДополнительнойИнформации.xml.

Для того чтобы узнать, в каком коммите (и, соответственно, в каком релизе) этот файл был удален, мы можем выполнить следующую команду в терминале Git:

git log --diff-filter=D --summary | grep "ХранилищеДополнительнойИнформации"

Или, если нам нужно увидеть всю историю изменений этого объекта, включая момент его удаления, даже если файла уже физически нет в текущей рабочей директории:

git log --all -- "**/ХранилищеДополнительнойИнформации.xml"

Git вернет хэш коммита, автора изменений, дату и комментарий к коммиту. Если при обновлении конфигурации вы фиксируете номера релизов в комментариях к коммитам (например, «Обновление до релиза 2.3.5.12»), вы мгновенно узнаете нужную версию.

Метод 5. Анализ кода обработчиков обновления информационной базы (стандарты БСП)

Фирма «1С» следует строгим стандартам разработки при проектировании типовых и отраслевых конфигураций. Согласно стандартам, объекты метаданных никогда не удаляются «на лету» без предупреждения. Сначала они переводятся в категорию устаревших:

  1. Объект переименовывается с добавлением префикса Удалить... (например, УдалитьХранилищеДополнительнойИнформации).
  2. Его синоним меняется на (не используется) ....
  3. В модулях обновления (как правило, это общий модуль ОбновлениеИнформационнойБазыБСП или специализированный модуль вашей конфигурации) регистрируется обработчик обновления. Этот обработчик переносит накопленные данные из старой структуры в новые объекты метаданных.

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

Мы найдем процедуру регистрации обработчиков обновления. Код регистрации будет выглядеть примерно следующим образом:


Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт

    Обработчик = Обработчики.Добавить();
    Обработчик.Версия = "2.3.4.15";
    Обработчик.Процедура = "ОбновлениеИнформационнойБазыБСП.ПеренестиДанныеХранилища";
    Обработчик.ОбщиеДанные = Истина;

КонецПроцедуры

Обратим внимание на свойство Обработчик.Версия. Значение "2.3.4.15" указывает платформе, что этот код переноса данных должен выполниться при обновлении информационной базы на версию 2.3.4.15. Именно в этом релизе справочник официально перестал использоваться и был заменен новыми механизмами хранения файлов.

Метод 6. Автоматизация сравнения конфигураций через OneScript

Если у вас на диске скопилось множество файлов обновлений (.cf или .cfu) и вы хотите автоматизировать процесс поиска без ручного открытия Конфигуратора для каждого релиза, можно написать простой скрипт автоматизации с использованием командной строки платформы 1С или OneScript.

Платформа 1С поддерживает пакетный режим сравнения файлов конфигураций. Мы можем запустить сравнение двух последовательных версий программно:


"C:\Program Files\1cv8\8.3.22.1709\bin\1cv8.exe" DESIGNER /F "C:\Bases\EmptyBase" /CompareCfg "C:\CF_Files\Version_2.3.1.cf" "C:\CF_Files\Version_2.3.2.cf" -Out "C:\Reports\Compare_2_3_1_to_2_3_2.txt"

Написав простой цикл на OneScript, мы можем поочередно сравнить все имеющиеся у нас файлы обновлений и выгрузить отчеты сравнения в текстовые файлы. Затем с помощью обычного текстового поиска по полученным файлам отчетов мы мгновенно определим, в каком именно отчете впервые появится строка:

Справочник.ХранилищеДополнительнойИнформации. Удален

Резюме

Мы подробно рассмотрели целый спектр инструментов для решения этой задачи. Если вам требуется быстрое решение «здесь и сейчас» без лишних технических сложностей — используйте Метод 3 (глобальный текстовый поиск по локальным шаблонам) или Метод 2 (анализ сайта релизов ИТС). Если вы хотите выстроить надежный и технологичный процесс разработки в команде — внедряйте Метод 4 (контроль версий через Git и EDT).

← На главную