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

См. также

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

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

12000 руб.

02.09.2020    169341    937    403    

905

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

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

8400 руб.

20.08.2024    12640    99    42    

102

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

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

9360 руб.

17.05.2024    26547    90    48    

134

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

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

22200 руб.

06.10.2023    16838    41    15    

75

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

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

15000 руб.

10.11.2023    11402    40    27    

66

SALE! %

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

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

4800 3840 руб.

14.01.2013    190562    1150    0    

918

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    796    2    0    

4

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

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

5000 руб.

07.02.2018    103937    244    100    

306
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. artbear 1565 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 1565 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 10 28.07.21 17:46 Сейчас в теме
у мено одного при применении этой строки вместо русского текста какая-то арабская вязь получается?
7. artbear 1565 11.09.21 10:34 Сейчас в теме
(6) Да, что-то странное происходит

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

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

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

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

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

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