Сравнение GUID Справочников Номенклатура, Контрагенты, Подразделения в разных информационных базах


Есть две базы Управление торговлей 10.3 и Бухгалтерия предприятия 2.0. Между ними настроен обмен. "Бухгалтерия предприятия": документ "Поступление на расчетный счет" — указан контрагент Иванов с кодом Б0001. Делаем обмен. "Управление торговлей": документ "Платежное поручение входящее" — указан контрагент Иванов с кодом Т0002. Вопрос: Почему у контрагента Иванов разные коды?

Доброго времени суток.

Мне достались базы «Бухгалтерия предприятия 2.0» и «Управлние торговлей 10.3», между которыми настроен обмен. Пользователи заметили, что есть контрагенты, которые в разных базах имеют разные коды 1С, орфографически разные наименования, но при выгрузке документов, машина каким то образом понимает что контрагент «ИП Иванов» с кодом Б0001 в «Бухгалтерии» соответствует контрагенту «Иванов И.И.» с кодом Т0002 в «Торговле». Попросили разобраться почему такое происходит.

Ответ конечно лежит на поверхности. GUID у этих объектов в «Торговле» и в «Бухгалтерии» одинаковый. Для того чтобы понять как исправлять данную ситуацию, было решено получить список объектов, у которых GUID одинаковый, а код и/или наименование не совпадают.

Собственно эту адачу и решает представленная в этой публикации обработка.

Как пользоваться:

1. открываем обработку в двух базах.

2. Выбираем Справочник, который будем сарвнивать, и кликаем на кнопке «Выполнить»

3. Если необходимо пользуемся отбором.

4. Кликаем по кнопке «Заполнить т отчета».

5. Выделяем заполненную таблицу отчета в одной из баз, и через буфер обмена переносим ее во вторую базу в таблицу для сравнения.

6. Кликаем по кнопке «Сравнить», получаем заполненную таблицу — резултат сравнения. Если результ сравнения необходимо вывести на печать, вызываем контекстное меню, кликнув правой кнопкой мыши на таблице «Результат сравнения», выбираем «Вывести список».

Имея список несовпадений, можно уже решать что с ними делать.

Все.

P.S. Как такая ситуация могла возникнуть я ответить затрудняюсь, т.к. после изменения кода или наименования в одной базе, при обмене эти изменения должны реплицироваться в другую… короче не очень понятно, если у кого-нибудь есть предположения как такое могло произойти, поделитесь в комментариях.

23 Comments

  1. kasper076

    А в РС «СоответствиеОбъектовДляОбмена» смотрели?

    Reply
  2. SpartakM

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

    полезная может быть вещь…

    Reply
  3. kasper076

    (2) SpartakM, а при чем план обмена?

    Reply
  4. SpartakM

    (3)а как по Вашему данные попадают в этот регистр?

    и к чему идет привязка объектов в этом регистре?

    Reply
  5. kasper076

    Обработка.ОбменДаннымиXML.Модуль

    Процедура ЗарегистрироватьСоответствиеОбъектовДляОбмена(СсылкаНаОбъект, СвойстваПоиска)
    …
    НаборЗаписей = мМенеджерРегистраСоответстствийОбъектов.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.УзелОбмена.Установить(УзелОбменаЗагрузкаДанных);
    НаборЗаписей.Отбор.СсылкаВДругойИБ.Установить(КлючВИсточнике);
    НаборЗаписей.Отбор.СобственнаяСсылка.Установить(СсылкаНаОбъект);
    
    СтрокаНабора = НаборЗаписей.Добавить();
    СтрокаНабора.УзелОбмена = УзелОбменаЗагрузкаДанных;
    СтрокаНабора.СсылкаВДругойИБ = КлючВИсточнике;
    СтрокаНабора.СобственнаяСсылка = СсылкаНаОбъект;
    СтрокаНабора.ИмяТипаПриемника = ИмяТипаВИсточнике;
    
    НаборЗаписей.Записать();
    
    КонецПроцедуры
    

    Показать

    Вот так можно данные туда записать.

    УзелОбменаЗагрузкаДанных — узел плана обмена. Используется для логического разделения данных между базами, с которыми осуществляется обмен.

    КлючВИсточнике — ГУИД объекта в базе источнике.

    СсылкаНаОбъект — Ссылка на объект в базе приемнике.

    ИмяТипаВИсточнике — строковое представление типа объекта в базе источнике, для более удобного получения доп информации о загружаемом объекте из файла переноса данных.

    Reply
  6. EarlyBird

    (3) kasper076,

    а при чем план обмена?

    обмен не всегда делается через план обмена, представляешь? Бывает, люди сами пишут правила в КД.

    И в этом случае РС СоответствиеОбъектовДляОбмена не используется вообще.

    Reply
  7. kasper076

    (6) EarlyBird, представляю. Потому и не понимаю при чем тут план обмена. Я использую этот РС в самописном обмене без использования плана обмена.

    Reply
  8. SpartakM

    (7)Пример:

    из разных УТ, в базу БП должны загружаться данные. План обмена не используется.

    ТоварА — в баз УТ1 называется как ТоварА, а в Базе УТ2 — ТовА. в БП уже есть этот товар, как ТоварА (ссылка совпадает с УТ1).

    что запишется в твой регистр а этом случае?

    Reply
  9. kasper076

    (8) SpartakM, зависит от того, по какому ключу синхронизирутся данные. Может у них Коды одинаковые.

    Reply
  10. SpartakM

    (9)коды, ссылки и наименование — разные.

    Reply
  11. DeepSnorkler

    (10) SpartakM, и как в этом случае поможет план обмена?

    Reply
  12. kasper076

    (10) Вот что запишется

    НаборЗаписей = мМенеджерРегистраСоответстствийОбъектов.СоздатьНаборЗаписей();
    //НаборЗаписей.Отбор.УзелОбмена.Установить(УзелОбменаЗагрузкаДанных);
    НаборЗаписей.Отбор.СсылкаВДругойИБ.Установить(КлючВИсточнике);
    НаборЗаписей.Отбор.СобственнаяСсылка.Установить(СсылкаНаОбъект);
    
    СтрокаНабора = НаборЗаписей.Добавить();
    //СтрокаНабора.УзелОбмена = УзелОбменаЗагрузкаДанных;
    СтрокаНабора.СсылкаВДругойИБ = КлючВИсточнике;
    СтрокаНабора.СобственнаяСсылка = СсылкаНаОбъект;
    СтрокаНабора.ИмяТипаПриемника = ИмяТипаВИсточнике;
    
    НаборЗаписей.Записать();

    Показать

    Reply
  13. SpartakM

    (11) вообще-то к узлу обмена идет привязка…

    каждому узлу — свое соответствие объектов…

    Reply
  14. kasper076

    (13) SpartakM, это же справочник. Так? Соответственно разделение его по узлам не требуется. Он один для всех баз. Данных записанных в этот РС хватит для идентификации объекта в приемнике.

    Reply
  15. DeepSnorkler

    (13) SpartakM, как я понимаю, речь шла о том, чтобы не использовать план обмена для регистрации объектов и их выгрузки, используя стандартные механизмы…

    Reply
  16. kasper076

    (15) DeepSnorkler, вообще изначально речь шла о том, почему элемент справочника в одной базе, соответствует элементу справочника в другой, не смотря на то, что у них разные коды. Автор решил, что такое возможно только при одинаковых ГУИДах у этих объектов. А я с ним не согласился.

    Reply
  17. DeepSnorkler

    (16) kasper076, описанное изначально могло случиться по разным причинам. Например, сделали обмен БП=>УТ, ручками или обработкой поменяли у контрагента Иванов код в УТ, в правилах обмена прописано искать контрагента по уникальному идентификатору, с документом переносится ссылка, контрагент не переписывается, а берется из справочника в УТ, а там стоит код Т0002… Ну как-то так…

    Reply
  18. DeepSnorkler

    (16) kasper076, и таки да — вы правы, виноват в таком случае РС «СоответствиеОбъектовДляОбмена»…

    Reply
  19. kasper076

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

    Reply
  20. chmv

    Супер нужная вещь. Не могли Бы Вы мне прислать на chmv2005@mail.ru

    Заранее огромное спасибо

    Reply
  21. sobeyko2008

    А как обработку развернуть на весь экран?

    Reply
  22. sobeyko2008

    Чето обработка вообще не соответсвует картинкам и описанию. Или я Туплю…

    Reply
  23. kiberiq

    А если необходимо сравнить не по GUID’ам, а сопоставить иные реквизиты? Данная обработка уже не поможет. Зато придет на помощь обработка http://infostart.ru/public/257211/ позволяющая делать это и многое другое.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *