1с сравнить xml файлы

Обновлено: 05.07.2024

ВНИМАНИЕ! Объекты считается одинаковыми, если их контрольные суммы равны. Контрольная сумма определяется как совокупность значений каждого (выбранного) реквизита объекта/записи/табличной части (кроме реквизита «Ссылка»). Следовательно, если ссылка в одном и том же реквизите сравниваемых объектов различны (различные УИ), но имеют одинаковое наименование, например, то данные объекты будут иметь различные контрольные суммы и следовательно, будут не равны!

Немного технических данных об обработке:

  • Код полностью моего производства (мои наработки)
  • Код открыт, можно дорабатывать самостоятельно
  • Общее количество строк кода более 3500
  • Выгрузка документов для сравнения с подсчетом контрольных сумм по ВСЕМ реквизитам из главного узла (клиент-серверная, 9 подчиненных узлов) за 6 месяцев с отбором по региону для одного узла заняло 17 мин (120 000 документов). Объем файла - 47,4 Мб в несжатом состоянии.
  • Загрузка полученного файла узлом и получение данных для сравнения по настройкам из файла заняло около 17 мин.
  • Сам процесс сравнения занял 4 секунды с подсчетом сумм по значениям ВСЕХ реквизитов. Итого - средняя скорость сравнения документов с учетом времени загрузки и выгрузки - 59 объектов/сек!
  • Если выбрать для сравнения 2 реквизита для документов "Дата" и "Номер", то процесс выгрузки-загрузки-сравнения 120 000 объектов занимает около 3 мин! Это 667 объектов/сек!
  • Для регистрации реквизитов объекта не используется ПолучитьОбъект(), что дает возможность регистрировать большие объемы данных, без возникновении проблем с памятью и дает прирост скорости.

Может быть встроены в дополнительные отчеты/обработки.

Обработка написана для 2х видов конфигураций:

  • Использующие/Не использующие модальные окна - УТ 11, БП 3.0, УНФ 1.6, Розница 2.2, ERP 2, ЗУП 3.0 и т.д.
  • Использующие модальные окна - УТ 10.3, БП 2.0, Розница 1.1, ЗУП 2.5, УПП 1.6 и т.д. Для работы она должна быть встроена в конфигурацию, так как в обычном приложении внешние управляемые формы не открываются!

Обработка имеет 2 версии - с поддержкой сравнения по правилам конвертации (ПКО) и без данной возможности.

Как встроить обработку с поддержкой модальности в конфигурацию УТ 10.3, БП 2 и похожих:

  1. Открыть базу в режиме "Конфигуратор" с администраторскими правами
  2. Открыть окно конфигурации, выбрав в верхнем меню "Конфигурация" - "Открыть конфигурацию"
  3. В дереве конфигурации найти узел "Обработки"
  4. Стать на узел "Обработки" и выбрать в контекстном меню "Вставить внешнюю обработку"
  5. Выбрать данную обработку. Она будет добавлена в дерево конфигурации
  6. На корне конфигурации нажать правой клавишей мыши - "Свойства" и установить справа флаг "Использовать управляемые формы в обчном приложении"
  7. Применить изменения, нажав F5, и согласиться с изменениями.
  8. В режиме "Предприятия" можно вызвать данную обработку из меню "Операции" - "Обработки"

Возможно, что при выборе справочника/документа/регистра/ПВХ, в таблице отбора, не будет доступных полей для отбора в управляемой форме. Это значит у Вас не включена функциональная опция, которая блокирует использование данного объекта! Это особенности управляемого приложения и СКД!

Если у вас есть вопросы, связанные с ошибками в работе системы, то просьба обращаться через тех. поддержку Инфостарт. Ответы на прочие вопросы вы найдете в описании и справке к данной публикации! Это будет быстрее т.к. я не могу всем уделить время физически! Спасибо за понимание!

Возможно, так же будут вам полезны мои разработки:

Обновление от 22.11.2021, версия 2.2!

  • Исправлена ошибка при чтении правил конвертации, когда они находились на клиенте.

Обновление от 13.04.2021, версия 2.1!

  • Добавлена возможность сравнивать движения в документах. Но для ускорения процесса, система считает только количество записей по каждому набору движения. Это полезно, когда в обменивающихся или резервных базах есть документы и они одинаковы, а вот движения отличаются – у одного документа есть движения в одной базе, у такого же документа в другой базе либо вообще нет, или есть, но не по всем регистрам, или не все строки.
  • Исправлена ошибка поиска файла для сравнения, если используется сравнение объектов, без учета принадлежности планам обмена.

Обновление от 04.08.2020, версия 2.0!

  • Добавлен механизм сравнения данных по правилам конвертаций! Сравнение по правилам конвертации сводится к указанию файла с правилами конвертации в формате xml (КД 2.0) и выбору правил для сравнения, по которым система будет сравнивать приемник с источником. Так же задаем реквизиты сравнения и отборы данных для выгрузки данных для каждого правила в отдельности. В приемнике просто загружаем данные из полученного файла и радуемся результату!
  • Добавлен механизм сравнения данных без указания ПКО или узла обмена.
  • Обновлена справка
  • Исправлено множество ошибок и неточностей

Обновление от 20.03.2018, версия 1.5!

  • Во много раз увеличена скорость получения представления объекта для ссылочных данных для вывода информации о результате сравнения.

Обновление от 19.03.2018, версия 1.4!

  • Доработана система сравнения данных - теперь проверка на наличие документа или ссылочного объекта идет не только по ссылке, но и по ключевым полям! Для документа - это "Номер" и "Дата", для справочников и прочих - "Код". Ключевые поля обязательно должны быть выбраны как реквизиты, по которым идет сравнение, причем "Дата" без "Номера" не будет использоваться в поиске! Скорость сравнения при этом не страдает.
  • Добавлена возможность выбирать как сравнивать даты документов, при условии что они выбраны как реквизиты для сравнения. По умолчанию, система все даты документов приводит к началу дня. Если установить флаг "Сравнивать даты документов в рамках месяца", то система даты документов приведет к началу месяца от даты документа. Данный флаг должен ыть установлен или снят и в момент выгрузки данных для сравнения и при сравнении данных!
  • Добавлена возможность отфильтровывать документы при сравнении по реквизиту "СуммаДокумента", при условии, что значения в базах отличаются на указанную величину, которая задается в поле "Допустимое отклонение в значениях реквизита <СуммаДокумента> в документах при сравнении". Данное поле должно быть выбрано для сравнения! Если разница по модулю больше указанного значения, то система не посчитает, что это отличие.

Обновление от 18.03.2018, версия 1.3!

  • Исправлена ошибка при открытии ссылки / ключа записи в дереве результата;

Обновление от 17.03.2018, версия 1.2!

Обновление от 28.11.2018, версия 1.12!

  • Исправлена ошибка, которая могла появляться при попытке получить данные из объекта, который отключен функциональной опцией. Теперь можно выбрать все объекты и при выгрузке не возникнет ошибка.
  • Исправлена ошибка при использовании общего отбора. Ранее, если реквизит имел одинаковое имя во многих объектах, но разные синонимы, то общий отбор мог не устанавливаться.

Обновление от 14.11.2018, версия 1.11!

  • Исправлено получение представления объектов при выводе результата сравнения

Обновление от 04.06.2018, версия 1.10!

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

Гарантия возврата денег

ООО "Инфостарт" гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом в течение 14-ти дней со дня поступления денег на наш счет.

Программа настолько проверена в работе, что мы с полной уверенностью можем дать такую гарантию. Мы хотим, чтобы все наши покупатели оставались довольны покупкой.

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

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

Этот механизм обеспечивает не только сравнение общих свойств объектов прикладного решения (справочников, документов и т. д.), но и сравнение их отдельных реквизитов, табличных частей. Также выполняется сравнение форм: сравниваются тексты модулей, тексты описаний и макеты.

Все результаты сравнения можно просмотреть в детальном виде.

Установка соответствия объектов

При запуске режима сравнения система анализирует сравниваемые конфигурации и устанавливает соответствие между объектами конфигураций, исходя из их имен:

Сравнение и объединение конфигураций

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

Сравнение и объединение конфигураций

Сравнение конфигураций

Результат сравнения конфигураций отображается в специальном окне:

Сравнение и объединение конфигураций

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

Для каждого отличающегося объекта можно просмотреть детальную информацию об отличиях:

Сравнение и объединение конфигураций

Кроме того, информация об отличиях может быть получена в виде отчета:

Сравнение и объединение конфигураций

Объединение конфигураций

Для выполнения объединения конфигураций следует отметить те объекты прикладного решения, которые будут участвовать в объединении и установить режим объединения конфигураций.

Сравнение и объединение конфигураций

Установка режима объединения конфигураций возможна как для всей конфигурации в целом, так и для каждого элемента прикладного решения в отдельности:

Сравнение и объединение конфигураций

Варианты сравнения и объединения конфигураций

Система поддерживает сравнение и объединение различных видов конфигураций. В качестве сравниваемых конфигураций могут выступать:
  • основная конфигурация;
  • конфигурация базы данных;
  • конфигурация, сохраненная во внешнем файле;
  • конфигурация поставщика.

Таким образом, например, возможно сравнение двух конфигураций, сохраненных во внешних файлах, или сравнение основной конфигурации с конфигурацией поставщика.

Сохранение / загрузка настроек объединения конфигураций

Настройки объединения конфигураций (или настройки обновления конфигурации на поддержке) можно сохранять в xml файл. Также доступна и обратная операция — загрузка этих настроек из файла.

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

Использование внешней программы

Существует целый ряд сторонних специализированных программ, с помощью которых можно выполнять объединение модулей. Если недостаточно встроенных возможностей 1С:Предприятия, или если хочется использовать одну из сторонних программ, есть возможность подключить её в настройках конфигуратора и использовать для сравнения, настройки объединения и собственно объединения модулей конфигурации.

Для самых распространённых программ в конфигураторе 1С:Предприятия уже содержатся параметры командной строки для их запуска в различных режимах:

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

Последнее время в работе с 1С я полностью перешла на сравнение конфигураций через текстовые файлы в Гит. Это оказалось гораздо удобнее, чем стандартное сравнение через хранилище. Основная проблемы была с управляемыми формами. Обычные формы ssf замечательно сравниваются через v8reader, управляемые приходилось сравнивать как текст. Стандартная выгрузка не очень наглядна, хоть и позволяет отследить изменения. Попробовав разные варианты, в конце концов остановилась на варианте преобразования xml-файла через xsl-шаблон + специализированная внешняя утилита для сравнения ExamXML.

Сначала о том, как это выглядит, потом как настроено.

В качестве Git-клиента у меня прижился Git Extensions. Он достаточно легкий, понятный и удобный. Для преобразования 1С-хранилища в Гит-репозиторий прижился Gitter - конфигурация с инфостарта, которая периодически проверяет новые изменения в 1с-хранилище и перекидывает их в Гит.

После синхронизации Гит-репозитория с 1С-хранилищем для сравнения конфигураций просто выбираем версии, которые хотим сравнить -> выбираем сравниваемый файл -> правый клик -> открыть в инструменте сравнения (либо просто F3). Все картинки в статье кликабельные.


Для примера сравним форму элемента справочника "Номенклатура" в УТ11.1.7 и УТ 11.1.9. У утилиты есть 2 режима сравнения "показывать весь файл" и "показывать только изменения".



Пример сравнения структуры метаданных справочника "Номенклатура" можно посмотреть в скриншотах.

Удобства сравнения через xml в том, что xml-выгрузка содержит абсолютно всю информацию о форме или объекте. Т.е. мы на одном экране видим все изменения элементов, их свойств, команд, обработчиков и т.д.

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

По умолчанию сопоставляются элементы с одинаковым наименованием на одном уровне иерархии. Т.е. если изменено имя элемента либо элемент вынесен на другой уровень (например, перенесли во вложенную группу), то утилита автоматически его не сопоставит а отметит, что в одной папке элемент удалили, в другой добавили новый. Однако можно их сопоставить вручную. Выбираем соответствующий элемент в обоих файлах -> правый клик -> compare element. При этом утилита их отметит как один элемент и сравнит все вложенные уровни.

Из полезных фич можно отметить возможность игнорирования каких-либо атрибутов или элементов. Например, при добавлении элемента в форму, в xml для остальных элементов может сбиться номер элемента id. В этом случае индексы элементов будут разные, хоть и сами элементы одинаковые. Для того, чтобы эти отличия не мешали сравнению, становимся на любой элемент с атрибутом id -> правый клик -> ignore elements -> указываем, какие атрибуты хотим игнорировать для данного элемента или вцелом для файла.

Теперь о том, как это работает:

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

XML (Extensible Markup Language) существует уже более 3 десятилетий и является неотъемлемой частью любого веб-приложения. Будь то файл конфигурации, документ сопоставления или определение схемы, XML облегчил обмен данными, предоставив четкую структуру данных и помогая в динамическом конфигурировании и загрузке переменных.

Сравнение между JSON и XML

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

XML (расширяемый язык разметки)

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

  • Создавайте интерактивные веб-страницы, сохраняйте и визуализируйте данные контента для пользователя на основе логики обработки с использованием процессора XSLT .
  • Предоставляет возможность определять метаданные в повторно используемом и переносимом формате.
  • Более точные результаты веб-поиска, потому что данные хранятся внутри тегов.
  • Делает обмен информацией простым и доступным как для B2B , так и для B2C
  • Некоторые веб-задачи могут быть автоматизированы, делая их эффективными.

Если вы много работали с XML, вы можете оценить как достоинства, так и недостатки этой технологии. Самым большим недостатком является сложный код синтаксического анализатора, использующий SAX или DOM , что является дополнительной работой для разработчиков.

JSON - текстовый формат обмена данными, основанный на JavaScript. JSON требует меньше кода и имеет меньший размер, что ускоряет обработку и передачу данных. Не смотря на то, что JSON написан на JavaScript , он не зависит от языка. Но это все, что может сделать с JSON. Он не имеет каких-либо мощных функций, связанных с проверкой и схемой, которые есть у XML.

Что делает JSON таким популярным?

Благодаря популярности технологии API REST , JSON получил импульс в программировании кода API и веб-сервисов. Это текстовый, легкий и простой в разборе формат данных, не требующий дополнительного кода для анализа. Таким образом, JSON помогает ускорить обмен данными. Таким образом, для веб-сервисов, которые должны просто возвращать много данных и отображать их, идеальным выбором является JSON.

Структура XML и JSON

Давайте посмотрим на структуру каждого из них, чтобы оценить вышеупомянутый пункт подробней

Как мы видим, структура тегов, безусловно, добавляет некоторую сложность, в то время как формат JSON более читабельный.

Более того, благодаря основанным на JavaScript фреймворкам, таким как Node.js, JSON получает большее признание с каждым днем. Когда интерфейсный код находится в JavaScript, получение данных в формате JSON облегчает загрузку данных в дерево объектов.

JSON идеальный формат для базы данных, так-как каждый язык программирования способен анализировать JSON.

В будущем JSON будет играть более важную роль, поскольку с появлением облачных вычислений и API-интерфейсов потребность в надлежащем хранении и передаче данных сейчас огромна и, вероятно, будет расти в будущем.

Мы увидели, какие преимущества и недостатки имеют JSON и XML, и сравнили, как каждый из них может хорошо работать в различных сценариях веб-приложений. Давайте суммируем вышеприведенные пункты, а также поймем еще некоторые различия, которые могут дать вам дополнительную ясность:

  • XML - это язык разметки, а не язык программирования, в котором существуют теги для определения элементов.
  • Данные XML хранятся в виде древовидной структуры. Пример:
  • Может выполнять обработку и форматирование документов и объектов.
  • Долгий и медленный анализ, ведущий к медленной передаче данных
  • Поддерживает пространства имен, комментарии и метаданные
  • Размер документа большой, а с большими файлами структура тегов делает его огромным и сложным для чтения.
  • Не поддерживает массив напрямую. Чтобы иметь возможность использовать массив, нужно добавить теги для каждого элемента.
  • Поддерживает множество сложных типов данных, включая диаграммы, изображения и другие типы данных.
  • XML поддерживает кодировки UTF-8 и UTF-16.
  • XML-структуры подвержены некоторым атакам, так как расширение внешнего объекта и проверка DTD включены по умолчанию. Когда они отключены, парсить XML безопасней.
  • JSON - это текстовый формат, написанный на JavaScript.
  • Данные хранятся в виде карты с парами ключ-значение. Пример:
  • JSON не делает никакой обработки или вычисления
  • Очень быстрый, поскольку размер файла значительно меньше, более быстрый синтаксический анализ с помощью механизма JavaScript и, следовательно, более быстрая передача данных
  • Нет поддержки пространства имен, добавления комментариев или написания метаданных
  • Компактный и легкий для чтения, без лишних или пустых тегов, что делает файл простым.
  • JSON поддерживает: строки, числа, массивы и объекты.
  • JSON поддерживает кодировки UTF и ASCII.
  • Синтаксический анализ JSON безопасен почти все время, за исключением использования JSONP , что может привести к атаке подделки межсайтовых запросов (CSRF).
  • Поскольку данные в JSON обрабатываются последовательно, использование его с AJAX обеспечивает более быструю обработку данных. Данные можно легко манипулировать с помощью метода eval() .

Заключение

Поскольку и JSON, и XML, похоже, решают несколько схожую задачу, сравнение в основном основано на особенностях и преимуществах каждого из них. Суть в том, что если вам нужен простой обмен данными, в котором не нужно беспокоиться о семантике и проверке, перейдите на JSON. Но даже с JSON важно изучить XML и связанные с ним технологии, чтобы сделать больше, чем просто обмен данными и быстрая обработка. JSON еще предстоит пройти долгий путь, прежде чем он сможет сравниться с возможностями старого доброго XML.

Если эта информация была для вас полезной, просим поставить лайк и подписаться на наш канал .

С помощью механизма XDTO можно описать систему типов и значений, с помощью которой можно легко выполнить сериализацию/десериализацию в XML/JSON.

XDTO можно сравнить со схемой XML. С помощью механизма XDTO можно создать XML-схему, а потом на основании этой схемы сформировать XML-документ.

XDTO может применяться в следующих случаях:

  • Для описания типов параметров и возвращаемых значений Web-сервисов.
  • Для описания структуры данных, используемой при обмене с внешними системами (в том числе с другими базами на платформе 1С).
  • Для создания собственных типов и значений, используемых внутри конфигурации 1С.

Создание XDTO-пакета

В качестве примера рассмотрим следующую задачу: нужно настроить обмен документами между двумя различными конфигурациями на 1С. В обеих конфигурациях используются 2 типа документов: приходные и расходные накладные. Состав и наименование реквизитов в разных конфигурациях отличается.

Для обмена будет использоваться определенный формат следующего вида:

XDTO

Есть корневой элемент Документ, который имеет 2 свойства: Тип и Состав. Состав включает в себя массив строк со свойствами: Номенклатура, Количество и Сумма.

Для описания данного формата будем использовать XDTO-пакет. XDTO-пакет можно сравнить со схемой XML, в нем мы укажем какие типы будут использоваться внутри пакета и каким образом они должны быть сериализованы в XML.

URI пространства имен

URI пространства имен

Добавим в пакет новый Тип объекта:

Тип объекта

В свойствах укажем Имя Документ:

Тип объекта

Это корневой узел нашего формата.

Свойство

В свойствах укажем Имя Тип:

Свойство

В данном свойстве будет строкой храниться тип выгружаемого документа. Поэтому нужно заполнить свойство Тип, чтобы при записи в XML платформа знала как нужно его сериализовать.

Чтобы заполнить тип сначала нужно нажать на зеленую галочку возле свойства:

Тип

Тип
Тип

Данный тип соответствует типу 1С Строка.

Тип

Добавим для объекта Документ еще одно свойство Состав, но тип пока заполнять не будем. Должно получиться так:

Тип объекта

Теперь добавим новый тип объекта Состав. Он будет использоваться для сериализации табличной части документа. Добавим для него одно свойство Строка, тип пока не будем указывать:

Тип объекта

Так как в табличной части может быть несколько строк, то для свойства Строка в свойстве Максимальное количество нужно указать -1 (предварительно нужно нажать на зеленую галку):

Максимальное количество

Это означает, что в данном свойстве может храниться неограниченное количество значений (аналогично массиву).

Теперь для свойства Документа Состав в качестве типа укажем только что созданный объект Состав. Чтобы его выбрать нужно развернуть пространство имен созданного нами XDTO-пакета:


Тип объекта

Тип объекта

Свойства
Свойства
Свойства

И наконец для свойства Строка объекта Состав укажем тип Строка (только что созданный нами тип объекта):

Свойства

На этом создание XDTO-пакета завершено. Для удобства переименуем его в Документ (нужно щелкнуть по пакету правой кнопкой, выбрать Свойства и изменить свойство Имя):

XDTO-пакет

Сериализация XDTO в XML

Теперь напишем простую процедуру для сериализации приходного документа в XML через механизм XDTO.

Сначала рассмотрим некоторые понятия, которые будут использоваться в процессе сериализации:

Читайте также: