В платформе 1С есть прекрасный механизм сравнения файлов. И все бы было хорошо, но почему то метод СравнениеФайлов (FileCompare) не работает в тонком клиенте. При этом через меню можно прекрасно вызвать данный функционал и сравнить файлы.
Видел решения, где предлагается эмулировать горячие клавиши чтобы все это запустить. Еще как вариант запускать 1С в толстом клиенте из командной строки, передавать в параметры адреса файлов, и уже запускать сравнение в толстом клиенте. Данные варианты выглядят совсем ненадежным, а что если кто то работает в браузере, а кто то еще и на Linux? И платформа на клиенте не установлена. Слишком многое может пойти не так.
Хорошим решением является вызов специальной программы для сравнения, что то типа TextDiff или WinMerge и прочие аналоги, но тут те же самые проблемы. Программа должна стоять на клиенте у пользователя, в браузере ничего не получиться из-за механизмов защиты. Да и результат хочется отразить в интерфейсе, чтобы пользователь не покидал основное окно программы.
Рассмотрим варианты, которые будут работать более надежно.
Вариант из БСП
В БСП есть форма СравнениеТабличныхДокументов. Никто не помешает нам разложить файлы на строки, каждую строку поместить в строку табличного документа и сравнить.
Выглядит это примерно так:
Используем ГИТ
Способ изначально был предложен вот в этой публикации.
Для сравнения текстовых файлов замечательно подходит утилита Git. Сравнение можно произвести на сервере, а полученный результат отразить на клиенте. В исходной публикации для отражения используется табличный документ, но мне кажется лучше использовать "Поле форматированного документа".
Команда= СтрШаблон("""%1"" diff --diff-algorithm=%2 --unified=1000000 --no-index ""%3"" ""%4"" --color --color-words --word-diff --output ""%5""" , ПутьГИТ , АлгоритмСравнения , ПутьФайл1 , ПутьФайл2 , Результат );
Обратите внимание, Гит поддерживает несколько вариантов сравнения:
• default, myers — базовый жадный алгоритм diff, по умолчанию.
• minimal — тратит дополнительное время, чтобы создать наименьшее возможное различие.
• patience — использует алгоритм «patience diff» при генерации патчей.
• histogram — расширяет алгоритм patience, поддерживает редкие общие элементы.
А так же обратите внимание на параметр unified=1000000 - параметр обозначает, сколько строк контекста (снизу и сверху) отразить в найденной точке различия. По умолчанию 3, я поставил просто большое число, так как хочу видеть текст полностью, в том числе и тот где различия отсутствуют.
Обратимся к веб технологиям
Я нашел вот такой пример How to diff HTML
Все можно собрать непосредственно в 1С, в поле HTML документа. Не сливает данные в интернет, исходники выложены на GitHub. Наверняка есть и другие реализации.
Вариант через GIT и вариант через веб технологии в итоге отразят результат примерно так:
Только в одном случае это будет поле HTML документа, а в другом поле форматированного документа.
Буду рад узнать о Ваших методах решения проблемы отображения сравнения файлов в 1С.
Вступайте в нашу телеграмм-группу Инфостарт