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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.07.2007, 17:04   #1  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Строки временной таблицы с разными DataAreaId
Добрый день!
Хочу во временную таблицу запихать строки из разных компаний.
Например:
X++:
static void Job27(Args _args)
{
    CustTrans   custTrans;
    custTrans   tmpcustTrans;
    ;
    tmpcustTrans.setTmp();
    custTrans.company("S11");
    select custTrans;
    tmpcustTrans.company("S11");
    tmpcustTrans.data(custTrans);
    tmpcustTrans.insert();
    while select tmpcustTrans
    {
        info(tmpcustTrans.dataAreaId);
    }
    
    custTrans = null;
    custTrans.company("S10");
    select custTrans;
    tmpcustTrans.company("S10");
    tmpcustTrans.data(custTrans);
    tmpcustTrans.insert();
    while select tmpcustTrans
    {
        info(tmpcustTrans.dataAreaId);
    }
}
В результате получаю:
S11
S10
S10

Т.е. в итоге во временной таблице в поле dataAreaId стоит S10, Но я же записыват туда запись с компанией S11. Почему получилось так, что компания в записях изменилась?
Старый 23.07.2007, 17:10   #2  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Потомучто Вы инициализировали таблицу в одной компании, и данные в нее будут записываться в разрезе данной компании. Да и поле DataAreaId низя менять вроде как ни руками ни программно... А вообще а дебагере хорошовидно что как куда вставляется. ИМХО луче использовать changeCompany для игры с компаниями...

Последний раз редактировалось Sada; 23.07.2007 в 17:13.
Старый 23.07.2007, 17:12   #3  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
а что понимается под инициализацией таблицы?
Старый 23.07.2007, 17:18   #4  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Цитата:
Сообщение от Sada Посмотреть сообщение
Потомучто Вы инициализировали таблицу в одной компании, и данные в нее будут записываться в разрезе данной компании. Да и поле DataAreaId низя менять вроде как ни руками ни программно... А вообще а дебагере хорошовидно что как куда вставляется. ИМХО луче использовать changeCompany для игры с компаниями...
В том то и проблема, что вставляются данные с нужной компанией, а при выборке записей из временной таблице я вижу одну(неправильную) компанию.
Старый 23.07.2007, 17:24   #5  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А зачем вам этот код компании?

Данные вставляются верно.
Проверьте, к примеру, выведя другое поле на экран. Получите записи из нескольких компаний. А то, в какой компании они были изначально, имхо, не так важно
X++:
static void Job30(Args _args)
{
    CustTrans   custTrans;
    custTrans   tmpcustTrans;
    ;
    tmpcustTrans.setTmp();
    changecompany('S11')
    {
        custTrans = null;
        select firstonly custTrans;
        buf2buf(custTrans, tmpcustTrans);
        tmpcustTrans.doInsert();
    }
    while select tmpcustTrans
    {
        info(tmpcustTrans.AccountNum);
    }
    

    changecompany('S10')
    {
        custTrans = null;
        select firstonly custTrans;
        buf2buf(custTrans, tmpcustTrans);
        tmpcustTrans.doInsert();
    }

    while select tmpcustTrans
    {
        info(tmpcustTrans.AccountNum);
    }
}
Старый 23.07.2007, 17:29   #6  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Цитата:
Сообщение от kashperuk Посмотреть сообщение
А зачем вам этот код компании?

Данные вставляются верно.
Проверьте, к примеру, выведя другое поле на экран. Получите записи из нескольких компаний. А то, в какой компании они были изначально, имхо, не так важно
Код компании в результирующей временной таблице мне нужен для того чтобы можно было наложить сотрировку по коду компании.(т.е. нужно знать из какой компании вставлена запись)

Я подозреваю, что для этих целей придется заводить отдельное поле во временной(результирующей) таблице.
Быть может есть возможность, всетаки, обойтись без добавления доп. поля?
Старый 23.07.2007, 17:33   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от PavelSR Посмотреть сообщение
...для того чтобы можно было наложить сотрировку по коду компании...

Я подозреваю, что для этих целей придется заводить отдельное поле во временной
Неправильно вы подозреваете.
Вам придется сначала:
1. либо разобраться с витруальными компаниями
2. либо полностью закрыть для себя возможность работать с вирутальными компаниями в будущем.

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

Будьте осторожны с dataareaid. Команда cangecompany("aaa") не всегда приводит к тому, что в данной таблице dataareaid будет равна aaa.
Читайте про виртуальные компании.
__________________
полезное на axForum, github, vk, coub.
Старый 23.07.2007, 17:33   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Да заведите поле и не мучьтеся...
Старый 23.07.2007, 17:36   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от PavelSR Посмотреть сообщение
Я подозреваю, что для этих целей придется заводить отдельное поле во временной(результирующей) таблице.
Быть может есть возможность, всетаки, обойтись без добавления доп. поля?
Возможность, конечно, есть.
Стоит ли ей пользоваться?

X++:
static void Job30(Args _args)
{
    CustTrans   custTrans;
    custTrans   tmpcustTrans;
    ;
    tmpcustTrans.setTmp();
    changecompany('S11')
    {
        custTrans = null;
        select firstonly custTrans;
        buf2buf(custTrans, tmpcustTrans);
        tmpcustTrans.overwriteSystemfields(true);
        tmpcustTrans.(fieldNum(CustTrans, DataAreaId)) = curExt();
        tmpcustTrans.doInsert();
    }
    while select tmpcustTrans
    {
        info(tmpcustTrans.dataareaid);
    }


    changecompany('S10')
    {
        custTrans = null;
        select firstonly custTrans;
        buf2buf(custTrans, tmpcustTrans);
        tmpcustTrans.overwriteSystemfields(true);
        tmpcustTrans.(fieldNum(CustTrans, DataAreaId)) = curExt();
        tmpcustTrans.doInsert();
    }

    while select tmpcustTrans
    {
        info(tmpcustTrans.dataareaid);
    }
}
Старый 23.07.2007, 17:46   #10  
PavelSR is offline
PavelSR
Участник
 
98 / 10 (1) +
Регистрация: 25.05.2006
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Возможность, конечно, есть.
Стоит ли ей пользоваться?
Иван, проблема не в том чтобы записть нужную компанию во врем. табл. а в том что при выборке данных получаются некорректные данные.
Ваш, джобик результата не изменил.
Старый 23.07.2007, 17:50   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от PavelSR Посмотреть сообщение
Иван, проблема не в том чтобы записть нужную компанию во врем. табл. а в том что при выборке данных получаются некорректные данные.
Ваш, джобик результата не изменил.
А, понял о чем Вы.
Да, думаю стоит добавить просто поле для этих целей.
Старый 23.07.2007, 18:30   #12  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от PavelSR
...
при выборке данных получаются некорректные данные.
...
Данные то как раз правильные. Это вы что-то не то от Аксапты хотите просто.

Помните в Винни Пухе: "Это неправильные пчелы, и они делают неправильный мед". Так и вы сейчас точно так же говорите.

Поддерживаю вариант с добавлением поля для компании.
__________________
С уважением,
glibs®
Старый 23.07.2007, 19:06   #13  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Можно еще и прямой запрос попробовать
Хотя для этого придется все равно создавать таблицу с полем, так что от поля не уйти

Последний раз редактировалось MikeR; 23.07.2007 в 19:13. Причина: так будет вернее
Старый 23.07.2007, 19:14   #14  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Э.
Прямой запрос к временной таблице?
Это как?
__________________
Axapta v.3.0 sp5 kr2
Старый 23.07.2007, 19:28   #15  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Наверное, создать в TempDb временную таблицу, заполнить ее курсором или запросом, а потом считать. Если речь идет о прямом подключении к MS SQL Server, а не о каком-то другом прямом запросе. Ну и что-то аналогичное можно сделать на Oracle, наверное.
__________________
С уважением,
glibs®
Старый 24.07.2007, 10:09   #16  
MikeR is offline
MikeR
MCT
Аватар для MikeR
MCBMSS
Лучший по профессии 2015
Лучший по профессии 2014
 
1,628 / 627 (24) +++++++
Регистрация: 28.11.2005
Адрес: просто землянин
Цитата:
Прямой запрос к временной таблице?
Это как?
Заполнять постоянную из CУБД и там же делать манипуляции с компаниями

Цитата:
Наверное, создать в TempDb временную таблицу
типа этого

Последний раз редактировалось MikeR; 24.07.2007 в 10:10. Причина: цитата
Старый 26.03.2008, 10:32   #17  
Yugene is offline
Yugene
Участник
 
46 / 11 (1) +
Регистрация: 02.12.2004
Адрес: Moscow
Коллеги, подскажите, пожалуйста, как положить записи во временную таблицу действительно с разными DataAreaId, т.е. по компаниям? А то при наполнении временной таблицы записями из разных компаний возможны конфликты уникального индекса.

P.S.
Доп.поле заранее создать (и включить в индекс) не могу, т.к. таблица заранее неизвестна и создается из DictTable.makeRecord().

Последний раз редактировалось Yugene; 26.03.2008 в 10:35.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Помещение временной таблицы в Map Lemming DAX: Программирование 20 19.10.2017 14:16
Управление форматом строки таблицы в Word формируемой в АХ 4.0 pwp DAX: Программирование 6 17.11.2009 11:28
Динамическое связывание временной таблицы Paul_ST DAX: Программирование 8 25.09.2007 16:17
Проблема с очисткой временной таблицы v.fedorov DAX: Программирование 13 26.10.2006 23:02
Можно ли вообще сделать JOIN временной таблицы и InventDim??? Maxim Gorbunov DAX: Программирование 9 05.03.2005 10:39

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:08.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.