Как я сделал инструмент, о котором мечтал много лет

03.09.26

Разработка - DevOps и автоматизация разработки

Четыре года в интеграторе я работал с git и EDT. Git после хранилища полюбил сразу: видно, кто и что менял. С EDT сложнее: тормозит, ошибки при обновлении ERP, автономный сервер внутри него работает только с файловой базой. На новой работе команда захотела перейти на git, я развернул EDT, и оно на второй день разрушило проект при загрузке расширения. Тогда я решил дать команде git с привычным Конфигуратором и инструмент, который за минуту доносит коммит до базы через ibcmd, вместо получасовой загрузки из файлов. На новой работе разрешили ИИ, и я написал это приложение с его помощью: от чтения документации и первого ТЗ до идей в электричке. Впервые за годы снова почувствовал себя творцом, а не закрывателем задач. По дороге приросли выгрузка, объединение и проверка конфигурации по коммитам, YAxUnit и режим MCP-сервера. В статье: схемы, скриншоты, грабли и честный список ограничений. Ссылки пока нет: хочу понять, нужно ли это кому-то, кроме меня.

Загрузка конфигурации 1С из git в базу за секунды, без открытия Конфигуратора. Одно окно вместо десятка командных строк: частичная загрузка по коммитам, выгрузка, объединение, проверка конфигурации, YAxUnit, конвертация EDT и режим MCP-сервера для ИИ-агента. Python, стандартная библиотека, один exe.

 

Вкладка «Загрузка»
Вкладка «Загрузка»

 

Откуда взялась мечта

Четыре года я работал в компании-интеграторе. Там я узнал, что такое git и EDT, и научился с ними работать. Git мне понравился сразу и навсегда. После хранилища конфигурации это другой мир: за секунды видно, кто и что менял, в каком коммите, по какой задаче. В хранилище за таким ответом идёшь через историю объектов и сравнение версий, и то не всегда доходишь.

Но путь был тернистым. Работа в EDT оставляет желать лучшего: среда тормозит, а при обновлении базы возникают ошибки, особенно если это ERP. Нужна мощная машина, и даже на ней большая конфигурация собирается от 20 минут и больше. Спасением стало то, что EDT начал использовать автономный сервер ibcmd вместо Конфигуратора для обновления базы. Стало заметно лучше, но всё равно не гладко: автономник в EDT работает только с файловой базой, а разработка под ERP на файловой базе это отдельное удовольствие.

Постепенно созрело желание отказаться от EDT совсем и работать так: git плюс обычный Конфигуратор. Конфигуратор не тормозит, не требует 32 ГБ памяти, и в нём привычно. Проблема была ровно одна. Если загружать изменения из файлов руками, Конфигуратор делает это очень долго: он читает всё дерево метаданных, даже когда поменялись три модуля. Открыть Конфигуратор, дождаться, выбрать «Загрузить конфигурацию из файлов», посмотреть на прогресс-бар 10–20 минут, потом «Обновить конфигурацию базы данных». На большой типовой конфигурации цикл легко съедает полчаса, и так на каждый чужой коммит.

При этом git точно знает, какие файлы поменялись между двумя коммитами. Мечта звучала просто: выбрал коммит, нажал кнопку, через минуту изменения в базе. Без ручных списков файлов, без ожидания.

Долгое время это было невозможно технически. Загрузка из файлов умела только весь каталог целиком либо список через -listFile, который надо было собирать самому и который на кириллице вёл себя непредсказуемо. Потом автономный сервер ibcmd получил команду config import, а в 8.3.27 у него появился режим config import files --partial, который грузит только перечисленные файлы. Пазл сложился: тот самый автономник, который спасал EDT, теперь можно было использовать без EDT, напрямую из git. Оставалось написать инструмент, который их соединит. Но мечта так и лежала бы мечтой, если бы не два события.

 

Точка кипения

Я устроился на новую работу. Команда как раз хотела перейти на git, а тут я со своим огромным опытом. Я сказал: хорошо, сделаем. Развернул свежую версию EDT, загрузил XML в репозиторий, создал расширение и начал грузить его в проект. И EDT руинит мне проект. Файлы XML в полном порядке, но проект надо сбрасывать и снова ждать, пока рассчитается контекст. Полчаса, а то и час ожидания, и это на пустом месте.

В этот момент меня подкинуло. Я представил, как рассказываю команде, до чего хороши git и EDT, а на второй день у кого-то вот такое. Команда, как обычно, начнёт ныть, и будет права. Я сидел и думал: что я могу сделать для них, чтобы git они полюбили, а EDT им не пришлось терпеть.

 

Про ИИ

Вторая деталь. На прошлой работе нам запрещали использовать ИИ. На новой ситуация обратная. А тема ИИ мне очень по душе: я много читаю и смотрю про это, практикую дома, и теперь наконец мог практиковать на работе.

Тут надо признаться в одной вещи. За годы в 1С у меня осталась сплошная рутина. Я давно не ощущал того чувства, что я творец и могу сделать что захочу. Оно угасло, и я даже не заметил когда. А с ИИ это чувство вернулось: возможности показались безграничными. Хочу инструмент, которого нет, значит, будет.

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

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

Дальше пошёл цикл. Агент реализовывал ТЗ, я проверял на живой базе, находил грабли, и они возвращались в ТЗ как правила. Так появилась половина того, что описано ниже. Например, файловая база при каждой загрузке с реструктуризацией разрасталась, и её нужно было сжимать, иначе она упиралась в предел размера. Отсюда взялись галочки «сжать перед загрузкой, если база больше 6 ГБ» и «сжать после», а потом и целая вкладка обслуживания. Ни того, ни другого в первом ТЗ не было.

Приложение занимало меня всё время. Даже в электричке по дороге домой приходили идеи: а если фильтровать отчёт проверки конфигурации по коммиту, а если брать список баз из окна запуска 1С. Я записывал, дома превращал в ТЗ, на работе проверял. На каждую вкладку в итоге получилось своё ТЗ, они до сих пор лежат в репозитории рядом с кодом. Всё, что в этой статье называется «выяснилось экспериментом», выяснилось именно так: я нажимал кнопку, читал лог, а потом описывал, как должно быть.

Так появилось приложение, которое у меня внутри называется просто «021».

 

Что получилось

Окно на Tkinter с десятью вкладками. Внизу статус-бар с таймером и кнопкой «Стоп», которая честно убивает дерево процессов ibcmd или 1cv8 и прерывает цепочку шагов. Никаких зависимостей кроме Python, собирается PyInstaller в один exe.

Общие настройки
Общие настройки

 

Архитектура намеренно простая. Окно и MCP-сервер, о котором ниже, это два тонких входа в одно ядро операций. Ядро собирает командные строки, запускает внешние процессы, гонит их вывод в лог и не знает ничего про виджеты. Это позволило покрыть ядро тестами и переиспользовать его без окна.

 

Архитектура приложения
Архитектура приложения

 

Главное: частичная загрузка по коммитам

Это ради чего всё затевалось. На вкладке «Загрузка» указываю каталог с XML-выгрузкой (он же git-репозиторий) и выбираю, что грузить:

  • диапазон коммитов «от..до»: «от» это базовая точка в прошлом, сам коммит не грузится, берутся изменения после него; пустое «до» означает HEAD;
  • изменения одного коммита: выбираю коммит X, приложение само берёт X~1..X.

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

 

Схема частичной загрузки
Схема частичной загрузки

 

По дороге накопился набор правил, каждое из которых оплачено конкретной шишкой:

Кириллица в путях. Первый вариант передавал список файлов через stdin. На кириллических именах объектов ibcmd отвечал «Неизвестный объект метаданных»: список он читает в системной ANSI, а UTF-8 ломает имена. Теперь пути идут позиционными аргументами через CreateProcessW, то есть в Unicode, а при большом числе файлов команда сама режется на пакеты в пределах лимита длины командной строки Windows.

Configuration.xml в диапазоне. Если изменился состав конфигурации (добавили или удалили объект), частичная загрузка корня всё равно заставляет ibcmd перечитать всё дерево, по времени это как полная, но без её гарантий целостности. Поэтому приложение в этом случае само переключается на полную загрузку и пишет об этом в лог.

Удаления. Частичная загрузка не удаляет объекты. Удалённые и переименованные файлы показываются предупреждением, их надо закрывать полной загрузкой.

Несколько выгрузок в одном репозитории. Если рядом с config/ лежат ext/Расширение1/ и test/, изменения фильтруются по выбранному каталогу XML. Отфильтрованное видно в логе отдельным списком «Вне каталога XML».

Порядок шагов. Сжатие таблиц перед загрузкой (если файловая база больше 6 ГБ), затем config import, затем выгрузка .cf, затем config apply, затем сжатие после. Выгрузка .cf идёт до apply намеренно: если реструктуризация пробьёт предел размера файловой базы, .cf уже сохранён.

Так выглядит лог реальной загрузки одного изменённого модуля менеджера в файловую базу на 4,7 ГБ. Сама загрузка заняла 8 секунд, обновление конфигурации базы данных 21 секунду, ещё 48 секунд ушло на сжатие таблиц после. Итого полторы минуты вместо получаса. Ниже в том же логе виден прогон 56 тестов YAxUnit с загрузкой расширения, тоже полторы минуты:

 

Лог частичной загрузки и прогона тестов
Лог частичной загрузки и прогона тестов

 

Два метода: ibcmd и пакетный Конфигуратор

У ibcmd есть неприятная особенность с серверными базами: он подключается напрямую к СУБД, минуя кластер серверов 1С. Документация прямо предупреждает, что одновременная работа ibcmd и кластера с одной базой может её разрушить. Значит, перед загрузкой базу надо вывести из кластера, а это не всегда удобно и не всегда позволено.

Поэтому в приложении появился второй метод, «Пакетный режим Конфигуратора». Все те же операции выполняются через 1cv8 DESIGNER с ключами /LoadConfigFromFiles/DumpConfigToFiles/DumpCfg/UpdateDBCfg. Медленнее, зато к серверной базе Конфигуратор ходит через кластер, и достаточно завершить сеансы.

 

Два метода работы с базой
Два метода работы с базой

 

Переключатель один, на «Общих настройках», и действует на все операции. Приложение само знает, какие ключи у какого метода есть:

 

Операция Автономный сервер (ibcmd) Пакетный Конфигуратор (1cv8)
Полная загрузка config import /LoadConfigFromFiles
Частичная по git config import files --partial (8.3.27+) /LoadConfigFromFiles -listFile -partial -Format
Без проверки целостности --no-check (только частичная) -NoCheck
Применение config apply [--force] /UpdateDBCfg
Завершение сеансов --session-terminate=force + сообщение -SessionTerminate force
Выгрузка XML config export [--sync --force] /DumpConfigToFiles [-update -force]
Выгрузка в ZIP config export --archive /DumpConfigToFiles -Archive
Выгрузка .cf/.cfe config save /DumpCfg
Список расширений extension list нет команды

 

Из мелочей, которые пришлось выяснить экспериментом: у пакетного метода при частичной загрузке нужно явно передавать -Format, и его значение приложение читает из атрибута format файла ConfigDumpInfo.xml, а не предполагает. Файл списка -listFile должен быть в UTF-8 с BOM, тогда кириллица читается правильно. А два ключа со словом force (apply --force и -SessionTerminate force) отвечают на разные вопросы, и приложение показывает их как две независимые галочки с разными подписями.

Ещё один замер, который меня удивил: загрузка из ZIP-архива не быстрее загрузки из каталога. На выгрузке 694 МБ пакетный метод показал 117 против 116 секунд, ibcmd 21 против 17, а создание архива стоит около минуты. Архив имеет смысл как способ перенести выгрузку одним файлом, а не как ускорение.

 

Выгрузка и защита .git

Обратная операция, выгрузка конфигурации базы в XML, оказалась опаснее, чем кажется. Полная выгрузка config export очищает каталог. Если выгружать прямо в git-репозиторий, первый же запуск сносит .git.

 

Вкладка «Выгрузка»
Вкладка «Выгрузка»

 

Приложение перед выгрузкой отодвигает .git.gitignore и .gitattributes во временный резерв рядом с каталогом мгновенным переименованием, без копирования, и возвращает их после, в том числе при ошибке. Если .git занят другим процессом (открыт git-клиент, антивирус индексирует), перенос не выполнится, и приложение не станет запускать выгрузку. Резерв от прерванного запуска разбирается при следующем старте. Если в каталоге уже есть ConfigDumpInfo.xml, выгрузка идёт инкрементально.

После выгрузки можно сразу сделать коммит. Есть галочка «Коммитить без проверок (--no-verify)» для первой массовой выгрузки и обновлений типовой, когда хук pre-commit мешает, и подпись под ней просит держать её выключенной в остальное время.

 

Репозиторий одной кнопкой

Пока настраивал процесс для команды, надоело каждый раз руками писать .gitattributes.gitignore и подключать хуки. Вкладка «Git-репозиторий» делает это одной кнопкой: структура папок config/ext/test/epf_erf/, правильный .gitattributes с * -text (иначе git портит переводы строк в бинарных макетах), первый коммит, origin и хук precommit4onec, который при коммите разбирает внешние обработки в исходники и отклоняет коммит с буквой «ё» или смешением кириллицы и латиницы в идентификаторах.

 

Вкладка «Git-репозиторий»
Вкладка «Git-репозиторий»

 

Объединение по списку коммитов

Есть сценарий, когда частичная загрузка не подходит: изменения надо не заменить, а влить в конфигурацию, где параллельно поменялось что-то ещё. Например, донести доработку из ветки на релизный стенд. Для этого Конфигуратор умеет /MergeCfg с файлом настроек, но составлять файл настроек на 22 тысячи объектов руками никто не будет.

 

Вкладка «Объединение»
Вкладка «Объединение»

 

Вкладка «Объединение» строит этот файл сама: объекты, изменённые в диапазоне коммитов, берутся из .cf, все прочие получают правило DoNotMerge. Экспериментом выяснилось, что объекты, которых в файле настроек нет, 1С объединяет по умолчанию, поэтому файл перечисляет все объекты конфигурации. Для КА это около 22 600 записей и 3 МБ. Перед объединением можно посмотреть предпросмотр и открыть файл во внешнем редакторе.

 

EDT ; Конфигуратор

Форматы EDT и Конфигуратора несовместимы, а ibcmd понимает только формат Конфигуратора. Если часть команды осталась в EDT, нужна конвертация через 1cedtcli, и вкладка запускает её в обе стороны. Два наблюдения: указание готового workspace от EDT IDE пропускает самый тяжёлый этап, сборку модели, и на конфигурации из 7018 объектов даёт ускорение втрое (202 секунды против 62), а память JVM приходится задавать через переменную окружения _JAVA_OPTIONS, потому что -vmargs в командной строке launcher не принимает.

Вкладка «EDT V44; Конфигуратор»
Вкладка «EDT; Конфигуратор»

 

Проверка конфигурации с фильтром по коммитам

/CheckConfig на большой типовой конфигурации выдаёт тысячи строк, из которых мои три. Вкладка «Проверка конфигурации» повторяет весь набор галочек диалога Конфигуратора и добавляет то, чего в Конфигураторе нет: git-фильтр отчёта.

 

Вкладка «Проверка конфигурации»
Вкладка «Проверка конфигурации»

 

Выбираю коммит или диапазон, приложение переводит пути изменённых файлов в имена объектов метаданных (Documents/Х в Документ.Х) и оставляет в логе только сообщения по ним, остальное сворачивает в счётчик. Полный отчёт лежит рядом в файле. Фильтр ничего не загружает, проверяется конфигурация, уже находящаяся в базе. Ненулевой код возврата 1cv8 трактуется как «найдены ошибки», а не как сбой, и итог печатается вердиктом.

 

Unit tests и обслуживание базы

Вкладка «Unit tests» прогоняет YAxUnit: загружает расширение с тестами Конфигуратором, запускает 1cv8c ENTERPRISE /C"RunUnitTests=...", разбирает отчёт jUnit и показывает дерево «набор → тест». Упавшие тесты с сообщением и стеком, failure и error различимы.

 

Вкладка «Unit tests»
Вкладка «Unit tests»

 

Одна деталь, на которую я потратил вечер: тесты отбираются по имени расширения в базе, а не по имени каталога. Несовпадение даёт «успешный» прогон с нулём тестов. Поэтому при нуле найденных тестов приложение выводит чек-лист, а код возврата берётся из файла exitCode, а не из кода процесса 1С.

Вкладка «Тестирование и исправление» это /IBCheckAndRepair с выбором операций и режима. Появилась она из-за той самой разбухающей файловой базы: режим «без тестирования, только выбранные операции» позволяет запустить чистое сжатие таблиц одной галочкой.

 

Как это встроилось в процесс команды

Инструмент делался не сам по себе, а под регламент разработки через GitLab: ветки feature_*, merge request, ревью, двухнедельный релиз. В этом процессе 021 стоит на двух местах: у разработчика, чтобы за секунды подтянуть чужой коммит в свою базу и прогнать тесты, и у сборщика релиза, чтобы объединить изменения по списку коммитов на релизный стенд.

 

Цикл разработки
Цикл разработки

 

Режим MCP-сервера

Последнее, что добавил, и то, что ещё год назад не пришло бы в голову. Тот же exe, запущенный с ключом --mcp, не создаёт окна и работает как MCP-сервер по stdio. Claude Code или другой MCP-клиент получает операции приложения как инструменты: get_changesload_configexport_configcheck_configrun_unit_testscheck_infobase и другие.

{
  "mcpServers": {
    "1c-config-loader": {
      "type": "stdio",
      "command": "C:\\Tools\\021\\ibcmd-config-loader.exe",
      "args": ["--mcp"]
    }
  }
}

Теперь агент может сам загрузить свой коммит в тестовую базу, прогнать проверку конфигурации по изменённым объектам и юнит-тесты, прочитать результат и исправиться. Долгие операции возвращают job_id сразу, завершения ждут через wait_job. Одновременно выполняется одно задание, и оно же блокирует запуск операции из окна: файл operation.lock держат оба процесса.

Про безопасность думал отдельно. Пароли сервер берёт только из профиля, где они зашифрованы DPAPI под учётной записью Windows, параметрами инструментов они не передаются и в ответах не появляются. Разрушающие инструменты требуют явного confirm: true. И всё равно для агента разумно завести отдельного пользователя ИБ с правами только на тестовую базу.

 

Мелочи, которые решают

  • Ctrl+C / Ctrl+V при русской раскладке. Tk сопоставляет копирование только с латинскими клавишами, а при русской раскладке вообще не распознаёт нажатие. Штатные сочетания молча не работали во всех полях. Приложение добавляет привязку по коду клавиши, который от раскладки не зависит.
  • «Из списка баз...» читает ibases.v8i окна запуска 1С, с поиском по мере ввода. Двойной клик подставляет реквизиты и сам переключает режим файловая/серверная.
  • Пароли не хранятся по умолчанию. Галочка включает хранение, зашифрованное DPAPI: профиль, скопированный на другую машину, пароли не отдаст.
  • Тёмная тема с заголовком окна через DWM, DPI-awareness для мониторов 125–150%, геометрия окна запоминается с проверкой попадания на видимый экран.
  • Кнопка «Стоп» завершает внешний процесс вместе с дочерними через taskkill /T и перед этим предупреждает, что прерванный apply может оставить конфигурацию базы в незавершённом состоянии.

 

Тёмная тема
Тёмная тема

 

Честно об ограничениях

  • Частичная загрузка не удаляет объекты и работает только в базу, где уже есть совместимая конфигурация. Первый раз в пустую базу только полная.
  • Изменение состава конфигурации (Configuration.xml в диапазоне) переключает на полную загрузку автоматически.
  • Серверный режим ibcmd требует вывести базу из кластера. Если это невозможно, пакетный метод.
  • Объединение работает только для основной конфигурации. Расширение маленькое и грузится целиком за секунды, выборочный merge ему не нужен.
  • Запрет новых подключений (sessions-deny) ни ibcmd, ни пакетный Конфигуратор не умеют, это делает кластер через rac. Сценарий «запретить вход, выгнать, обновить, разрешить» пока не реализован.
  • Нативные диалоги Windows тёмная тема не перекрашивает.

 

Цифры

 

Показатель Значение
Код около 8 600 строк Python, три файла: окно, ядро, MCP-сервер
Зависимости только стандартная библиотека
Тесты 37 (ядро и MCP-сервер)
Вкладок 10
Внешние утилиты ibcmd1cv81cv8c1cedtcligit
Платформа 8.3.27+ для частичной загрузки ibcmd, старше для остального

 

 

Где взять

Пока нигде. Инструмент живёт внутри нашей команды, и я честно не знаю, нужен ли он кому-то ещё или это моя личная мечта, которая никого больше не мучила. Поэтому сначала статья. Если отклик будет, выложу приложение и исходники: это Python со стандартной библиотекой, один exe, настройка за пять минут. Напишите в комментариях, стали бы вы таким пользоваться и что в вашем процессе мешает больше всего. От этого и будет зависеть, появится ли ссылка.

 

Вместо заключения

Самое ценное в этой истории не сам инструмент, а ощущение, что барьер исчез. Раньше выбор был между EDT с его требованиями к машине и файловой базой для автономника, либо Конфигуратором с получасовой загрузкой на каждый чужой коммит. Теперь есть git, привычный Конфигуратор для правок и одна кнопка, которая за минуту доносит коммит до базы, файловой или серверной. Это меняет поведение: подтянуть чужую ветку и посмотреть стало дешевле, чем спросить в чате «а что ты там поменял».

И второе, личное. Я снова почувствовал себя творцом. Не тем, кто закрывает задачи из очереди, а тем, кто видит проблему у команды и через пару недель приносит решение, которого раньше не было. ИИ здесь не заменил меня, он убрал стоимость попытки. Инструмент, о котором я мечтал годами, оказался вопросом решимости сесть и описать, как он должен работать.

Если вы годами делали то же самое руками, посмотрите на ibcmd config import files --partial. Возможно, ваша мечта тоже уже технически возможна, просто её пока никто не завернул в кнопку.

Буду рад вопросам и историям про ваши грабли с ibcmd и пакетным Конфигуратором в комментариях.

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструменты администратора БД Инструментарий разработчика Тестирование QA Системный администратор Программист Стажер 1С:Предприятие 8 Бесплатно (free)

В экосистеме 1С давно живут сотни инструментов: от Конфигуратора и Хранилища до систем тестирования, мониторинга, интеграции и CI/CD. Я собрал их в Ландшафт технологий, а теперь добавляю данные о реальном использовании. Рассказываю, как устроена карта, что показал первый опрос и почему в новой волне особенно нужны администраторы, аналитики и тестировщики.

01.09.2026    1608    mrXoxot    6    

24

DevOps и автоматизация разработки Мониторинг Тестирование QA Программист 1С:Предприятие 8 Бесплатно (free)

Платформа 1С давно вышла за рамки учетных систем. Сегодня это полноценная среда для создания сложных, высоконагруженных и распределенных приложений. А значит, и стек технологий современного разработчика кардинально изменился. Систематизируем весь инструментарий, который превращает 1С-программиста в инженера: от EDT и Git до автотестов на YAxUnit, контейнеризации приложений в Docker, мониторинга в Prometheus и организации шины данных на Kafka. Разберемся, зачем каждый инструмент нужен, как он вписывается в жизненный цикл разработки и с чего начать его внедрение.

25.08.2026    19189    mrXoxot    52    

77

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

Синхронизируйте свой проект EDT с хранилищем конфигурации так же легко, как в git клиенте. По кнопке Pull в проект EDT подтягиваются изменения из хранилища, по кнопке Push ваш коммит из git репозитория проекта EDT улетает в хранилище конфигурации.

09.07.2026    6383    DmitryShehovtsev    14    

26

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

Хватит ограничивать себя родным и уютным стеком 1С. Пора расширять кругозор и осваивать смежные стеки! Разберемся, как Docker может упростить жизнь одинэснику: от сборки и тестирования 1С до запуска инфраструктуры и автоматизации CI/CD, причем быстро, воспроизводимо и без лишнего мусора в системе.

08.05.2026    6527    sleemp    81    

37

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

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

06.04.2026    15157    vladimir-89    12    

33

Тестирование QA Программист 1С:Предприятие 8 Бесплатно (free)

За последний год YAxUnit заметно вырос: обновилась документация, запуск тестов в EDT стал практически мгновенным, появился редактор для режима 1С:Предприятие, инструменты для подготовки тестовых данных и подключение к ИИ через MCP-сервер для проверки и улучшения кода. Расскажем о том, какие свежие возможности YAxUnit позволяют сделать модульное и интеграционное тестирование в 1С быстрым, эффективным и комфортным.

26.01.2026    7543    Жолтокнижниг    19    

30

Тестирование QA Программист Бесплатно (free)

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

20.01.2026    6450    TaGolovkina    14    

26

DevOps и автоматизация разработки Программист 1С 8.3 1С:Библиотека стандартных подсистем Россия Бесплатно (free)

Расширение для VS Code, которое автоматизирует рутинные операции при разработке на платформе 1С:Предприятие 8. Позволяет выполнять все операции с конфигурацией, расширениями, информационными базами и тестами прямо из редактора, без необходимости запоминать команды и копировать их из блокнота.

13.01.2026    13168    0    johnnyshut23    35    

42
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. GarriSoft 657 03.09.26 15:15 Сейчас в теме
Добрый день, коллега.
Прочитал статью, хочу уточнить область применения инструмента.

Как понял: пайплайн решает узкую задачу - быстро закатить дельту изменений (по git-ветке) в информационную базу через ibcmd config import files --partial, без Конфигуратора и без полной загрузки в EDT. То есть это про шаг деплоя/синхронизации, а не про сам процесс разработки.

Вопрос в следующем: если разработка уже ведётся через EDT с ИИ-агентом (MCP-инструменты для создания объектов, правки кода, заимствования, код-ревью и т.д. - то, что даёт модель проекта EDT), т.к. возврат к Конфигуратору как таковому уже не нужен и мной не рассматривается - там просто нет API для нужной мне ИИ-интеграции. Получается, ваш инструмент решает проблему на стыке "как быстро закатить изменения в базу, минуя ручной Конфигуратор", но никак не заменяет и не ускоряет сам цикл разработки в EDT (создание/правку объектов), особенно для ERP, верно?

Если так - было бы полезно явно обозначить это в статье: инструмент не альтернатива EDT-разработке (в т.ч. с ИИ-агентами), а именно ускоритель последнего шага деплоя для тех, кто по какой-то причине всё ещё гоняет изменения через Конфигуратор вручную.

Либо я не до конца понял ваш workflow - если у вас был другой сценарий использования (например, применимость и при EDT-разработке, не только при работе через Конфигуратор), поясните, пожалуйста, где он встраивается в цикл "правка кода в EDT → тест → деплой".

Спасибо БОЛЬШОЕ за материал в любом случае, тема DevOps для 1С на ИС раскрывается редко.
3. KatanaDragon511 35 03.09.26 15:39 Сейчас в теме
(1) А вы смотрели как ИИ делает через EDT свою работу?, описан механизм хорошо, но если тебе нужно переименовать объект, создать новый, удалить старый EDT думает над каждой операцией по 5 - 10 минут. Когда как править файлы XML быстрее. Плюс ты тратишь время на сборку проекта и долгую загрузку в базу что бы это посмотреть - это очень долго. Я с ИИ быстро правлю и быстро смотрю в базе, ждать EDT не зачем. Код у меня проверяет BSL на докере, он быстрее работает, быстрее ищет ссылки на другие объекты. Я не понимаю зачем тут EDT?
orakool2; cleaner_it; +2 Ответить
5. GarriSoft 657 03.09.26 16:37 Сейчас в теме
(3)
Честно говоря, я и сам не то чтобы доволен EDT - вся эта ситуация напоминает историю про ежиков и кактус. Альтернативы в своей работе пока не вижу, именно поэтому я в постоянном поиске и завёл этот разговор про ваш workflow - не чтобы придраться, а чтобы понять, закрывает он мою боль или нет.

По сути технической части, до которой докопались в переписке - вот конкретные примеры операций через MCP-агента в EDT, у которых нет прямого аналога при правке XML:

1. Rename-рефакторинг объекта - атомарно обновляет все текстовые упоминания (модули, формы, СКД, права ролей, командный интерфейс, состав подсистем), сохраняя GUID неизменным. Через XML - либо вручную по всем местам, либо свой индексатор перекрёстных ссылок.

2. Поиск реальных использований объекта - находит обработчики событий формы по соглашению об именах, косвенные вызовы через Выполнить(). Обычный grep по XML/BSL даёт ложные срабатывания или пропуски.

3. Семантическая проверка запроса - проверяет текст запроса/СКД против реальной схемы метаданных до выполнения, а не в рантайме на боевой базе.

4. Просмотр формы для ИИ агента, как она будет выглядеть - визуальная компоновка с учётом наложения изменений от нескольких расширений сразу, вычисляется динамически, в XML не видна.

5. Мгновенная проверка правки метода при записи - обратная связь в момент записи, а не после полной пересборки или уже в базе.

6. Код-ревью с учётом модели метаданных - знает реальные типы реквизитов и доступные методы объекта, а не только текст программы.

Разница не в скорости, а в том, что эти операции опираются на разрешённую модель связей конфигурации, которую EDT строит и поддерживает сам - правкой XML напрямую эту модель не получить и есть большой шанс сломать конфигурацию, да я знаю есть специальные навыки, которые объясняют ИИ агенту, как нужно работать с метаданными, но осечки случаются

Но в итоге я не спорю с тем, что для каждой задачи свой инструмент - я для себя его выбрал: кривой, глючный, тормозной EDT, но пока пользуюсь именно им через ИИ-агента, потому что не готов терять то, что он даёт.
Ваш подход больше про другой шаг (деплой без Конфигуратора) - если когда-нибудь у вас появится сценарий и на редактирование/рефакторинг метаданных с сохранением консистентности, как в EDT, было бы интересно посмотреть него ещё раз.
tormozit; cleaner_it; +2 Ответить
6. KatanaDragon511 35 03.09.26 16:52 Сейчас в теме
13. KatanaDragon511 35 04.09.26 02:06 Сейчас в теме
(5) Извините, грубо написал, погорячился. Вот как сейчас у нас в разработке

1. Rename-рефакторинг. Атомарного аналога нет, тут вы правы. У меня это согласованная замена одним заходом: XML метаданного, модули объекта и форм, Form.xml, макеты, схемы СКД, запросы, имена файлов и запись в Configuration.xml. GUID при этом остаётся прежним, платформа воспринимает загрузку как переименование. После замены агент прогоняет валидаторы по объекту, формам, ролям и подсистемам и грепом ищет старое имя по выгрузке. Работает, но это дисциплина и проверка, а не одна операция. Скажу честно и другое: коллеги, у которых рефакторинг «атомарный», жаловались, что он заодно правил строковые литералы в чужих формах регламентированных отчётов. Так что на этом пункте я не завидую.

2. Поиск реальных использований. Два источника вместо одного. По выгрузке: обработчики событий формы агент берёт не грепом по BSL, а разбором Form.xml, где элементы, команды и события привязаны к процедурам, поэтому «висящие» обработчики не теряются. По живой тестовой базе: find_references_to_object через MCP-toolkit, ссылки ищет сама платформа. Косвенные вызовы через Выполнить() не ловит ни один из них, и любой инструмент здесь ловит их только частично.

3. Семантическая проверка запроса против схемы. До выполнения, против схемы, нет. Есть три ступени: BSL Language Server на синтаксис запроса в модуле, проверка конфигурации из 021 по изменённым объектам после частичной загрузки коммита, и execute_query через MCP-toolkit на тестовой базе. Последнее технически рантайм, но на копии, а не на боевой. Плюс скилл meta-info отдаёт агенту реквизиты и типы объекта из XML до написания запроса, так что большинство ошибок «нет такого поля» отсекается ещё на этапе написания. Признаю: это единственный из шести пунктов, где проверка «против модели до загрузки» отсутствует совсем.

4. Просмотр формы как её увидит пользователь. В XML этого нет, компоновку с наложением расширений считает только платформа. Я иду в обход: 021 грузит коммит в тестовую базу за минуту, база опубликована через Apache, агент открывает форму в веб-клиенте и делает скриншот. Медленнее, чем картинка из среды разработки, зато это ровно то, что покажет платформа: все расширения, роли и функциональные опции учтены.

5. Мгновенная обратная связь при записи метода. Нет. Мой цикл: правка модуля, BSL Language Server по изменённым файлам за секунды, затем частичная загрузка коммита через ibcmd и проверка конфигурации по изменённым объектам. На большой конфигурации это минута-две, а не мгновенно. Зато проверяет платформа, а не модель среды.

6. Код-ревью с учётом модели метаданных. Частично. bsl-platform-help отвечает, существует ли метод платформы, v8std даёт стандарты, Напарник делает ревью по ИТС, BSL Language Server проверяет AST, скилл meta-info даёт агенту типы реквизитов и табличные части объекта из XML. Агент сверяет код с ними сам. Но это сборка из нескольких инструментов, а не одна модель, которая знает всё сразу. Реальный пример дыры: ни один из них не проверяет число обязательных параметров у метода платформы, для этого пришлось написать скрипт по файлу справки shcntx_ru.hbk.

Итог честный: пункты 1, 3 и 5 без модели метаданных в памяти не закрываются, здесь среда разработки объективно сильнее. Пункты 2, 4 и 6 закрываются обходными путями.
14. KatanaDragon511 35 04.09.26 02:15 Сейчас в теме
(13) На будущее сделаю индексирование кода. SQLite рядом с репозиторием, схема из десятка таблиц: объекты, реквизиты, формы, элементы форм, процедуры, вызовы, ссылки, запросы. Наполнение теми же парсерами, что уже внутри скиллов info, обновление по списку файлов из get_changes.


1. Rename-рефакторинг. Закрывается почти целиком. Индекс перекрёстных ссылок знает все места, где объект упоминается как ссылка: типы реквизитов других объектов, поля форм, запросы, роли, подсистемы, командный интерфейс. Замена по такому списку становится одной операцией, а не грепом. Что останется вне индекса: строковые литералы с именем объекта в коде и текстах запросов внутри строк. Их можно показывать отдельным списком «возможные совпадения» на подтверждение, ровно так же поступают среды разработки.
Поиск реальных использований. Закрывается лучше, чем в среде разработки, если делать честно. Обработчики форм в индексе привязаны через Form.xml, а не по соглашению об именах. Вызовы процедур через дерево вызовов по модулям. Выполнить() и ВычислитьВыражение() не решаются никак, но индекс может хотя бы пометить модули, где они есть, и показывать их как «непроверяемые».
2. Семантическая проверка запроса. Закрывается в основной части. Имея в индексе таблицы, поля и типы, агент проверяет текст запроса до загрузки: существуют ли таблица и поле, есть ли виртуальная таблица у регистра, совпадают ли типы в соединениях и параметрах. Полную семантику языка запросов повторять не нужно, достаточно проверки имён и типов, это отсекает большинство ошибок. Для СКД то же самое, наборы данных в схеме содержат тот же текст запроса.
3. Просмотр формы. Не закрывается. Компоновку с наложением расширений считает платформа. Индекс может дать структуру формы, но не картинку. Остаётся скриншот из веб-клиента.
4. Обратная связь при записи. Закрывается частично, и это главный выигрыш по скорости. Проверка по индексу занимает секунды: ссылки на реквизиты, вызовы экспортных процедур, запросы. Ошибки вида «нет такого поля» и «нет такой процедуры» ловятся до загрузки в базу. Ошибки компиляции платформы по-прежнему требуют загрузки, но они станут редкостью.
5. Ревью с учётом модели. Закрывается. Агент получает типы реквизитов и доступные методы объекта из индекса одним запросом, а не сборкой из четырёх инструментов. Число параметров методов платформы дополняется скриптом по shcntx_ru.hbk, его тоже можно положить в индекс один раз.
18. GarriSoft 657 04.09.26 09:33 Сейчас в теме
(14)
Выглядит многообещающе.
Подписался, жду когда поделитесь с сообществом (бесплатно или за деньги)
15. D_astana 112 04.09.26 05:55 Сейчас в теме
(5) А конфастер в конфишураторе не подойдет? Использую его и codex cli. Не могу нарадоваться.
SemandCheb; +1 Ответить
17. GarriSoft 657 04.09.26 09:31 Сейчас в теме
(15)
Пробовал, не зашло.
Я несколько месяцев не пишу и не редактирую код в 1с руками, не создаю объекты, не модифицирую в конфигурации что либо руками. Все делаю через ИИ агента, хотя до этого 28 лет все это делал сам.
2. Tahallus 441 03.09.26 15:28 Сейчас в теме
Если отклик будет, выложу приложение и исходники

так опубликуй в github, люди будут пробовать, дадут отклик.
Somebody1; KapasMordorov; cleaner_it; pavlov_dv; dsdred; ef42; +6 Ответить
4. KatanaDragon511 35 03.09.26 15:40 Сейчас в теме
(2) Согласен, сделаю)
7. Ks_83 268 03.09.26 18:52 Сейчас в теме
Плюсанул. Думаю таких инструментов будет появлялся много. Я тоже себе такой сделал, но работает он через веб морду и процесс у нас несколько другой. Работаем по классическому гит флоу, поэтому вещи типа "частичная загрузка по коммитам" мне не понятна. Выглядит как костыль из-за невозможности работать по правильному процессу. Такие вещи привязывают разработку к нюансам локального процесса , выстроенного в какой-то конкретной организации. Поэтому продукт, увы, не универсален. Да вообще, если есть возможность, все это в реализуется через gitlab ci, если позволяет инфраструктура. Я делал своё решение как временное, чтобы потом просто перетащить логику в ямлы гитлаба.
16. GarriSoft 657 04.09.26 09:24 Сейчас в теме
(7)
Коллега, распишите пожалуйста чуть подробнее ваш воркфлоу, если это не секрет фирмы )
Я понимаю, что нужно смотреть по сторонам, что и как делают другие, а не зацикливаться только на своем опыте.
cleaner_it; +1 Ответить
20. Ks_83 268 04.09.26 13:25 Сейчас в теме
(16) очень простой воркфлоу. Под каждую задачу создается окружение в виде фича-ветки и ИБ разработки из которой прилетают коммиты. Связь ИБ и ветки просто по наименованию (у нас это номер задачи в джире). Далее все по классике - мерджи в develop и сборка из него предрелиза. Тесты и стат. анализ можно вешать куда угодно - хоть на каждый коммит, хоть на мердж. После завершения задачи - ИБ и смердженные ветки автоматически удаляются.Тут очень важная часть - это создание эталонной базы, на основании которой создаются ИБ разработки. Такая база должна быть легкая, но в тоже время с необходимым наполнением. Раньше это довольно сложная и затычная часть была, но сейчас с помощью ИИ-шки осталась сложность только в функциональных требованиях к эталону, а всю техничку ИИ-шка решает на раз. Эталон можно сделать так - берем снимок прода, смотрим какие таблицы самые увесистые(режем только крупняк), определяем нужны ли они нам в процессе разработки. Если не нужны то грохаем целиком, если все таки нужны - переносим некоторый небольшой срез по определённому принципу(тут важно не потерять ссылочную целостность, но иишка выручает).
Есть еще тема с разностными дисками, где можно плодить полные копии прода в неограниченном количестве без перерасхода физического места, но сам такое не пробовал.
21. GarriSoft 657 04.09.26 16:30 Сейчас в теме
(20)
Коллега, спасибо, что поделились! Это действительно впечатляющий уровень автоматизации.

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

Если это не секрет, не могли бы чуть подробнее раскрыть техническую сторону:
Как именно ИИ помогает удалять тяжёлые таблицы, сохраняя ссылочную целостность?
Насколько я понимаю, просто удалить записи из таблицы регистра нельзя - на них будут ссылаться документы, движения, остатки. ИИ определяет зависимости в автоматическом режиме? Вы передаёте ему схему метаданных, и он предлагает порядок очистки? Или есть какой-то более хитрый механизм (например, поиск всех ссылок и каскадное "вырезание" срезов)?

Буду благодарен за любые детали, которые можно раскрыть.
Очень интересный подход, задумался о внедрении чего-то подобного.
23. Ks_83 268 04.09.26 18:18 Сейчас в теме
(21) Алгоритм:

Берём данные из рабочей базы и переносим их в эталонную.
При копировании часть таблиц оставляем без данных: структура есть, строки не переносятся. Так отсекаются тяжёлые документы, регистры и движения.
Затем дозаполнение (shrink). Это не случайные строки, а связный срез:
в источнике отбирается окно проведённых документов нужного вида (по дате активности);
по связям документа собираются связанные записи: позиции, транзакции и прочие регистры сведений;
отдельно переносятся движения регистров, где этот документ — регистратор. В эталон копируются только эти строки. Документ приходит вместе с движениями и цепочкой, без которой он «не живой».
Чтобы так отбирать, нужна схема метаданных на уровне БД. 1С не хранит объекты под русскими именами: в PostgreSQL это _Document…, _InfoRg…, _AccumRg…, реквизиты — _Fld…. Карту берём из самой ИБ:
служебная таблица params (DBNames) — UUID объекта, тип и номер → имя SQL-таблицы;
таблица config — по UUID имя объекта метаданных. На выходе: _InfoRg2639 → РегистрСведений.…, _Document… → Документ.…, плюс какие колонки — ключ, связь, регистратор. По этой карте и собирается срез. Если платформа перенумерует хранение после изменения метаданных, карту нужно обновить.
Пересчитываем итоги, отвязываем конфигурацию от хранилища 1С(если привязана).
Собираем .cf из основной ветки Git и загружаем его в эталон.
Ставим Git-тег на вершину основной ветки — по нему видно, какой версии конфигурации соответствует шаблон.
8. dsdred 4280 03.09.26 19:57 Сейчас в теме
Не могу не поставить плюс.
Ибо EDT кастыль "пятое колесо", буквально пару дней назад говорил, что обновлять можно в обход EDT и человек признался, что даже про это незнал.
cleaner_it; sapervodichka; +2 Ответить
9. sss999 50 03.09.26 20:11 Сейчас в теме
Странные вопросы конечно, люди статью что ли не читали..По поводу разработки если бы мне дали ее попробовать то думаю я бы не разобрался как это всё работает, ну может пару кнопок только бы использовал то что понял как работает.
Как я понял в git папке хранятся обьекты метаданных с коммитами по дате, из каждой папки берется ласт коммит и накатывается на последний cf а потом это cf на базу по свти это экспорт изменений из базы разработки в тестовую и из тестовой в рабочую.
Dach; cleaner_it; sapervodichka; +3 Ответить
10. gybson 13 03.09.26 21:29 Сейчас в теме
Я сделал в том же духе Инструмент который должен собрать расширение по дифу в гите. Ну и соответственно обратно. Просто чтобы накатить расширение на пригодную для тестов базу, такая не у каждого всегда имеется ведь.

С почином всех =)

P.S. Не всегда верно собирает, будем править.
dsdred; cleaner_it; +2 Ответить
11. YA_1417274240 03.09.26 21:46 Сейчас в теме
Сам постоянно сталкиваюсь с такими проблемами,было бы интересно попробовать) но времени не хватает на все идеи, звучит очень вкусно!
12. пользователь 03.09.26 22:34
Автор, вы не первый кто это делает, но вы один из тех, кто продвинулся довольно далеко. Интересно взглянуть на инструмент.
Спасибо.
dsdred; malutinss; +2 Ответить
19. pavlov_dv 04.09.26 10:44 Сейчас в теме
Отличная идея, публикуйте на github!

Если выгружать прямо в git-репозиторий, первый же запуск сносит .git

Можно именить структуру репозитория.
В корне будут все гитовские служебные файлы и папка "src". А в src и выгружать конфу, тогда ничего не будет затираться.
22. Dach 437 04.09.26 16:30 Сейчас в теме
А чем vanessa-runner не устроил? Он тоже умеет обновлять требуемую базу из исходников и в том числе через ibcmd
24. hexhoc 174 07.09.26 08:29 Сейчас в теме
(22) Я думаю что тем, что он требует установки OneScript. Сейчас любая домохозяйка при помощи нейронки может свой vanessa-runner на python написать
25. KatanaDragon511 35 07.09.26 09:40 Сейчас в теме
(22)
Чего в vanessa-runner нет, а в 021 есть:
1. Частичная загрузка по диапазону git-коммитов. У vrunner --increment работает по собственному индексу изменений и --list по готовому списку файлов. Связки «коммит от/до → файлы → фильтр по каталогу XML → --partial» нет, её пришлось бы писать скриптом снаружи.
2. Объединение с cf по списку изменений из git (/MergeCfg с автогенерацией настроек). Нет вообще.
3. Статическая проверка источников подписок на события до касания базы. Нет.
4. Git-фильтр отчёта CheckConfig по объектам коммита. Нет.
5. Тестирование и исправление (/IBCheckAndRepair, сжатие). Нет.
6. Создание git-репозитория 1С одной кнопкой с precommit4onec и собственными блокирующими проверками. Есть только init-project в 2.x, в 3.0 он в списке мигрируемых.
7. Живой сеанс VA с MCP-портом (start/stop/status, блокировка операций с базой на время сеанса), установка окружения VA с GitHub. Нет.
8. Установка движка YAxUnit в репозиторий, скелет расширения с тестами, скиллы агента, contour.json, почта агента, защита conf.cfg, DPAPI-пароли, ibases.v8i. Всё это специфика контура агента, не CLI-задачи.
9. GUI. vanessa-runner чисто консольный.
10. Зависимости. 021 работает на голом Python без пакетов. vanessa-runner 3.0 требует OneScript 2.0+, opm и десятки библиотек. Это важно для машины разработчика и для GitHub Actions на windows-latest.

vanessa-runner 3.0 на момент 07.09.2026 всё ещё в статусе release candidate (rc17 от 03.09.2026), с ломающими изменениями формата настроек и команд. Стабильная 2.6.1 не имеет test yaxunit и MCP в текущем виде. Ставить на неё контур агента сейчас означало бы ловить миграцию.
26. Dach 437 07.09.26 12:27 Сейчас в теме
(25) хотелось "живой" ответ от Вас, г-н автор, почему именно Вы решили изначально не смотреть на vrunner

Кидать нейрослоп-ответ из чата на вопрос "что есть у нас и чего нет у них" не надо было
27. KatanaDragon511 35 08.09.26 07:53 Сейчас в теме
(26) Банально я не знал о нем. Нейрослоп сделал сравнение, ничего плохого в нем нет, суть понятна. Извини конечно за нейрослоп, времени физически нет самому делать, а ответить хотелось.
28. Dach 437 08.09.26 12:37 Сейчас в теме
(27) ну я так и понял. Возможности хорошие ты сделал, но полезнее было бы доработать vrunner. Ему больше 10 лет уже и он проверен множеством людей на множестве проектов. И то, что он cli - это плюс, а не минус. Все ИМХО, конечно же. Кстати, зависимостей там не так уж и много, базовые. Либы односкрипта все легковесные. Ну и по опыту, заказчики охотнее соглашаются ставить onescript на девопс-сервера, чем python, ибо под python полно несекьюрных либ как раз таки
Для отправки сообщения требуется регистрация/авторизация