OneScript + EDT + GIT

11.06.25

Разработка - Групповая разработка (Git, хранилище)

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

Возникла у нас потребность в обновлении тестовой среды из определенной ветки в удаленном GIT репозитории. Выбор пал на OneScript, так как богатая библиотека и много уже сделано сообществом. Основная проблема заключалась в том что проект ведется в EDT и соответственно в GIT все файлы лежат в формате EDT.

В этой публикации я не буду рассказывать, как установить OneScript и подключать библиотеки, об этом есть отдельные публикации (OneScript).

Первым делом определяем json файл c настройками, чтобы не указывать их в коде. Подробно останавливаться не буду, в файле в комментариях к ключам есть вся информация. Если не нужно отправлять информацию в telegram, то в блоке telegram.toSend ставим false, также с блоком youtrack.use

{"repositoryName": имя удаленного репозитория, на компьютере,с которого запускается скрипт должен быть установлен git bash, при первом запуске будет предложена аутентификация
"reositoryLocalName": путь к локальному репозиторию ,
    "base": { // структура базы 1с, в которую будут загружены файлы
        "v8Version": "8.3.17", // версия платформы, под которой будет выполнен запуск 1с
         "Srvr": сервер на котором лежит база 1с, если база файловая то пустая строка
         "name": Имя базы на сервере, если база файловая то полный путь к базе
         "isFileBase": true или false, определяет файловая база или нет
         "potr": порт для подклчения к базе, если не стандартный используется на сервере 1с
         "login": "", логин к базе
         "pass": "", пароль к базе
         "keyPermissions": "123" ключ разрешения доступа
         "echengeDir": "каталог, куда будет выгружен cf, если не указан, то cf выгружен не будет",
         "cfName": "имя cf файла"
    },
    "edt":{ // структура для подключения к EDT,
        "edtVersion": "edt@2023.2.0:x86_64", Версия EDT которая будет запущена для выгрузки файлов, доступные версии можно узнать выполнив команду ring help
        "project": "", полный путь к проекту EDT
        "brancheName": "", имя ветки, которая будет получена в удаленном репозитории
        "configurationFiles": "", путь к папке, куда будут выгружены файлы конфигурации
        "workspaceLocation": "", рабочее пространство EDT, указывается при создании проекта. Расположение рабочей области указано в параметре: Окно > Параметры > Общие > Рабочая область > Отображать полный путь к рабочей области. Этот путь можно выделить и скопировать в буфер обмена.
        "edtLocation": "",
        "fileCommitHistory": "", текстовый файл, куда будет записана история коммитов
        "periodCommins": период коммитоа в часах, за сколько последних часов получить историю коммитор
    },
    "telegram":{
        "toSend": false или true, определяет отправлять историю комитов в телегу или нет
        "token": "", токен для телеги
        "server": "", сервер где лежит webhook
        "webhook": "", сам webhook
        "port": 443,
        "timeOut": 100,
        "Recipients":[ получатели сообщения
            {
                "id": "",
                "message_thread_id":
            }
        ]
    }
    "youtrack":{
        "use": true или false, определяет переносить задачи или нет
        "server": "", Сервер youtrack
        "token": "", Токен youtrack, создается в настройках youtrack
        "projectNames":[ Массив Имен проектов, которые нужно анализировать
            {"shortName":"ИД проекта","name":"Имя проекта"},
        ],
        "stageBefore":Имя стадии до переноса
        "stageAfter": Имя стадии после переноса
    }

 

Далее работам с OneScript.

Импортируем библиотеку для работы с JSON и читаем настройки из файла

#Использовать "lib/json"

Перем СтруктураПараметровБазы; // Структура параметров подключения к конфигурации 1с, заполняется из файла настроек base
Перем СтруктураПараметровЕДТ; // Структура параметров подключения к EDT, заполняется из файла настроек edt;
Перем СтруктураПараметровТелеграм; // Структура параметров телеграм, заполняется из файла настроек telegram
Перем НастройкиИзJson; // Все настройки из файла config.json
Процедура ОпределитьНастройки()
	ТекстовыйДокумент = Новый ТекстовыйДокумент;
	ТекстовыйДокумент.Прочитать("config.json", "UTF-8");
	Строка = ТекстовыйДокумент.ПолучитьТекст();
	json = Новый ПарсерJson;
	НастройкиИзJson = json.ПрочитатьJSON(Строка, , , Истина);
	
	СтруктураПараметровБазы = НастройкиИзJson.base;
	СтруктураПараметровЕДТ = НастройкиИзJson.edt;
	
	СтруктураПараметровТелеграм = НастройкиИзJson.telegram;
КонецПроцедуры

Импортируем библиотеку gitrunner и загружаем нужную ветку в удаленном репозитории в локальный

Функция ПолучитьИзУдаленногоРепозитория(СтруктураПараметровЕДТ, НастройкиИзJson) Экспорт
	
	НоваяВетка = СтруктураПараметровЕДТ.brancheName + "_" + Формат(ТекущаяДата(), "ДФ=гггг_ММ_дд_ЧЧ_мм");
	ГитРепозиторий = Новый ГитРепозиторий();
	
	ЛокальныйКаталогРепозитория = НастройкиИзJson.reositoryLocalName;
	ЛокальныйКаталогРепозитория = СтрЗаменить(ЛокальныйКаталогРепозитория, "/", "\");
	
	ИмяРепозитория = НастройкиИзJson.repositoryName;
	
	ГитРепозиторий.УстановитьРабочийКаталог(ЛокальныйКаталогРепозитория);
	ГитРепозиторий.Получить(ИмяРепозитория, СтруктураПараметровЕДТ.brancheName);
	Сообщить("Получили ветку " + СтруктураПараметровЕДТ.brancheName + " из удаленного репозитория");
	ГитРепозиторий.СоздатьВетку(НоваяВетка);
	Сообщить("Создали ветку " + НоваяВетка + " в локальном репозитории");
	
	ГитРепозиторий.ПерейтиВВетку(НоваяВетка);
	Успешно = Истина;
	ВыгрузитьВФайлыИзЕДТ(СтруктураПараметровЕДТ, Успешно);
	
	СтруктураГитРепозитория = Новый Структура();
	СтруктураГитРепозитория.Вставить("ГитРепозиторий", ГитРепозиторий);
	СтруктураГитРепозитория.Вставить("Ветка", СтруктураПараметровЕДТ.brancheName);
	СтруктураГитРепозитория.Вставить("НоваяВетка", НоваяВетка);
	СтруктураГитРепозитория.Вставить("УспешноВыгрузилиФайлы", Успешно);
	
	Возврат СтруктураГитРепозитория;
	
КонецФункции

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

Процедура ВыгрузитьВФайлыИзЕДТ(СтруктураПараметровЕДТ, Успешно)
	Кавычка = 34;
	КаталогВыгрузки = СтрЗаменить(СтруктураПараметровЕДТ.configurationFiles, "/", "\");
	
	ОбщегоНазначения.УдалитьФайлыИзКаталога(КаталогВыгрузки);
	КаталогВыгрузки = Символ(Кавычка) + КаталогВыгрузки + Символ(Кавычка);
	РабочаяОбласть = Символ(Кавычка) + СтрЗаменить(СтруктураПараметровЕДТ.workspaceLocation, "/", "\") + Символ(Кавычка);
	КаталогЕдт = Символ(Кавычка) + СтрЗаменить(СтруктураПараметровЕДТ.edtLocation, "/", "\") + Символ(Кавычка);
	ПроектаЕдт = Символ(Кавычка) + СтрЗаменить(СтруктураПараметровЕДТ.project, "/", "\") + Символ(Кавычка);
	
	ТекстКоманднойСтроки = "ring ВерсияЕдт ";
	ТекстКоманднойСтроки = ТекстКоманднойСтроки + "workspace export --project ПроектаЕдт ";
	ТекстКоманднойСтроки = ТекстКоманднойСтроки + "--configuration-files КаталогВыгрузки ";
	ТекстКоманднойСтроки = ТекстКоманднойСтроки + "--workspace-location РабочаяОбласть";
	ТекстКоманднойСтроки = СтрЗаменить(ТекстКоманднойСтроки, "ВерсияЕдт", СтруктураПараметровЕДТ.edtVersion);
	ТекстКоманднойСтроки = СтрЗаменить(ТекстКоманднойСтроки, "ПроектаЕдт", ПроектаЕдт);
	ТекстКоманднойСтроки = СтрЗаменить(ТекстКоманднойСтроки, "КаталогВыгрузки", КаталогВыгрузки);
	ТекстКоманднойСтроки = СтрЗаменить(ТекстКоманднойСтроки, "РабочаяОбласть", РабочаяОбласть);
	ТекстКоманднойСтроки = СтрЗаменить(ТекстКоманднойСтроки, "КаталогЕдт", КаталогЕдт);
	Команда = Новый Команда;
	Команда.УстановитьСтрокуЗапуска(ТекстКоманднойСтроки);
	
	ответВыгрузки = Команда.Исполнить();
	
	Если ответВыгрузки = 0 Тогда
		Сообщить("Выгрузили файлы кофигурации");

	Иначе
		Успешно = Ложь;
	КонецЕсли;
	
	
	
КонецПроцедуры

Теперь у нас все файлы в нужном формате. Осталось загрузить все в нужную конфигурацию. Импортируем библиотеку v8runner

Процедура ЗагрузитьКонфигурациюИзФайлов(СтруктураПараметровЕДТ, СтруктураПараметровБазы) Экспорт
	КаталогВыгрузки = СтрЗаменить(СтруктураПараметровЕДТ.configurationFiles, "/", "\");
	Конфигуратор = Новый УправлениеКонфигуратором();
	УстановитьКонтекст(Конфигуратор, СтруктураПараметровБазы);
	Конфигуратор.ЗагрузитьКонфигурациюИзФайлов(КаталогВыгрузки);
	ОбщегоНазначения.УдалитьФайлыИзКаталога(КаталогВыгрузки);
	
	Сообщить("Загрузили файлы кофигурации");
	Конфигуратор.ОбновитьКонфигурациюБазыДанных(Ложь, Истина);
	Сообщить("Обновили конфигурацию базы данных");
	
	Сообщить("Выполняем проверки конфигурации");
	ПроверитьКонфигурацию(Конфигуратор);
	Сообщить("Выгружаем конфигурацию в файл");
	ВыгрузитьКонфигурацию(Конфигуратор, СтруктураПараметровБазы);
	
КонецПроцедуры

 

Все готово, конфигурация загружена из удаленной ветки.

Вступайте в нашу телеграмм-группу Инфостарт

#1С #EDT #git #Open Source

См. также

Инструменты администратора БД Групповая разработка (Git, хранилище) Обновление 1С Системный администратор Программист 1С v8.3 1С:Комплексная автоматизация 2.х 1С:Библиотека стандартных подсистем Абонемент ($m)

Обработка, объединяющая в себе использование инструментов БСП по администрированию кластера серверов и запуска скриптов для автоматического обновления конфигурации из хранилища.

4 стартмани

17.11.2025    476    0    KovrovtsevAS    0    

7

Инструментарий разработчика OneScript Работа с интерфейсом Программист Россия Бесплатно (free)

Представляю кроссплатформенную библиотеку для разработки приложений с текстовым пользовательским интерфейсом (TUI) для сценарного языка OneScript. Она использует модель программирования, похожую на классические Desktop GUI (например, WinForms или WPF), но целиком работает в текстовом режиме. Возможно это ностальгия по DOS временам, но в наше время это так же и повышенная скорость отрисовки интерфейса, и легкость в написании скрипта. Создавайте интуитивно понятные окна, кнопки, поля ввода и выпадающие списки. Благодаря OneScript инструмент будет доступен даже новичкам без долгого обучения.

14.11.2025    1395    ahyahy    12    

26

EDT Программист Стажер 1С v8.3 Россия Абонемент ($m)

Данная публикация посвящена работе с новым функционалом в 1С:EDT, а точнее ИИ 1С:Напарник. Этот материал будет полезен для начинающих программистов, а также для программистов, которые желают научиться работать в 1С:EDT с применением ИИ.

2 стартмани

05.11.2025    4645    chuevsf    2    

8

Групповая разработка (Git, хранилище) Бесплатно (free)

Проектная разработка в 1С живет в условиях жестких дедлайнов, меняющихся команд и нестабильных CI/CD. В статье показываем, как быстро и без лишних затрат внедрить Git на ERP-проектах, продать идею себе и команде и избежать типичных подводных камней. Разберем ветвление, подходы к командной работе, интеграцию с таск-трекерами и особенности тяжелых конфигураций.

04.09.2025    7833    bozo    42    

12

OneScript Мессенджеры и боты Программист Бесплатно (free)

Создаём Telegram-бота для декомпиляции 1С файлов на OneScript и фреймворке Осень. Разберём архитектуру MVC для Telegram-бота. Научимся работать с фреймворком Осень: внедрение зависимостей, аннотации, логирование. Реализуем разбор бинарных файлов (EPF, ERT, CF, CFE.). Упакуем бота в Docker-контейнер

21.08.2025    2956    untru    15    

28

DevOps и автоматизация разработки OneScript Программист Бесплатно (free)

Когда в компании используется более 500 внешних обработок для 20 различных баз, процесс их параллельной разработки превращается в борьбу. Расскажем о тернистом пути от ручных скриптов к масштабируемой DevOps-системе, позволяющей централизованно управлять внешними обработками, автоматизировать сборки, интегрироваться с таск-трекером, запускать автотесты и разворачивать окружение в пару кликов.

12.08.2025    6521    untru    13    

25

EDT Групповая разработка (Git, хранилище) Программист 1С v8.3 Бесплатно (free)

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

04.08.2025    7275    ZigRinat85    17    

41

DevOps и автоматизация разработки Групповая разработка (Git, хранилище) Программист 1С v8.3 1С:Библиотека стандартных подсистем Абонемент ($m)

Позволяет проектировать и выполнять сценарии, состоящие из команд 1С, Git и CMD, а также решать конфликты слияния напрямую из 1С с помощью KDiff3. Предустановлен набор команд для автоматизации сборки CFE-файлов.

1 стартмани

29.07.2025    3743    6    gorsheninsn    6    

27
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kalyaka 1138 16.06.25 09:11 Сейчас в теме
Все готово, конфигурация загружена из удаленной ветки.
А эта конфигурация будет синхронизирована с проектом? Или цель была только в получении базы данных с загруженной конфигурацией без разработки в EDT?
2. AlexF1 53 16.06.25 09:50 Сейчас в теме
(1) Цель создать в проекте локальную ветку на основании релизной ветки в удаленном репозитории. Затем уже проект выгружается в файлы xml, которые загружаются в некую темповую конфигурацию, из которой уже получается готовый cf, этим cf уже обновляется продуктовая конфигурация. Темповая конфигурация с проектом не синхронизируется.
3. kalyaka 1138 16.06.25 12:50 Сейчас в теме
(2) понятно, это делается для целей встраивания в DevOps
4. unichkin 1613 01.07.25 19:36 Сейчас в теме
В EDT от ring отказались в конце прошлого года, ссылка в статье ведет на описание 1C:EDT
https://its.1c.ru/db/edtdoc#content:10608:hdoc

+ Кстати в onescript для ринга есть ringos, правда уже неактуально)
Для отправки сообщения требуется регистрация/авторизация