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

Генератор расширений 1С: Умный Diff-перенос кода без мусора и ручной работы
🎯 Как быстро перенести изменения из основной конфигурации 1С в расширение?
Стандартное сравнение и объединение файлов cf и cfe в 1С не позволяет автоматически генерировать чистый код расширения. Инструмент автоматически выполняет diff и merge модулей, выявляет измененные участки кода основной конфигурации и генерирует готовый текст модуля для расширения с использованием правильных директив (#Вставка, #Удаление, &ИзменениеИКонтроль). В основе лежит точный алгоритм Patience Diff, отсекающий ложные срабатывания и визуальный мусор.
Кому и зачем это нужно? (Сценарии использования)
Инструмент создан для разработчиков 1С:Предприятие 8.3, которые сталкиваются со следующими проблемами:
- Перевод кастомной конфигурации на поддержку: Полный вынос старых доработок из модулей объектов, модулей менеджеров и модулей форм в расширения для упрощения будущих обновлений типовой конфигурации.
- Сравнение изменений (Diff): Анализ доработанного старого кода конфигурации относительно чистого релиза поставщика с фокусом только на измененных строках.
- Чистый Merge без мусора: Автоматическая сборка результирующего модуля расширения без ручного оборачивания кода тегами
#Вставкаи#Удаление. - Исключение ложных срабатываний: Стандартный движок сравнения 1С часто сопоставляет сдвиги табуляции, пробелы и пустые строки некорректно. Алгоритм Patience Diff решает эту проблему, опираясь на уникальные якоря.
Главные фишки обработки
1. Алгоритм Patience Diff вместо топорного сравнения
Забудьте о "рваном" сравнении строк. В основе лежит алгоритм Patience Diff (тот же, что использует Git при разрешении конфликтов слияния). Он находит уникальные якоря (неповторяющиеся строки) и строит по ним логическую структуру изменений. Результат — осмысленные блоки вставок и удалений, а не хаотичные куски кода.
2. Умная работа с директивами и пустыми строками
Стандартные средства сравнения часто засовывают пустые строки в #Удаление или #Вставка. Это визуальный мусор! Обработка:
- Не удаляет пустые строки (они не несут смысла в
#Удаление, засоряя код расширения). - Вытаскивает пустые строки за пределы директив, сохраняя "вентиляцию" и отступы в теле процедуры такими, как вы их задумали.
3. Интеллектуальная фильтрация закомментированного кода
Часто при доработках старый код не удаляют, а комментируют //. Обработка распознает это! Если строка в #Вставке — это просто закомментированная строка из #Удаления, инструмент не будет плодить бессмысленные блоки, он элегантно обработает такую ситуацию.
4. Автоматическое навешивание префиксов
Забыли добавить префикс Расш1_ к новому методу? Теперь это не ваша проблема. Инструмент автоматически:
- Добавляет префикс ко всем новым процедурам и функциям.
- Добавляет префикс в сигнатуры измененных методов (для аннотации
&ИзменениеИКонтроль).
5. Корректная работа с многострочными сигнатурами
Парсер умеет читать процедуры и функции BSL, параметры которых разбиты на несколько строк. Он правильно определит шапку, тело и расставит директивы именно там, где нужно.
Логика генерации кода
Алгоритм прост и безотказен:
- Метод удален? → Генерируется метод с аннотацией
&Вместос пустым телом и префиксом. - Метод изменен? → Генерируется метод
&ИзменениеИКонтроль, внутри которого оригинальный код оборачивается в#Удаление, а ваш новый — в#Вставка. - Метод добавлен? → Генерируется полная копия метода с автоматическим добавлением префикса в имя.
Пошаговый сценарий: Как перенести доработки в расширение за 4 шага
Ниже описан процесс извлечения кастомного кода из измененной основной конфигурации 1С и его подготовка к переносу в чистое расширение (cfe) с помощью данной обработки.
Шаг 1. Подготовка исходных текстов модулей
Откройте Конфигуратор 1С. Скопируйте текст типового модуля из чистой конфигурации поставщика (базовый вариант). Скопируйте текст этого же модуля из вашей доработанной основной конфигурации.
Шаг 2. Загрузка данных в обработку
Откройте обработку в режиме «1С:Предприятие». Вставьте скопированный текст модуля поставщика в левое окно («Исходный текст»). Вставьте скопированный текст доработанного модуля в правое окно («Измененный текст»). Укажите префикс расширения (по умолчанию Расш1_).
Шаг 3. Запуск Diff-анализа по алгоритму Patience
Нажмите кнопку сравнения. Встроенный движок сопоставит строки кода. Обработка автоматически отсечет сдвиги табуляции, пробелы и пустые строки, выделив только реальные смысловые изменения (добавленные функции, измененные процедуры, удаленные блоки).
Шаг 4. Генерация готового кода для расширения (Merge)
Обработка выдаст готовый структурированный текст модуля, автоматически обернутый в правильные директивы компиляции. Скопируйте полученный результат одной кнопкой и вставьте его в модуль вашего расширения в Конфигураторе. Процесс ручного переноса и ручной расстановки тегов исключен.
Пример использования (До и После)
Исходный текст поставщика:
#Область ПрограммныйИнтерфейс
Процедура ПодготовитьДанныеДляПечати(ПараметрыПечати) Экспорт
ПараметрыПечати.ДатаНачала = НачалоМесяца(ТекущаяДата());
ПараметрыПечати.ДатаОкончания = КонецМесяца(ТекущаяДата());
ПараметрыПечати.Организация = ПолучитьОрганизациюПоУмолчанию();
ПараметрыПечати.Ответственный = ПолучитьТекущегоПользователя();
КонецПроцедуры
Функция ПолучитьСуммуДокумента(ДокументСсылка) Экспорт
Сумма = ДокументСсылка.СуммаДокумента;
Возврат Сумма;
КонецФункции
Процедура УдалитьСтарыеДанные() Экспорт
УдалитьВременныеФайлы();
ОчиститьКэшПользователя();
КонецПроцедуры
#КонецОбласти
Измененный код
#Область ПрограммныйИнтерфейс
Процедура ПодготовитьДанныеДляПечати(ПараметрыПечати) Экспорт
ПараметрыПечати.ДатаНачала = НачалоМесяца(ТекущаяДата());
//ПараметрыПечати.ДатаОкончания = КонецМесяца(ТекущаяДата()); Убрали конец месяца
ПараметрыПечати.ДатаОкончания = КонецГода(ТекущаяДата()); // Теперь до конца года
ПараметрыПечати.Организация = ПолучитьОрганизациюПоУмолчанию();
ПараметрыПечати.Ответственный = ПолучитьТекущегоПользователя();
ПараметрыПечати.Подразделение = ПолучитьТекущееПодразделение(); // Добавили строку
КонецПроцедуры
Функция ПолучитьСуммуДокумента(ДокументСсылка) Экспорт
Сумма = ДокументСсылка.СуммаДокумента;
// Добавили вентиляцию и новый расчет
Сумма = Сумма * 1.2; // НДС
Возврат Сумма;
КонецФункции
// Процедуру УдалитьСтарыеДанные() полностью удалили
Процедура НоваяПроцедураДляРасширения() Экспорт
Сообщить("Привет из расширения!");
КонецПроцедуры
#КонецОбласти
Результат обработки (Готовый код для расширения):
&Вместо("УдалитьСтарыеДанные")
Процедура Расш1_УдалитьСтарыеДанные()
// Метод удален в расширении
КонецПроцедуры
&ИзменениеИКонтроль("ПолучитьСуммуДокумента")
Функция Расш1_ПолучитьСуммуДокумента(ДокументСсылка) Экспорт
Сумма = ДокументСсылка.СуммаДокумента;
#Вставка
// Добавили вентиляцию и новый расчет
Сумма = Сумма * 1.2; // НДС
#КонецВставки
Возврат Сумма;
КонецФункции
&ИзменениеИКонтроль("ПодготовитьДанныеДляПечати")
Процедура Расш1_ПодготовитьДанныеДляПечати(ПараметрыПечати) Экспорт
ПараметрыПечати.ДатаНачала = НачалоМесяца(ТекущаяДата());
#Удаление
ПараметрыПечати.ДатаОкончания = КонецМесяца(ТекущаяДата());
#КонецУдаления
#Вставка
ПараметрыПечати.ДатаОкончания = КонецГода(ТекущаяДата()); // Теперь до конца года
#КонецВставки
ПараметрыПечати.Организация = ПолучитьОрганизациюПоУмолчанию();
ПараметрыПечати.Ответственный = ПолучитьТекущегоПользователя();
#Вставка
ПараметрыПечати.Подразделение = ПолучитьТекущееПодразделение(); // Добавили строку
#КонецВставки
КонецПроцедуры
Процедура Расш1_НоваяПроцедураДляРасширения() Экспорт
Сообщить("Привет из расширения!");
КонецПроцедуры
Экосистема инструментов: Полный арсенал внедренца и админстратора 1С
Перенос доработок в расширение — это лишь один из этапов внедрения. Чтобы вы могли решать любые задачи разработки, разработки в одном ключе, я создал комплекс взаимосвязанных инструментов. Если вам понравился Генератор кода расширений, обязательно оцените и другие решения:
- Редактор объекта информационной базы — когда нужно не просто заменить ссылку, а вручную, точечно подправить реквизит, обойти блокировки или посмотреть внутренности объекта минуя стандартные формы.
- Менеджер удаления битых ссылок — идеальный партнер к переносу данных! После переноса объектов часто появляются «битые» ссылки (на несуществующие объекты). Этот инструмент найдет и элегантно очистит все хвосты.
- Менеджер удаления дублей - защита от дублей, в источнике при переносе могут быть так же дубли
- Бекап менеджер — золотое правило: перед любым переноса, удаления данных или заменой ссылок делайте бэкап! Этот менеджер автоматизирует создание копий по расписанию или перед опасными операциями, чтобы вы могли откатиться в любой момент.
- Менеджер переноса данных XML&JSON с отбором СКД между разными конфигурациями на управляемых формах + аналитика переноса с редактированием реквизитов вместе с табличными частями после загрузки - гибкие отборы СКД, редактор реквизитов после загрузки удобный менеджер переноса данных между любыми конфигурациями
- Абсолютный поиск ссылок на объект - найти все ссылки (Управляемые формы, Обычный интерфейс) - быстрый поиск во всех объектах базы включая все регистры
- Конструктор прав доступа, роли, профили, группы доступа с автоподбором ролей БСП PRO — авто подбор ролей, настройка профилей групп доступа, точечная и тонкая настройка доступа в 1С
- Менеджер передачи данных в браузерные ИИ — прокачайте свою базу! Передавайте данные из 1С прямо в ChatGPT, Claude или другие нейросети для анализа, генерации текстов, классификации номенклатуры или поиска аномалий.
- Чат-бот в 1С — встроенный искусственный интеллект прямо в интерфейсе 1С. Задавайте вопросы базе данных, просите написать запрос или найти ошибку в коде, не выходя из конфигуратора или предприятия.
- Менеджер создания на основании любых документов — пробили стену невозможности связать документы? Теперь любой документ можно сделать основанием для любого другого, независимо от типовой логики конфигурации.
- Сравнение табличных документов — мощный инструмент для сверки актов, накладных или любых отчетов. Находит мельчайшие расхождения в цифрах и тексте, экономя часы на ручной контроль.
- Канбан-доска для идей — удобное визуальное управление задачами, багами и идеями прямо в 1С. Перетаскивайте карточки, группируйте этапы — всё как в Trello, но под полным контролем внутри вашей базы.
-
Интерфейс как на скриншотах - визуальный конструктор интерфейса
Часто задаваемые вопросы по переносу доработок в расширения 1С
В: Можно ли стандартно сравнить/объединить основную конфигурацию (.cf) и расширение (.cfe)?
О: Нет, платформа 1С позволяет выполнять сравнение только между одинаковыми типами метаданных (cf с cf, cfe с cfe). Для переноса кода модулей требуется промежуточный инструмент анализа diff/merge.
В: Как обработка понимает, что именно переносить в расширение?
О: Вы загружаете текст исходного модуля (поставщика) и текст вашего измененного модуля. Обработка через Patience Diff вычисляет дельту изменений и формирует готовый листинг для вставки в модуль расширения.
В: Поддерживаются ли аннотации и директивы автоматизации?
О: Да, инструмент генерирует код, готовый к развертыванию в расширении, автоматически расставляя аннотации &Вместо, &ИзменениеИКонтроль и директивы #Вставка / #Удаление, минимизируя ручную рутину.
Проверено на следующих конфигурациях и релизах:
- 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.12.218
- Управление торговлей, редакция 11, релизы 11.5.27.45
Вступайте в нашу телеграмм-группу Инфостарт