Сравнение реквизитов справочников и документов в разных базах по COM-соединению в режиме управляемого приложения.


Сравнение реквизитов справочников и документов в разных базах по COM-соединению. Только управляемое приложение. Сравниваются только реквизиты, без табличных частей.

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

Ключевые отличия:

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

UPD. 11.07.2024 Исправлена ошибка при создании элементов формы динамического списка

P.S. Скачивайте, комментируйте, критикуйте (конструктивно!!!! Laughing)

20 Comments

  1. Sirena

    Спасибо, сейчас проверим!

    Reply
  2. rus128

    А что означает реквизит «профиль Инфостарта» в таблице на 1-м рисунке и «свертка» — в таблице на 2-м?

    Reply
  3. ediks

    (2) 1) Я тестировал в своей самописной конфиге. Там есть такой реквизит «Профиль Инфостарта» в документе.

    2) Реквизит «Свертка» может принимать значения +1 и -1. Значение -1 означает, что объект получен из внешней базы. Подробности можно прочитать во встроенной справке к обработке в разделе «Интерпретация полученных результатов»

    Упс, Вы не скачивали. Тогда подробности выложу здесь:

    Интерпретация полученных результатов

    В табличной части обработки присутствует реквизит Свертка, который может принимать значения -1 и 1. Значение -1 означает, что объект выбирался из внешней базы. Соответственно, значение 1 означает, что объект выбирался из текущей базы.

    Если значение свертки = -1 и объект не найден, то это означает, что объект присутствует во внешней базе и отсутствует в текущей.

    Если значение свертки = 1, и нет объекта с таким же UUID, но со значением свертки = -1, то это означает, что объект присутствует только в текущей базе.
    Reply
  4. DmitryKishkin

    Там вроде вместо

    СписокРеквизитов = ОткрытьФормуМодально(«ВнешняяОбработка.СравнениеСправочниковВРазныхБазах.Форма.ФормаВыбораРеквизитов», ПараметрыФормы);

    надо написать:

    СписокРеквизитов = ОткрытьФормуМодально(«ВнешняяОбработка.СравнениеСправочниковДокументовВРазныхБазах.Форма.ФормаВыбораРеквизитов», ПараметрыФормы);

    Reply
  5. ediks

    (5) Да, Вы совершенно правы, есть такой косяк. Исправился.

    Reply
  6. KostyaBu

    Вышеописанный косяк не исправленн! +Обработка не стала работать на торговля 8.2 редакции 11 ругается на

    Функция COMЗначениеВСтрокуXML(Соединение, Значение) Экспорт

    ЗаписьXML = Соединение.NewObject(«ЗаписьXML»);

    ЗаписьXML.УстановитьСтроку();

    Соединение.СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение);

    Возврат ЗаписьXML.Закрыть();

    КонецФункции

    {Форма.УправляемаяФорма.Форма(310)}: Ошибка при вызове метода контекста (ЗаписатьXML)

    Соединение.СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение);

    по причине:

    Неизвестная ошибка

    Неизвестная ошибка

    Reply
  7. ediks

    (7)

    1. Наконец-то исправился.

    2. Насчет УТ 11 — попробовал на демо УТ 11 сравнить справочники «Виды номенклатуры» — вроде все нормально (см. картинку). Версия УТ 11 и платформы — на второй картинке

    Reply
  8. nikolal

    В список версий платформы добавьте «8.3», в поле пароля скройте символы.

    В остальном обработка очень помогла при наведении порядка в Распределенной Информационной Базе.

    Reply
  9. ANDRU48DOP

    Планируете ли сделать обработку в обычной форме?

    Reply
  10. ediks

    (10) Нет, не планирую — есть предыдущая публикация. Правда в ней нет сравнения документов.

    Reply
  11. d@ncer

    Ошибка получения информации набора данных

    по причине:

    Ошибка в запросе набора данных

    по причине:

    {(1, 1)}: Ожидается выражение «ВЫБРАТЬ»

    ошибка при открытии

    Reply
  12. ediks

    (12) Какая конфигурация, платформа?

    Reply
  13. JohnnySE

    Ошибка получения информации набора данных

    по причине:

    Ошибка в запросе набора данных

    по причине:

    {(1, 1)}: Ожидается выражение «ВЫБРАТЬ»

    ошибка при открытии

    8.3.8

    Reply
  14. ediks

    (12), (14)

    Исправил. Спасибо за наводку.

    Под 8.3 изменилось поведение динамического списка. Теперь он в обязательном порядке требует запрос, если установлен флаг «Произвольный запрос»

    Reply
  15. 4ytta

    (7) Тоже вылетает такая ошибка!

    Плюс отбор который накладываю на динамический списка объектов не работает. Т.е. визуально он накладывается, но при Заполнении расхождений обрабатываются все записи по Типу объекта… Это очень не удобно, во вторых чтобы проверить один объект, жду по несколько минут. И еще вопрос, если у меня самописная база, в которой есть справочник Контрагенты со стандартными реквизитами, будет ли работать эта обработка?

    Reply
  16. ediks

    (16) Какой релиз платформы?

    Reply
  17. 4ytta

    (17)

    8.3.14

    С отбором переделал. Отбор пользовательский был.

    Reply
  18. ediks

    (16)

    И еще вопрос, если у меня самописная база, в которой есть справочник Контрагенты со стандартными реквизитами, будет ли работать эта обработка?

    По идее, обработка не привязана к какой-либо конфигурации.

    Reply
  19. ediks

    (16) Сейчас сравнивал контрагентов в 2-х демобазах БП 3.0 и УТ 11. Обе файловые. Ошибок при сравнении не возникло.

    Какая у Вас возникла ошибка, точно такая же как в (7)?

    Reply
  20. 4ytta

    (20)да, один в один. Когда приделал отбор к динамическому списку и стал по одному объекту сравнивать, то ошибок не было. А когда всем списком то вываливалась ошибка. Плюс это не кретично, но пожелания, если выбран реквизит которого нету в базе источнике, то вываливается ошибка.

    Reply

Leave a Comment

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