Как автоматически отслеживать изменения конфигурации 1С и фиксировать их в Git?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Почему использование триггеров SQL на таблицу CONFIG — это плохая идея

Первая идея, которая часто приходит в голову системным администраторам и разработчикам, знакомым с устройством СУБД, — повесить триггер на системную таблицу CONFIG в MSSQL. Проанализируем, почему этот путь сопряжен с огромными трудностями:

  1. Лицензионные ограничения: Прямое изменение структуры системных таблиц 1С или добавление триггеров нарушает лицензионное соглашение.
  2. Сложность структуры: Таблица CONFIG хранит данные в бинарном сжатом виде (алгоритм Deflate). Простое отслеживание факта записи (INSERT/UPDATE) не скажет нам, что именно изменилось — модуль объекта или просто картинка в макете.
  3. Транзакционный спам: При обновлении конфигурации платформа выполняет тысячи мелких запросов к таблице CONFIG. Триггер будет срабатывать на каждый чих, что катастрофически замедлит процесс обновления.
  4. Неопределенность завершения: На уровне SQL крайне сложно поймать момент «Принятия изменений» (Commit), так как для платформы это последовательность действий в разных потоках.

Важный нюанс: Если вы все же решите идти по пути мониторинга СУБД, вместо триггеров лучше использовать технологию SQL Server Extended Events (XEvents). Это позволит отслеживать активность записи в файлы базы данных без вмешательства в логику транзакций 1С.

Решение №1: Автоматизация через скрипты и OneScript

Наиболее надежный и «законный» способ — это полная замена ручных действий в конфигураторе на использование скриптов автоматизации. Вместо того чтобы позволять разработчику нажимать кнопку «Обновить конфигурацию базы данных», мы предлагаем использовать обертку на языке OneScript.

Рассмотрим алгоритм работы такого скрипта:

  1. Скрипт запускает обновление конфигурации через параметры командной строки конфигуратора (/UpdateDBCfg).
  2. После успешного завершения процесса скрипт автоматически выполняет выгрузку конфигурации в файлы XML (команда /DumpConfigToFiles).
  3. Затем скрипт инициирует команду git commit и git push, используя имя текущего пользователя ОС или данные из журнала регистрации 1С.

Пример логики вызова конфигуратора из скрипта (метакод):


// Пример вызова пакетного обновления
ЗапуститьПриложение("1cv8.exe DESIGNER /S " + ПутьКБазе + " /UpdateDBCfg", , Истина);

Если КодВозврата = 0 Тогда
    // Если обновление прошло успешно, выгружаем исходники
    ЗапуститьПриложение("1cv8.exe DESIGNER /S " + ПутьКБазе + " /DumpConfigToFiles " + ПутьКГиту, , Истина);
    // Здесь добавляем логику Git
КонецЕсли;

Решение №2: Связка «Хранилище конфигурации — Gitsync»

Если в вашей команде уже используется стандартное Хранилище конфигурации 1С, то проблема решается внедрением инструмента gitsync. Это де-факто стандарт в сообществе для синхронизации истории Хранилища с Git-репозиторием.

Проанализируем преимущества этого подхода:

Для реализации этого метода достаточно настроить задачу в планировщике, которая будет запускать команду:

gitsync sync --storage-url "tcp://server/storage" --git-dir "C:\git\my_project"

Решение №3: Использование Журнала регистрации и мониторинг

Если нам нужно именно «поймать» факт изменения, когда кто-то зашел в конфигуратор и что-то поменял в обход всех правил, мы можем использовать парсинг Журнала регистрации. Платформа фиксирует событие Конфигурация.Изменена конфигурация базы данных.

Рассмотрим шаги для реализации мониторинга:

  1. Разрабатываем регламентное задание или внешний скрипт, который раз в 10-15 минут читает последние записи журнала регистрации (файлы .lgp или .lgdb).
  2. При обнаружении события изменения конфигурации скрипт определяет:
    • Кто внес изменения (имя пользователя 1С).
    • Точное время события.
  3. Скрипт отправляет уведомление в корпоративный чат (Slack/Telegram) с требованием пояснить правку или автоматически запускает процесс DumpConfigToFiles для сравнения текущего состояния с последним коммитом в Git.

Решение №4: Переход на 1C:EDT (Enterprise Development Tool)

Разберем ситуацию радикально. Проблема «забытого коммита» существует только в классическом Конфигураторе. Если перевести команду на разработку в 1C:EDT, парадигма меняется:

В EDT разработка ведется в среде, которая изначально базируется на Git. Вы не можете применить изменения к информационной базе, не зафиксировав их в локальном индексе Git. Таким образом, инструмент сам принуждает разработчика соблюдать цикл версионирования. Это исключает необходимость в каких-либо триггерах на уровне SQL или сложных скриптах мониторинга.

Выводы и рекомендации

Подведем итог. Попытки фиксации изменений через триггеры СУБД являются тупиковыми из-за сложности бинарного формата 1С и лицензионных рисков. Наиболее эффективными стратегиями являются:

  1. Использование gitsync в связке с Хранилищем конфигурации для автоматической трансляции истории в Git.
  2. Внедрение CI/CD пайплайнов, где любое обновление базы данных выполняется только через скрипты (OneScript + Vanessa-Runner), которые гарантированно делают коммит после обновления.
  3. Для оперативного контроля — мониторинг Журнала регистрации на предмет событий изменения метаданных.

Выбор конкретного метода зависит от зрелости ваших процессов разработки, но стремление к полной автоматизации через скрипты всегда оправдывает себя в долгосрочной перспективе.

← На главную