Нашаманил в процессе обновления релиза КА 2.5

24.08.26

База данных - Обновление 1С

Я при обновлениях ноу хау никогда не использовал, всегда действовал вручную несколько часов, сливая новый код вендора со старыми изменениями. Почитал тут статью "Использование нейросети для обновления расширений 1С: GPT, Git и анализ эффективности на 33 реальных проектах", ну и времени всегда мало, приходится искать варианты, как сделать, чтобы его было достаточно. Мое мнение в том, что методы 1С по тысячам строк, которые приходится лопатить, сначала дорабатывать а потом обновлять, плохо влияют на здоровье, интерес к различным средствам автоматизации процесса обновлений у меня очень высок. Делюсь своими потугами после первого применения. Вывод - ИИ оказался полезным. Простые случаи выгоднее обновлять ручным слиянием традиционно так как ИИ как такси, на обновлениях жрет очень много контекста. Для сложных, которые жрут не меньше, но убивают больше нервов, нашаманил скилл. Описываю процесс, подробно обо всем понемногу. Возможно, у Вас получится лучше, я торопился.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Артефакты, рожденные обновлением
.7z 43,62Kb
0 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

Как я обновлял расширения конфигурации при изменении релиза 1С:КА с 2.5.22.186 на 2.5.27.75 с помощью ИИ


Предисловие

Я — разработчик 1С, сопровождающий сильно доработанную конфигурацию «Комплексная автоматизация» редакции 2.5. Передо мной стояла задача: обновить релиз с 2.5.22.186 на 2.5.27.75, сохранив все пользовательские доработки. Конфигурация содержит основное расширение с сотнями перехваченных методов и форм.

До начала работы я зафиксировал правила обновления в файле upd.md, описывающем роли трёх версий (BASE, THEIRS, OURS) и алгоритмы слияния. Затем начал методично, модуль за модулем, проходить все изменившиеся методы.

В этой статье я расскажу, что получилось, что нет, и какую роль сыграл ИИ (Claude через opencode) на каждом этапе.


Инфраструктура

  • Платформа: 1С:Предприятие 8.3.27.1719

  • Конфигурация: Комплексная автоматизация 2.5

  • Старый релиз: 2.5.22.186

  • Новый релиз: 2.5.27.75

  • Расширение: Основное расширение, обмен с БП, дополнительные расширения.

  • Инструменты: CfeUpdater.epf 2.1.1.0KDiff3Gitopencode с Claude

Структура рабочего каталога:

text

I:\sv_ka_work\upd27\
  old-configuration\   # типовая до обновления (BASE)
  new-configuration\   # типовая после обновления (THEIRS)
  extension\           # расширение с доработками (OURS)
  after_upd\           # загруженное расширение для правки
  results\             # результаты слияния
  history.md           # журнал всех действий
  upd.md               # правила и алгоритмы

Ключевое правило: тело метода расширения с директивой &ИзменениеИКонтроль должно посимвольно совпадать с телом типового метода из NEW-конфигурации. Отличия допустимы только внутри блоков #Вставка / #КонецВставки и #Удаление / #КонецУдаления. Для проверки использовался скрипт merge-check.ps1.


Статистика проекта

  • Всего сессий слияния: 69

  • Уникальных модулей: 37

  • Явных «0 diffs» (perfect match): 2

  • Модулей с ошибками после слияния: 13

  • Сессий исправлений: 17

  • Полных пересборок с нуля: 1

  • Runtime-ошибок, обнаруженных интерактивно: 7

  • Попыток решения проблемы ПечатьЗаданияНаОтборРазмещениеТоваров: 5 подходов

  • Дней активной работы: 2 (21–22 августа 2026)


Анализ: что получалось, что нет


Что ИИ делал отлично

1. Слияние простых перехватчиков (~60% модулей).

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

Типовой сценарий: найти три файла (BASE, THEIRS, OURS), сопоставить метод, перенести #Вставка-блоки в NEW-тело, проверить merge-check.ps1. Для большинства модулей это занимало 2–3 итерации и давало чистый результат.

Пример: модуль ПулКодовМаркировкиСУЗ — метод СРС_ЗаписатьДанныеКодаМаркировки обновлён с новыми полями ПолныйКодМаркировки и ТоварнаяГруппа без единой ошибки.


2. Обнаружение переименований.

При загрузке расширения в конфигуратор платформа выдаёт ошибки на несовпадениях. ИИ анализировал NEW-конфигурацию и находил новые имена:

  • РаспределениеЗапасов.Состояние → СостояниеЗапаса (8 вхождений)

  • РаспределениеЗапасовСостояния.ОстатокНаСкладе → СостоянияЗапаса.ВНаличии

  • ОсобенностиУчетаНоменклатуры.Антисептики → УдалитьАнтисептики (и ещё 5 аналогичных переименований enum-значений)


3. Глобальные замены.

Команда «замени во всех модулях X на Y» выполнялась быстро и без ошибок. Например, замена ОсобенностиУчетаНоменклатуры.* → Удалить* в 6+ модулях.


4. Посекционная сборка сложных методов.

Для метода СРС_ПараметрыФормыУказанияСерий (НоменклатураСервер) — 1752 строки, 16 блоков #Вставка — ИИ разбил NEW-тело на секции по якорным строкам и собрал результат посекционно. Итог: 0 diffs с NEW, идеальное совпадение.


Что ИИ делал с трудом

1. Трёхстороннее слияние без BASE.

Модуль УправлениеОтгрузкой не имел полного BASE для трёхстороннего сравнения. ИИ пытался восстанавливать логику по двум версиям — с ошибками, потребовалась ручная корректировка.


2. Специфичные знания платформы 1С.

ИИ не всегда знал ограничения синтаксиса:

  • СГРУППИРОВАТЬ ПО с ПОМЕСТИТЬ в определённых контекстах вызывает ошибку

  • ПЕРВЫЕ 1 работает нестабильно с временными таблицами

  • #Удаление + #Вставка нельзя разбивать — иначе vendor-код между блоками не совпадает с NEW

Эти нюансы выяснялись экспериментально, ценой лишних итераций.


3. PowerShell.

Несколько раз команды падали из-за того, что PowerShell резолвил .Replace() во внешнюю утилиту replace.exe вместо метода .NET. Также были ошибки с кодировкой и экранированием спецсимволов.


КЛЮЧЕВОЕ ПРАВИЛО: #Удаление НЕЛЬЗЯ РАЗБИВАТЬ

Это правило оказалось самым критичным и неочевидным из всех, что были выявлены в ходе проекта.


В чём проблема

В расширении блок #Удаление помечает vendor-код, который должен быть удалён из NEW при наложении расширения. Платформа сравнивает vendor-код расширения (вне #Вставка и #Удаление) с NEW, из которого предварительно вычтено содержимое #Удаление.

Если в расширении был единый блок #Вставка / #Удаление, его нельзя разбивать при адаптации под новую конфигурацию. В противном случае появляется vendor-код между блоками, который не совпадает с NEW после вычитания.


Пример ошибки

В расширении (правильно):

text

#Вставка
    Если ... Тогда ... Иначе vendor_call КонецЕсли;
#КонецВставки
#Удаление
    vendor_call   # удаляет дубликат из NEW
#КонецУдаления

Ошибочная адаптация (разбиение на два #Вставка):

text

#Вставка
    Если ... Тогда ... Иначе
#КонецВставки
vendor_call         # vendor-код между блоками — ПЛАТФОРМА НЕ ПРИМЕТ!
#Вставка
    КонецЕсли;
#КонецВставки
#Удаление
    vendor_call
#КонецУдаления

При разбиении vendor-код между #КонецВставки и #Вставка остаётся, а #Удаление вычитает его из NEW — получается расхождение: расширение имеет vendor-код, а NEW после вычитания — пусто.


Правильная адаптация

Скопировать EXT-структуру один-в-один (один #Вставка → один #Удаление), заменив OLD vendor-код внутри #Вставка и внутри #Удаление на NEW-формат — включая точное совпадение отступов (табуляция должна быть как в NEW, а не как в EXT).


Как проверять

Обычный merge-check.ps1 (удаление обоих #Вставка и #Удаление) даёт 0 diffs даже при ошибочной структуре. Дополнительно обязательно проверять:

  1. Содержимое #Удаление посимвольно совпадает с соответствующим vendor-кодом NEW

  2. Между #КонецВставки и #Удаление того же логического блока нет vendor-кода (должны идти подряд)

  3. После #КонецУдаления vendor-код продолжается со следующей строки NEW (без дубликатов и пропусков)

Итог: Это правило было выведено экспериментально на модуле СчетФактура и сэкономило несколько часов отладки runtime-ошибок в других модулях.


Что не получалось совсем

1. Экспорт встроенных обработок в EPF.

Команда ibcmd недоступна в этой версии платформы. Параметр /DumpExternalDataProcessorOrReport не экспортирует встроенные обработки. LoadExternalDataProcessorOrReportFromFiles ожидает формат <ExternalDataProcessor>, а XML-дамп даёт <MetaDataObject><DataProcessor>. Приходилось экспортировать EPF вручную из конфигуратора.


2. Первая попытка нормализации дубликатов в ПечатьЗаданияНаОтборРазмещениеТоваров.

4 подхода подряд не сработали — и только на 5-м был найден верный.


Кейс: ПечатьЗаданияНаОтборРазмещениеТоваров

Самый сложный модуль проекта. Ниже — хронология всех попыток.


Контекст

Печатная форма «Задание на сбор» из РасходногоОрдераНаТовары показывает список товаров с ячейками отбора. В новой версии запрос начал возвращать 4 строки вместо 1 для каждого товара — потому что один товар размещён в 4 ячейках, а LEFT JOIN по Номенклатуре умножает строки.


Попытка 1: МИНИМУМ + СГРУППИРОВАТЬ ПО

В подзапросах ЯчейкиОстаток и ЯчейкиИнформация (4 варианта) добавлены агрегатные функции МИНИМУМ() и СГРУППИРОВАТЬ ПО Номенклатура.

Результат: ОШИБКА — синтаксическая ошибка платформы: СГРУППИРОВАТЬ несовместимо с ЛЕВОЕ СОЕДИНЕНИЕ + ПОМЕСТИТЬ в данном контексте.


Попытка 2: ПЕРВЫЕ 1 + УПОРЯДОЧИТЬ ПО

Группировка откачена, вместо неё в каждый из подзапросов добавлены ПЕРВЫЕ 1 и УПОРЯДОЧИТЬ ПО Ячейка.Наименование.

Результат: ОШИБКА — ПЕРВЫЕ 1 без СГРУППИРОВАТЬ ПО ограничивает ВЕСЬ запрос одной строкой, а не одной строкой на товар. Если в заказе 5 товаров, ячейка будет получена только для первого.

Дополнительная ошибка: PowerShell-скрипт замены создал двойной префикс. Потребовалась дополнительная правка.

Ещё ошибка: скрипт отката GROUP BY использовал паттерн, который совпал во ВСЕХ подзапросах пакета. Все GROUP BY пришлось удалять и добавлять заново точечно.


Попытка 3: РАЗЛИЧНЫЕ в финальном SELECT

Все ПЕРВЫЕ убраны, вместо них в 4 финальных SELECT добавлено РАЗЛИЧНЫЕ.

Результат: НЕ ПОМОГАЕТ — РАЗЛИЧНЫЕ не помогает, потому что строки отличаются значением поля Ячейка — для одного товара в 4 разных ячейках возвращаются 4 разные строки, и РАЗЛИЧНЫЕ считает их уникальными.


Попытка 4: убрать Ячейка из Свернуть

Поля Ячейка и ЯчейкаСправочно убраны из метода Свернуть(), а код заполнения Размещения заменён на пустую строку.

Результат: ЧАСТИЧНО — 1 строка на товар, правильные количества. Но информация о ячейке потеряна — в печатной форме колонка «Размещение» пустая. Неприемлемо для пользователей.


Попытка 5 (финальная): нормализация в коде ДО Свернуть

Архитектура решения:

  1. Запросы пакета НЕ трогаем — они остаются как в типовой конфигурации

  2. После лЗапрос.ВыполнитьПакет() получаем ТаблицаЗначений с размноженными строками

  3. Первый проход: для каждого ключа (Номенклатура + Характеристика) находим лучшую ячейку по MAX(Остаток)

  4. Второй проход: всем дублям проставляем одинаковую ячейку; Остаток обнуляем у дублей (оставляем только у первой строки)

  5. После нормализации вызываем Свернуть() с полным набором полей, включая Ячейка и ЯчейкаСправочно

  6. Код заполнения Размещение восстановлен из лВыборка.Ячейка

Результат: УСПЕХ — 1 строка на товар, правильный остаток, ячейка сохранена.


Итог по модулю

Подход Итераций Результат
Field renames 1 Успех
МИНИМУМ + ГРУППИРОВАТЬ 2 Ошибка платформы
ПЕРВЫЕ 1 + ORDER BY 3 Неверная логика
РАЗЛИЧНЫЕ 1 Не помогает
Убрать Ячейка из Свернуть 1 Работает, но теряет данные
Нормализация в коде 1 Успех
Всего 9  

Хронология: день 1 (21 августа 2026)

Первый день — потоковая обработка модулей. 21 модуль за одну сессию. Большинство — простые перехватчики, где нужно перенести 1–3 блока #Вставка в NEW-тело.

Ключевые события дня:

  • ЗаказКлиента — дублированное присваивание настройки РазрешитьОтгрузкуСверхЗаказа. Исправлено удалением лишней строки.

  • ВзаиморасчетыСервер — сложный случай: типовой модуль был разделён на 2 (основной + локализация). Пользовательский код потребовал переноса в новую структуру.

  • ПроверкаИПодборПродукцииИС — спецсхема: BASE = старая обработка ИСМП, THEIRS = новая обработка ИС (без МП). Адаптация под новую архитектуру без ВидПродукции.

  • ФормированиеФискальныхЧековКлиент — вызов удалённой клиентской функции из расширения. Исправлено переносом вызова в серверный контекст.

  • ИнтеграцияИСМПУТ — обнаружены буквальные \t в тексте запросов (результат предыдущей автоматической обработки). Исправлено заменой на реальные табуляции.


Хронология: день 2 (22 августа 2026)

Второй день — работа над сложными модулями и исправление ошибок, обнаруженных при загрузке расширения.


Пересборка НоменклатураСервер

Метод СРС_ПараметрыФормыУказанияСерий (1752 строки) перестроен с нуля посекционным подходом. NEW-тело разделено на секции по якорным строкам, между ними вставлены 16 блоков #Вставка из расширения. Итог: 0 diffs с NEW.


СкладыСервер

Метод СРС_ПолучитьОбъектОрдер — NEW-запрос полностью переписан поставщиком. Пользовательские блоки перенесены в новый запрос. 153 строки, 0 diffs.


СчетФактура: ошибка разбиения #Удаление/#Вставка

Критическое правило, выведенное экспериментально: блоки #Вставка и #Удаление нельзя разбивать. Если EXT содержит единый блок:

text

#Вставка
    Если ... Тогда ... Иначе vendor_call КонецЕсли;
#КонецВставки
#Удаление
    vendor_call
#КонецУдаления

— его нельзя разбивать на два #Вставка с vendor-кодом между ними. Платформа сравнивает vendor-код расширения (вне #Вставка) с NEW, из которого вычтено содержимое #Удаление — и при разбиении получается расхождение.


ПечатьЗаданияНаОтборРазмещениеТоваров

Полная хронология — в разделе выше. 9 итераций, 5 подходов.


Артефакты проекта


Правила слияния (upd.md)

Файл на 314 строк, содержащий:

  • Структуру рабочего каталога и роли версий

  • 10 правил слияния (основа — NEW, пользовательские блоки переносятся, сигнатуры из NEW)

  • Правило точного соответствия тела &ИзменениеИКонтроль с NEW (0 diffs)

  • Правило обработки #Удаление — код внутри должен посимвольно совпадать с NEW

  • Правило бэкапа перед изменениями

  • Правило сохранности модуля расширения

  • Инструменты: merge-check.ps1merge_nomenk_v6.ps1

  • Специфику модулей группы 3 (обработки) и ИСМП


Журнал действий (history.md)

Файл на 817 строк с детальным описанием каждой сессии:

  • Дата и название модуля

  • Описание выполненного изменения

  • Перечень изменённых и созданных файлов

  • Результаты статических проверок

  • Ограничения и риски

Всего 69 записей за 2 дня.


Скрипты

  • merge-check.ps1 — Посимвольное сравнение тела метода с NEW (проверка 0 diffs)

  • merge_nomenk_v6.ps1 — Шаблон посекционной сборки метода


Результаты слияния (results/)

38 подкаталогов с результатами для каждого модуля: after_upd и backup_* файлы.


Ключевые выводы

1. Правила важнее интуиции

Файл upd.md с жёсткими правилами (0 diffs, не разбивать #Вставка/#Удаление, бэкап перед каждой правкой) сэкономил десятки часов отладки. Без него многие ошибки проявлялись бы только в runtime.


2. Проверка merge-check.ps1 обязательна

Посимвольное сравнение с NEW после каждой правки — единственный надёжный способ убедиться, что vendor-код не повреждён. 0 diffs ≠ отсутствие ошибок (есть ещё #Удаление), но не-0 diffs = гарантированная ошибка.


3. ИИ полезен, но не заменяет знание платформы

ИИ отлично справляется с рутинными слияниями (60% модулей), поиском переименований, глобальными заменами. Но специфичные ограничения платформы 1С (СГРУППИРОВАТЬ + ПОМЕСТИТЬПЕРВЫЕ 1 в пакетах, структура #Вставка/#Удаление) приходилось выяснять экспериментально.


4. Инфраструктура — половина успеха

Чёткая структура каталогов (old-configurationnew-configurationextensionafter_updresults), скрипты проверки, правила бэкапа — всё это сделало процесс воспроизводимым и позволило быстро откатывать неудачные попытки.


5. Самый сложный модуль — не тот, где много кода

НоменклатураСервер (1752 строки, 16 блоков #Вставка) был пересобран с первой попытки благодаря посекционному подходу. А ПечатьЗаданияНаОтборРазмещениеТоваров с простым запросом потребовал 9 итераций — потому что проблема была не в слиянии, а в логике (дубликаты из-за множественных ячеек).


После завершения всех слияний:

  1. Проверка применимости расширения в конфигураторе

  2. Выгрузка расширения в production


Результаты

Эксперимент показал, что AI-assisted upgrade типовой конфигурации 1С — это не фантастика, а рабочий инструмент уже сегодня. Да, с нюансами. Да, с ограничениями. Но 37 модулей за 2 дня с документированным процессом и воспроизводимыми результатами — это уровень.


Проект выполнен с использованием:

  • 1С:Предприятие 8.3.27.1719

  • Claude (Anthropic) через opencode — для анализа, слияния и генерации кода

  • CfeUpdater.epf 2.1.1.0 — для анализа CFE-расширений

  • PowerShell + Git — для автоматизации и версионирования

  • KDiff3 — для ручного просмотра сложных конфликтов

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

См. также

Рефакторинг и качество кода Обновление 1С Программист 1С 8.3 1С:ERP. Управление холдингом Бесплатно (free)

К нам на проект сложного обновления пришла конфигурация «1С:ERP УХ» с доработанным отчетом, построенным на базе типового «Задолженность поставщикам по срокам». После обновления целевая форма открывалась без учета переданных данных.

05.08.2026    860    1c-izh    4    

4

Рефакторинг и качество кода Обновление 1С Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)

На проекте сложного обновления 1С:ERP 2.4.14.181 до версии 2.5.22.106 нам было нужно уложить обновление в технологическое окно 48 часов (выходные). Исходный замер, с учетом промежуточных релизов 2.5.8.443, 2.5.12.270, 2.5.17.234, 2.5.22.106, показал требуемое время в 659 часов…

07.07.2026    5351    1c-izh    20    

21

Рефакторинг и качество кода Обновление 1С Программист 1С 8.3 Бесплатно (free)

Обновление ролей в расширении 1С отличается от аналогичного процесса в основной конфигурации. Ситуация осложняется, когда доработки вносятся не в «обычное», а в поставляемое расширение.

26.06.2026    2333    1c-izh    3    

5

Обновление 1С Программист 1С 8.3 Россия Бесплатно (free)

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

25.06.2026    1684    148    akeeela    8    

18

Нейросети Обновление 1С Программист 1С:Предприятие 8 1С:Комплексная автоматизация 2.х Россия Бесплатно (free)

Делюсь практикой переноса доработок при обновлении 1С:КА с 2.5.22 на 2.5.27 с помощью Claude, подключённого к конфигурации в EDT через MCP. Что у ИИ получилось хорошо, где он бессилен, что он осознанно отказался переносить — и какой главный вывод я сделал для следующего раза.

18.06.2026    3470    Angoleiro    2    

6

Обновление 1С Программист Россия Бесплатно (free)

Релиз 1С часто превращается в ночной аврал: задачи собираются из переписок, внешние обработки забывают проверить, пользователи тестируют “как получится”, а после обновления команда тушит пожары. Разбираем минимальный релизный процесс для 1С-команды: состав релиза, роли, чек-листы, smoke-проверки, коммуникацию с пользователями и разбор ошибок после выпуска.

10.06.2026    1923    NikolayMaerov    0    

2

Нейросети Обновление 1С Бесплатно (free)

Когда доработанную 1С не обновляли годами, начинать приходится не с переноса кода, а с разбора того, что вообще накопилось в базе. Там могут быть десятки обработок, расширения, правки типовых объектов, а документации либо нет, либо она давно не актуальна. На примере реального обновления разбираем, как кодовые агенты, MCP-серверы и языковые модели помогают навести порядок в доработках, собрать план миграции, понять, где при переносе будут проблемы, и автоматизировать часть исправлений.

05.06.2026    7866    wonderboy    6    

29

Обновление 1С Обмен с ГосИС Программист 1С 8.3 1С:Управление торговлей 10 Абонемент ($m)

ВАЖНО! Обновление предназначено для технических специалистов! Поддержка формата обмена V2 в локальном модуле ЧЗ. Поддержка формата обмена V2 в модуле ПиоТ. Поддержка многих видов маркируемой продукции.

10 стартмани

04.06.2026    3448    60    andrew.ab    149    

6
Для отправки сообщения требуется регистрация/авторизация