AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 10.06.2002, 15:12   #3  
skof is offline
skof
NavAx
NavAx Club
 
100 / 12 (1) ++
Регистрация: 09.01.2002
Адрес: РБ, Минск
В прошлом году мы разрабатывали систему синхронизации нескольких баз данных
Axapta, так что бы сама система "не видела" синхронизации, и решали эту проблему.
Вот выдержка из нашей документации по системе синхронизации:

В поле DataAreaId хранится идентификатор компании, к которой принадлежит данная запись в нашем случае это: «Hld», «Msk», «Pit» и «Tvr». В поле RecId хранится порядковый номер записи, который уникален во всех записях, принадлежащих одной компании во всех таблицах. Таким образом, сочетание этих полей дает уникальный ключ, который мы и будем применять.
Здесь необходимо знать о правилах присвоения значения поля RecID. Axatpa не пользуется никакими сервисами базы даных для вычисления нового номера в этом поле. Вместо этого она ведет таблицу SystemSequences следующей структуры:

Имя столбца | Тип | Значение по умолч. | NULL | Описание столбца.
ID | NUMBER(10) | 0 | NOT
NEXTVAL | NUMBER(10) | 0 | NOT | Начало следующего пула номеров
MINVAL | NUMBER(10) | 0 | NOT | Минимальный номер
MAXVAL | NUMBER(10) | 0 | NOT | Максимальный номер
CYCLE | NUMBER(10) | 0 | NOT | Номера по кругу
NAME | VARCHAR2(20) | ' ' | NOT | Наименование последовательности
TABID | NUMBER(10) | 0 | NOT
DATAAREAID | VARCHAR2(3) | 'dat' | NOT | Идентификатор компании
RECID | NUMBER(10) | | NOT | Номер записи

Работает AXAPTA с этой таблицей следующим образом:
1. При вставке первой записи в новую компанию система AXAPTA добавляет в таблицу SystemSequences запись. В поле DATAAREAID устанавливается значение равное идентификатору компании, а в поля MINVAL и NEXVAL записывается единица.
2. Сразу после этого система AXAPTA берет лот номеров (лот в данном случае это - несколько подряд идущих номеров, AXAPTA берет 25). И записывает в поле NEXTVAL следующий свободный номер – 26.
3. Заносит в таблицу, с которой все началось запись с RECID равным 1 и DATAAREAID равным идентификатору компании.
4. После того как номера в лоте заканчиваются, система AXAPTA снова читает таблицу SystemSequences, берет оттуда NEXTVAL как первый номер следующего лота. А в таблицу SystemSequences записывает значение NEXTVAL+25.
Таким образом AXAPTA решает две проблемы – каждый пользователь ведет свой лот номеров RECID и значения этого поля не пересекаются, второе – пользователь (вернее его приложение) обращается к таблице SystemSequences один раз на 25 операций вставки и таким образом не возникает ожидания из-за обращения всех к этой таблице.


Надеюсь понятно...
К сожалению таблица рассыпалась, но заинтересованные лица я думаю восстановят...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
if (record) vs if (record.RecId) kashperuk DAX: Программирование 18 27.11.2008 18:53
Как сформировать RecId Arahnid DAX: Программирование 18 14.07.2008 15:02
поля, содержащие RecId somebody DAX: Программирование 15 16.05.2008 17:50
aEremenko: Дефрагментация RecID Blog bot DAX Blogs 2 06.03.2007 22:25
Два RecId у одной записи таблицы sparur DAX: Программирование 33 18.12.2006 15:56

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:18.