При работе в команде над крупными проектами на платформе 1С программисты часто сталкиваются с проблемой: как эффективно управлять версиями внешних отчетов (.erf) и обработок (.epf)? В отличие от объектов основной конфигурации, которые легко помещаются в стандартное Хранилище конфигурации, внешние файлы являются бинарными. Это означает, что мы не можем просто так увидеть историю изменений кода или объединить правки двух разработчиков, работавших над одной и той же обработкой одновременно.
В данной статье мы подробно разберем, какие инструменты и методики существуют для решения этой задачи, проанализируем их плюсы и минусы, а также выберем наиболее подходящий путь для вашей команды.
Рассмотрим самый современный и перспективный подход — переход на среду разработки 1С:EDT. В отличие от классического «Конфигуратора», EDT построена на базе Eclipse и ориентирована на работу с системами контроля версий (преимущественно Git).
Разберем по шагам, как это работает для внешних объектов:
.bsl, описания форм в XML и так далее).Merge (слияние) и Diff (сравнение).Проанализируем ситуацию: если два разработчика изменят один и тот же метод в модуле объекта внешней обработки, Git в среде EDT подсветит конфликт и позволит выбрать нужные строки кода. Это кардинально меняет процесс разработки, делая его прозрачным.
Если ваша команда пока не готова к полному переходу на EDT, мы можем использовать промежуточные инструменты для работы с обычным «Конфигуратором». Выясним, какие утилиты нам в этом помогут.
Основная проблема .epf файлов — их закрытость. Для её решения применяются специальные инструменты «разборки»:
OneScript. Она позволяет автоматизировать процесс синхронизации кода из 1С в Git-репозиторий.Рассмотрим примерный алгоритм работы разработчика при таком подходе:
pre-commit hook в Git), который распаковывает бинарный файл в папку с исходным кодом.Таким образом, мы сохраняем возможность работать в привычном интерфейсе, но получаем полноценную историю изменений кода BSL.
Иногда команды выбирают более консервативный путь. Мы можем создать отдельную информационную базу, которую назовем «Технической». В этой базе все наши внешние обработки будут добавлены в дерево конфигурации как обычные объекты.
В чем заключаются особенности этого метода? Разберем подробнее:
Хранилище конфигурации 1С. Объект можно «захватить», что блокирует его редактирование другими участниками и исключает конфликты.Этот способ хорошо подходит для небольших команд, где не внедрен Git, но требуется строгий контроль над тем, кто именно сейчас правит конкретный отчет.
Выясним причину, по которой многие эксперты называют внешние обработки «злом» в условиях крупного энтерпрайза. Внешние объекты лишены контекста конфигурации: они не видят типы данных, добавленные в расширениях, и их сложно отлаживать в связке с основной логикой системы.
Мы рекомендуем рассмотреть возможность переноса логики из внешних обработок в Расширения конфигурации. Посмотрим на преимущества такого решения:
Если вам нужно просто «подправить» типовой отчет или добавить небольшую форму, расширение — это самый стабильный и современный путь разработки.
Независимо от того, используете вы Git или EDT, вы столкнетесь с конфликтами при одновременной правке кода. Разберем, как минимизировать боль при разрешении конфликтов.
Для эффективного сравнения кода 1С мы рекомендуем подключить внешние инструменты сравнения/объединения к вашему Git-клиенту. Популярными решениями являются KDiff3, P4Merge или Beyond Compare. Они гораздо нагляднее показывают изменения в трех панелях (Ваша версия, Версия коллеги, Базовая версия).
Также важно соблюдать административные договоренности:
Пример архитектурного разделения кода для удобства групповой разработки:
// Вместо одного огромного модуля "РаботаСДокументами"
// создадим несколько по направлениям:
// 1. РаботаСДокументамиСервер (базовые функции)
// 2. РаботаСДокументамиСобытия (подписки на события)
// 3. РаботаСДокументамиКлиент (интерфейсная логика)
Подводя итог, можно сказать: выбор инструмента зависит от зрелости вашей команды. Для тех, кто хочет идти в ногу со временем, EDT + Git является золотым стандартом. Для более традиционных подходов оптимальным будет использование Расширений или специализированных скриптов декомпозиции для Git.