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 интеграция автоматизация

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

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

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

10000 руб.

02.09.2020    269011    1497    422    

1180

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

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

24900 руб.

20.08.2024    75458    381    170    

326

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

22570 руб.

06.10.2023    40317    115    54    

127

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

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

15250 руб.

25.08.2025    64214    130    36    

139

Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Программист Бизнес-аналитик Руководитель проекта 1С 8.3 Платные (руб)

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

14000 руб.

17.04.2026    9108    39    50    

54

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

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

17000 руб.

10.11.2023    26516    98    46    

104

Информационная безопасность Инструменты администратора БД Инструментарий разработчика Учет документов Системный администратор Программист Бизнес-аналитик Бухгалтер Пользователь Руководитель проекта 1С 8.3 1С 8.5 Розничная и сетевая торговля (FMCG) Платные (руб)

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных условий – без открытия конфигуратора и написания кода. Готовое расширение, которое подключается и работает сразу.

6000 руб.

15.04.2026    2704    6    0    

21

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

9500 руб.

17.05.2024    54894    188    63    

220
Отзывы
7. Angoleiro 6 14.10.25 10:03 Сейчас в теме
Намучился с Kdiff3 при обработки конфликтов применения расширений после обновлений и т.п. Тоже стал пользоваться notepad++ и VScode, а тут еще не надо самому всё туда сюда копировать. Спасибо за статью.
kraspila; +1 Ответить
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. aleks.public 10 13.10.25 18:30 Сейчас в теме
Задумка конечно интересная
Но vsc мне не показался быстрым на больших объемах
При чтении структурированных файлов в несколько тысяч строк (xml, json) он ощутимо подвисал
В итоге для таких файлов я использую notepad++

Пробовали vsc при сравнении больших файлов? Как показывает себя?
2. kraspila 143 13.10.25 18:32 Сейчас в теме
(1) прекрасно работает. Только им пользуюсь.
3. BackinSoda 13.10.25 22:09 Сейчас в теме
В чем неудобство "стандартных методов сравнения" по сравнению с этим?
4. kraspila 143 13.10.25 22:14 Сейчас в теме
(3) например, потому что они недоступны при работе с расширением.
5. BackinSoda 13.10.25 22:40 Сейчас в теме
(4) Что же мешает сравнить условный модуль из расширения с чем-то другим ?
6. kraspila 143 13.10.25 22:42 Сейчас в теме
В этой статье я предлагаю воспользоваться VS Code. Вы можете сравнить его любым удобным для вас способом.
7. Angoleiro 6 14.10.25 10:03 Сейчас в теме
Намучился с Kdiff3 при обработки конфликтов применения расширений после обновлений и т.п. Тоже стал пользоваться notepad++ и VScode, а тут еще не надо самому всё туда сюда копировать. Спасибо за статью.
kraspila; +1 Ответить
14. shradon 18.03.26 09:07 Сейчас в теме
(7) А для автоматической обработки конфликтов получилось настроить через VSCode?
15. kraspila 143 18.03.26 09:12 Сейчас в теме
(14) что значит автоматическая обработка конфликтов? VSCode это ручной редактор.
16. shradon 18.03.26 13:03 Сейчас в теме
(15) как при решении конфликтов в git, можно его как-то из 1с запускать как для kdiff3?
8. Rokov 15.10.25 17:01 Сейчас в теме
Типикал ии текст)
Хотя бы проверяйте инструкцию
Сервис → Параметры → Сравнение, объединение и обновление конфигураций. - такого пункта нет
Дальнейшая инструкция тоже сделана "примерно"


В vscode
Трехстороннее объединение есть?
frkbvfnjh; +1 Ответить
9. kraspila 143 15.10.25 17:05 Сейчас в теме
(8) только при работе с Git
10. frkbvfnjh 823 07.01.26 12:47 Сейчас в теме
После закрытия окна VS Code, файл b.xml будет скопирован в result.xml.
Можете объяснить зачем это? Зачем копировать b.xml в result.xml?
11. frkbvfnjh 823 07.01.26 12:51 Сейчас в теме
И почему у скрипта расширение BAT, а не CMD, это принципиально?
12. frkbvfnjh 823 07.01.26 13:04 Сейчас в теме
Честно говоря, не понял как этим пользоваться. Во время настройки три параметра видимо нужно вводить в поле "Объединение двух файлов", видимо скрипт именно для объединения, но что делать если нужно просто сравнить без объединения? И не понятно в итоге какие параметры вводить в поле %secondCfg %baseCfg %merged или %1 %2 %3? Вы бы лучше видеоинструкцию записали.
13. kraspila 143 07.01.26 13:15 Сейчас в теме
(12) Параметры следует оставить так, как они есть. Конфигуратор сам подставит нужные файлы в эти параметры. Делать нужно это в соответствии с инструкцией к 1С либо по аналогии с другими настройками, которые у вас уже есть. Файл нужно копировать, потому что у нас двухстороннее сравнение, а мы настраиваем трёхстороннее. Соответственно, нужен третий файл.
Для отправки сообщения требуется регистрация/авторизация