<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.gbsoft.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Roxy</id>
		<title>GB wiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.gbsoft.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Roxy"/>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Roxy"/>
		<updated>2026-04-09T21:06:29Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9E%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%86%D0%B5%D0%BD&amp;diff=3207</id>
		<title>Округление цен</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9E%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%86%D0%B5%D0%BD&amp;diff=3207"/>
				<updated>2019-01-17T08:46:19Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: /* Пример 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Товарные документы]]&lt;br /&gt;
== Расчет цен и сумм товарных документов в ГБ ==&lt;br /&gt;
&lt;br /&gt;
В базе данных хранится следующая информация по ценам и суммам товарных документов:&lt;br /&gt;
* Поле PriceList таблицы Goodies содержит цену товарной строчки без всех налогов и затрат.&lt;br /&gt;
* Поле Price таблицы Goodies содержит цену товарной строчки, в которую включены всех налоги и затраты.&lt;br /&gt;
* Поле TotalSum таблицы Documents содержит сумму документа, полученную путем суммирования Price*Quantity по всем товарным строчкам.&lt;br /&gt;
&lt;br /&gt;
Эти поля связаны следующим соотношением:&lt;br /&gt;
&lt;br /&gt;
 Price = RoundPrice( PriceList * Tax + ExpSum )&lt;br /&gt;
 PriceList = RoundPrice( Price )&lt;br /&gt;
 TotalSum = ∑(Price* Quantity)&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
*'''RoundPrice''' – правила округления для Price и PriceList. Определяются следующими параметрами:&lt;br /&gt;
# Поле PriceRough в таблице T$Document_Types задает точность округления для документов данного типа. Если оно равно 0 – округление делается по правилам для валюты, которые хранятся в таблице Currencies.&lt;br /&gt;
# Функция [[SETPRICEROUNDING]] также позволяет изменять правила округления для Price и PriceList. Эта функция может быть использована '''в воздействии договора''' или '''в предусловиях'''.&lt;br /&gt;
# Цены считаются таким образом, чтобы получились круглые цифры для Суммы без НДС, Суммы НДС, Всего с НДС (см. [[#Округление|Округление]])&lt;br /&gt;
&lt;br /&gt;
*'''Tax''' – налог для данного товара, типа операции и собственной фирмы, либо из серии&lt;br /&gt;
*'''ExpSum''' – сумма затрат, выпадающая на данную строчку в соответствии с правилами разнесения затрат для данного типа документов.&lt;br /&gt;
&lt;br /&gt;
Эта информация является избыточной, поэтому возможны ситуации, когда цифры в полях Price и PriceList не соответствуют друг другу.&lt;br /&gt;
&lt;br /&gt;
Для устранения несоответствий служит команда «пересчитать цены» в открытом документе. При этом все цифры пересчитываются в соответствии со правилами округления, в результате чего может измениться общая сумма документа. Можно попытаться подогнать ее под исходную, изменяя цены, но нельзя гарантировать, что это вообще возможно.&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
Одна из цен (Price либо PriceList) всегда округляется до точности, заданной в типе документа. По умолчанию это - цена без НДС (PriceList). Также при помощи [[SETPRICEROUNDING]] можно сделать, чтобы округлялись обе эти цены.&lt;br /&gt;
&lt;br /&gt;
Ряд сумм в документе всегда округляется в соответствии с точностью валюты документа.&lt;br /&gt;
Это:&lt;br /&gt;
* Сумма без НДС (PriceList*Quantity)&lt;br /&gt;
* Сумма НДС (PriceList*Quantity*Tax/100)&lt;br /&gt;
* Всего с НДС (Price*Quantity)&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
=== Пример 1 ===&lt;br /&gt;
В типе документа указано округление цен 0 (по валюте). Валюта рубль, округление до 2 знаков. Круглая цена - без НДС.&lt;br /&gt;
&lt;br /&gt;
Пытаемся выписать товар с НДС=18%, 4 штуки по 165,25&lt;br /&gt;
&lt;br /&gt;
 PriceList = 165,25/1,18 = 140,0423728813559 - округляется до 140,04&lt;br /&gt;
 Сумма без НДС = 140,04*4 = 560,16&lt;br /&gt;
 Сумма НДС = 560,16*18/100 = 100,8288 - округляется до 100,83&lt;br /&gt;
 Сумма с НДС = 560,16 + 100,83 = 660,99&lt;br /&gt;
&lt;br /&gt;
=== Пример 2 ===&lt;br /&gt;
Те же исходные данные, но в типе документа ставим точность 6 знаков&lt;br /&gt;
&lt;br /&gt;
 PriceList = 165,25/1,18 = 140,0423728813559 - округляется до 140,042373&lt;br /&gt;
 Сумма без НДС = 140,042373*4 = 560,169492 - округляется до 560,17&lt;br /&gt;
 Сумма НДС = 560,17*18/100 = 100,8306 - округляется до 100,83&lt;br /&gt;
 Сумма с НДС = 560,17 + 100,83 = 661,00&lt;br /&gt;
&lt;br /&gt;
=== Пример 3 ===&lt;br /&gt;
Исходные данные из примера 1, но в предусловиях документа при помощи [[SETPRICEROUNDING]] задаем округление для цены с НДС&lt;br /&gt;
&lt;br /&gt;
 PriceList = 165,25/1,18 = 140,0423728813559 - НЕ округляется&lt;br /&gt;
 Сумма без НДС = 140,0423728813559*4 = 560,1694915254236 - округляется до 560,17&lt;br /&gt;
 Сумма НДС = 560,17*18/100 = 100,8306 - округляется до 100,83&lt;br /&gt;
 Сумма с НДС = 560,17 + 100,83 = 661,00&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9E%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%86%D0%B5%D0%BD&amp;diff=3206</id>
		<title>Округление цен</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9E%D0%BA%D1%80%D1%83%D0%B3%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%86%D0%B5%D0%BD&amp;diff=3206"/>
				<updated>2019-01-17T08:45:51Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: /* Расчет цен и сумм товарных документов в ГБ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Товарные документы]]&lt;br /&gt;
== Расчет цен и сумм товарных документов в ГБ ==&lt;br /&gt;
&lt;br /&gt;
В базе данных хранится следующая информация по ценам и суммам товарных документов:&lt;br /&gt;
* Поле PriceList таблицы Goodies содержит цену товарной строчки без всех налогов и затрат.&lt;br /&gt;
* Поле Price таблицы Goodies содержит цену товарной строчки, в которую включены всех налоги и затраты.&lt;br /&gt;
* Поле TotalSum таблицы Documents содержит сумму документа, полученную путем суммирования Price*Quantity по всем товарным строчкам.&lt;br /&gt;
&lt;br /&gt;
Эти поля связаны следующим соотношением:&lt;br /&gt;
&lt;br /&gt;
 Price = RoundPrice( PriceList * Tax + ExpSum )&lt;br /&gt;
 PriceList = RoundPrice( Price )&lt;br /&gt;
 TotalSum = ∑(Price* Quantity)&lt;br /&gt;
&lt;br /&gt;
Здесь:&lt;br /&gt;
*'''RoundPrice''' – правила округления для Price и PriceList. Определяются следующими параметрами:&lt;br /&gt;
# Поле PriceRough в таблице T$Document_Types задает точность округления для документов данного типа. Если оно равно 0 – округление делается по правилам для валюты, которые хранятся в таблице Currencies.&lt;br /&gt;
# Функция [[SETPRICEROUNDING]] также позволяет изменять правила округления для Price и PriceList. Эта функция может быть использована '''в воздействии договора''' или '''в предусловиях'''.&lt;br /&gt;
# Цены считаются таким образом, чтобы получились круглые цифры для Суммы без НДС, Суммы НДС, Всего с НДС (см. [[#Округление|Округление]])&lt;br /&gt;
&lt;br /&gt;
*'''Tax''' – налог для данного товара, типа операции и собственной фирмы, либо из серии&lt;br /&gt;
*'''ExpSum''' – сумма затрат, выпадающая на данную строчку в соответствии с правилами разнесения затрат для данного типа документов.&lt;br /&gt;
&lt;br /&gt;
Эта информация является избыточной, поэтому возможны ситуации, когда цифры в полях Price и PriceList не соответствуют друг другу.&lt;br /&gt;
&lt;br /&gt;
Для устранения несоответствий служит команда «пересчитать цены» в открытом документе. При этом все цифры пересчитываются в соответствии со правилами округления, в результате чего может измениться общая сумма документа. Можно попытаться подогнать ее под исходную, изменяя цены, но нельзя гарантировать, что это вообще возможно.&lt;br /&gt;
&lt;br /&gt;
== Округление ==&lt;br /&gt;
Одна из цен (Price либо PriceList) всегда округляется до точности, заданной в типе документа. По умолчанию это - цена без НДС (PriceList). Также при помощи [[SETPRICEROUNDING]] можно сделать, чтобы округлялись обе эти цены.&lt;br /&gt;
&lt;br /&gt;
Ряд сумм в документе всегда округляется в соответствии с точностью валюты документа.&lt;br /&gt;
Это:&lt;br /&gt;
* Сумма без НДС (PriceList*Quantity)&lt;br /&gt;
* Сумма НДС (PriceList*Quantity*Tax/100)&lt;br /&gt;
* Всего с НДС (Price*Quantity)&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
=== Пример 1 ===&lt;br /&gt;
В типе документа указано округление цен 0 (по валюте). Валюта рубль, округление до 2 знаков. Круглая цена - без НДС.&lt;br /&gt;
&lt;br /&gt;
Пытаемся выписать товар с НДС=18%, 4 штуки по 165,25&lt;br /&gt;
&lt;br /&gt;
 PriceList = 165,25/1,18 = 140,0423728813559 - округляется до 140,04&lt;br /&gt;
 Сумма без НДС = 140,04*4 = 560,16&lt;br /&gt;
 Сумма НДС = 560,16*18/100 = 100,8288 - округляется до 100,83&lt;br /&gt;
 Сумма с НДС = 560,16 + 100,83 = 660,99&lt;br /&gt;
&lt;br /&gt;
=== Пример 2 ===&lt;br /&gt;
Те же исходные данные, но в типе документа ставим точность 6 знаков&lt;br /&gt;
&lt;br /&gt;
 PriceList = 165,25/1,18 = 140,0423728813559 - округляется до 140,042373&lt;br /&gt;
 Сумма без НДС = 140,042373*4 = 560,169492 - округляется до 560,17&lt;br /&gt;
 Сумма НДС = 560,17*18/100 = 100,8306 - округляется до 100,83&lt;br /&gt;
 Сумма с НДС = 560,17 + 100,83 = 661,00&lt;br /&gt;
&lt;br /&gt;
=== Пример 3 ===&lt;br /&gt;
Исходные данные из примера 1, но в предусловиях докумнента при помощи [[SETPRICEROUNDING]] задаем округление для цены с НДС&lt;br /&gt;
&lt;br /&gt;
 PriceList = 165,25/1,18 = 140,0423728813559 - НЕ округляется&lt;br /&gt;
 Сумма без НДС = 140,0423728813559*4 = 560,1694915254236 - округляется до 560,17&lt;br /&gt;
 Сумма НДС = 560,17*18/100 = 100,8306 - округляется до 100,83&lt;br /&gt;
 Сумма с НДС = 560,17 + 100,83 = 661,00&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9E%D0%B1%D0%BC%D0%B5%D0%BD&amp;diff=3204</id>
		<title>Обмен</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9E%D0%B1%D0%BC%D0%B5%D0%BD&amp;diff=3204"/>
				<updated>2018-11-12T03:09:47Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Обмен]]&lt;br /&gt;
&lt;br /&gt;
gbExchange® Server - программа репликации БД в системе «Граф Бестужев»®&lt;br /&gt;
 &lt;br /&gt;
==ВВЕДЕНИЕ  == &lt;br /&gt;
&lt;br /&gt;
Программа GBExchange Server предназначена для организации обмена (репликации) данных между БД (InterBase, FireBird), настроенной для работы с программой “Граф Бестужев”.&lt;br /&gt;
&lt;br /&gt;
Обмен предназначен для синхронизации, полного или частичного обновления данных между БД. Клиент с Сервером меняются пакетами, которые содержат объекты системы ГБ. Учитываются правки: добавление, удаление, изменение.&lt;br /&gt;
&lt;br /&gt;
Есть возможность настроить на Сервере схемы обмена или правила, по которым будет происходить частичный обмен данными. К примеру, можно запретить запись в серверную БД клиентских правок сертификатов. Классическая топология взаимодействия с клиентами - «Звезда», но существует возможность построения «древовидных» структур помощью «каскадных» обменов.&lt;br /&gt;
&lt;br /&gt;
==УСТАНОВКА СЕРВЕРА ОБМЕНА==&lt;br /&gt;
&lt;br /&gt;
'''Необходимые настройки системы'''&lt;br /&gt;
&lt;br /&gt;
Для работы gbExchange Server необходимо наличие TCP/IP соединения (Internet) или локальной сети с установленным протоколом (TCP/IP).&lt;br /&gt;
&lt;br /&gt;
Связь сервера обмена с БД осуществляется как по протоколу TCP/IP, так и по NetBEUI.&lt;br /&gt;
&lt;br /&gt;
Клиент может обмениваться с Сервером обмена ТОЛЬКО по TCP/IP протоколу.&lt;br /&gt;
&lt;br /&gt;
Версии клиента и Сервера должны совпадать. Так же необходимо наличие в системе файла '''DBClient.dll'''(158128 bytes) из набора Borland DELPHI 3. Этот файл можно переписать и зарегистрировать в системе с помощью команды '''regsvr32 DBClient.dll''' или запустить программу установки “Граф Бестужев” - setup.exe, которая установит DBClient.dll и зарегистрирует ее в системе. &lt;br /&gt;
&lt;br /&gt;
Перепишите файл gbServer.exe и gbServer.ini (пример файла дан в приложении 1) в выбранную директорию. &lt;br /&gt;
&lt;br /&gt;
'''Порядок работы'''&lt;br /&gt;
&lt;br /&gt;
При запуске сервер создаст дерево каталогов:&lt;br /&gt;
 &lt;br /&gt;
''/Exchange/ActiveSessions/'' - файлы текущей сессии обмена (разделены по директориям, соответствующим клиентским Id);&lt;br /&gt;
&lt;br /&gt;
''/Exchange/CompleteSessions/'' - прошлые завершенные сессии обмена (разделены по директориям, соответствующим клиентским Id);&lt;br /&gt;
&lt;br /&gt;
''/Exchange/Analyze/'' - файлы используемые для сравнения документов, остатков и движения по серии &lt;br /&gt;
&lt;br /&gt;
''/Client/'' - соответствующая серверу версия клиента. Используется для автоматического обновления программы на клиентской стороне.&lt;br /&gt;
&lt;br /&gt;
''/Logs/'' - директория, где сохраняются логи TCP/IP протокола (используется для отладки).&lt;br /&gt;
&lt;br /&gt;
''/Msg/'' - директория, где сохраняются входящие и исходящие сообщения между клиентами и сервером.&lt;br /&gt;
&lt;br /&gt;
''/Scr/'' - директория, где сохраняются логи обмена с БД и транспорта.&lt;br /&gt;
&lt;br /&gt;
''/CallStack.dat'' - файл со стеком, который нужен для разбора ошибок при записи в базу&lt;br /&gt;
&lt;br /&gt;
''/gbServer.ini'' - файл с установками для работы сервера. &lt;br /&gt;
&lt;br /&gt;
После каждой удачно завершенной сессии в '''/Exchange/ActiveSessions/DepotId/''' должно быть пусто, а в директории '''/Exchange/CompleteSessions/DepotId/''' должна появится новая директория (yy.mm.dd-hh_mm_ss) с файлами завершенной сессии:&lt;br /&gt;
&lt;br /&gt;
''errors_cli.cds''	- ошибки записи в БД у клиента&lt;br /&gt;
&lt;br /&gt;
''errors_srv.cds''	- ошибки записи в БД на сервере&lt;br /&gt;
&lt;br /&gt;
''exchange.log	''      - лог TCP/IP&lt;br /&gt;
&lt;br /&gt;
''import.cds''	        - присланные от клиента изменения (распакованные)&lt;br /&gt;
&lt;br /&gt;
''import.cds.gz''	- присланные от клиента изменения (cжатые GZip-ом)&lt;br /&gt;
&lt;br /&gt;
''import_ack.cds''	- подтверждения на клиентские изменения&lt;br /&gt;
&lt;br /&gt;
''export.cds''	        - изменения собранные клиентом для отправки клиенту&lt;br /&gt;
&lt;br /&gt;
''export.cds.gz''	- изменения собранные клиентом для отправки клиенту (cжатые GZip-ом)&lt;br /&gt;
&lt;br /&gt;
''export_ack.cds''	- подтверждения присланные клиентом&lt;br /&gt;
&lt;br /&gt;
Обмен файлами происходит в жестко описанной форме и возможны два режима обмена &lt;br /&gt;
&lt;br /&gt;
ПРЯМОЙ - когда первым начинает собирать изменения Клиент и &lt;br /&gt;
&lt;br /&gt;
ОБРАТНЫЙ - когда первым собирает изменения Сервер&lt;br /&gt;
&lt;br /&gt;
Схема обмена файлами при ПРЯМОМ порядке обмена:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!СЕРВЕР	!! КЛИЕНТ	&lt;br /&gt;
|-&lt;br /&gt;
| Ожидание	          || Сбор изменений&lt;br /&gt;
|-&lt;br /&gt;
| Прием изменений         || Отправка серверу&lt;br /&gt;
|-&lt;br /&gt;
| Формируем подтверждения || Ожидание	&lt;br /&gt;
|-&lt;br /&gt;
| Отправка подтверждений  || Прием подтверждений&lt;br /&gt;
|-&lt;br /&gt;
| Сбор изменений          || Ожидание&lt;br /&gt;
|-&lt;br /&gt;
| Отправка изменений      || Прием изменений&lt;br /&gt;
|-&lt;br /&gt;
| Ожидание                || Формируем подтверждения&lt;br /&gt;
|-&lt;br /&gt;
| Прием подтверждений     || Отправка подтверждений&lt;br /&gt;
|-&lt;br /&gt;
| Отправка ошибок         || Получение ошибок&lt;br /&gt;
|-&lt;br /&gt;
| Получение ошибок        || Отправка ошибок&lt;br /&gt;
|-&lt;br /&gt;
|Отключение/Ожидание      || Отключение/Ожидание &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
ОБРАТНЫЙ порядок обмена:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!СЕРВЕР	!! КЛИЕНТ	&lt;br /&gt;
|-&lt;br /&gt;
| Сбор изменений          || Ожидание&lt;br /&gt;
|-&lt;br /&gt;
| Отправка серверу        || Прием изменений&lt;br /&gt;
|-&lt;br /&gt;
| Ожидание                || Формируем подтверждения&lt;br /&gt;
|-&lt;br /&gt;
| Прием подтверждений     || Отправка подтверждений&lt;br /&gt;
|-&lt;br /&gt;
| Ожидание                || Сбор изменений&lt;br /&gt;
|-&lt;br /&gt;
| Прием изменений         || Отправка изменений&lt;br /&gt;
|-&lt;br /&gt;
| Формируем подтверждения || Ожидание&lt;br /&gt;
|-&lt;br /&gt;
| Отправка подтверждений  || Прием подтверждений&lt;br /&gt;
|-&lt;br /&gt;
| Получение ошибок        || Отправка ошибок&lt;br /&gt;
|-&lt;br /&gt;
| Отправка ошибок         || Получение ошибок&lt;br /&gt;
|-&lt;br /&gt;
|Отключение/Ожидание      || Отключение/Ожидание &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Физический смысл порядка обмена заключается в приоритете обмена. В случае синхронных правок (например, одновременно поправили один и тот же документ в серверной и клиентской базе) сохранятся изменения того, кто будет первым собирать изменения.&lt;br /&gt;
 &lt;br /&gt;
==РАБОТА С ПРОГРАММОЙ ==&lt;br /&gt;
&lt;br /&gt;
Интерфейсная часть служит для «визуальной» настройки параметров сервера обмена, просмотра ошибок обмена, а так же для организации интерактивного взаимодействия с клиентами обмена, например, исполнение SQL скриптов на стороне клиента или сравнение остатков/документов.&lt;br /&gt;
&lt;br /&gt;
'''Главное окно'''&lt;br /&gt;
&lt;br /&gt;
Главное окно программы содержит меню, панель инструментов, закладки и строку состояния.&lt;br /&gt;
Меню содержит пункты:&lt;br /&gt;
&lt;br /&gt;
'''Сервер:'''&lt;br /&gt;
	&lt;br /&gt;
[[Изображение:inet.png]]Не принимать вызовы из Интернет (при нажатой кнопке всем клиентам будет отказано в подключении)&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Состояние завершенных сессий.png]]Состояние	F3 Состояние завершенных сессий у клиентов&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Схемы обмена.png]]Схемы		F4 - Схемы обмена	 		&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Оффлайн.png]]OffLine	F5 - Запустить офф-лайн приемку немедленно.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Установки.png]] 		Установки	F9 - Диалог настроек сервера обмена.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Выход.png]]     Выход	Alt+X - Выход из программы Сервер обмена.&lt;br /&gt;
	&lt;br /&gt;
Пункт меню '''Команды''':&lt;br /&gt;
&lt;br /&gt;
'''Найти'''			- Поиск строки в логе обмена.&lt;br /&gt;
&lt;br /&gt;
'''Запаковать'''		- Запаковать выбранный файл с помощью GZip.&lt;br /&gt;
&lt;br /&gt;
'''Распаковать'''		- Распаковать выбранный файл с помощью GZip.&lt;br /&gt;
&lt;br /&gt;
Строка состояния разделена на 3 части:&lt;br /&gt;
&lt;br /&gt;
- сообщения о работе сервера с клиентами;&lt;br /&gt;
&lt;br /&gt;
- прогресс выкачивания файлов от клиента;&lt;br /&gt;
&lt;br /&gt;
- размер последнего полученного файла с данными, в Кб.&lt;br /&gt;
&lt;br /&gt;
[[Изображение:Основное окно программы.png]]&lt;br /&gt;
&lt;br /&gt;
Главное окно программы, основная закладка.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим каждую закладку поподробнее.&lt;br /&gt;
 &lt;br /&gt;
'''Закладка «Клиенты»'''&lt;br /&gt;
&lt;br /&gt;
На этой закладке осуществляется управление и контроль процесса обмена с клиентами. &lt;br /&gt;
&lt;br /&gt;
Закладка разделена на 4 части:&lt;br /&gt;
&lt;br /&gt;
 1 - Список клиентов, работающих на сервере. &lt;br /&gt;
&lt;br /&gt;
Это могут быть как подключенные через сеть пользователи, так и офф-лайн и/или созданные скриптом. Ид пользователя уникален, то есть, например, пользователь с ид = 51 может быть только один. В случае, когда приходят два пользователя с одинаковыми номерами, учетная запись на сервере передается последнему. &lt;br /&gt;
&lt;br /&gt;
В колонках выводится информация о клиенте: &lt;br /&gt;
&lt;br /&gt;
'''Имя клиента''' (задается в настройках сервера, см. ниже); &lt;br /&gt;
&lt;br /&gt;
'''IP Адрес''' - адрес в сети и порт, с которого приконнектился клиент; &lt;br /&gt;
&lt;br /&gt;
'''Статус''' - состояние клиента (Working - работает с сервером, пишет или читает в БД, JustWait - состояние ожидания), &lt;br /&gt;
&lt;br /&gt;
'''Приоритет''' - номер приоритета.&lt;br /&gt;
&lt;br /&gt;
 2 - Список задач для БД. Задания сортируются по приоритету и выполняются по порядку. &lt;br /&gt;
&lt;br /&gt;
Виды заданий:&lt;br /&gt;
&lt;br /&gt;
'''Import'''			- Файл изменений от клиента - запись в БД;&lt;br /&gt;
&lt;br /&gt;
'''GetChanges'''		- Сбор изменений для клиента;&lt;br /&gt;
&lt;br /&gt;
'''Export_Ack'''		- Файл подтверждений о записанных объектах у клиента;&lt;br /&gt;
&lt;br /&gt;
'''Export_Errors'''		- Файл со списком версий про объекты, которые необходимо будет отправить клиенту;&lt;br /&gt;
&lt;br /&gt;
'''Analize	'''	        - Получение списка движения по серии(ям);&lt;br /&gt;
&lt;br /&gt;
'''GetDocsList'''		- Получение списка документов;&lt;br /&gt;
&lt;br /&gt;
'''GetRests'''		        - Получение списка остатков;&lt;br /&gt;
&lt;br /&gt;
'''GetChanges_Ex'''	        - Сбор изменений, когда версии про собираемые объекты берутся из файла (а не из таблицы gbversions);&lt;br /&gt;
&lt;br /&gt;
'''CustomProc'''		- Вызов указанной в задании процедуры;&lt;br /&gt;
&lt;br /&gt;
'''GetDocDelta'''		- Получение различий по документам.&lt;br /&gt;
&lt;br /&gt;
В колонках выводится информация: &lt;br /&gt;
&lt;br /&gt;
- '''Имя филиала''' &lt;br /&gt;
&lt;br /&gt;
- '''Задание''' (одно из выше перечисленных)&lt;br /&gt;
&lt;br /&gt;
- '''Удалить''' - отменить задание, причем, если задание не активно, то отменить можно любое задание, если же задание активно - то отменить можно только запись в БД. При этом создаются «частичные подтверждения», то есть подтверждения на объекты, которые успели записаться в БД&lt;br /&gt;
&lt;br /&gt;
- '''Приоритет''' - номер приоритета&lt;br /&gt;
&lt;br /&gt;
 3 - Лог работы сервера - список строк, которые описывают процесс работы сервера с клиентом и БД.&lt;br /&gt;
&lt;br /&gt;
 4 - Панель с элементами управления: &lt;br /&gt;
&lt;br /&gt;
'''Поле со списком''' - фильтр лога - показывает только сообщения из лога, относящиеся к выбранному клиенту.&lt;br /&gt;
&lt;br /&gt;
'''Линейка прогресса''' - прогресс работы с БД активного (а он может быть только один) клиента.&lt;br /&gt;
&lt;br /&gt;
'''Кнопки''' - перемещение на последнюю строку в логе, при этом мы будем видеть всегда последнюю строку лога (т.е. лог будет «бежать»). &lt;br /&gt;
&lt;br /&gt;
'''Кнопка очистки лога.''' Кроме того, что лог выводится на данной закладке, происходит параллельная запись лога в файл, в каталог /SCR/yy_mm_dd.scr, где имя соответствует сегодняшнему дню.&lt;br /&gt;
&lt;br /&gt;
На списке Активных клиентов присутствует всплывающее меню, которое позволяет совершать манипуляции над выбранным клиентом. &lt;br /&gt;
&lt;br /&gt;
Пункт «Состояние» является пунктом «по умолчанию» (выделен жирным шрифтом), т.е. двойной клик на выбранном клиенте вызывает команду «Состояние».&lt;br /&gt;
&lt;br /&gt;
Описание команд:&lt;br /&gt;
&lt;br /&gt;
'''Состояние''' 		- Вывод информации о загруженности клиента и 5 последних строк из лога клиента&lt;br /&gt;
&lt;br /&gt;
'''ОБМЕН'''		        - Начать процесс обмена с клиентом&lt;br /&gt;
&lt;br /&gt;
'''Стоп'''			- На клиенте нажимается кнопка «Стоп» - в результат чего  прекращается обмен и клиент отключается&lt;br /&gt;
&lt;br /&gt;
'''Отключить''' 		- Отключить про ТСР/IP клиента от сервера&lt;br /&gt;
&lt;br /&gt;
'''Настройки'''		        - Вызвать окно настроек для выбранного клиента&lt;br /&gt;
&lt;br /&gt;
'''FTP'''			- Переключиться на закладку обмена файлами с выбранным клиентом&lt;br /&gt;
&lt;br /&gt;
'''Сообщение'''		        - Послать на клиент сообщение, которое появится в новом окне&lt;br /&gt;
&lt;br /&gt;
Получить ошибки	- Получить с клиента файл gbErrors.log, который будет записан на сервере в каталог /gbExchange/ActiveSessions/Ид_клиента_gbErr.gz&lt;br /&gt;
Получить лог		- Получить с клиента лог работы, т.е. /SCR/yy_mm_dd.scr, файл будет записан в /gbExchange/ActiveSessions/Ид_клиента_SCR_число.gz&lt;br /&gt;
Стереть файлы	- Стереть все файлы у клиента из каталога /CurSessions/, т.е. «сбросить сессию» на клиенте.&lt;br /&gt;
 	&lt;br /&gt;
			&lt;br /&gt;
Рис.2.1.2. Всплывающее меню, на списке активных клиентов&lt;br /&gt;
&lt;br /&gt;
Пункты меню из «InterBase»:&lt;br /&gt;
Рестарт IB, Остановить IB, Запустить IB (для FireBird не делали)&lt;br /&gt;
Пункты меню из «Клиент»:&lt;br /&gt;
Найти клиента                - Найти пользователя по его Номеру. Поиск осуществляется по IP адресу, который сохранился когда клиент последний раз приходил на сервер. Не работает с клиентами, которые работают через прокси, т.к. не возможно установить с сервера прямое соединение с клиентом.&lt;br /&gt;
Найти ВСЕХ			    - найти всех клиентов&lt;br /&gt;
FTP				    - запустить для данного клиента FTP-сервис&lt;br /&gt;
Сообщение			    - отправить клиенту сообщение через обмен&lt;br /&gt;
Переименовать Ack_Partial – если обмен на стороне клиента прерван, с помощью этой команды можно переименовать файл частичных подтверждений в файл подтверждений (import_Ack_partial в import.ack)&lt;br /&gt;
&lt;br /&gt;
Пункты меню из «Прочее»:&lt;br /&gt;
&lt;br /&gt;
Срочный обмен	- дать клиенту команду на сбор «срочных данных». После этого собранные данные будут отправлены на сервер.&lt;br /&gt;
Собрать изменения	- дать клиенту команду на сбор изменений. После этого собранные данные будут отправлены на сервер.&lt;br /&gt;
	Import				- дать клиенту команду на получение изменений.&lt;br /&gt;
	ImportAck			-дать клиенту команду на получение от сервера подтверждений.&lt;br /&gt;
	Export				- дать клиенту команду на получение от сервера изменений.&lt;br /&gt;
	ExportAck			- дать клиенту команду на получение подтверждений.&lt;br /&gt;
Переименовать Ack_Partial- переименовать частичные подтверждения на стороне сервера&lt;br /&gt;
Послать ошибки	- получить от клиента файл с ошибками из текущей сессии.&lt;br /&gt;
Удалить все *.dwn	- Стереть все файлы *.dwn у клиента из каталога /CurSessions/, т.е. стереть все не докаченые файлы.&lt;br /&gt;
	Адрес сервера 	- сменить адрес сервера, по которому соединяется клиент на новый.&lt;br /&gt;
	Закрыть клиента	 - послать команду - выход из программы клиента.&lt;br /&gt;
	INI параметр		- установить в файле с настройками на клиенте указанный параметр.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	На списке заданий для БД так же присутствует всплывающее меню (см. рис. 2.1.3), которое содержит следующие пункты меню:&lt;br /&gt;
	Обновить		- Обновить список клиентов и список заданий для БД. &lt;br /&gt;
	Удалить		- Удалить (поставить флаг удаление) задание. Если удаляемое задание активно - то прервать его немедленно можно, только если это «import», все остальные удаляются в начале работы с БД.&lt;br /&gt;
	Полный лог		- Если этот пункт меню включен (помечен галочкой), то тогда обмен пишет полный лог по всем объектам, которые он записывает. Полный лог нужно включать только в определенных случаях, он может тормозить работу обмена.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис.2.1.3. Всплывающее меню на списке заданий для БД&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Закладка «История»'''&lt;br /&gt;
&lt;br /&gt;
Все закончившиеся сессии обмена списываются в папку /CompleteSessions/Ид_Филиала/ для истории и для просмотра ошибок, возникших во время обмена. Так же завершенные сессии могут быть использованы для восстановления баз филиалов, т.е. той части данных, которые приходили с сервера обмена.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.1.4. &lt;br /&gt;
'''Закладка «История».'''&lt;br /&gt;
&lt;br /&gt;
	Закладка «История» состоит из следующих частей:&lt;br /&gt;
		1. Заголовок и счетчик кол-ва сессий;&lt;br /&gt;
		2. Список Сессий. Имена завершенных сессий содержат дату и время СПИСЫВАНИЯ файлов из активных сессий в завершенные; а так же постфикс, указывающий на наличие ошибок в сессии (“With Errors”). Ошибками считается: отсутствие какого-либо из файлов ошибок (errors_cli.cds, errors_srv.cds), либо наличие записей в этих файлах.&lt;br /&gt;
		3. Панель. Содержит поле со списком для выбора отдела. Фильтр, с какой даты (включительно) показывать сессии. Кнопки: вызов окна отчета, выделение всех завершенных сессий, удаление выбранной сессии. Кнопка повторного принятия пакетов в БД («Опять»).&lt;br /&gt;
	Более подробно работа с ошибками при обмене описано в главе «Ошибки и конфликтные правки».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Закладка «iSQL»'''&lt;br /&gt;
&lt;br /&gt;
	Иногда возникает необходимость выполнения какого либо запроса в базе клиента, при этом не всегда есть возможность попросить об этом человека на стороне клиента. Для этого в сервере обмена существует закладка iSQL, с помощью которой можно выполнять запросы и вставлять процедуры в базу, к которой подключен клиент. При этом на машине, где установлен клиент НЕОБХОДИМО наличие программы isql.exe из пакета InterBase Server либо в каталоге c:\Program Files\....  , либо в каталоге, где расположен клиент (gbClient.exe).&lt;br /&gt;
	Закладка «iSQL» состоит из частей:&lt;br /&gt;
		Поле для ввода запроса. Ведется история запросов: Ctrl+N - следующий запрос, Ctrl+P - предыдущий запрос.&lt;br /&gt;
		Поле - результат запроса. &lt;br /&gt;
		Панель. Поле с выпадающим списком - выбор отдела которому послать запрос, естественно, клиент из выбранного отдела должен быть подключен. Галочки: &lt;br /&gt;
Commit- Авто Коммит;&lt;br /&gt;
Statistic- Вывести статистику выполнения запроса;&lt;br /&gt;
List - Формат выдачи результата, при выключенном состоянии результат имеет табличное представление, иначе список - слева название поля, справа - значение;&lt;br /&gt;
Plan - Если включен, то показывать какие индексы использовались для построения запроса;&lt;br /&gt;
Row Count - С результатами запроса выдать количество колонок.&lt;br /&gt;
&lt;br /&gt;
На клиенте получаемый от сервера текст запроса оборачивается в:&lt;br /&gt;
&lt;br /&gt;
SET NAMES WIN1251;&lt;br /&gt;
CONNECT путь_к_БД&lt;br /&gt;
USER    ''XXXX'''&lt;br /&gt;
PASSWORD ''xxx'';&lt;br /&gt;
прочие выбранные параметры (SET STAT; SET LIST; SET PLAN; SET COUNT;)&lt;br /&gt;
Текст_SQL_запроса&lt;br /&gt;
COMMIT;&lt;br /&gt;
&lt;br /&gt;
После чего запрос передается в виде файла как входной параметр программе:&lt;br /&gt;
&lt;br /&gt;
\путь\isql.exe -i input.sql -o output.sql -m&lt;br /&gt;
&lt;br /&gt;
результат сохраняется в файл и отсылается серверу.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.1.5. Закладка «iSQL»&lt;br /&gt;
&lt;br /&gt;
	Для вставки, изменения процедур следует использовать точный синтаксис, т.е. если процедуры нет - то первое слово CREATE, если же процедура уже есть - то ALTER.&lt;br /&gt;
&lt;br /&gt;
CREATE PROCEDURE something_list(&lt;br /&gt;
Params VARCHAR(32640) CHARACTER SET WIN1251&lt;br /&gt;
)RETURNS&lt;br /&gt;
(Result VARCHAR(32640) CHARACTER SET WIN1251&lt;br /&gt;
)&lt;br /&gt;
AS&lt;br /&gt;
...переменные...&lt;br /&gt;
BEGIN&lt;br /&gt;
....текст процедуры...&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Закладка «FTP»'''&lt;br /&gt;
&lt;br /&gt;
Для удобства работы администратора сервера обмена существует закладка «FTP» - обмен файлами. Можно с помощью этой закладки с/закачать файл с/на клиента, т.е. создавать файлы (закачивать) или удалять. Создавать каталоги, переименовывать или удалять НЕЛЬЗЯ.&lt;br /&gt;
Закладка состоит из следующих частей:&lt;br /&gt;
	1. Каталог на клиенте.&lt;br /&gt;
	2. Список файлов в указанном каталоге, с возможностью перемещаться в каждой папке на уровень вверх и входить в папки. &lt;br /&gt;
		3. Поле со списком выбор диска на клиенте.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.1.6. Закладка «FTP»&lt;br /&gt;
&lt;br /&gt;
4. Панель с кнопками:&lt;br /&gt;
Скачать выбранный файл с клиента в выбранный каталог,&lt;br /&gt;
Послать выбранный файл с сервера в каталог клиенту,&lt;br /&gt;
Обновить список файлов каталога на клиенте,&lt;br /&gt;
Удалить выбранный файл на клиенте.&lt;br /&gt;
5. Каталог, список файлов и выбор диска на сервере.&lt;br /&gt;
	Не рекомендуется пользоваться FTP во время обмена с клиентом, т.к. обмен происходит в одном канале связи, что может вызвать замедление процесса обмена файлами м/у клиентом и сервером.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Закладка «Сравнения»'''&lt;br /&gt;
&lt;br /&gt;
В закладке «Сравнения» на сегодняшний день 5 подзакладок: Документы, Остатки, Баланс, Задолженность, Движение по товару/серии.&lt;br /&gt;
Процесс сравнения происходит следующим образом: на сервере заполняются параметры и нажимается кнопка «Запуск», после чего на сервере параметры передаются в БД отчету-процедуре. На клиента отсылаются параметры, и клиент передает параметры в БД отчету-процедуре. после получения результатов на сервере они складываются в каталог /Exchange/Analyze/Id_отдела/ , в этот же каталог складывается файл-результат присланный клиентом. После получения результатов сервером и от клиента, нажимается кнопка «Отчет», по которой сводная таблица заполнятся строками, различающимися в базах клиента и сервера.&lt;br /&gt;
Закладка «Документы» состоит из следующих частей:&lt;br /&gt;
1. Параметры.&lt;br /&gt;
2. Сводная таблица результатов.&lt;br /&gt;
3. Строка статуса.&lt;br /&gt;
4. Панель работы с результатами.&lt;br /&gt;
5. Панель запуска сравнения и анализа результатов.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис.2.1.7. Закладка «Сравнения» - Документы&lt;br /&gt;
&lt;br /&gt;
Параметры - здесь задаются параметры, какие документы добывать для сравнения.&lt;br /&gt;
Код Фирмы - Ид собственной фирмы, от которой были созданы сравниваемые документы, например «50», «-1» - означает «от всех собственных фирм».&lt;br /&gt;
Типы документов - перечисляются через «;» Ид типов документов (корневые).&lt;br /&gt;
Начальная и Конечная даты - диапазон дат, из которого достаются документы.&lt;br /&gt;
Начальный и конечный Ид - диапазон Ид-ов документов, из которого достаются документы.&lt;br /&gt;
	Можно еще задавать параметры «Сравнивать тип документа» и «Пропускать флаг 0»&lt;br /&gt;
Сводная таблица результатов - таблица с расхождениями по строкам. Ключевым полем является Ид документа. Если в колонке «пусто» это означает, что такого документа нет на соответствующей стороне. Колонки:&lt;br /&gt;
	Дата сервер и дата Клиент - даты документа на сервере и клиенте соответственно.&lt;br /&gt;
	Ид документа - ид документа.&lt;br /&gt;
Сумма сервер и сумма клиент - суммы документа на сервере и клиенте соответственно. При чем суммы перед сравнением округляются до 2-х знаков после запятой.&lt;br /&gt;
Флаг сервер и флаг клиент - флаги документов на соответствующих сторонах.&lt;br /&gt;
Партнер сервер и клиент - партнер в документе на сервере  клиенте соответственно.&lt;br /&gt;
&lt;br /&gt;
Строка статуса - содержит информацию в виде :&lt;br /&gt;
кол-во строк на сервере - кол-во строк на клиенте (кол-во строк различий)&lt;br /&gt;
&lt;br /&gt;
Панель работы с результатами - конечной целью сравнения обычно является выявление расхождений и их устранение. В сводной таблице мы получили результаты, теперь необходимо устранить расхождение м/у базами. &lt;br /&gt;
Для этого существует кнопка «В версии клиенту» по которой на документы, которые есть у клиента, но их нет на сервере (все) - добавляются клиенту в версии, чтобы он их прислал при следующем обмене. &lt;br /&gt;
&lt;br /&gt;
Панель запуска сравнения и анализа результатов - служит для запуска процесса сравнения и формирования сводного отчета. Содержит следующие элементы:&lt;br /&gt;
Поле со списком - выбор отдела, с которым необходимо произвести сравнение.&lt;br /&gt;
Копировать - копировать результаты сравнения в Буффер Обмена.&lt;br /&gt;
“&amp;lt; ? &amp;gt;” Кнопка вызова сводной таблицы - «Сравнения по серии».&lt;br /&gt;
Запуск сравнения по документам.&lt;br /&gt;
Сформировать отчет из полученных результатов.&lt;br /&gt;
&lt;br /&gt;
Закладка «Остатки» состоит из следующих частей:&lt;br /&gt;
1. Параметры.&lt;br /&gt;
2. Сводная таблица результатов.&lt;br /&gt;
3. Строка статуса.&lt;br /&gt;
4. Панель работы с результатами (Движения по серии).&lt;br /&gt;
5. Панель запуска сравнения и анализа результатов.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис.2.1.8. Закладка «Сравнения» - Документы&lt;br /&gt;
&lt;br /&gt;
Параметры - здесь указываются Иды складов через «;» по которым необходимо получить остатки для сравнения. Сравнение происходит по Иду товара, серии, складу и количеству. &lt;br /&gt;
&lt;br /&gt;
Сводная таблица результатов - таблица с расхождениями по строкам. Ключевыми полями являются Ид товара, серия и склад. Колонки:&lt;br /&gt;
	Товар - ид товара, который есть на остатках на данном складе.&lt;br /&gt;
	Склад - склад, на котором есть остаток товара указанной серии.&lt;br /&gt;
	Серия - серия товара, которая есть на остатках, на указанном складе.&lt;br /&gt;
Количество Сервер и Клиент - соответствующие количества товара на указанном складе и серии.&lt;br /&gt;
&lt;br /&gt;
Строка статуса - содержит информацию в виде :&lt;br /&gt;
кол-во строк на сервере - кол-во строк на клиенте (кол-во строк различий)&lt;br /&gt;
&lt;br /&gt;
Панель работы с результатами (Движения по серии) - После того как мы получили результаты сравнения остатков - у нас есть различия. Для того чтобы понять, какие документы повлияли на различие остатков, используется отчет «Движение по серии». Т.е. мы имеем различие остатков по указанной серии и хотим получить список всех документов, в которых эта серия присутствует.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.1.9. Таблица результатов отчета «Движение по Серии»&lt;br /&gt;
&lt;br /&gt;
Для этого мы указываем в параметрах диапазон дат для просматриваемых документов, и в зависимости от того, хотим мы посмотреть информацию о движении по всем сериям или по одной - жмем соответствующую кнопку.&lt;br /&gt;
Результаты сравнения документов (рис. 2.1.9) можно просмотреть по кнопке «&amp;lt; ? &amp;gt;». После чего полученные документы можно добавить в версии серверу или клиенту, для того чтобы документы, и соответственно остатки совпали. Для этого выбираем действие и жмем кнопку «&amp;gt;&amp;gt;Выполнить».&lt;br /&gt;
&lt;br /&gt;
Панель запуска сравнения и анализа результатов - служит для запуска процесса сравнения и формирования сводного отчета. Содержит следующие элементы:&lt;br /&gt;
Поле со списком - выбор отдела, с которым необходимо произвести сравнение.&lt;br /&gt;
Копировать - копировать результаты сравнения в Буффер Обмена.&lt;br /&gt;
“&amp;lt; ? &amp;gt;” Кнопка вызова сводной таблицы - «Сравнения по серии».&lt;br /&gt;
Запуск сравнения по остаткам.&lt;br /&gt;
Сформировать отчет из полученных результатов.&lt;br /&gt;
&lt;br /&gt;
Закладка «Баланс» показывает разницу по документам заданных партнеров (можно перечислить в поле По партнерам несколько кодов через точку с запятой – главное, чтобы процедуру баланса можно было запускать одновременно по такому количеству партнеров).&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Сравнение баланса работает по тому же принципу – задаем нужные параметры, после получения данных на сервере и прихода пакета анализа с клиента можем получить отчет. В данном случае в каталоге сервера обмена Exchange/Analyse/53/ должны появиться файлы resBalance_cli.cds и resBalance.cds.&lt;br /&gt;
В приведенном примере баланс отличается на 1 документ, известен его код, сумма, дата, флаг. При желании документ добавляется в версии и променивается в нужную сторону.&lt;br /&gt;
&lt;br /&gt;
Закладка «Задолженность» &lt;br /&gt;
&lt;br /&gt;
В этой закладке показываются результаты выполнения Отчета по долгам.&lt;br /&gt;
В параметре По партнерам можно задать одного партнера, список партнеров через точку с запятой либо папку. &lt;br /&gt;
В приведенном примере баланс отличается по 5 партнерам. Понятно, что документы, составляющие это отличие, в закладке Задолженность увидеть нельзя, для этого нужно воспользоваться Балансом.&lt;br /&gt;
&lt;br /&gt;
'''Закладка «Скрипты»'''&lt;br /&gt;
&lt;br /&gt;
Иногда возникает потребность для интеграции с другими системами. Либо получение каких-либо данных из ГБ, либо их преобразование. Например, организовать обмен документами или какими-либо справочниками. Но сервер обмена имеет жесткую схему обмена файлами и данными и не может из нее выйти. Для такого рода задач была реализована возможность создания скриптовых заданий для работы сервера обмена. &lt;br /&gt;
Скрипт - последовательность команд, для которых сервер обмена является интерпретатором. Более подробно о написании скриптов см. главу «Скрипты».&lt;br /&gt;
Закладка «Скрипты» состоит из следующих частей:&lt;br /&gt;
1. Параметры&lt;br /&gt;
2. Текст скрипта&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.1.10. Закладка «Скрипты»&lt;br /&gt;
&lt;br /&gt;
Параметры - здесь указывается: &lt;br /&gt;
от какого Отдела выполняется скрипт,&lt;br /&gt;
Имя скрипта,&lt;br /&gt;
Две кнопки: М - текст скрипта для работы сервера обмена в «ручном» режиме, и кнопка «Выполнить» - для запуска скрипта.&lt;br /&gt;
&lt;br /&gt;
Текст скрипта - строки из указанного файла или полученные по кнопке «М».&lt;br /&gt;
&lt;br /&gt;
Можно настроить обмен, чтобы он выполнял определенную последовательность действий из скрипта и таким образом обменивался, к примеру, хмл-файлами со сторонней системой.&lt;br /&gt;
&lt;br /&gt;
== НАСТРОЙКИ ==&lt;br /&gt;
Для корректной работы сервера обмена необходимо произвести его настройку. Для этого в главном окне нажмите F9 и вы увидите окно, как на рис.2.2.1. Окно настроек имеет 6 закладок специфических настроек, рассмотрим каждую.&lt;br /&gt;
&lt;br /&gt;
'''Закладка «Основные»'''&lt;br /&gt;
&lt;br /&gt;
На этой закладке задаются настройки для работы сервера по сети (локальной или Internet). А так же для работы с БД, и основные каталоги.&lt;br /&gt;
Настройки сети:&lt;br /&gt;
Порт - Порт, который будет «слушать» сервер. Вообще слушается адрес 0.0.0.0:port&lt;br /&gt;
ТаймАут - Задержка в секундах, после которой будет выдаваться сообщение о задержке при получении пакета.&lt;br /&gt;
Логин ТаймАут - Количество проверок прислал клиент «Логин» (т.е. свой номер) после того как присоединился. Интервал проверки 5 сек.&lt;br /&gt;
Мах кол-во соединений - Количество максимальных присоединений к серверу.&lt;br /&gt;
Запретить Обмен - Клиенты могут присоединяться к серверу, но не могут запускать процесс обмена.&lt;br /&gt;
Не пускать на сервер совсем - Клиенты не смогут даже подключиться к серверу.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис.2.2.1. Настройки Сервера - Основные.&lt;br /&gt;
&lt;br /&gt;
Настройки БД:&lt;br /&gt;
Путь к БД - Путь к базе данных, можно использовать как локальный путь, так и TCP/IP или NetBEUI вид (в примере используется TCP-вид)&lt;br /&gt;
Имя пользователя - Имя пользователя, если не указывать, используется принятый по умолчанию.&lt;br /&gt;
Пароль - Шифрованный пароль, если не указывать - используется принятый по умолчанию пароль.&lt;br /&gt;
Библиотека -  Можно использовать разные клиентские библиотеки, например, если на одном сервере работают Firebird и Interbase.&lt;br /&gt;
&lt;br /&gt;
Каталоги:&lt;br /&gt;
Пути для файлов - Пути для хранения активных и завершенных сессий обмена. По умолчанию = \Exchange&lt;br /&gt;
Лог файл - Имя файла, в который будут записываться сообщения про TCP/IP обмен.&lt;br /&gt;
&lt;br /&gt;
'''Закладка «Обмен»'''&lt;br /&gt;
&lt;br /&gt;
На этой закладке настраивается процесс и порядок обмена с клиентами. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис.2.2.2. Настройки Сервера - Обмен.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Версий в пакете - Количество версий (объектов) в пакете. Возможные варианты:&lt;br /&gt;
•	«0» - все, что указаны в таблице gbversions для текущего отдела&lt;br /&gt;
•	«-1» - все кроме документов&lt;br /&gt;
•	некое число (например, 3000) – конкретное количество версий&lt;br /&gt;
Тип объектов – тип объектов, которые будут собираться в пакет. Возможные варианты:&lt;br /&gt;
•	«-1» - все типы объектов&lt;br /&gt;
•	Некое число будет обозначать только конкретный вид объектов (0-партнеры, 1-товары).&lt;br /&gt;
По умолчанию всегда должна стоять -1. Если вы поставили для какой-то надобности определенный тип объектов, не забудьте потом поменять это число назад на -1&lt;br /&gt;
Документов не более – количество документов, которое попадет в один пакет. Используется в случае, если по обмену ходят очень толстые документы, и при сборе большого количества таких документов получаются очень большие пакеты, и разрешение конфликтов происходит долго либо ему просто не хватает памяти. По умолчанию здесь должен стоять 0 (будут собираться все документы, согласно ограничению, прописанному в поле Версий в пакете)&lt;br /&gt;
Строк не более – параметр, аналогичный количеству документов. Из собранного уже пакета удаляется столько документов, чтобы количество строк было не более заданного (в примере это 4000). В пакете остается как минимум один документ (даже если количество строчек превысит ограничение, например будет 4700 строк).&lt;br /&gt;
Учитывать приоритеты - при обработке заданий для БД учитывать приоритеты клиентов.&lt;br /&gt;
Расключаться по завершению обмена - по завершению сеанса обмена отключать клиента или переводить в состояние ожидания.&lt;br /&gt;
Домениваться частичными подтверждениями - Частичные подтверждения - import_ack_partial.cds - создаются в случае обрыва задания на запись пакета в базу данных. Обрыв может быть, к пример, инициирован администратором обмена либо произойти по причине стопа сервера. Если частичные подтверждения созданы, то с помощью меню по правой кнопке на клиенте, пункт Прочее/Переименовать ack_partial можно переименовать файл import_ack_partial.cds в import_ack.cds, запустить обмен и файл подтверждений на уже принятые объекты будет отправлен клиенту. В случае такого завершения обмена не будет создано корректных файлов по ошибкам.&lt;br /&gt;
Не отключаться от БД -  После завершения сессии обмена не разрывать соединение с базой.&lt;br /&gt;
Автоматическое создание корр.док-в – Если включена эта галка, то при нехватке товара при записи пакета будет автоматически создан корректирующий документ. Параметры этого документа можно определить в ini-файле в секции [CreatingDoc], например:&lt;br /&gt;
[CreatingDoc]&lt;br /&gt;
DocId=correct&lt;br /&gt;
FirmId=400004667&lt;br /&gt;
DocType=33&lt;br /&gt;
OpType=400000063&lt;br /&gt;
OpDate=31.12.2021&lt;br /&gt;
	Если параметры документа не определены, обмен обругается, и корректирующие доки не создаст.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Частичный обмен - Признак, что сессия обмена не будет начинаться с самого начала, а домениваться файлами (если они есть).&lt;br /&gt;
Каскадный сервер - Используется для создания каскадных (в отличие от «Звезды») структур обмена. Например, если документы должны проходить через 3 базы:&lt;br /&gt;
т.е. документ должен из базы «А» записаться в «В» и «С»&lt;br /&gt;
&lt;br /&gt;
С						В						А&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Клиент					Сервер	Клиент			Сервер&lt;br /&gt;
	обычный					каскадный	каскадный			обычный&lt;br /&gt;
&lt;br /&gt;
		Каскадный сервер и каскадный клиент м/у собой НЕ меняются.&lt;br /&gt;
&lt;br /&gt;
OffLine через - время в секундах, через которое будут сканироваться каталоги на сервере, для выполнения оффЛайн заданий.&lt;br /&gt;
&lt;br /&gt;
Безусловный ОнЛайн в дни - дни, в которые для клиентов будет всегда возможность произвести полный цикл обмена (независимо от Времени онлайн, указанном в параметрах клиента). Обычно – суббота, воскресенье.&lt;br /&gt;
&lt;br /&gt;
Запускать приложения:&lt;br /&gt;
	Время - время в формате «hh:nn:ss», перечисленное через «;» в которое производить запуски указанного в поле «Что».&lt;br /&gt;
	Что - путь имени файлу-программе для запуска. Запуск осуществляется с ожиданием. Т.е. пока не закроется запущенная программа, сервер обмена будет «висеть».&lt;br /&gt;
Для клиентов - Перечисляются иды клиентов через «;».&lt;br /&gt;
	По окончанию - путь имени файлу-программе для запуска. Запуск осуществляется после сессии обмена для указанных клиентов в поле «для клиентов».&lt;br /&gt;
&lt;br /&gt;
'''Закладка «Сообщения»'''&lt;br /&gt;
На этой закладке настраивается оповещение администратора о завершении обмена (удачном или нет). Оповещение осуществляется посредством сервиса «net send» из комплекта Microsoft Windows. Т.е. сервис «Messenger» должен быть запущен на машине-получателе.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис.2.2.3. Пример сообщения присланного по сети, по завершении обмена&lt;br /&gt;
Получатель(и):&lt;br /&gt;
Отчитаться перед - перечисляются имена машин в сети, на которые придет сообщение (вида рис. 2.2.3).&lt;br /&gt;
Виды сообщений - сообщения, отправляемые по сети.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис.2.2.4. Настройки Сервера - Сообщения&lt;br /&gt;
&lt;br /&gt;
'''Закладка «Дополнительно»'''&lt;br /&gt;
&lt;br /&gt;
На этой закладке настраиваются прочие «не существенные» параметры сервера обмена. Это управление хранением истории обмена и специфичные настройки, когда необходимо променяться какими-то определенными объектами.&lt;br /&gt;
Параметры ведения архива: &lt;br /&gt;
Иногда этот параметр не критичен - когда фирма маленькая или обмен происходит раз в день. Но иногда история, которая формируется во время работы обмена, занимает немало места на винчестере. Иногда это место кончается, и машина перестает работать. Чтобы избежать этого, есть возможность ограничить диапазон хранимой истории. Причем самые емкие - это сессии, потом «SCR», потом «Логи».&lt;br /&gt;
Хранить Сессии - кол-во дней до сегодняшнего числа, за которые хранить сессии.&lt;br /&gt;
Хранить Логи - кол-во дней до сегодняшнего числа, за которые хранить Логи TCP/IP.&lt;br /&gt;
Хранить SCR - кол-во дней до сегодняшнего числа, за которые хранить SCR.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис.2.2.5. Настройки Сервера - Дополнительно&lt;br /&gt;
&lt;br /&gt;
	Сбор изменений по специальной процедуре. &lt;br /&gt;
Используется, когда необходимо променяться какими-то определенными объектами, которые указываются в процедуре, имя которой вводится в поле.&lt;br /&gt;
Пример процедуры см. в Приложении 2.&lt;br /&gt;
&lt;br /&gt;
	Дату и время сбора изменений сохранить в поле - Поле в карточке отдела в ГБ (Партнеры, папка с ид=6, отдел с ид=ид клиента), куда будет записываться время и дата последнего сбора изменений.&lt;br /&gt;
&lt;br /&gt;
'''Закладка «Клиенты»'''&lt;br /&gt;
&lt;br /&gt;
На этой закладке указываются настройки процесса обмена для конкретных клиентов. &lt;br /&gt;
 &lt;br /&gt;
Рис. 2.2.7. Настройки Сервера – Клиенты&lt;br /&gt;
&lt;br /&gt;
Закладка содержит следующие элементы:&lt;br /&gt;
Филиал, клиент - Поле со списком - выбор филиала для которого необходимо просмотреть настройки.&lt;br /&gt;
Полное Имя - Имя (название) клиента, которое будет использоваться для обозначения работы с данных клиентом в сервере обмена.&lt;br /&gt;
Путь к БД, Логин, Пароль – Можно задать для конкретного клиента ДРУГУЮ базу данных (не ту, что указана в закладке Основные. Правда, необходимо учитывать, что библиотека будет взята та, которая прописана в закладке Основные, для клиента ее задать нельзя.&lt;br /&gt;
Время Онлайн – Промежуток времени в формате «hh:mm-hh:mm». Может быть несколько промежутков, перечисленных через «;». В эти промежутки клиент будет находится в режиме ОнЛайн (в данном случае с 18 вечера до 9 утра).&lt;br /&gt;
Время не пускать - Промежуток времени в формате «hh:mm-hh:mm Может быть несколько промежутков, перечисленных через «;». В эти промежутки клиент не сможет присоединиться к серверу обмена&lt;br /&gt;
Приоритет - Приоритет, число 0...9 (0- минимальный, 9 - максимальный), приоритет для заданий БД. Если в очереди на запись в базу находятся несколько филиалов, будет выбран пакет филиала с максимальным приоритетом. Отсюда следствие – при неправильном распределении приоритетов (например, филиал имеет приоритет 9 и меняется каждую минуту) некоторые филиалы могут и не дождаться времени доступа к базе.&lt;br /&gt;
Кол-во версий - Количество версий (объектов) в пакете который придет от клиента. «0» - все, что указаны в таблице gbversions для текущего отдела, «-1» - все кроме документов.&lt;br /&gt;
IP Адрес - IP адрес, с которого последний раз заходил клиент на сервер. Используется при «поиске» клиента.&lt;br /&gt;
Использовать обмен в обратном порядке –  При обратном порядке сначала принимаются изменения от сервера в базу клиента, потом отдаются изменения клиента в базу сервера. В прямом порядке – наоборот, сначала клиент пишет свои изменения в базу сервера.&lt;br /&gt;
Автоматически обновлять версию клиента - У сервера есть каталог /gbClient/ где лежит файл gbClient.exe , последней версии. Перед обменом, когда клиент залогинился, сервер проверяет идентичность версий программы клиента - по номеру (первые две цифры) и размер файла gbClient.exe. В случае не совпадения файлов (если стоит галочка Автоматически обновлять версию клиента) на клиента посылается новая версия gbClient.exe и клиент перепускается автоматически.&lt;br /&gt;
Как сервер обмена – можно заставить клиента работать как сервер обмена, то есть брать версии с депота 6 и расщеплять их на все остальные депоты, лежащие в справочнике партнеров в папке Удаленные отделы.&lt;br /&gt;
Обмен через почту –  в этой секции можно указать параметры почтовых настроек при обмене через почту&lt;br /&gt;
Автокорректировка отрицательных остатков – Параметры документов, которые будут автоматически при нехватке товара. Секция специально сделана недоступной для редактирования из настроек, так как случайное заполнение этих полей чревато очень большими проблемами – появлением лишних остатков на складах. Редактировать ее нужно в файле gbServer.ini. Для того, чтобы создавались корректирующие доки, в секции Server должна быть написана строка AutoCorrectDocs=Yes, а в секции CreatingDoc должны быть заданы параметры таких документов.&lt;br /&gt;
		Фирма - от какой собственной фирмы (ид) делать приход.&lt;br /&gt;
		Номер - номер документа прихода.&lt;br /&gt;
		Тип документа - тип документа прихода (ид)&lt;br /&gt;
		Операция - операция в документе (ид) прихода.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В правом верхнем углу имеются так же 3 кнопки в виде пиктограмм с хинтами:&lt;br /&gt;
	Создать - Создать запись про нового клиента.&lt;br /&gt;
	Принять - Записать установки для выбранного Клиента.&lt;br /&gt;
	Удалить - Удалить все файлы из /ActiveSession/Id_Клиента/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== СХЕМЫ ОБМЕНА==&lt;br /&gt;
'''Описание'''&lt;br /&gt;
&lt;br /&gt;
С помощью этого средства можно ограничивать объекты, которые будут ходить от клиента на сервер и обратно. Организовывать правила и действия над принимаемыми объектами.&lt;br /&gt;
При создании/изменении/удалении объектов, которые должны ходить по обмену, в таблицу GBVersions добавляется запись ( Add_Gbversion(ObjType,ObjId) ) в формате:&lt;br /&gt;
	DepotId 	– 6 – для всех;&lt;br /&gt;
	MadeBy 	– кем сделана версия;&lt;br /&gt;
	ObjType 	– тип объекта, см. ниже;&lt;br /&gt;
	ObjId 	– ид объекта;&lt;br /&gt;
	AuxId 	– доп. ид;&lt;br /&gt;
	Processing – признак обработки, т.е. хотя бы раз собирали этот объект.&lt;br /&gt;
&lt;br /&gt;
При сборе объектов выполняется последовательность действий:&lt;br /&gt;
1. GBVersions_Get(SplitOnly) 	– т.е. 6 -&amp;gt; в ид филиала;&lt;br /&gt;
2. Optimize_Versions 			– для удаления лишних версий;&lt;br /&gt;
3. GBVersions_Get 			– для сбора.&lt;br /&gt;
4. GetRemote_versions		– для сбора версий из распределенных баз.&lt;br /&gt;
Потом перед записью в выходной файл (датасет) применяются схемы обмена.&lt;br /&gt;
&lt;br /&gt;
Таблица Schemes&lt;br /&gt;
Отдел	Условие на отделы	Тип	Строка	Если поле	Условие	Значение	Произвольные условия	То сделать	Полю	Значение	Произвольное значение	Примечание&lt;br /&gt;
												&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Отдел	(DEPOT) Тип: INTEGER.&lt;br /&gt;
Назначение: Ссылка на удаленный отдел, для которого написано условие для отправки объекта. 6 - для всех. Выбор удаленного отдела. Удаленные отделы создаются с помощью программы &amp;quot;Граф Бестужев&amp;quot; в разделе Партнеры-&amp;gt;Отделы.&lt;br /&gt;
Ограничения: Not Null (Неявно зависит от: Таблица Partners(Id) ).&lt;br /&gt;
Условия на отделы (DEPOTCONDS) Тип: VARCHAR(250).&lt;br /&gt;
Назначение: Дополнительные условия для выбора отдела в который отправляется объект. Используется, если «Отдел» = 6 (для всех), и необходимо применить для нескольких отделов это правило, тогда возможно использование функций. Например: Depot() IN (51,53,48,56).&lt;br /&gt;
Тип	(OBJTYPE) Тип: INTEGER.&lt;br /&gt;
Назначение: Код типа объекта, для которого срабатывает данная строка схемы. При редактировании и применении схем используется как первичный ключ для сортировки.&lt;br /&gt;
Ограничения: Not Null&lt;br /&gt;
Строка	(LINE) Тип: INTEGER.&lt;br /&gt;
Назначение: Номер строки, служит для упорядочивания строк схемы при их применении. При редактировании и применении схем используется как вторичный ключ для сортировки. Может быть &amp;lt;= 0 и &amp;gt;= 0.&lt;br /&gt;
Ограничения: Not Null.&lt;br /&gt;
Если поле (CHECKFIELD) Тип: VARCHAR(32).&lt;br /&gt;
Назначение: Имя атрибута (поля), подлежащего проверке (вообще, любой стандартный &amp;quot;ГБ-шный&amp;quot; запрос, например, Id.DocDate)&lt;br /&gt;
Условие (CONDITION) Тип: VARCHAR(32).&lt;br /&gt;
Назначение: Отношение, связывающее «если поле» и «значение», при истинности которого применяется данная строка. Возможные значения: &lt;br /&gt;
=, &amp;lt;, &amp;gt;, &amp;lt;=, &amp;gt;=, &amp;lt;&amp;gt;	 - стандартные операции сравнения&lt;br /&gt;
IN (1,2,60)			- значение входит в список&lt;br /&gt;
ALL					- всегда истина&lt;br /&gt;
Значение (CHECKVALUE) Тип: VARCHAR(32).&lt;br /&gt;
Назначение: Константа для отношения «условие».&lt;br /&gt;
Произвольные значения (CUSTOMCONDITION) Тип: VARCHAR(250).&lt;br /&gt;
Тоже что и «значение» только в этом поле можно писать формулы (“ГБ-шный” запрос, например, Id.Articul.Name).&lt;br /&gt;
То Сделать (ACTIONNAME) Тип: VARCHAR(32).&lt;br /&gt;
Назначение: Действие, которое выполняется при срабатывании данной строки схемы. Возможные значения:&lt;br /&gt;
При сборе изменений:&lt;br /&gt;
UPDATE	- Установить для атрибута «Полю» значение «Значение»&lt;br /&gt;
DUPLICATE- Дублировать объект. Для дальнейшего изменения. Все правила написанные ниже данной строки будут производиться над дубликатом объекта;&lt;br /&gt;
IGNORE	- Не отправлять объект в удаленный отдел;&lt;br /&gt;
OOB		- Данный объект попадает в OOB-обмен;&lt;br /&gt;
ACCEPT	- Прекратить применение схем и отправить объект в удаленный отдел;&lt;br /&gt;
SKIP		- Пропустить при сборе и не удалять из версий;&lt;br /&gt;
FILTER	- Фильтрация субсетов. Например, у документа есть субсет – «Налоги» и из него надо оставить только налог с ид=2 и 3;&lt;br /&gt;
GOTO		- Перейти к строке, указанной в поле «значение»;&lt;br /&gt;
CONTINUE	- Перейти к следующей строке;&lt;br /&gt;
MESSAGE	- выдать строку «Значение» в файл export.log;&lt;br /&gt;
При записи изменений:&lt;br /&gt;
PRESERVE - При приеме изменений защитить от изменений поле, указанное в «полю»&lt;br /&gt;
IGNORE_IMPORT - Не принимать изменений данного объекта&lt;br /&gt;
MAKEDUPLICATE – При приеме изменений создает дубль к данному документу. В команде должны быть перечислены параметры создаваемого дубля и тип связи, которым он привязан к основному документу. Если к основному документу уже привязан дубль с помощью линки указанного типа, то дубль не создается.&lt;br /&gt;
FILTER_IMPORT – при записи изменений можно фильтровать определенный субсет (например, не записывать из субсета налогов для товара налог с заданным кодом)&lt;br /&gt;
&lt;br /&gt;
Прочие функции:&lt;br /&gt;
Depot() - возвращает номер удаленного отдела, для которого в текущий момент обрабатываются схемы.&lt;br /&gt;
Полю	(FORCEFIELD) Тип: VARCHAR(32).&lt;br /&gt;
Назначение: Аргумент (имя поля) над которым производятся действия, перечисленные в «то сделать».&lt;br /&gt;
Значение (FORCEVALUE) Тип: VARCHAR(32).&lt;br /&gt;
Назначение: Аргумент (константа) для некоторых действий. Значение &amp;quot;=FIELDNAME&amp;quot; указывает, что нужно взять значение из соответствующего атрибута (поля).&lt;br /&gt;
Произвольное значение (CUSTOMFORCEVALUE) Тип: VARCHAR(250).&lt;br /&gt;
Назначение: тоже что и «значение», только можно писать формулы (“ГБ-шные” запросы).&lt;br /&gt;
Примечание (NOTE) Тип: VARCHAR(250).&lt;br /&gt;
Назначение: Пояснение к строчке.&lt;br /&gt;
&lt;br /&gt;
'''Применение схем'''&lt;br /&gt;
&lt;br /&gt;
Строки схем сортируются по типу и по строке. Т.е. первый ключ – тип объекта, в нем идет сортировка по номеру строки. Про текущий объекта узнается его тип, и после того как пройдены все строки этого типа, переходим к следующему объекту.&lt;br /&gt;
&lt;br /&gt;
Примеры:&lt;br /&gt;
Отдел	Условие на отделы	Тип	Строка	Если поле	Условие	Значение	Произвольные условия	То сделать	Полю	Значение	Произвольное значение	Примечание&lt;br /&gt;
51		0	0		All			IGNORE				Товары не ходят в удаленный отдел&lt;br /&gt;
51		11	0	Firm	=	50		PRESERVE	Heap			У собственной фирмы НЕЛЬЗЯ менять Хиповые поля!&lt;br /&gt;
51												&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Пример рабочей схемы, в которой:&lt;br /&gt;
документы (расходные) от определенного партнера превращаются в расходные, при этом, у документа меняется склад, флаг, обнуляются связи, обнуляется договор, тип операции, меняется партнер с фирмой местами.&lt;br /&gt;
&lt;br /&gt;
Отдел	Условие на отделы	Тип	Строка	Если поле	Условие	Значение	Произвольные условия	То сделать	Полю	Значение	Произвольное значение	Примечание&lt;br /&gt;
52		11	-1		All			Ignore_Import				Документы не принимать&lt;br /&gt;
52		11	0	Id	&amp;gt;	520000000		Ignore_Import				Документы от депота=52 не принимать&lt;br /&gt;
52		11	1				DocDate&amp;lt;STRTODATE('24.09.2002')	IGNORE				Документы не принимать&lt;br /&gt;
52		11	2				(Partner&amp;lt;&amp;gt;7461) and (Stock &amp;lt;&amp;gt; 520000003)	Ignore				Документы не отсылать если они не на Нужного нам партнера&lt;br /&gt;
52		11	3				(Flag &amp;lt; 400) and (Stock &amp;lt;&amp;gt; 520000003)	Ignore				Не остылать документы с флагом &amp;lt; 400&lt;br /&gt;
52		11	4				(Partner=7461) and (DocType.SubType=19)	Update	Kind	102		Тип операции = Приход на консигнацию&lt;br /&gt;
52		11	5				(Partner=7461) and (DocType.SubType=19)	Update	DocType	33		пропускать документы на Нужного партнера, делаем приход&lt;br /&gt;
52		11	6				(Partner=7461) and (DocType.SubType=33)	Update	Links			Чистить связи у документов&lt;br /&gt;
52		11	7				(Partner=7461) and (DocType.SubType=33)	Update	Flag	100		Ставим флаг - 100&lt;br /&gt;
52		11	8				(Partner=7461) and (DocType.SubType=33)	Update	Stock	520000003		Ставим ихний склад&lt;br /&gt;
52		11	9				(Partner=7461) and (DocType.SubType=33)	Update	Imported_Id		Firm	Запоминаем фирму&lt;br /&gt;
52		11	10				(Partner=7461) and (DocType.SubType=33)	Update	Firm	7461		Ставим фирму&lt;br /&gt;
52		11	11				(Firm=7461) and (DocType.SubType=33)	Update	Partner		Imported_Id	Ставим Партнера&lt;br /&gt;
52		11	13				(Firm=7461) and (DocType.SubType=33)	Update	Contract	0		Обнуляем договор - т.к. его нет&lt;br /&gt;
52		11	14				(Firm=7461) and (DocType.SubType=33) and (Stock=520000003)	Accept				пропускать документы на Нужного партнера, делаем приход&lt;br /&gt;
52		11	20		All			Ignore				все остальные документы не пускать&lt;br /&gt;
&lt;br /&gt;
Из боевой базы в филиальную ходят только те документы, что выписаны на филиал, причем, в боевой эти документы - расходные, а в филиале они становятся приходными.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== СКРИПТЫ==&lt;br /&gt;
&lt;br /&gt;
По умолчанию, процесс обмена происходит в строго определенном порядке. При чем как работа с БД, так и работа по сети. Для работы обмена в произвольном режиме используются файлы-скрипты, в которых указывается последовательность действий.&lt;br /&gt;
Все команды выполняются последовательно одна за другой, сверху вниз. Обмен служит для скрипта как бы интерпретатором. Команды делятся на выполняемые с ожиданием окончания работы и без него. Есть команды для создания искусственного ожидания. Полный список команд приведен в Приложении 3.&lt;br /&gt;
Как правило, скрипты используются для организации обмена данными м/у Базой «для ГБ» и каким- то другим источником данных. Т.е. существует возможность, как порождать  файлы (txt, cds, xml, dbf) нужной структуры, так и обрабатывать, для последующей записи в ГБ. При этом может производиться неоднократная операция перевода формата данных(txt-&amp;gt;cds-&amp;gt;xml-&amp;gt;cds-&amp;gt;xml-&amp;gt;….-&amp;gt;cds), в процессе которой производятся необходимые преобразования данных (фильтрация, вычисления, изменение структуры и т.д.).&lt;br /&gt;
Для работы со скриптами необходимо наличие XML 3.0 или выше, ставится либо отдельным компонентом, либо вместе с MS Internet Explorer 5.0 и выше. &lt;br /&gt;
Работа Сервера обмена в скриптовом режиме организована на закладке «Скрипты» см. рис.10.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''XML - Шаблоны'''&lt;br /&gt;
&lt;br /&gt;
При конвертации в XML (или из XML) – используются файлы-xml-шаблоны. XML-Шаблоны имеют следующую структуру:&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;Windows-1251&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;root&amp;gt;&lt;br /&gt;
&amp;lt;line&amp;gt;&lt;br /&gt;
текст шаблона&lt;br /&gt;
&amp;lt;/line&amp;gt;&lt;br /&gt;
&amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При этом текст шаблона может содержать следующие конструкции (при чем эти конструкции совместимы, т.е. можно написать шаблон в одном файле для конвертации из текста, из XML в CDS, и CDS в XML):&lt;br /&gt;
&lt;br /&gt;
txt -&amp;gt; xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;txt2xml separator=&amp;quot;9&amp;quot;/&amp;gt;&lt;br /&gt;
- для конвертации текста в XML. &lt;br /&gt;
Применимы следующие параметры:&lt;br /&gt;
&amp;lt;txt2xml separator=&amp;quot;9&amp;quot; tabs=&amp;quot;14;22;42;50&amp;quot; cp866=&amp;quot;true&amp;quot; startline=&amp;quot;8&amp;quot; endline=”53” /&amp;gt;&lt;br /&gt;
separator=&amp;quot;9&amp;quot; - исп. если текст представляет собой данные с разделителем. В кавычках указывается КОД символа (9=табуляция).&lt;br /&gt;
cp866=&amp;quot;true&amp;quot; - указывает, что данные записаны в кодовой странице DOS866, для последующего перевода в WIN1251.&lt;br /&gt;
startline=&amp;quot;8&amp;quot; и&lt;br /&gt;
endline=”53” - с какой линии начинать обрабатывать и заканчивать обработку текстового файла. Начало с 0-й строки. Параметр startline= может исп. и без endline= - т.е. только указано с какй сверху строки начинать считывать. Исп. обычно, кода данные представляют собой результат какого-нибудь отчета или печатную форму.&lt;br /&gt;
tabs=&amp;quot;10;15;22&amp;quot; - исп. если текст представляет собой данные с фиксированной шириной колонок. После = указываются ПОЗИЦИЯ В СТРОКЕ, НА КОТОРОЙ ЗАКАНЧИВАЕТСЯ КОЛОНКА. Это НЕ длинна колонок!!! Т.е. в представленном примере: 1-я 0-10; 2-я 11-15; 3-я 16-22.&lt;br /&gt;
&lt;br /&gt;
structure&lt;br /&gt;
&lt;br /&gt;
&amp;lt;object name=&amp;quot;line&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;structure&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;Id&amp;quot;	label=&amp;quot;Код&amp;quot;	type=&amp;quot;I4&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/structure&amp;gt;&lt;br /&gt;
- при конвертации из XML в CDS – описание структуры датасета. При чем можно описывать и заполнять SubSet-ы– т.е. вложенные датасеты.&lt;br /&gt;
Применимы следующие параметры:&lt;br /&gt;
&amp;lt;field name=&amp;quot;Articul&amp;quot; label=&amp;quot;Товар&amp;quot; type=&amp;quot;I4&amp;quot; nature=&amp;quot;fmId+otArticuls&amp;quot; /&amp;gt;&lt;br /&gt;
name=&amp;quot;Articul&amp;quot;	- Название Имени поля в датасете. Должно быть уникально.&lt;br /&gt;
label=&amp;quot;Товар&amp;quot;	- Подпись к полю.&lt;br /&gt;
type=&amp;quot;I4&amp;quot;	- Тип поля. Возможные значения: &amp;quot;I4&amp;quot; - integer, &amp;quot;D8&amp;quot; - Date, &amp;quot;F8&amp;quot; - float, “S10” - строка длинной 10 символов.&lt;br /&gt;
nature=&amp;quot;fmId&amp;quot;	- Явное указание сущности данных. Для дальнейшего использования в шаблоне выражений типа “Articul.Node.Name”&lt;br /&gt;
&lt;br /&gt;
Пример описания структуры с SubSet-ами:&lt;br /&gt;
&amp;lt;structure&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;ObjType&amp;quot; label=&amp;quot;ObjType&amp;quot; type=&amp;quot;I4&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;subset name=&amp;quot;Data&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;Id&amp;quot;             label=&amp;quot;Код&amp;quot;                 type=&amp;quot;I4&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;Firm&amp;quot;           label=&amp;quot;Собст.фирма&amp;quot;         type=&amp;quot;I4&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;subset name=&amp;quot;Goodies&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;Id&amp;quot;        label=&amp;quot;Код&amp;quot;        type=&amp;quot;I4&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;Articul&amp;quot; label=&amp;quot;Товар&amp;quot; type=&amp;quot;I4&amp;quot; nature=&amp;quot;fmId&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;subset name=&amp;quot;Certificates&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;Articul&amp;quot; type=&amp;quot;I4&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;Quantity&amp;quot;    label=&amp;quot;Quantity&amp;quot;    type=&amp;quot;F8&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/subset&amp;gt;&lt;br /&gt;
&amp;lt;/subset&amp;gt;&lt;br /&gt;
&amp;lt;/subset&amp;gt;&lt;br /&gt;
&amp;lt;subset name=&amp;quot;Deleted&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;Id&amp;quot;    label=&amp;quot;Id&amp;quot;    type=&amp;quot;I4&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;field name=&amp;quot;AuxId&amp;quot; label=&amp;quot;AuxId&amp;quot; type=&amp;quot;I4&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/subset&amp;gt;&lt;br /&gt;
&amp;lt;/structure&amp;gt;&lt;br /&gt;
Представленный фрагмент имеет следующий формат:&lt;br /&gt;
на 1-м уровне 3 поля: &lt;br /&gt;
ObjType(integer)	Data(Blob-SubSet)	Deleted(Blob-SubSet)&lt;br /&gt;
	Поле Data - представляет собой вложенный(Sub) dataSet (который сам в себе так же содержит субсеты) со структурой:&lt;br /&gt;
	Id&lt;br /&gt;
	Firm&lt;br /&gt;
	Goodies -&amp;gt; тож субсет в субсете Data&lt;br /&gt;
		Id&lt;br /&gt;
		Articul&lt;br /&gt;
		Certificate -&amp;gt; еще один субсет в субсете Goodies&lt;br /&gt;
			Articul&lt;br /&gt;
			Quantity&lt;br /&gt;
&lt;br /&gt;
Поле Deleted содержит один Субсет, со структурой:&lt;br /&gt;
	Id(integer)		AuxId(integer)&lt;br /&gt;
&lt;br /&gt;
ds -&amp;gt; xml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ds2xml&amp;gt;&lt;br /&gt;
&amp;lt;attr tagname=&amp;quot;Articul&amp;quot;	fieldname=&amp;quot;Articul&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/ds2xml&amp;gt;&lt;br /&gt;
-	при конвертации Датасета (CDS) в XML – описание заполнения полей в XML.&lt;br /&gt;
Применимы следующие параметры:&lt;br /&gt;
&amp;lt;attr tagname=&amp;quot;CertExists&amp;quot; fieldname=&amp;quot;IIF(CertFound=-8,0,1)&amp;quot; /&amp;gt;&lt;br /&gt;
TagName=&amp;quot;Articul&amp;quot;	- Имя поля из которого брать значение или «формула ГБ», т.е. возможно исп. функции ГБ.&lt;br /&gt;
&lt;br /&gt;
xml -&amp;gt; ds&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xml2ds&amp;gt;&lt;br /&gt;
&amp;lt;attr fieldname=&amp;quot;ObjId&amp;quot;	tagname=&amp;quot;ObjId&amp;quot;	key=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/xml2ds&amp;gt;&lt;br /&gt;
- при конвертации XML в CDS.&lt;br /&gt;
Применимы следующие параметры:&lt;br /&gt;
&amp;lt;attr fieldname=&amp;quot;Name&amp;quot;		tagname=&amp;quot;CertName&amp;quot;	key=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;attr fieldname=&amp;quot;ObjType&amp;quot;	value=&amp;quot;17&amp;quot;		key=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
TagName=&amp;quot;Articul&amp;quot;		- Имя поля из которого брать значение.&lt;br /&gt;
Value=”StrToDate(Date())”	- Константа или формула расчета значения.&lt;br /&gt;
&lt;br /&gt;
Для боле детальной информации по структурам XML файлов см. файл &amp;quot;Шаблоны для xml.doc&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Виды Конвертаций'''&lt;br /&gt;
&lt;br /&gt;
ГБ -&amp;gt; ХХХ&lt;br /&gt;
Рассмотрение процесса порождения данных для третей среды не целесообразно, т.к. требования по предоставляемым данным из ГБ может неограниченно варьироваться. В большинстве случаев – это выполнение какого-либо отчета в ГБ, с последующим сохранением полученных данных в текстовый файл.&lt;br /&gt;
&lt;br /&gt;
ХХХ -&amp;gt; ГБ&lt;br /&gt;
Как правило, данные для импорта, представляют собой текстовые файлы. Конечным же результатом преобразований данных является файл формата CDS – «Обменской» структуры (см. Приложение 3). Текстовые файлы могут быть произвольной структуры, с разделителями (TAB), с фиксированной шириной колонки. Первым шагом при конвертации надо сделать перевод из текстового файла в XML, при этом разбив файл на колонки. По результатам обработки получим XML файл структуры Fld0=””, Fld1=””,...,FldN=””. После чего есть возможность сделать из XML -&amp;gt; CDS файл (если не требуется доп. обработки) для записи в базу с помощью обмена.&lt;br /&gt;
&lt;br /&gt;
ГБ -&amp;gt; ГБ&lt;br /&gt;
Используется в основном при создании новых баз ГБ, или для организации разовых обменов - например, для перекачки всех товаров или партнеров или восстановить ссылочную целостность относительно базы приемника и т.п. Во время перекачки обычно фильтруются субсеты объектов при помощи пользовательских схем обмена. Применяются форматы конвертирования: XML и CDS.&lt;br /&gt;
&lt;br /&gt;
	Пример скрипта, расположенный в Приложении 4 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
'''Ошибки и конфликтные правки'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Неизбежно при работе обмена возникают ошибки. Ошибки могут быть вызваны как работой пользователя, так и ошибками в программе. Как описывалось выше, завершенные сессии списываются в каталог завершенных сессий, и просмотр истории осуществляется на закладке «История», где по нажатию кнопки «Отчет» выдается окно с описанием сессии. &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис.2.5.1 Окно с отчетом о завершенной сессии&lt;br /&gt;
&lt;br /&gt;
На закладке «Ошибки» - информация об ошибках при записи на стороне клиента (верхняя половина) и сервера (нижняя половина). На закладке «Отчет» - список объектов, которые были в пакете для записи для клиента и сервера. На закладке «Исправить» - есть возможность запустить отчет, по результатам которого можно исправить ошибки. На закладке «Версии» - средство для восстановления баз по истории обмена.&lt;br /&gt;
Ошибки следует разрешать в порядке «от простого к сложному». Т.е. если в пакете есть партнер, который не записывается и документ, выписанный на этого партнера, то первым делом надо исправить ошибку с записью партнера. Другими словами, к разбору ошибок, связанных с документами, стоит переходить только в том случае, если кроме других ошибок нет. При ошибках в документах первыми стоит разбирать ошибки с приходами и актами передачи и в последнюю очередь с расходными документами.&lt;br /&gt;
Ниже рассмотрим различные ситуации и способы их разрешения.&lt;br /&gt;
&lt;br /&gt;
2.5.1 Ошибка при восстановлении партии товара&lt;br /&gt;
&lt;br /&gt;
Текст ошибки выглядит следующим образом:&lt;br /&gt;
ошибка при записи: документ [Id=270859] Прих тов П7351 от 06.09.02, &lt;br /&gt;
клиент Фирма, ООО.&lt;br /&gt;
Возможные причины:&lt;br /&gt;
*********************+&lt;br /&gt;
Что менялось:&lt;br /&gt;
Ошибка при восстановлении партии товара МАЛЫШОК  200г 10[#5198].&lt;br /&gt;
документ [Id=270859] Прих тов П7351 от 06.09.02, клиент Фирма, ООО.&lt;br /&gt;
Heap: [MEMO] -&amp;gt; [MEMO]&lt;br /&gt;
Субсет Goodies&lt;br /&gt;
и т.д.&lt;br /&gt;
&lt;br /&gt;
В случае возникновения подобной ошибки необходимо запустить ГБ на ту базу, при записи в которую возникла ошибка. Затем найти указанный в тексте ошибки товар, в контекстном меню выбрать пункт «Восстановление партии товара». В случае отсутствия это пункта, сообщите об этом разработчикам. После выбора данного меню вам будет выдано окно с сообщением, о результатах восстановления партии - если партии успешно восстановились, то переходим к следующему товару. Если по каким либо причинам в окне результат будет ошибка – ситуация требует разбора, а, возможно, и помощи разработчиков. Если партии товара(ов) были успешно восстановлены, то в следующий раз при обмене этих ошибок уже не будет.&lt;br /&gt;
&lt;br /&gt;
'''Объект с таким названием уже существует'''&lt;br /&gt;
&lt;br /&gt;
ошибка при записи: счет [Id=12422] &lt;br /&gt;
Возможные причины:&lt;br /&gt;
*********************+&lt;br /&gt;
Что менялось:&lt;br /&gt;
Счет с названием 70.520000096 уже существует&lt;br /&gt;
счет [Id=12422] &lt;br /&gt;
+*********************&lt;br /&gt;
Вставка&lt;br /&gt;
Id:NULL -&amp;gt; 12422&lt;br /&gt;
Name:NULL -&amp;gt; 70.520000096&lt;br /&gt;
&lt;br /&gt;
В ГБ у некоторых объектов есть поля, в которых должна соблюдаться уникальность, например название счета. Такие ситуации возникают, когда в разных базах одновременно заводят с одним названием партнеров, товары, счета и т.д.&lt;br /&gt;
Для решения проблемы, надо решить в какой базе созданный объект является более приоритетными его оставить, а другой удалить.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Попытка записать строчку с товаром А и сертификатом, отсутствующим в базе'''&lt;br /&gt;
&lt;br /&gt;
ошибка при записи: документ [Id=273712] Прих тов П15849 от 12.09.02,&lt;br /&gt;
клиент Фирма, ООО.&lt;br /&gt;
Возможные причины:&lt;br /&gt;
*********************+&lt;br /&gt;
Что менялось:&lt;br /&gt;
Попытка записать строчку с товаром каша овсяная молочная       300г[#949] и сертификатом, отсутствующим в базе данных&lt;br /&gt;
документ [Id=273712] Прих тов П15849 от 12.09.02, клиент Фирма, ООО.&lt;br /&gt;
+*********************&lt;br /&gt;
Вставка&lt;br /&gt;
Id:NULL -&amp;gt; 273712&lt;br /&gt;
Firm:NULL -&amp;gt; 7461&lt;br /&gt;
OperationDate:NULL -&amp;gt; 12.09.02&lt;br /&gt;
Kind:NULL -&amp;gt; 102&lt;br /&gt;
Currency:NULL -&amp;gt; 1&lt;br /&gt;
.....&lt;br /&gt;
  Вставка&lt;br /&gt;
  Articul:NULL -&amp;gt; 649&lt;br /&gt;
....&lt;br /&gt;
  Pack:NULL -&amp;gt; 2&lt;br /&gt;
  Субсет Certificates&lt;br /&gt;
    +*********************&lt;br /&gt;
    Вставка&lt;br /&gt;
    Certificate:NULL -&amp;gt; 22077&lt;br /&gt;
    Quantity:NULL -&amp;gt; 24&lt;br /&gt;
и т.д.&lt;br /&gt;
&lt;br /&gt;
Для разрешения данной ситуации необходимо запустить ГБ на ту базу, из которой передавался документ. Затем найти указанный в тексте ошибки товар, в свойствах товара выбрать указанный сертификат и «пошевелить его», т.е. поменять что-нибудь в свойствах и вернуть назад. Либо: найти указанный в ошибке документ, встать на указанную строчку товара, нажать Alt+Enter, при этом узнать на какой сертификат был выбран. После этого находясь на товарной строке нажать Ctrl+Space - и свойствах товара выбрать указанный в документе сертификат, вызвать его свойства и «пошевелить».&lt;br /&gt;
После этого в следующем сеансе обмена в пакете приедет и требуемый сертификат, и ошибка, следовательно, исчезнет.&lt;br /&gt;
Можно воспользоваться и другим вариантом – добавить запись непосредственно в таблицу версий запросом, например, insert into gbversions values (6,0,17,код сертификата,0,0)&lt;br /&gt;
(Такой запрос годится только для добавления в базу некаскадного клиента либо сервера, так как добавляет версию на депот 6).&lt;br /&gt;
Недохождение по обмену сертификатов (равно как и других объектов) может быть только разовой, редкой ситуацией. Если наблюдаются массовые недохождения объектов, необходимо разобраться, почему это может происходить.&lt;br /&gt;
&lt;br /&gt;
'''Не хватает N ед. товара A (Id) с серией &amp;quot;...&amp;quot; (Id) на складе &amp;quot;... &amp;quot; (Id)...'''&lt;br /&gt;
&lt;br /&gt;
Существует два основных вида ошибок такого рода, (см. рис. ниже) определяется наличием строки «Не разрешены конфликты:». Первый (на рисунке - «У клиента») - это когда остатков на складе фактически хватает. Второй случай, когда товара на складе действительно не хватает – тогда появляется строка Не разрешены конфликты, в которой перечислены остатки, которых не хватает для записи ВСЕХ документов, застрявших в ошибках.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис.2.5.2 Два вида ошибок.&lt;br /&gt;
&lt;br /&gt;
Поскольку ошибки могут быть как на стороне клиента, так и на стороне сервера - мы рассмотрим ситуацию, когда ошибки возникли на стороне сервера.&lt;br /&gt;
(Если же ошибки возникли на стороне клиента, то необходимо поставить галочку «Ошибки клиента» и нажать рядом расположенную кнопку «Отчет». После этого выполнить описанные ниже действия)&lt;br /&gt;
Рассмотрим первый случай, когда товар на складе есть, тем не менее, выдается такое сообщение об ошибке.&lt;br /&gt;
Такая ситуация возможна, когда в пакете идет и приход на товар и расход, в такой ситуации нужно несколько раз произвести обмен - в первый раз запишутся все приходы, а потом расходы.&lt;br /&gt;
Или при обмене, когда создавались корректирующие документы, возникла ошибка (типа «Ошибка при восстановлении партии товара» или созданные во время работы корректирующие документы не смогли удалиться). При этом можно попробовать поставить параметр, по которому не будут автоматически удаляться корректирующие документы, но не забыть их удалить после проведения обмена с помощью ГБ (корректирующие документы создаются с номером= “Correct”, Firm=0, Partner=0).&lt;br /&gt;
&lt;br /&gt;
Во втором случае, когда остатков действительно не хватает, существует несколько способов сверки документов. Т.к. нехватка товара - это различия по документам, которые влияют на остатки.&lt;br /&gt;
&lt;br /&gt;
1. Сверить документы в базах по типам документов. Закладка «Сравнения» см. подробное описание закладки в п.2.1.5. При чем, пользоваться этим способом можно только в случае если товарные документы, влияющие на остатки, ходят «как есть». Т.е. при обмене по схемам не преобразуются тип документа, операция.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.5.3. Пример результатов сравнения документов&lt;br /&gt;
&lt;br /&gt;
После того как получен отчет и видны различия, необходимо проанализировать эти различия. Например, решено часть документов прислать заново с клиента на сервер. В этом случае можно либо воспользоваться кнопкой В версии клиента, либо написать запрос вида insert into gbversions и пнуть его через встроенный SQL в закладке SQL. В случае, если хочется наоборот добавить версии на сервер, нужно пользоваться кнопкой В версии серверу&lt;br /&gt;
После этих процедур проводят обмен, при котором синхронизируются товарные документы, и, следовательно, конфликты разрешатся.&lt;br /&gt;
&lt;br /&gt;
2. Сверить информацию о движении по серии.&lt;br /&gt;
&lt;br /&gt;
Для этого необходимо открыть отчет о завершенной сессии, как на рис 2.5.4. Встать на строку «Не разрешены конфликты», где содержится суммарная информация обо всех недостачах товара.&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.5.4. Пункт с суммарной информацией&lt;br /&gt;
&lt;br /&gt;
После этого переключаемся на закладку «Исправить», где видим таблицу, в которой указано товар, сертификат, склад и недостающее количество, Рис. 2.5.5.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.5.5. Запуск отчета «Движение по серии»&lt;br /&gt;
&lt;br /&gt;
Далее мы можем запустить отчет «Движение по серии», либо по одной серии, либо по всем сразу. Для этого в группе «Запуск движения по серии» указываем период, за который хотим получить отчет (лучше с запасом по датам как в прошлое, так и в будущее) и жмем кнопку «По серии» (в этом случае запускается движение по серии, на которой стоит курсор) или кнопку «По всем сериям» (запускается отчет по всем сериям).&lt;br /&gt;
Для просмотра результатов работы отчета «Движение по серии» на основном окне программы, на закладке «Сравнения» есть кнопка «&amp;lt;?&amp;gt;».&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.5.6. Панель с кнопкой просмотра отчета&lt;br /&gt;
&lt;br /&gt;
По этой кнопке выдается окно (рис. 2.5.7), где показываются различия движения по сериям - документы. Далее необходимо решить, на какой стороне (клиент/сервер) документ является верным и в той базе добавить его в версии, чтобы он пришел в другую базу. Для этого в поле со списком выбираем действие, и жмем кнопку «Выполнить»&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.5.7 Результаты отчета «Движение по серии»&lt;br /&gt;
&lt;br /&gt;
 - В версии клиенту 		- отправить клиенту версии на те документы, которых нет на сервере.&lt;br /&gt;
 - В версии серверу 		- добавить в версии серверу те документы, которых нет на клиенте.&lt;br /&gt;
 - Выделенные клиенту 	- добавить клиенту в версии выделенные документы.&lt;br /&gt;
 - Выделенные серверу 	- добавить серверу в версии выделенные документы.&lt;br /&gt;
&lt;br /&gt;
После соответствующих добавлений в версии - производится обмен, при котором записываются недостающие документы, и соответственно конфликты разрешаются.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== РАБОТА ОБМЕНА В &amp;quot;РУЧНОМ&amp;quot; РЕЖИМЕ==&lt;br /&gt;
&lt;br /&gt;
Этот режим работы клиента и сервера используется в случае отсутствия возможности соединения по сети. В этом режиме файлы, которыми обмениваются клиент и сервер – передаются на дискетах или пересылаются по почте. Обмен в «ручном» режиме реализован на скриптах, см. раздел 2.1.6. Тексты скриптов «зашиты» в программы клиента и сервера. При «ручном» обмене используется Прямой порядок обмена, т.е. Клиент собирает свои изменения первым.&lt;br /&gt;
Настройка Сервера&lt;br /&gt;
На сервере необходимо перейти на закладку «Скрипты». Указать в Поле «От Отдела с Ид=» ид Клиента. В Поле «Имя скрипта=» указать путь к файлу скрипта, для сохранения, которое происходит по запуску скрипта и Будет подгружаться потом при запуске Сервера. Нажать на кнопку «М», по которой формируется скрипт.&lt;br /&gt;
Для начала выполнения скрипта жмем кнопку «Выполнить».&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Рис. 2.6.1. Настройки сервера&lt;br /&gt;
&lt;br /&gt;
Настройка Клиента&lt;br /&gt;
На клиенте необходимо создать пустой файл с расширением scr. Далее в настройках перейти на закладку «Скрипты», нажать кнопку выбора файла и выбрать пустой файл. Принять настройки, перегрузить клиента, см. рис.2.6.2 &lt;br /&gt;
 &lt;br /&gt;
Рис. 2.6.2. Настройки клиента&lt;br /&gt;
&lt;br /&gt;
Нажать Ctrl+E – для входа в режим редактирования скрипта, см.рис2.6.3, нажать кнопку «Вручную», потом сохранить(дискета).&lt;br /&gt;
 &lt;br /&gt;
Рис. 2.6.3. Редактирование скрипта на клиенте&lt;br /&gt;
Закрыть форму, перегрузить клиента. После запуска клиента нажать Ctrl+R – для запуска скрипта.&lt;br /&gt;
Далее вся работа организована в диалоговом режиме, т.е. после каждой операции, быдет выдаваться сообщение с подробными инструкциями, как поступить дальше.&lt;br /&gt;
&lt;br /&gt;
Для возвращения в нормальный режим работы:&lt;br /&gt;
Серверу – ничего не надо делать&lt;br /&gt;
Клиенту – в настройках отключить скрипт – выбрать в списке скриптов путь к файлу и нажать кнопку с красным крестиком. Принять изменения, перепустить Клиента.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ВОССТАНОВЛЕНИЕ ПОГИБШЕЙ БАЗЫ ЧЕРЕЗ ОБМЕН==&lt;br /&gt;
&lt;br /&gt;
Предположим, что имеется филиальная база, которая не подлежит восстановлению. Либо время на восстановление достаточно большое. При наличии рабочего бэкапа (или копии) базы за какой-то из предыдущих дней можно восстановить всю потерянную информацию обменом из головной базы (при условии, что этот обмен проходил, естественно)&lt;br /&gt;
Порядок действий:&lt;br /&gt;
1. На сервере обмена создать папку, в которую скопировать все интересующие законченные сессии (из каталога Exchange/Complete Sessions/&amp;lt;Код филиала&amp;gt;)&lt;br /&gt;
2. В обмене зайти  в закладку История/Любая сессия от этого клиента/Версии&lt;br /&gt;
3. Выбрать папку, в которую скопированы сессии из п.1&lt;br /&gt;
4. Выбрать радиокнопку Imp+Exp (если тебе надо отправить все, что приходило от него и уходило к нему). Либо только Imp (если надо отправить все, что приходило ОТ него) или только Exp (если надо отправить все, что уходило К нему).&lt;br /&gt;
Для отдела – поставить  депот филиала, например, 52.&lt;br /&gt;
5. Нажать кнопку Сканировать, появляется список версий, которые фигурировали в этих сессиях.&lt;br /&gt;
6. Кнопка В версии добавляет все эти версии в таблицу версий для этого депота.&lt;br /&gt;
7. Провести обмен как обычно, уходит все объекты в том состоянии, в котором они сейчас на сервере. То есть если документ приходил от клиента 3 раза в состоянии 100, 200, 1000, то уйдет именно конечное состояние документа (1000) – то, которое сейчас в базе сервера. Все объекты, встречающиеся во всех выбранных сессиях (пусть их даже будет 1000 штук за неделю), уйдут по одному разу.&lt;br /&gt;
 &lt;br /&gt;
== МОНИТОР ОБМЕНА ==&lt;br /&gt;
&lt;br /&gt;
В случае, если у компании много филиалов и много серверов обмена, довольно много времени занимает хождение по разным машинам и проверка ошибок от клиентов. (Даже если пользоваться кнопкой Список клиентов с их состоянием). Здесь можно воспользоваться специальной программой под названием Монитор обмена. В ней регистрируются все нужные сервера обмена, можно смотреть состояния завершенных сессий и ошибки по ним.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Рис. 3.1. Вид рабочего окна монитора обмена&lt;br /&gt;
&lt;br /&gt;
== РАБОТА ХРАНИМЫХ ПРОЦЕДУР==&lt;br /&gt;
&lt;br /&gt;
В процессе работы пользователя в ГБ информация обо всех его действиях по изменению, созданию и удалению объектов сохраняется с помощью соответствующих триггеров (execute procedure Add_gbversion(obj_type, obj_id))в таблице GBVERSIONS. Таблица имеет следующую структуру:&lt;br /&gt;
&lt;br /&gt;
DEPOTID		- ид отдела, для которого сделана версия. (6-для всех)&lt;br /&gt;
MADEBY		- ид отдела, который сделал версию, (6 - сервер, 0 - пользователь)&lt;br /&gt;
OBJTYPE		- тип объекта (см. приложение 6)&lt;br /&gt;
OBJID			- ид объекта&lt;br /&gt;
AUXID		- дополнительный ид объекта&lt;br /&gt;
PROCESSING	- признак, что версия «собиралась» (0 или 1)&lt;br /&gt;
&lt;br /&gt;
Варианты сочетания DEPOTID и MADEBY:&lt;br /&gt;
&lt;br /&gt;
Сервер						Каскадный Сервер&lt;br /&gt;
DEPOTID =	6 (или N &amp;gt;50)				DEPOTID = 6 (или N &amp;gt;50)&lt;br /&gt;
MADEBY =	6					MADEBY = 6&lt;br /&gt;
&lt;br /&gt;
Клиент						Каскадный Клиент&lt;br /&gt;
DEPOTID = 6						DEPOTID = -6&lt;br /&gt;
MADEBY = 0						MADEBY = 0&lt;br /&gt;
&lt;br /&gt;
Если при обмене сервер встречает строку с DEPOTID=6, он «раскалывает» версию на количество отделов, указанных в папке с ид=6. Т.е. вместо одной строки появляется несколько с конкретными DEPOTID-ами. Версия же с DEPOTID=6 удаляется.&lt;br /&gt;
&lt;br /&gt;
'''Сбор изменений'''&lt;br /&gt;
&lt;br /&gt;
1. GBVersions_Get(SplitOnly) 	– «раскалываются» версии;&lt;br /&gt;
2. Optimize_Versions 			– для удаления лишних версий;&lt;br /&gt;
3. GBVersions_Get 			– для сбора версий.&lt;br /&gt;
4. GetRemote_versions		– для сбора версий из распределенных баз.&lt;br /&gt;
&lt;br /&gt;
После чего по собранным версиям добываются объекты и упаковываются в пакет для отправки.&lt;br /&gt;
&lt;br /&gt;
'''Запись изменений'''&lt;br /&gt;
&lt;br /&gt;
Перед записью пакет сортируется по полю ObjType. Сначала происходит запись всех объектов (Data), а за тем удаление (Deleted). При этом, если про записываемый или удаляемый объект есть запись в таблице gbversions  в базе приемника - она удаляется. Во время записи происходит формирование подтверждений, которые потом отправляются в базу источник.&lt;br /&gt;
Запись происходит в три «круга» - как попытка развести зависимости м/у объектами. Документы записываются в последнюю очередь, при этом при необходимости создаются корректирующие документы. &lt;br /&gt;
&lt;br /&gt;
'''Прием подтверждений'''&lt;br /&gt;
&lt;br /&gt;
При записи подтверждений происходит удаление строки из таблицы gbversions, которые указаны в файле подтверждений. Структура ключевых полей в таблице gbversions и пакете совпадают.&lt;br /&gt;
&lt;br /&gt;
==ХОЖДЕНИЕ СОБСТВЕННЫХ ТАБЛИЦ ПО ОБМЕНУ==&lt;br /&gt;
&lt;br /&gt;
Допустим, у вас имеется некая таблица, которую вы создали для своих надобностей и хотите, чтобы она ходила по обмену.&lt;br /&gt;
Существует два способа, чтобы это сделать.&lt;br /&gt;
&lt;br /&gt;
Способ 1.&lt;br /&gt;
Если таблица привязана к существующим в ГБ стандартным объектам (партнерам, товарам, документам и т.п.), то можно использовать фирмозависимые процедуры вида      &amp;lt;_ADD_EXTRAFIELDS&amp;gt;, &amp;lt;_PUT_EXTRAFIELDS&amp;gt; и &amp;lt;_FILL_EXTRAFIELDS&amp;gt; (например, ARTICULS_FILL_EXTRAFIELDS), которые создают субсет с данными из таблицы, заполняют его и обрабатывают его изменения.&lt;br /&gt;
&lt;br /&gt;
На вставку, изменение и удаление из таблицы создаются триггеры, в которых вызывается Add_Aux_Gbversion с типом и кодом объекта, к которому привязана изменяемая запись.&lt;br /&gt;
&lt;br /&gt;
Этот способ можно использовать только при оносительно небольшом количестве записей, поскольку при изменении одной записи всегда передается группа записей, связанных со стандартным объектом.&lt;br /&gt;
&lt;br /&gt;
Пример использования: ABC-группы товара. Есть таблица Товар-Склад-ABC&lt;br /&gt;
Можно сделать ее хождение вместе с товаром.&lt;br /&gt;
&lt;br /&gt;
Способ 2.&lt;br /&gt;
Если вы работаете с каким-то нестандартным объектом, созданным вами, то можно использовать механизм классов. Как пример можно рассмотреть класс адресов доставки (код 110). &lt;br /&gt;
В классе должно быть прописано название для процедур, работающих с объектами этого класса. Процедур должно быть 2: &lt;br /&gt;
•	&amp;lt;_GET&amp;gt;&lt;br /&gt;
•	&amp;lt;_PUT&amp;gt;&lt;br /&gt;
Например, для класса адресов доставки в поле Процедуры прописано partneraddresses. Соответственно, в базе должны быть процедуры&lt;br /&gt;
partneraddresses_get и partneraddresses_put&lt;br /&gt;
&lt;br /&gt;
Триггеры для PartnerAddresses вызывают Add_Aux_GbVersion с типом 110 и кодом адреса доставки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==ТЕРМИНЫ==&lt;br /&gt;
&lt;br /&gt;
ОнЛайн	- время, когда клиент может произвести полный цикл обмена, т.е. променяться «полностью».&lt;br /&gt;
ОффЛайн	- время, когда клиент выкладывает свои изменения на сервер и дальше этой стадии обмен не идет, до тех пор, пока не наступит время ОнЛайн.&lt;br /&gt;
ОффЛайн Приемка - время, когда клиент выложил свои изменения и не может дальше меняется, сервер в указанное время сканирует каталоги и принимает изменения, присланные клиентом.&lt;br /&gt;
HSTO	- (Head Send TimeOut) Невозможно отправить заголовок пакета. Обычно возникает совместно с BSTO.&lt;br /&gt;
BSTO		- (Body Send TimeOut) Невозможно отправить тело пакета&lt;br /&gt;
NetWatcher	- Проверка соединений/сети.&lt;br /&gt;
SYSRequest	- К клиенту пришел системный запрос. Например, о состоянии обмена.&lt;br /&gt;
(TR)		-(Transaction) Документ записывается в отдельной транзакции&lt;br /&gt;
BO		- (Back Order) Обмен с клиентом в обратном порядке&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==Приложение 1. Пример файла установок сервера==&lt;br /&gt;
&lt;br /&gt;
#GB Exchange Server, Copyright(c) GB soft 2000.Server Initialization file&lt;br /&gt;
# Секция [Main] - описывается путь к БД&lt;br /&gt;
# Путь к Базе Данных, можно использовать и сетевой путь При чем, для NetBIOS - начинается с &lt;br /&gt;
#\\имя\путь; для TCP/IP - имя:путь. Имя библиотеки – необязательно, может быть gds32.dll или fbClient.dll&lt;br /&gt;
# !ОБЯЗАТЕЛЕН!&lt;br /&gt;
[Main]&lt;br /&gt;
DBPath =net:d:\bases\base.gdb&lt;br /&gt;
DBLogin=&lt;br /&gt;
DBPass=&lt;br /&gt;
ClientLibrary=&lt;br /&gt;
# Секция [Server] - Описываются основные установки для сервера Порт Сервера, по умолчанию = 1111. При &lt;br /&gt;
#изменении ОБЯЗАТЕЛЬНО оповестить всех клиентов.&lt;br /&gt;
# !ОБЯЗАТЕЛЕН!&lt;br /&gt;
[Server]&lt;br /&gt;
Port=1111&lt;br /&gt;
# Максимально возможное количество одновременно работающих пользователей.&lt;br /&gt;
# Для ограничения нагрузки на Сервер. По умолчанию и минимальное значение = 1&lt;br /&gt;
MaxConnection=10&lt;br /&gt;
# Путь для создания дерева каталогов со списком активных и завешенных сессий.&lt;br /&gt;
# !ОБЯЗАТЕЛЕН!&lt;br /&gt;
ExchangePath =\Exchange&lt;br /&gt;
# Путь и имя файла в который пишется информация о работе Сервера.&lt;br /&gt;
# !ОБЯЗАТЕЛЕН!&lt;br /&gt;
LogFileName=\gbServer.log&lt;br /&gt;
# Время с секундах, по истечении которого будет выдаваться сообщение о&lt;br /&gt;
# задержке пакетов в сети. По умолчанию = 5 сек.&lt;br /&gt;
TimeOut_InSec=10&lt;br /&gt;
# Использовать при обмене возможность частичного обмена и докачки файлов,&lt;br /&gt;
# если был обрыв в прошлый раз. Используется на плохих каналах связи.&lt;br /&gt;
MaxVersionInPacket=3000&lt;br /&gt;
# Число версий в пакете, который соберет сервер&lt;br /&gt;
PartialExchange=Yes&lt;br /&gt;
# Отправлять ли результаты обмена по ЛОКАЛЬНОЙ сети. Выполняется строка: net send &lt;br /&gt;
#SendResultTo &amp;quot;message&amp;quot; По умолчанию = No&lt;br /&gt;
SendReportMsg=No&lt;br /&gt;
# Расключаться по завершении обмена (сохранять или нет коннект с базой данных)&lt;br /&gt;
DisconnectOnEnd=No&lt;br /&gt;
# Имя компьютера в ЛОКАЛЬНОЙ сети на которое придет сообщение о завершении обмена.&lt;br /&gt;
SendResultTo=&lt;br /&gt;
# Число версий, которые будут учитываться при обмене. Используется,&lt;br /&gt;
# если пакет с изменениями очень велик. По умолчанию = 0, т.е. все изменения.&lt;br /&gt;
# -1 не собирать изменений&lt;br /&gt;
MaxVersionInPacket =0&lt;br /&gt;
# Сканировать пользователей - не появились ли дохлые коннекты. Время в секундах&lt;br /&gt;
ScanForLostConnect = No&lt;br /&gt;
ScanForLostConnect_Period=30&lt;br /&gt;
# Рассоединяться с клиентом по завершению сессии обмена  для плохих каналов лучше использовать значение - No&lt;br /&gt;
DisconnectOnEnd =No&lt;br /&gt;
# Каскадный сервер &lt;br /&gt;
Cascade=Yes&lt;br /&gt;
LoginTimeOut=2&lt;br /&gt;
OnLineDays=Yes&lt;br /&gt;
UserAccessList=51;52&lt;br /&gt;
# Домениваться частичными подтверждениями&lt;br /&gt;
AckPartial=No&lt;br /&gt;
ClientFieldName=Heap.@LastEx&lt;br /&gt;
# Секция [InterFace] - Описываются установки интерфейса для сервера&lt;br /&gt;
[InterFace]&lt;br /&gt;
#С какой даты(включительно) не показывать завершенные сессии&lt;br /&gt;
FilterDate=02.11.25&lt;br /&gt;
# Период хранения истории об обмене Сессии, Логи, Скрины&lt;br /&gt;
KeepSessions =30&lt;br /&gt;
KeepLogs     =1&lt;br /&gt;
KeepSCRs     =5&lt;br /&gt;
#Координаты окна&lt;br /&gt;
XPos=3&lt;br /&gt;
YPos=1&lt;br /&gt;
Width=564&lt;br /&gt;
Height=715&lt;br /&gt;
CSplit=62&lt;br /&gt;
QSplit=75&lt;br /&gt;
#Настройки для isql&lt;br /&gt;
SQL_Commit=Yes&lt;br /&gt;
SQL_Statistic=No&lt;br /&gt;
SQL_List=No&lt;br /&gt;
SQL_Plan=No&lt;br /&gt;
SQL_RowCount=No&lt;br /&gt;
# Секция [Schemes] - Cхемы обмена дополнительной информацией после основного обмена. Т.к. файлы Лога и &lt;br /&gt;
#Ошибок могут быть большими или не нужными, то чтобы с экономить время обмена их можно отключить.&lt;br /&gt;
[Schemes]&lt;br /&gt;
# Отправлять ли клиенту отчет об ошибках при принятии изменений. По умолчанию = Yes&lt;br /&gt;
SendErrFile = Yes&lt;br /&gt;
# Отправлять ли клиенту файл описания работы программы Клиента при принятии изменений. По умолчанию = No&lt;br /&gt;
SendLogFile = No&lt;br /&gt;
SendMessages=Good;Error;Interrupted;Status;OldVersion;OffLine;ShowWindow;&lt;br /&gt;
# Секция [ClientMap] - Список соответствия Числовых Идентификаторов Клиентов (UID) их полному названию. &lt;br /&gt;
#Формат UID = Полное_имя&lt;br /&gt;
[ClientMap]&lt;br /&gt;
51 =51Бухгалтерия&lt;br /&gt;
52 =52Врангель&lt;br /&gt;
# Секция [Priority] - Список приоритетов при обмене для Клиентов. Формат UID = Приоритет. Приоритет = 0..9. 9 - &lt;br /&gt;
#Максимальный. Признак, что приоритеты будут учитываться при обмене&lt;br /&gt;
[Priority]&lt;br /&gt;
Use =Yes&lt;br /&gt;
51 =2&lt;br /&gt;
52 =8&lt;br /&gt;
&lt;br /&gt;
# Секция [OnLineTimeGrid] - Таблица периодов для OnLine-обменов Клиентов. ScanPeriod - время в мин. через &lt;br /&gt;
#которое будут сканироваться каталоги Формат UID = Время-Время (в формате 02:56 или 23:30, БЕЗ секунд)&lt;br /&gt;
[OnLineTimeGrid]&lt;br /&gt;
ScanPeriod =0&lt;br /&gt;
51 =&lt;br /&gt;
52=09:00-21:00&lt;br /&gt;
#&lt;br /&gt;
[TimeToSleep]&lt;br /&gt;
NoBody=&lt;br /&gt;
ForAll=No&lt;br /&gt;
51=&lt;br /&gt;
52=&lt;br /&gt;
#Дни «безусловного Online-a»&lt;br /&gt;
[OnLineDays]&lt;br /&gt;
1=No&lt;br /&gt;
2=No&lt;br /&gt;
3=No&lt;br /&gt;
4=No&lt;br /&gt;
5=No&lt;br /&gt;
6=No&lt;br /&gt;
7=No&lt;br /&gt;
#Запуски программ перед и после обмена&lt;br /&gt;
[Execute]&lt;br /&gt;
Execute=No&lt;br /&gt;
AtTime=&lt;br /&gt;
1ProgName=&lt;br /&gt;
ClientList=&lt;br /&gt;
2ProgName=&lt;br /&gt;
#IP адреса, с которых последний раз заходил клиент&lt;br /&gt;
[ClientsLastIP]&lt;br /&gt;
51=192.168.10.3&lt;br /&gt;
52=192.168.10.3&lt;br /&gt;
#Время сбора изменений&lt;br /&gt;
[Client_getChangesTime]&lt;br /&gt;
52=15.07.02 13:31:46&lt;br /&gt;
51=23.07.02 17:41:40&lt;br /&gt;
#Настройки для создания корректирующих документов&lt;br /&gt;
[CreatingDoc]&lt;br /&gt;
DocId=ToKill&lt;br /&gt;
FirmId=7461&lt;br /&gt;
DocType=33&lt;br /&gt;
OpType=102&lt;br /&gt;
#Прочие параметры&lt;br /&gt;
[OtherParams]&lt;br /&gt;
CertMinDate=01.07.2000&lt;br /&gt;
CertMaxDate=22.07.2002&lt;br /&gt;
#Параметры для сравнения документов&lt;br /&gt;
[DocList]&lt;br /&gt;
Firm=-1&lt;br /&gt;
StartDate=01.09.2002&lt;br /&gt;
FinishDate=02.09.2002&lt;br /&gt;
DocTypes=19;22;23&lt;br /&gt;
StartId=&lt;br /&gt;
EndId=&lt;br /&gt;
RStartDate=22.07.2002&lt;br /&gt;
RFinishDate=22.07.2002&lt;br /&gt;
Stocks=757;3366;3363;758;3367;3364;1514;3368;3365&lt;br /&gt;
#Кол-во версий на стороне клиента&lt;br /&gt;
[ClientMaxVersionInPacket]&lt;br /&gt;
51=0&lt;br /&gt;
52=0&lt;br /&gt;
#Обратный порядок для обмена&lt;br /&gt;
[BackOrder]&lt;br /&gt;
51=0&lt;br /&gt;
52=0&lt;br /&gt;
#производить авто обновление клиента&lt;br /&gt;
[LiveUpdate]&lt;br /&gt;
51=No&lt;br /&gt;
52=Yes&lt;br /&gt;
#Автоматом корректировать отрицательные остатки&lt;br /&gt;
[Correct_NegativeRests]&lt;br /&gt;
51=No&lt;br /&gt;
52=No&lt;br /&gt;
#кэширование записи (не исп. временно)&lt;br /&gt;
[preCaching]&lt;br /&gt;
51=No&lt;br /&gt;
52=No&lt;br /&gt;
#скрипты&lt;br /&gt;
[Scripts]&lt;br /&gt;
UserId=51&lt;br /&gt;
FileName=D:\gbAbout\gbExchange\Server\manual_srv.scr&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Приложение 2.Сбор партнеров из папок 1, 2, 3, 4, 5, 6, 13, 20==&lt;br /&gt;
&lt;br /&gt;
ALTER PROCEDURE GBVersions_GET_Custom&lt;br /&gt;
(&lt;br /&gt;
  Params VARCHAR(32640) CHARACTER SET WIN1251&lt;br /&gt;
)&lt;br /&gt;
RETURNS&lt;br /&gt;
(&lt;br /&gt;
  Result VARCHAR(32640) CHARACTER SET WIN1251&lt;br /&gt;
)&lt;br /&gt;
AS&lt;br /&gt;
DECLARE VARIABLE PDs                  INTEGER;&lt;br /&gt;
DECLARE VARIABLE RDs                  INTEGER;&lt;br /&gt;
DECLARE VARIABLE Tmp                  INTEGER;&lt;br /&gt;
DECLARE VARIABLE I                    INTEGER;&lt;br /&gt;
DECLARE VARIABLE DepotList            INTEGER;&lt;br /&gt;
&lt;br /&gt;
DECLARE VARIABLE iServer              INTEGER;&lt;br /&gt;
DECLARE VARIABLE iMaxVersion          INTEGER;&lt;br /&gt;
&lt;br /&gt;
DECLARE VARIABLE dvObjId              INTEGER;&lt;br /&gt;
DECLARE VARIABLE dvAuxId              INTEGER;&lt;br /&gt;
DECLARE VARIABLE dvObjType            INTEGER;&lt;br /&gt;
DECLARE VARIABLE dvNeedAppend         INTEGER;&lt;br /&gt;
&lt;br /&gt;
DECLARE VARIABLE oAuxId               INTEGER;&lt;br /&gt;
DECLARE VARIABLE oObjId               INTEGER;&lt;br /&gt;
DECLARE VARIABLE oObjType             INTEGER;&lt;br /&gt;
&lt;br /&gt;
DECLARE VARIABLE dvPartner            INTEGER;&lt;br /&gt;
DECLARE VARIABLE dvProcessing         SMALLINT;&lt;br /&gt;
DECLARE VARIABLE dvCurrentDepot       INTEGER;&lt;br /&gt;
DECLARE VARIABLE dvDepot              INTEGER;&lt;br /&gt;
DECLARE VARIABLE dvDepotCount         INTEGER;&lt;br /&gt;
DECLARE VARIABLE dvVersionCount       INTEGER;&lt;br /&gt;
DECLARE VARIABLE dvMadeBy             INTEGER;&lt;br /&gt;
&lt;br /&gt;
DECLARE VARIABLE dvPrevObjType        INTEGER;&lt;br /&gt;
DECLARE VARIABLE dvPrevObjId          INTEGER;&lt;br /&gt;
DECLARE VARIABLE dvPrevAuxId          INTEGER;&lt;br /&gt;
&lt;br /&gt;
BEGIN&lt;br /&gt;
&lt;br /&gt;
  I = PutError(0, '');&lt;br /&gt;
  PDs = DsByVarChar(Params);&lt;br /&gt;
  dvVersionCount = 0;&lt;br /&gt;
  dvCurrentDepot = Depot();&lt;br /&gt;
  iServer        = 0;&lt;br /&gt;
  iMaxVersion    = 0;&lt;br /&gt;
  RDs = DsCreate('GBVersions');&lt;br /&gt;
  oObjType = DsAddField(RDs,'I4,Тип,,'     ,'ObjType');&lt;br /&gt;
  oObjId   = DsAddField(RDs,'I4,Код,,'     ,'ObjId');&lt;br /&gt;
  oAuxId   = DsAddField(RDs,'I4,Доп. код,,','AuxId');&lt;br /&gt;
  /* Проверяем, что никто другой не собирает изменения */&lt;br /&gt;
  IF (ValidAmount(GetRate(-1,'01.01.1980')) &amp;gt;= 1) THEN&lt;br /&gt;
  BEGIN&lt;br /&gt;
    IF (GetRate(-1,'01.01.1980') = 1) THEN&lt;br /&gt;
    BEGIN&lt;br /&gt;
      I = PutError(7000, 'Кто-то уже собирает изменения');&lt;br /&gt;
      EXCEPTION GB_EXCEPTION;&lt;br /&gt;
    END&lt;br /&gt;
  END&lt;br /&gt;
  /* Никто другой не собирает изменения, ставим семафор */&lt;br /&gt;
  I = AddRate(-1,'01.01.1980',1);&lt;br /&gt;
&lt;br /&gt;
 FOR&lt;br /&gt;
    SELECT 0,&lt;br /&gt;
           Id,&lt;br /&gt;
           0,&lt;br /&gt;
           depot(),&lt;br /&gt;
           0&lt;br /&gt;
    FROM   partners&lt;br /&gt;
    WHERE  node in (1, 2, 3, 4, 5, 6, 13, 20)&lt;br /&gt;
    INTO   :dvObjType,&lt;br /&gt;
           :dvObjId,&lt;br /&gt;
           :dvAuxId,&lt;br /&gt;
           :dvDepot,&lt;br /&gt;
           :dvMadeBy&lt;br /&gt;
  DO&lt;br /&gt;
  BEGIN&lt;br /&gt;
        tmp = DsAppend(RDs);&lt;br /&gt;
        tmp = DsPutInteger(RDs, oObjType, dvObjType);&lt;br /&gt;
        tmp = DsPutInteger(RDs, oObjId,   dvObjId);&lt;br /&gt;
        tmp = DsPutInteger(RDs, oAuxId,   dvAuxId);&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
  Result = DsInitResult();&lt;br /&gt;
  WHILE (DsDoneResult(Result) = 0) DO&lt;br /&gt;
  BEGIN&lt;br /&gt;
    Result = DsToVarChar(RDs);&lt;br /&gt;
    SUSPEND;&lt;br /&gt;
  END&lt;br /&gt;
&lt;br /&gt;
  I = AddRate(-1,'01.01.1980',0); /* free semaphor */&lt;br /&gt;
  Tmp = DSFree(PDs);&lt;br /&gt;
  Tmp = DsFree(RDs);&lt;br /&gt;
  Tmp = FreeIds(DepotList);&lt;br /&gt;
&lt;br /&gt;
  WHEN ANY DO&lt;br /&gt;
  BEGIN&lt;br /&gt;
    IF (GetError() &amp;lt;&amp;gt; 7000) THEN /* not a semaphor error */&lt;br /&gt;
      I = AddRate(-1,'01.01.1980',0); /* free semaphor */&lt;br /&gt;
    Tmp = DSFree(PDs);&lt;br /&gt;
    Tmp = DSFree(RDs);&lt;br /&gt;
    Tmp = FreeIds(DepotList);&lt;br /&gt;
&lt;br /&gt;
    Result = DsErrorResult();&lt;br /&gt;
    SUSPEND;&lt;br /&gt;
  END&lt;br /&gt;
END&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==Приложение 3. Функции и их описание==&lt;br /&gt;
&lt;br /&gt;
	Регистр текста команд НЕ учитывается.&lt;br /&gt;
#Run= Startup | OnSend | OnDBaction&lt;br /&gt;
Тип скрипта – порядок выполнения. Варианты значений OnSend иOnDBAction – временно не работают.&lt;br /&gt;
#Debug= On | Off&lt;br /&gt;
Выводить в лог отладочную информацию&lt;br /&gt;
#XMLPath=D:\gbExchange\XML&lt;br /&gt;
Путь для файлов XML. Далее может использоваться при указании пути к файлу.&lt;br /&gt;
#DATAPath=D:\gbExchange\Work&lt;br /&gt;
Путь для файлов с данными. Может использоваться при указании пути к файлу.&lt;br /&gt;
#WORKPath=D:\gbExchange\Work&lt;br /&gt;
Рабочий каталог. Может использоваться при указании пути к файлу.&lt;br /&gt;
#ERRORPath=D:\gbExchange\Error&lt;br /&gt;
Путь для файлов с описанием ошибок. &lt;br /&gt;
&lt;br /&gt;
WaitForDB&lt;br /&gt;
Команда без параметров. Приостанавливает выполнение скрипта до сигнала БД о завершении работы или ошибке.&lt;br /&gt;
&lt;br /&gt;
WaitForNet&lt;br /&gt;
Команда без параметров. Приостанавливает выполнение скрипта до сигнала по сети о пришедших файлах.&lt;br /&gt;
&lt;br /&gt;
Exit&lt;br /&gt;
Команда без параметров. Выход из программы клиента.&lt;br /&gt;
&lt;br /&gt;
File_Proc&lt;br /&gt;
FileName&lt;br /&gt;
Команда с одним обязательным параметром – имя файла. Отправляет файл на обработку БД. Файл должен быть в формате «обмена». [УСТАРЕВШАЯ, см. dbtask_add]&lt;br /&gt;
&lt;br /&gt;
FileToDs&lt;br /&gt;
Src_txt, XMLTemplate, ObjName, ResultDSName&lt;br /&gt;
Команда с четырьмя обязательными параметрами – Имя текстового файла, XML-шаблон для преобразования текстового файла в датасет, Имя объекта, Имя файла – датасета в который сохранится результат. Преобразование формата файла из текстового в датасет. Если файл-датасет уже существует, и он той же структуры, что и создаваемый, то происходит процесс ДОПИСЫВАНИЯ. Т.е. файл-датасет не создается снова.&lt;br /&gt;
&lt;br /&gt;
FileToXml&lt;br /&gt;
FileName, XMLTemplate, objName, DSFileName&lt;br /&gt;
Команда с четырьмя обязательными параметрами – Имя текстового файла, XML-шаблон для преобразования текстового файла в датасет, Имя объекта, Имя файла – датасета в который сохранится результат. Преобразование формата файла из текстового или DBF в XML.&lt;br /&gt;
&lt;br /&gt;
DsToFile&lt;br /&gt;
Ds_File, XMLTemplate, TXTFile&lt;br /&gt;
Команда с тремя обязательными параметрами – Имя файла датасета, XML-шаблон для преобразования датасета  в текстовый файл, Имя файла – в который сохранится результат. Преобразование формата файла из датасета в текстовый файл.&lt;br /&gt;
&lt;br /&gt;
CompareDS&lt;br /&gt;
Ds_File1, Ds_File2, DsResult_File&lt;br /&gt;
Команда с тремя обязательными параметрами – Имя файла датасета1, Имя файла датасета2, Имя файла – в который сохранятся различия. Сравнить два датасета в формате «обмен-документы» по сумме, количеству, флагу и партнеру.&lt;br /&gt;
&lt;br /&gt;
Zip&lt;br /&gt;
src, des&lt;br /&gt;
Команда с двумя обязательными параметрами – Имя файла источника, Имя файла приемника. Запаковать файл-источник и поместить в файл-приемник. Формат файла приемника - gZIP.&lt;br /&gt;
&lt;br /&gt;
UnZip&lt;br /&gt;
src, des&lt;br /&gt;
Команда с двумя обязательными параметрами – Имя файла источника, Имя файла приемника. Распаковать файл-источник и поместить в файл-приемник. Формат файла источника - gZIP.&lt;br /&gt;
&lt;br /&gt;
Execute&lt;br /&gt;
prog_name.exe[params]&lt;br /&gt;
Команда с одним обязательным параметром – Имя файла - программы. Параметры (могут отсутствовать) указываются в той же строке что и имя программы в квадратных скобках. Выполнить файл с ожиданием его завершения.&lt;br /&gt;
&lt;br /&gt;
MoveFile&lt;br /&gt;
src, des&lt;br /&gt;
Команда с двумя обязательными параметрами – Имя файла источника, Имя файла приемника. Переместить файл из источника в приемник. С перезаписью файла-приемника.&lt;br /&gt;
&lt;br /&gt;
Log&lt;br /&gt;
log_string&lt;br /&gt;
Команда с одним обязательным параметром – строка отладочной информации. Выводится в Лог клиента и в файл «дата.scr».&lt;br /&gt;
&lt;br /&gt;
SetDB&lt;br /&gt;
db_path, db_login, db_pass&lt;br /&gt;
Команда с тремя обязательными параметрами – Имя файла базы данных, имя пользователя, пароль пользователя. Установить БД с которой будем работать. По умолчанию используется БД указанная в настройках обмена.&lt;br /&gt;
&lt;br /&gt;
SetClient_Id&lt;br /&gt;
user_id&lt;br /&gt;
Команда с одним обязательным параметром – Идентификатор клиента-обмена. От какого отдела клиент будет работать с БД. По умолчанию значение берется из настроек клиента.&lt;br /&gt;
&lt;br /&gt;
IfFileNotExistThenExit&lt;br /&gt;
Функция с одним обязательным параметром – имя файла, или маска(*.*, ?e?.txt, и т.д.). Проверка на наличие файла, и выход из программы, если его нет.&lt;br /&gt;
&lt;br /&gt;
IfFileNotExistThenGoto&lt;br /&gt;
Функция с одним обязательным параметром – метка. ВНИМАНИЕ метка указывается БЕЗ ‘:’, а сама метка с ‘:’. ( IfFileNotExistThenGoto end )&lt;br /&gt;
&lt;br /&gt;
GotoBegin&lt;br /&gt;
Функция без параметров. Перейти на начало скрипта (загрузить файл скрипта снова). Для организации циклических обработок.&lt;br /&gt;
&lt;br /&gt;
EatItAll&lt;br /&gt;
FileToXml FileName, XMLTemplate, objName, DSFileName&lt;br /&gt;
Команда с четырьмя обязательными параметрами – Путь к текстовым файлам, XML-шаблон для преобразования текстового файла в датасет, Имя объекта, Имя файла – датасета в который сохранится результат. Преобразование формата файлов из текстового в XML. Т.е. все найденные файлы *.txt преобразуются в cds.&lt;br /&gt;
&lt;br /&gt;
ClearAll&lt;br /&gt;
filePath\*.extention&lt;br /&gt;
Функция с одним обязательным параметром - Путь к файлам с маской на конце. Пример: c:\tmp\*.txt. Удаление всех файлов по маске.&lt;br /&gt;
&lt;br /&gt;
CopyFile&lt;br /&gt;
src, des&lt;br /&gt;
Команда с двумя обязательными параметрами – Имя файла источника, Имя файла приемника. Копировать файл из источника в приемник, с перезаписью файла приемника.&lt;br /&gt;
&lt;br /&gt;
GotoLine&lt;br /&gt;
label&lt;br /&gt;
Функция с одни  параметром - метка. Переход на метку. В тексте метка обозначается как имя+’:’. Т.е. команда gotoline ok - это переход  на метку в тексте “ok:”.&lt;br /&gt;
&lt;br /&gt;
IIF&lt;br /&gt;
Dataset, Expresion, gotoline xxx&lt;br /&gt;
Функция с тремя обязательными параметрами- датасет на которым вычисляется выражение, выражение, переход на метку (команда и имя метки пишется в одной строке!). Условный оператор, значение вычисляется «на датасете» - т.е. возможно использовать поля из датасета при вычислении. В случае истинности выражения происходит переход на метку, иначе продолжается выполнение скрипта.&lt;br /&gt;
&lt;br /&gt;
Include&lt;br /&gt;
&amp;lt;Another_Script_file&amp;gt;&lt;br /&gt;
Функция с одним обязательным параметром – путь к файлу - скрипту в скобках “&amp;lt;...&amp;gt;”. По этой команде автоматически запускается на выполнение скрипт, указанный в параметрах функции include. Можно указывать просто имя файла &amp;lt;part1.scr&amp;gt;, тогда путь будет браться от скрипта, из которого вызывается под-скрипт. Выполнение под-скрипта происходит с ожиданием, т.е. пока не выполнится под-скрипт - основной скрипт будет стоять на месте. &lt;br /&gt;
&lt;br /&gt;
DBTask_Add&lt;br /&gt;
DataSet_In, DataSet_Out, Prameters&lt;br /&gt;
Функция с тремя обязательными параметрами – Входной файл с данными, результат и параметры для задания. По этой команде добавляется задание для БД в НОВОМ формате. Формат параметров – текстовый через «;», ключи:&lt;br /&gt;
InFileZiped =True/False; - признак, что входной файл запакован.&lt;br /&gt;
OutFileZiped=True/False; - признак, чтобы выходной файл запаковали.&lt;br /&gt;
DataType=Import/GetChanges/OOBExport/Export_Ack/Export_Errors/&lt;br /&gt;
Analize/GetDocsList/GetRests/GetChanges_Ex/CustomProc; - тип задания:&lt;br /&gt;
Import 		- файл-импорт прием изменений.&lt;br /&gt;
GetChanges	- собрать изменения (как в обмене)&lt;br /&gt;
OOBExport		- собрать изменения «Срочные» (OutOfBound)&lt;br /&gt;
Export_Ack	- принять подтверждения на отправленные изменения.&lt;br /&gt;
Export_Errors	- принять ошибки.(добавить версии на указанные объекты)&lt;br /&gt;
Analize		- получить движение по серии, параметры - входной файл.&lt;br /&gt;
GetDocsList	- получить список документов, параметры - входной файл.&lt;br /&gt;
GetRests		- получить остатки, параметры - входной файл.&lt;br /&gt;
GetChanges_Ex	- расширенный сбор изменений (возможность указать своих схемы обмена, получить версии из файла).&lt;br /&gt;
CustomProc	- позыв «любой» процедуры, параметры - входной файл.&lt;br /&gt;
OtherParams=xxx; - прочие параметры&lt;br /&gt;
FileInType=CDS/TXT/XML/DBF; - формат входного файла, по умолчанию CDS&lt;br /&gt;
FileOutType=CDS/TXT/XML/DBF; – формат выходного файла, по умолчанию CDS&lt;br /&gt;
&lt;br /&gt;
Call_Proc&lt;br /&gt;
DataSet_In, DataSet_Out, Prameters&lt;br /&gt;
Функция с тремя обязательными параметрами – Датасет параметров, Датасет результатов, параметры – строка. Вызов указанной процедуры с параметрами, и сохранение результатов.&lt;br /&gt;
proc_name=xxx; - имя процедуры.&lt;br /&gt;
InFileZiped=True/False; - признак, что входной файл запакован.&lt;br /&gt;
OutFileZiped=True/False; - признак, чтобы выходной файл запаковали.&lt;br /&gt;
OtherParams=xxx; - прочие параметры&lt;br /&gt;
FileInType=CDS/TXT/XML/DBF; - формат входного файла, по умолчанию CDS&lt;br /&gt;
FileOutType=CDS/TXT/XML/DBF; – формат выходного файла, по умолчанию CDS&lt;br /&gt;
&lt;br /&gt;
Dialog_YN&lt;br /&gt;
message, label_if_YES, label_if_NO&lt;br /&gt;
Функция с тремя обязательными параметрами – текст сообщения, метка перехода если в диалоге нажали «YES», метка для перехода, если в диалоге нажали «NO». Функция диалога с вариантами ответа YES-NO. По выбранному ответу осуществляется переход на указанную метку. Если метка не указана, - продолжается последовательное выполнение скрипта.&lt;br /&gt;
&lt;br /&gt;
Load_DepotSchemes&lt;br /&gt;
depot_scheme_cds_file&lt;br /&gt;
Функция с одним обязательным параметром - имя файла-схем. Используется для установки пользовательских схем обмена, при это схемы обмена, записанные в БД, не учитываются. Используется ПЕРЕД функцией DBTask_Add с заданием GetChanges_Ex, при чем, действие пользовательских схем прекращается после завершения работы задания.&lt;br /&gt;
&lt;br /&gt;
Sleep&lt;br /&gt;
milliseconds&lt;br /&gt;
Функция с одним обязательным параметром - время задержки в Миллисекундах. Используется для организации искусственной задержки при организации циклов.&lt;br /&gt;
&lt;br /&gt;
== Приложение 4. Пример файла - скрипта==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; прием документов из текстового файла &lt;br /&gt;
;устанавливаем каталоги&lt;br /&gt;
#XMLPath=D:\gbExchange\Client\XML\Akrihin&lt;br /&gt;
#DATAPath=D:\gbExchange\Client\CurSession&lt;br /&gt;
#WORKPath=D:\gbExchange\Client\Work&lt;br /&gt;
#ERRORPath=D:\gbExchange\Client\Error&lt;br /&gt;
&lt;br /&gt;
Log&lt;br /&gt;
Начали!&lt;br /&gt;
;принимаем документы&lt;br /&gt;
FileToDs&lt;br /&gt;
#DATAPath\DOCUMENT.txt&lt;br /&gt;
#XMLPath\txtDocs_Temp.xml&lt;br /&gt;
doc&lt;br /&gt;
#WORKPath\import.cds&lt;br /&gt;
&lt;br /&gt;
setdb&lt;br /&gt;
f:\bases\test_db.gdb&lt;br /&gt;
&lt;br /&gt;
DBTask_Add&lt;br /&gt;
#DATAPath\import.cds&lt;br /&gt;
#DATAPath\import_ack.cds&lt;br /&gt;
InFileZiped=False;OutFileZiped=False;DataType=Import;OtherParams=xxx;FileInType=CDS;FileOutType=CDS&lt;br /&gt;
&lt;br /&gt;
WaitForDB&lt;br /&gt;
&lt;br /&gt;
MoveFile&lt;br /&gt;
#WORKPath\errors.cds&lt;br /&gt;
#WORKPath\errors_doc.cds&lt;br /&gt;
Exit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Приложение 5. «Обменская» структура файла CDS ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Для просмотра пакетов используется программа PSQL.exe.&lt;br /&gt;
&lt;br /&gt;
[ObjType]		[Data]			[Deleted]&lt;br /&gt;
&lt;br /&gt;
где &lt;br /&gt;
ObjType 	- целое число - тип объекта ГБ. Полный список объектов и их коды см. в Приложении 4.&lt;br /&gt;
Data 	- Субсет, структуры, соответствующей типу структуры объекта ГБ.&lt;br /&gt;
Deleted	- Субсет, структуры: &lt;br /&gt;
		Id 		Ид удаляемого объекта &lt;br /&gt;
		AuxId		Доп. ид, для удаляемого объекта, при удалении цен, курсов.&lt;br /&gt;
&lt;br /&gt;
Источником для получения структуры объекта (обязательных полей) служат хранимые процедуры соответствующего типа, например для документов - documents_put, для партнеров - partners_put, и т.д.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Пакет обмена&lt;br /&gt;
 &lt;br /&gt;
Субсет с документами&lt;br /&gt;
 &lt;br /&gt;
Субсет с удаляемыми объектами&lt;br /&gt;
 &lt;br /&gt;
Приложение 6&lt;br /&gt;
Типы объектов:&lt;br /&gt;
&lt;br /&gt;
0		Partners		Партнеры&lt;br /&gt;
1		Articuls		Товары&lt;br /&gt;
2		Currencies		Валюты (наименования)&lt;br /&gt;
3		Packs			Упаковки&lt;br /&gt;
4		Regions		Регионы&lt;br /&gt;
5		System			Системный объект – по обмену не ходит&lt;br /&gt;
6		Taxes			Налоги&lt;br /&gt;
7		DocTypes		Тип документа&lt;br /&gt;
8		PriceListNames	Прайс-листы - названия&lt;br /&gt;
9(1000)	PriceItems		Прайс листы - цены&lt;br /&gt;
10		OpTypes		Типы операций&lt;br /&gt;
11		Docs			Документы&lt;br /&gt;
12		Security		Права доступа&lt;br /&gt;
13		Accounts		Счета&lt;br /&gt;
14		Reports		Отчеты&lt;br /&gt;
15		Assets			Баланс&lt;br /&gt;
16		Goodies		Товарные строки&lt;br /&gt;
17		Certificates		Сертификаты&lt;br /&gt;
18		CertTypes		Типы сертификатов&lt;br /&gt;
19		DocDelta		Изменения документов – по обмену не ходит&lt;br /&gt;
20		ExtraOrders		Заказы из Internet – по обмену не ходит&lt;br /&gt;
21		Contracts		Договора&lt;br /&gt;
22		ContractTypes		Тип договоров&lt;br /&gt;
23		Unassigned		Резерв – по обмену не ходит&lt;br /&gt;
253		FlagDefs		Описание флагов&lt;br /&gt;
254		Works			Работы&lt;br /&gt;
255		Classes		Классы&lt;br /&gt;
&lt;br /&gt;
1000		Prices			Цены&lt;br /&gt;
1001		Course			Курсы&lt;br /&gt;
1002		Heap's			Поля «дополнительно»&lt;br /&gt;
1003		Deleted DocLinks	Подтверждения об удаленных связях у документа&lt;br /&gt;
1004 		Rests			Остатки по складу&lt;br /&gt;
1005		DeletedPartners	Удаленные партнеры из Работ&lt;br /&gt;
1006		Maps			Соотвествия объектов&lt;br /&gt;
1007		PrintForms		Печатные формы &lt;br /&gt;
1008		UserMessages		Сообщения пользователей&lt;br /&gt;
1009		Holidays		Выходные&lt;br /&gt;
1010		Invent			Инвентаризация&lt;br /&gt;
1011		DynamicPrices	Динамические цены&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA_%D0%93%D0%91&amp;diff=3054</id>
		<title>Отладчик ГБ</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA_%D0%93%D0%91&amp;diff=3054"/>
				<updated>2016-05-31T09:10:32Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:ГБ изнутри]]&lt;br /&gt;
Отладчик дает возможность тестировать и отлаживать скрипты в ГБ.&lt;br /&gt;
доступен он для администратора, включается в системном меню главной формы (при нажатии правой кнопки мыши на иконке с флагом в левом верхнем углу). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Otl.PNG|Запуск отладчика]]&lt;br /&gt;
&lt;br /&gt;
После включения отладчика выполнение скриптов прерывается на точках останова. Точки останова задаются в скриптах кликом мыши на сером поле &lt;br /&gt;
слева от текста программы.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Otl2.PNG|550px|Задание точек останова]]&lt;br /&gt;
&lt;br /&gt;
Точки останова сохраняются в форму, поэтому по окончании отладки их следует убрать.&lt;br /&gt;
&lt;br /&gt;
В появившемся при остановке скрипта окне отладчика возможно пошаговое выполнение скрипта, а также просмотр значений переменных и выражений.&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA_%D0%93%D0%91&amp;diff=3053</id>
		<title>Отладчик ГБ</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA_%D0%93%D0%91&amp;diff=3053"/>
				<updated>2016-05-31T09:09:45Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:ГБ изнутри]]&lt;br /&gt;
Отладчик дает возможность тестировать и отлаживать скрипты в ГБ.&lt;br /&gt;
доступен он для администратора, включается в системном меню главной формы (при нажатии правой кнопки мыши на иконке с флагом в левом верхнем углу). &lt;br /&gt;
&lt;br /&gt;
[[Файл:Otl.PNG|Запуск отладчика]]&lt;br /&gt;
&lt;br /&gt;
После включения отладчика выполнение скриптов прерывается на точках останова. Точки останова задаются в скриптах кликом мыши на сером поле &lt;br /&gt;
слева от текста программы.&lt;br /&gt;
[[Файл:Otl2.PNG|550px|Задание точек останова]]&lt;br /&gt;
&lt;br /&gt;
Точки останова сохраняются в форму, поэтому по окончании отладки их следует убрать.&lt;br /&gt;
&lt;br /&gt;
В появившемся при остановке скрипта окне отладчика возможно пошаговое выполнение скрипта, а также просмотр значений переменных и выражений.&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA_%D0%93%D0%91&amp;diff=3052</id>
		<title>Отладчик ГБ</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA_%D0%93%D0%91&amp;diff=3052"/>
				<updated>2016-05-31T09:05:03Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:ГБ изнутри]]&lt;br /&gt;
Отладчик дает возможность тестировать и отлаживать скрипты в ГБ.&lt;br /&gt;
доступен он для администратора, включается в системном меню главной формы (при нажатии правой кнопки мыши на иконке с флагом в левом верхнем углу). &lt;br /&gt;
[[Файл:Otl.png]]&lt;br /&gt;
&lt;br /&gt;
После включения отладчика выполнение скриптов прерывается на точках останова. Точки останова задаются в скриптах кликом мыши на сером поле &lt;br /&gt;
слева от текста программы.&lt;br /&gt;
[[Файл:Otl1.png]]&lt;br /&gt;
&lt;br /&gt;
Точки останова сохраняются в форму, поэтому по окончании отладки их следует убрать.&lt;br /&gt;
&lt;br /&gt;
В появившемся при остановке скрипта окне отладчика возможно пошаговое выполнение скрипта, а также просмотр значений переменных и выражений.&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA_%D0%93%D0%91&amp;diff=3051</id>
		<title>Отладчик ГБ</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9E%D1%82%D0%BB%D0%B0%D0%B4%D1%87%D0%B8%D0%BA_%D0%93%D0%91&amp;diff=3051"/>
				<updated>2016-05-31T09:01:02Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:ГБ изнутри]]&lt;br /&gt;
Отладчик дает возможность тестировать и отлаживать скрипты в ГБ.&lt;br /&gt;
доступен он для администратора, включается в системном меню главной формы (при нажатии правой кнопки мыши на иконке с флагом в левом верхнем углу). &lt;br /&gt;
[[Файл:Otl.png|Запуск отладчика]]&lt;br /&gt;
&lt;br /&gt;
После включения отладчика выполнение скриптов прерывается на точках останова. Точки останова задаются в скриптах кликом мыши на сером поле &lt;br /&gt;
слева от текста программы.&lt;br /&gt;
[[Файл:Otl1.png|Точки останова в отладчике]]&lt;br /&gt;
&lt;br /&gt;
Точки останова сохраняются в форму, поэтому по окончании отладки их следует убрать.&lt;br /&gt;
&lt;br /&gt;
В появившемся при остановке скрипта окне отладчика возможно пошаговое выполнение скрипта, а также просмотр значений переменных и выражений.&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Otl2.PNG&amp;diff=3050</id>
		<title>Файл:Otl2.PNG</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Otl2.PNG&amp;diff=3050"/>
				<updated>2016-05-31T08:56:04Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: Точки останова в отладчике&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Точки останова в отладчике&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Otl.PNG&amp;diff=3049</id>
		<title>Файл:Otl.PNG</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Otl.PNG&amp;diff=3049"/>
				<updated>2016-05-31T08:49:52Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=GROUPBY&amp;diff=2386</id>
		<title>GROUPBY</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=GROUPBY&amp;diff=2386"/>
				<updated>2012-09-03T08:24:24Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: Новая страница: «{{Функция ГБ |Название=GROUPBY |Описание=Позволяет группировать датасет по ключевым полям, сум…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=GROUPBY&lt;br /&gt;
|Описание=Позволяет группировать датасет по ключевым полям, суммируя при этом значения полей, которые не участвовали в группировке.&lt;br /&gt;
|Синтаксис=GROUPBY ('''Имя датасета''','''Поля для группировки''','''Поля для суммирования''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Имя датасета&lt;br /&gt;
 |Пояснение=строка, имя датасета.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Поля для группировки&lt;br /&gt;
 |Пояснение=Строка, список ключевых полей для группировки через &amp;quot;;&amp;quot;.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Поля для суммирования&lt;br /&gt;
 |Пояснение=Строка, список полей для суммирования через &amp;quot;;&amp;quot;.&lt;br /&gt;
}}&lt;br /&gt;
|Тип результата=нет.&lt;br /&gt;
|Пример=GROUPBY('foDS','Articul','Quantity')&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9E%D1%82%D1%87%D0%B5%D1%82&amp;diff=1993</id>
		<title>Отчет</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9E%D1%82%D1%87%D0%B5%D1%82&amp;diff=1993"/>
				<updated>2011-06-06T10:36:04Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Интерфейс ГБ]]&lt;br /&gt;
Отчеты представляют собой особый вид форм, предназначенных для просмотра данных определенной структуры, формируемых специально созданными хранимыми процедурами. Можно выделить несколько специальных видов отчетов:&lt;br /&gt;
* Реестр - представляет собой перечень объектов определенного типа (товары, документы, партнеры), каждому из которых сопоставлен некий набор расчетных полей. Из такого отчета можно работать со свойствами объектов, выполнять печать, изменение состояний, можно также настроить создание новых объектов.&lt;br /&gt;
* [[Редактируемый отчет]] - может использоваться для модификации данных непосредственно в отчетной форме.&lt;br /&gt;
&lt;br /&gt;
У каждого отчета имеются две закладки: &amp;quot;Параметры&amp;quot; и &amp;quot;Результаты&amp;quot; (когда параметров мало, а отчет считается быстро, можно отключить закладки).&lt;br /&gt;
&lt;br /&gt;
== Параметры ==&lt;br /&gt;
В параметрах можно [[Выбиралка|выбирать]] значения из справочников, даты и т.д. &lt;br /&gt;
Даты можно задавать как абсолютные, так и относительные - в закладке Шаблон в календаре (например, &amp;quot;с начала текущего года по конец предыдущей недели&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
=== Предустановки параметров ===&lt;br /&gt;
Наборы входных параметров отчета называются входными предустановками.  Предустановку можно сохранить в базу с помощью кнопки &amp;quot;Сохранить&amp;quot;.&lt;br /&gt;
Типы входных предустановок:&lt;br /&gt;
* Личная – видна только пользователю, ее создавшему&lt;br /&gt;
* Общая фиксированная - видна всем, после выбора предустановки нельзя изменить значения параметров.&lt;br /&gt;
* Общая свободная - видна всем, после выбора предустановки можно изменять значения параметров.&lt;br /&gt;
* Отключена – если предустановку не хочется удалять, но хочется сделать невидимой в списке, можно поставить ей этот тип. Для того, чтобы включить предустановку назад, можно воспользоваться закладкой &amp;quot;Предустановки&amp;quot; из свойств команды.&lt;br /&gt;
&lt;br /&gt;
=== Админские параметры ===&lt;br /&gt;
Это параметры, в подписи к которым содержится слово (Admin).&lt;br /&gt;
В случае, если отчет запускает человек с правами администратора, то он может изменить значение параметра. Обычный пользователь это поле не увидит, туда запишется значение по умолчанию из выбранной предустановки. Как правило, в таких отчетах существует обязательно созданная предустановка СТАНДАРТ, которая всегда выбирается по умолчанию.&lt;br /&gt;
&lt;br /&gt;
== Результаты ==&lt;br /&gt;
&lt;br /&gt;
== [[Команды|Привязка к контекстному меню]] ==&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&amp;diff=1992</id>
		<title>Команды</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&amp;diff=1992"/>
				<updated>2011-06-06T10:32:10Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Интерфейс ГБ]]&lt;br /&gt;
'''Контекст''' - можно ввести строку, которая однозначно определяет контекст для появления команды. &lt;br /&gt;
Команда появится только на объектах в таблице, у которых в датасете есть поле GB_Context, и это поле &lt;br /&gt;
имеет заданное значение.&lt;br /&gt;
&lt;br /&gt;
'''Процедура для подсчета нач./кон. сальдо''' - возможность для отчетов, которые считают начальное и конечное сальдо, &lt;br /&gt;
позвать для их расчета стороннюю процедуру, указав в этом поле ее имя. &lt;br /&gt;
&lt;br /&gt;
'''Показывать нули''' - если параметр включен, то в ячейках с нулевыми значениями отображается &amp;quot;0&amp;quot;, если выключен,&lt;br /&gt;
то в ячейках с нулевыми значениями пусто.&lt;br /&gt;
&lt;br /&gt;
'''Детализация''' - возможность написания скрипта, который сработает при нажатии Enter или двойному щелчку мыши &lt;br /&gt;
на строке результатов отчета, (например, вызов другого отчета).&lt;br /&gt;
&lt;br /&gt;
'''Уровень дефолтности''' - одна из команд контекстного меню выделена жирным шрифтом. Эта команда запускается &lt;br /&gt;
по нажатию {{key|Enter}} или двойному щелчку мыши. &lt;br /&gt;
Команда по умолчанию определяется полем &amp;quot;Уровень дефолтности&amp;quot; в свойствах команды - &lt;br /&gt;
выбирается та из команд, у которой  уровень выше. По умолчанию уровень дефолтности для всех команд одинаков&lt;br /&gt;
и равен 0, исключение составляют команды &amp;quot;Свойства&amp;quot; и &amp;quot;Открыть папку&amp;quot;, у которых он равен 1. &lt;br /&gt;
В некоторых базах установлен высокий уровень дефолтности для команд &amp;quot;Движение по товару&amp;quot; и &amp;quot;Баланс по партнеру&amp;quot;, &lt;br /&gt;
чтобы это отключить, нужно просто изменить их дефолтность на 0 по умолчанию. &lt;br /&gt;
&lt;br /&gt;
'''В виде списка''' - возможность для случая, если заполнения параметров отчета не требуется или параметров мало, &lt;br /&gt;
запускать отчет сразу в виде таблицы результатов (например, отчеты, возвращающие списки объектов). Параметры&lt;br /&gt;
отчета в этом варианте отображения находятся в верхней части отчета, а таблица - в нижней.&lt;br /&gt;
&lt;br /&gt;
'''#''' - когда для отчета включено представление &amp;quot;В виде списка&amp;quot;, то по умолчанию таблица результатов отрисована&lt;br /&gt;
без &amp;quot;сетки&amp;quot;. Параметр # позволяет включить сетку для таблицы.&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&amp;diff=1991</id>
		<title>Команды</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&amp;diff=1991"/>
				<updated>2011-06-06T10:30:59Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: Удалено содержимое страницы&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&amp;diff=1990</id>
		<title>Команды</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=%D0%9A%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D1%8B&amp;diff=1990"/>
				<updated>2011-06-06T10:22:07Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: Новая страница: «'''Контекст''' - можно ввести строку, которая однозначно определяет контекст для появления к…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Контекст''' - можно ввести строку, которая однозначно определяет контекст для появления команды. &lt;br /&gt;
Команда появится только на объектах в таблице, у которых в датасете есть поле GB_Context, и это поле &lt;br /&gt;
имеет заданное значение.&lt;br /&gt;
&lt;br /&gt;
'''Процедура для подсчета нач./кон. сальдо''' - возможность для отчетов, которые считают начальное и конечное сальдо, &lt;br /&gt;
позвать для их расчета стороннюю процедуру, указав в этом поле ее имя. &lt;br /&gt;
&lt;br /&gt;
'''Показывать нули''' - если параметр включен, то в ячейках с нулевыми значениями отображается &amp;quot;0&amp;quot;, если выключен,&lt;br /&gt;
то в ячейках с нулевыми значениями пусто.&lt;br /&gt;
&lt;br /&gt;
'''Детализация''' - возможность написания скрипта, который сработает при нажатии Enter или двойному щелчку мыши &lt;br /&gt;
на строке результатов отчета, (например, вызов другого отчета).&lt;br /&gt;
&lt;br /&gt;
'''Уровень дефолтности''' - одна из команд контекстного меню выделена жирным шрифтом. Эта команда запускается &lt;br /&gt;
по нажатию {{key|Enter}} или двойному щелчку мыши. &lt;br /&gt;
Команда по умолчанию определяется полем &amp;quot;Уровень дефолтности&amp;quot; в свойствах команды - &lt;br /&gt;
выбирается та из команд, у которой  уровень выше. По умолчанию уровень дефолтности для всех команд одинаков&lt;br /&gt;
и равен 0, исключение составляют команды &amp;quot;Свойства&amp;quot; и &amp;quot;Открыть папку&amp;quot;, у которых он равен 1. &lt;br /&gt;
В некоторых базах установлен высокий уровень дефолтности для команд &amp;quot;Движение по товару&amp;quot; и &amp;quot;Баланс по партнеру&amp;quot;, &lt;br /&gt;
чтобы это отключить, нужно просто изменить их дефолтность на 0 по умолчанию. &lt;br /&gt;
&lt;br /&gt;
'''В виде списка''' - возможность для случая, если заполнения параметров отчета не требуется или параметров мало, &lt;br /&gt;
запускать отчет сразу в виде таблицы результатов (например, отчеты, возвращающие списки объектов). Параметры&lt;br /&gt;
отчета в этом варианте отображения находятся в верхней части отчета, а таблица - в нижней.&lt;br /&gt;
&lt;br /&gt;
'''#''' - когда для отчета включено представление &amp;quot;В виде списка&amp;quot;, то по умолчанию таблица результатов отрисована&lt;br /&gt;
без &amp;quot;сетки&amp;quot;. Параметр # позволяет включить сетку для таблицы.&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	<entry>
		<id>http://wiki.gbsoft.ru/index.php?title=PROCESSCOMMAND&amp;diff=1882</id>
		<title>PROCESSCOMMAND</title>
		<link rel="alternate" type="text/html" href="http://wiki.gbsoft.ru/index.php?title=PROCESSCOMMAND&amp;diff=1882"/>
				<updated>2010-12-24T06:03:02Z</updated>
		
		<summary type="html">&lt;p&gt;Roxy: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Функция ГБ&lt;br /&gt;
|Название=PROCESSCOMMAND&lt;br /&gt;
|Описание=Функция позволяет выполнить любую команду ГБ - открыть электронную форму, запустить отчет, создать объект, удалить его, сменить состояние, напечатать и т.д.	&lt;br /&gt;
|Синтаксис=PROCESSCOMMAND ('''Тип объекта''','''Строка параметров''','''Команда''') &amp;lt;br/&amp;gt;&lt;br /&gt;
или &amp;lt;br/&amp;gt;&lt;br /&gt;
PROCESSCOMMAND ('CURRENT','''Строка параметров''','''Команда''') &amp;lt;br/&amp;gt;&lt;br /&gt;
или &amp;lt;br/&amp;gt;&lt;br /&gt;
PROCESSCOMMAND ('''тип:коды''','''Строка параметров''','''Команда''')&lt;br /&gt;
|Аргументы=&lt;br /&gt;
{{Аргумент&lt;br /&gt;
 |Название=Тип объекта&lt;br /&gt;
 |Пояснение=Целое число, являющееся кодом типа объекта (см. Объектная модель данных ГБ). Если указано слово 'CURRENT' - берется тип активного в данный момент объекта. Если указано тип:коды, берется множество объектов заданного типа с указанными кодами.&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Строка параметров&lt;br /&gt;
 |Пояснение=Строка, которая содержит через &amp;quot;,&amp;quot; список параметров команды.&lt;br /&gt;
Вот полный список параметров, которые можно передать в объект при создании и открытии существующего через ProcessCommand:&lt;br /&gt;
*То, что работает в любой форме свойств: &lt;br /&gt;
**DuplicateId - ид объекта, копию которого мы хотим создать. &lt;br /&gt;
**DoOnOpen - скрипт, выполняемый сразу после открытия &lt;br /&gt;
**DoOnSave - скрипт, выполняемый непосредственно перед сохранением &lt;br /&gt;
**ActivePage - имя закладки по умолчанию &lt;br /&gt;
**SaveImmediate=Y - сохранить изменения сразу, не показывая форму пользователю&lt;br /&gt;
**SendSaveMessage=1 - ожидать успешного завершения сохранения объекта&lt;br /&gt;
**CloseOnError=1 - при ошибке закрывать форму (иначе форма будет показана пользователю)&lt;br /&gt;
*установка любых полей ПРИ СОЗДАНИИ НОВОГО ОБЪЕКТА (но в документах этого лучше не делать, т.к. там с большинством полей связана специфическая функциональность - используйте параметры, описанные ниже): &lt;br /&gt;
**SET:FIeld= &lt;br /&gt;
**SET:Heap.Field= &lt;br /&gt;
* в документах основные поля через SET ставить нельзя, надо использовать стандартные параметры: &lt;br /&gt;
**Partner - заполняет соотв. поле &lt;br /&gt;
**Agent - заполняет соотв. поле &lt;br /&gt;
**Kind - заполняет соотв. поле &lt;br /&gt;
**OpDate - заполняет сразу и OperationDate и DocDate &lt;br /&gt;
**NOTE - заполняет поле HeapSet.@Note &lt;br /&gt;
**DOCNUMBER - заполняет соотв. поле &lt;br /&gt;
**WWWORDER - заполняет поле Imported_Id &lt;br /&gt;
**CURRENCY - заполняет поле DocCurrency &lt;br /&gt;
**PRICELIST - заполняет поле HeapSet.@PriceList &lt;br /&gt;
**ActiveLinkPage - открывает документ на закладке &amp;quot;связи&amp;quot;, на подзакладке с заданным номером. &lt;br /&gt;
**Link - список кодов документов, с которыми нужно связать создаваемый &lt;br /&gt;
**LinkSide - направление связи - LinkSide=С означает что новый документ будет записан в связях в поле CreditDoc, иначе - в DebetDoc &lt;br /&gt;
**LinkType - тип связи &lt;br /&gt;
**Update=True - при создании не имеет значения, а при открытии существующего документа означает, что товарные **строки необходимо заполнить заново, а не дописывать к существующим &lt;br /&gt;
**PosOnly=True - означает что из списка товарных строк нужно выбрать только положительные количества &lt;br /&gt;
**NegOnly=True - означает что из списка товарных строк нужно выбрать только отрицательные количества &lt;br /&gt;
**DontCreateEmpty - не создавать пустой документ (без тов. строк) &lt;br /&gt;
**GoodiesDs=имя - имя датасета, который содержит список товарных строк &lt;br /&gt;
**GoodiesDs==выражение - запрос, который вернет нам список товарных строк &lt;br /&gt;
**GoodiesArt &lt;br /&gt;
**GoodiesCert &lt;br /&gt;
**GoodiesQty &lt;br /&gt;
**GoodiesNote &lt;br /&gt;
**GoodiesHeap.XXXX - запись в хиповое поле ХХХХ&lt;br /&gt;
**GoodiesField.AutoSaveXXXX - запись в поле вида AutoSaveCert@Apt &lt;br /&gt;
**GoodiesPrice &lt;br /&gt;
**GoodiesPriceList - выражения, вычисляемые на GoodieDs, заполняют соотв. поля &lt;br /&gt;
**ExpensesDs - имя датасета со списком затрат &lt;br /&gt;
**ExpensesDs.Field &lt;br /&gt;
**ExpensesDs.Heap.Field - выражения, вычисляемые на ExpensesDs, заполняют соотв. поля&lt;br /&gt;
*ДЛЯ ИЗМЕНЕНИЯ ЗНАЧЕНИЙ ПОЛЕЙ В СУЩЕСТВУЮЩЕМ ОБЪЕКТЕ НУЖНО ИСПОЛЬЗОВАТЬ СКРИПТ DoOnOpen&lt;br /&gt;
}}&amp;lt;br/&amp;gt;{{Аргумент&lt;br /&gt;
 |Название=Команда&lt;br /&gt;
 |Пояснение=Строка, описывающая команду. Возможные варианты:&lt;br /&gt;
*&amp;quot;EXPLORE&amp;quot; - открыть справочник. Возможные параметры:&lt;br /&gt;
**Id=X - открыть справочник на объекте с кодом X&lt;br /&gt;
*&amp;quot;PROPERTIES&amp;quot; - открыть свойства объекта. Возможные параметры:&lt;br /&gt;
**Id=X - открыть свойства объекта с кодом X.&lt;br /&gt;
**Id=-1 - создать новый объект, при этом:&lt;br /&gt;
**DuplicateId=Y - создать копию объекта с кодом Y.&lt;br /&gt;
**SubType=Y - создать объект с подтипом Y.&lt;br /&gt;
**ItemType=0 - создать новую папку.&lt;br /&gt;
**ItemType=1 - создать новую запись.&lt;br /&gt;
**Node=Y - создать объект в папке с кодом Y.&lt;br /&gt;
**KeepPack=1 - принудительная простановка типа упаковки (без него, например, при количестве &amp;lt; целой коробки упаковка приводится к минимальной).&lt;br /&gt;
**GoodiesDsMaxLines=100 - ограничение количества товарных строк в документе (в примере ограничение равно ста строкам).&lt;br /&gt;
**CheckPostConds=1 - перед открытием свойств электронной формы создаваемого документа проверить постусловия. Осуществится выполнение только постусловий с вызовом [[Функции ГБ|Exception]]. В случае срабатывания исключения текст ошибки поместится в переменную :LastError.&lt;br /&gt;
**ActivePage=Имя закладки - установить активную закладку.&lt;br /&gt;
**SaveImmediate=Y - сохранить изменения сразу по открытии.&lt;br /&gt;
**DoOnOpen=скрипт - выполнить скрипт после открытия.&lt;br /&gt;
**DoOnSave=скрипт - выполнить скрипт после сохранения.&lt;br /&gt;
**Кроме того, для документов:&lt;br /&gt;
***Имя поля=значение - присвоить данному полю датасета DataSet данное значение.&lt;br /&gt;
*&amp;quot;PRINT&amp;quot; - напечатать объект. Возможные параметры:&lt;br /&gt;
**ReportId=X или CmdParams=X -печатать форму с кодом X (ReportId=X).&lt;br /&gt;
**ShowForm=Y - вывести окно для выбора печатной формы.&lt;br /&gt;
**Target=файл - печатать в файл (для текстовых, Word и Excel форм).&lt;br /&gt;
**Template=файл - шаблон для Word и Excel форм.&lt;br /&gt;
*&amp;quot;SETFLAG&amp;quot; - изменить [[Флаг|состояние]] документа. Возможные параметры:&lt;br /&gt;
**SetState=X -Установить [[флаг]]=X.&lt;br /&gt;
*&amp;quot;IDXXX&amp;quot; - выполнить команду с кодом XXX (см. [[Справочник команд]]).&lt;br /&gt;
**Если XXX - код отчета, то возможны параметры:&lt;br /&gt;
***Param:Поле=Значение - изменить параметр.&lt;br /&gt;
***Immediate=Y - сразу вывести результаты.&lt;br /&gt;
***ParamsSettings=X - код предустановки параметров.&lt;br /&gt;
***GridSettings=X - код предустановки результатов.	&lt;br /&gt;
}}&lt;br /&gt;
|Пример=PROCESSCOMMAND(11,'Id=-1,SubType=17','properties') создать новый заказ&amp;lt;br/&amp;gt;&lt;br /&gt;
PROCESSCOMMAND('CURRENT','CmdParams=1007','print') напечатать выделенные объекты&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Roxy</name></author>	</entry>

	</feed>