Интеграция удаленных приложений "1С:Предприятие" и MS Access

Интеграция удаленных приложений "1С:Предприятие" и MS Access

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ

Государственное образовательное учреждение высшего профессионального образования

Южно-Российский государственный технический университет

(Новочеркасский политехнический институт)

Волгодонский институт (филиал)

Пояснительная записка

к курсовой работе по дисциплине "Корпоративные информационные системы"

на тему: Интеграция удаленных приложений 1С Предприятие и MS Access

Волгодонск 2007



Содержание

1. Постановка задачи

2. Инструкция для пользователя

3. Инструкция для программиста

4. Тестовый пример

Список литературы


1. Постановка задачи

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

Предположим, в главном офисе предприятия основная база данных сотрудников была организована в "1С: Предприятие" в типовой комплексной конфигурации "Бухгалтерия". В филиалах базы данных сотрудников организованны в MS Access. В базе данных главного офиса должны храниться все данные о сотрудниках, работающих в филиалах, а так же должен вестись учет об уволенных и вновь принятых сотрудниках, производиться расчет зарплаты и другие финансовые и налоговые операции. Поэтому необходимо, чтобы главный офис и филиалы обменивались данными.

Таким образом, заача сводится к обновлению в головном офисе данных о сотрудниках удаленных филиалов.

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

2. Инструкция для пользователя

Программное средство было разработано в среде Delphi. Приложения могут использоваться в ОС Windows 2000 и выше.

И клиент, и сервер должны иметь доступ к сети с протоколом TCP/IP.

Для использования данной программы необходимо открыть файл "Клиент.exe". При его запуске пользователю предоставляется интерфейс, следующего вида:



Рисунок 1 - Приложение на стороне клиента

Содержимое полей "Порт сервера", "IP сервера" является статичным, т.е. известно заранее. Чтобы произошло соединение, пользователь должен нажать на кнопку "Connect", при этом название кнопки измениться на "Disconnect" и соответственно измениться функция – при нажатии на нее произойдет отключение от сервера.

Затем пользователь на клиентской стороне нажимает кнопку на форме "Отправить файл". При этом сначала происходит чтение данных с БД Access (обращается к БД, указанной в нижним поле), и формирование, по ходу чтения, XML-файла, сохраняющегося в месте, указанном в соответствующем поле. При этом в файл заносятся только обновленные данные, то есть изменения данных о сотрудниках, которые произошли с периода последнего обновления. Кроме данных о сотрудниках, файл содержит такие данные как дата обновления, от кого эти обновления и префикс, необходимый для создания уникального табельного номера (ТН) на стороне 1С (ТН_1С = ‘префикс’ + ТН_Access).

Также на форме есть окошко "События", где отображаются текущее состояние. Например: "Подключение", "Передача данных" и т.п.

Интерфейс пользователя на стороне сервера выглядит следующим образом:



Рисунок 2 – Приложение на стороне сервера

На форме имеются поля, в которых указаны путь к базу данных 1С, путь, где будет сохранен полученный файл.

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

Также расположены два окошка. В окне "События" отображаются произошедшие события или текущие состояния. Например: "Получен файл", "Идет запись в 1С" и т.п. В окне "Клиенты" отображается список подключенных в данный момент клиентов (их одновременно может быть несколько).

3. Инструкция для программиста

В качестве интегрируемых приложений использовались 2 приложения: MS Access и 1С: Предприятие. Программное средство разработано в среде Delphi 7. Разработка приложений может быть осуществлена на ОС Windows 2000 и выше с установленным программным средством Delphi 7.

Создано два приложения, одно для работы на стороне клиента (Client.exe), программный код которого находится в модуле Client_U.pas другое на стороне сервера (Server.exe), программный код – в модуле Server_U.pas.

Для работы клиентского приложения необходимо наличие БД Access с таблицами "Сотрудники" и "ДатыОбновлений". Первая таблица содержит поля "ХарактерРаботы", "ТабельныйНомер", "Наименование", "Должность", "ДатаПриема", "Оклад". Вторая таблица содержит поле "Дата".

Для работы серверного приложения необходимо наличие БД 1C:Предприятие с конфигурацией "Бухгалтерия". В справочнике "Подразделения" данной БД должна быть внесена информация о филиале, с которым осуществляется связь.

И клиент, и сервер должны иметь доступ к сети с протоколом TCP/IP.

Программный код реализует выполнение главных функций: доступ к базам данных (Access и 1С Бухгалтерия), работа c XML-файлами, передача файла по сети.

В приложении клиента использованы такие компоненты как поля, в которые заносятся данные об IP-адресе и порте сервера, указывается путь к БД Access, путь, где будет сохранен XML-документ, окно, в котором отображаются произошедшие события. Также добавлены две кнопки: Connect и Отправить Файл. Первая – для связи с сервером; вторая –для передачи XML-файла.

В приложении сервера использованы такие элементы управления, как поле для ввода номера прослушиваемого порта, поле для указания папки, в которую сохраняется полученный XML-документ, а также поле с указанием адреса БД 1С. Кроме этого, на форме добавлены два окна: первое – список подключенных клиентов; второе – произошедшие события. Также есть кнопка "Перенести в 1С", которая необходима для перенесения данных XML-документа в 1С.

В приложении клиента осуществляются такие основные операции как чтение и изменение данных в БД Access, формирование на основе этих данных XML-документа и передача последнего по сети.

Доступ к базе данных MS Access осуществляется с помощью технологии ADO c использованием компонента TADODataSet. Большим плюсом применения этой технологии является то, что она работает напрямую с базой данных Access, а не через ODBC, как, например, при использовании технологии BDE.

Для инициализации подключения к БД необходимо в свойстве ConnectionString указать путь к файлу БД (написан в соответствующем поле), а также некоторые другие атрибуты (Пример: 'Provider = Microsoft.Jet.OLEDB.4.0; Data Source = '+ПУТЬ_К_ФАЙЛУ+'; Persist Security Info=False'). В свойстве CommandText надо указать SQL-запрос для выборки данных (Пример: select*from Сотрудники).

По ходу создания XML-документа вначале идет запрос к таблице "ДатыОбновлений" и чтение последней записи, далее запрос таблице "Сотрудники" и проход по всем записям и атрибутам. В конце снова запрос к таблице "ДатыОбновлений" и запись даты прошедшего только что обновления.

Работа с XML осуществляется при помощи встроенного парсера TXMLDocument, который предоставляет интерфейса доступа к содержимому документа DOM (Document Object Model). Объектная модель XML-документов является представлением его внутренней структуры в виде совокупности определенных объектов. Для удобства эти объекты организуются в некоторую древообразную структуру данных - каждый элемент документа может быть отнесен к отдельной ветви, а все его содержимое, в виде набора вложенных элементов, комментариев и т.д.

Для работы с TXMLDocument необходим либо компонент с таким же именем, либо создание объекта типа IXMLDocument (именно этот вариант и реализован). Для доступа к XML использовались объекты двух типов: IXMLNodeList и IXMLNode. Первый – "узел-список" – позволяет представлять записи в документе как список дочерних объектов, к которым можно обращаться по индексу, удалять, добавлять новые и другое. Второй тип – "узел" – позволяет работать со свойствами и методами конкретной записи. база данный приложение программный access delphi

Для обмена данными, т.е. передачи XML-файлов по сети использована архитектура "клиент-сервер", которая реализована на основе сокетов Indy. Данные передаются по протоколу TCT/IP. Клиенту необходимо для подключения знать IP-адрес сервера, а также, адрес прослушиваемого сервером порта. В Indy используются вызовы блокирующих сокетов. Вызов блокирующего сокета не возвращает управления, пока не выполнит свою задачу, приложение замораживает пользовательский интерфейс. Замораживание происходит, поскольку сообщения обновления, перерисовки и другие сообщения не обрабатываются до окончания вызова блокирующего сокета.

Для работы с сокетами Indy необходимы компоненты IdTCPClient (для клиента) и IdTCPServer (для сервера). Для связи с сервером необходимо указать IP-адрес, а также, адрес прослушиваемого сервером порта. Чтобы инициализировать подключение вызывается метод Connect, для разрыва подключения – Disconnect. XML-файл передается как файловый поток. Передача происходит после вызова метода Send.

В приложении сервера осуществляются такие основные операции как прием пересылаемых файлов, чтение из них информации и запись ее в 1CПредприятие.

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

Работа с XML-документом на стороне сервера осуществляется теми же средствами, что и на стороне клиента.

Доступ к объектам 1С Предприятие осуществляется с помощью технологии OLE. Работа с объектами и данными осуществляется на встроенном языке программирования. Для создания OLE объектов 1С используется метод CreateObject('V77.Application'), вызываемый переменной типа OleVariant.

Сначала происходит создание объекта 1С, далее его инициализация (метод Initialize) с указанием адреса подключаемой БД, правами входа, пользователя. Чтобы получить доступ к справочникам надо также создать объект типа OleVariant при помощи метода СоздатьСправочник(ИмяСпр).

В приложениях как сервера, так и клиента, использованы обработчики исключений (try...except...end и try...finally...end) для избежания возможных ошибок. Первый обработчик позволяет при появлении ошибки, выполнять указанные действия, такие как, например, выдача сообщения об ошибке.

На стороне клиента использованы обработчики исключений при выполнении таких событий как подключение к серверу (см. пример), подключение к БД Access и передача файла по сети. При возникновении ошибок при первом и втором событии в окне "Сообщения" появляются сообщения о том, что произошла ошибка.

ПРИМЕР:

try

IdTCPClient1.Connect;

except

Memo1.Lines.Add('Ошибка при подключении');

Exit;

end;

На стороне сервера использованы обработчики исключений при выполнении таких событий как принятие файла от клиента, создание OLE-объекта 1С:Предприятие, запись данных в 1С. При возникновении ошибок во втором и третьем событиях в окне "Сообщения" также появляются сообщения о том, что произошла ошибка.

По данным, считанным с XML-документа происходит запись атрибутов в справочник "Сотрудники". При этом сначала проверяется, числится ли такой сотрудник уже на предприятии. Если ответ положительный, то изменяются только периодические реквизиты (такие как характер работы и оклад), иначе создается новый сотрудник по следующей схеме:

СправочникСотрудники.Новый

< запись постоянных атрибутов>

СправочникСотрудники.Записать

< запись периодических атрибутов>

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

4. Тестовый пример

На рисунках представлены исходные данные:

·          На первом – показаны данные о сотрудниках в филиале, взятые из Access (таблица – Сотрудник).

·          На втором – данные о датах проводимых до этого обновлений (таблица – ДатыОбновлений).

·          На третьем – показаны данные, взятые из 1С, о сотрудниках в головном офисе.

На рисунке 4 показано, что сотрудница Сверчкова еще числится на предприятии.



Рисунок 1 – данные о сотрудниках в филиале



Рисунок 2 – данные о проводимых обновлениях



Рисунок 3 – данные о сотрудниках в головном офисе





Рисунок 4 – Состояние сотрудницы Сверчковой до обновления данных

После того как на клиентском приложении будет нажата кнопка "Отправить", произойдет чтение последней записи из таблицы "ДатыОбновлений" (а именно 06.01.1998) из Access. После формируется XML-файла (см. рисунок 5) по данным таблицы "Сотрудники", с учетом даты последнего обновления. То есть заносятся данные о тех сотрудниках, где значение поля "ДатаПриема" (она же и дата увольнения, и дата каких-либо изменений периодических реквизитов) больше даты последнего обновления. Далее происходит передача по серверу.





Рисунок 5 – Вид XML-файла, передаваемого в тестовом примере

После этого окно "Состояние" выглядит следующим образом (рисунок 6).



Рисунок 6 – Вид окна "Состояние" после передачи данных

После того как файл передан в БД Access заносится запись в таблицу "ДатыОбновлений" (рисунок 7).





Рисунок 7 – Обновление данных таблицы "ДатыОбновлений"

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



Рисунок 8 – Вид окна "Состояние" после обновления данных



Рисунок 9 – данные о сотрудниках в головном офисе после обновления





Рисунок 10 – Состояние сотрудницы Сверчковой после обновления данных

По рисункам 9 и 10 видно, что обновление данных прошло успешно.


Список литературы

1.       Практика программирования: Delphi. – СПб.: БХВ-Петербург, 2002. – 464 с.: ил.

2.       Архангельский А.Я. Приемы программирования в Delphi. - М.: ООО "Бином-Пресс", 2003.

3.       Учебник по 1С. Адрес: www.mista.ru.