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

07.09.25

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

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

Введение

Настройка KDiff3

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

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


Введение

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

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

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

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


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

 

Настройка KDiff3

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

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

UPD 07.09.2025:
1. Если у вас версия KDiff3 выше 0.9.98, потребуется вручную установить sed.exe. Его необходимо поместить в ту же папку, где находится kdiff3.exe (по умолчанию: "C:\Program Files\KDiff3\bin").
Файл sed.exe можно найти в интернете, например здесь. Также файл приложен к комментарию 12.
2. Свежие версии KDiff3 можно скачать здесь. (Лично мне 1.12 не понравилась. Ничего существенного не появилось, но весит в разы больше, да и глючит из релиза в релиз все время по-разному, но с одинаковой частотой).

Запускаем 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С.

15500 руб.

02.09.2020    223149    1212    415    

1062

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

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

14400 руб.

20.08.2024    45974    252    129    

233

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

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    28532    76    30    

101

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

Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданым 1С, справке синтакс-помошника и проверки синтаксиса.

9900 руб.

25.08.2025    19012    40    7    

51

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

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

9500 руб.

17.05.2024    40606    148    57    

184

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

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

16000 руб.

10.11.2023    20174    77    39    

92

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 руб.

22.11.2024    2850    2    0    

8

Инструментарий разработчика Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

6000 руб.

07.02.2018    109089    250    100    

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


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

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

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

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

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

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

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

у товарища этот же алгоритм сработал
10. KotisKyk 07.09.25 18:14 Сейчас в теме
1
Прикрепленные файлы:
12. fillin 273 07.09.25 21:42 Сейчас в теме
(10) Для KDiff3 версии выше 0.9.98 надо отдельно устанавливать sed.exe
Приложенный файл надо распаковать и поместить рядом с kdiff3.exe. По умолчанию в "C:\Program Files\KDiff3\bin".
Прикрепленные файлы:
sed.zip
13. fillin 273 07.09.25 22:50 Сейчас в теме
(10) На мой взгляд, лучше использовать 0.9.98.
Я 1.12 попробовал, ничего нового полезного не нашел, а вот глюков порядочно. И из релиза в релиз на одну исправленную ошибка одна новая.
11. KotisKyk 07.09.25 18:17 Сейчас в теме
и еще такой вопрос может кто сталкивался
При сравнении расширений не добавляет названия функций или процедур в сравнение, а чисто код этой функции или процедуры, хотя параметры тоже поменялись
Для отправки сообщения требуется регистрация/авторизация