Изгнание лишних глобальных общих модулей из конфигурации


Досталась мне очень древняя база УПП, в которой было штук 20 типовых общих модулей, которые были глобальными. Процедуры и функции в этих модулях были или сильно переписаны, или не актуальны, но на них работала половина базы.

Дабы появилась возможность добавлять из типовой УПП актуальные версии общих модулей, было принято решение написать обработку, которая уберёт у лишних модулей признак глобальности, переименует их, а везде, где использовались процедуры и функции из этих модулей, поправит пути к ним.

Принцип работы обработки получился следующим: мы загружаем требуемую конфигурацию в пустую файловую базу, указываем в обработке путь к этой базе и запускаем. Далее обработка выгружает конфигурацию в файлы, ищутся глобальные модули, а в них экспортные функции. Далее ищутся модули в которых используются данные процедуры и функции и исправляются пути. В файлах интерфейса так-же происходит исправление. Общие модули переименовываются (добавляется префикс "old"). Из указанной базы данных выгружаются внешние отчёты и обработки, распаковываются "v8unpack.exe", так же обрабатываются и загружаются обратно.

Для работы обработки потребуется: Платформа 8.3.7.1759 или 8.3.8.1652 или выше (тестировалось на 8.3.10.2580), "VBScript.RegExp", "v8unpack.exe" (использована версия 2.0), "Scripting.FileSystemObject" (для переименовывания каталогов).

Интерфейс обработки достаточно аскетичный. В процедуре "ПриОткрытии" расположены необходимые параметры с описанием, а в "КнопкаВыполнитьНажатие" список исполняемых процедур.

Регулярные выражения

для поиска экспортных процедур: #k8SjZc9Dxk(( | )*([Пп]роцедура|[Фф]ункция))s.*(([#k8SjZc9Dxk)]*))s*([Ээ]кспорт)+

для поиска и замены функций:

шаблон  ([#k8SjZc9Dxk._[а-яА-ЯёЁa-zA-Z0-9])(ЭтоЭкспортнаяФункция|ИЭтоЭкспортнаяФункция|ВсеЭкспортныеФункцииОдногоОбщегоМодуля)(s*)(?=()   

строка замены "$1" + НовоеНаименованиеБывшегоГлобальногоМодуля + "." + "$2" + "$3"

для поиска и замены функций в файлах интерфейса:

см. в обработке.

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *