gifts2017

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

Опубликовал Павел Колмаков (Stim213) в раздел Обмен - Обмен с другими системами

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

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

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

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

 

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

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

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

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

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

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

 

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

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

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Роман Озеряный (rozer) 24.04.13 17:25
2. Станислав Раташнюк (stanru1) 24.04.13 17:34
отличное решение, спасибо огромное!
3. Владимир (ARL) 01.05.13 11:24
Понравились приемчики, вроде простые - но до них еще нужно догадаться!
4. Alex Bol (zombi81) 11.10.13 18:44
5. Владимир Клименко (KliMich) 20.11.13 13:22
Спасибо! Возьму на вооружение.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа