«Чтобы оставаться на месте, нужно бежать со всех ног. А чтобы куда‑то попасть, надо бежать как минимум вдвое быстрее» — Льюис Кэрролл
Пролог. День, когда опять что‑то сломалось
Это было очередное утро после вечернего обновления релиза. В рабочей базе уже несколько часов валилась какая‑то ошибка. Пользователи писали в поддержку, поддержка — нам. В чем оказалась причина? Всего одна строчка кода — мы потеряли ее во время ручного переноса из дева в релизное хранилище.
Далее последовал примерно следующий диалог:
Руководство: «А откуда ошибка? Разве мы вчера всё не протестировали?».
Мы: «Протестировали, но ошибку довнесли позже».
Руководство: «А как нам этого избежать в будущем? Может автотесты какие добавить или ИИ привлечь? Что нужно сделать?».
Мы: (короткое молчание) «Пока точно не знаем, подумаем..».
И в этот раз не покидала мысль: если ничего не изменим, то следующая ошибка уже может стоить не трёх часов, а трёх дней. И большего негатива пользователей или не дай бог убытков компании.
В тот вечер в поисковиках у команды начали появляться следующие запросы: «Как перейти с конфигуратора 1С на EDT», “Git для 1С”, «ИИ в 1С‑разработке» и пр. И пока мы даже не задумывались, что запущен самый сложный, дорогой и одновременно очень нужный проект в нашей команде.
Часть 1. Наше бытие и ловушка комфорта
Мы — довольно большая компания. То, как мы работаем с 1С, должно быть многим будет знакомо. Есть два хранилища — dev и release. Разработчик делает правки, потом вручную, через «сравнение и объединение», переносит их в релизную базу. Получается, наш merge — это частый копипаст из окна в окно, либо сравнение/объединение, и постоянный риск забыть что‑то или перенести не так и не туда.
Code review? Формально он есть. Но найти и посмотреть изменения разработчика в Конфигураторе — довольно муторное занятие. Даже настроен SonarQube, но полностью ему на откуп проверку кода не отдаем, он как дополнительный информатор. На практике ревью сводилось к фразе «Ты посмотрел задачу? Сейчас гляну».
Про CI/CD слышали, что‑то даже есть. Настроен скрипт, который периодически выгружает хранилище в Git. Без веток задач, только теги на них в коммитах. По сути Git используется просто как архив, а не как основной инструмент, и использовать его для развертывания систем не можем.
И знаете, что здесь самое опасное? Все к такой работе привыкли и всех всё устраивало. Зачем что‑то менять, если «и так работает». Да и времени особо на нововведения нет, поток новых задач идет постоянно.
«Если ты не идёшь вперёд, ты откатываешься назад. В стоячей воде неизбежно начинается гниение» — Лао Цзы
Казалось, мы стоим в этой самой воде и она начинает понемногу пахнуть.
Часть 2. Новые надежды и встреча с реальностью
После исследования чужого опыта и погружения в тему, твердо решили: движемся в сторону перехода на EDT. Он хранит конфигурацию в отдельных файлах на диске, а это открывает дверь к Git с отдельными ветками задач, Merge‑requestами и полноценным code‑review. Есть какие‑то альтернативные варианты по синхронизации конфигуратора с Git, но скорее всего это было бы промежуточным переходом, надо сразу ставить разработку на правильные рельсы.
Мы представляли, что наши разработчики, как в Google: пишут код, делают коммиты, еще и ИИ используют на каждом шагу. Наши надежды были наивными и прекрасными. Реальность же оказалась жёстче.
Первая стена — не бюджетное железо
Конфигуратор работает на любом «калькуляторе», а EDT — это тяжелая IDE на Eclipse. На обычном ноутбуке с 8–16 ГБ ОЗУ она грузится и подключает базу неприлично долго. Работать на «стандартном железе» было бы невозможно.
«Гладкая дорога никогда не делает умелого водителя» — Латинская пословица
Мы собрали основные требования: 32 ГБ ОЗУ, быстрый SSD, современный производительный процессор. Для всей команды надо закупить хорошие рабочие станции, а лучше ноутбуки. А ведь это заранее незапланированный бюджет.
Вторая стена — сторонние разработчики
Как заставить сторонних подрядчиков, которые работают с нами давно, перейти на EDT? Пока это вопрос открытый. Они просто могут не потянуть такое оборудование, скажут «дорого» или «не умеем».
Решение ещё ищем, и то что сейчас прорабатываем — не такое красивое: синхронизация через файлы *.cf. Те, кто в EDT, работают в Git. Для внешних разработчиков выгружаем cf‑файл с изменениями. Схема сложная, но кажется позволяет начать двигаться вперед.
Третья стена — человеческий фактор
Люди боятся нового и не хотят ничего менять, это не новость.
«Зачем мне EDT? У меня куча задач и в Конфигураторе я всё успеваю» — высказались некоторые разработчики. «Это всё сложно, долго и не работает» — вторили им другие.
И люди боятся не самой EDT, а неизвестности. Угрозы своей компетентности. Новых привычек, манипуляций и дополнительной рутины, по началу возможно отнимающих еще больше времени.
Понятно, что людям потребуется время на привыкание и наработку новых навыков. Здесь можно начать продвижение новинки с пилотной группы из нескольких энтузиастов — выдать им новые ноутбуки, чтобы настроили EDT, вникли в преимущества Git. Скорее всего через месяц многие уже не захотят возвращаться к старому, а остальные увидят их результат и будут подтягиваться.
«Трудности — это не преграды на пути, они и есть путь» — Райан Холидей
Главный вывод этой части: EDT при серьезной разработке в 1С — это уже не дань моде, а необходимость. Но этот путь требует мощных компьютеров, терпения и готовности от всех меняться.
Часть 3. Следующий уровень в работе
Здесь еще раз проговорим, зачем нам все это? Когда мы освоим EDT и Git, перед нами откроются горизонты, о которых мы раньше даже не мечтали:
Настоящий code review
Повторюсь, раньше у нас был SonarQube, который вроде и проверял код, но мы всё равно искали и смотрели изменения в Конфигураторе — неудобно, медленно, часто без контекста.
В нашем светлом будущем нас ждет merge‑request. Каждая ветка‑задача проходит ревью. Мы сразу видим строки, которые изменились, всё в одном месте.
А ещё можно начать использовать Git‑хуки. Подключить скрипты, которые автоматически проверяют код перед коммитом или пушем, с помощью различных сервисов, в том числе на основе ИИ.
Автоматизация тестирования с Vanessa Automation
Отдельная история — тестирование. Раньше мы тестировали основной функционал вручную перед каждым релизом. Долго, скучно, и потом часто всплывал баг, хотя «вчера все работало».
Сейчас активно развиваем Vanessa Automation — полноценный фреймворк для автоматизированного тестирования в 1С. А тут еще в последних версиях у нее появилась поддержка ИИ и MCP‑серверов, что кажется может дать огромную выгоду в генерацию тестовых данных. Vanessa сможет сама подготовить данные для теста: создать документы, заполнить справочники. ИИ поможет написать и сами тесты.
С этими новыми возможностями еще только предстоит разобраться. Но основная цель — чтобы автотесты выявили ошибку до того, как это сделает пользователь — уже не кажется такой уж недостижимой.
Сборка и выпуск приложения
И конечно основное преимущество — это единое окно внесения изменений в релиз и его последующая автоматическая сборка. Никаких больше тебе ручных, муторных и не внимательных переносов из хранилища в хранилище.

Часть 4. ИИ — не игрушка, а пропуск в будущее
Еще в начале нашего пути по освоению EDT мы знали: ИИ сейчас — практически везде. Коллеги из других команд уже активно используют его для написания тестов, рефакторинга и пр. К тому же наша компания активно продвигает его использование на всех уровнях и помогает в освоении.
И после этого задаешься вопросом: «Почему у нас этого нет?». Ответ обычно таков: потому что Конфигуратор, а совместное использование ИИ с ним трудно совместимо. Решим проблему с Конфигуратором — решим проблему с полноценным внедрением и использованием ИИ.
А сейчас, когда в процессе тестирования EDT уже удалось воспользоваться им в разных аспектах нашей работы — становится ясно, что этот инструмент обязательно будет неотъемлемой частью будущей разработки. И значит, сопутствующие с ним проблемы также предстоит решать.
Проблема: ИИ слепой
ИИ вполне себе знает синтаксис 1С и даже может написать красивый код. Но он не знает про ваш справочник «Номенклатура» или «Товары», не знает реквизиты ваших документов и тому подобное. Пытается что‑то «правдоподобно угадать» и как результат — генерирует мёртвый код. Ему нужен ваш контекст!
Решение: MCP (Model Context Protocol) — “USB‑порт” для нейросети. Стандарт, который позволяет ИИ подключиться к вашей конфигурации и «увидеть» её. Сейчас активно тестируем некоторые из них, благо подобные инструменты для 1С начали активно появляться. Будем тестировать их как в отдельных средах так и внутри EDT, посмотрим что понравится больше. О конечных результатах пока говорить рано, и кажется это отдельная тема для новой статьи.
Здесь можно еще отметить отдельный вопрос поддержания актуальности этого контекста, возможность разворачивания его в виде RAG или других индексируемых сущностей. Но и эти моменты здесь уже широко раскрыть не успеем.
Выбор ИИ
Сейчас нам доступно 3 инструмента для работы:
Yandex Code Assist — “Универсальный солдат”
Ассистент Яндекса на базе модели Qwen. Работа строится через Visual Studio, то есть сбоку от EDT, конечно это не плюс. Зато обладает множеством дополнительных настроек (MCP, навыки, плагины и пр.), что может повышать качество работы и результата. Говорит по‑русски — это тоже важно. Без дополнительных знаний в языке 1С еще многое додумывает.
Результат: Код пишет качественно. Учитывает много нюансов. На вопросы отвечает полнее и зависаний практически нет.
Вердикт: Неплох, особенно для отдельных небольших алгоритмов или задач.
1С:Напарник — «Домашний питомец»
Раз есть EDT, значит есть и официальный ИИ‑помощник от 1С, который пока бесплатен. Сразу видно: он знает платформу, код пишет хорошо, а комментарии к нему еще лучше.
Результат: простейший алгоритм пишет быстро и качественно. Даже более сложную задачу, с учетом структуры данных, может сделать. Но не понравилось, что на некоторых сложных вопросах может уйти в бесконечный анализ и зависнуть, как так? А один раз даже умудрился так отредактировать модуль, что сломал его и сам попросил восстановить его из бекапа.
Вердикт: для чего‑то не сложного, разработки с нуля, шаблонов и комментариев — очень даже. Если нужно большее — кажется пока слабоват, но будем пробовать.
Claude Code — “Профессиональный наемник”
Сам по себе Claude Code — мощный агент. Хорошо анализирует конфигурацию и код, удачно предлагает и принимает решения. НО! Стоит больших денег( Непонятна его дальнейшая судьба в РФ и нашей компании в частности. Пока пользуемся им осторожно)
Результат: Код пишет красиво (правда, пока не идеально), с учётом нашей структуры и стандартов. Ещё и объясняет, почему сделал так, а не иначе. С каждым обновлением про 1С знает все больше.
Вердикт: для сложного рефакторинга легаси, тестирования и анализа — кажется лучший. Но дорогой, зараза.
Небольшой ИИ‑батл
Еще в начале работы удалось устроить короткое сравнение между всеми тремя. Задача была сделать одну и ту же, срочную и не сложную задачку. Промт звучал примерно так:
«Нужен пример кода для базы УХ: сначала запросом отобрать документы ВерсияСоглашенияКоммерческийДоговор с Номером ПОДОБНО „%‑%-%“; потом обойти эту выборку и изменить номер на „000071959“ увеличивая на единицу. Документы записывать в режиме загрузка. Добавить комментарии у процедуры и основных действий»
Вот что из этого получилось:
Yandex Code Assist
Написал работоспособную процедуру на 55 строк с обширным комментарием к процедуре.
Комментарии к основным действиям добавил где надо и не надо, визуально они заняли места больше самого кода.
Про режим загрузки ничего не понял и придумал такую конструкцию: «ДокументОбъект.Записать(РежимЗаписиДокумента.Загрузка)»
В конце выдал некие рекомендации, по мне — не особо полезные.
Пример кода
// Процедура выполняет изменение номеров документов "Версия соглашения коммерческий договор". // // Логика работы: // 1. Запросом отбираются документы "ВерсияСоглашенияКоммерческийДоговор", // у которых номер документа содержит подстроку вида "ЧЧЧ-ЧЧЧ-ЧЧЧ" (маска "%-%-%"). // 2. Выборка обходится в цикле, и каждому документу присваивается новый номер, // начиная с базового значения "000071959" и увеличиваясь на единицу // для каждого следующего документа. // 3. Документы записываются в режиме записи "Обмен данными.Загрузка", // что позволяет изменять номера без срабатывания проверок уникальности номера. // // ВАЖНО: процедура модифицирует данные в базе. Перед выполнением убедитесь в наличии // резервной копии базы данных и в корректности выбранных документов. Процедура ИзменитьНомераДоговоров() Экспорт // Формируем и выполняем запрос для отбора документов с номером, содержащим дефисы. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВерсияСоглашенияКоммерческийДоговор.Ссылка КАК Ссылка |ИЗ | Документ.ВерсияСоглашенияКоммерческийДоговор КАК ВерсияСоглашенияКоммерческийДоговор |ГДЕ | ВерсияСоглашенияКоммерческийДоговор.Номер ПОДОБНО ""%-%-%"""; // Условие "%-%-%" отбирает документы, у которых номер состоит минимум // из трёх частей, разделённых дефисом (например, "123-456-789"). Выборка = Запрос.Выполнить().Выбрать(); // Начальное значение номера, с которого начинается перенумерация. БазовыйНомер = "000071959"; // Обходим отобранные документы в цикле. Пока Выборка.Следующий() Цикл // Открываем объект документа для изменения его номера. ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект(); // Присваиваем документу новый номер. ДокументОбъект.Номер = БазовыйНомер; // Записываем документ в режиме "Обмен данными.Загрузка". // Такой режим записи позволяет изменить номер документа в обход // стандартных проверок уникальности и правил нумерации. ДокументОбъект.Записать(РежимЗаписиДокумента.Загрузка); // Увеличиваем базовый номер на единицу для следующего документа. // Число в строке прибавляется как целочисленное значение, // результат преобразуется обратно в строку. БазовыйНомер = Строка(Число(БазовыйНомер) + 1); КонецЦикла; КонецПроцедуры
1С‑Напарник
Написал работоспособную процедуру на 57 строк с адекватными комментариями к процедуре и основным действиям.
Оказался единственным, кто еще при рассуждении понял про «ДокументОбъект.ОбменДанными.Загрузка = Истина» и указал это в коде.
Выдал добротные и полезные рекомендации для запуска.
Пример кода
// Перенумерация документов "Версия соглашения (коммерческий договор)". // Для всех документов с номером вида "<x>-<y>-<z>" устанавливает // последовательные числовые номера, начиная с "000071959". // Процедура ПеренумероватьВерсииСоглашений() Экспорт // Начальное значение новой нумерации. НачальныйНомер = 71959; // Шаблон отбора: документы, в номере которых присутствуют дефисы. ШаблонНомера = "%-%-%"; // Формируем запрос для отбора документов со "старыми" номерами. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВерсияСоглашенияКоммерческийДоговор.Ссылка КАК Ссылка |ИЗ | Документ.ВерсияСоглашенияКоммерческийДоговор КАК ВерсияСоглашенияКоммерческийДоговор |ГДЕ | ВерсияСоглашенияКоммерческийДоговор.Номер ПОДОБНО &ШаблонНомера |УПОРЯДОЧИТЬ ПО | ВерсияСоглашенияКоммерческийДоговор.Дата, | ВерсияСоглашенияКоммерческийДоговор.Ссылка"; Запрос.УстановитьПараметр("ШаблонНомера", ШаблонНомера); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); // Счетчик новых номеров - увеличивается на единицу для каждого документа. ТекущийНомер = НачальныйНомер; Пока Выборка.Следующий() Цикл // Получаем объект документа для изменения реквизита Номер. ДокументОбъект = Выборка.Ссылка.ПолучитьОбъект(); Если ДокументОбъект = Неопределено Тогда // Документ мог быть удален другой транзакцией - пропускаем. Продолжить; КонецЕсли; // Присваиваем номер в формате 9-значного числа с лидирующими нулями. ДокументОбъект.Номер = Формат(ТекущийНомер, "ЧЦ=9; ЧВН=; ЧГ=0"); // Записываем документ в режиме загрузки: // - РежимЗаписиДокумента.Запись - простая запись без проведения; // - ОбменДанными.Загрузка = Истина - отключает проверки заполнения // и подписки на события, выполняемые при интерактивной записи. ДокументОбъект.ОбменДанными.Загрузка = Истина; ДокументОбъект.Записать(РежимЗаписиДокумента.Запись); ТекущийНомер = ТекущийНомер + 1; КонецЦикла; КонецПроцедуры
Claude Code
Написал аж две процедуры на 128 строк: основную + вспомогательную для ее клиентского вызова. Показалось, что кода даже слишком много для такой задачи.
Даже использовал блоки Попытка‑Исключение, а также Сообщить для вывода информации пользователю.
Все комментарии разумных размеров.
Тоже ничего не понял про загрузку и откуда‑то придумал метод «УстановитьРежимЗагрузкиДанных(Истина)».
Пример кода
// Процедура для обновления номеров документов ВерсияСоглашенияКоммерческийДоговор // Находит документы с номерами по шаблону "%-%-%", изменяет их номера начиная с "000071959" // и записывает в режиме загрузки для повышения производительности Процедура ОбновитьНомераВерсийСоглашений() Экспорт // Начальный номер для присвоения документам НачальныйНомер = 71959; ТекущийНомер = НачальныйНомер; // Создаем запрос для отбора документов с номерами по шаблону "%-%-%" Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВерсияСоглашенияКоммерческийДоговор.Ссылка КАК Ссылка, | ВерсияСоглашенияКоммерческийДоговор.Номер КАК СтарыйНомер, | ВерсияСоглашенияКоммерческийДоговор.Дата КАК Дата |ИЗ | Документ.ВерсияСоглашенияКоммерческийДоговор КАК ВерсияСоглашенияКоммерческийДоговор |ГДЕ | ВерсияСоглашенияКоммерческийДоговор.Номер ПОДОБНО ""%-%-%"" |УПОРЯДОЧИТЬ ПО | ВерсияСоглашенияКоммерческийДоговор.Дата, | ВерсияСоглашенияКоммерческийДоговор.Номер"; // Выполняем запрос и получаем результат РезультатЗапроса = Запрос.Выполнить(); // Проверяем, есть ли найденные документы Если РезультатЗапроса.Пустой() Тогда Сообщить("Документы с номерами по шаблону '%-%-%' не найдены."); Возврат; КонецЕсли; // Получаем выборку документов для обработки ВыборкаДокументов = РезультатЗапроса.Выбрать(); // Счетчики для отчета о выполнении КоличествоОбработанных = 0; КоличествоОшибок = 0; // Включаем режим загрузки данных для повышения производительности УстановитьРежимЗагрузкиДанных(Истина); Попытка // Обходим все найденные документы Пока ВыборкаДокументов.Следующий() Цикл Попытка // Получаем объект документа для изменения ДокументОбъект = ВыборкаДокументов.Ссылка.ПолучитьОбъект(); // Сохраняем старый номер для логирования СтарыйНомер = ДокументОбъект.Номер; // Формируем новый номер с ведущими нулями (9 знаков) НовыйНомер = Формат(ТекущийНомер, "ЧЦ=9; ЧВН="); // Присваиваем новый номер документу ДокументОбъект.Номер = НовыйНомер; // Записываем документ (в режиме загрузки) ДокументОбъект.Записать(); // Выводим информацию о изменении Сообщить(СтрШаблон("Документ %1: номер изменен с '%2' на '%3'", ВыборкаДокументов.Ссылка, СтарыйНомер, НовыйНомер)); // Увеличиваем номер для следующего документа ТекущийНомер = ТекущийНомер + 1; КоличествоОбработанных = КоличествоОбработанных + 1; Исключение // Обрабатываем ошибки записи отдельных документов КоличествоОшибок = КоличествоОшибок + 1; ТекстОшибки = ОписаниеОшибки(); Сообщить(СтрШаблон("Ошибка при обработке документа %1: %2", ВыборкаДокументов.Ссылка, ТекстОшибки), СтатусСообщения.Важное); // Продолжаем обработку следующих документов Продолжить; КонецПопытки; КонецЦикла; Исключение // Обрабатываем критические ошибки ТекстОшибки = ОписаниеОшибки(); Сообщить("Критическая ошибка при выполнении процедуры: " + ТекстОшибки, СтатусСообщения.ОченьВажное); // Обязательно отключаем режим загрузки данных УстановитьРежимЗагрузкиДанных(Ложь); КонецПопытки; // Выводим итоговую информацию о выполнении процедуры Сообщить(""); Сообщить("=== РЕЗУЛЬТАТЫ ВЫПОЛНЕНИЯ ==="); Сообщить(СтрШаблон("Обработано документов: %1", КоличествоОбработанных)); Сообщить(СтрШаблон("Ошибок при обработке: %1", КоличествоОшибок)); Сообщить(СтрШаблон("Следующий доступный номер: %1", Формат(ТекущийНомер, "ЧЦ=9; ЧВН="))); КонецПроцедуры // Вспомогательная процедура для запуска обновления с подтверждением // Рекомендуется использовать эту процедуру для безопасного выполнения Процедура ЗапуститьОбновлениеНомеровСПодтверждением() Экспорт // Запрашиваем подтверждение у пользователя Ответ = Вопрос("Выполнить обновление номеров документов ВерсияСоглашенияКоммерческийДоговор?" + Символы.ПС + "Будут изменены все документы с номерами вида '%-%-%'" + Символы.ПС + "Операция необратима!", РежимДиалогаВопрос.ДаНет, 0, КодВозвратаДиалога.Нет); Если Ответ = КодВозвратаДиалога.Да Тогда // Выполняем обновление только после подтверждения ОбновитьНомераВерсийСоглашений(); Иначе Сообщить("Операция отменена пользователем."); КонецЕсли; КонецПроцедуры

Итоговый вывод: пока мы еще в поисках нашего идеального инструмента. Каждый чем‑то хорош и удобен. Отдельные инструменты еще требуют донастройки. Пользуемся всеми тремя для наработки опыта.
Эпилог. Есть только путь
Мы только в самом начале нашего пути. EDT в процессе освоения: разработчики привыкают к новым процессам работы, а некоторые коллеги даже еще не перешли. Но выбор сделан и свернуть назад не получится.
Теперь у нас впереди освоение: полноценного Git‑инструментария, для проверки кода и развертывания приложений; полные автотесты с выявлением багов до релиза; ИИ, который не заменяет программиста, но реально помогает и ускоряет его работу.
«Идти вперёд — значит прорываться через стены, которые кажутся непреодолимыми, с верой, что за ними — свет» — Нельсон Мандела
«Есть только путь» — не просто громкая фраза, а правда. Да, путь труден. Да, он требует денег на железо, времени на настройку и смелости, чтобы сказать коллегам: «Мы это сделаем. Идёте с нами?». Но каждый пройденный километр этого тернистого пути даёт нам новый опыт. Опыт, который закаляет команду. Опыт, который подготовит нас к следующим вызовам. А они обязательно будут.
Мы движемся вперед. Медленно, с матами и перезагрузками. Но движемся — и это радует!

