При обновлении конфигураций «1С:Предприятие» многие разработчики используют внешние инструменты для трехстороннего объединения модулей. Одним из самых популярных бесплатных инструментов является KDiff3. Однако в процессе работы часто возникает неприятная ситуация: программа просто перестает отвечать («зависает») в момент запуска из конфигуратора. Процесс невозможно «оживить», кроме как через диспетчер задач, а повторные попытки сравнения часто приводят к тому же результату. В этой статье мы подробно разберем, почему это происходит, и рассмотрим проверенные способы решения данной проблемы.
Проанализируем техническую сторону вопроса. Исследования сообщества и официальные обращения в техподдержку 1С (ошибка 60024832) указывают на то, что корень проблемы кроется в механизме взаимодействия платформы 1С и графической библиотеки Qt, на которой написан KDiff3. Происходит так называемый deadlock (взаимная блокировка) буфера обмена (clipboard).
Рассмотрим по шагам, что происходит в системе:
Справочник.Контрагенты.МодульМенеджера), чтобы зафиксировать их в текстовом файле для последующего анализа. Для более глубокой проработки связей удобно использовать веб-инструмент для анализа зависимостей конфигураций 1C.Важный нюанс: проблема чаще всего проявляется, если в буфере обмена находится «голый» неформатированный текст, скопированный именно внутри конфигуратора. Если скопировать тот же текст из браузера или блокнота, зависание может не произойти, так как формат данных в буфере будет иным.
Это самый быстрый «костыль», который помогает в 90% случаев без изменения настроек программ. Если KDiff3 завис, выполним следующие действия:
kdiff3.exe через диспетчер задач.Как показывает практика, после такой очистки буфера программа открывается мгновенно и работает корректно до тех пор, пока в буфер снова не попадет «неудачный» текст из 1С.
Проанализируем ситуацию: если конфликт происходит из-за одновременного обращения к ресурсам, нам нужно разнести во времени момент вызова программы и момент её обращения к интерфейсу. Разберем, как это реализовать через командный файл.
Вместо прямого указания пути к kdiff3.exe в настройках 1С (Параметры — Запуск 1С:Предприятия — Сравнение и объединение), укажем путь к специально созданному .bat файлу.
Рассмотрим пример содержимого такого файла (подходит для современных версий Windows):
@echo off
rem Задержка в 500 миллисекунд (0.5 сек) для освобождения ресурсов платформой
timeout /t 1 /nobreak > nul
rem Передаем все параметры, полученные от 1С, в исполняемый файл KDiff3
start "" "C:\Program Files\KDiff3\kdiff3.exe" %*
Если версия Windows не поддерживает timeout с дробными значениями, или вам нужно более изящное решение, используем команду shift для корректной передачи большого количества параметров (в трехстороннем сравнении их много):
@echo off
set "kdiff_path=C:\Program Files\KDiff3\kdiff3.exe"
ping -n 1 -w 500 127.0.0.1 > nul
start "" "%kdiff_path%" %1 %2 %3 %4 %5 %6 %7 %8 %9
Примечание: в настройках 1С не забудьте указать путь к этому батнику в кавычках, если в пути есть пробелы.
Выясним, какие внутренние механизмы программы могут провоцировать зависания. Перед объединением в некоторых случаях помогает отключение лишних диалоговых окон, которые инициализируются при запуске. Разберем по шагам:
Это уменьшит количество блокирующих вызовов графического интерфейса в момент старта приложения.
Проанализируем версии программы. На форумах часто упоминается старая версия 0.9.98, но она наиболее подвержена данной проблеме. Рассмотрим альтернативы:
UTF-8 (а это почти все современные конфигурации на 8.3), рекомендуется использовать последние версии с официального сайта проекта на KDE, а для наведения порядка в текстах — Code formatter 1C.Рассмотрим экзотический, но работающий «лайфхак» от опытных пользователей. Если KDiff3 завис, и вы не хотите убивать процесс (например, боясь потерять прогресс в конфигураторе), попробуйте следующее:
Удивительно, но системное прерывание процессов часто заставляет KDiff3 «отвиснуть», так как Windows принудительно сбрасывает все блокировки интерфейса перед попыткой выключения.
Проанализируем еще один подход: запуск KDiff3 до того, как его вызовет платформа. Если вы планируете долгое обновление с кучей модулей, сделайте следующее:
Подведем итоги нашего исследования. Зависание KDiff3 — это не случайный сбой, а конфликт ресурсов между 1С и внешним редактором. Для стабильной работы мы рекомендуем:
Помните, что при работе с временными файлами в папке %TMP%\mrg\ важно также следить, чтобы антивирус не блокировал доступ к этим файлам в момент их создания платформой, так как KDiff3 должен получить к ним монопольный доступ для записи результата объединения.