В процессе коллективной разработки на платформе 1С часто возникает проблема «человеческого фактора»: разработчик вносит изменения непосредственно в конфигурацию базы данных (особенно в тестовых или контурах горячих правок), но забывает зафиксировать эти изменения в системе контроля версий Git. Это приводит к рассинхронизации кода и потере истории правок. Разберем, как можно автоматизировать процесс фиксации факта изменения конфигурации и обеспечить выгрузку актуального кода в Git.
Первая идея, которая часто приходит в голову системным администраторам и разработчикам, знакомым с устройством СУБД, — повесить триггер на системную таблицу CONFIG в MSSQL. Проанализируем, почему этот путь сопряжен с огромными трудностями:
CONFIG хранит данные в бинарном сжатом виде (алгоритм Deflate). Простое отслеживание факта записи (INSERT/UPDATE) не скажет нам, что именно изменилось — модуль объекта или просто картинка в макете.CONFIG. Триггер будет срабатывать на каждый чих, что катастрофически замедлит процесс обновления.Важный нюанс: Если вы все же решите идти по пути мониторинга СУБД, вместо триггеров лучше использовать технологию SQL Server Extended Events (XEvents). Это позволит отслеживать активность записи в файлы базы данных без вмешательства в логику транзакций 1С.
Наиболее надежный и «законный» способ — это полная замена ручных действий в конфигураторе на использование скриптов автоматизации. Вместо того чтобы позволять разработчику нажимать кнопку «Обновить конфигурацию базы данных», мы предлагаем использовать обертку на языке OneScript.
Рассмотрим алгоритм работы такого скрипта:
/UpdateDBCfg)./DumpConfigToFiles).git commit и git push, используя имя текущего пользователя ОС или данные из журнала регистрации 1С.Пример логики вызова конфигуратора из скрипта (метакод):
// Пример вызова пакетного обновления
ЗапуститьПриложение("1cv8.exe DESIGNER /S " + ПутьКБазе + " /UpdateDBCfg", , Истина);
Если КодВозврата = 0 Тогда
// Если обновление прошло успешно, выгружаем исходники
ЗапуститьПриложение("1cv8.exe DESIGNER /S " + ПутьКБазе + " /DumpConfigToFiles " + ПутьКГиту, , Истина);
// Здесь добавляем логику Git
КонецЕсли;
Если в вашей команде уже используется стандартное Хранилище конфигурации 1С, то проблема решается внедрением инструмента gitsync. Это де-факто стандарт в сообществе для синхронизации истории Хранилища с Git-репозиторием.
Проанализируем преимущества этого подхода:
gitsync может работать как фоновая служба (демон), которая раз в несколько минут опрашивает Хранилище на предмет новых коммитов.Для реализации этого метода достаточно настроить задачу в планировщике, которая будет запускать команду:
gitsync sync --storage-url "tcp://server/storage" --git-dir "C:\git\my_project"
Если нам нужно именно «поймать» факт изменения, когда кто-то зашел в конфигуратор и что-то поменял в обход всех правил, мы можем использовать парсинг Журнала регистрации. Платформа фиксирует событие Конфигурация.Изменена конфигурация базы данных.
Рассмотрим шаги для реализации мониторинга:
.lgp или .lgdb).DumpConfigToFiles для сравнения текущего состояния с последним коммитом в Git.Разберем ситуацию радикально. Проблема «забытого коммита» существует только в классическом Конфигураторе. Если перевести команду на разработку в 1C:EDT, парадигма меняется:
В EDT разработка ведется в среде, которая изначально базируется на Git. Вы не можете применить изменения к информационной базе, не зафиксировав их в локальном индексе Git. Таким образом, инструмент сам принуждает разработчика соблюдать цикл версионирования. Это исключает необходимость в каких-либо триггерах на уровне SQL или сложных скриптах мониторинга.
Подведем итог. Попытки фиксации изменений через триггеры СУБД являются тупиковыми из-за сложности бинарного формата 1С и лицензионных рисков. Наиболее эффективными стратегиями являются:
Выбор конкретного метода зависит от зрелости ваших процессов разработки, но стремление к полной автоматизации через скрипты всегда оправдывает себя в долгосрочной перспективе.