Сравнение текстов модулей (1С, oscript)

Публикация № 1812778 22.02.23

Разработка - Инструментарий разработчика

diff сравнение bsl

Построчное сравнение модулей 1С, OScript и других структурированных текстовых файлов. Без использования внешних программ (kdiff и т.п.). Без ограничений по типу клиента 1С:Предприятие.

Постоянно я генерирую себе какие-то задачи. Ну вот надо мне сделать механизм сравнения текстов произвольных алгоритмов в программе. Сначала я сделал через Консоль кода (той самой, которая использует редактор Monaco). Там прекрасный встроенный механизм сравнения всем однозначно рекомендую. Кроме того есть метод, позволяющий получить различия.

Но вот такая я личность, мне захотелось, чтобы была альтернатива без редактора. Google Инфостарт в помощь, что там кто сделал в части сравнения модулей и текстов. Не сказать что прямо много чего интересного нашел. Но парочка статей меня зацепила:

  • Реализация сравнения текстовых файлов. Автор: Игорь Пашутин (тыц)
  • Сравнение и объединение модулей с возможностью редактирования результата. Автор: Андрей Овсянкин (тыц)

И сначала на основе первого примера, я решил свою задачу. А следом подумал, а почему бы не сделать сравнение модулей в режиме 1С:Предприятие. Не сказать что это имеет постоянную необходимость, да и у кого есть Visual Studio Code вряд ли вообще что-то еще надо. Открыл репозиторий и сравнивай ежей сутками. Но спортивный интерес было не остановить, ведь сразу захотелось:

  • структуру модуля (области)
  • фильтр изменений (изменено, добавлено, удалено и т.д.)
  • какие-то подсказки вроде Асинх, Экспорт, директива компиляции, тип метода (процедура, функция)

В общем "Остапа несло. Дело как будто налаживалось". Результат представлен в данной статье.

Возможности

  • отображение структуры модуля (дерево областей и методов)
  • фильтр изменений (нет фильтра, изменено, удалено, добавлено, без изменений)
  • переключение просмотра структуры модуля (дерево, таблица)
  • цветовая индикация изменений в структуре модуля
  • информация об Асинх, Экспорт, директиве компиляции, типе метода, строках в тексте модуля
  • построчное сравнение текстов методов
  • цветовая индикация текстов методов и изменений

Но в каждой бочке хорошего башкирского обязательно найдется ложка чего-то смолистого:

  • Код должен минимально соответствовать стандартам 1С, хотя бы в части объявления областей, методов, комментариев
  • Объявление нового метода в строке с окончанием другого метода недопустимо и приведет к ошибке разбора. Например:
    КонецПроцедуры Процедура НоваяПроцедура()
  • Сравнение построчное. Для более детального анализа расхождений рекомендую использовать сторонние средства
  • В некоторых случаях некорректно определяются блоки изменений. Но не так часто и не столь критично
  • Между левой и правой блоками кода синхронизация при прокрутке не происходит. Только при активизации строки
  • Неструктурированный код не анализируется (не вложенный в процедуры или функции)
  • Из-за особенностей реализации большое количество строк внутри метода вызывает желание у программы уйти в долгое раздумье. Много строк это более 200-300 наверное. Хотя я сомневаюсь в адекватности таких методов ))))

Немного о требованиях

  • Платформа 8.3.18+ (наличие Асинх методов)
  • БСП 3+. Список батареек
    • ОМ.ОбщегоНазначения

    • ОМ.ОбщегоНазначенияКлиент

    • ОМ.ОбщегоНазначенияКлиентСервер

    • ОМ.СтроковыеФункцииКлиентСервер

    • ОМ.ФайловаяСистемаКлиент

Пожалуй, на этом все. Используйте на здоровье, мне не жалко. А если кто дорабатывать будет, поделитесь что сделали. Ну и приходите ко мне в репозиторий на Github, там, возможно, вы найдете еще что-нибудь интересное.

Скачать файлы

Наименование Файл Версия Размер
Сравнение текстов модулей (1С, oscript):

.epf 132,67Kb
2
.epf 1.4 132,67Kb 2 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. slawa 26 26.02.23 07:01 Сейчас в теме
Сравнение модулей (версия 1.1)

При сравнении файлов не выводит название методов
Прикрепленные файлы:
Новый1.txt
Новый2.txt
2. vandalsvq 1308 26.02.23 08:15 Сейчас в теме
(1) пофиксил. На гитхаб будет чуть позже
3. vandalsvq 1308 26.02.23 08:15 Сейчас в теме
(1) как проверишь, жду плюса 😂
4. vandalsvq 1308 26.02.23 08:48 Сейчас в теме
5. slawa 26 27.02.23 05:21 Сейчас в теме
Спасибо

Вот еще ошибка
Ошибка инициализации модуля: ВнешняяОбработка.СравнениеКода1С.Форма.Форма.Форма
по причине:
{ВнешняяОбработка.СравнениеКода1С.Форма.Форма.Форма(100,2)}: Переменная не определена (pw_СлужебныйКлиентСервер)
<<?>>pw_СлужебныйКлиентСервер.ДобавитьПоляУсловногоОформления(ЭлементУО.Поля, "СтруктураМодуля");

меняю на
//pw_СлужебныйКлиентСервер.ДобавитьПоляУсловногоОформления(ЭлементУО.Поля, "СтруктураМодуля");
#Область slawa
ДобавитьПоляУсловногоОформления(ЭлементУО.Поля, "СтруктураМодуля");
#КонецОбласти // slawa
7. vandalsvq 1308 27.02.23 11:08 Сейчас в теме
(5) ошибку поправлю сегодня, остались костыли, сорри ((((
8. vandalsvq 1308 27.02.23 12:12 Сейчас в теме
(5) пофиксил, проверил на какой-то сторонней конфе с БСП чтобы больше каких-то "не БСП-шных" хвостов не осталось
Интересно, что сам метод я перенес внутрь обработки, а вызов оставил из другого места. Торопыга
6. slawa 26 27.02.23 05:22 Сейчас в теме
9. slawa 26 01.03.23 18:22 Сейчас в теме
Еще проблема

Недопустимое значение параметра (параметр номер '4')
{ВнешняяОбработка.СравнениеКода1С.Форма.Форма.Форма(1456)}:КонСтроки = СтрНайти(СтрокаМодуля, """",, НачСтроки + 1);
{ВнешняяОбработка.СравнениеКода1С.Форма.Форма.Форма(328)}:ЭтотОбъект.ТекстПодготовленный1 = ПодготовитьТекстМодуля(ЭтотОбъект.ТекстМодуля1);
{ВнешняяОбработка.СравнениеКода1С.Форма.Форма.Форма(274)}:ПроверитьТекстПодготовленный();

по причине:
Недопустимое значение параметра (параметр номер '4')
Прикрепленные файлы:
Новый1.txt
Новый2.txt
vandalsvq; +1 Ответить
10. vandalsvq 1308 01.03.23 19:30 Сейчас в теме
(9) видимо НачСтроки+1 вышел за пределы длины самой строки. Завтра поправлю, постараюсь не забыть.
11. vandalsvq 1308 04.03.23 11:14 Сейчас в теме
(9) ошибка исправлена в версии 1.4, как всегда все на гитхаб если что
12. slawa 26 17.03.23 04:26 Сейчас в теме
Есть небольшая проблема
Нужно перезагружать обработку при каждом следующем сравнении

Например сейчас файлы различны на одну строку 2023-03-17_112046.jpg
Потом в Новый1 добавляю третью строку "Перем адоФС;" и заново "Выполнить сравнение"
результат не меняется
так-же с левой стороны одна строка отличий

Т.е. такое ощущение что файлы для сравнения не перезагружаются.
Мелочь конечно, но споткнулся.
Прикрепленные файлы:
13. vandalsvq 1308 17.03.23 23:14 Сейчас в теме
(12) файлы считываются при выборе один раз, далее уже не обновляется. Есть такое. Если не сложно в github issues засунь, может как найдутся пару минуток сделаю что-нибудь.
Оставьте свое сообщение

См. также

Проверка ведения учета (универсальная)

Инструментарий разработчика Анализ учета Платформа 1С v8.3 Запросы Абонемент ($m)

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

2 стартмани

11.08.2020    10118    58    vozhd    4    

19