Постоянно я генерирую себе какие-то задачи. Ну вот надо мне сделать механизм сравнения текстов произвольных алгоритмов в программе. Сначала я сделал через Консоль кода (той самой, которая использует редактор Monaco). Там прекрасный встроенный механизм сравнения всем однозначно рекомендую. Кроме того есть метод, позволяющий получить различия.
Но вот такая я личность, мне захотелось, чтобы была альтернатива без редактора. Google Инфостарт в помощь, что там кто сделал в части сравнения модулей и текстов. Не сказать что прямо много чего интересного нашел. Но парочка статей меня зацепила:
- Реализация сравнения текстовых файлов. Автор: Игорь Пашутин (тыц)
- Сравнение и объединение модулей с возможностью редактирования результата. Автор: Андрей Овсянкин (тыц)
И сначала на основе первого примера, я решил свою задачу. А следом подумал, а почему бы не сделать сравнение модулей в режиме 1С:Предприятие. Не сказать что это имеет постоянную необходимость, да и у кого есть Visual Studio Code вряд ли вообще что-то еще надо. Открыл репозиторий и сравнивай ежей сутками. Но спортивный интерес было не остановить, ведь сразу захотелось:
- структуру модуля (области)
- фильтр изменений (изменено, добавлено, удалено и т.д.)
- какие-то подсказки вроде Асинх, Экспорт, директива компиляции, тип метода (процедура, функция)
В общем "Остапа несло. Дело как будто налаживалось". Результат представлен в данной статье.
Возможности
- отображение структуры модуля (дерево областей и методов)
- фильтр изменений (нет фильтра, изменено, удалено, добавлено, без изменений)
- переключение просмотра структуры модуля (дерево, таблица)
- цветовая индикация изменений в структуре модуля
- информация об Асинх, Экспорт, директиве компиляции, типе метода, строках в тексте модуля
- построчное сравнение текстов методов
- цветовая индикация текстов методов и изменений
Но в каждой бочке хорошего башкирского обязательно найдется ложка чего-то смолистого:
- Код должен минимально соответствовать стандартам 1С, хотя бы в части объявления областей, методов, комментариев
- Объявление нового метода в строке с окончанием другого метода недопустимо и приведет к ошибке разбора. Например:
КонецПроцедуры Процедура НоваяПроцедура()
- Сравнение построчное. Для более детального анализа расхождений рекомендую использовать сторонние средства
- В некоторых случаях некорректно определяются блоки изменений. Но не так часто и не столь критично
- Между левой и правой блоками кода синхронизация при прокрутке не происходит. Только при активизации строки
- Неструктурированный код не анализируется (не вложенный в процедуры или функции)
- Из-за особенностей реализации большое количество строк внутри метода вызывает желание у программы уйти в долгое раздумье. Много строк это более 200-300 наверное. Хотя я сомневаюсь в адекватности таких методов ))))
Немного о требованиях
- Платформа 8.3.18+ (наличие Асинх методов)
- БСП 3+. Список батареек
-
ОМ.ОбщегоНазначения
-
ОМ.ОбщегоНазначенияКлиент
-
ОМ.ОбщегоНазначенияКлиентСервер
-
ОМ.СтроковыеФункцииКлиентСервер
-
ОМ.ФайловаяСистемаКлиент
-
Пожалуй, на этом все. Используйте на здоровье, мне не жалко. А если кто дорабатывать будет, поделитесь что сделали. Ну и приходите ко мне в репозиторий на Github, там, возможно, вы найдете еще что-нибудь интересное.