Подводка
11 лет в 1С. За это время чего только не перепробовал для облегчения рутины — снипеты, шаблоны, генераторы. Всё помогало, но не радикально.
Потом довелось поработать с Python и C++. Попробовал вайб-кодинг — описываешь задачу словами, нейросеть пишет код. На Python это реально работает: современные модели выдают рабочий код с первого-второго промпта. Ускоряешься в разы.
И тут задумался: а можно ли так же с 1С?
Тема вайб-кодинга в 1С уже вовсю поднимается. Есть MCP-серверы для популярной IDE для AI-агентов, автодополняльщики, курсы. Посмотрел — интересно, но мне хотелось другого. Не подсказок в IDE и не автодополнения. Хотелось попробовать агентское программирование — когда программа за тебя делает полный цикл работы. Не подсказывает код, а сама создаёт объект метаданных, загружает в конфигурацию, и ты видишь результат в режиме предприятия. Ощутить себя архитектором из Матрицы — описал задачу, откинулся в кресле, а машина работает.
Решения с агентским подходом есть, но захотелось пройти этот путь самому. Очень нравится тема AI-агентов, поэтому решил сделать первые шаги самостоятельно. Долгое время автоматизировал лизинг, поэтому в качестве задачи выбрал написание простенькой конфигурации для лизинговой компании. Посмотрим, что получится.
Шаг 1: скормить XML модели
Взял свою рабочую конфигурацию БП КОРП и выгрузил в XML через стандартный ВыгрузитьКонфигурациюВФайлы (DumpConfigToFiles). Получил каталог на 80 000 файлов.
Дал пару файлов агенту на анализ. Модель сразу увидела структуру: каждый объект — отдельный каталог с XML-описанием и BSL-модулями. Есть какой-то корневой файл со списком всех объектов. В целом — достаточно понятная организация.
Раз модель понимает структуру — значит можно научить её с ней работать. Решил написать MCP-инструмент.
Шаг 2: MCP-инструмент для чтения метаданных
Для тех кто не в курсе: MCP (Model Context Protocol) — это способ дать AI-модели доступ к вашим данным и инструментам. Описываете функцию на Python, а модель вызывает её когда считает нужным. По сути — руки для мозга.
Мой первый инструмент — read_metadata. Делает простую вещь: читает XML-файл объекта и возвращает модели структурированную информацию о реквизитах, табличных частях, модулях.
import xml.etree.ElementTree as ET
import os
# Все XML-файлы конфигурации 1С используют этот namespace
NS = {'md': 'http://v8.1c.ru/8.3/MDClasses'}
def read_metadata(object_type: str, object_name: str, xml_dump_path: str) -> dict:
"""Читает метаданные объекта конфигурации 1С из XML-выгрузки.
Параметры:
object_type: тип ("Catalog", "Document", "InformationRegister" и т.д.)
object_name: имя объекта (например, "Контрагенты")
xml_dump_path: путь к каталогу XML-выгрузки
Возвращает словарь с именем, реквизитами, табличными частями и модулями.
"""
# В выгрузке 1С каждый тип объекта лежит в своём каталоге:
# справочники в Catalogs, документы в Documents и т.д.
type_dirs = {
'Catalog': 'Catalogs', 'Document': 'Documents',
'InformationRegister': 'InformationRegisters',
'Enum': 'Enums', 'Report': 'Reports',
'DataProcessor': 'DataProcessors',
}
# Собираем путь к XML-файлу объекта
dir_name = type_dirs.get(object_type, object_type + 's')
xml_path = os.path.join(xml_dump_path, dir_name, object_name,
f'{object_name}.xml')
if not os.path.exists(xml_path):
return {'error': f'Объект не найден: {xml_path}'}
# Парсим XML — стандартный ElementTree, ничего экзотического
tree = ET.parse(xml_path)
root = tree.getroot()
# Достаём реквизиты — ищем все теги <Attribute> и берём из них <Name>
attributes = []
for attr in root.findall('.//md:Attribute', NS):
name_el = attr.find('.//md:Name', NS)
if name_el is not None:
attributes.append(name_el.text)
# Табличные части — аналогично, тег <TabularSection>
tabular_sections = []
for ts in root.findall('.//md:TabularSection', NS):
name_el = ts.find('.//md:Name', NS)
if name_el is not None:
tabular_sections.append(name_el.text)
# BSL-модули лежат в подкаталоге Ext (ObjectModule.bsl, ManagerModule.bsl и т.д.)
ext_path = os.path.join(xml_dump_path, dir_name, object_name, 'Ext')
modules = os.listdir(ext_path) if os.path.exists(ext_path) else []
return {
'name': object_name,
'type': object_type,
'attributes': attributes,
'tabular_sections': tabular_sections,
'modules': modules,
}
50 строк, стандартный парсинг XML. Но это даёт модели «зрение»: она видит конфигурацию не как кашу из тегов, а как объекты с реквизитами.
Для типового справочника Контрагенты модель получает:
{
"name": "Контрагенты",
"type": "Catalog",
"attributes": ["ИНН", "КПП", "НаименованиеПолное", "ЮрФизЛицо"],
"tabular_sections": ["КонтактнаяИнформация"],
"modules": ["ManagerModule.bsl", "ObjectModule.bsl"]
}
Теперь «Добавь реквизит в справочник Контрагенты» — осмысленная задача, а не гадание вслепую.
Шаг 3: а что, если загрузить обратно?
Чтение — это read-path. Все так делают. Но раз модель понимает структуру XML — может она и создать такой XML?
Попробовал руками: взял XML типового перечисления, скопировал, поменял имя и UUID, положил в каталог выгрузки, прописал в Configuration.xml, запустил ЗагрузитьКонфигурациюИзФайлов. Работает! Платформа приняла новый объект.
Значит можно автоматизировать. Я работал в одной из популярных IDE для AI-агентского программирования — написал Python-скрипт, который:
- Генерирует UUID
- Формирует XML по шаблону (скопировал структуру типового объекта и параметризировал)
- Создаёт каталог и файл в выгрузке
- Добавляет запись в Configuration.xml
А для загрузки — BAT-файл, который вызывает конфигуратор в пакетном режиме:
@echo off
chcp 65001 >nul
"C:\Program Files\1cv8\8.3.27.1859\bin\1cv8.exe" DESIGNER ^
/IBConnectionString "File='E:\bases\buh'" ^
/LoadConfigFromFiles "E:\bases\xml_dump" ^
/UpdateDBCfg ^
/Out "E:\logs\load.log"
echo Готово. Код: %ERRORLEVEL%
Итого полный цикл:
Python: выгрузить XML → Python: создать справочник → BAT: загрузить обратно
IDE запускала и Python-скрипты, и BAT-файлы. Агент оркестрировал весь процесс.
Шаг 4: что получилось
Попросил агента создать справочник «ГрафикиПлатежей».
Агент:
- Сгенерировал XML справочника
- Положил в каталог выгрузки
- Добавил запись в Configuration.xml
- Запустил BAT-файл загрузки
Открываю конфигуратор — справочник на месте:

Открываю режим предприятия — тоже видно:

Кстати, обратите внимание на имя — длкГрафикиПлатежей. По стандартам 1С (ITS) имена добавленных объектов в типовой конфигурации должны начинаться с префикса в верхнем регистре и с подчёркиванием — например ДЛК_ГрафикиПлатежей. Мой агент создал без подчёркивания и в нижнем регистре. Работает, но не по стандарту. Придётся ещё учить его стандартам разработки 1С — пока он как стажёр, который код пишет, а правила оформления ещё не выучил.
Грабли
Было бы нечестно и скучно не рассказать.
Configuration.xml. Первая попытка: создал XML справочника, положил в каталог выгрузки, загрузил — «Операция завершена успешно». Открываю конфигуратор — объекта нет. Полдня искал причину. Оказалось, в корне выгрузки есть файл Configuration.xml — что-то вроде оглавления конфигурации. В нём перечислены все объекты с UUID. Если нового объекта нет в этом оглавлении — платформа его просто игнорирует, даже если файлы на месте. Добавил запись — заработало.
GeneratedTypes. Каждый объект в XML имеет секцию <Produced> — набор типов, которые платформа генерирует для него. У справочника их 8 (Object, Ref, Manager, Selection, List...), у регистра сведений — 7 (есть RecordManager). Мой генератор поставил 6 для регистра — платформа молча отвергла при загрузке. Никакой вменяемой ошибки — просто «не удалось». Два часа сравнивал с типовым объектом, пока не нашёл.
Поддержка. Для эксперимента взял стандартную БП КОРП. Она на поддержке от 1С — все объекты залочены. Пришлось руками в конфигураторе снять ограничение на редактирование, иначе загрузка не проходила. Агент тут пока бессилен — настройка поддержки только через GUI.
Повторяю без моего вмешательства в процессе: полный автомат!
Во всех предыдущих попытках я лез руками в конфигуратор — настраивал поддержку, проверял результат. Ощущение «за меня всё сделали» было неполным. Хочется, чтобы помощник всё полностью за меня сделал.
Поэтому решил повторить эксперимент чисто. И с усложнением в 5 раз! Разрешил редактирование корня конфигурации с сохранением поддержки (одноразовая ручная операция), откатил все предыдущие изменения и запустил задачу заново: добавить 3 справочника и 2 документа.
И пошёл гулять.
Система выгрузила файлы конфигурации, сгенерировала XML новых справочников, прописала их в Configuration.xml, загрузила обратно через конфигуратор в пакетном режиме и обновила конфигурацию базы данных. Всё полностью автоматически.
Вернулся через час. Открыл конфигуратор — справочники на месте, документы тоже. Открыл режим предприятия — работает.


Итог, экономия времени
Операция, которую руками делаешь за 2 минуты (Конфигуратор → Новый справочник → Имя → Ctrl+S), заняла у меня почти целый день. Написание MCP-инструментов, эксперименты с XML, поиск граблей, отладка BAT-файлов... Сама автоматическая загрузка — около часа. Но подготовка к ней — весь оставшийся день.
Оптимизация? Ну... скажем так, пока скорее наоборот. Зато можно пойти погулять (или поспать), пока машина загружает конфигурацию.
Но если серьёзно — это первый шаг, который показал главное: оно работает. Агент может не просто подсказать код в IDE, а сам создать объект метаданных, который платформа 1С принимает как родной. Полный цикл: описание задачи → генерация XML → загрузка → объект в Enterprise. Без моего участия. И при масштабировании и увеличении количества задач положительный эффект должен появиться.
Дальше — дело техники. В планах: научить агента добавлять реквизиты в существующие объекты, писать код модулей, может быть даже работать с формами. Фундамент есть — write-path работает. Буду продолжать развивать эту тему.
Продолжение следует.
Вопросы, критика, советы — в комментариях, буду признателен. Особенно интересные вызовы, задачи, которые должны быть точно не под силу ИИ
Вступайте в нашу телеграмм-группу Инфостарт