К главной страницы ООО ИнфоПрог Контактный телефон: (044) 493-17-94
Электропочта: info@infoprog.com.ua
Українська | Русский




Зарегистрироваться

Приложение SiebelWebservice1c

Версия для печати

svn://www.infoprog.com.ua/infoprog/siebelwebservice1c

Разделы

Авторы:

Схема работы

Обработка таблицы TemporaryTableSQL
Приложение состоит из двух частей: Приложение работает с: Все вызовы из Siebel в 1С проходят через веб-приложение и попадают в 1С сразу в понятном для нее формате, то-есть на стадии веб-приложения выполняется преобразование. Вызовы же из 1С в Siebel не попадают в него мгновенно, а работают следующим методом: при возникновении измененний данных в 1С, дополнительные методы 1С перехватывают их и сохраняют информацию об этом в специальной таблицы другой базы данных (Journal.TemporaryTableSQL) каждая строка таблицы это событие, на этом ее работа завершается. Каждый некоторый период времени веб-приложение выбирает события из TemporaryTableSQL и основываясь на них вызывает Siebel.

Алгоритмы работы

Создание или измененние данных в 1С
  • 1C создает добавляет в TemporaryTableSQL строку описывающиее событие;
  • Веб-приложение выбирает строку из TemporaryTableSQL;
  • Веб-приложение получает из 1С объект который добавился или изменился, для этого используется функция 1С ReturnEntity() В эту функцию передаются 2 параметра: IDEntity и Entity, где IDEntity – идентификатор сущности, а Entity – название сущности. В зависимости от значения параметра Entity вызываются следующие функции:
    • ReturnCustomer() – возвращает таблицу, содержащую данные о клиенте;
    • ReturnProduct() – возвращает таблицу, содержащую данные о продукте;
    • ReturnOwner() – возвращает таблицу, содержащую данные о сотруднике;
    • ReturnOperator() – возвращает таблицу, содержащую данные о операторе;
    • ReturnStorage() – возвращает таблицу, содержащую данные о складе;
    • ReturnPaymant() – возвращает таблицу, содержащую данные о платеже или платежах;
    • ReturnOrder() – возвращает таблицу, содержащую данные о шапке документов заказ;
    • ReturnProductOrder() – возвращает таблицу, содержащую данные о табличной части заказа.
  • После возврата данных веб-сервису происходит вызов методов addEntityXXX/changeEntityXXX соответсвующей сущности Siebel (на текущий момент их несколько: customer, order, product, owner);
  • Если передача был успешной, то от Siebel вызывает метод веб-сервисов ok();
  • Веб-сервис вызывает процедуру 1С DeleteEvent(). Эта процедура удаляет событие с заданным идентификатором из временной таблицы.
  • В противном случаи Siebel вызывает метод веб-сервисов error() куда передает текст ошибки;
  • Веб-сервис вызывает процедуру 1С ChangeEvent(). Эта процедура устанавливает в событие текст ошибки.
Удаление данных из 1С
  • 1C создает добавляет в TemporaryTableSQL строку описывающиее событие;
  • Веб-приложение выбирает строку из TemporaryTableSQL;
  • Веб-приложение вызывает метод удаления соответсвующей сущности Siebel вызывая метод deleteEntityXXX();
  • Если передача был успешной, то от Siebel вызывает метод веб-сервисов ok();
  • Веб-сервис вызывает процедуру 1С DeleteEvent();
  • В противном случаи Siebel вызывает метод веб-сервисов error() куда передает текст ошибки;
  • Веб-сервис вызывает процедуру 1С ChangeEvent().
Создание данных в Siebel
  • Siebel вызывает соответсвующий метод веб-сервисов ServiceXXX.add();
  • Веб-приложение сохраняет вызов в очереди и отдает управление Siebel;
  • Очередь выбирает очередной вызов и вызывает CreateNewEntity() с параметрами Entity и EntityData, где Entity – название сущности, а EntityData – список значений данных о сущности. Эта функция возвращает идентификатор объекта. В зависимости от значения параметра Entity будут вызваны следующие функции:
    • CreateNewCustomer() – создает новый элемент справочника КлиентыФиз и возвращает его идентификатор;
    • CreateNewProduct() – создает новый элемент справочника ТМЦ и возвращает его идентификатор;
    • CreateNewOwners() – создает новый элемент справочника Сотрудники возвращает его идентификатор;
    • CreateNewOrder() – создает новый документ заказ и возвращает его идентификатор;
    • AddProductToOrder() – эта процедура добавляет продукты в табличную часть документа заказ.
  • В случаи успешного выполненния очередь вызывает метод Siebel deleteRecord() и передает уникальный код объекта в 1С;
  • В случаи неудачного выполненния очередь вызывает метод Siebel changeRecord() и передает текст ошибки;
Измененние данных в Siebel
  • Siebel вызывает соответсвующий метод веб-сервисов ServiceXXX.change();
  • Веб-приложение сохраняет вызов в очереди и отдает управление Siebel;
  • Очередь выбирает очередной вызов и вызывает Если из Siebel приходит событие «Change», то веб-сервис вызывает функцию 1C ChangeEntity() с параметрами Entity и EntityData, где Entity – название сущности, а EntityData – список значений данных о сущности. Эта функция возвращает результат успешна ли была операция. В зависимости от значения параметра Entity будут вызваны следующие функции:
    • ChangeNewCustomer() – находит элемент справочника КлиентыФиз по заданному идентификатору и замещает все его данные;
    • ChangeNewProduct() – находит элемент справочника ТМЦ по заданному идентификатору и замещает все его данные;
    • ChangeNewOwners() – находит элемент справочника Сотрудники по заданному идентификатору и замещает все его данные;
    • ChangeNewOrder() – находит документ заказ по заданному идентификатору и замещает все его данные;
    • AddProductToOrder() – эта процедура добавляет продукты в табличную часть документа заказ.
  • В случаи успешного выполненния очередь вызывает метод Siebel deleteRecord();
  • В случаи неудачного выполненния очередь вызывает метод Siebel changeRecord() и передает текст ошибки;
Удаление данных в Siebel
  • Siebel вызывает соответсвующий метод веб-сервисов ServiceXXX.delete();
  • Веб-приложение сохраняет вызов в очереди и отдает управление Siebel;
  • Очередь выбирает очередной вызов и вызывает функцию 1C DeleteEntity() с параметрами Entity и EntityData, где Entity – название сущности, а EntityData – список значений данных о сущности. Эта функция удаляет элемент с заданным идентификатором;
  • В случаи успешного выполненния очередь вызывает метод Siebel deleteRecord();
  • В случаи неудачного выполненния очередь вызывает метод Siebel changeRecord() и передает текст ошибки;

Описание веб-приложение

Файл настроек

Образец, скачать можно siebelwebservice1c.xml:
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <config>
        <path1c>C:/marina/bd96~1/11253~1/1csiebel/1C_centr</path1c>
        <login1c>test</login1c>
        <password1c>1</password1c>
        <monopoly>false</monopoly>
        <complexStringDelimiter>\|</complexStringDelimiter>
        <productCountParseDelimiter>\\|</productCountParseDelimiter>
        <pop1cEventsPeriod>10000</pop1cEventsPeriod>
        <pop1cEventsCount>20</pop1cEventsCount>
        <productCountBuildDelimiter>|</productCountBuildDelimiter>
        <orderProductParseDelimiter>\\|</orderProductParseDelimiter>
        <orderProductBuildDelimiter>|</orderProductBuildDelimiter>
        <paymentBuildDelimiter>|</paymentBuildDelimiter>
    </config>
    
Описание файла настроек:

Схема

Общая схема приложения:
Схема приложения
Указанные следующие модули:

Сервисы

Со стороны приложения Siebel существуют такие веб-сервисы:

Описание конфигурация 1С

Перехват измененний данных в 1С

Все измененния данных в 1С описаных ниже сохраняются в виде событий в специальную таблицу TemporaryTableSQL отдельной базы данных Journal. Событие это строка этой таблицы которая содержит следующие данные: тип события, тип сущности, код сущности, код события, дата

В следующих справочниках на соответствующих таблицах базы данных 1С работают по 2 триггера: первый - на изменение и удаление строки таблицы, второй – создание строки таблицы.

Имя справочника Таблица в базе данных 1с
КлиентыФизSC74
ТМЦSC555
СотрудникиSC1345
ОператорыSC659
СкладыSC737

Триггеры отлавливают создание, изменение и удаление данных не зависимо от того, программное это изменение или изменение пользователями, в т.ч. изменениями данных по УРБД или через OLE-объекты. Тригерры на основе данных изменений создают записи событий в таблицы TemporaryTableSQL базы данных Journal.

Для перехвата проведения документов, а также перепроведения в процедуре ОбработкаПроведения() модуля документа добавлен вызов процедуры глИзменение(). Процедура глИзменение() делает запись в таблицу TemporaryTableSQL базы данных Journal. В случае проведения документа в таблице TemporaryTableSQL будет создано событие с полем "Operation" = "add". В случае перепроведения документа поле "Operation" = "change".

Описание процедур и функций глобального модуля 1С

Все прямые запросы написаны с помощью компоненты 1С++. Эта компонента у заказчика была уже установлена. Установка этой компоненты подразумевает наличие файла 1cpp.dll в каталоге 1cv77\BIN.

Процедура установки веб-приложения:

Процедура установки части 1С:

Проверка работоспособности

Rambler's Top100