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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.10.2009, 23:46   #1  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
А целостность данных?
Почему бы просто не сохранить данные в буфер, переключить компанию и вставить данные.
Примерно так:
X++:
static void copy2company(Args _args)
{
    InventTable     tmpInventTable, fromInventTable, toInventTable;
    ;

    tmpInventTable.setTmp();

    fromInventTable.skipDataMethods(true);
    while select fromInventTable
    {
        tmpInventTable.clear();
        buf2buf(fromInventTable, tmpInventTable);
        tmpInventTable.insert();
    }

    ttsbegin;
    changecompany ("DMO")
    {
        while select tmpInventTable
        {
            toInventTable.clear();
            buf2buf(tmpInventTable, toInventTable);

            if (toInventTable.validateWrite())
                toInventTable.insert();
        }
    }
    ttscommit;
}

Последний раз редактировалось DSPIC; 15.10.2009 в 00:12.
Старый 15.10.2009, 00:26   #2  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
А целостность данных?
Почему бы просто не сохранить данные в буфер, переключить компанию и вставить данные.
А потому что имеется такая ситуация. Была компания, в ней были данные. И вдруг, в какой-то момент - мы осознаем необходимость включения этой компании в виртуальную. changecompany в этом случае работать не будет - т.к. ДО внесения компании в виртуальную - мы просто не перейдем в виртуальную компанию. А после - мы уже не достанем наши старые данные (система будет искать записи с dataareaid равным виртуальной компании).
Переход в другую компанию, которая уже входит в виртуальную - это конечно вариант - но... ее может и не быть, например, мы решили объединить ряд компаний и создать новую виртуальную компанию.
Кстати, обращаю внимание, что нельзя перейти в саму виртуальную компанию. Можно только перейти в компанию, входящую в состав виртуальной.

На самом деле - мы отвлеклись от темы. Я привел пример - не для того, чтобы показать как это работает с виртуальными компаниями, а для того, чтобы показать, что прямое обращение к БД при замене dataAreaId если все делать по-честному - выливается не в одну строчку кода. И даже наоборот - мой вариант по сути применим только тогда, когда штатно (по аналогии как Вы показали) невозможно этого добиться. Хотя с т.з. функциональности оба примера работают одинаково - никакой целостности данных нигде не нарушается если нет связок по RecID (а если есть, то нарушается и там и там)

Кстати, Ваш код работать не будет. После changecompany временная таблица тоже ведь сменит компанию. Или я не понял хитрого хода конем?
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 15.10.2009 в 00:35.
Старый 15.10.2009, 06:48   #3  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
.....
Кстати, Ваш код работать не будет. После changecompany временная таблица тоже ведь сменит компанию. Или я не понял хитрого хода конем?
Цель исключить общие таблицы из табличной колекции виртуальной компании и изменить компанию в исключенных таблицах.

Джоб действительно работать не захотел. Сделали напрямую через SQL. Задача решена.

Спасибо.
Старый 15.10.2009, 09:10   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,342 / 3563 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Alexx7 Посмотреть сообщение
Цель исключить общие таблицы из табличной колекции виртуальной компании и изменить компанию в исключенных таблицах.
Во... именно для этих целей и предназначался мой джоб. Только в обратную сторону.
Так что если в будущем будет потребность повторить "на бис" процедуру - можно им будет воспользоваться
__________________
Возможно сделать все. Вопрос времени
Старый 15.10.2009, 10:19   #5  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Во... именно для этих целей и предназначался мой джоб. Только в обратную сторону.
Так что если в будущем будет потребность повторить "на бис" процедуру - можно им будет воспользоваться
За джобик отдельное спасибо. (добавлю к репутации через 3 суток).

Через SQL, говорят, могут возникнуть трудности в дальнейшем.

Последний раз редактировалось Alexx7; 15.10.2009 в 10:21. Причина: Про SQL
Старый 15.10.2009, 12:07   #6  
Alexx7 is offline
Alexx7
Сам.AX
Аватар для Alexx7
Самостоятельные клиенты AX
1C
 
305 / 28 (1) +++
Регистрация: 22.07.2009
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Во... именно для этих целей и предназначался мой джоб. Только в обратную сторону.
Так что если в будущем будет потребность повторить "на бис" процедуру - можно им будет воспользоваться
Жесть! Поробовал на талице EmplTable. В параметрах задал "компания с данными" - vrt, а виртуальную компанию cmp. Ушел в ошибку. Вот стек:

Сообщение (14:06:50)
Сбой запроса на разрешение типа "SqlStatementExecutePermission".
(S)\Classes\SqlStatementExecutePermission\demand
(S)\Classes\Statement\executeQuery
(C)\Classes\ReplaceDataAreaId\updateTableRows - line 31
(C)\Classes\ReplaceDataAreaId\updateTables - line 28
(C)\Classes\ReplaceDataAreaId\run - line 19
(C)\Classes\ReplaceDataAreaId\main - line 7


Чего то скорее всего не хватает.
Теги
update_recordset, законченный пример, как правильно, полезное, системые поля

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
непонятности с полями modifiedTime, modifiedDate др. PavelSR DAX: Программирование 4 17.03.2007 10:28
Фильтр в форме по Looup с двумя таблицами LexusS DAX: Программирование 3 21.07.2006 10:42
JOIN программно на форме не работает rohlenko DAX: Программирование 2 31.03.2005 15:41
CRM ABC, SWOT анализ Как это работает и работает ли вообще. ShadowFromXZone DAX: Функционал 16 02.03.2004 18:09
связь между таблицами Valia DAX: Программирование 2 09.10.2003 18:36

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

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

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