25.07.2007, 13:24 | #1 |
Участник
|
Виртуальное предприятие ...
Здраствуйте ,
Надо дело сделать виртуальное предприятие , с которым будет работать главное предприятие и филиал . Дело в том , как из главной предприятии переносит данные в ето новое виртуальное . Сначала думали , что будет достаточно поменять dataareaid значение ( внутри Oracle , например ) . Но сколько я знаю , RecId значения есть для предприятия , то выходит , что после некоторого срока времени , будет дублироваться recId ... . Как можно сделать попроще такое перемешение данных ? Спасибо заранее ! С уважением , Римантас |
|
25.07.2007, 13:56 | #2 |
Участник
|
выгрузить таблицы
сделать виртуальную компанию загрузить таблицы no piles
__________________
|
|
25.07.2007, 14:49 | #3 |
Участник
|
Цитата:
Как и не в тему - а что бывает когда совпадает RecId ? Есть какой нибудь цикл обнаружить уникальный RecId в табличке ? Ето по поводу того , что если поменять dataareaid значения . Такой способ - самый быстрый ... |
|
25.07.2007, 15:03 | #4 |
Участник
|
Другой подход - вручную писать синхронизацию таблиц разных компаний.
Но это долго, да и работает не шибко быстро. |
|
25.07.2007, 15:09 | #5 |
Участник
|
Не очень понятно из вопроса о периодичности этой операции. Она одноразовая или периодическая? Если одноразовая (например, виртуальной компании не было, теперь открыли филиал и решили сделать некоторые данные общими через виртуальную компанию), то решение не очень сложное. Код привести не могу, но общий алгоритм могу описать.
|
|
25.07.2007, 15:14 | #6 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
Не очень понятно из вопроса о периодичности этой операции. Она одноразовая или периодическая? Если одноразовая (например, виртуальной компании не было, теперь открыли филиал и решили сделать некоторые данные общими через виртуальную компанию), то решение не очень сложное. Код привести не могу, но общий алгоритм могу описать.
|
|
25.07.2007, 15:43 | #7 |
Участник
|
Тогда наш подход, который использовали в момент выделения филиалов в компании, а так же используем в случае, если какую-то таблицу с существующими данными нужно добавить с виртуальную компанию (правда без объединения при этом данных из разных компаний):
Добавляем таблицы в табличные коллекции. Настраиваем виртуальные компании (если уже все настроено, то лучше переопределить все заново, иначе бывают поблемы с установкой поля dataareaid для новых записей). Затем выполняем джобик установки следующего значения для RecId и меняем значение поля dataareaid. Следующее значение ищем так: 1. Перебираем все коллекции нужной виртуальной компании (из таблицы TableCollectionList с фильтром по полю virtualDataArea); 2. Внутри цикла перебираем все таблицы, принадлежащие коллекции, типа в таком цикле: collection = new SysDictTableCollection(tableCollectionList.tableCollection); tableId = tablename2id(collection.nextTable()); while (tableID) { dictTable = new SysDictTable(tableID); if (isConfigurationkeyEnabled(dictTable.configurationKeyId())) { ... тут получение максимального значения RecId прямым запросом } tableId = tablename2id(collection.nextTable()); } 3. Максимальное значение RecId для таблицы получаем прямым запросом (объект Statement), отфильтровав по условию dataareaid равное нужной виртуальной или текущей компании (что-то вроде dataareaid = 'SPR' OR dataareaid = 'WRK'). После этого опять же прямым запросом меняем dataareaid по всем записям, у которых оно равно текущей компании. 4. Если оно уже больше найденного ранее максимального, то его считаем максимальным. После того, как отработал цикл по таблице TableCollectionList мы имеем максимальный RecId, пишем его (увеличенное на 1) опять же прямым запросом в таблицу SystemSequences в поле nextVal в запись, в которой dataAreaID равно нашей виртуальной компании и поле name равно seqno ---------- Следует иметь ввиду, что работает это только в том случае, если RecId не ушли в отрицательную область. |
|
25.07.2007, 16:18 | #8 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
Тогда наш подход, который использовали в момент выделения филиалов в компании, а так же используем в случае, если какую-то таблицу с существующими данными нужно добавить с виртуальную компанию (правда без объединения при этом данных из разных компаний):
Добавляем таблицы в табличные коллекции. Настраиваем виртуальные компании (если уже все настроено, то лучше переопределить все заново, иначе бывают поблемы с установкой поля dataareaid для новых записей). Затем выполняем джобик установки следующего значения для RecId и меняем значение поля dataareaid. Следующее значение ищем так: 1. Перебираем все коллекции нужной виртуальной компании (из таблицы TableCollectionList с фильтром по полю virtualDataArea); 2. Внутри цикла перебираем все таблицы, принадлежащие коллекции, типа в таком цикле: collection = new SysDictTableCollection(tableCollectionList.tableCollection); tableId = tablename2id(collection.nextTable()); while (tableID) { dictTable = new SysDictTable(tableID); if (isConfigurationkeyEnabled(dictTable.configurationKeyId())) { ... тут получение максимального значения RecId прямым запросом } tableId = tablename2id(collection.nextTable()); } 3. Максимальное значение RecId для таблицы получаем прямым запросом (объект Statement), отфильтровав по условию dataareaid равное нужной виртуальной или текущей компании (что-то вроде dataareaid = 'SPR' OR dataareaid = 'WRK'). После этого опять же прямым запросом меняем dataareaid по всем записям, у которых оно равно текущей компании. 4. Если оно уже больше найденного ранее максимального, то его считаем максимальным. После того, как отработал цикл по таблице TableCollectionList мы имеем максимальный RecId, пишем его (увеличенное на 1) опять же прямым запросом в таблицу SystemSequences в поле nextVal в запись, в которой dataAreaID равно нашей виртуальной компании и поле name равно seqno ---------- Следует иметь ввиду, что работает это только в том случае, если RecId не ушли в отрицательную область. Спасибо ! |
|
26.07.2007, 09:23 | #9 |
Участник
|
Цитата:
Правда на большой базе стандартная процедура может занять непозволительно долгое время, поэтому лучше написать свою в виде хранимой процедуры (с производством некоторых шаманских действий с индексами). |
|
|
Похожие темы | ||||
Тема | Ответов | |||
best4best: Как автоматизировать предприятие | 4 | |||
Экспорт документов в 1С Предприятие | 14 |
|