При работе в команде над крупными проектами часто возникает необходимость выяснить происхождение конкретного участка кода. Кто добавил эту функцию? В рамках какой задачи она появилась? Когда именно это произошло? Стандартные механизмы хранилища 1С предоставляют базовую историю, но найти в ней момент появления одной маленькой процедуры среди тысяч коммитов в огромном модуле может быть непросто. В этой статье мы разберем несколько эффективных методов поиска истории изменений конкретного программного кода.
Самый очевидный и доступный способ — это использование стандартного окна истории объекта. Однако, если модуль изменялся сотни раз, открывать каждое сравнение вручную нерационально. Рассмотрим алгоритм действий, который поможет оптимизировать этот процесс.
Для начала откроем историю интересующего нас объекта (например, общего модуля или модуля документа). Для этого нажмем правой кнопкой мыши по объекту в дереве конфигурации и выберем пункт «История объекта». Перед нами откроется список всех версий, когда данный объект помещался в хранилище.
Чтобы быстро найти версию, в которой появилась процедура, применим метод «деления отрезка пополам» (бинарный поиск):
Для сравнения двух точек в истории выделите их (удерживая Ctrl) и нажмите кнопку «Сравнить». В открывшемся окне сравнения модулей мы увидим все различия.
Если «прыгать» по версиям неудобно, можно воспользоваться встроенным механизмом генерации отчетов. Этот способ позволяет получить единый текстовый документ со всеми изменениями за определенный период.
Разберем, как это сделать:
Теперь мы можем нажать Ctrl+F и выполнить поиск по названию нашей процедуры ИмяНужнойПроцедуры. Мы сразу увидим все моменты, когда эта строка фигурировала в изменениях, и номера соответствующих версий хранилища вместе с комментариями разработчиков.
Современная среда разработки EDT предоставляет гораздо более мощные инструменты для анализа истории кода, аналогичные тем, что используются в Git. Если ваша конфигурация импортирована в проект EDT, вы можете воспользоваться функцией «Show Annotations» (Аннотирование).
Проанализируем преимущества этого подхода:
После этого напротив каждой строки кода появится информация о последнем изменении: дата, автор и номер помещения. Если навести курсор на аннотацию, можно увидеть полный текст комментария к помещению. Это позволяет мгновенно понять, кто последним трогал конкретную строку функции.
Если проект живет долго и история очень запутанная, лучшим решением будет использование инструментов конвертации хранилища 1С в репозиторий Git. Это позволяет использовать команду git blame или графические интерфейсы (например, GitKraken или встроенные средства VS Code).
Рассмотрим, почему это эффективно:
Существуют специализированные инструменты (например, разработки Александра Орефкова или подсистемы «Инструменты разработчика»), которые позволяют программно обращаться к данным хранилища. Мы можем написать небольшой скрипт, который переберет версии модуля и найдет вхождение строки.
Логика работы такого скрипта могла бы выглядеть так:
Для Каждого НомерВерсии Из СписокВерсий Цикл
ТекстМодуля = ПолучитьТекстОбъектаИзХранилища(ОбъектМетаданных, НомерВерсии);
Если СтрНайти(ТекстМодуля, "Процедура МояФункция") > 0 Тогда
Сообщить("Функция найдена в версии: " + НомерВерсии);
Прервать;
КонецЕсли;
КонецЦикла;
Хотя штатно в 1С нет простого API для работы с хранилищем из встроенного языка, такие задачи решаются через COM-соединение или анализ файлов, выгруженных с помощью параметров командной строки Конфигуратора /ConfigurationRepositoryDumpCfg.
Выясним причины, по которым поиск может не дать результата с первого раза. Часто разработчики не пишут новую функцию с нуля, а переносят ее из одного модуля в другой. Для хранилища 1С это выглядит как полное удаление текста в одном объекте и добавление нового текста в другом. В этом случае история «переезда» теряется.
Если вы не находите момент появления функции в конкретном ОбщийМодуль, попробуйте выполнить глобальный поиск по всей конфигурации в текущем состоянии, а затем, если есть подозрения на старое имя или старое местоположение, воспользуйтесь поиском по комментариям в истории всего хранилища. Часто в комментариях вида «Перенес методы в общий модуль по задаче №123» кроется ключ к разгадке.
Подведем итог: для быстрого поиска используйте бинарный поиск (деление пополам) в истории объекта. Для детального анализа всей функции — отчет по истории с отображением различий. А для профессиональной командной разработки и детального контроля каждой строки кода — переходите на EDT и Git.