![]() |
#3 |
NavAx
|
В прошлом году мы разрабатывали систему синхронизации нескольких баз данных
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) | 18 | |||
Как сформировать RecId | 18 | |||
поля, содержащие RecId | 15 | |||
aEremenko: Дефрагментация RecID | 2 | |||
Два RecId у одной записи таблицы | 33 |
|