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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.07.2007, 15:03   #1  
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   #2  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Не очень понятно из вопроса о периодичности этой операции. Она одноразовая или периодическая? Если одноразовая (например, виртуальной компании не было, теперь открыли филиал и решили сделать некоторые данные общими через виртуальную компанию), то решение не очень сложное. Код привести не могу, но общий алгоритм могу описать.
Старый 25.07.2007, 15:14   #3  
Rimantas is offline
Rimantas
Участник
 
304 / 16 (1) ++
Регистрация: 30.04.2004
Адрес: Utena , Lithuania
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Не очень понятно из вопроса о периодичности этой операции. Она одноразовая или периодическая? Если одноразовая (например, виртуальной компании не было, теперь открыли филиал и решили сделать некоторые данные общими через виртуальную компанию), то решение не очень сложное. Код привести не могу, но общий алгоритм могу описать.
Операция однообразовая - как пальцем в око - открыли филял и нужно работать с некоторыми общими таблицами . Буду благодарен за советы !
Старый 25.07.2007, 15:43   #4  
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   #5  
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   #6  
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, время: 09:44.