gifts2017

Обновление базы 1с 7.7. с помощью движка 1с 8.х

Опубликовал Валерий Дубовой (Valerich) в раздел Программирование - Практика программирования

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

Используя возможности движка платформы 1с 8.х можно существенно сэкономить себе время и нервы.

 Лень - двигатель прогресса

(С) не знаю чей Frown 

В последнее время стали очень часто выходить новые релизы ЗиК 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 очень небезразличен. Поэтому я на текст нового релиза, содержащего новые процедуры и функции натягивал старый релиз с исправлениями. (Каюсь, на картинке показано наоборот, потому что картинку делал опосля процесса).

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Il Il (Il) 28.04.12 03:48
Интересная задумка - надо попробовать.
А то реально сидеть и тупо состыковывать времени тратиться очень много! Спасибо за идею!
2. Александр Рытов (Арчибальд) 28.04.12 07:47
Я знаю, что круче Валерыча. Медные яйца.
3. Иван Иванов (Famza) 28.04.12 08:21
...натягивал старый релиз...
- улыбнуло.
(0) Как вариант, может попробовать конвертнуть свою базу и типовую-обновление в 8ку и там уже сравнить? Вдруг поможет
4. cmd_vasec (cmd_vasec) 28.04.12 11:05
5. ediks (ediks) 28.04.12 13:05
Весьма оригинальная идея. Вот если бы годика на 2 пораньше :D. Но все равно +
6. Александр Лыткин (TrinitronOTV) 28.04.12 17:18
я тоже плюсану за идею, да и не только за неё
7. Сергей (Che) Коцюра (CheBurator) 29.04.12 00:38
а декомпильнуть конфигу семерошную и сравнивать kdiff-ом..?
8. Программулькин (Программулькин) 29.04.12 04:11
оригинальная идея, а главное - всё просто!
9. Валерий Дубовой (Valerich) 29.04.12 04:27
(2) :) а почему именно медные?
10. Василий Антонов (khaoos) 02.05.12 06:30
Хм, с семеркой дело не имею, за исключением очень редких случаев, но какой геморрой при обновлении успел почувствовать, спасибо за идею. Плюсую однозначно ).
11. Андрей Хаймин (akb001) 02.05.12 06:46
Интересная идея, надо взять на вооружение!
12. Михаил М (Михаська) 02.05.12 10:03
Как говорится: все гениальное - просто :)
Спасибо за идею, возьму на заметку.
13. Станислав Гирман (Niberu) 02.05.12 11:00
Надо попробовать, похоже полезная фишка будет.
А то так люблю доооооолго пролистывать и вглядываться в различия и изменения в коде в родной "компарер" 77, запоминать-выписывать номера строк где-что и т.д. до жути ))
14. jack jack (jack_kkm) 03.05.12 06:57
Спасибо, может пригодиться.
15. Dima Dima (dumal) 03.05.12 14:21
Идея отличная, жаль только, что очень редко бывает так, что под рукой одновременно оказывается и 7.7 и 8. Клиентам это зачастую не нужно (экономия, зараза), а варианты, когда на предприятии ведется параллельно учет, скажем, ЗиК в 7.7, а бухии в 8.2 - редки, и прямо скажем, недолговечны. Все интеграторы стремятся как можно быстрее перетащить клиентов на более свежие платформы. Так что, как временное решение - очень неплохо. Жаль только, что за десять лет работы с 7.7 научился решать проблемы обновления настолько оперативно, что просто не хочется тратить время на создание новых конфигураций. Все равно быстрее по-старинке выйдет...
16. Дмитрий Леонов (Psylocibine) 03.05.12 21:12
Оригинальное решение!
К моему счастью, нечасто нынче приходится иметь дело с семеркой, но все же возьму на заметку:)
17. yurok kozorez (kozorez) 06.05.12 12:20
Спасибо за идею, очень пригодилась! вместо дня обновился за 20 мин.
18. denis leonov (curys) 11.05.12 09:02
спасибо за информацию, хорошее решение
19. Владимир (svsrus) 16.05.12 10:07
(7) Абсолютно согласен. Обычно где стоит 7-ка, 8-ки нет. И зачем выдумывать что-то новое, когда есть давно опробованное старое? kdiff или WinMerge. Мне второй больше по душе.
20. Александр Алюев (alyuev) 16.05.12 11:09
Я тоже WinMerge предпочитаю.
21. soba (soba) 28.05.12 01:08
Надо же до такого додуматься! Превосходная идея, реально экономящая время. Видимо автор много часов провел в правках измененных конфигураций. Однозначный +. Буру на вооружение
22. koka mrkv (kmar) 28.05.12 04:25
Похвала автору, идея замечательная, облегчил работу не опытному администратору.
23. zhuravlik (unichkin) 28.05.12 14:41
Подскажите пожалуйста, вот я создал две конфы, одна - ее нужно обновить, другую сохранил в вфайл, и загружаю в первую. Нажимаю правой кнопкой на модуль -> показать различие в модулях... - выходит окно "сравнение модулей", но при этом нельзя отметить те процедуры, которые я не хочу загружать, галки все уже стоят, и не изменяются. Куда надо нажать, чтобы модно было выбрать?
24. zhuravlik (unichkin) 28.05.12 14:59
+Все, разобрался) Надо было на лупу нажать. Очень хорошая придумка, помогло))
25. Александр (alex_sv) 03.06.12 08:20
Спасибо. Очень разумный подход.
26. phstranger 07.06.12 12:15
Классная идея. Голь на выдумки хитра )))
27. Sieg Heil (mdie) 17.06.12 19:03
(15)(19) Учитывая что можно воспользоваться портабельной (ссылки есть в googl'е, ну или делаем сами по мануалам там же) сборкой платформы 8.2 и повсюду таскать ее на флэшке с собой, то отпадает проблема с наличием нужной платформы :-)
28. Владимир Ёлохов (VladimirElohov) 20.06.12 21:58
Небольшая вариация на тему. Можно сравнивать модули обработок.
Одна встроенная, вторая внешняя. Тогда тоже можно обойтись одной базой.
29. Михаил Агальцов (mikeA) 26.10.12 21:00
При всём уважении к автору, давно существуют KDiff3, AraxisMerge, WinMerge, DiffMerge.
Можно выдернуть код модуля и сравнивать ими.
Причём сравнивать три версии сразу - старую, новую и изменённую старую, объединять и при объединении тут же править код, если надо.
Попроцедурно они конечно не могут, но обычно код процедур лежит в одном и том же месте модуля, так что их возможностей хватает.
30. search search (search) 30.07.13 00:06
Вещь полезная для получения позитивного опыта взаимодействия с 1с)))