Организация обмена с прочими программами через XML. Имитация двухстороннего обмена без именения конфигурации

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

Рассмотрим на простом примере.

Вам нужно обновлять номенклатуру на сайте. Если в 1С изменили номенклатуру, то на сайте она должна обновиться — наименование,код,артикул и пр. Соответственно, выгружать нужно только изменившуюся номенклатуру, все 100500 позиций выгружать нет смысла.

Сделать это можно многими способами, особенно, если конфигурация доступна к изменению. Я предлагаю способ для конфигурации на поддержке, без изменения конфигурации. Это будет выгрузка xml файлика с данными, который ваша cms будет читать и обрабатывать.

 

В каждой типовой есть план обмена Полный. В его составе все основные объекты конфигурации, его и возьмем.

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

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

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

При этом, после выгрузки, для обоих случаев очищаем регистрацию ТекущейВыгрузки, а для второго случая(файла нет) — удаляем регистрацию узла ВсяВыгрузка.

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

 

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

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

Данный функционал с успехом реализован в БП 2.0, с выгрузкой поступлений в стороннюю программу

5 Comments

  1. rozer

    оригинально 😀

    Reply
  2. stanru1

    отличное решение, спасибо огромное!

    Reply
  3. ARL

    Понравились приемчики, вроде простые — но до них еще нужно догадаться!

    Reply
  4. zombi81

    Отличный способ.

    Reply
  5. KliMich

    Спасибо! Возьму на вооружение.

    Reply

Leave a Comment

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