Лень - двигатель прогресса
(С) не знаю чей
В последнее время стали очень часто выходить новые релизы ЗиК 7.7. С учетом того, что в глобальном модуле сделаны изменения, от которых невозможно отказаться, обновление превращается в идиотскую проблему на несколько часов - как объединить новый релиз со своими правками.
В общем задача стояла рутинная, в последнее время довольно регулярная, но от этого не менее противная, а может даже и более - обновиться на новый релиз.
Все бы ничего, изменения в конфе сделаны крайне аккуратно, головняка практически не представляют за исключением глобального модуля. В этом монстре программирования от 1с почти 90 тысяч строк. А изменения касаются тех, в которых сама 1с постоянно косячит и их же исправляет, но как-то не там где надо - расчет страховых взносов, ндфл, формирование проводок и т.п. В общем не самые безобидные куски кода.
Материалы, которые были давно изучены и применялись на практике
Технология обновления нетиповых конфигураций, оно же Технология обновления нетиповых конфигураций 7.7
помогают, но очень слабо в виду ограниченности возможностей 1с 7.7 в плане визуализации отличий и в инструментах объединения двух, не побоюсь этого слова, гигантских модулей.
Грешным делом подумал: "А не написать ли свой объединятель модулей?"... и даже в течение 10 - 15 минут в голове зрели алгоритмы. Потом в голову пришла смелая мысль, которая спасла от дурацкой работы с неизвестным финалом: а ведь 1с 8.х при объединении конфигураций позволяет определять правила объединения модулей на уровне процедур и функций... Так зачем же изобретать велосипед???
Попробовал и результат мне понравился. То, на что у меня ранее уходило по несколько часов удалось сделать за 15 минут.
Итак, что надо иметь, так это платформу 1с 8.х (у меня под руками оказалась 8.2).
Создал 2 пустые базу. Я их создал в варианте обычного приложения (для 8.0 и 8.1 это единственно возможный вариант).
Взял содержимое глобального модуля текущего ЗиКа и скопировал в модуль обычного приложения одной базы, а глобальный модуль нового релиза в такой же модуль обычного приложения другой базы. Сохранил конфигурацию 1-ой базы в файл и во второй базе вызвал "Конфигурация -> Сравнить, объединить с конфигурацией из файла..."
Чтобы 8-ка не ругалась на непривычный синтаксис, можно в настройках отключить автоматическую проверку синтаксиса.
Получил очень человеческий диалог, в котором работать намного проще, чем в 7.7 и можно определять правила замещения, объединения на уровне процедур и функций. Дополнительный бонус в том, что различия в непечатных символах в 8.2 не отображаются как отличия. Т.е. если 1с заменить табуляцию на пробелы, то в 7.7 вы увидите при сравнении модулей, что строки различны (хотя и не видно в чем разница), а 8-ка покажет, что они идентичны (во сяком случае у меня получилось именно так).
Таким образом можно объединять не только глобальный модуль, но и модуль любого другого объекта, изменения в котором Вам дороги. Тексты можно загружать в любые объекты модулей 8-ки, например наделать общих модулей. Если Вы работаете с двумя базами как я, то учтите, что модули должны называться одинаково. Или же вторую базу можно делать из первой.
В принципе можно обойтись и одной базй, в которую сначала загружаются модули из одной конфигурации, делается выгрузка конфигурации, а потом загружаем модули из другой.
Еще рекомендую выполнять сравнение и объединение в непривычном порядке - в качестве основы использовать новый релиз, а на него натягивать свою измененную конфу. Логика такого совета в том, что 1с 8.х при объединении модулей, если в исходной конфигурации каких-то процедур и функций нет, новые процедуры и функции могут быть добавлены в конец. В основном это, конечно, касается конфигураций с поддержкой, но были преценденты и для самописных. Для 8-ки порядок следования функций и процедур в модуле неважен, а вот для 7.7 очень небезразличен. Поэтому я на текст нового релиза, содержащего новые процедуры и функции натягивал старый релиз с исправлениями. (Каюсь, на картинке показано наоборот, потому что картинку делал опосля процесса).