1с квитирование при обмене
Механизмы обмена данными «1С:Предприятия» позволяют организовывать обмен информацией, хранимой в базе данных, с другими программными системами. К механизмам обмена данными могут быть отнесены:
- Планы обмена,
- XML-сериализация,
- Средства чтения и записи документов XML.
Что такое план обмена
Для того чтобы существовала возможность обмена какими-либо данными с кем-либо, необходимо некоторым образом идентифицировать тех, с кем мы будем обмениваться, и для каждого из них описать перечень обмена. Обе эти задачи позволяет решать объект конфигурации «План обмена». Подобно тому, как элементами данных справочника являются элементы справочника, элементами данных плана обмена являются узлы плана обмена.
Каждый узел идентифицирует участника обмена по данному плану обмена. Кроме этого, в каждом плане обмена всегда существует один предопределенный узел, идентифицирующий данную информационную базу.
В обмене данными могут участвовать:
- объекты базы данных: элементы справочников, документы и т. д.,
- необъектные данные: наборы записей регистров, последовательностей, константы,
- специальный объект встроенного языка – УдалениеОбъекта .
Для упрощения изложения в дальнейшем будем называть эти элементы информационных структур объектами обмена. Разработчик имеет возможность определить состав каждого плана обмена, указав объекты конфигурации, данные которых должны участвовать в обмене по данному плану. При описании состава данных плана обмена разработчик имеет возможность указать для каждого типа объектов признак Авторегистрация . Этот признак определяет, каким образом план обмена будет отслеживать изменения данных.
Возможность отслеживать изменения данных реализована в плане обмена за счет использования механизма регистрации изменений. Работа этого механизма базируется на том, что каждый из объектов обмена имеет свойство ОбменДанными , с помощью которого можно указать, для каких узлов необходимо производить регистрацию изменений этого объекта. Любые изменения объекта обмена сводятся в конечном итоге к записи или удалению объекта обмена.
Так вот, признак Авторегистрация , устанавливаемый при указании состава данных плана обмена, позволяет указать, что параметры обмена данными будут формироваться каждый раз самим механизмом регистрации изменений на основании информации, содержащейся в плане обмена. После автоматического заполнения параметров обмена разработчик имеет возможность внести изменения в сформированные таким образом параметры. Кроме этого, существует возможность отключить авторегистрацию изменений, и тогда параметры обмена данными нужно будет формировать полностью средствами встроенного языка.
Итак, при записи и удалении объектов обмена план обмена формирует записи регистрации изменений. Записи регистрации изменений хранятся в таблицах регистрации изменений, причем для каждого объекта обмена ведется своя таблица. При изменении объекта обмена в таблице регистрации изменений создается столько записей, сколько узлов-получателей указано в параметрах обмена данными у объекта обмена. Каждая запись при этом будет хранить ссылку на свой узел-получатель.
Добавление плана обмена
Раскроем ветвь «Общие» дерева объектов конфигурации и добавим новый объект конфигурации План обмена с именем Филиалы , представление объекта – Филиал . На закладке «Данные» создадим реквизит плана обмена Главный , имеющий тип Булево .
Этот реквизит понадобится нам для того, чтобы разрешать коллизии при обмене данными. Под коллизией понимается ситуация, когда один и тот же объект обмена данными был изменен одновременно в двух узлах. В этом случае мы будем анализировать значение реквизита Главный и принимать изменения только в том случае, если они сделаны в главном узле. В случае коллизии изменения, произведенные не в главном узле, мы будем отвергать.
Теперь определим состав объектов, участвующих в обмене. Для этого на закладке «Основные» нажмем кнопку «Состав».
Создадим основную форму узла и добавим обработчик события формы ПриСозданииНаСервере . Этот обработчик понадобится нам для того, чтобы запретить установку реквизита Главный для предопределенного узла, соответствующего данной информационной базе.
Затем создадим основную форму списка плана обмена, чтобы описать в ней некоторые действия по регистрации нового узла обмена.
Суть этих действий будет заключаться в том, что при регистрации нового узла обмена мы должны будем сформировать для него все необходимые записи регистрации изменений для всех объектов конфигурации, входящих в данный план обмена. Это будет своего рода начальная синхронизация узла обмена всеми данными обмена.
Для этого на закладке «Команды» создадим команду ЗарегистрироватьИзменения .
Кнопка «Зарегистрировать изменения» должна быть доступна только в случае, если текущий узел не является предопределенным для данной информационной базы, иначе регистрация изменений невозможна. Чтобы обеспечить такое поведение кнопки, создадим в модуле формы списка функцию, выполняющуюся на сервере без контекста и возвращающую истину, если переданный в функцию узел является предопределенным.
Затем в окне элементов формы выделим элемент Список , вызовем его палитру свойств и создадим обработчик события ПриАктивизацииСтроки .
Процедуры обмена данными
Для инициализации обмена данными мы используем обработку. Добавим новый объект конфигурации Обработка с именем ОбменДанными . На закладке Формы создадим основную форму обработки. В окне редактора форм на закладке «Команды» создадим команду формы ВыполнитьОбмен .
Процедуры записи и чтения данных
Сами процедуры записи и чтения данных обмена мы разместим в модуле объекта План обмена Филиалы .
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Для лучшего понимания того, о чём пойдёт речь в этой статье, необходимо ознакомиться с моей предыдущей публикацией "Планы обмена. Управляемый режим блокировок".
Рассмотрим работу плана обмена на небольшом примере. Зарегистрируем изменение. Таблицы плана обмена и регистрации изменений будут выглядеть следующим образом:
Теперь выполним выгрузку этого изменения. Вид этих таблиц изменится следующим образом:
Для того, чтобы повторной выгрузки данных не происходило мы можем использовать две стратегии удаления уже отправленных изменений: квитирование и гарантированная доставка. Рассмотрим обе эти стратегии подробнее.
Квитирование.
Однако у этой стратегии есть один нюанс: как понять, что изменение успешно попало в канал гарантированной доставки? Оказывается, что для этого планы обмена реализуют своеобразный проткол двухфазной фиксации транзакции. По сути своей это распределённая транзакция. Давайте посмотрим как это работает:
Схематично весь этот процесс я постарался сделать наглядным при помощи следующей диаграммы:
На этой диаграмме состояние одного изменения показано при помощи блоков 2, 5 и 8. Блоки 3 - 7 являются одним сеансом обмена данными. Независимо от того какую стратегию удаления обработанных изменений мы используем, диаграмма будет одной и той же. Разница заключается только в методике удаления изменений.
Заключение.
На основании анализа работы планов обмена я позволю себе дать следующие рекомендации по их использованию в высоко нагруженных системах:
2. Для того, чтобы доставка была действительно гарантированной, не изобретайте велосипедов - используйте проверенные MQ-решения, например, MSMQ, ActiveMQ или RabbitMQ.
Основные конфликты (см. диаграмму выше) возникают между блоками 1 и 4 за изменение состояния блока 2. Отсюда следующая рекомендация:
В особо тяжёлых случаях вместо "ВыбратьИзменения" вполне можно использовать две отдельные команды.
Первая - код SQL вида (псевдокод, как идея)
UPDATE TOP 1000 SET _MessageNo = _SentNo + 1 WHERE _MessageNo IS NULL,
а вторая - выборка изменений кодом 1С с отбором вида
Вторым по значимости конфликтом (см. диаграмму выше) является конфликт между блоками 1 и 9 за изменение состояния блоков 8. Здесь рекомендация такая же, как и в пункте 3. Короткие транзакции - хорошие транзакции.
Обмен данными с использованием планов обмена и квитирование ( на примере)
Внимание! Данный функционал доступен в "Библиотеке стандартных подсистем", начиная с версии 2.3.1.62.
Настройки конфигурации
Для настройки обмена данными с квитированием на стороне конфигурации нужно зарегистрировать стороннее приложение, с которым будет вестись обмен. Конкретный экран этой настройки может выглядеть несколько по-разному в разных прикладных решениях фирмы «1С». В демо-конфигурации, использовавшейся в примерах, он выглядит так:
Веб-сервис EnterpriseDataExchange
Веб-сервис EnterpriseDataExchange предназначен для двустороннего обмена данными между конфигурацией и сторонними приложениями.
Передача данных из стороннего приложения в информационную базу
Реализуем функцию, принимающую параметры:
- URL веб-сервиса,
- Имя пользователя для соединения с веб-сервисом,
- Пароль,
- Код приложения,
- Имя плана обмена,
- Путь до архивированного файла с данными. Если архив умещается в одном файле – это имя файла с полным путем, включая расширение (например, “C:\Exchange\data.zip”). Если же архив разбит на несколько частей, то это будет имя любого из файлов без расширения и точки (например, “C:\Exchange\data”); предполагается, что это последовательность файлов с расширениями “.001”, “.002” и т.д.
Функция отправляет данные в конфигурацию и дожидается окончания их обработки на стороне конфигурации.
Реализация функции (в виде статического метода):
Пример на Java:
Получение данных из информационной базы сторонним приложением
Для получения данных из информационной базы используется следующая последовательность вызова веб-методов:
- Проверить соединение с приложением с помощью метода TestConnection.
- Выполнить метод PrepareDataForGetting.
- С помощью метода PrepareDataActionResult получить результат выполнения метода PrepareDataForGetting . Если в результате выполнения метода PrepareDataActionResult выяснилось, что метод PrepareDataForGetting еще выполняется (в возвращаемом поле « Status» значение «Active» ), то выполнение метода PrepareDataActionResult необходимо повторять (например, каждые 5 сек.) до тех пор, пока метод PrepareDataForGetting не будет выполнен (в возвращаемом поле « Status» значение поля станет отлично от «Active»).
- Если метод PrepareDataForGetting был выполнен успешно, то получить все части сформированного файла с помощью метода GetDataPart .
- Сообщить приложению, что все файлы получены с помощью метода ConfirmGettingFile .
Реализуем функцию, принимающую параметры:
- URL-адрес веб-сервиса,
- Имя пользователя для соединения с веб-сервисом,
- Пароль,
- Код приложения,
- Имя плана обмена,
- Имя файла (без расширения), в который надо записать полученную информацию. Если полученный файл один – функция прибавит к нему расширение “.zip”, если несколько – прибавит расширения “.001”, “.002” и т.д.
Функция отправляет данные в конфигурацию и дожидается окончания их обработки на стороне конфигурации.
1. Заходим в УТ - Сервис — Обмена данными с 1С Бухгалтерия 8 — Настройка обмена.
В данном случае файловый вариант. Прописываем путь к базе БП.
2. Один из самых важных параметров Перенос себестоимости списания. Для того, чтобы себестоимость формировалась по данным конфигурации БП выбираем Не переносить, т.к. в конфигурацию БП могут быть введены док которые отсутствуют в УТ. Если выбрать Переносить, то колонки Документ оприходования и Сумма списания в док Реализация будут заполнены данными из УТ.
3. Далее укажем дату начала обмена и префикс документов. Префикс Базы будет прибавляться к Префиксу организации, так что количество символов для нумерации уменьшится. Лучше задавать Префикс базы и Префикс организации из одного символа.
4. Не будем делать полную синхронизацию (не известно сколько времени это займет, да и зачем), а выберем вариант в Фоновом режиме. По кнопке Дополнительно можно изменить количество объектов принудительной синхронизации. Оставим без изменения = 500.
5. По кнопке Готово произойдет создание элемента справочника НастройкаОбменаДанными и элменета Плана обмена. Будет предложено произвести обмен. Жмем НЕТ. На рисунке показан элемент справочника НастройкаОбменаДанными и ссылка на узел, элемент Плана обмена.
6. Теперь, если закрыть все окна, то узел обмена можно зайти Сервис - Обмен данными с 1С Бухгалтерия 8 — Выполнить обмен данными. Изменим правила. Поставим дату обмена с 01.06.2007 и обменяемся малым количеством документов.
7. Пока мы не собираемся включать автообмен и закладки Автообмен и Доп настройки автообмена для нас не важны. Перейдем на закладку Дополнительно. По умолчанию Элементов в транзакции = 0. т.е. при обмене будет записываться каждый элемент по отдельности. Это не оптимально. Вспоминаем, что при Проведении по партиям 1С автоматически предлагает 1000. Выбирайте значение от 200 до 1000.
13. Нажимаем «Выполнить обмен». При этом в базе БП можно работать. Все документы загружаются не проведенными.
15. Теперь в базе БП у нас появились не проведенные документы. Заходим в БП Сервис – Проведение документов – выбираем “Проведенные и непроведенные” и период. Здесь внимательно. Надо предупредить пользователей, что сделать документ не проведенным не достаточно. Не нужные документы необходимо, помечать на удаление, а еще лучше регулярно удалять.
16. Не забывайте, если вы удалите «Узел обмена», то в базе останется «План обмена» и привязанный к нему регистр сведений «Соответствие объектов для обмена» останется целым. Регистр придется удалять как-нибудь самим. Такова воля создателя обмена.
1. Заходим в УТ - Сервис — Обмена данными с 1С Бухгалтерия 8 — Настройка обмена.
В данном случае файловый вариант. Прописываем путь к базе БП.
2. Один из самых важных параметров Перенос себестоимости списания. Для того, чтобы себестоимость формировалась по данным конфигурации БП выбираем Не переносить, т.к. в конфигурацию БП могут быть введены док которые отсутствуют в УТ. Если выбрать Переносить, то колонки Документ оприходования и Сумма списания в док Реализация будут заполнены данными из УТ.
3. Далее укажем дату начала обмена и префикс документов. Префикс Базы будет прибавляться к Префиксу организации, так что количество символов для нумерации уменьшится. Лучше задавать Префикс базы и Префикс организации из одного символа.
4. Не будем делать полную синхронизацию (не известно сколько времени это займет, да и зачем), а выберем вариант в Фоновом режиме. По кнопке Дополнительно можно изменить количество объектов принудительной синхронизации. Оставим без изменения = 500.
5. По кнопке Готово произойдет создание элемента справочника НастройкаОбменаДанными и элменета Плана обмена. Будет предложено произвести обмен. Жмем НЕТ. На рисунке показан элемент справочника НастройкаОбменаДанными и ссылка на узел, элемент Плана обмена.
6. Теперь, если закрыть все окна, то узел обмена можно зайти Сервис - Обмен данными с 1С Бухгалтерия 8 — Выполнить обмен данными. Изменим правила. Поставим дату обмена с 01.06.2007 и обменяемся малым количеством документов.
7. Пока мы не собираемся включать автообмен и закладки Автообмен и Доп настройки автообмена для нас не важны. Перейдем на закладку Дополнительно. По умолчанию Элементов в транзакции = 0. т.е. при обмене будет записываться каждый элемент по отдельности. Это не оптимально. Вспоминаем, что при Проведении по партиям 1С автоматически предлагает 1000. Выбирайте значение от 200 до 1000.
13. Нажимаем «Выполнить обмен». При этом в базе БП можно работать. Все документы загружаются не проведенными.
15. Теперь в базе БП у нас появились не проведенные документы. Заходим в БП Сервис – Проведение документов – выбираем “Проведенные и непроведенные” и период. Здесь внимательно. Надо предупредить пользователей, что сделать документ не проведенным не достаточно. Не нужные документы необходимо, помечать на удаление, а еще лучше регулярно удалять.
16. Не забывайте, если вы удалите «Узел обмена», то в базе останется «План обмена» и привязанный к нему регистр сведений «Соответствие объектов для обмена» останется целым. Регистр придется удалять как-нибудь самим. Такова воля создателя обмена.
Похожие FAQ
Еще в этой же категории
Конвертация данных 3.0. Настройка правил конвертации в формате Enterprise Data. Пример использования 65
Задача Передать информацию о контрагентах из УП в БП . Данные передаются в одностороннем порядке, идентификация производится по уникальному идентификатору.Настройка правил конвертации выполняется с помощью специальной конфигурации Конвертация Как отключить узел от распределенной информационной базы? 12
1. Создаешь внешнюю обработку или отчет в ней форме пишешь " ПланыОбмена.УстановитьГлавныйУзел(Неопределено);" 2. Сохраняешь обработку. 3. Закрываешь конфигуратор 4. Запускаешь пользовательский режим. 5. Запускаешь обработку. Еще Вариант ко Автоматическая выгрузка загрузка данных используя регламентное задание 12
Для обмена данными между программами необходимо сделать следующее: 1. При помощи Конвертации Данных создать правила выгрузки данных 2. Нужно чтобы в конфигурации была обработка УниверсальныйОбменДаннымиXML , желательно последней версии! (При помо Планы обмена и их использование 12
Для того чтобы существовала возможность обмена какими-либо данными с кем-либо, необходимо некоторым образом идентифицировать тех, с кем мы будем обмениваться, и для каждого из них описать перечень обмена Обе эти задачи позволяет решать прикладной об Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" 10
Автоматизация обмена между базами используя обработку " Универсальный обмен данными в формате XML" В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки " Универсальный обме Посмотреть все в категории Конвертация данных, Обмен, Перенос
Читайте также: