Способы сравнить файлы, не покидая 1С

28.07.25

Разработка - Механизмы платформы 1С

Еще раз о том, как сравнить 2 текстовых файла непосредственно в тонком или веб-клиенте 1С, без применения эмуляции нажатия клавиш и других танцев с бубнами.

В платформе 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С.

Вступайте в нашу телеграмм-группу Инфостарт

Сравнение файлов git СравнениеФайлов FileCompare File compare СравнениеТабличныхДокументов HTML TextDiff WinMerge

См. также

Механизмы платформы 1С Программист Бесплатно (free)

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    12231    TitanLuchs    90    

103

Механизмы платформы 1С Работа с интерфейсом Программист Стажер 1С v8.3 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    9304    bayselonarrend    126    

63

Механизмы платформы 1С Программист 1С v8.3 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    14283    dsdred    73    

120

Механизмы платформы 1С Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    17180    bayselonarrend    21    

167

Механизмы платформы 1С Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    9754    dsdred    18    

83

Механизмы платформы 1С Программист Стажер 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    36726    YA_418728146    35    

75
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 2034 28.07.25 16:13 Сейчас в теме
СравнениеТабличныхДокументов из БСП работает очень медленно на больших объемах. Ну, или у меня структура таб. документа была сложновата для него.

ГИТ, как и прочие приложения (например, WinMerge),может быть заблокировано из-за соображений безопасности.

Я остановился на программном вызове толстого клиента с автоматическим показом формы сравнения https://infostart.ru/public/1933317/

А всего-то надо разработчикам платформы реализовать СравнениеФайлов в тонком клиенте, при том что пользователь может его использовать через меню.
2. bborisko 21 28.07.25 18:13 Сейчас в теме
(1) Во многом согласен. Но в веб клиенте не работает.
А вот что мешает разработчикам платформы исправить данное недоразумение увы не знаю(
4. user1832003 60 29.07.25 03:09 Сейчас в теме
(2) потому что веб клиент написан на другом языке и там свои ограничения. Вообще работа с файлами на веб клиенте в целом в платформе один большой костыль
Оставьте свое сообщение