Сравнение, трехстороннее объединение и обновление с помощью WinMerge

21.10.24

База данных - Обновление 1С

В статье рассматривается использование WinMerge для сравнения, объединения и обновления конфигураций 1С. Отдельно рассматривается методика трехстороннего сравнения при обновлении конфигурации

1С предоставила возможность разработчикам использовать сторонние утилиты для сравнения.

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

 

Настройка WinMerge

К сожалению, 1С не предлагает использование WinMerge, как внешнюю программу сравнения по умолчанию, поэтому настройку нужно выполнить вручную

Для этого в соответствующем разделе добавляем новую программу для сравнения и указываем следующие настройки

Сравнение двух файлов: /e /u  /dl %baseCfgTitle  /dr %secondCfgTitle %baseCfg %secondCfg
Объединение двух файлов: /e /u  /dl %baseCfgTitle  /dr %secondCfgTitle %baseCfg %secondCfg /o %merged
Трехстороннее объединение: /e /u  /fr /dl %oldVendorCfgTitle /dm  %baseCfgTitle  /dr %secondCfgTitle  %oldVendorCfg %baseCfg %secondCfg /o %merged
Автоматическое трехстороннее объединение: /e /u  /fm /dl %baseCfgTitle /dm  %oldVendorCfgTitle  /dr %secondCfgTitle %oldVendorCfg %baseCfg  %secondCfg /o %merged /am

 

 

Настройка внешней программы

Чтобы распробовать WinMerge рекомендую сначала настроить использование WinMerge как внешней программы, а когда освоитесь, то как основной программы для сравнения.


 

При такой настройке, для запуска WinMerge выбрать режим объединения "Объединить с помощью внешней программы", а затем на шестеренку.


 

Сравнение модулей

WinMerge сравнивает модули как текстовые файлы, без учета структуры. Иногда это может вызывать определенные сложности. Например, при массовом переносе функций по тексту.

Из больших плюсов WinMerge отмечу то, как WinMerger выделяет различия в пропущенных строках: он выделяет их отдельными строкам, так что текст визуально совпадает по размеру. На мой взгляд - это удобнее, чем в других сравнивалках текстов (P4Merge, например).

Коротко об интерфейсе WinMerge

  • Слева с краю расположена панель навигации(Location Pane). В панели помечаются выявленные различия по всему тексту. Об этой панели поговорим ниже. Забегая вперед отмечу, что эта панель основной рабочий инструмент при обновлении
  • Левое окно кода - содержит основной код модуля, здесь же результирующий код модуля. При сохранении текст из этого окна вернется в конфигуратор.
  • Правок окно кода - содержит код с которым сравниваем. Данный текст так же можно редактировать, но результат никуда не пойдет.
  • Панель внизу - детальное сравнение выделенных строк. Удобнее сравнивать, когда оно отключено.
  • Строки, которых нет в одной части выделены серым. Такие строки нельзя скопировать, они для визуального выделения пропусков.
  • Строки с различиями выделены оранжевым
  • Найденные различия выделены красным
  • Цветовую схему можно изменить в настройках
  • В настройках можно включить/выключить сравнение учитывая пробелы и регистр.
  • Для переноса строк в нужную часть можно воспользоваться кнопками сверху или горячими клавишами (Например, Alt+Влево - перенесет текст из правого окна в левое)
  • Для возврата кода в 1С достаточно сохранить текст(Ctrl+S) и закрыть WinMerge.

 

 

Трехстороннее объединение

Трехстороннее сравнение - это замечательная опция, которая появляется при использовании внешней программы для сравнения. Позволяет сравнить сразу три кода:

  1. Слева - Старый код поставщика
  2. Центр - Основной код конфигурации(с изменениями). Результирующий код
  3. Справа - Новый код поставщика

При таком сравнении можно сразу увидеть какие измерения сделал поставщик и понять нужно ли вносить в основной код какие-либо правки.

Дополнительным бонусом является возможность трехстороннего сравнения измененных функций в расширениях с типом вызова "ИзменениеИКонтроль".

Например, на скрине ниже сравнение модуля обработки.

В панели навигации(Location Pane) видны участки кода, которые были изменены при внедрении. Видны изменения которые сделал поставщик, и проблемные участки кода. Детальное описание Location Pane ниже.

 

 

Задача - перенести код из правой колонки в центральную.

Делать это можно как построчно, так и выделив блок кода, затем нажав на сочетание Alt+Влево
Можно копировать и вставлять блоки кода(простой копипастой).

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

Я выделяю код в правой панели ткнув в белый участок, затем, зажав Shift и используя скрол мыши добираюсь до участка кода, который нужно оставить или как-то обработать. Затем нажимаю Alt+Влево. Весь выделенный фрагмент переносится в результат.

 

Использование Location pane

Важнейшая фича WinMerge, которая помогает при трехстороннем обновлении - это панель навигации по коду, Location pane.

Location Pane отображает все различия, которые есть в коде. По цветовым маркерам в Location Pane можно определить какие места в коде требуют детального рассмотрения, а какие можно объединить, не погружаясь в анализ различий.
На Location Pane видим три столбика в которых цветами выделяются различия кода. Три столбика соответствуют трем окнам. Так же цветом выделяются области между столбиками.
Наибольшую полезность представляют именно эти отметки между колонок.

 

Пояснение по цветовым выделениям в WinMerge

Все описания в цветовой схеме по умолчанию


 

  1. Серым - выделен отсутствующий блок кода
  2. Бирюзовым (в области между колонок) - Когда блок кода присутствует только в основной конфигурации. Например, когда сделана доработка кода. Но данного блока нет ни в старой, ни в новой конфигурации поставщика
  3. Оранжевый - Код присутствует, и имеет какое-то отличие от остальных конфигураций. Оранжевым отмечаются все различия. Это цвет по умолчанию для WinMerge.
  4. Бледно желтый (в коде) - Код поставщика совпадает с кодом основной конфигурации.
    • Если выделена левая колонка, то основной код совпадает со старым кодом поставщика, но не совпадает с новым кодом. Доработок не было, и в этом случае нужно перенести новый код поставщика.
    • Если выделена правая колонка, то новый код поставщика совпадает с результатом. Делать ничего не нужно
  5. Желтый (в области между колонок) - Показывает, что основной код с одной стороны совпадает с кодом поставщика с другой отличается. Используется совместно с бледно желтым
  6. Красный (в области между колонок) - WinMerge не смог сопоставить старый код поставщика, основной и новый код. Так бывает, например, в случае, когда в правки в код были в внесены в те же строки которые изменились в новой конфигурации поставщика.
    Все отметки красного цвета нужно объединять внимательно.
  7. Коричневый - Перенос строк. WinMerge подсказывает что некоторые блоки были не просто удалены, но перенесены в другое место. Есть возможность быстрого перехода к участку текста куда перенесен блок кода(Через правую кнопку мыши).
    К сожалению, нет возможности быстро перенести перемещенные блоки и отсутствует простая возможность сверки, что в перемещенном коде не сделали никаких изменений.

    Мне помогает небольшая хитрость: чтобы понять, что изменилось в коде, переношу в блок в старом коде поставщика, в то же место, куда его перенесли в новом, и проделываю эту же операцию с основным кодом. В этом случае возвращается возможность сравнения.

 

Резюме

Благодаря панели навигации, трехстороннее сравнение позволяет серьезно сократить время необходимое для обновления модулей конфигурации.

На наших проектах сократили время обновления конфигурации в несколько раз.

Большой бонус - это возможность трехстороннего сравнения импортированных модулей в расширения. Конфигуратор 1С не предоставляет такой опции.

Возможно, в будущем в WinMerge появится подсветка синтаксиса кода 1C

П.С. Напишите комментарии, если нужно дополнить статью примерами сравнения.

WinMerge сравнение объединение обновление оптимизация разработки.

См. также

Зарплата Регламентированный учет и отчетность Кадровый учет Обновление 1С Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

27900 руб.

01.04.2020    147442    649    362    

235

Обновление 1С Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Те кто объединял конфигурации находящиеся на поддержке, обновлял подсистемы БСП прекрасно помнят упражнение «10000 тысяч кликов мышкой» или, непонятное словесное заклинание, после которого конфигурация снимается с поддержки целиком.

1 стартмани

26.09.2024    529    3    milkers    2    

7

Обновление 1С Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

Вышел новый релиз для УТ11 5.19.63. На копии базы было выполнено обновление и вылезли проблемы с номенклатурой, подлежащей маркировке. В публикации описаны проблемы, обнаруженные в копии базы конкретной организации.

24.09.2024    962    gull22    2    

8

Обновление 1С Программист Платформа 1С v8.3 Бесплатно (free)

Как исправить медленное сравнение конфигурации с файлом cf, сохраненным из хранилища.

17.09.2024    4462    vatkir    15    

10

Обновление 1С Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 Абонемент ($m)

Упрощенное обновление конфигураций 1С (предпочтительно самописных) с помощью батника и Яндекс Диска (по публичной ссылке)

1 стартмани

22.08.2024    593    0    user1694357    0    

4

Обновление 1С Системный администратор Россия Абонемент ($m)

На ИТС есть статья, в которой поверхностно описан процесс автоматического обновления тонких клиентов. В качестве примера, что логично, представлены методы конфигурации 1С. Но, в отличие от того же управления списками баз, для обновления не требуется хранить информацию, потому я решил переписать код на php, чтобы можно было отвязаться от 1С. Не работает для файловых баз, подключенных как File="ПутьКПапкеБазы"; (а жаль), для опубликованных файловых - работает.

1 стартмани

20.08.2024    729    MikeSh    10    

2

Обновление 1С Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Бесплатно (free)

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

05.08.2024    880    NikiforovVA    0    

1
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Созинов 21.10.24 19:50 Сейчас в теме
Спасибо, интересно. Есть вопрос - зависает ли WinMerge, если в процессе обновления/объединения менять метаданные, сохранять и запускать объединение снова? KDiff иногда подвисает, при этом недостаточно просто убить процесс (https://forum.infostart.ru/forum9/topic266589/)
7. mixaeel 17 22.10.24 11:01 Сейчас в теме
(1) При открытии WinMerge окно Конфигуратора 1С блокируется, и сделать что-то с метаданными из конфигуратора не получится (стандартными средствами).
Не замечал вообще каких-либо проблем с подвисанием WinMerge.
Бывают ситуации, когда забываешь, что открыт WinMerge и пытаешься в конфигураторе что-то сделать, а он будто завис.
9. mixaeel 17 22.10.24 12:56 Сейчас в теме
(1) Еще один момент.
При попытке открыть уже объединенный модуль, Конфигуратор откроет стандартную форму текста без учета структуры. Из этой формы есть только опция повторного объединения модулей (объединение придется делать заново).
2. v8_088 21.10.24 20:31 Сейчас в теме
Трехстороннее сравнение это очень хорошо. А вот кто скажет, как сравнивать N шт. расширений (N > 30 к примеру), в которых многократно заимствованы объекты из основной конфигурации ?
5. Xershi 1557 21.10.24 22:37 Сейчас в теме
(2) чисто для справки для чего столько расширений? Почему не перенести в 1?
11. v8_088 22.10.24 17:46 Сейчас в теме
(5) В разное время разные доработчики делали ;( Перенести в одно может и можно, но трудоемко, да и по функциональности это тоже не правильно - разнородные доработки свалить в один котел.
13. Xershi 1557 22.10.24 17:54 Сейчас в теме
(11) я по немного переношу. У нас есть подрядчик. Даем задачи с не пересекающимся функционалом. При обновлении рекомендую начать переносить. Ещё для себя открыл тему делать доработки через программный интерфейс. Потом быстрее встроить в новый объект и легче обновить.
6. amiralnar 9 22.10.24 08:04 Сейчас в теме
(2) А какой результат подобного сравнения вы ожидаете?
12. v8_088 22.10.24 17:49 Сейчас в теме
(6) По строкам узлы элементов конфигураций как в типовом конфигураторе при сравнении .сf-ников, по колонкам расширения по их числу.
3. PerlAmutor 155 21.10.24 20:46 Сейчас в теме
Рассмотрим в качестве утилиты WinMerge. Утилита бесплатная, кроссплатформенная, с открытым исходным кодом и поддержкой синтаксиса различных языков (язык 1С пока не поддерживается, но кто знает).

Я может чего не знаю, но название Win* в инструменте уже как бы намекает, что она НЕ кроссплатформенная. Да и в описании на сайте у них написано "Для Windows", да и на гитхабе нет сборок под линь.

Я потому изначально и не стал изучать этот инструмент, а сразу взял KDiff3 + P4Merge. Оба есть под Linux.

Через Wine запускать не вариант, так и до виртуалки с Windows докатиться не долго.
8. mixaeel 17 22.10.24 11:04 Сейчас в теме
(3) Ваша правда, мой большой косяк.
Спутал его в своем сознании с Meld.
Статью исправлю, спасибо за замечание.
4. Xershi 1557 21.10.24 22:35 Сейчас в теме
Использовал данное ПО для ручного сравнения.
Благодаря вам, буду использовать в 1с.
Ранее думал изучать кдиф3, а не придется!!
10. Xershi 1557 22.10.24 15:41 Сейчас в теме
(4) настройка заняла 2 минуты, еще раз спасибо за статью.
Да на сайте написано что приложение для винды, они выпустили просто файлы для разных процов. Сейчас же винда на мобильных процессорах работает.
Скачал инстал, причем свежий уже, я 2.14 на своем ПК пользовался. Обновил у себя, 2.16 скачал с сайта, там уже 64 битная версия кстати. Причем ребята следят за проектом и обновляют 2024 год!
14. webester 26 23.10.24 11:11 Сейчас в теме
Умеет ли она сама решать конфликты, как это делает kdiff?
15. mixaeel 17 25.10.24 12:17 Сейчас в теме
(14) Есть опция в параметрах запуска, как оно работает (и работает ли вообще), не проверял.
В самом WinMerge не смог найти опции по авторазрешению.

По ощущению, врядли из авторешения конфликтов получится что-то хорошее. у WinMerge иногда встречаются проблемы при добавлении кода в конец модуля. Если добавлен код в типовую в конец модуля, и поставщик добавил код туда же, то WinMerge помечает это различие красным. В ручном режиме это решается довольно просто - копипастится новый код поставщика.
16. webester 26 25.10.24 12:25 Сейчас в теме
(15)
По ощущению, врядли из авторешения конфликтов получится что-то хорошее.
Попробуйте посмотреть как это делает kdiff использую его для восстановления работоспособности в расширениях когда используется "ИзменениеИКонтроль". В 99% если наши правки не попали на одно и тоже место, он решает конфликты самостоятельно.
В ручном режиме это решается довольно просто - копипастится новый код поставщика.
хм по логике он должен показать две дельты: твой добавленный код и код поставщика. Чтобы ты в одном случае ткнул, оставить свои изменения, а во втором, ткнул взять изменения поставщика.
17. mixaeel 17 25.10.24 16:55 Сейчас в теме
(16) Подскажите, как настроить kdiff и что нажать, чтобы запустить авторазрешение конфликтов? С расширениями работал совсем немного.


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

WinMerge не может понять где произошло изменение.
Он видит, что старый код не совпадает с основным, новый код не совпадает с основным, и старый код не совпадает с новым кодом. + встречаются некоторые знакомые слова, типа функция, области и прочее,
Он считает что изменено одно и то же место кода, но не может понять что случилось, поэтому помечает это красным.
18. webester 26 26.10.24 13:07 Сейчас в теме
(17)
Подскажите, как настроить kdiff и что нажать, чтобы запустить авторазрешение конфликтов? С расширениями работал совсем немного.

Я ничего такого особенного не настраивал. Указал в настройках путь к программе кдифф. Потом когда проверяешь применимость расширений в списке конфликтов справа есть ссылка "исправить" или что-то похожее по названию. Нажимаешь, запускается кдифф который рапортует, что нашел 9 конлфиктов из которых успешно решил к примеру 7 а остальные тебе надо самому додумать, какую версию брать. Исправляешь нажимаешь сохранить готово. Если он все порешал автоматически то просто сохранить и закрыть.
Оставьте свое сообщение