логотип
баннер
логотип
Главная
Услуги
О компании
1C:Предприятие 7.7


Поиск по сайту:


Перенос данных с сопоставлением объектов

Принципы сопоставления объектов при обмене данными 1С

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

Рассматривать решение поставленной задачи для наглядности будем на примере переноса данных из программы 1С Комплексная автоматизация в 1С Бухгалтерия 8 (КА 1.1 => БП 3.0)  с использованием правил переноса, созданных по технологии Конвертации данных 2.0. Все сказанное относится к любым правилам переноса, написанным по указанной технологии.

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

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

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

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

Рис.1 Документ выгружаемый из источника

Обработка для загрузки Перенос_данных_с_сопоставлением_УФ_v1_1.epf имеет по сравнению с типовой обработкой две дополнительные закладки: Типы данных сопоставления и Сопоставление данных. На первой из них необходимо отметить те типы данных, которые будут участвовать в сопоставлении объектов. Это вспомогательный сервис, повышающий удобство пользования, чтобы не интересующие нас данные не отражались в окне соответствий. В нашем случае мы будем работать пока только с номенклатурой, поэтому отметим только этот тип метаданных (см. рис.2).

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

Рис.2 Отметка типов метаданных для сопоставления

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

Рис.3 Пример таблицы соответствий объектов

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

Если мы сейчас выберем команду Загрузить данные, то произойдет заполнение базы приемника. Но результат ничем (почти ничем, об этом "почти" расскажу ниже) не будет отличаться от типовой загрузки, поскольку соответствия установлены автоматически и не изменены.

Теперь создадим в приемнике еще один элемент справочника Номенклатура с наименованием Телевизор JVC (без кавычек) и отредактируем таблицу соответствий: установим загружаемому объекту Наименование=Телевизор "JVC"... в соответствие этот новый элемент. Т.е. мы осуществили подмену объекта приемника, найденного правилами конвертации, другим объектом. То же самое можно было сделать например для элемента Телевизор "SHARP": выбрать существующий элемент и поставить его в соответствие загружаемому объекту. Теперь загрузим данные и посмотрим на результат (см. рис.4).

Рис.4. Результат загрузки данных с ручным сопоставлением объектов

Как видим, в документе присутствует элемент справочника, который мы поставили в соответствие вручную. Напоминаю, я изменил соответствие перед загрузкой. Для наглядности на рис. 4 показано, что в справочнике есть два похожих по наименованию элемента, оба были созданы в приемнике вручную. Элемент Телевизор "SHARP" появился в результате переноса. Причем, этот новый элемент находится в папке Бытовая техника, точно как в источнике и точно по правилам конвертации.

А вот теперь обещанное выше пояснение "почти". Обратите внимание на колонку Зам (Замещать свойства объекта, существующего в базе, свойствами загружаемого объекта). Галочки в ней нет, значит свойства объекта приемника не будут перезаписаны, что и произошло. Если галочку установить и вновь загрузить данные, Телевизор JVC переместится в папку Бытовая техника, но и наименование у него поменяется на Телевизор "JVC"(наименование это ведь тоже свойство). Надеюсь этого достаточно для пояснения назначения флага Зам: если нужно подменить загружаемый объект на существующий и не изменять существующий объект, флаг не устанавливаем. Если нужно заполнить свойства существующего объекта значениями загружаемого (наименование, код, ставка НДС и т.п.), флаг устанавливаем.

Я рекомендую флаг устанавливать. И вот почему. Как уже было сказано, при загрузке данных в непустую базу существует проблема: объекты разных баз, отражающие одни и те же сущности, имеют разные уникальные идентификаторы и не совпадающие значения реквизитов. Выставив соответствия вручную, мы можем избежать дублирования. Но что если при следующем сеансе обмена мы забудем это сделать. Тогда база будет испорчена. Если же перезаписать ключевые реквизиты объекта приемника, реквизиты поиска, то при следующих загрузках соответствие загружаемому объекту будет выставлено автоматически по реквизитам. Разумеется при условии, что в правилах конвертации задан поиск по реквизитам.

Теперь поясню назначение колонки Исп (Использовать данное соответствие объекта при загрузке). Здесь важно понимать, что отказ от использования данного соответствия (описанного в данной строке) не означает отказ от загрузки объекта переноса. Если соответствие не используется, объект загружается по правилам конвертации без подмены ссылкой на существующий в базе объект, т.е. загрузка производится, производится так же как в типовой обработке.

Как сохранить составленные соответствия для будущих обменов. Нужно создать План обмена Полный и использовать его в качестве идентификатора настройки соответствий. Выбирайте его в поле ввода Узел обмена загрузка данных и нажимайте Записать соответствия. План обмена полный создается в разделе Администрирование - Настройки синхронизации данных. Нужно установить флаг синхронизации данных с другими программами, а затем создать собственно настройку синхронизации, указав префикс и наименование. Создавать начальный образ подчиненного узла РИБ не нужно. Нам нужен только узел обмена для выбора варианта соответствий (см. рис.5), никакие возможности подсистемы распределенных информационных баз не используются.

Рис.5 Выбор узла обмена, для которого созданы соответствия

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

Теперь рассмотрим особенности переноса с сопоставлением для связанных данных на примере контрагента и его договора. Создадим в приемнике вручную контрагента и договор и назовем их для наглядности Существующий контрагент и Существующий договор. Выгрузим в файл все тот же документ, показанный на рис.1. При заполнении соответствий из файла загрузки (команда Заполнить соответствия) по понятным причинам соответствия найдены не будут. Укажем их вручную как на рис.6.

Соответствие указано вручную

Рис.6 Соответствие указано вручную

Отмечу, что флаг замещения реквизитов существующих объектов снят. После нажатия Загрузить данные в приемнике появится новый документ, но контрагент и договор в нем будут заменены на существующие (см. рис.7), новых контрагента и договора из документа создано не будет. Поясню, на рис. 6 виден еще один договор (с кодом 00078). Он никакого отношения к документу не имеет, переносится потому, что указан как основной договор у контрагента. Поскольку мы для него соответствия не указали, он запишется в базу-приемник без изменений, причем помеченным как основной договор. У Существующего контрагента таким образом будет два договора:  Существующий договор и новый. Новый договор принадлежит именно Существующему контрагенту, так как контрагент Фирма "LIGHT" в процессе загрузки подменен, в том числе и там, где он является владельцем.

Результат переноса документа

Рис.7 Результат переноса документа

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

Оба варианта являются примерами правильной конвертации. Придраться тут не к чему. А теперь о "неправильностях". Предположим, что выставлено соответствие только для договора, т.е. все так же как на рис. 6, но нет соответствия Существующий контрагент. При этом замена реквизитов у договора Существующий договор также не производится. После загрузки в документе будет указан контрагент Фирма "LIGHT" и договор Существующий договор, который принадлежит другому контрагенту.

Это может быть расценено как ошибка переноса, хотя никакой ошибки конечно нет, все сделано в точном соответствии с настройками: контрагент оригинального документа сохранен, договор подменен, реквизиты существующего договора не изменены, а значит не изменен и владелец существующего договора. Если установить флаг замены реквизитов для Существующего договора, то документ будет более корректным. При записи Существующего договора изменится его владелец, он будет принадлежать отныне контрагенту Фирма "LIGHT", а также его наименование, т.е. его будет "трудно узнать". Это все тот же существующий договор, но изменивший абсолютно все реквизиты, включая наименование и своего владельца - контрагента.

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

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

Вы можете приобрести описанную выше обработку, которая применима в конфигурациях, имеющих в своем составе обработку Универсальный обмен данными в формате XML редакции 2.1.8, т.е. работающих в режиме управляемого приложения, таких как Бухгалтерия предприятия ред.3.0, Комплексная автоматизация ред.2.0, Управление торговлей ред.11 и т.п. Вы можете также приобрести эту обработку в различных комплектах, в составе пакетов из обработок и правил обмена на нашем сайте.

 Наименование проекта

 Цена

 Валюта

 Покупка

Обработка для загрузки данных в формате XML с сопоставлением объектов

 5000

 руб

© Борис Балясников, март 2017г., последние изменения октябрь 2017г.

© ООО "Профи-центр", г.Бирск: тел. (34784) 4-25-50, факс: (34784) 4-25-50, icq: 565351574, 591661865, mail@profiufa.ru +18