План обмена в формате "EnterpriseData" для 1С 7.7





Пример организации надёжной синхронизации данных через универсальный формат «EnterpriseData» между конфигурациями на базе 1С 7.7 и произвольными приложениями.

Обработка настроена на выгрузку и загрузку измененных документов Реализация и Заказ покупателя. В ручном режиме возможно добавить к выгрузке элементы справочников Номенклатура, Контрагенты, Организации.

Требования

  • 1С Предприятие 7.7 для SQL
  • Наличие внешней компоненты 1cpp.dll (для прямых запрос к SQL)
  • Наличие внешней компоненты v7plus.dll (для работы с XML)
  • Наличие УРБД (для регистрации измененных данных)

Установка

В режиме конфигуратора, через меню Администрирование — Распределенная ИБ — Управление, добавляем новую периферийную ИБ (код EDI, только получатель). Выгрузку данных не производить. 

Добавление нового узла ИБ

В режиме конфигуратора, для документов Реализация и Заказ покупателя изменим параметры миграции. Область распространения либо Все информационные базы, либо Место создания и центр с дополнением «EDI». Автоматическая регистрация изменений включена.

Параметры миграции

В режиме предприятия, запускаем обработку и через кнопку «Дополнительно…» выбираем пункт меню «Активировать новый узел». После активации, необходимо перезапустить базу.

Активация узла

Для программного вызова обмена, нужно открыть форму с параметром «ЗапуститьСинхронизацию». Например:

ОткрытьФорму("Отчет","ЗапуститьСинхронизацию","c:REPOExchangePlan77EnterpriseData_1_2_1.ert");

Техническая информация

Для хранения идентификаторов из периферийного узла, в каталоге ИБ создается файл ref7ref8.DBF.

GUID ссылочных данных в ИБ создается на основании данных функции ЗначениеВСтрокуВнутр.

Каталог обмена и номер последнего полученного пакета сообщения сохраняется в каталоге ИБ, в файле EnterpriseData.cfg.

Номер отправляемого сообщения вычисляется по данным УРБД.

24 Comments

  1. binex
  2. CheBurator

    Правильно я понимаю, что «между » УРБД EDI и собственно выгрузкой я смогу вставить сфои фильтры/код, чтобы например избежать ситуации когда «перемещение тмц» (миграция место создания и центр) созданное в центре уйдет только на току-склад-получатель, а не на все точки?

    Reply
  3. binex

    Если вы будете выгружать только через эту обработку, то естественно вы можете контролировать то что выгружаете. Но регистрация изменений всё-равно происходит в соответствии с настройками миграций.

    К примеру, в данной версии обработки, стоит фильтр, не выгружать заказы, которые не были ранее загружены из узла «EDI». Хотя все заказы регистрируются в УРБД.

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

    Reply
  4. binex

    Обновил версию. Парсинг XML через объект XmlLiteReader, компоненты 1С++

    Reply
  5. CheBurator

    прочитал!

    Reply
  6. iddqd

    Спасибо огромное!

    Пишу сейчас нечто аналогичное, ваша обработка очень сильно помогла!

    Отдельно хочу отметить, что код просто приятно читать 🙂

    Reply
  7. Xershi

    Возьму на заметку. Интересно когда клюшки вымрут как шестерка.

    Reply
  8. iddqd

    (7) XP вон тоже все ждут-ждут.. )

    Reply
  9. binex

    (6)

    код просто приятно читать

    Спасибо! Стараемся. ))

    Небольшое замечание — в обработке не проработана очистка таблицы 1SDWNLDS. Не сильно прирастает записью.

    Reply
  10. palax

    Все красиво, но не могу эту красоту на практике применить. Банальный вопрос 1CPP.dll не хочет регистрироваться#k8SjZc9Dxk

    — копировал в папку C:WindowsSysWOW64 библиотеку

    — запускал команду : C:WindowsSysWOW64
    egsvr32 1CPP.dll

    Результат:

    ХМЛРидер = СоздатьОбъект(«1cpp.XmlLiteReader»);

    {D:………..ENTERPRISEDATA_1_2_1.ERT(1129)}: Неудачная попытка создания объекта (1cpp.XmlLiteReader)

    Люди подскажите что не так?

    Reply
  11. DenisCh

    (10)1с++ вроде регистрировать не надо. Положи её в каталог bin или в каталог иб

    И да, сначала её надо загрузить…

    Reply
  12. binex

    Может быть версия 1С++ не та.

    Reply
  13. palax

    (11), тоже делал, не помогло

    Reply
  14. palax

    (12)

    как посмотреть?

    Reply
  15. binex
  16. binex

    https://github.com/binexekb/ExchangePlan77/tree/274fe7186652b013bc45d8a7969­c3585cb2fee2f

    Здесь версия без XmlLiteReader

    Reply
  17. Solikamsk

    Ну вот почти то, что искал. Реально крутая штука! У меня достаточно трудоемкая задача и явно не на один месяц: перенос из самописанной базы 7.7 для инвесткомпании в новую 8.3. (Новой конфигурации ещё нет 🙂 ) Этот перенос не будет разовым, я подозреваю долгое время две базы будут работать параллельно, в один момент явно не перейти.. Сначала хотел конвертацию данных 2.0, но потом будет стоять задача сверки данных, особенно остатков.. И я хочу в формате EnterpriseData из 8-ки, плюс тот-же формат из 7-ки и дальнейшее сравнение двух файлов. Т.е. желание двух зайцев убить — и перенос, и сравнение.

    Reply
  18. Solikamsk

    В пакетах, которые приходят из 8-ки, ожидаются «MessageNo». Как в типовой формат «EnterpriseData» вставляются эти номера? Ну и контроль загрузки в 8-ку какой-нибудь есть? Т.е. Пакет принялся, но сам объект по каким-то причинам не записался. Желательно повторить отправку.

    Reply
  19. binex

    (18)

    Как в типовой формат «EnterpriseData» вставляются эти номера?

    Номер берётся из плана обмена. Стандартный реквизит.

    (18)

    Ну и контроль загрузки в 8-ку какой-нибудь есть? Т.е. Пакет принялся, но сам объект по каким-то причинам не записался. Желательно повторить отправку.

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

    Reply
  20. erinsergey

    Денис, как я понял, обмен нужно выполнять только из самой обработки?

    Можно ли воспользоваться стандартным механизмом УРИБ («Управление распределенными данными» — «Выгрузить данные» или «Загрузить данные» или «Автообмен»)?

    Reply
  21. binex

    (20)

    Вы хотите делать Выгрузку/загрузку в каком-то вашем формате. Этот формат должен быть где-то описан алгоритмически. Описать его можно в обработке (там сейчас описан формат ED для нескольких типов данных).

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

    Reply
  22. Solikamsk

    Денис, ещё вопрос.

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

    Reply
  23. Solikamsk

    И у меня, кстати, через план обмена не проходит загрузка

    {mngbase/DataExchangeReadChanges.lf(90)}: Ошибка при вызове метода контекста (НачатьЧтение)

    Message.BeginRead(Reader);

    по причине:

    Неправильный формат сообщения

    Ясно, что надо под новый формат подстраиваться, но неясно какой он..

    Reply
  24. Solikamsk

    С последними вопросами я разобрался, а вот с контактной информацией контрагента проблема.

    Я пытаюсь вставить строку вида:

    «<ЗначенияПолей><КонтактнаяИнформация xmlns=»http://www.v8.1c.ru/ssl/contactinfo» …»

    и вот амперсант в самом файле выглядит как

    «<ЗначенияПолей>&lt;КонтактнаяИнформация ..»

    как побороть?

    Reply

Leave a Comment

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