Синхронизация данных по правилам КД2.0






Новый инструмент для сравнения и загрузки данных, сочетающий в себе:
гибкость запросов (используются для сопоставления объектов);
наглядный вывод отличий;
удобный отбор загружаемых данных;
возможность пообъектной синхронизации двух баз по правилам КД2 с помощью вызова обработки «Универсальный обмен XML» в базе-источнике через COM-соединение.

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

Первый запуск

Для того, чтобы обработка начала сопоставлять данные, необходимо:

  1. На закладке «Настройки» перейти во вкладку «Подключение» и задать там параметры COM-соединения с базой-источником (путь к базе, имя пользователя и пароль). Нажать на кнопку «Проверить подключение» и убедиться, что база-источник доступна.

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

  1. Перейти на закладку «Настройка запросов для сверки» и убедиться, что  по каждому правилу выгрузки для текущей и внешней базы были сгенерированы запросы сравнения (для правил выгрузки вида «Произвольный алгоритм» автоматическая генерация не производится).

После этого можно переключаться на вкладку «Синхронизация» и начинать пользоваться обработкой — сверять существующие объекты и загружать недостающие.

Данные из базы-источника выгружаются по COM с помощью обработки «Универсальный обмен данными XML» — соответственно, она должна быть встроена и в конфигурацию-источник и в конфигурацию-приемник.

Особенности автоматической генерации запросов для сопоставления

  • Для правил выгрузки вида «Произвольный алгоритм» автоматическая генерация не производится
  • При генерации запроса для правил выгрузки документов создаются обязательные параметры «Организация», «НачПериода» и «КонПериода», задающие отборы по периоду и организации.
  • В общем случае для запроса сравнения генерируются поля, соответствующие полям поиска в правилах обмена. Такого сравнения достаточно, чтобы увидеть наличие или отсутствие объекта.
  • Для правил выгрузки документов дополнительно в запросе сравнения генерируются поля «Контрагент»* и «Сумма документа» (в случае наличия у документа таких реквизитов) — чтобы иметь возможность сравнения по этим показателям.
  • Сравнение объектов производится «один в один». Для реализации более сложного сопоставления или для возможности синхронизации данных по правилам вида «Произвольный алгоритм», а также для анализа отличий в разрезе дополнительных полей необходима помощь специалиста, который умеет писать запросы.

*Поскольку сопоставление контрагентов обычно производится по ИНН, то при генерации запроса для описания поля «Контрагент» используется его дочернее поле Контрагент.ИНН (Контрагент.ИНН КАК Контрагент). При выводе в табличное поле «Синхронизации» значение ИНН преобразуется в ссылку на контрагента базы-приемника, имеющего этот ИНН.
То же самое предусмотрено для вывода детальных записей, содержащих элементы справочника Номенклатура (актуально только для самостоятельно написанного запроса): если поле Номенклатура задано ее кодом (Номенклатура.Код КАК Номенклатура), то сопоставление производится по коду, а в табличное поле выводится представление этой номенклатуры из базы-приемника.

Техническая реализация сравнения данных

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

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

Это позволит добиться «многоуровневого» вывода отличий:

  • в основное табличное поле будут выводиться различия на уровне самого объекта,
  • в подчиненное табличное поле — различия в табличной части.

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

Назначение параметров выгрузки данных производится в соответствующем диалоговом окне на вкладке «Настройки».

Некоторые параметры выгрузки пользователь может назначать в пользовательском режиме на вкладке «Синхронизация».

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

В обработку заложена возможность отладки результатов запросов с их последующим сравнением с помощью автоматизированного вызова диалога «Файл — Сравнить файлы».

Можно сравнивать результаты запросов по всем правилам выгрузки или только выбранные.

Преимущества для пользователя

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

  • Стабильная работа
  • Контроль достоверности перенесенных данных
  • Наглядность сравнения отличий
  • Приемлемая скорость вывода сопоставляемой информации
  • Пользовательские фильтры (по организациям, периодам, контрагентам)
  • Возможность произвести загрузку только отобранных объектов.
  • Возможность разделения загрузки объектов по функциональным участкам за счет работы пользователей под своими учетными записями
  • Не используются промежуточные файлы данных (для загрузки используются временные файлы)
  • Удобный интерфейс:
    • Скрываемая панель выбора правил выгрузки;
    • Наглядные отборы, сортировка;
    • Цветовая индикация сравниваемых данных;
    • Выделение цветом и шрифтом отличий;
    • Подсчет сумм, строк.
  • Возможность вывести на печать список отобранных в обработке объектов
  • В случае обнаружения ошибочного отражения операции в БУ, возможность прямо из интерфейса обработки пометить объект на удаление
  • Возможность пометить выбранные объекты, как «Проверенные», чтобы, используя фильтр «Только непроверенные»,  сосредоточиться на анализе остальных отличий.

Преимущества для разработчика

С точки зрения разработчика этот инструмент содержит:

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

Обработка универсальна, не имеет «завязки» на конкретную конфигурацию. Работает на управляемых формах, использует методы платформы, появившиеся в версии 8.3.6.

Использованные источники

  • //infostart.ru/public/297045/ — как базовая идея
  • Функциональность закладки «Сверка результатов запросов» взята на публикации //infostart.ru/public/544800/ (также используется идея «программного сравнения» файлов в тонком клиенте из обработки //infostart.ru/public/292916/ )
  • Реализация сравнения результатов запросов построена на методе сравнения таблиц значений, описанном в //infostart.ru/public/326983/
  • Для загрузки только отобранных документов используется способ, описанный в //infostart.ru/public/86109/
  • Визуализация наложенного на ТЧ отбора реализована при помощи приема из оформления отчетов в УНФ.

31 Comments

  1. Grigoriy251

    А КД2 еще жива? какая последняя версия?

    Reply
  2. vikad

    https://releases.1c.ru/total второй строчкой — 2.1.8.2, дата выхода 11.06.14. А 1С:Конвертация данных 2.0 — это у нее название такое. В списке релизов так называется, так что к номеру версии придираться не стоит.

    Reply
  3. tailer2

    очень хочу посмотреть на «пользователя» в терминах сабжа

    пс: это вовсе не критика продукта

    всегда интересовало: если «доступно и всериоз», то что такое «1снег»?

    Reply
  4. vikad

    «пользователь» — любой человек, заинтересованный в контролируемости обмена. Это может быть «1снег», который разрабатывает правила обмена и хочет разобраться, все ли реквизиты переносятся как надо. Это может быть главбух, консолидирующий информацию из управленческой программы, где сложно уследить за действиями менеджеров в «незакрытом» периоде, и стремящийся избежать проблем отсутствия контроля обмена при реализации сложных схем учета.

    по поводу

    если «доступно и всериоз», то что такое «1снег»?

    — не очень поняла. Поясните, пожалуйста.

    Reply
  5. vikad

    (3) в терминах сабжа «пользователь» — это человек, который осуществляет анализ, работает с данными на закладке «Синхронизация». «Разработчик» — это человек, который настраивает работоспособность этого анализа на закладке «Настройки». Это может быть один и тот же человек. Но запросы для сложного сопоставления объектов классический «пользователь» скорее всего сам не напишет.

    Reply
  6. tailer2

    ну и ладно

    Reply
  7. xan333

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

    Ошибка инициализации модуля: ВнешняяОбработка.СинхронизацияДанныхПоПравиламКД20.Форма.Форма.Форма

    по причине:

    {ВнешняяОбработка.СинхронизацияДанныхПоПравиламКД20.Форма.Форма.Форма(2052,52)}: Переменная не определена (НаправлениеПоиска)

    Позиция = СтрНайти(СтрокаРазличия.ИмяФайла, «.», <<?>>НаправлениеПоиска.СКонца, , 1);

    {ВнешняяОбработка.СинхронизацияДанныхПоПравиламКД20.Форма.Форма.Форма(2052,13)}: Процедура или функция с указанным именем не определена (СтрНайти)

    Позиция = <<?>>СтрНайти(СтрокаРазличия.ИмяФайла, «.», НаправлениеПоиска.СКонца, , 1);

    {ВнешняяОбработка.СинхронизацияДанныхПоПравиламКД20.Форма.Форма.Форма(3023,23)}: Процедура или функция с указанным именем не определена (СтрРазделить)

    МассивПолейПоиска = <<?>>СтрРазделить(ПолеПоиска, «,»);

    {ВнешняяОбработка.СинхронизацияДанныхПоПравиламКД20.Форма.Форма.Форма(3079,22)}: Процедура или функция с указанным именем не определена (СтрРазделить)

    МассивПолейПоиска = <<?>>СтрРазделить(ПолеПоиска, «,»);

    Reply
  8. xan333

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

    Reply
  9. vikad

    (7) обработка использует методы платформы, появившиеся в версии 8.3.6.

    об этом указано в описании

    Reply
  10. vikad

    (8) завязки на внешние процедуры нет ни одной

    Reply
  11. alex-l19041

    (8)

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

    — это ограничивает применение…

    Reply
  12. xan333

    у меня версия платформы 8.3.9 вы пробовали запускать обработку в конфигурациях не содержащих БСП ? Просто создайте новую базу с пустой конфигурацией, запустите в режиме исполнения тонкий клиент и попробуйте открыть

    Reply
  13. vikad

    (11) см (10)

    Reply
  14. vikad

    конечно пробовала. У конфигурации есть режим совместимости?

    Reply
  15. vikad

    СтрНайти, СтрРазделить, НаправлениеПоиска — это методы, появившиеся в платформе 8.3.6. Для них в конфигурациях на более старых версиях можно сделать замену. Это несложно.

    Reply
  16. xan333

    Виктория, спасибо! Вы правы, дело в свойстве режим совместимости конфигурации, он должен быть не ниже 8,3,6

    Reply
  17. xan333

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

    Reply
  18. vspl

    Если я запускаю обработку в базе приемнике — УТ11.4, а база источник — УТ 10.3. (нетиповая), будет работать без танцев с бубнами ?

    Reply
  19. vikad

    (18) будет, конечно

    Reply
  20. avz_1C

    Виктория, восхищен профессионализмом.

    Звезду поставил.

    Приобрел.

    Reply
  21. catlina

    При нажатии на кнопку Сформировать запросы для текущей и внешней базы появляется ошибка «Дублирующеся имя поля сумма». Пытаюсь выгрузить из базы-источника бухгалтерия 3.0.56 в базу- приемник бухгалтерия 3.0.56 счет на оплату покупателю.

    Reply
  22. vikad

    (21) на закладке «Настройка правил обмена» для строки «Счет на оплату покупателю» какие настройки? Можно увидеть скриншот?

    Reply
  23. catlina

    Скриншот прилагается

    Reply
  24. catlina

    Почему в реквизитах соответствия Ссылка, а не Дата и Номер. Прилагаю скриншот из КД 2.

    Reply
  25. vikad

    (24) Ссылка потому что в КД 2 для этого ПКО стоит галочка «Искать объект приемника по внутреннему идентификатору объекта источника», которая означает, что по факту в качестве поля соответствия используется уникальный идентификатор (Ссылка) — у вас для всех ПКО значок в виде лупы.

    По поводу «Дублирующее имя поля Сумма» — нашла ошибку, исправила, выложила в файлах публикации. Если кто-то из ранее скачавших тоже столкнулся с ошибками при формировании запросов соответствия, пишите в личку, вышлю письмом.

    Reply
  26. catlina

    Очень удобная обработка. Спасибо автору!!! Есть одно пожелание, чтобы в обработке были кнопки и ПолучитьДанные, и Отправить данные. Спасибо еще раз!!!

    Reply
  27. djam_arttek

    Отличная обработка. Жалко не рабочая где-то кроме Windows

    Reply
  28. tambu

    @vikad Виктория, спасибо за обработку. Полезная вещь. Одно меня насторожило: я добавил в сравнение поле «склад». При этом в правилах склад подменяется. Например в источнике у нас склады привязаны к помещениям, а в приемнике используется один «основной скл

    Reply
  29. vikad

    (29) Обработка сравнивает результаты запросов, полученные из разных баз. Поскольку ссылки в разных базах скорее всего будут различными, поля сравнения должны быть строкового/числового типа. Поэтому, если вы хотите, чтобы в поле Склад выводилось наименование склада и сравнивалось наименование склада в источнике и приемнике, то поле Склад в запросе должно быть

     ВашОбъект.Склад.Наименование КАК Склад

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

    Может я что-то не настроил, или правила конвертации при сравнении не учитываются?

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

    Правила конвертации используются только при загрузке, для этого используются стандартные возможности «Универсального обмена XML» (сама обработка никак на правила конвертации не влияет).

    Reply
  30. tambu

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

    Reply
  31. AlexandrSmith

    (26) Правда, очень удобная.

    Reply

Leave a Comment

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