Настройка 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 Настройка Обновление Сравнение Отчет Контроль корректности Проверка правильности

См. также

SALE! 15%

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

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

10000 руб.

02.09.2020    159364    872    399    

861

SALE! 15%

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7759    55    22    

66

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

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    23422    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10409    36    20    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15389    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    187968    1138    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17298    6    32    

42

Инструментарий разработчика Программист Платные (руб)

Менеджер конфигураций 1С — альтернативный стартер информационных баз 1С:Предприятие.

1800 руб.

21.02.2023    7693    8    35    

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


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

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

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

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

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

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

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

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