Генератор расширений 1С: Умный Diff-перенос кода без мусора и ручной работы

Устали вручную оборачивать измененный код в `#Вставка` / `#Удаление`? Бесит мусор из пустых строк и кривое сравнение стандартными средствами?
Представляю инструмент, который автоматизирует самую рутинную задачу при доработке конфигураций на расширениях — перенос изменений из модулей. Больше никаких ошибок ручного копирования, забытых префиксов и визуального мусора в коде. Просто вставьте оригинал и измененный код — получите готовый текст для расширения!
Кому и зачем это нужно?
Инструмент создан для разработчиков, которые:
- Переносят доработки из конфигураций-кастомов в расширения.
- Обновляют свои расширения после изменения типового кода.
- Хотят получить чистый, читаемый код расширений без лишнего шума.
- Ценят свое время и не хотят тратить часы на механическое расставление директив `#Удаление` и `#Вставка`.
Главные фишки обработки
1. Алгоритм Patience Diff вместо топорного сравнения
Забудьте о "рваном" сравнении строк. В основе лежит алгоритм Patience Diff (тот же, что использует Git). Он находит уникальные якоря (неповторяющиеся строки) и строит по ним логическую структуру изменений. Результат — осмысленные блоки вставок и удалений, а не хаотичные куски кода.
2. Умная работа с директивами и пустыми строками
Стандартные средства сравнения часто засовывают пустые строки в `#Удаление` или `#Вставка`. Это визуальный мусор! Обработка:
Не удаляет пустые строки (они не несут смысла в `#Удаление`, засоряя код).
Вытаскивает пустые строки за пределы директив, сохраняя "вентиляцию" и отступы в теле процедуры такими, как вы их задумали.
3. Интеллектуальная фильтрация закомментированного кода
Часто при доработках старый код не удаляют, а комментируют `//`. Обработка распознает это! Если строка в `#Вставке` — это просто закомментированная строка из `#Удаления`, инструмент не будет плодить бессмысленные блоки, он элегантно обработает такую ситуацию.
4. Автоматическое навешивание префиксов
Забыли добавить префикс `Расш1_` к новому методу? Теперь это не ваша проблема. Инструмент автоматически:
Добавляет префикс ко всем новым процедурам и функциям.
Добавляет префикс в сигнатуры измененных методов (для `&ИзменениеИКонтроль`).
5. Корректная работа с многострочными сигнатурами
Парсер умеет читать процедуры и функции, параметры которых разбиты на несколько строк. Он правильно определит шапку, тело и расставит директивы именно там, где нужно.
Как это работает?
Логика генерации проста и безотказна:
1. Метод удален? → Генерируется метод `&Вместо` с пустым телом и префиксом.
2. Метод изменен? → Генерируется метод `&ИзменениеИКонтроль`, внутри которого оригинальный код оборачивается в `#Удаление`, а ваш новый — в `#Вставка`.
3. Метод добавлен? → Генерируется полная копия метода с автоматическим добавлением префикса в имя.
Пример использования
1. Вставляете текст исходного (типового) модуля.
2. Вставляете текст измененного (вашего) модуля.
3. Указываете префикс расширения (по умолчанию `Расш1_`).
4. Жмете одну кнопку.
5. Копируете готовый, красивый код прямо в расширение конфигуратора!
Поставщик
#Область ПрограммныйИнтерфейс
Процедура ПодготовитьДанныеДляПечати(ПараметрыПечати) Экспорт
ПараметрыПечати.ДатаНачала = НачалоМесяца(ТекущаяДата());
ПараметрыПечати.ДатаОкончания = КонецМесяца(ТекущаяДата());
ПараметрыПечати.Организация = ПолучитьОрганизациюПоУмолчанию();
ПараметрыПечати.Ответственный = ПолучитьТекущегоПользователя();
КонецПроцедуры
Функция ПолучитьСуммуДокумента(ДокументСсылка) Экспорт
Сумма = ДокументСсылка.СуммаДокумента;
Возврат Сумма;
КонецФункции
Процедура УдалитьСтарыеДанные() Экспорт
УдалитьВременныеФайлы();
ОчиститьКэшПользователя();
КонецПроцедуры
#КонецОбласти
Измененный код
#Область ПрограммныйИнтерфейс
Процедура ПодготовитьДанныеДляПечати(ПараметрыПечати) Экспорт
ПараметрыПечати.ДатаНачала = НачалоМесяца(ТекущаяДата());
//ПараметрыПечати.ДатаОкончания = КонецМесяца(ТекущаяДата()); Убрали конец месяца
ПараметрыПечати.ДатаОкончания = КонецГода(ТекущаяДата()); // Теперь до конца года
ПараметрыПечати.Организация = ПолучитьОрганизациюПоУмолчанию();
ПараметрыПечати.Ответственный = ПолучитьТекущегоПользователя();
ПараметрыПечати.Подразделение = ПолучитьТекущееПодразделение(); // Добавили строку
КонецПроцедуры
Функция ПолучитьСуммуДокумента(ДокументСсылка) Экспорт
Сумма = ДокументСсылка.СуммаДокумента;
// Добавили вентиляцию и новый расчет
Сумма = Сумма * 1.2; // НДС
Возврат Сумма;
КонецФункции
// Процедуру УдалитьСтарыеДанные() полностью удалили
Процедура НоваяПроцедураДляРасширения() Экспорт
Сообщить("Привет из расширения!");
КонецПроцедуры
#КонецОбласти
Результат обработки
&Вместо("УдалитьСтарыеДанные")
Процедура Расш1_УдалитьСтарыеДанные()
// Метод удален в расширении
КонецПроцедуры
&ИзменениеИКонтроль("ПолучитьСуммуДокумента")
Функция Расш1_ПолучитьСуммуДокумента(ДокументСсылка) Экспорт
Сумма = ДокументСсылка.СуммаДокумента;
#Вставка
// Добавили вентиляцию и новый расчет
Сумма = Сумма * 1.2; // НДС
#КонецВставки
Возврат Сумма;
КонецФункции
&ИзменениеИКонтроль("ПодготовитьДанныеДляПечати")
Процедура Расш1_ПодготовитьДанныеДляПечати(ПараметрыПечати) Экспорт
ПараметрыПечати.ДатаНачала = НачалоМесяца(ТекущаяДата());
#Удаление
ПараметрыПечати.ДатаОкончания = КонецМесяца(ТекущаяДата());
#КонецУдаления
#Вставка
ПараметрыПечати.ДатаОкончания = КонецГода(ТекущаяДата()); // Теперь до конца года
#КонецВставки
ПараметрыПечати.Организация = ПолучитьОрганизациюПоУмолчанию();
ПараметрыПечати.Ответственный = ПолучитьТекущегоПользователя();
#Вставка
ПараметрыПечати.Подразделение = ПолучитьТекущееПодразделение(); // Добавили строку
#КонецВставки
КонецПроцедуры
Процедура Расш1_НоваяПроцедураДляРасширения() Экспорт
Сообщить("Привет из расширения!");
КонецПроцедуры
Экономия
Перенос модуля на 1000 строк вручную занимает от 30 минут до часа нервной работы. С этой обработкой — 10 секунд. Инструмент окупает себя после первого же переноса, избавляя вас от выгорания при монотонной раскраске кода.
Также будут полезны другие инструменты сравнения:
1 Детальное сравнение табличных документов с визуальной подсветкой и разбором по ячейкам
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.12.218
- Управление торговлей, редакция 11, релизы 11.5.27.45
Вступайте в нашу телеграмм-группу Инфостарт