Обмен

Материал из GB wiki
Перейти к: навигация, поиск


gbExchange® Server - программа репликации БД в системе «Граф Бестужев»®

ВВЕДЕНИЕ

Программа GBExchange Server предназначена для организации обмена (репликации) данных между БД (InterBase, FireBird), настроенной для работы с программой “Граф Бестужев”.

Обмен предназначен для синхронизации, полного или частичного обновления данных между БД. Клиент с Сервером меняются пакетами, которые содержат объекты системы ГБ. Учитываются правки: добавление, удаление, изменение.

Есть возможность настроить на Сервере схемы обмена или правила, по которым будет происходить частичный обмен данными. К примеру, можно запретить запись в серверную БД клиентских правок сертификатов. Классическая топология взаимодействия с клиентами - «Звезда», но существует возможность построения «древовидных» структур помощью «каскадных» обменов.

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

Необходимые настройки системы

Для работы gbExchange Server необходимо наличие TCP/IP соединения (Internet) или локальной сети с установленным протоколом (TCP/IP).

Связь сервера обмена с БД осуществляется как по протоколу TCP/IP, так и по NetBEUI.

Клиент может обмениваться с Сервером обмена ТОЛЬКО по TCP/IP протоколу.

Версии клиента и Сервера должны совпадать. Так же необходимо наличие в системе файла DBClient.dll(158128 bytes) из набора Borland DELPHI 3. Этот файл можно переписать и зарегистрировать в системе с помощью команды regsvr32 DBClient.dll или запустить программу установки “Граф Бестужев” - setup.exe, которая установит DBClient.dll и зарегистрирует ее в системе.

Перепишите файл gbServer.exe и gbServer.ini (пример файла дан в приложении 1) в выбранную директорию.

Порядок работы

При запуске сервер создаст дерево каталогов:

/Exchange/ActiveSessions/ - файлы текущей сессии обмена (разделены по директориям, соответствующим клиентским Id);

/Exchange/CompleteSessions/ - прошлые завершенные сессии обмена (разделены по директориям, соответствующим клиентским Id);

/Exchange/Analyze/ - файлы используемые для сравнения документов, остатков и движения по серии

/Client/ - соответствующая серверу версия клиента. Используется для автоматического обновления программы на клиентской стороне.

/Logs/ - директория, где сохраняются логи TCP/IP протокола (используется для отладки).

/Msg/ - директория, где сохраняются входящие и исходящие сообщения между клиентами и сервером.

/Scr/ - директория, где сохраняются логи обмена с БД и транспорта.

/CallStack.dat - файл со стеком, который нужен для разбора ошибок при записи в базу

/gbServer.ini - файл с установками для работы сервера.

После каждой удачно завершенной сессии в /Exchange/ActiveSessions/DepotId/ должно быть пусто, а в директории /Exchange/CompleteSessions/DepotId/ должна появится новая директория (yy.mm.dd-hh_mm_ss) с файлами завершенной сессии:

errors_cli.cds - ошибки записи в БД у клиента

errors_srv.cds - ошибки записи в БД на сервере

exchange.log - лог TCP/IP

import.cds - присланные от клиента изменения (распакованные)

import.cds.gz - присланные от клиента изменения (cжатые GZip-ом)

import_ack.cds - подтверждения на клиентские изменения

export.cds - изменения собранные клиентом для отправки клиенту

export.cds.gz - изменения собранные клиентом для отправки клиенту (cжатые GZip-ом)

export_ack.cds - подтверждения присланные клиентом

Обмен файлами происходит в жестко описанной форме и возможны два режима обмена

ПРЯМОЙ - когда первым начинает собирать изменения Клиент и

ОБРАТНЫЙ - когда первым собирает изменения Сервер

Схема обмена файлами при ПРЯМОМ порядке обмена:


СЕРВЕР КЛИЕНТ
Ожидание Сбор изменений
Прием изменений Отправка серверу
Формируем подтверждения Ожидание
Отправка подтверждений Прием подтверждений
Сбор изменений Ожидание
Отправка изменений Прием изменений
Ожидание Формируем подтверждения
Прием подтверждений Отправка подтверждений
Отправка ошибок Получение ошибок
Получение ошибок Отправка ошибок
Отключение/Ожидание Отключение/Ожидание

ОБРАТНЫЙ порядок обмена:

СЕРВЕР КЛИЕНТ
Сбор изменений Ожидание
Отправка серверу Прием изменений
Ожидание Формируем подтверждения
Прием подтверждений Отправка подтверждений
Ожидание Сбор изменений
Прием изменений Отправка изменений
Формируем подтверждения Ожидание
Отправка подтверждений Прием подтверждений
Получение ошибок Отправка ошибок
Отправка ошибок Получение ошибок
Отключение/Ожидание Отключение/Ожидание

Физический смысл порядка обмена заключается в приоритете обмена. В случае синхронных правок (например, одновременно поправили один и тот же документ в серверной и клиентской базе) сохранятся изменения того, кто будет первым собирать изменения.

РАБОТА С ПРОГРАММОЙ

Интерфейсная часть служит для «визуальной» настройки параметров сервера обмена, просмотра ошибок обмена, а так же для организации интерактивного взаимодействия с клиентами обмена, например, исполнение SQL скриптов на стороне клиента или сравнение остатков/документов.

Главное окно

Главное окно программы содержит меню, панель инструментов, закладки и строку состояния. Меню содержит пункты:

Сервер:

Inet.pngНе принимать вызовы из Интернет (при нажатой кнопке всем клиентам будет отказано в подключении)

Состояние завершенных сессий.pngСостояние F3 Состояние завершенных сессий у клиентов

Схемы обмена.pngСхемы F4 - Схемы обмена

Оффлайн.pngOffLine F5 - Запустить офф-лайн приемку немедленно.

Установки.png Установки F9 - Диалог настроек сервера обмена.

Выход.png Выход Alt+X - Выход из программы Сервер обмена.

Пункт меню Команды:

Найти - Поиск строки в логе обмена.

Запаковать - Запаковать выбранный файл с помощью GZip.

Распаковать - Распаковать выбранный файл с помощью GZip.

Строка состояния разделена на 3 части:

- сообщения о работе сервера с клиентами;

- прогресс выкачивания файлов от клиента;

- размер последнего полученного файла с данными, в Кб.

Основное окно программы.png

Главное окно программы, основная закладка.

Рассмотрим каждую закладку поподробнее.

Закладка «Клиенты»

На этой закладке осуществляется управление и контроль процесса обмена с клиентами.

Закладка разделена на 4 части:

1 - Список клиентов, работающих на сервере. 

Это могут быть как подключенные через сеть пользователи, так и офф-лайн и/или созданные скриптом. Ид пользователя уникален, то есть, например, пользователь с ид = 51 может быть только один. В случае, когда приходят два пользователя с одинаковыми номерами, учетная запись на сервере передается последнему.

В колонках выводится информация о клиенте:

Имя клиента (задается в настройках сервера, см. ниже);

IP Адрес - адрес в сети и порт, с которого приконнектился клиент;

Статус - состояние клиента (Working - работает с сервером, пишет или читает в БД, JustWait - состояние ожидания),

Приоритет - номер приоритета.

2 - Список задач для БД. Задания сортируются по приоритету и выполняются по порядку. 

Виды заданий:

Import - Файл изменений от клиента - запись в БД;

GetChanges - Сбор изменений для клиента;

Export_Ack - Файл подтверждений о записанных объектах у клиента;

Export_Errors - Файл со списком версий про объекты, которые необходимо будет отправить клиенту;

Analize - Получение списка движения по серии(ям);

GetDocsList - Получение списка документов;

GetRests - Получение списка остатков;

GetChanges_Ex - Сбор изменений, когда версии про собираемые объекты берутся из файла (а не из таблицы gbversions);

CustomProc - Вызов указанной в задании процедуры;

GetDocDelta - Получение различий по документам.

В колонках выводится информация:

- Имя филиала

- Задание (одно из выше перечисленных)

- Удалить - отменить задание, причем, если задание не активно, то отменить можно любое задание, если же задание активно - то отменить можно только запись в БД. При этом создаются «частичные подтверждения», то есть подтверждения на объекты, которые успели записаться в БД

- Приоритет - номер приоритета

3 - Лог работы сервера - список строк, которые описывают процесс работы сервера с клиентом и БД.
4 - Панель с элементами управления: 

Поле со списком - фильтр лога - показывает только сообщения из лога, относящиеся к выбранному клиенту.

Линейка прогресса - прогресс работы с БД активного (а он может быть только один) клиента.

Кнопки - перемещение на последнюю строку в логе, при этом мы будем видеть всегда последнюю строку лога (т.е. лог будет «бежать»).

Кнопка очистки лога. Кроме того, что лог выводится на данной закладке, происходит параллельная запись лога в файл, в каталог /SCR/yy_mm_dd.scr, где имя соответствует сегодняшнему дню.

На списке Активных клиентов присутствует всплывающее меню, которое позволяет совершать манипуляции над выбранным клиентом.

Пункт «Состояние» является пунктом «по умолчанию» (выделен жирным шрифтом), т.е. двойной клик на выбранном клиенте вызывает команду «Состояние».

Описание команд:

Состояние - Вывод информации о загруженности клиента и 5 последних строк из лога клиента

ОБМЕН - Начать процесс обмена с клиентом

Стоп - На клиенте нажимается кнопка «Стоп» - в результат чего прекращается обмен и клиент отключается

Отключить - Отключить про ТСР/IP клиента от сервера

Настройки - Вызвать окно настроек для выбранного клиента

FTP - Переключиться на закладку обмена файлами с выбранным клиентом

Сообщение - Послать на клиент сообщение, которое появится в новом окне

Получить ошибки - Получить с клиента файл gbErrors.log, который будет записан на сервере в каталог /gbExchange/ActiveSessions/Ид_клиента_gbErr.gz Получить лог - Получить с клиента лог работы, т.е. /SCR/yy_mm_dd.scr, файл будет записан в /gbExchange/ActiveSessions/Ид_клиента_SCR_число.gz Стереть файлы - Стереть все файлы у клиента из каталога /CurSessions/, т.е. «сбросить сессию» на клиенте.


Рис.2.1.2. Всплывающее меню, на списке активных клиентов

Пункты меню из «InterBase»: Рестарт IB, Остановить IB, Запустить IB (для FireBird не делали) Пункты меню из «Клиент»: Найти клиента - Найти пользователя по его Номеру. Поиск осуществляется по IP адресу, который сохранился когда клиент последний раз приходил на сервер. Не работает с клиентами, которые работают через прокси, т.к. не возможно установить с сервера прямое соединение с клиентом. Найти ВСЕХ - найти всех клиентов FTP - запустить для данного клиента FTP-сервис Сообщение - отправить клиенту сообщение через обмен Переименовать Ack_Partial – если обмен на стороне клиента прерван, с помощью этой команды можно переименовать файл частичных подтверждений в файл подтверждений (import_Ack_partial в import.ack)

Пункты меню из «Прочее»:

Срочный обмен - дать клиенту команду на сбор «срочных данных». После этого собранные данные будут отправлены на сервер. Собрать изменения - дать клиенту команду на сбор изменений. После этого собранные данные будут отправлены на сервер. Import - дать клиенту команду на получение изменений. ImportAck -дать клиенту команду на получение от сервера подтверждений. Export - дать клиенту команду на получение от сервера изменений. ExportAck - дать клиенту команду на получение подтверждений. Переименовать Ack_Partial- переименовать частичные подтверждения на стороне сервера Послать ошибки - получить от клиента файл с ошибками из текущей сессии. Удалить все *.dwn - Стереть все файлы *.dwn у клиента из каталога /CurSessions/, т.е. стереть все не докаченые файлы. Адрес сервера - сменить адрес сервера, по которому соединяется клиент на новый. Закрыть клиента - послать команду - выход из программы клиента. INI параметр - установить в файле с настройками на клиенте указанный параметр.


На списке заданий для БД так же присутствует всплывающее меню (см. рис. 2.1.3), которое содержит следующие пункты меню: Обновить - Обновить список клиентов и список заданий для БД. Удалить - Удалить (поставить флаг удаление) задание. Если удаляемое задание активно - то прервать его немедленно можно, только если это «import», все остальные удаляются в начале работы с БД. Полный лог - Если этот пункт меню включен (помечен галочкой), то тогда обмен пишет полный лог по всем объектам, которые он записывает. Полный лог нужно включать только в определенных случаях, он может тормозить работу обмена.


Рис.2.1.3. Всплывающее меню на списке заданий для БД


Закладка «История»

Все закончившиеся сессии обмена списываются в папку /CompleteSessions/Ид_Филиала/ для истории и для просмотра ошибок, возникших во время обмена. Так же завершенные сессии могут быть использованы для восстановления баз филиалов, т.е. той части данных, которые приходили с сервера обмена.


Рис. 2.1.4. Закладка «История».

Закладка «История» состоит из следующих частей: 1. Заголовок и счетчик кол-ва сессий; 2. Список Сессий. Имена завершенных сессий содержат дату и время СПИСЫВАНИЯ файлов из активных сессий в завершенные; а так же постфикс, указывающий на наличие ошибок в сессии (“With Errors”). Ошибками считается: отсутствие какого-либо из файлов ошибок (errors_cli.cds, errors_srv.cds), либо наличие записей в этих файлах. 3. Панель. Содержит поле со списком для выбора отдела. Фильтр, с какой даты (включительно) показывать сессии. Кнопки: вызов окна отчета, выделение всех завершенных сессий, удаление выбранной сессии. Кнопка повторного принятия пакетов в БД («Опять»). Более подробно работа с ошибками при обмене описано в главе «Ошибки и конфликтные правки».


Закладка «iSQL»

Иногда возникает необходимость выполнения какого либо запроса в базе клиента, при этом не всегда есть возможность попросить об этом человека на стороне клиента. Для этого в сервере обмена существует закладка iSQL, с помощью которой можно выполнять запросы и вставлять процедуры в базу, к которой подключен клиент. При этом на машине, где установлен клиент НЕОБХОДИМО наличие программы isql.exe из пакета InterBase Server либо в каталоге c:\Program Files\.... , либо в каталоге, где расположен клиент (gbClient.exe). Закладка «iSQL» состоит из частей: Поле для ввода запроса. Ведется история запросов: Ctrl+N - следующий запрос, Ctrl+P - предыдущий запрос. Поле - результат запроса. Панель. Поле с выпадающим списком - выбор отдела которому послать запрос, естественно, клиент из выбранного отдела должен быть подключен. Галочки: Commit- Авто Коммит; Statistic- Вывести статистику выполнения запроса; List - Формат выдачи результата, при выключенном состоянии результат имеет табличное представление, иначе список - слева название поля, справа - значение; Plan - Если включен, то показывать какие индексы использовались для построения запроса; Row Count - С результатами запроса выдать количество колонок.

На клиенте получаемый от сервера текст запроса оборачивается в:

SET NAMES WIN1251; CONNECT путь_к_БД USER XXXX' PASSWORD xxx; прочие выбранные параметры (SET STAT; SET LIST; SET PLAN; SET COUNT;) Текст_SQL_запроса COMMIT;

После чего запрос передается в виде файла как входной параметр программе:

\путь\isql.exe -i input.sql -o output.sql -m

результат сохраняется в файл и отсылается серверу.


Рис. 2.1.5. Закладка «iSQL»

Для вставки, изменения процедур следует использовать точный синтаксис, т.е. если процедуры нет - то первое слово CREATE, если же процедура уже есть - то ALTER.

CREATE PROCEDURE something_list( Params VARCHAR(32640) CHARACTER SET WIN1251 )RETURNS (Result VARCHAR(32640) CHARACTER SET WIN1251 ) AS ...переменные... BEGIN ....текст процедуры... END


Закладка «FTP»

Для удобства работы администратора сервера обмена существует закладка «FTP» - обмен файлами. Можно с помощью этой закладки с/закачать файл с/на клиента, т.е. создавать файлы (закачивать) или удалять. Создавать каталоги, переименовывать или удалять НЕЛЬЗЯ. Закладка состоит из следующих частей: 1. Каталог на клиенте. 2. Список файлов в указанном каталоге, с возможностью перемещаться в каждой папке на уровень вверх и входить в папки. 3. Поле со списком выбор диска на клиенте.


Рис. 2.1.6. Закладка «FTP»

4. Панель с кнопками: Скачать выбранный файл с клиента в выбранный каталог, Послать выбранный файл с сервера в каталог клиенту, Обновить список файлов каталога на клиенте, Удалить выбранный файл на клиенте. 5. Каталог, список файлов и выбор диска на сервере. Не рекомендуется пользоваться FTP во время обмена с клиентом, т.к. обмен происходит в одном канале связи, что может вызвать замедление процесса обмена файлами м/у клиентом и сервером.


Закладка «Сравнения»

В закладке «Сравнения» на сегодняшний день 5 подзакладок: Документы, Остатки, Баланс, Задолженность, Движение по товару/серии. Процесс сравнения происходит следующим образом: на сервере заполняются параметры и нажимается кнопка «Запуск», после чего на сервере параметры передаются в БД отчету-процедуре. На клиента отсылаются параметры, и клиент передает параметры в БД отчету-процедуре. после получения результатов на сервере они складываются в каталог /Exchange/Analyze/Id_отдела/ , в этот же каталог складывается файл-результат присланный клиентом. После получения результатов сервером и от клиента, нажимается кнопка «Отчет», по которой сводная таблица заполнятся строками, различающимися в базах клиента и сервера. Закладка «Документы» состоит из следующих частей: 1. Параметры. 2. Сводная таблица результатов. 3. Строка статуса. 4. Панель работы с результатами. 5. Панель запуска сравнения и анализа результатов.


Рис.2.1.7. Закладка «Сравнения» - Документы

Параметры - здесь задаются параметры, какие документы добывать для сравнения. Код Фирмы - Ид собственной фирмы, от которой были созданы сравниваемые документы, например «50», «-1» - означает «от всех собственных фирм». Типы документов - перечисляются через «;» Ид типов документов (корневые). Начальная и Конечная даты - диапазон дат, из которого достаются документы. Начальный и конечный Ид - диапазон Ид-ов документов, из которого достаются документы. Можно еще задавать параметры «Сравнивать тип документа» и «Пропускать флаг 0» Сводная таблица результатов - таблица с расхождениями по строкам. Ключевым полем является Ид документа. Если в колонке «пусто» это означает, что такого документа нет на соответствующей стороне. Колонки: Дата сервер и дата Клиент - даты документа на сервере и клиенте соответственно. Ид документа - ид документа. Сумма сервер и сумма клиент - суммы документа на сервере и клиенте соответственно. При чем суммы перед сравнением округляются до 2-х знаков после запятой. Флаг сервер и флаг клиент - флаги документов на соответствующих сторонах. Партнер сервер и клиент - партнер в документе на сервере клиенте соответственно.

Строка статуса - содержит информацию в виде : кол-во строк на сервере - кол-во строк на клиенте (кол-во строк различий)

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

Панель запуска сравнения и анализа результатов - служит для запуска процесса сравнения и формирования сводного отчета. Содержит следующие элементы: Поле со списком - выбор отдела, с которым необходимо произвести сравнение. Копировать - копировать результаты сравнения в Буффер Обмена. “< ? >” Кнопка вызова сводной таблицы - «Сравнения по серии». Запуск сравнения по документам. Сформировать отчет из полученных результатов.

Закладка «Остатки» состоит из следующих частей: 1. Параметры. 2. Сводная таблица результатов. 3. Строка статуса. 4. Панель работы с результатами (Движения по серии). 5. Панель запуска сравнения и анализа результатов.


Рис.2.1.8. Закладка «Сравнения» - Документы

Параметры - здесь указываются Иды складов через «;» по которым необходимо получить остатки для сравнения. Сравнение происходит по Иду товара, серии, складу и количеству.

Сводная таблица результатов - таблица с расхождениями по строкам. Ключевыми полями являются Ид товара, серия и склад. Колонки: Товар - ид товара, который есть на остатках на данном складе. Склад - склад, на котором есть остаток товара указанной серии. Серия - серия товара, которая есть на остатках, на указанном складе. Количество Сервер и Клиент - соответствующие количества товара на указанном складе и серии.

Строка статуса - содержит информацию в виде : кол-во строк на сервере - кол-во строк на клиенте (кол-во строк различий)

Панель работы с результатами (Движения по серии) - После того как мы получили результаты сравнения остатков - у нас есть различия. Для того чтобы понять, какие документы повлияли на различие остатков, используется отчет «Движение по серии». Т.е. мы имеем различие остатков по указанной серии и хотим получить список всех документов, в которых эта серия присутствует.


Рис. 2.1.9. Таблица результатов отчета «Движение по Серии»

Для этого мы указываем в параметрах диапазон дат для просматриваемых документов, и в зависимости от того, хотим мы посмотреть информацию о движении по всем сериям или по одной - жмем соответствующую кнопку. Результаты сравнения документов (рис. 2.1.9) можно просмотреть по кнопке «< ? >». После чего полученные документы можно добавить в версии серверу или клиенту, для того чтобы документы, и соответственно остатки совпали. Для этого выбираем действие и жмем кнопку «>>Выполнить».

Панель запуска сравнения и анализа результатов - служит для запуска процесса сравнения и формирования сводного отчета. Содержит следующие элементы: Поле со списком - выбор отдела, с которым необходимо произвести сравнение. Копировать - копировать результаты сравнения в Буффер Обмена. “< ? >” Кнопка вызова сводной таблицы - «Сравнения по серии». Запуск сравнения по остаткам. Сформировать отчет из полученных результатов.

Закладка «Баланс» показывает разницу по документам заданных партнеров (можно перечислить в поле По партнерам несколько кодов через точку с запятой – главное, чтобы процедуру баланса можно было запускать одновременно по такому количеству партнеров).


Сравнение баланса работает по тому же принципу – задаем нужные параметры, после получения данных на сервере и прихода пакета анализа с клиента можем получить отчет. В данном случае в каталоге сервера обмена Exchange/Analyse/53/ должны появиться файлы resBalance_cli.cds и resBalance.cds. В приведенном примере баланс отличается на 1 документ, известен его код, сумма, дата, флаг. При желании документ добавляется в версии и променивается в нужную сторону.

Закладка «Задолженность»

В этой закладке показываются результаты выполнения Отчета по долгам. В параметре По партнерам можно задать одного партнера, список партнеров через точку с запятой либо папку. В приведенном примере баланс отличается по 5 партнерам. Понятно, что документы, составляющие это отличие, в закладке Задолженность увидеть нельзя, для этого нужно воспользоваться Балансом.

Закладка «Скрипты»

Иногда возникает потребность для интеграции с другими системами. Либо получение каких-либо данных из ГБ, либо их преобразование. Например, организовать обмен документами или какими-либо справочниками. Но сервер обмена имеет жесткую схему обмена файлами и данными и не может из нее выйти. Для такого рода задач была реализована возможность создания скриптовых заданий для работы сервера обмена. Скрипт - последовательность команд, для которых сервер обмена является интерпретатором. Более подробно о написании скриптов см. главу «Скрипты». Закладка «Скрипты» состоит из следующих частей: 1. Параметры 2. Текст скрипта


Рис. 2.1.10. Закладка «Скрипты»

Параметры - здесь указывается: от какого Отдела выполняется скрипт, Имя скрипта, Две кнопки: М - текст скрипта для работы сервера обмена в «ручном» режиме, и кнопка «Выполнить» - для запуска скрипта.

Текст скрипта - строки из указанного файла или полученные по кнопке «М».

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

НАСТРОЙКИ

Для корректной работы сервера обмена необходимо произвести его настройку. Для этого в главном окне нажмите F9 и вы увидите окно, как на рис.2.2.1. Окно настроек имеет 6 закладок специфических настроек, рассмотрим каждую.

Закладка «Основные»

На этой закладке задаются настройки для работы сервера по сети (локальной или Internet). А так же для работы с БД, и основные каталоги. Настройки сети: Порт - Порт, который будет «слушать» сервер. Вообще слушается адрес 0.0.0.0:port ТаймАут - Задержка в секундах, после которой будет выдаваться сообщение о задержке при получении пакета. Логин ТаймАут - Количество проверок прислал клиент «Логин» (т.е. свой номер) после того как присоединился. Интервал проверки 5 сек. Мах кол-во соединений - Количество максимальных присоединений к серверу. Запретить Обмен - Клиенты могут присоединяться к серверу, но не могут запускать процесс обмена. Не пускать на сервер совсем - Клиенты не смогут даже подключиться к серверу.


Рис.2.2.1. Настройки Сервера - Основные.

Настройки БД: Путь к БД - Путь к базе данных, можно использовать как локальный путь, так и TCP/IP или NetBEUI вид (в примере используется TCP-вид) Имя пользователя - Имя пользователя, если не указывать, используется принятый по умолчанию. Пароль - Шифрованный пароль, если не указывать - используется принятый по умолчанию пароль. Библиотека - Можно использовать разные клиентские библиотеки, например, если на одном сервере работают Firebird и Interbase.

Каталоги: Пути для файлов - Пути для хранения активных и завершенных сессий обмена. По умолчанию = \Exchange Лог файл - Имя файла, в который будут записываться сообщения про TCP/IP обмен.

Закладка «Обмен»

На этой закладке настраивается процесс и порядок обмена с клиентами.


Рис.2.2.2. Настройки Сервера - Обмен.


Версий в пакете - Количество версий (объектов) в пакете. Возможные варианты: • «0» - все, что указаны в таблице gbversions для текущего отдела • «-1» - все кроме документов • некое число (например, 3000) – конкретное количество версий Тип объектов – тип объектов, которые будут собираться в пакет. Возможные варианты: • «-1» - все типы объектов • Некое число будет обозначать только конкретный вид объектов (0-партнеры, 1-товары). По умолчанию всегда должна стоять -1. Если вы поставили для какой-то надобности определенный тип объектов, не забудьте потом поменять это число назад на -1 Документов не более – количество документов, которое попадет в один пакет. Используется в случае, если по обмену ходят очень толстые документы, и при сборе большого количества таких документов получаются очень большие пакеты, и разрешение конфликтов происходит долго либо ему просто не хватает памяти. По умолчанию здесь должен стоять 0 (будут собираться все документы, согласно ограничению, прописанному в поле Версий в пакете) Строк не более – параметр, аналогичный количеству документов. Из собранного уже пакета удаляется столько документов, чтобы количество строк было не более заданного (в примере это 4000). В пакете остается как минимум один документ (даже если количество строчек превысит ограничение, например будет 4700 строк). Учитывать приоритеты - при обработке заданий для БД учитывать приоритеты клиентов. Расключаться по завершению обмена - по завершению сеанса обмена отключать клиента или переводить в состояние ожидания. Домениваться частичными подтверждениями - Частичные подтверждения - import_ack_partial.cds - создаются в случае обрыва задания на запись пакета в базу данных. Обрыв может быть, к пример, инициирован администратором обмена либо произойти по причине стопа сервера. Если частичные подтверждения созданы, то с помощью меню по правой кнопке на клиенте, пункт Прочее/Переименовать ack_partial можно переименовать файл import_ack_partial.cds в import_ack.cds, запустить обмен и файл подтверждений на уже принятые объекты будет отправлен клиенту. В случае такого завершения обмена не будет создано корректных файлов по ошибкам. Не отключаться от БД - После завершения сессии обмена не разрывать соединение с базой. Автоматическое создание корр.док-в – Если включена эта галка, то при нехватке товара при записи пакета будет автоматически создан корректирующий документ. Параметры этого документа можно определить в ini-файле в секции [CreatingDoc], например: [CreatingDoc] DocId=correct FirmId=400004667 DocType=33 OpType=400000063 OpDate=31.12.2021 Если параметры документа не определены, обмен обругается, и корректирующие доки не создаст.


Частичный обмен - Признак, что сессия обмена не будет начинаться с самого начала, а домениваться файлами (если они есть). Каскадный сервер - Используется для создания каскадных (в отличие от «Звезды») структур обмена. Например, если документы должны проходить через 3 базы: т.е. документ должен из базы «А» записаться в «В» и «С»

С В А


Клиент Сервер Клиент Сервер обычный каскадный каскадный обычный

Каскадный сервер и каскадный клиент м/у собой НЕ меняются.

OffLine через - время в секундах, через которое будут сканироваться каталоги на сервере, для выполнения оффЛайн заданий.

Безусловный ОнЛайн в дни - дни, в которые для клиентов будет всегда возможность произвести полный цикл обмена (независимо от Времени онлайн, указанном в параметрах клиента). Обычно – суббота, воскресенье.

Запускать приложения: Время - время в формате «hh:nn:ss», перечисленное через «;» в которое производить запуски указанного в поле «Что». Что - путь имени файлу-программе для запуска. Запуск осуществляется с ожиданием. Т.е. пока не закроется запущенная программа, сервер обмена будет «висеть». Для клиентов - Перечисляются иды клиентов через «;». По окончанию - путь имени файлу-программе для запуска. Запуск осуществляется после сессии обмена для указанных клиентов в поле «для клиентов».

Закладка «Сообщения» На этой закладке настраивается оповещение администратора о завершении обмена (удачном или нет). Оповещение осуществляется посредством сервиса «net send» из комплекта Microsoft Windows. Т.е. сервис «Messenger» должен быть запущен на машине-получателе.


Рис.2.2.3. Пример сообщения присланного по сети, по завершении обмена Получатель(и): Отчитаться перед - перечисляются имена машин в сети, на которые придет сообщение (вида рис. 2.2.3). Виды сообщений - сообщения, отправляемые по сети.


Рис.2.2.4. Настройки Сервера - Сообщения

Закладка «Дополнительно»

На этой закладке настраиваются прочие «не существенные» параметры сервера обмена. Это управление хранением истории обмена и специфичные настройки, когда необходимо променяться какими-то определенными объектами. Параметры ведения архива: Иногда этот параметр не критичен - когда фирма маленькая или обмен происходит раз в день. Но иногда история, которая формируется во время работы обмена, занимает немало места на винчестере. Иногда это место кончается, и машина перестает работать. Чтобы избежать этого, есть возможность ограничить диапазон хранимой истории. Причем самые емкие - это сессии, потом «SCR», потом «Логи». Хранить Сессии - кол-во дней до сегодняшнего числа, за которые хранить сессии. Хранить Логи - кол-во дней до сегодняшнего числа, за которые хранить Логи TCP/IP. Хранить SCR - кол-во дней до сегодняшнего числа, за которые хранить SCR.


Рис.2.2.5. Настройки Сервера - Дополнительно

Сбор изменений по специальной процедуре. Используется, когда необходимо променяться какими-то определенными объектами, которые указываются в процедуре, имя которой вводится в поле. Пример процедуры см. в Приложении 2.

Дату и время сбора изменений сохранить в поле - Поле в карточке отдела в ГБ (Партнеры, папка с ид=6, отдел с ид=ид клиента), куда будет записываться время и дата последнего сбора изменений.

Закладка «Клиенты»

На этой закладке указываются настройки процесса обмена для конкретных клиентов.

Рис. 2.2.7. Настройки Сервера – Клиенты

Закладка содержит следующие элементы: Филиал, клиент - Поле со списком - выбор филиала для которого необходимо просмотреть настройки. Полное Имя - Имя (название) клиента, которое будет использоваться для обозначения работы с данных клиентом в сервере обмена. Путь к БД, Логин, Пароль – Можно задать для конкретного клиента ДРУГУЮ базу данных (не ту, что указана в закладке Основные. Правда, необходимо учитывать, что библиотека будет взята та, которая прописана в закладке Основные, для клиента ее задать нельзя. Время Онлайн – Промежуток времени в формате «hh:mm-hh:mm». Может быть несколько промежутков, перечисленных через «;». В эти промежутки клиент будет находится в режиме ОнЛайн (в данном случае с 18 вечера до 9 утра). Время не пускать - Промежуток времени в формате «hh:mm-hh:mm Может быть несколько промежутков, перечисленных через «;». В эти промежутки клиент не сможет присоединиться к серверу обмена Приоритет - Приоритет, число 0...9 (0- минимальный, 9 - максимальный), приоритет для заданий БД. Если в очереди на запись в базу находятся несколько филиалов, будет выбран пакет филиала с максимальным приоритетом. Отсюда следствие – при неправильном распределении приоритетов (например, филиал имеет приоритет 9 и меняется каждую минуту) некоторые филиалы могут и не дождаться времени доступа к базе. Кол-во версий - Количество версий (объектов) в пакете который придет от клиента. «0» - все, что указаны в таблице gbversions для текущего отдела, «-1» - все кроме документов. IP Адрес - IP адрес, с которого последний раз заходил клиент на сервер. Используется при «поиске» клиента. Использовать обмен в обратном порядке – При обратном порядке сначала принимаются изменения от сервера в базу клиента, потом отдаются изменения клиента в базу сервера. В прямом порядке – наоборот, сначала клиент пишет свои изменения в базу сервера. Автоматически обновлять версию клиента - У сервера есть каталог /gbClient/ где лежит файл gbClient.exe , последней версии. Перед обменом, когда клиент залогинился, сервер проверяет идентичность версий программы клиента - по номеру (первые две цифры) и размер файла gbClient.exe. В случае не совпадения файлов (если стоит галочка Автоматически обновлять версию клиента) на клиента посылается новая версия gbClient.exe и клиент перепускается автоматически. Как сервер обмена – можно заставить клиента работать как сервер обмена, то есть брать версии с депота 6 и расщеплять их на все остальные депоты, лежащие в справочнике партнеров в папке Удаленные отделы. Обмен через почту – в этой секции можно указать параметры почтовых настроек при обмене через почту Автокорректировка отрицательных остатков – Параметры документов, которые будут автоматически при нехватке товара. Секция специально сделана недоступной для редактирования из настроек, так как случайное заполнение этих полей чревато очень большими проблемами – появлением лишних остатков на складах. Редактировать ее нужно в файле gbServer.ini. Для того, чтобы создавались корректирующие доки, в секции Server должна быть написана строка AutoCorrectDocs=Yes, а в секции CreatingDoc должны быть заданы параметры таких документов. Фирма - от какой собственной фирмы (ид) делать приход. Номер - номер документа прихода. Тип документа - тип документа прихода (ид) Операция - операция в документе (ид) прихода.


В правом верхнем углу имеются так же 3 кнопки в виде пиктограмм с хинтами: Создать - Создать запись про нового клиента. Принять - Записать установки для выбранного Клиента. Удалить - Удалить все файлы из /ActiveSession/Id_Клиента/


СХЕМЫ ОБМЕНА

Описание

С помощью этого средства можно ограничивать объекты, которые будут ходить от клиента на сервер и обратно. Организовывать правила и действия над принимаемыми объектами. При создании/изменении/удалении объектов, которые должны ходить по обмену, в таблицу GBVersions добавляется запись ( Add_Gbversion(ObjType,ObjId) ) в формате: DepotId – 6 – для всех; MadeBy – кем сделана версия; ObjType – тип объекта, см. ниже; ObjId – ид объекта; AuxId – доп. ид; Processing – признак обработки, т.е. хотя бы раз собирали этот объект.

При сборе объектов выполняется последовательность действий: 1. GBVersions_Get(SplitOnly) – т.е. 6 -> в ид филиала; 2. Optimize_Versions – для удаления лишних версий; 3. GBVersions_Get – для сбора. 4. GetRemote_versions – для сбора версий из распределенных баз. Потом перед записью в выходной файл (датасет) применяются схемы обмена.

Таблица Schemes Отдел Условие на отделы Тип Строка Если поле Условие Значение Произвольные условия То сделать Полю Значение Произвольное значение Примечание


Отдел (DEPOT) Тип: INTEGER. Назначение: Ссылка на удаленный отдел, для которого написано условие для отправки объекта. 6 - для всех. Выбор удаленного отдела. Удаленные отделы создаются с помощью программы "Граф Бестужев" в разделе Партнеры->Отделы. Ограничения: Not Null (Неявно зависит от: Таблица Partners(Id) ). Условия на отделы (DEPOTCONDS) Тип: VARCHAR(250). Назначение: Дополнительные условия для выбора отдела в который отправляется объект. Используется, если «Отдел» = 6 (для всех), и необходимо применить для нескольких отделов это правило, тогда возможно использование функций. Например: Depot() IN (51,53,48,56). Тип (OBJTYPE) Тип: INTEGER. Назначение: Код типа объекта, для которого срабатывает данная строка схемы. При редактировании и применении схем используется как первичный ключ для сортировки. Ограничения: Not Null Строка (LINE) Тип: INTEGER. Назначение: Номер строки, служит для упорядочивания строк схемы при их применении. При редактировании и применении схем используется как вторичный ключ для сортировки. Может быть <= 0 и >= 0. Ограничения: Not Null. Если поле (CHECKFIELD) Тип: VARCHAR(32). Назначение: Имя атрибута (поля), подлежащего проверке (вообще, любой стандартный "ГБ-шный" запрос, например, Id.DocDate) Условие (CONDITION) Тип: VARCHAR(32). Назначение: Отношение, связывающее «если поле» и «значение», при истинности которого применяется данная строка. Возможные значения: =, <, >, <=, >=, <> - стандартные операции сравнения IN (1,2,60) - значение входит в список ALL - всегда истина Значение (CHECKVALUE) Тип: VARCHAR(32). Назначение: Константа для отношения «условие». Произвольные значения (CUSTOMCONDITION) Тип: VARCHAR(250). Тоже что и «значение» только в этом поле можно писать формулы (“ГБ-шный” запрос, например, Id.Articul.Name). То Сделать (ACTIONNAME) Тип: VARCHAR(32). Назначение: Действие, которое выполняется при срабатывании данной строки схемы. Возможные значения: При сборе изменений: UPDATE - Установить для атрибута «Полю» значение «Значение» DUPLICATE- Дублировать объект. Для дальнейшего изменения. Все правила написанные ниже данной строки будут производиться над дубликатом объекта; IGNORE - Не отправлять объект в удаленный отдел; OOB - Данный объект попадает в OOB-обмен; ACCEPT - Прекратить применение схем и отправить объект в удаленный отдел; SKIP - Пропустить при сборе и не удалять из версий; FILTER - Фильтрация субсетов. Например, у документа есть субсет – «Налоги» и из него надо оставить только налог с ид=2 и 3; GOTO - Перейти к строке, указанной в поле «значение»; CONTINUE - Перейти к следующей строке; MESSAGE - выдать строку «Значение» в файл export.log; При записи изменений: PRESERVE - При приеме изменений защитить от изменений поле, указанное в «полю» IGNORE_IMPORT - Не принимать изменений данного объекта MAKEDUPLICATE – При приеме изменений создает дубль к данному документу. В команде должны быть перечислены параметры создаваемого дубля и тип связи, которым он привязан к основному документу. Если к основному документу уже привязан дубль с помощью линки указанного типа, то дубль не создается. FILTER_IMPORT – при записи изменений можно фильтровать определенный субсет (например, не записывать из субсета налогов для товара налог с заданным кодом)

Прочие функции: Depot() - возвращает номер удаленного отдела, для которого в текущий момент обрабатываются схемы. Полю (FORCEFIELD) Тип: VARCHAR(32). Назначение: Аргумент (имя поля) над которым производятся действия, перечисленные в «то сделать». Значение (FORCEVALUE) Тип: VARCHAR(32). Назначение: Аргумент (константа) для некоторых действий. Значение "=FIELDNAME" указывает, что нужно взять значение из соответствующего атрибута (поля). Произвольное значение (CUSTOMFORCEVALUE) Тип: VARCHAR(250). Назначение: тоже что и «значение», только можно писать формулы (“ГБ-шные” запросы). Примечание (NOTE) Тип: VARCHAR(250). Назначение: Пояснение к строчке.

Применение схем

Строки схем сортируются по типу и по строке. Т.е. первый ключ – тип объекта, в нем идет сортировка по номеру строки. Про текущий объекта узнается его тип, и после того как пройдены все строки этого типа, переходим к следующему объекту.

Примеры: Отдел Условие на отделы Тип Строка Если поле Условие Значение Произвольные условия То сделать Полю Значение Произвольное значение Примечание 51 0 0 All IGNORE Товары не ходят в удаленный отдел 51 11 0 Firm = 50 PRESERVE Heap У собственной фирмы НЕЛЬЗЯ менять Хиповые поля! 51


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

Отдел Условие на отделы Тип Строка Если поле Условие Значение Произвольные условия То сделать Полю Значение Произвольное значение Примечание 52 11 -1 All Ignore_Import Документы не принимать 52 11 0 Id > 520000000 Ignore_Import Документы от депота=52 не принимать 52 11 1 DocDate<STRTODATE('24.09.2002') IGNORE Документы не принимать 52 11 2 (Partner<>7461) and (Stock <> 520000003) Ignore Документы не отсылать если они не на Нужного нам партнера 52 11 3 (Flag < 400) and (Stock <> 520000003) Ignore Не остылать документы с флагом < 400 52 11 4 (Partner=7461) and (DocType.SubType=19) Update Kind 102 Тип операции = Приход на консигнацию 52 11 5 (Partner=7461) and (DocType.SubType=19) Update DocType 33 пропускать документы на Нужного партнера, делаем приход 52 11 6 (Partner=7461) and (DocType.SubType=33) Update Links Чистить связи у документов 52 11 7 (Partner=7461) and (DocType.SubType=33) Update Flag 100 Ставим флаг - 100 52 11 8 (Partner=7461) and (DocType.SubType=33) Update Stock 520000003 Ставим ихний склад 52 11 9 (Partner=7461) and (DocType.SubType=33) Update Imported_Id Firm Запоминаем фирму 52 11 10 (Partner=7461) and (DocType.SubType=33) Update Firm 7461 Ставим фирму 52 11 11 (Firm=7461) and (DocType.SubType=33) Update Partner Imported_Id Ставим Партнера 52 11 13 (Firm=7461) and (DocType.SubType=33) Update Contract 0 Обнуляем договор - т.к. его нет 52 11 14 (Firm=7461) and (DocType.SubType=33) and (Stock=520000003) Accept пропускать документы на Нужного партнера, делаем приход 52 11 20 All Ignore все остальные документы не пускать

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


СКРИПТЫ

По умолчанию, процесс обмена происходит в строго определенном порядке. При чем как работа с БД, так и работа по сети. Для работы обмена в произвольном режиме используются файлы-скрипты, в которых указывается последовательность действий. Все команды выполняются последовательно одна за другой, сверху вниз. Обмен служит для скрипта как бы интерпретатором. Команды делятся на выполняемые с ожиданием окончания работы и без него. Есть команды для создания искусственного ожидания. Полный список команд приведен в Приложении 3. Как правило, скрипты используются для организации обмена данными м/у Базой «для ГБ» и каким- то другим источником данных. Т.е. существует возможность, как порождать файлы (txt, cds, xml, dbf) нужной структуры, так и обрабатывать, для последующей записи в ГБ. При этом может производиться неоднократная операция перевода формата данных(txt->cds->xml->cds->xml->….->cds), в процессе которой производятся необходимые преобразования данных (фильтрация, вычисления, изменение структуры и т.д.). Для работы со скриптами необходимо наличие XML 3.0 или выше, ставится либо отдельным компонентом, либо вместе с MS Internet Explorer 5.0 и выше. Работа Сервера обмена в скриптовом режиме организована на закладке «Скрипты» см. рис.10.


XML - Шаблоны

При конвертации в XML (или из XML) – используются файлы-xml-шаблоны. XML-Шаблоны имеют следующую структуру: <?xml version="1.0" encoding="Windows-1251"?> <root> <line> текст шаблона </line> </root>

При этом текст шаблона может содержать следующие конструкции (при чем эти конструкции совместимы, т.е. можно написать шаблон в одном файле для конвертации из текста, из XML в CDS, и CDS в XML):

txt -> xml

<txt2xml separator="9"/> - для конвертации текста в XML. Применимы следующие параметры: <txt2xml separator="9" tabs="14;22;42;50" cp866="true" startline="8" endline=”53” /> separator="9" - исп. если текст представляет собой данные с разделителем. В кавычках указывается КОД символа (9=табуляция). cp866="true" - указывает, что данные записаны в кодовой странице DOS866, для последующего перевода в WIN1251. startline="8" и endline=”53” - с какой линии начинать обрабатывать и заканчивать обработку текстового файла. Начало с 0-й строки. Параметр startline= может исп. и без endline= - т.е. только указано с какй сверху строки начинать считывать. Исп. обычно, кода данные представляют собой результат какого-нибудь отчета или печатную форму. tabs="10;15;22" - исп. если текст представляет собой данные с фиксированной шириной колонок. После = указываются ПОЗИЦИЯ В СТРОКЕ, НА КОТОРОЙ ЗАКАНЧИВАЕТСЯ КОЛОНКА. Это НЕ длинна колонок!!! Т.е. в представленном примере: 1-я 0-10; 2-я 11-15; 3-я 16-22.

structure

<object name="line" /> <structure> <field name="Id" label="Код" type="I4"/> </structure> - при конвертации из XML в CDS – описание структуры датасета. При чем можно описывать и заполнять SubSet-ы– т.е. вложенные датасеты. Применимы следующие параметры: <field name="Articul" label="Товар" type="I4" nature="fmId+otArticuls" /> name="Articul" - Название Имени поля в датасете. Должно быть уникально. label="Товар" - Подпись к полю. type="I4" - Тип поля. Возможные значения: "I4" - integer, "D8" - Date, "F8" - float, “S10” - строка длинной 10 символов. nature="fmId" - Явное указание сущности данных. Для дальнейшего использования в шаблоне выражений типа “Articul.Node.Name”

Пример описания структуры с SubSet-ами: <structure> <field name="ObjType" label="ObjType" type="I4"/> <subset name="Data"> <field name="Id" label="Код" type="I4"/> <field name="Firm" label="Собст.фирма" type="I4"/> <subset name="Goodies"> <field name="Id" label="Код" type="I4"/> <field name="Articul" label="Товар" type="I4" nature="fmId" /> <subset name="Certificates"> <field name="Articul" type="I4"/> <field name="Quantity" label="Quantity" type="F8"/> </subset> </subset> </subset> <subset name="Deleted"> <field name="Id" label="Id" type="I4"/> <field name="AuxId" label="AuxId" type="I4"/> </subset> </structure> Представленный фрагмент имеет следующий формат: на 1-м уровне 3 поля: ObjType(integer) Data(Blob-SubSet) Deleted(Blob-SubSet) Поле Data - представляет собой вложенный(Sub) dataSet (который сам в себе так же содержит субсеты) со структурой: Id Firm Goodies -> тож субсет в субсете Data Id Articul Certificate -> еще один субсет в субсете Goodies Articul Quantity

Поле Deleted содержит один Субсет, со структурой: Id(integer) AuxId(integer)

ds -> xml

<ds2xml> <attr tagname="Articul" fieldname="Articul"/> ... </ds2xml> - при конвертации Датасета (CDS) в XML – описание заполнения полей в XML. Применимы следующие параметры: <attr tagname="CertExists" fieldname="IIF(CertFound=-8,0,1)" /> TagName="Articul" - Имя поля из которого брать значение или «формула ГБ», т.е. возможно исп. функции ГБ.

xml -> ds

<xml2ds> <attr fieldname="ObjId" tagname="ObjId" key="true"/> ... </xml2ds> - при конвертации XML в CDS. Применимы следующие параметры: <attr fieldname="Name" tagname="CertName" key="true"/> <attr fieldname="ObjType" value="17" key="true" /> TagName="Articul" - Имя поля из которого брать значение. Value=”StrToDate(Date())” - Константа или формула расчета значения.

Для боле детальной информации по структурам XML файлов см. файл "Шаблоны для xml.doc".

Виды Конвертаций

ГБ -> ХХХ Рассмотрение процесса порождения данных для третей среды не целесообразно, т.к. требования по предоставляемым данным из ГБ может неограниченно варьироваться. В большинстве случаев – это выполнение какого-либо отчета в ГБ, с последующим сохранением полученных данных в текстовый файл.

ХХХ -> ГБ Как правило, данные для импорта, представляют собой текстовые файлы. Конечным же результатом преобразований данных является файл формата CDS – «Обменской» структуры (см. Приложение 3). Текстовые файлы могут быть произвольной структуры, с разделителями (TAB), с фиксированной шириной колонки. Первым шагом при конвертации надо сделать перевод из текстового файла в XML, при этом разбив файл на колонки. По результатам обработки получим XML файл структуры Fld0=””, Fld1=””,...,FldN=””. После чего есть возможность сделать из XML -> CDS файл (если не требуется доп. обработки) для записи в базу с помощью обмена.

ГБ -> ГБ Используется в основном при создании новых баз ГБ, или для организации разовых обменов - например, для перекачки всех товаров или партнеров или восстановить ссылочную целостность относительно базы приемника и т.п. Во время перекачки обычно фильтруются субсеты объектов при помощи пользовательских схем обмена. Применяются форматы конвертирования: XML и CDS.

Пример скрипта, расположенный в Приложении 4


Ошибки и конфликтные правки


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


Рис.2.5.1 Окно с отчетом о завершенной сессии

На закладке «Ошибки» - информация об ошибках при записи на стороне клиента (верхняя половина) и сервера (нижняя половина). На закладке «Отчет» - список объектов, которые были в пакете для записи для клиента и сервера. На закладке «Исправить» - есть возможность запустить отчет, по результатам которого можно исправить ошибки. На закладке «Версии» - средство для восстановления баз по истории обмена. Ошибки следует разрешать в порядке «от простого к сложному». Т.е. если в пакете есть партнер, который не записывается и документ, выписанный на этого партнера, то первым делом надо исправить ошибку с записью партнера. Другими словами, к разбору ошибок, связанных с документами, стоит переходить только в том случае, если кроме других ошибок нет. При ошибках в документах первыми стоит разбирать ошибки с приходами и актами передачи и в последнюю очередь с расходными документами. Ниже рассмотрим различные ситуации и способы их разрешения.

2.5.1 Ошибка при восстановлении партии товара

Текст ошибки выглядит следующим образом: ошибка при записи: документ [Id=270859] Прих тов П7351 от 06.09.02, клиент Фирма, ООО. Возможные причины:

                                          • +

Что менялось: Ошибка при восстановлении партии товара МАЛЫШОК 200г 10[#5198]. документ [Id=270859] Прих тов П7351 от 06.09.02, клиент Фирма, ООО. Heap: [MEMO] -> [MEMO] Субсет Goodies и т.д.

В случае возникновения подобной ошибки необходимо запустить ГБ на ту базу, при записи в которую возникла ошибка. Затем найти указанный в тексте ошибки товар, в контекстном меню выбрать пункт «Восстановление партии товара». В случае отсутствия это пункта, сообщите об этом разработчикам. После выбора данного меню вам будет выдано окно с сообщением, о результатах восстановления партии - если партии успешно восстановились, то переходим к следующему товару. Если по каким либо причинам в окне результат будет ошибка – ситуация требует разбора, а, возможно, и помощи разработчиков. Если партии товара(ов) были успешно восстановлены, то в следующий раз при обмене этих ошибок уже не будет.

Объект с таким названием уже существует

ошибка при записи: счет [Id=12422] Возможные причины:

                                          • +

Что менялось: Счет с названием 70.520000096 уже существует счет [Id=12422] +********************* Вставка Id:NULL -> 12422 Name:NULL -> 70.520000096

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


Попытка записать строчку с товаром А и сертификатом, отсутствующим в базе

ошибка при записи: документ [Id=273712] Прих тов П15849 от 12.09.02, клиент Фирма, ООО. Возможные причины:

                                          • +

Что менялось: Попытка записать строчку с товаром каша овсяная молочная 300г[#949] и сертификатом, отсутствующим в базе данных документ [Id=273712] Прих тов П15849 от 12.09.02, клиент Фирма, ООО. +********************* Вставка Id:NULL -> 273712 Firm:NULL -> 7461 OperationDate:NULL -> 12.09.02 Kind:NULL -> 102 Currency:NULL -> 1 .....

 Вставка
 Articul:NULL -> 649

....

 Pack:NULL -> 2
 Субсет Certificates
   +*********************
   Вставка
   Certificate:NULL -> 22077
   Quantity:NULL -> 24

и т.д.

Для разрешения данной ситуации необходимо запустить ГБ на ту базу, из которой передавался документ. Затем найти указанный в тексте ошибки товар, в свойствах товара выбрать указанный сертификат и «пошевелить его», т.е. поменять что-нибудь в свойствах и вернуть назад. Либо: найти указанный в ошибке документ, встать на указанную строчку товара, нажать Alt+Enter, при этом узнать на какой сертификат был выбран. После этого находясь на товарной строке нажать Ctrl+Space - и свойствах товара выбрать указанный в документе сертификат, вызвать его свойства и «пошевелить». После этого в следующем сеансе обмена в пакете приедет и требуемый сертификат, и ошибка, следовательно, исчезнет. Можно воспользоваться и другим вариантом – добавить запись непосредственно в таблицу версий запросом, например, insert into gbversions values (6,0,17,код сертификата,0,0) (Такой запрос годится только для добавления в базу некаскадного клиента либо сервера, так как добавляет версию на депот 6). Недохождение по обмену сертификатов (равно как и других объектов) может быть только разовой, редкой ситуацией. Если наблюдаются массовые недохождения объектов, необходимо разобраться, почему это может происходить.

Не хватает N ед. товара A (Id) с серией "..." (Id) на складе "... " (Id)...

Существует два основных вида ошибок такого рода, (см. рис. ниже) определяется наличием строки «Не разрешены конфликты:». Первый (на рисунке - «У клиента») - это когда остатков на складе фактически хватает. Второй случай, когда товара на складе действительно не хватает – тогда появляется строка Не разрешены конфликты, в которой перечислены остатки, которых не хватает для записи ВСЕХ документов, застрявших в ошибках.


Рис.2.5.2 Два вида ошибок.

Поскольку ошибки могут быть как на стороне клиента, так и на стороне сервера - мы рассмотрим ситуацию, когда ошибки возникли на стороне сервера. (Если же ошибки возникли на стороне клиента, то необходимо поставить галочку «Ошибки клиента» и нажать рядом расположенную кнопку «Отчет». После этого выполнить описанные ниже действия) Рассмотрим первый случай, когда товар на складе есть, тем не менее, выдается такое сообщение об ошибке. Такая ситуация возможна, когда в пакете идет и приход на товар и расход, в такой ситуации нужно несколько раз произвести обмен - в первый раз запишутся все приходы, а потом расходы. Или при обмене, когда создавались корректирующие документы, возникла ошибка (типа «Ошибка при восстановлении партии товара» или созданные во время работы корректирующие документы не смогли удалиться). При этом можно попробовать поставить параметр, по которому не будут автоматически удаляться корректирующие документы, но не забыть их удалить после проведения обмена с помощью ГБ (корректирующие документы создаются с номером= “Correct”, Firm=0, Partner=0).

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

1. Сверить документы в базах по типам документов. Закладка «Сравнения» см. подробное описание закладки в п.2.1.5. При чем, пользоваться этим способом можно только в случае если товарные документы, влияющие на остатки, ходят «как есть». Т.е. при обмене по схемам не преобразуются тип документа, операция.


Рис. 2.5.3. Пример результатов сравнения документов

После того как получен отчет и видны различия, необходимо проанализировать эти различия. Например, решено часть документов прислать заново с клиента на сервер. В этом случае можно либо воспользоваться кнопкой В версии клиента, либо написать запрос вида insert into gbversions и пнуть его через встроенный SQL в закладке SQL. В случае, если хочется наоборот добавить версии на сервер, нужно пользоваться кнопкой В версии серверу После этих процедур проводят обмен, при котором синхронизируются товарные документы, и, следовательно, конфликты разрешатся.

2. Сверить информацию о движении по серии.

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

Рис. 2.5.4. Пункт с суммарной информацией

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


Рис. 2.5.5. Запуск отчета «Движение по серии»

Далее мы можем запустить отчет «Движение по серии», либо по одной серии, либо по всем сразу. Для этого в группе «Запуск движения по серии» указываем период, за который хотим получить отчет (лучше с запасом по датам как в прошлое, так и в будущее) и жмем кнопку «По серии» (в этом случае запускается движение по серии, на которой стоит курсор) или кнопку «По всем сериям» (запускается отчет по всем сериям). Для просмотра результатов работы отчета «Движение по серии» на основном окне программы, на закладке «Сравнения» есть кнопка «<?>».


Рис. 2.5.6. Панель с кнопкой просмотра отчета

По этой кнопке выдается окно (рис. 2.5.7), где показываются различия движения по сериям - документы. Далее необходимо решить, на какой стороне (клиент/сервер) документ является верным и в той базе добавить его в версии, чтобы он пришел в другую базу. Для этого в поле со списком выбираем действие, и жмем кнопку «Выполнить»


Рис. 2.5.7 Результаты отчета «Движение по серии»

- В версии клиенту 		- отправить клиенту версии на те документы, которых нет на сервере.
- В версии серверу 		- добавить в версии серверу те документы, которых нет на клиенте.
- Выделенные клиенту 	- добавить клиенту в версии выделенные документы.
- Выделенные серверу 	- добавить серверу в версии выделенные документы.

После соответствующих добавлений в версии - производится обмен, при котором записываются недостающие документы, и соответственно конфликты разрешаются.


РАБОТА ОБМЕНА В "РУЧНОМ" РЕЖИМЕ

Этот режим работы клиента и сервера используется в случае отсутствия возможности соединения по сети. В этом режиме файлы, которыми обмениваются клиент и сервер – передаются на дискетах или пересылаются по почте. Обмен в «ручном» режиме реализован на скриптах, см. раздел 2.1.6. Тексты скриптов «зашиты» в программы клиента и сервера. При «ручном» обмене используется Прямой порядок обмена, т.е. Клиент собирает свои изменения первым. Настройка Сервера На сервере необходимо перейти на закладку «Скрипты». Указать в Поле «От Отдела с Ид=» ид Клиента. В Поле «Имя скрипта=» указать путь к файлу скрипта, для сохранения, которое происходит по запуску скрипта и Будет подгружаться потом при запуске Сервера. Нажать на кнопку «М», по которой формируется скрипт. Для начала выполнения скрипта жмем кнопку «Выполнить».


Рис. 2.6.1. Настройки сервера

Настройка Клиента На клиенте необходимо создать пустой файл с расширением scr. Далее в настройках перейти на закладку «Скрипты», нажать кнопку выбора файла и выбрать пустой файл. Принять настройки, перегрузить клиента, см. рис.2.6.2

Рис. 2.6.2. Настройки клиента

Нажать Ctrl+E – для входа в режим редактирования скрипта, см.рис2.6.3, нажать кнопку «Вручную», потом сохранить(дискета).

Рис. 2.6.3. Редактирование скрипта на клиенте Закрыть форму, перегрузить клиента. После запуска клиента нажать Ctrl+R – для запуска скрипта. Далее вся работа организована в диалоговом режиме, т.е. после каждой операции, быдет выдаваться сообщение с подробными инструкциями, как поступить дальше.

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


ВОССТАНОВЛЕНИЕ ПОГИБШЕЙ БАЗЫ ЧЕРЕЗ ОБМЕН

Предположим, что имеется филиальная база, которая не подлежит восстановлению. Либо время на восстановление достаточно большое. При наличии рабочего бэкапа (или копии) базы за какой-то из предыдущих дней можно восстановить всю потерянную информацию обменом из головной базы (при условии, что этот обмен проходил, естественно) Порядок действий: 1. На сервере обмена создать папку, в которую скопировать все интересующие законченные сессии (из каталога Exchange/Complete Sessions/<Код филиала>) 2. В обмене зайти в закладку История/Любая сессия от этого клиента/Версии 3. Выбрать папку, в которую скопированы сессии из п.1 4. Выбрать радиокнопку Imp+Exp (если тебе надо отправить все, что приходило от него и уходило к нему). Либо только Imp (если надо отправить все, что приходило ОТ него) или только Exp (если надо отправить все, что уходило К нему). Для отдела – поставить депот филиала, например, 52. 5. Нажать кнопку Сканировать, появляется список версий, которые фигурировали в этих сессиях. 6. Кнопка В версии добавляет все эти версии в таблицу версий для этого депота. 7. Провести обмен как обычно, уходит все объекты в том состоянии, в котором они сейчас на сервере. То есть если документ приходил от клиента 3 раза в состоянии 100, 200, 1000, то уйдет именно конечное состояние документа (1000) – то, которое сейчас в базе сервера. Все объекты, встречающиеся во всех выбранных сессиях (пусть их даже будет 1000 штук за неделю), уйдут по одному разу.

МОНИТОР ОБМЕНА

В случае, если у компании много филиалов и много серверов обмена, довольно много времени занимает хождение по разным машинам и проверка ошибок от клиентов. (Даже если пользоваться кнопкой Список клиентов с их состоянием). Здесь можно воспользоваться специальной программой под названием Монитор обмена. В ней регистрируются все нужные сервера обмена, можно смотреть состояния завершенных сессий и ошибки по ним.


Рис. 3.1. Вид рабочего окна монитора обмена

РАБОТА ХРАНИМЫХ ПРОЦЕДУР

В процессе работы пользователя в ГБ информация обо всех его действиях по изменению, созданию и удалению объектов сохраняется с помощью соответствующих триггеров (execute procedure Add_gbversion(obj_type, obj_id))в таблице GBVERSIONS. Таблица имеет следующую структуру:

DEPOTID - ид отдела, для которого сделана версия. (6-для всех) MADEBY - ид отдела, который сделал версию, (6 - сервер, 0 - пользователь) OBJTYPE - тип объекта (см. приложение 6) OBJID - ид объекта AUXID - дополнительный ид объекта PROCESSING - признак, что версия «собиралась» (0 или 1)

Варианты сочетания DEPOTID и MADEBY:

Сервер Каскадный Сервер DEPOTID = 6 (или N >50) DEPOTID = 6 (или N >50) MADEBY = 6 MADEBY = 6

Клиент Каскадный Клиент DEPOTID = 6 DEPOTID = -6 MADEBY = 0 MADEBY = 0

Если при обмене сервер встречает строку с DEPOTID=6, он «раскалывает» версию на количество отделов, указанных в папке с ид=6. Т.е. вместо одной строки появляется несколько с конкретными DEPOTID-ами. Версия же с DEPOTID=6 удаляется.

Сбор изменений

1. GBVersions_Get(SplitOnly) – «раскалываются» версии; 2. Optimize_Versions – для удаления лишних версий; 3. GBVersions_Get – для сбора версий. 4. GetRemote_versions – для сбора версий из распределенных баз.

После чего по собранным версиям добываются объекты и упаковываются в пакет для отправки.

Запись изменений

Перед записью пакет сортируется по полю ObjType. Сначала происходит запись всех объектов (Data), а за тем удаление (Deleted). При этом, если про записываемый или удаляемый объект есть запись в таблице gbversions в базе приемника - она удаляется. Во время записи происходит формирование подтверждений, которые потом отправляются в базу источник. Запись происходит в три «круга» - как попытка развести зависимости м/у объектами. Документы записываются в последнюю очередь, при этом при необходимости создаются корректирующие документы.

Прием подтверждений

При записи подтверждений происходит удаление строки из таблицы gbversions, которые указаны в файле подтверждений. Структура ключевых полей в таблице gbversions и пакете совпадают.

ХОЖДЕНИЕ СОБСТВЕННЫХ ТАБЛИЦ ПО ОБМЕНУ

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

Способ 1. Если таблица привязана к существующим в ГБ стандартным объектам (партнерам, товарам, документам и т.п.), то можно использовать фирмозависимые процедуры вида <_ADD_EXTRAFIELDS>, <_PUT_EXTRAFIELDS> и <_FILL_EXTRAFIELDS> (например, ARTICULS_FILL_EXTRAFIELDS), которые создают субсет с данными из таблицы, заполняют его и обрабатывают его изменения.

На вставку, изменение и удаление из таблицы создаются триггеры, в которых вызывается Add_Aux_Gbversion с типом и кодом объекта, к которому привязана изменяемая запись.

Этот способ можно использовать только при оносительно небольшом количестве записей, поскольку при изменении одной записи всегда передается группа записей, связанных со стандартным объектом.

Пример использования: ABC-группы товара. Есть таблица Товар-Склад-ABC Можно сделать ее хождение вместе с товаром.

Способ 2. Если вы работаете с каким-то нестандартным объектом, созданным вами, то можно использовать механизм классов. Как пример можно рассмотреть класс адресов доставки (код 110). В классе должно быть прописано название для процедур, работающих с объектами этого класса. Процедур должно быть 2: • <_GET> • <_PUT> Например, для класса адресов доставки в поле Процедуры прописано partneraddresses. Соответственно, в базе должны быть процедуры partneraddresses_get и partneraddresses_put

Триггеры для PartnerAddresses вызывают Add_Aux_GbVersion с типом 110 и кодом адреса доставки.


ТЕРМИНЫ

ОнЛайн - время, когда клиент может произвести полный цикл обмена, т.е. променяться «полностью». ОффЛайн - время, когда клиент выкладывает свои изменения на сервер и дальше этой стадии обмен не идет, до тех пор, пока не наступит время ОнЛайн. ОффЛайн Приемка - время, когда клиент выложил свои изменения и не может дальше меняется, сервер в указанное время сканирует каталоги и принимает изменения, присланные клиентом. HSTO - (Head Send TimeOut) Невозможно отправить заголовок пакета. Обычно возникает совместно с BSTO. BSTO - (Body Send TimeOut) Невозможно отправить тело пакета NetWatcher - Проверка соединений/сети. SYSRequest - К клиенту пришел системный запрос. Например, о состоянии обмена. (TR) -(Transaction) Документ записывается в отдельной транзакции BO - (Back Order) Обмен с клиентом в обратном порядке


Приложение 1. Пример файла установок сервера

  1. GB Exchange Server, Copyright(c) GB soft 2000.Server Initialization file
  2. Секция [Main] - описывается путь к БД
  3. Путь к Базе Данных, можно использовать и сетевой путь При чем, для NetBIOS - начинается с
  4. \\имя\путь; для TCP/IP - имя:путь. Имя библиотеки – необязательно, может быть gds32.dll или fbClient.dll
  5.  !ОБЯЗАТЕЛЕН!

[Main] DBPath =net:d:\bases\base.gdb DBLogin= DBPass= ClientLibrary=

  1. Секция [Server] - Описываются основные установки для сервера Порт Сервера, по умолчанию = 1111. При
  2. изменении ОБЯЗАТЕЛЬНО оповестить всех клиентов.
  3.  !ОБЯЗАТЕЛЕН!

[Server] Port=1111

  1. Максимально возможное количество одновременно работающих пользователей.
  2. Для ограничения нагрузки на Сервер. По умолчанию и минимальное значение = 1

MaxConnection=10

  1. Путь для создания дерева каталогов со списком активных и завешенных сессий.
  2.  !ОБЯЗАТЕЛЕН!

ExchangePath =\Exchange

  1. Путь и имя файла в который пишется информация о работе Сервера.
  2.  !ОБЯЗАТЕЛЕН!

LogFileName=\gbServer.log

  1. Время с секундах, по истечении которого будет выдаваться сообщение о
  2. задержке пакетов в сети. По умолчанию = 5 сек.

TimeOut_InSec=10

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

MaxVersionInPacket=3000

  1. Число версий в пакете, который соберет сервер

PartialExchange=Yes

  1. Отправлять ли результаты обмена по ЛОКАЛЬНОЙ сети. Выполняется строка: net send
  2. SendResultTo "message" По умолчанию = No

SendReportMsg=No

  1. Расключаться по завершении обмена (сохранять или нет коннект с базой данных)

DisconnectOnEnd=No

  1. Имя компьютера в ЛОКАЛЬНОЙ сети на которое придет сообщение о завершении обмена.

SendResultTo=

  1. Число версий, которые будут учитываться при обмене. Используется,
  2. если пакет с изменениями очень велик. По умолчанию = 0, т.е. все изменения.
  3. -1 не собирать изменений

MaxVersionInPacket =0

  1. Сканировать пользователей - не появились ли дохлые коннекты. Время в секундах

ScanForLostConnect = No ScanForLostConnect_Period=30

  1. Рассоединяться с клиентом по завершению сессии обмена для плохих каналов лучше использовать значение - No

DisconnectOnEnd =No

  1. Каскадный сервер

Cascade=Yes LoginTimeOut=2 OnLineDays=Yes UserAccessList=51;52

  1. Домениваться частичными подтверждениями

AckPartial=No ClientFieldName=Heap.@LastEx

  1. Секция [InterFace] - Описываются установки интерфейса для сервера

[InterFace]

  1. С какой даты(включительно) не показывать завершенные сессии

FilterDate=02.11.25

  1. Период хранения истории об обмене Сессии, Логи, Скрины

KeepSessions =30 KeepLogs =1 KeepSCRs =5

  1. Координаты окна

XPos=3 YPos=1 Width=564 Height=715 CSplit=62 QSplit=75

  1. Настройки для isql

SQL_Commit=Yes SQL_Statistic=No SQL_List=No SQL_Plan=No SQL_RowCount=No

  1. Секция [Schemes] - Cхемы обмена дополнительной информацией после основного обмена. Т.к. файлы Лога и
  2. Ошибок могут быть большими или не нужными, то чтобы с экономить время обмена их можно отключить.

[Schemes]

  1. Отправлять ли клиенту отчет об ошибках при принятии изменений. По умолчанию = Yes

SendErrFile = Yes

  1. Отправлять ли клиенту файл описания работы программы Клиента при принятии изменений. По умолчанию = No

SendLogFile = No SendMessages=Good;Error;Interrupted;Status;OldVersion;OffLine;ShowWindow;

  1. Секция [ClientMap] - Список соответствия Числовых Идентификаторов Клиентов (UID) их полному названию.
  2. Формат UID = Полное_имя

[ClientMap] 51 =51Бухгалтерия 52 =52Врангель

  1. Секция [Priority] - Список приоритетов при обмене для Клиентов. Формат UID = Приоритет. Приоритет = 0..9. 9 -
  2. Максимальный. Признак, что приоритеты будут учитываться при обмене

[Priority] Use =Yes 51 =2 52 =8

  1. Секция [OnLineTimeGrid] - Таблица периодов для OnLine-обменов Клиентов. ScanPeriod - время в мин. через
  2. которое будут сканироваться каталоги Формат UID = Время-Время (в формате 02:56 или 23:30, БЕЗ секунд)

[OnLineTimeGrid] ScanPeriod =0 51 = 52=09:00-21:00

[TimeToSleep] NoBody= ForAll=No 51= 52=

  1. Дни «безусловного Online-a»

[OnLineDays] 1=No 2=No 3=No 4=No 5=No 6=No 7=No

  1. Запуски программ перед и после обмена

[Execute] Execute=No AtTime= 1ProgName= ClientList= 2ProgName=

  1. IP адреса, с которых последний раз заходил клиент

[ClientsLastIP] 51=192.168.10.3 52=192.168.10.3

  1. Время сбора изменений

[Client_getChangesTime] 52=15.07.02 13:31:46 51=23.07.02 17:41:40

  1. Настройки для создания корректирующих документов

[CreatingDoc] DocId=ToKill FirmId=7461 DocType=33 OpType=102

  1. Прочие параметры

[OtherParams] CertMinDate=01.07.2000 CertMaxDate=22.07.2002

  1. Параметры для сравнения документов

[DocList] Firm=-1 StartDate=01.09.2002 FinishDate=02.09.2002 DocTypes=19;22;23 StartId= EndId= RStartDate=22.07.2002 RFinishDate=22.07.2002 Stocks=757;3366;3363;758;3367;3364;1514;3368;3365

  1. Кол-во версий на стороне клиента

[ClientMaxVersionInPacket] 51=0 52=0

  1. Обратный порядок для обмена

[BackOrder] 51=0 52=0

  1. производить авто обновление клиента

[LiveUpdate] 51=No 52=Yes

  1. Автоматом корректировать отрицательные остатки

[Correct_NegativeRests] 51=No 52=No

  1. кэширование записи (не исп. временно)

[preCaching] 51=No 52=No

  1. скрипты

[Scripts] UserId=51 FileName=D:\gbAbout\gbExchange\Server\manual_srv.scr


Приложение 2.Сбор партнеров из папок 1, 2, 3, 4, 5, 6, 13, 20

ALTER PROCEDURE GBVersions_GET_Custom (

 Params VARCHAR(32640) CHARACTER SET WIN1251

) RETURNS (

 Result VARCHAR(32640) CHARACTER SET WIN1251

) AS DECLARE VARIABLE PDs INTEGER; DECLARE VARIABLE RDs INTEGER; DECLARE VARIABLE Tmp INTEGER; DECLARE VARIABLE I INTEGER; DECLARE VARIABLE DepotList INTEGER;

DECLARE VARIABLE iServer INTEGER; DECLARE VARIABLE iMaxVersion INTEGER;

DECLARE VARIABLE dvObjId INTEGER; DECLARE VARIABLE dvAuxId INTEGER; DECLARE VARIABLE dvObjType INTEGER; DECLARE VARIABLE dvNeedAppend INTEGER;

DECLARE VARIABLE oAuxId INTEGER; DECLARE VARIABLE oObjId INTEGER; DECLARE VARIABLE oObjType INTEGER;

DECLARE VARIABLE dvPartner INTEGER; DECLARE VARIABLE dvProcessing SMALLINT; DECLARE VARIABLE dvCurrentDepot INTEGER; DECLARE VARIABLE dvDepot INTEGER; DECLARE VARIABLE dvDepotCount INTEGER; DECLARE VARIABLE dvVersionCount INTEGER; DECLARE VARIABLE dvMadeBy INTEGER;

DECLARE VARIABLE dvPrevObjType INTEGER; DECLARE VARIABLE dvPrevObjId INTEGER; DECLARE VARIABLE dvPrevAuxId INTEGER;

BEGIN

 I = PutError(0, );
 PDs = DsByVarChar(Params);
 dvVersionCount = 0;
 dvCurrentDepot = Depot();
 iServer        = 0;
 iMaxVersion    = 0;
 RDs = DsCreate('GBVersions');
 oObjType = DsAddField(RDs,'I4,Тип,,'     ,'ObjType');
 oObjId   = DsAddField(RDs,'I4,Код,,'     ,'ObjId');
 oAuxId   = DsAddField(RDs,'I4,Доп. код,,','AuxId');
 /* Проверяем, что никто другой не собирает изменения */
 IF (ValidAmount(GetRate(-1,'01.01.1980')) >= 1) THEN
 BEGIN
   IF (GetRate(-1,'01.01.1980') = 1) THEN
   BEGIN
     I = PutError(7000, 'Кто-то уже собирает изменения');
     EXCEPTION GB_EXCEPTION;
   END
 END
 /* Никто другой не собирает изменения, ставим семафор */
 I = AddRate(-1,'01.01.1980',1);
FOR
   SELECT 0,
          Id,
          0,
          depot(),
          0
   FROM   partners
   WHERE  node in (1, 2, 3, 4, 5, 6, 13, 20)
   INTO   :dvObjType,
          :dvObjId,
          :dvAuxId,
          :dvDepot,
          :dvMadeBy
 DO
 BEGIN
       tmp = DsAppend(RDs);
       tmp = DsPutInteger(RDs, oObjType, dvObjType);
       tmp = DsPutInteger(RDs, oObjId,   dvObjId);
       tmp = DsPutInteger(RDs, oAuxId,   dvAuxId);
 END
 Result = DsInitResult();
 WHILE (DsDoneResult(Result) = 0) DO
 BEGIN
   Result = DsToVarChar(RDs);
   SUSPEND;
 END
 I = AddRate(-1,'01.01.1980',0); /* free semaphor */
 Tmp = DSFree(PDs);
 Tmp = DsFree(RDs);
 Tmp = FreeIds(DepotList);
 WHEN ANY DO
 BEGIN
   IF (GetError() <> 7000) THEN /* not a semaphor error */
     I = AddRate(-1,'01.01.1980',0); /* free semaphor */
   Tmp = DSFree(PDs);
   Tmp = DSFree(RDs);
   Tmp = FreeIds(DepotList);
   Result = DsErrorResult();
   SUSPEND;
 END

END


Приложение 3. Функции и их описание

Регистр текста команд НЕ учитывается.

  1. Run= Startup | OnSend | OnDBaction

Тип скрипта – порядок выполнения. Варианты значений OnSend иOnDBAction – временно не работают.

  1. Debug= On | Off

Выводить в лог отладочную информацию

  1. XMLPath=D:\gbExchange\XML

Путь для файлов XML. Далее может использоваться при указании пути к файлу.

  1. DATAPath=D:\gbExchange\Work

Путь для файлов с данными. Может использоваться при указании пути к файлу.

  1. WORKPath=D:\gbExchange\Work

Рабочий каталог. Может использоваться при указании пути к файлу.

  1. ERRORPath=D:\gbExchange\Error

Путь для файлов с описанием ошибок.

WaitForDB Команда без параметров. Приостанавливает выполнение скрипта до сигнала БД о завершении работы или ошибке.

WaitForNet Команда без параметров. Приостанавливает выполнение скрипта до сигнала по сети о пришедших файлах.

Exit Команда без параметров. Выход из программы клиента.

File_Proc FileName Команда с одним обязательным параметром – имя файла. Отправляет файл на обработку БД. Файл должен быть в формате «обмена». [УСТАРЕВШАЯ, см. dbtask_add]

FileToDs Src_txt, XMLTemplate, ObjName, ResultDSName Команда с четырьмя обязательными параметрами – Имя текстового файла, XML-шаблон для преобразования текстового файла в датасет, Имя объекта, Имя файла – датасета в который сохранится результат. Преобразование формата файла из текстового в датасет. Если файл-датасет уже существует, и он той же структуры, что и создаваемый, то происходит процесс ДОПИСЫВАНИЯ. Т.е. файл-датасет не создается снова.

FileToXml FileName, XMLTemplate, objName, DSFileName Команда с четырьмя обязательными параметрами – Имя текстового файла, XML-шаблон для преобразования текстового файла в датасет, Имя объекта, Имя файла – датасета в который сохранится результат. Преобразование формата файла из текстового или DBF в XML.

DsToFile Ds_File, XMLTemplate, TXTFile Команда с тремя обязательными параметрами – Имя файла датасета, XML-шаблон для преобразования датасета в текстовый файл, Имя файла – в который сохранится результат. Преобразование формата файла из датасета в текстовый файл.

CompareDS Ds_File1, Ds_File2, DsResult_File Команда с тремя обязательными параметрами – Имя файла датасета1, Имя файла датасета2, Имя файла – в который сохранятся различия. Сравнить два датасета в формате «обмен-документы» по сумме, количеству, флагу и партнеру.

Zip src, des Команда с двумя обязательными параметрами – Имя файла источника, Имя файла приемника. Запаковать файл-источник и поместить в файл-приемник. Формат файла приемника - gZIP.

UnZip src, des Команда с двумя обязательными параметрами – Имя файла источника, Имя файла приемника. Распаковать файл-источник и поместить в файл-приемник. Формат файла источника - gZIP.

Execute prog_name.exe[params] Команда с одним обязательным параметром – Имя файла - программы. Параметры (могут отсутствовать) указываются в той же строке что и имя программы в квадратных скобках. Выполнить файл с ожиданием его завершения.

MoveFile src, des Команда с двумя обязательными параметрами – Имя файла источника, Имя файла приемника. Переместить файл из источника в приемник. С перезаписью файла-приемника.

Log log_string Команда с одним обязательным параметром – строка отладочной информации. Выводится в Лог клиента и в файл «дата.scr».

SetDB db_path, db_login, db_pass Команда с тремя обязательными параметрами – Имя файла базы данных, имя пользователя, пароль пользователя. Установить БД с которой будем работать. По умолчанию используется БД указанная в настройках обмена.

SetClient_Id user_id Команда с одним обязательным параметром – Идентификатор клиента-обмена. От какого отдела клиент будет работать с БД. По умолчанию значение берется из настроек клиента.

IfFileNotExistThenExit Функция с одним обязательным параметром – имя файла, или маска(*.*, ?e?.txt, и т.д.). Проверка на наличие файла, и выход из программы, если его нет.

IfFileNotExistThenGoto Функция с одним обязательным параметром – метка. ВНИМАНИЕ метка указывается БЕЗ ‘:’, а сама метка с ‘:’. ( IfFileNotExistThenGoto end )

GotoBegin Функция без параметров. Перейти на начало скрипта (загрузить файл скрипта снова). Для организации циклических обработок.

EatItAll FileToXml FileName, XMLTemplate, objName, DSFileName Команда с четырьмя обязательными параметрами – Путь к текстовым файлам, XML-шаблон для преобразования текстового файла в датасет, Имя объекта, Имя файла – датасета в который сохранится результат. Преобразование формата файлов из текстового в XML. Т.е. все найденные файлы *.txt преобразуются в cds.

ClearAll filePath\*.extention Функция с одним обязательным параметром - Путь к файлам с маской на конце. Пример: c:\tmp\*.txt. Удаление всех файлов по маске.

CopyFile src, des Команда с двумя обязательными параметрами – Имя файла источника, Имя файла приемника. Копировать файл из источника в приемник, с перезаписью файла приемника.

GotoLine label Функция с одни параметром - метка. Переход на метку. В тексте метка обозначается как имя+’:’. Т.е. команда gotoline ok - это переход на метку в тексте “ok:”.

IIF Dataset, Expresion, gotoline xxx Функция с тремя обязательными параметрами- датасет на которым вычисляется выражение, выражение, переход на метку (команда и имя метки пишется в одной строке!). Условный оператор, значение вычисляется «на датасете» - т.е. возможно использовать поля из датасета при вычислении. В случае истинности выражения происходит переход на метку, иначе продолжается выполнение скрипта.

Include <Another_Script_file> Функция с одним обязательным параметром – путь к файлу - скрипту в скобках “<...>”. По этой команде автоматически запускается на выполнение скрипт, указанный в параметрах функции include. Можно указывать просто имя файла <part1.scr>, тогда путь будет браться от скрипта, из которого вызывается под-скрипт. Выполнение под-скрипта происходит с ожиданием, т.е. пока не выполнится под-скрипт - основной скрипт будет стоять на месте.

DBTask_Add DataSet_In, DataSet_Out, Prameters Функция с тремя обязательными параметрами – Входной файл с данными, результат и параметры для задания. По этой команде добавляется задание для БД в НОВОМ формате. Формат параметров – текстовый через «;», ключи: InFileZiped =True/False; - признак, что входной файл запакован. OutFileZiped=True/False; - признак, чтобы выходной файл запаковали. DataType=Import/GetChanges/OOBExport/Export_Ack/Export_Errors/ Analize/GetDocsList/GetRests/GetChanges_Ex/CustomProc; - тип задания: Import - файл-импорт прием изменений. GetChanges - собрать изменения (как в обмене) OOBExport - собрать изменения «Срочные» (OutOfBound) Export_Ack - принять подтверждения на отправленные изменения. Export_Errors - принять ошибки.(добавить версии на указанные объекты) Analize - получить движение по серии, параметры - входной файл. GetDocsList - получить список документов, параметры - входной файл. GetRests - получить остатки, параметры - входной файл. GetChanges_Ex - расширенный сбор изменений (возможность указать своих схемы обмена, получить версии из файла). CustomProc - позыв «любой» процедуры, параметры - входной файл. OtherParams=xxx; - прочие параметры FileInType=CDS/TXT/XML/DBF; - формат входного файла, по умолчанию CDS FileOutType=CDS/TXT/XML/DBF; – формат выходного файла, по умолчанию CDS

Call_Proc DataSet_In, DataSet_Out, Prameters Функция с тремя обязательными параметрами – Датасет параметров, Датасет результатов, параметры – строка. Вызов указанной процедуры с параметрами, и сохранение результатов. proc_name=xxx; - имя процедуры. InFileZiped=True/False; - признак, что входной файл запакован. OutFileZiped=True/False; - признак, чтобы выходной файл запаковали. OtherParams=xxx; - прочие параметры FileInType=CDS/TXT/XML/DBF; - формат входного файла, по умолчанию CDS FileOutType=CDS/TXT/XML/DBF; – формат выходного файла, по умолчанию CDS

Dialog_YN message, label_if_YES, label_if_NO Функция с тремя обязательными параметрами – текст сообщения, метка перехода если в диалоге нажали «YES», метка для перехода, если в диалоге нажали «NO». Функция диалога с вариантами ответа YES-NO. По выбранному ответу осуществляется переход на указанную метку. Если метка не указана, - продолжается последовательное выполнение скрипта.

Load_DepotSchemes depot_scheme_cds_file Функция с одним обязательным параметром - имя файла-схем. Используется для установки пользовательских схем обмена, при это схемы обмена, записанные в БД, не учитываются. Используется ПЕРЕД функцией DBTask_Add с заданием GetChanges_Ex, при чем, действие пользовательских схем прекращается после завершения работы задания.

Sleep milliseconds Функция с одним обязательным параметром - время задержки в Миллисекундах. Используется для организации искусственной задержки при организации циклов.

Приложение 4. Пример файла - скрипта

прием документов из текстового файла
устанавливаем каталоги
  1. XMLPath=D:\gbExchange\Client\XML\Akrihin
  2. DATAPath=D:\gbExchange\Client\CurSession
  3. WORKPath=D:\gbExchange\Client\Work
  4. ERRORPath=D:\gbExchange\Client\Error

Log Начали!

принимаем документы

FileToDs

  1. DATAPath\DOCUMENT.txt
  2. XMLPath\txtDocs_Temp.xml

doc

  1. WORKPath\import.cds

setdb f:\bases\test_db.gdb

DBTask_Add

  1. DATAPath\import.cds
  2. DATAPath\import_ack.cds

InFileZiped=False;OutFileZiped=False;DataType=Import;OtherParams=xxx;FileInType=CDS;FileOutType=CDS

WaitForDB

MoveFile

  1. WORKPath\errors.cds
  2. WORKPath\errors_doc.cds

Exit


Приложение 5. «Обменская» структура файла CDS

Для просмотра пакетов используется программа PSQL.exe.

[ObjType] [Data] [Deleted]

где ObjType - целое число - тип объекта ГБ. Полный список объектов и их коды см. в Приложении 4. Data - Субсет, структуры, соответствующей типу структуры объекта ГБ. Deleted - Субсет, структуры: Id Ид удаляемого объекта AuxId Доп. ид, для удаляемого объекта, при удалении цен, курсов.

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


Пакет обмена

Субсет с документами

Субсет с удаляемыми объектами

Приложение 6 Типы объектов:

0 Partners Партнеры 1 Articuls Товары 2 Currencies Валюты (наименования) 3 Packs Упаковки 4 Regions Регионы 5 System Системный объект – по обмену не ходит 6 Taxes Налоги 7 DocTypes Тип документа 8 PriceListNames Прайс-листы - названия 9(1000) PriceItems Прайс листы - цены 10 OpTypes Типы операций 11 Docs Документы 12 Security Права доступа 13 Accounts Счета 14 Reports Отчеты 15 Assets Баланс 16 Goodies Товарные строки 17 Certificates Сертификаты 18 CertTypes Типы сертификатов 19 DocDelta Изменения документов – по обмену не ходит 20 ExtraOrders Заказы из Internet – по обмену не ходит 21 Contracts Договора 22 ContractTypes Тип договоров 23 Unassigned Резерв – по обмену не ходит 253 FlagDefs Описание флагов 254 Works Работы 255 Classes Классы

1000 Prices Цены 1001 Course Курсы 1002 Heap's Поля «дополнительно» 1003 Deleted DocLinks Подтверждения об удаленных связях у документа 1004 Rests Остатки по складу 1005 DeletedPartners Удаленные партнеры из Работ 1006 Maps Соотвествия объектов 1007 PrintForms Печатные формы 1008 UserMessages Сообщения пользователей 1009 Holidays Выходные 1010 Invent Инвентаризация 1011 DynamicPrices Динамические цены