
В прошлый раз мы рассматривали основы «вайб-кодинга» в Visual Studio Code с расширением Roo Code, ограничиваясь рефакторингом. Пришло время перейти на новый уровень: генерация нового кода с нуля.
Главная проблема бесплатных нейросетей (да и платных тоже) — они плохо знают синтаксис 1С и, конечно, совсем не знают структуру конкретных конфигураций. Решить это помогают MCP-сервера.
Настройка окружения: Секрет «умного» контекста.
Для работы мы опять будем использовать VS Code с расширением Roo Code. Ключевое отличие в этот раз — использование Model Context Protocol (MCP). Это мост, который передает нейросети знания о вашей базе.
Переходим в настройки Roo Code, на третью сверху закладку "MCP Servers"

1. Настройка Project MCP: В настройках Roo Code можно задавать разные наборы серверов для разных проектов, что очень удобно. Нам нужен пункт "Edit Project MCP". Откроется файл, куда нужно в формате json указать конфигурацию MCP.
Для разработки я использую два типа серверов:
Metadata MCP: Передает структуру метаданных (например, УПП или УТ 10). Благодаря ему модель «видит» реальные имена документов и справочников.
Я использовал бесплатный MCP сервер из этой публикации .
Работает как часы. За счёт свойства x-collection-name можно разделять разные конфигурации в одном MCP. Автору полнейший респект!
Вот мой форк для подключения к VScode.
Syntax MCP: Подсказывает актуальный синтаксис языка 1С. Это критично для бесплатных моделей или старых версий платформы (например, 8.2), чтобы ИИ не путал функции.
Я использовал бесплатный MCP сервер отсюда https://github.com/Antonio1C/1c-syntax-helper-mcp
Вот мой форк (я уже не помню, что я там дорабатывал, возможно SSE, но для примера в статье я использую свои форки)
{
"mcpServers": {
"my-1c-mcp-server": {
"url": "http://192.168.1.13:8012/sse",
"timeout": 60,
"headers": {
"x-collection-name": "1cservice_rag"
},
"disabled": false,
"alwaysAllow": [
"get_document_info",
"search_1c_documentation"
]
},
"1c-syntax-helper": {
"url": "http://192.168.1.13:8002/mcp",
"timeout": 60,
"disabled": false,
"alwaysAllow": [
"get_syntax_info",
"find_1c_help"
]
}
}
}
MCP находятся в контейнерах, поэтом поднимать их достаточно просто и быстро. Ну и поддержки они никакой не требуют.
2. Выбор провайдера: Вместо OpenRouter в этот раз используется сервис Cerebras с моделью GLM 4.7. Его главное преимущество — огромные лимиты (до 1 млн токенов), что позволяет вести длинные диалоги без пауз (или почти без пауз) БЕСПЛАТНО.
Практическая задача: Обогащение Excel-файла.
Я взял реальный кейс (немного переиначив его под типовую УТ10): есть файл Excel с номерами и датами заказов покупателей. Нужно написать код, который найдет эти заказы в базе 1С и добавит в файл данные об ответственном, контрагенте, телефоне (из регистра сведений контактная информация) и датах отгрузки/оплаты.
Как составить промпт?
Чтобы модель не «галлюцинировала», промт был разделен на три части (из них вторая необязательная и нужна для простоты демонстрации):
• Бизнес-задача: Четкое описание колонок Excel и того, что нужно добавить. По сути, это то, что пришло в Jira от пользователя )
• Технические ограничения: Просьба писать код «простынёй» без лишних функций, чтобы его можно было сразу вставить в консоль кода 1С и выполнить - это для того, чтобы сразу проверить результат (хотя воспоминание из будущего - агенты могут генерить уже и полностью обработки с формами).
• Принудительный контекст: Команда обязательно использовать данные из подключенных MCP-серверов для поиска метаданных и проверки синтаксиса.
У меня есть файл excel в котором три колонки , первая строка названия колонок, нужно обрабатывать со второй.
Во второй колонке номер документа Заказ клиента , например ТК000000007 а в третей дата в виде 03.02.2007 14:00:00 нужно написать код который добавить колонки в файл и сохранит его добавив к имени "_1" выведет в колонки номер документа Заказ , Дата документа, Ответственного, Контрагента, Телефон контрагента , Дату отгрузки, Дату оплаты.
Не нужно форматирования, никаких шрифтов и выделений и пиши все без функций, просто код так чтобы я мог вставить текст в консоль кода и выполнить, чтобы код был одной простынёй. Обязательно используй MCP.
Для понимания структуры конфигурации, реквизитов объектов обязательно используй my-1c-mcp-server а для понимания синтаксиса языка 1С используй 1c-syntax-helper . Напиши код в файле ОбогатитьExcel.bsl . Телефон контрагента бери из регистра "Контактная информация ", документ ищи по дате и номеру.
Прошу обратить внимание, что в промпте указан документ "Заказ клиента", но такого документа нет в нашей конфигурации (он называется "заказ покупателя"). Однако, забегая вперёд, модель найдёт нужный документ и напишет код правильно. Это ключевая заслуга MCP. Нам не нужно писать километровый промпт с названием всех наших метаданных, даже если они нетиповые).
Как консультант заменил программиста
Сегодня был на вебинаре, там консультант рассказывала и показывала кейс, как она за 5 часов решила задачу написания отчёта для клиента которую оценили в 19 часов. (без опыта программирования без MCP и агентов, просто через браузерый чат с клодом) Но у неё было ТЗ которое она составила. Это ТЗ было суперподробным (я таких вообще не помню на своём веку), с указанием имён метаданных, срезов последних и т.п.
Увиденное натолкнуло меня на мысль:
Голая модель может заменить программиста ( но потребуется очень хороший консультант)
Модель с MCP заменит их всех
Запускаем промпт
Модель сразу начинает шуршать по нашим MCP, открывая для себя удивительный мир 1С
Но только по важным вопросам
На самом деле рассматриваемая модель весьма неплохо знает 1С, поэтому обращения все по существу и в основном по структуре нашей конфигурации. Но некоторые модели (не буду показывать пальцем, но оставил в видео в качестве юмора) первый раз слышат о нашем стеке и могут уйти учиться 1С надолго )))

Периодически возникают ошибки из-за частых запросов (у нас всё-таки бесплатный провайдер). Но делать ничего не надо, Roocode сам подождёт и продолжит. Можно пока налить себе кофе или чай.
Первый раз нас спрашивают разрешения на те или иные действия, но, я думаю, вы легко разберётесь, как настроить автосоглашательство, если захотите )

В конце модель пишет отчёт о проделанной работе и выводит результат.
Результаты: ИИ против Человека
Результат (две исправленные ошибки помечены #Ошибка)
// Назначение: Обогащение Excel файлы данными из 1С по заказам покупателей
// Параметры (использовать константы внутри кода)
// ПутьКФайлу - путь к $724;исходному Excel файлу
// Возвращаемое: файл с суффиксом _1, содержащий обогащенные данные
// Примечание: Код выполняется без использования функций, простынёй
// Операции с БД: Чтение документов ЗаказПокупателя и регистра КонтактнаяИнформация
// Интеграция: Работа с Excel файлами
// initialization
ТабДокВходящий = Новый ТабличныйДокумент;
ПутьКФайлу = "C:\1C_VSCode\NewCodeMCP\Заказы.xls";
ТабДокВходящий.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
// input_validation
КоличествоСтрок = ТабДокВходящий.ВысотаТаблицы;
КоличествоКолонок = ТабДокВходящий.ШиринаТаблицы;
Если КоличествоСтрок < 2 Тогда
Сообщить("Файл пуст или содержит только заголовки");
Возврат;
КонецЕсли;
// data_processing
ТабДокИсходящий = Новый ТабличныйДокумент;
ЗаголовкиИсходный = Новый Массив;
ЗаголовкиИсходный.Добавить("Номер документа");
ЗаголовкиИсходный.Добавить("Дата документа");
ЗаголовкиИсходный.Добавить("Номер заказа из файла");
// creating_header
ТабДокИсходящий.Область(1, 1, 1, 7).Текст = "Номер документа";
ТабДокИсходящий.Область(1, 2, 1, 7).Текст = "Дата документа";
ТабДокИсходящий.Область(1, 3, 1, 7).Текст = "Ответственный";
ТабДокИсходящий.Область(1, 4, 1, 7).Текст = "Контрагент";
ТабДокИсходящий.Область(1, 5, 1, 7).Текст = "Телефон контрагента";
ТабДокИсходящий.Область(1, 6, 1, 7).Текст = "Дата отгрузки";
ТабДокИсходящий.Область(1, 7, 1, 7).Текст = "Дата оплаты";
НомерСтрокиВыход = 2;
// getting_phone_type
ЗапросТелефон = Новый Запрос;
ЗапросТелефон.Текст =
"ВЫБРАТЬ
| КонтактнаяИнформация.Представление КАК Телефон
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Контрагент
| И КонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Телефон)";
// loop_processing
Для НомерСтроки = 2 По КоличествоСтрок Цикл
// reading_excel_data
ЯчейкаНомер = ТабДокВходящий.Область(НомерСтроки, 2, НомерСтроки, 2).Текст;
ЯчейкаДата = ТабДокВходящий.Область(НомерСтроки, 3, НомерСтроки, 3).Текст;
// parsing_date
ДатаИзФайла = ЯчейкаДата;
//#Ошибка ДатаИзФайла = ЗначениеИзСтроки(ЯчейкаДата);
// finding_document
ДокументЗаказ = Документы.ЗаказПокупателя.НайтиПоНомеру(ЯчейкаНомер, ДатаИзФайла);
// default_values
НомерДокумента = "";
ДатаДокумента = "";
Ответственный = "";
Контрагент = "";
Телефон = "";
ДатаОтгрузки = "";
ДатаОплаты = "";
// filling_document_data
Если ДокументЗаказ <> Неопределено Тогда
НомерДокумента = ДокументЗаказ.Номер;
ДатаДокумента = ДокументЗаказ.Дата;
// getting_responsible
Если ЗначениеЗаполнено(ДокументЗаказ.Ответственный) Тогда
Ответственный = ДокументЗаказ.Ответственный.Наименование;
КонецЕсли;
// getting_contractor
Если ЗначениеЗаполнено(ДокументЗаказ.Контрагент) Тогда
Контрагент = ДокументЗаказ.Контрагент.Наименование;
// database_query - getting_phone
ЗапросТелефон.УстановитьПараметр("Контрагент", ДокументЗаказ.Контрагент);
ВыборкаТелефон = ЗапросТелефон.Выполнить().Выбрать();
Если ВыборкаТелефон.Следующий() Тогда
Телефон = ВыборкаТелефон.Телефон;
КонецЕсли;
КонецЕсли;
// getting_shipment_date
Если ЗначениеЗаполнено(ДокументЗаказ.ДатаОтгрузки) Тогда
ДатаОтгрузки = ДокументЗаказ.ДатаОтгрузки;
КонецЕсли;
// getting_payment_date
Если ЗначениеЗаполнено(ДокументЗаказ.ДатаОплаты) Тогда
ДатаОплаты = ДокументЗаказ.ДатаОплаты;
КонецЕсли;
КонецЕсли;
// writing_output_data
ТабДокИсходящий.Область(НомерСтрокиВыход, 1, НомерСтрокиВыход, 7).Текст = НомерДокумента;
ТабДокИсходящий.Область(НомерСтрокиВыход, 2, НомерСтрокиВыход, 7).Текст = Формат(ДатаДокумента, "ДЛФ=DT");
ТабДокИсходящий.Область(НомерСтрокиВыход, 3, НомерСтрокиВыход, 7).Текст = Ответственный;
ТабДокИсходящий.Область(НомерСтрокиВыход, 4, НомерСтрокиВыход, 7).Текст = Контрагент;
ТабДокИсходящий.Область(НомерСтрокиВыход, 5, НомерСтрокиВыход, 7).Текст = Телефон;
ТабДокИсходящий.Область(НомерСтрокиВыход, 6, НомерСтрокиВыход, 7).Текст = Формат(ДатаОтгрузки, "ДЛФ=DT");
ТабДокИсходящий.Область(НомерСтрокиВыход, 7, НомерСтрокиВыход, 7).Текст = Формат(ДатаОплаты, "ДЛФ=DT");
НомерСтрокиВыход = НомерСтрокиВыход + 1;
КонецЦикла;
// database_write - saving_file
ПозицияТочки = СтрНайти(ПутьКФайлу, ".", Истина);
//#Ошибка ПозицияТочки = СтрНайти(ПутьКФайлу, ".", ПоискКонца);
ИмяБезРасширения = Лев(ПутьКФайлу, ПозицияТочки - 1);
ПутьВыходной = ИмяБезРасширения + "1.xls";
ТабДокИсходящий.Записать(ПутьВыходной, ТипФайлаТабличногоДокумента.XLS);
Сообщить("Файл успешно создан: " + ПутьВыходной);
Я, кстати, не планировал писать статью, когда записывал видео и не сохранил код.
Но один известный ИИ мне по скринам из видео восстановил код. Внимательный читатель комментариев догадается какой именно ИИ. По той же причине некоторые скриншоты плохого качества.
Несмотря на то, что использовалась бесплатная модель Z-ai, результат впечатляет:
• Понимание конфигурации: Модель сама поняла, что в «УТ 10» документ называется «Заказ покупателя», а не «Заказ клиента» (как было в промпте).
• Скорость: Код был написан и отлажен за 15 минут. По оценке автора, человеку на эту же задачу потребовался бы минимум 1 час.
• Качество: В процессе возникло всего 2 мелкие ошибки (например, несуществующая переменная ПоискКонца), которые могут быть исправлены за пару минут ручными правками или уточняющим вопросом к модели.
Итог: Модель справилась на твердую четверку. Даже бесплатные инструменты при правильной настройке контекста через MCP позволяют автоматизировать рутину в 1С не хуже, чем многие платные аналоги.
И в конце немного про другие модели в той же задаче
Бесплатный deepseek справился со второй попытки

Платный Sonnet 4.5 допустил одну опечатку и намудрил с шапкой.
Он, кстати, использовал com объекты.

🚀 Что дальше
В следующей статье расскажу про:
🎥 Видео-версия
Спасибо за внимание.
Предыдущие статьи:
Вайб-кодинг в 1С: как рефакторить код бесплатно с помощью VS Code и Roo Code
Следующие статьи:
Вайб-кодинг в 1С: Подключаем локальные MCP-сервера к любой нейросети через MCP SuperAssistant
Вайб-кодинг в 1С: Создаём MCP для 1С 7.7 за вечер и пишем обмен с бухгалтерий 8
Вайбкодинг в 1С: Codex Desktop + GPT-5.4 пишет обработку САМ (Скайнет?)
Вайб-кодинг в 1С: Настраиваем эффективный workflow разработки внешних обработок через CLI и Git