Настройка KDiff3 для исключения номеров строк в отчетах о сравнении конфигураций

21.09.20

Разработка - Инструментарий разработчика

Те, кто часто обновляют доработанные типовые конфигурации, а потом проверяют корректность обновления, сравнивая отчеты о сравнении конфигураций, знают, как мешают при этом строки вида "Объект присутствует только в первой|второй конфигурации: 99 - 99", "Изменено: 99 - 99".
Но если вы, как и я, пользуетесь для этого утилитой KDiff3, то есть простой способ избавиться от таких строк.

Введение

Настройка KDiff3

Как это работает

Использованные материалы


Введение

О контроле корректности обновления коротко, но емко, написано в статье 
Как убедиться в том, что измененная типовая конфигурация 1С обновлена успешно.

Там же приведен макрос для Notepad++, алгоритм которого я и взял за основу для настройки KDiff3.

Ссылку на статью я подглядел в публикации Обновление измененной типовой конфигурации 1С на платформе 8.3. Чек-лист и тайминг. Спасибо автору!

Также в несколько строк и не очень внятно (размыто по тексту) об этом сказано на ИТС в Приложении 2 стандарта Технология разветвленной разработки конфигураций.


О процессе собственно обновления конфигураций на поддержке я нашел только:

 

Настройка KDiff3

Перейдем к делу, детали позже.

Если KDiff3 еще не установлена, дистрибутив находится здесь. Последняя версия на момент публикации 0.9.98.
Процесс установки тривиален, на этом останавливаться не будем.

Запускаем KDiff3, в диалоге выбора файлов просто жмем ОК.

Переходим к настройкам: 
1. Settings – Configure KDiff3…
2. Переходим на вкладку Diff
3. И в поле Preprocessor command вводим такой текст:

sed 's/^\([ \x09]*\xD0\x9E\xD0\xB1\xD1\x8A\xD0\xB5\xD0\xBA\xD1\x82\x20\xD0\xBF\xD1\x80\xD0\xB8\xD1\x81\xD1\x83\xD1\x82\xD1\x81\xD1\x82\xD0\xB2\xD1\x83\xD0\xB5\xD1\x82\x20\xD1\x82\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xBA\xD0\xBE\x20\xD0\xB2.\+ \xD0\xBA\xD0\xBE\xD0\xBD\xD1\x84\xD0\xB8\xD0\xB3\xD1\x83\xD1\x80\xD0\xB0\xD1\x86\xD0\xB8\xD0\xB8:\) [0123456789]\+ - [0123456789]\+$/\1 N - N/;s/^\([ \x09]*\xD0\x98\xD0\xB7\xD0\xBC\xD0\xB5\xD0\xBD\xD0\xB5\xD0\xBD\xD0\xBE:\) [0123456789]\+ - [0123456789]\+$/\1 N - N/'
Скриншот
 
 

4. Жмем Ok. Готово.


Проверяем.

Введем с левой стороны такой текст (надо просто скопипастить):

Текст слева
 
 

А с правой – такой:

Текст справа
 
 

В результате должно получиться так:

Результат
 
 

Для сравнения, так было без этих настроек:

Было
 
 


Как видно, ненужные нам номера строк заменены на символы ‘N’. 
Но если вдруг случилось, что такой же текст встречается в коде, то он останется как есть.

 

Как это работает

Для любознательных.

Разберем подробно Preprocessor command:

sed 's/^\([ \x09]*\xD0\x9E\xD0\xB1\xD1\x8A\xD0\xB5\xD0\xBA\xD1\x82\x20\xD0\xBF\xD1\x80\xD0\xB8\xD1\x81\xD1\x83\xD1\x82\xD1\x81\xD1\x82\xD0\xB2\xD1\x83\xD0\xB5\xD1\x82\x20\xD1\x82\xD0\xBE\xD0\xBB\xD1\x8C\xD0\xBA\xD0\xBE\x20\xD0\xB2.\+ \xD0\xBA\xD0\xBE\xD0\xBD\xD1\x84\xD0\xB8\xD0\xB3\xD1\x83\xD1\x80\xD0\xB0\xD1\x86\xD0\xB8\xD0\xB8:\) [0123456789]\+ - [0123456789]\+$/\1 N - N/;s/^\([ \x09]*\xD0\x98\xD0\xB7\xD0\xBC\xD0\xB5\xD0\xBD\xD0\xB5\xD0\xBD\xD0\xBE:\) [0123456789]\+ - [0123456789]\+$/\1 N - N/'


Как сказано в документации, файлы, которые мы передаем KDiff3, перед сравнением проходят через препроцессор.
Препроцессор – это внешняя команда, указанная в настройке Preprocessor command.
В данном случае такой внешней командой является утилита sed.exe. Она расположена там же, где и исполняемый файл KDiff3 (у меня в C:\Program Files\KDiff3\bin\).

Т.е. первая часть Preprocessor command – это вызов утилиты sed.exe.


Утилита вызывается с командой s. Синтаксис этой команды: 's/regexp/replacement/flags'. Подробнее здесь.
В каждой строке исходного файла утилита ищет фрагменты, соответствующие выражению regexp, и если находит, то заменяет их по правилам, указанным в replacement. Флаги flags мы здесь не используем.
Различные примеры использования команды есть в документации KDiff3.

Простой пример
 
 


Пойдем дальше.
Фрагменты вида \xD0\x9E – как вы наверное догадались, это символы кириллицы в кодировке UTF8.
Если бы утилита sed понимала кириллицу, то команда была бы такой:

sed 's/^\([ \x09]*Объект присутствует только в.\+ конфигурации:\) [0123456789]\+ - [0123456789]\+$/\1 N - N/;s/^\([ \x09]*Изменено:\) [0123456789]\+ - [0123456789]\+$/\1 N - N/'

Теперь, когда буков стало меньше, дальше разобраться будет проще.


Утилита sed может принимать несколько команд. Отдельные команды разделяются символом ';'. Команды выполняются последовательно. Выход предыдущей является входом для следующей (но в данном случае мы эту возможность не используем).
В нашем случае по очереди выполняются две команды:

sed 's/^\([ \x09]*Объект присутствует только в.\+ конфигурации:\) [0123456789]\+ - [0123456789]\+$/\1 N - N/'
sed 's/^\([ \x09]*Изменено:\) [0123456789]\+ - [0123456789]\+$/\1 N - N/'


Разберем только первую. Вторая построена аналогично, и она чуть проще.

Наше выражение regexp (один из вариантов синтаксиса описан здесь) состоит из следующих элементов:

^ – начало строки;
[ \x09]* – 0 или более символов пробела или табуляции в любом сочетании;
.\+ – 1 или более любых символов;
[0123456789]\+ – 1 или более числовых символов в любом сочетании;
$ – конец строки.
Остальные фрагменты представляют сами себя.

Некоторые части выражения regexp могут быть взяты в скобки \(, \). То, что между этими скобками, становится самостоятельным подвыражением. А исходный текст, найденный с помощью такого подвыражения, запоминается как обратная ссылка. Каждой паре скобок соответствует отдельная обратная ссылка. Обратные ссылки нумеруются в порядке следования подвыражений слева направо, начиная с 1.
Обратные ссылки можно использовать в выражении replacement, обращаясь к ним по номерам: \1, \2 и т.д.


Таким образом, мы ищем такие строки, которые:

  • начинаются с нуля или более пробелов или табуляций,
  • вслед за которыми следует текст "Объект присутствует только в",
  • далее 0 или более любых символов, пока не встретим
  • фрагмент " конфигурации:",
  • далее пробел, число, пробел, '-', пробел, число,
  • и на этом строка обязательно должна закончиться.

При этом мы запоминаем текст от начала строки до символа ':' как обратную ссылку номер 1.


Если такая строка найдена, она будет заменена в соответствии с выражением replacement: \1 N - N.

Здесь все значительно проще.

Мы подставляем обратную ссылку номер 1, т.е. исходную строку до символа ':', и добавляем текст " N - N".


На этом всё!
Надеюсь, моя статья будет полезна.

 

Использованные материалы

KDiff KDiff3 Настройка Обновление Сравнение Отчет Контроль корректности Проверка правильности

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    124962    683    389    

732

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    7773    24    6    

42

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 руб.

10.11.2023    4285    12    2    

36

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2280 руб.

14.01.2013    178651    1084    0    

862

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99633    239    97    

298

[ЕХТ] Фреймворк для Расширений 1С

Инструментарий разработчика Платформа 1С v8.3 Управляемые формы Платные (руб)

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18389    6    8    

40

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

Инструментарий разработчика Обмен между базами 1C Платформа 1С v8.3 Платные (руб)

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

2400 руб.

24.09.2019    23857    16    15    

33

1С HTML Шаблоны / HTML Templates

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28323    3    10    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1524 16.12.20 12:01 Сейчас в теме
(0) Отличная практическая статья!
КДифф3 обожаю еще с 90 годов )
+
2. fillin 245 17.12.20 15:21 Сейчас в теме
3. KilloN 56 01.03.21 21:15 Сейчас в теме
Баг с русским языком пока не убрали на 0.9.98?
Помню пользовался предыдущей версией из-за этого
+
4. artbear 1524 01.03.21 21:49 Сейчас в теме
(3) какой баг? наверное, лет 20 этой программой пользуюсь, все работает до сих пор )
и не я один.
даже вендор 1С в конфигураторе добавила возможность использования kdiff3
+
5. KilloN 56 02.03.21 08:57 Сейчас в теме
(4)
какой баг? наверное, лет 20 этой программой пользуюсь, все работает до сих пор )
и не я один.
даже вендор 1С в конфигураторе добавила возможность использования kdiff3


На формуме уже обсуждали оказывается эту проблему:
https://forum.infostart.ru/forum9/topic167263/
Тоже использовал на прошлой работе 0.9.97

На 98 + Кодировку вручную ставил на UTF-8. Иначе абракозябра была.
+
6. user970589 10 28.07.21 17:46 Сейчас в теме
у мено одного при применении этой строки вместо русского текста какая-то арабская вязь получается?
+
7. artbear 1524 11.09.21 10:34 Сейчас в теме
(6) Да, что-то странное происходит

1 кодировку нужно ставить ЮТФ-8
2 мы также вчера попробовали, в КДифф3 плохо фильтрует, строки N-N не появляются
а вот если запустить sed в командной строке, тогда все в порядке.

в итоге приходится предварительно обрабатывать оба файла с помощью sed, а уже потом смотреть в КДифф
+
8. artbear 1524 11.09.21 10:42 Сейчас в теме
Хотя я сегодня попробовал команду и все заработало, как положено )
а вчера и у меня, и у товарища не работало

кодировка utf-8, конечно, настроена.
+
9. artbear 1524 11.09.21 10:44 Сейчас в теме
Все понятно, простой алгоритм
- открываешь сравнение файлов

- Далее кнопка конфигур
- закладка дифф и ввод регулярки из статьи
- закладка региональные настройки, выбираешь ютф-8
- ок, ок

и смотришь только нужные изменения.

у товарища этот же алгоритм сработал
+
Оставьте свое сообщение