Как организовать совместную разработку в 1С и избежать конфликтов при редактировании объектов?

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

При работе в команде из нескольких разработчиков 1С часто возникает классическая проблема: общее хранилище конфигурации, каждый захватывает свои объекты, но процессы пересекаются. Проанализируем типичную ситуацию. Допустим, первый программист захватил общий модуль, внес в него объемные изменения, но сдача задачи затягивается. В этот момент второму программисту прилетает срочный багфикс, требующий правок в этом же самом модуле. Первому разработчику приходится "отпускать" объект, а затем мучительно восстанавливать свои недоделанные изменения и пытаться понять, какая именно дельта кода была изменена им, а какая — коллегой.

Рассмотрим подробнее, как решаются подобные проблемы в мире 1С. Разберем по шагам как классические инструменты, так и современные подходы с использованием систем контроля версий и CI/CD.

Организационные меры и классическая работа с Хранилищем

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

  1. Разделение баз разработки. Рабочая база (продуктив) никогда не должна быть напрямую подключена к хранилищу разработки. Каждый разработчик должен иметь собственную локальную или серверную копию базы, подключенную к хранилищу. Это позволяет безболезненно тестировать свои доработки, не ломая код коллегам.
  2. Роль архитектора. Задачи должны распределяться таким образом, чтобы разработчики минимально пересекались по объектам метаданных (справочникам, документам, регистрам).
  3. Создание "заглушек". Если нужно разработать новый объект (например, справочник или обработку), захват корня конфигурации выполняется буквально на пару минут. Создается пустой объект, например Справочник1, помещается в хранилище, и корень отпускается. Далее разработчик спокойно захватывает только свой новый справочник и пишет в нем код, не мешая остальной команде обновлять метаданные.
  4. Резервное копирование дельты через файлы поставки. Если все же пришлось отпустить измененный, но не готовый модуль ради срочной задачи коллеги, сначала сохраните свою конфигурацию в файл CF. Когда коллега вернет модуль в хранилище, вы захватите его снова и через механизм "Сравнение и объединение конфигураций" загрузите свои наработки из сохраненного файла.

Использование расширений для изоляции срочных задач

Разберем элегантный способ решения проблемы срочной задачи без необходимости дергать коллегу, захватившего основной модуль. В современных версиях платформы 1С для этого идеально подходят расширения.

Если второму программисту нужно срочно внести правки в захваченный объект, он вообще не трогает его в основной конфигурации. Вместо этого он создает расширение, заимствует нужный модуль или форму, и пишет свой код, используя аннотации &Вместо, &После или &Перед.

Это позволяет первому разработчику не прерывать свою работу и не отпускать объекты. Срочная задача сдается и переносится на продуктив в виде расширения. Позже, в спокойном режиме, код из расширения может быть аккуратно перенесен в основную конфигурацию, а само расширение удалено.

Методика Feature Toggles (Функциональные опции)

Чтобы не держать объекты в хранилище "захваченными" неделями (пока идет тестирование или согласование), крупные команды используют паттерн "Feature Toggles" (программные переключатели).

Суть метода заключается в том, что любой новый, даже недоделанный код, можно смело помещать в хранилище, если он физически отключен для пользователей. Для этого в код добавляется условие, проверяющее константу или параметр сеанса.

Посмотрим на пример реализации такого подхода:


// В общем модуле
Процедура ОбработатьДокумент(ДокументОбъект)
    
    // Старый алгоритм
    ВыполнитьСтарыйРасчет(ДокументОбъект);
    
    // Новый алгоритм Пети, который еще в разработке
    Если Константы.ИспользоватьНовыйАлгоритмРасчета.Получить() Тогда
        ВыполнитьНовыйРасчетПети(ДокументОбъект);
    КонецЕсли;

КонецПроцедуры

При таком подходе разработчик может каждый вечер сохранять свои изменения в общее хранилище. Его код физически присутствует в базе, но не исполняется на рабочих данных. Это полностью избавляет от необходимости блокировать модули на долгий срок.

Переход на современные системы версионирования (Git и EDT)

Если команда разрослась (10 и более человек), стандартного хранилища становится недостаточно. Требуется переход на технологии, применяемые в "большом" программировании. Выясним причину: в обычных системах версионирования (таких как Git) разработчики отводят от основной ветки свою (branch), спокойно пишут код, а затем система помогает автоматически слить изменения (merge).

В экосистеме 1С для полноценной работы с Git используется 1C:Enterprise Development Tools (EDT). Разберем основные преимущества этого подхода:

Синхронизация Хранилища и Git (gitsync)

Если команда не готова отказаться от привычного Конфигуратора в пользу EDT, можно использовать промежуточное решение — утилиту gitsync. Она позволяет синхронизировать историю из обычного Хранилища 1С в репозиторий Git в автоматическом режиме.

Проанализируем, как это помогает: разработчик работает в обычном Конфигураторе, но вся история коммитов зеркалируется в Git (например, в GitLab). Если нужно быстро посмотреть дельту кода за последний год или найти коммит, сломавший функционал, разработчик открывает веб-интерфейс GitLab и за секунды видит изменения, вместо того чтобы 40 минут ждать формирования отчета по истории в конфигураторе.

Автоматизация процессов: CI/CD, OneScript и статический анализ

Совместная разработка в больших командах требует автоматизации контроля качества. Рассмотрим инструменты, которые выводят процесс на новый уровень:

  1. Precommit1c: Скрипты, которые проверяют код перед помещением его в репозиторий. Они автоматически удаляют лишние пробелы, проверяют синтаксис и базовые ошибки, что в разы уменьшает количество конфликтов при объединении модулей разными разработчиками.
  2. BSL Language Server: Мощный инструмент статического анализа, который можно подключить даже к VS Code. Он подсвечивает потенциальные баги, которые могут возникнуть при параллельной правке одного модуля, помогая разработчикам видеть влияние их изменений на соседние участки кода.
  3. Vanessa-Runner: Инструмент на базе скриптового движка OneScript, позволяющий автоматически собирать базу из исходников, применять изменения и запускать автотесты перед тем, как код попадет в продуктив.

Правила совместной работы с управляемыми формами

Самая большая проблема параллельной разработки (особенно при использовании Git) — это объединение форм. Файлы форм представляют собой сложную XML-структуру, которую очень трудно "сливать" (мерджить) в автоматическом режиме.

Опытные команды используют простое правило: минимум изменений в визуальном редакторе форм. Если нужно добавить новую кнопку или поле, элементы создаются программно в обработчике ПриСозданииНаСервере. Текст модуля формы легко объединяется любыми системами версионирования, и это полностью исключает "поломку" XML-структуры самой формы при совместной разработке.

Подводя итог, можно сказать, что совместная разработка в 1С требует дисциплины. Для небольших команд достаточно грамотного использования Хранилища, файлов CF и расширений. Для крупных проектов с высокой интенсивностью правок неизбежен переход на Git, EDT, внедрение процессов код-ревью и автоматизированного тестирования.

← На главную