VS Code как внешняя программа сравнения

09.10.25

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

При работе с конфигурациями 1С часто требуется сравнивать и объединять файлы — например, при ручной проверке изменений, при слиянии веток или анализе исходников. Стандартные инструменты 1С не всегда удобны, особенно если речь идёт о простых текстовых сравнениях XML, JSON, .bsl или .txt. В этой статье покажу, как настроить VS Code как внешний инструмент сравнения для 1С и сделать это максимально удобно: с ожиданием закрытия окна и автоматическим копированием результата.

📦 Что потребуется

    Visual Studio Code (желательно не из Microsoft Store, а обычный инсталлятор с сайта).

    Установленная команда code в PATH.

    Для этого в VS Code выполните команду:

        Ctrl+Shift+P → Shell Command: Install 'code' command in PATH

    Файл CompareAndCopyWait.bat — наш помощник, который запустит сравнение и выполнит копирование результата.

 

Настройка в 1С

Откройте Конфигуратор → Сервис → Параметры → Сравнение, объединение и обновление конфигураций.

В блоке Внешняя программа сравнения укажите путь к нашему батнику:

"C:\Tools\CompareAndCopyWait.bat"

Настройте способ объединения:
%secondCfg %baseCfg %merged

 

Что делает каждый параметр

    %1 — первый файл (оригинал);

    %2 — второй файл (изменённый);

    %3 — путь, куда нужно записать результат.

 

🧠 Логика работы скрипта

Батник:

    Проверяет входные параметры.

    Находит установленный VS Code (code или Code.exe).

    Запускает визуальное сравнение с флагами:

    code --new-window --wait --diff "%1" "%2"

    Ключ --wait заставляет VS Code ждать, пока окно не будет закрыто, что критично для автоматизации.

    После закрытия VS Code копирует второй файл (как результат) в путь, указанный третьим параметром.

    Записывает все действия в лог-файл.

 

🧾 Полный код CompareAndCopyWait.bat

@echo off
setlocal ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

rem =====================[ НАСТРОЙКИ ЛОГИРОВАНИЯ ]=====================
set "SCRIPT_DIR=%~dp0"
set "LOGDIR=%SCRIPT_DIR%logs"

rem Формируем безопасный таймстемп YYYY-MM-DD_HH-MM-SS
for /f "tokens=1-3 delims=.:-/ " %%a in ("%date%") do (
  set "D1=%%a" & set "D2=%%b" & set "D3=%%c"
)
for /f "tokens=1-4 delims=.:-/ " %%h in ("%time%") do (
  set "H1=%%h" & set "M1=%%i" & set "S1=%%j" & set "MS=%%k"
)
rem Нормализуем час (убираем пробел в начале)
if "%H1:~1,1%"=="" (set "H1=0%H1:~0,1%")
set "TS=%D3%-%D2%-%D1%_%H1%-%M1%-%S1%"
if not exist "%LOGDIR%" mkdir "%LOGDIR%" >nul 2>&1
set "LOGFILE=%LOGDIR%\CompareAndCopy_%TS%.log"

rem Утилита для записи в лог
set "LOGPFX=[%TS%]"

>>"%LOGFILE%" echo %LOGPFX% ==== START CompareAndCopyWait ====
>>"%LOGFILE%" echo %LOGPFX% Raw args: 1="%~1" 2="%~2" 3="%~3"

rem =====================[ ПРОВЕРКА ПАРАМЕТРОВ ]=====================
if "%~1"=="" (
  echo Использование: %~nx0 ^<original_file^> ^<changed_file^> ^<dest_path^>
  >>"%LOGFILE%" echo %LOGPFX% ERROR: arg1 missing
  exit /b 1
)
if "%~2"=="" (
  echo Ошибка: не указан второй параметр ^(changed_file^).
  >>"%LOGFILE%" echo %LOGPFX% ERROR: arg2 missing
  exit /b 1
)
if "%~3"=="" (
  echo Ошибка: не указан третий параметр ^(dest_path^).
  >>"%LOGFILE%" echo %LOGPFX% ERROR: arg3 missing
  exit /b 1
)

rem =====================[ НОРМАЛИЗАЦИЯ ПУТЕЙ ]=====================
set "ORIG=%~f1"
set "CHANGED=%~f2"
set "DEST=%~f3"
>>"%LOGFILE%" echo %LOGPFX% Resolved: ORIG="%ORIG%" CHANGED="%CHANGED%" DEST="%DEST%"

if not exist "%ORIG%" (
  echo Ошибка: файл не найден: "%ORIG%"
  >>"%LOGFILE%" echo %LOGPFX% ERROR: ORIG not found
  exit /b 1
)
if not exist "%CHANGED%" (
  echo Ошибка: файл не найден: "%CHANGED%"
  >>"%LOGFILE%" echo %LOGPFX% ERROR: CHANGED not found
  exit /b 1
)

rem =====================[ ПОИСК VS CODE ]===========================
where code >nul 2>&1
if %errorlevel%==0 (
  for /f "delims=" %%p in ('where code') do set "VSCODE=%%p"
  set "VSCODE=code"
  >>"%LOGFILE%" echo %LOGPFX% Using CLI: "code" (found in PATH)
) else (
  set "VSCODE=C:\Program Files\Microsoft VS Code\Code.exe"
  if not exist "%VSCODE%" (
    set "VSCODE=%LocalAppData%\Programs\Microsoft VS Code\Code.exe"
  )
  if not exist "%VSCODE%" (
    echo Ошибка: VS Code не найден. Установите 'code' в PATH или поправьте путь к Code.exe.
    >>"%LOGFILE%" echo %LOGPFX% ERROR: VS Code not found
    exit /b 1
  )
  >>"%LOGFILE%" echo %LOGPFX% Using EXE: "%VSCODE%"
)

rem =====================[ ЗАПУСК DIFF + ОЖИДАНИЕ ]==================
set "CMDLINE=%VSCODE% --new-window --wait --diff "%ORIG%" "%CHANGED%""
>>"%LOGFILE%" echo %LOGPFX% Exec: %CMDLINE%
"%VSCODE%" --new-window --wait --diff "%ORIG%" "%CHANGED%"
set "RC_VSCODE=%ERRORLEVEL%"
>>"%LOGFILE%" echo %LOGPFX% VSCode exit code: %RC_VSCODE%
if not "%RC_VSCODE%"=="0" (
  echo Предупреждение: VS Code завершился с кодом %RC_VSCODE%.
)

rem =====================[ КОПИРОВАНИЕ ]============================
for %%F in ("%DEST%") do set "DEST_DIR=%%~dpF"
>>"%LOGFILE%" echo %LOGPFX% Dest dir: "%DEST_DIR%"

if not exist "%DEST_DIR%" (
  mkdir "%DEST_DIR%" 2>>"%LOGFILE%"
  if errorlevel 1 (
    echo Ошибка: не удалось создать каталог назначения "%DEST_DIR%".
    >>"%LOGFILE%" echo %LOGPFX% ERROR: mkdir failed
    exit /b 1
  )
  >>"%LOGFILE%" echo %LOGPFX% Created dest dir
)

copy /Y "%CHANGED%" "%DEST%" >>"%LOGFILE%" 2>&1
set "RC_COPY=%ERRORLEVEL%"
if not "%RC_COPY%"=="0" (
  echo Ошибка: не удалось скопировать "%CHANGED%" в "%DEST%".
  >>"%LOGFILE%" echo %LOGPFX% ERROR: copy failed, rc=%RC_COPY%
  exit /b 1
)

>>"%LOGFILE%" echo %LOGPFX% Copy OK to "%DEST%"
echo Готово: "%CHANGED%" скопирован в "%DEST%".
>>"%LOGFILE%" echo %LOGPFX% ==== END CompareAndCopyWait (rc=%RC_VSCODE%) ====
exit /b 0

 

💡 Пример вызова из командной строки

CompareAndCopyWait.bat "C:\temp\a.xml" "C:\temp\b.xml" "C:\out\result.xml"

После закрытия окна VS Code, файл b.xml будет скопирован в result.xml.

🧾 Преимущества такого подхода

  • Красивое визуальное сравнение прямо в VS Code
  • Работает с любыми текстовыми файлами (.bsl, .xml, .json, .sql, .txt)
  • Полная совместимость с 1С:Предприятием (через стандартный интерфейс)
  • Логирование всех действий (для диагностики)
  • Автоматическое ожидание закрытия окна
  • Можно доработать под merge или под собственный pipeline

 

🎯 Заключение

Теперь вы можете использовать VS Code как внешний инструмент сравнения и слияния в 1С, без сторонних программ вроде WinMerge или Beyond Compare.

Скрипт прост, надёжен и даёт возможность централизованно логировать все операции.

Вступайте в нашу телеграмм-группу Инфостарт

Теги: 1C VS Code diff bat интеграция автоматизация

См. также

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

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

15500 руб.

02.09.2020    217683    1193    413    

1054

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

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

14400 руб.

20.08.2024    43301    236    123    

219

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

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

22200 руб.

06.10.2023    27588    73    30    

101

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

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

9500 руб.

17.05.2024    39185    141    57    

179

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

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

16000 руб.

10.11.2023    19508    76    39    

92

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

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

9900 руб.

25.08.2025    9104    15    7    

23

Инструментарий разработчика 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    2548    2    0    

8
Для отправки сообщения требуется регистрация/авторизация