1с как сравнить два объекта

Обновлено: 06.07.2024

Особенности сравнения и объединения конфигураций в режиме обновления

Для сопоставления объектов при объединении конфигурации в 1С:Предприятии 8 используются свойство "Имя" объекта метаданных и его внутренний идентификатор. Однако в различных вариантах сравнения алгоритм сопоставления объектов разный. Прежде чем подробно описать различные варианты, сначала опишем правила изменения внутреннего идентификатора. Идентификатор в пределах одной конфигурации никогда не изменяется. Идентификатор не изменяется при выгрузке конфигурации в cf или dt файлы (включая файлы поставки cf и обновления cfu ). Идентификатор не изменяется при использовании механизма групповой разработки (в процессе перемещений между конфигурацией и хранилищем). Идентификатор всегда изменяется при копировании объекта, в том числе в процессе объединения конфигураций. Поясним на примере. Создаем новую конфигурацию. Выполняем команду " Конфигурация - Сравнить, объединить с конфигурацией из файла. ". Программа обнаружит что текущая конфигурация пустая и предложит выполнить полную загрузку (аналогично команде " Конфигурация - Загрузить конфигурацию из файла "). Если согласится на предложенный вариант, то в результате все объекты сохранят свои идентификаторы. Если же отказаться и выполнить обычное объединение, то все объекты идентификаторы поменяют, хотя логически получатся две одинаковые конфигурации.

Теперь рассмотрим алгоритмы сопоставления объектов. Существуют три варианта.

  1. Сравнение произвольных конфигураций. Выполняется сопоставление по имени объекта. Если для каких-то объектов пару найти не удалось, выполняется сопоставление по идентификатору.
  2. Сравнение родственных конфигураций. Имеются ввиду конфигурации, про которые можно точно утверждать, что они являются различными версиями одной и той же конфигурации (примеры - сравнение основной конфигурации с конфигурацией базы данных или с конфигурацией хранилища). Выполняется сопоставление только по идентификатору объекта. Имя объекта не используется.
  3. Сравнение с конфигурацией поставщика. Выполняется сопоставление по идентификаторам, но при этом идентификаторы не обязательно должны быть одинаковы.

Третий вариант мы рассмотрим отдельно, но сначала некоторые уточнения про первые два. Сравнение конфигураций можно вызвать из различных режимов. Например, используя команды " Конфигурация - Сравнить, объединить с конфигурацией из файла. ", " Конфигурация - Конфигурация базы данных - Сравнить, объединить с конфигурацией базы данных ", из диалога настройки поддержки, и так далее. Во всех этих случаях вариант сопоставления выбирается автоматически. Есть также команда универсального сравнения конфигураций "Конфигурация - Сравнить конфигурации. ". Где можно выбрать любую пару (например конфигурацию базы данных с некоторой версией из хранилища конфигураций). В случае если будет указана пара конфигураций, связь между которыми известна, вариант сопоставления так же будет выбран автоматически. В противном случае, будет доступен флажок "Устанавливать соответствия по именам объектов", который позволяет в явном виде выбрать один из двух алгоритмов.

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

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

Влияние сопоставления объектов на скорость сравнения конфигураций

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

  1. Среди сопоставленных объектов нет пар с различными идентификаторами.
  2. Среди несопоставленных объектов нет возможных пар с одинаковыми идентификаторами.

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

Замечания по методике использования механизма

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

Удаление объектов поставщика

Рассмотрим варианты удаления объекта поставщика.

Удаление пользователем

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

Удаление поставщиком

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

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

Часто при разработке правил переноса данных, или при работе с программой необходимо выяснить чем один объект (например, создаваемый программно) отличается от другого (созданого руками). Вроде визуально все хорошо, но первый не проводится, не записывается, или проводится не так.

Представленная обработка выводит соответствие полей объектов и выделяет реквизиты объектов имеющие отличия.

Обработка учитывает различия в реквизитах объекта и реквизитах всех табличных частей.

Поддерживает обычный и управляемый режим.

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

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

В обычном режиме не показывает различия в значениях стандартных реквизитов, код, наименование, пометка удаления.

Документы не сравнивает, выдает ошибку:
: Индекс находится за границами массива
МассивЗначений = ПолучитьМассивреквизитов(МассивЗначений, ТабЧасть.Реквизиты, ЭлементТабЧасти, Объект2[ТабЧасть.Имя][индекс],ТабЧасть.Имя);

Внимание, вопрос:
почему, за такое неработающее говно с меня списали 1$m?

Просмотры 4340

Загрузки 15

Рейтинг 0

Создание 21.10.14 14:46

Обновление 21.10.14 14:46

№ Публикации 308541

Кому Для всех

Конфигурация Конфигурации 1cv8

Операционная система Windows

Вид учета Не имеет значения

Доступ к файлу Абонемент ($m)

Код открыт Не указано


См. также

Конвертация любых адресов, написанных в свободной форме, к ФИАС Промо

Допустим у нас есть база с адресами клиентов, и написаны они могут быть как душе угодно. С опечатками, без индексов, без разделителей, в совершенно любом формате. Вот было бы здорово иметь функцию, которая одним нажатием кнопки преобразует любую белиберду к строгому представлению адреса по ФИАС? Восстановит индекс, исправит опечатки и вернёт на 100% валидный адрес. Для всех, кто мечтательно сказал "ДА!", выкладываю данную обработку.

2 стартмани

30.06.2020 7691 68 XilDen 15

Управление платформенными обработками (расширение для типовых)

Расширение использует недокументированную возможность для управления платформенными обработками. Например, чтобы подменить "Активные пользователи" или доработать "Конструктор запросов".

1 стартмани

07.10.2021 3383 5 SeiOkami 23

Работа с картами в 1С на примере бесплатной библиотеки Leaflet

Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.

1 стартмани

31.03.2021 10491 31 Parsec1C 11

Универсальная обработка переноса данных из основной конфигурации в расширение

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

5 стартмани

05.10.2020 10418 65 biz-intel 71

Удаление и/или копирование сохраненных в 1С настроек (например настроек печати табличных форм) Промо

Иногда нужно удалить сохраненную в 1С "покореженную" настройку или скопировать "удачную" другому пользователю.

1 стартмани

01.09.2012 66885 1378 AnryMc 46

Улучшенная обработка универсального обмена данными в формате XML (УФ)

Улучшенная обработка "Универсальный обмен данными" с полноценными возможностями СКД для выборки данных (не только для отборов).

1 стартмани

23.06.2020 12970 135 Lem0n 1

Панель команд текущего объекта (документа, справочника и т.д.) со следующим возможностями: Редактор реквизитов, таблиц и движений текущего объекта, Анализ прав доступа к текущему объекту, Поиск ссылок на объект с отборами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Реализована всплывающей панелью в форме объекта. Подключается как расширение конфигурации (*.cfe) либо отдельными обработками.

1 стартмани

01.05.2020 15306 112 sapervodichka 1

Работа с файлами (обычная и управляемая форма)

Нужно загрузить файл с клиента на сервер или же, наоборот, файл загрузить с сервера на клиент, а впридачу все это на web-клиенте, да еще и асинхронно? Нет ничего проще, читай далее, как это сделать!

1 стартмани

10.06.2019 41628 222 Xershi 77

Групповая корректировка записей регистров (Управляемое приложение) v 2.1 Промо

Обработка предназначена для групповой корректировки записей регистров Накопления, Сведений и Бухгалтерии. Разработана специально для Управляемого приложения.

3 стартмани

06.09.2013 68809 321 kser87 59

Электронная таблица средствами 1С (Версия 2.0)

Функционал электронной таблицы для программ на платформе 1С реализован на основе табличных документов. Функционал реализован в виде обработки. Большую часть формы обработки занимают листы (закладки) с табличными документами, которые выполняет роль электронной таблицы. Листы могут быть добавлены, удалены или переименованы. Ограничение по количеству листов определяется возможностью платформы. В формулах электронной таблицы можно использовать любые языковые конструкции, процедуры и функции 1С, ссылки на другие ячейки электронной таблицы расположенные в том числе и на других листах. Допустимо обращаться к ячейкам электронной таблицы по имени именованной области. В случае использования в формулах электронной таблицы данных из самой таблицы пересчет зависимых ячеек с формулами производится автоматически. Электронную таблицу можно сохранить в файл.

1 стартмани

23.04.2019 23815 78 user706545_kseg1971 40

Удобная консоль регламентных и фоновых заданий

1 стартмани

06.02.2019 22205 211 Alxby 20

Редактор объектов информационной базы 8.3

Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.57 от 09.10.2021

2 стартмани

23.01.2019 43325 486 ROL32 50

Установка предопределенных элементов: просмотр, исправление и поиск ошибок (задвоенных и отсутствующих) Промо

Простая обработка для просмотра и установки значений предопределенных элементов. Позволяет заменить значение предопределенного элемента с одного элемента справочника на другой, удалить предопределенный элемент (снять пометку предопределенности), установить пометку переопределенного элемента. Проверяет предопределенные данные на наличие задвоений и отсутствующих. Работает со справочниками, планами счетов, планами видов характеристик, планами видов расчетов.

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

В итоге, мозг зачем-то наковырял решение, которое ещё давно, в 8.2 было доступно (и доступно по сей день), но о нём до сих не было упоминаний на Инфостарте.

Я хочу привести пару кейсов и показать пример, для чего весь этот бред может понадобиться.

Приведённый ниже способ может пригодиться для того, например, чтобы сравнить, насколько сильно похожи/отличаются друг от друга два объекта, например:

  • Документы "Заказ покупателя" и "Отгрузка покупателю" (встречал я конфы, где это два дока по одному прототипу с очень схожей функциональной базой);
  • Нужно сравнить две роли теми средствами, что нам предлагает инструмент сравнения/объединения конфигураций;
  • Твой особый случай.

Первым шагом, кликаем в меню Конфигурация -> Сравнить конфигурации.

Выбираем обе конфы - одинаковые. С галкой ничего не делаем (нет смысла) и нажимаем "ОК".


Следущий шаг - в фильтре выбираем "Нет фильтра" и раскрываем дерево конфигурации вверху.


Шаг 3. Находим первый объект, который необходимо сравнить, в правой колонке, и по правому клику мыши на нём, выбираем пункт меню "Отменить соответствие объектов".


Шаг 4. Находим второй объект в дереве, в левой колонке и аналогичным образом отменяем для него соответствие.


Шаг 5. Здесь можно, не сходя со второго объекта, снова жмакнуть по нему правой кнопкой мыши и выбрать пункт "Установить соответствие объектов. "


Шаг 6. В открывшемся диалоге выбираем имя первого объекта и жмём "ОК".


Шаг 7. Повторяем ту же процедуру для первого со вторым объекта.


Шаг 8. Задаём в фильтре снова "Показывать отличия в конфигурациях".


Шаг 9. Жмём обновить любым любимым или удобным способом.


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


Шаг 11. Вуаля! Получили два объекта, годных для сравнения и можем делать с ними всё, что угодно.


Хочу заметить, что в стандартном сравнении/объединении нет возможности пакетно проделывать вышеуказанные действия, а значит эта схема больше подойдёт для штучных операций.

Когда-то давным-давно, лет 10 лет назад, когда конфигурации были простыми и понятными, мало кто задумывался о необходимости сравнения объектов (с точки зрения разработчика). Все реквизиты (или почти все) были на форме, их было мало, программно создать нужный справочник (документ и т.п.) не представляло особого труда.

Шло время, программы становились тяжелее и сложнее, количество реквизитов увеличивалось, программисты начинали напрягаться. И вот настал этот день. День, когда найти отличия в 2-х (или более) объектах без специальных инструментов уже невозможно (или очень сложно).

Обработка "Сравнение объектов" позволяет выполнить сравнение неограниченного количества объектов разных видов между собой. Результат сравнения отображается в виде дерева и содержит значения только отличающихся реквизитов. Реквизиты сгруппированы в группы: "Стандартные реквизиты", "Реквизиты" и "Табличные части". Сравнение движений не выполняется.

Один из возможных сценариев использования

Уже несколько лет постоянно (почти ежедневно) я использую конфигурацию «1С:Конвертация данных, ред. 2.1», разрабатываю и поддерживаю довольно сложные правила. Например, сейчас разрабатываются правила конвертации данных "Камин:Расчет заработной платы. Версия 3.0" - "1С:Зарплата и Управление персоналом, ред. 3.0". Главная сложность при этом - невозможность сопоставления объектов напрямую, т.к. конфигурации отличаются очень сильно. Поэтому приходится сначала создавать объект соответствующего вида в ЗУП, анализировать состав его реквизитов, и только затем - создавать ПКО, ПКС и ПКЗ. А если документы одного вида сильно отличаются? А если с первого раза не удалось отследить все зависимости, условия, нюансы?

Вот тут и приходит на помощь эта разработка. Вы создаете эталонный объект (элемент справочника, документ и т.п.) и сравниваете его с перенесенным по правилам. Все различия тут же становятся очевидны. Отладка правил становится гораздо проще!

Как сравнить объекты

Предположим, нам нужно найти отличия в 2-х документах. Один из них перенесен по правилам обмена, другой - создан интерактивно. Откроем обработку сравнения, укажем документы, которые нужно сравнить, нажмем кнопку "Выполнить сравнение". Если различия будут найдены, появится табличное поле дерева сравнения со списком отличающихся реквизитов. Как видим, различия есть, необходимо доработать правила обмена.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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