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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.07.2007, 13:24   #1  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Виртуальное предприятие ...
Здраствуйте ,

Надо дело сделать виртуальное предприятие , с которым будет работать главное предприятие и филиал . Дело в том , как из главной предприятии переносит данные в ето новое виртуальное . Сначала думали , что будет достаточно поменять dataareaid значение ( внутри Oracle , например ) . Но сколько я знаю , RecId значения есть для предприятия , то выходит , что после некоторого срока времени , будет дублироваться recId ... . Как можно сделать попроще такое перемешение данных ?

Спасибо заранее ! С уважением , Римантас
Старый 25.07.2007, 13:56   #2  
ppson is offline
ppson
Участник
Аватар для ppson
Ex AND Project
1C
 
2,102 / 114 (8) +++++
Регистрация: 25.06.2002
Адрес: SPb, Msk
выгрузить таблицы
сделать виртуальную компанию
загрузить таблицы
no piles
__________________
Старый 25.07.2007, 14:49   #3  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от ppson Посмотреть сообщение
выгрузить таблицы
сделать виртуальную компанию
загрузить таблицы
no piles
Спасибо за совет . Такой подход мы знаем . Но дело в том , что у нас на верху класической Ахапты крутиться задачя Circon , и там таблиц много ... Неужели нету других способов ?
Как и не в тему - а что бывает когда совпадает RecId ? Есть какой нибудь цикл обнаружить уникальный RecId в табличке ? Ето по поводу того , что если поменять dataareaid значения . Такой способ - самый быстрый ...
Старый 25.07.2007, 15:03   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Другой подход - вручную писать синхронизацию таблиц разных компаний.
Но это долго, да и работает не шибко быстро.
Старый 25.07.2007, 15:09   #5  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Не очень понятно из вопроса о периодичности этой операции. Она одноразовая или периодическая? Если одноразовая (например, виртуальной компании не было, теперь открыли филиал и решили сделать некоторые данные общими через виртуальную компанию), то решение не очень сложное. Код привести не могу, но общий алгоритм могу описать.
Старый 25.07.2007, 15:14   #6  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Не очень понятно из вопроса о периодичности этой операции. Она одноразовая или периодическая? Если одноразовая (например, виртуальной компании не было, теперь открыли филиал и решили сделать некоторые данные общими через виртуальную компанию), то решение не очень сложное. Код привести не могу, но общий алгоритм могу описать.
Операция однообразовая - как пальцем в око - открыли филял и нужно работать с некоторыми общими таблицами . Буду благодарен за советы !
Старый 25.07.2007, 15:43   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Тогда наш подход, который использовали в момент выделения филиалов в компании, а так же используем в случае, если какую-то таблицу с существующими данными нужно добавить с виртуальную компанию (правда без объединения при этом данных из разных компаний):
Добавляем таблицы в табличные коллекции. Настраиваем виртуальные компании (если уже все настроено, то лучше переопределить все заново, иначе бывают поблемы с установкой поля 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  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от 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 не ушли в отрицательную область.
Спасиво Меланхольный Ворон за совет . Оказалось нам оставилось только поменять максимальные значения в SytemSequences табличке для виртуальной пред. Когда прочитали твои советы , тогда и поняли ...

Спасибо !
Старый 26.07.2007, 09:23   #9  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Rimantas Посмотреть сообщение
Оказалось нам оставилось только поменять максимальные значения в SytemSequences табличке для виртуальной пред.
Не совсем все. Еще желательно дефрагментировать RecId.
Правда на большой базе стандартная процедура может занять непозволительно долгое время, поэтому лучше написать свою в виде хранимой процедуры (с производством некоторых шаманских действий с индексами).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
best4best: Как автоматизировать предприятие Blog bot DAX Blogs 4 28.03.2009 13:43
Экспорт документов в 1С Предприятие agri DAX: Функционал 14 01.07.2004 17:17

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

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

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