AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search Mark Forums Read

 
 
Thread Tools Search this Thread Display Modes
Old 19.02.2003, 12:49   #1  
skof is offline
skof
NavAx
NavAx Club
 
100 / 12 (1) ++
Join Date: 09.01.2002
Location: РБ, Минск
Angry Не работает update !!!!
Люди!!! Помогите, многое видел но такого в Аксапте - не ожидал....
Не работает следующий код:
PHP Code:
inventTable null;
i_table null;
inventTable conpeek(_ci);
i_Table InventTable::find(inventTable.ItemId);
if(
i_Table)
{
    
i_table.data(inventTable.data());
    
i_table.doUpdate();

Что уже только не пробовали, как это можно реализовтаь по другому, или может кто-нить уже сталкивался с подобным?
Old 19.02.2003, 12:59   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
Интересно, а в чем суть данного кода?

Может быть, вместо find и if сделать просто
inventTable.update() ?
Old 19.02.2003, 14:37   #3  
KVAx is offline
KVAx
Участник
 
11 / 10 (1) +
Join Date: 17.02.2003
Quote:
Что уже только не пробовали, как это можно реализовтаь по другому, или может кто-нить уже сталкивался с подобным?
1) Какого типа у вас табличные переменные (наверное это InventTable)???

2) Не понятно зачем Вы это делаете. И как Вы дошли до того что это не работает (и что собственно должно работать???). Ничего не изменяя делаете doUpdate - естественно ничего не произойдет.
Old 19.02.2003, 15:00   #4  
Garic is offline
Garic
NavAx
Garic's Avatar
NavAx Club
 
393 / 63 (3) ++++
Join Date: 23.07.2002
Location: Москва
Мде
загадочный кусок кода
и что он интересно должен был по задумке делать?
__________________
С уважением, Игорь Ласийчук.
Old 19.02.2003, 15:09   #5  
skof is offline
skof
NavAx
NavAx Club
 
100 / 12 (1) ++
Join Date: 09.01.2002
Location: РБ, Минск
"Загадочный", а что вы хотели - жизнь, знаете ли сложная штука :-)....

Суть этого кода вот в чем - мы получили контейнер с InventTable из ДРУГОЙ компании (неважно как, и я не могу запихать в данном случае все в виртуальную компанию). Прочитали его в текущей (целевой) компании и теперь строку таблицы в целевой компании с таким же ItemId нам надо привести в соответсвие с тем что мы прочитали...
Как это сделать?
Old 19.02.2003, 15:25   #6  
KVAx is offline
KVAx
Участник
 
11 / 10 (1) +
Join Date: 17.02.2003
Знающие люди говорят, что при смене компании надо сначало обнулить табличную переменную, а затем заносить туда данные (в системных поля содержится информациия о компании - поэтому doUpdate происходит в "старой" компании)
Old 19.02.2003, 15:34   #7  
skof is offline
skof
NavAx
NavAx Club
 
100 / 12 (1) ++
Join Date: 09.01.2002
Location: РБ, Минск
To KVax
ГДЕ в том коде что я написал changeCompany - все происходит в одной компании, контейнер из другой компании у нас уже есть - все переменные как Вы видете обнулены...
Old 19.02.2003, 15:44   #8  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
Всё понятно
Так как UPDATE Аксапта делает по условию WHERE RecId=### AND DATAAREAID='XXX', предлагаю поступить так:
PHP Code:
inventTable null;
i_table null;
inventTable conpeek(_ci);
i_Table InventTable::find(inventTable.ItemId);
if(
i_Table)
{
    
inventTable.dataAreaId i_table.dataAreaId;
    
inventTable.RecId i_table.RecId;
    
inventTable.doUpdate();

Old 19.02.2003, 15:44   #9  
KVAx is offline
KVAx
Участник
 
11 / 10 (1) +
Join Date: 17.02.2003
В InventTable попала вся информация из преведущей помпании (вместе с полем dataAreaId - где храниться информация о компании).
Затем вы эту информацию помещаете в I_Table - вместе с dataAreaId (и даже вместе с RecId) из преведущей компании - а Вам нужен RecId данной записи из текущейц компании и DataAreaId тоже.
Old 19.02.2003, 15:46   #10  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Re: Не работает update !!!!
Quote:
Изначально опубликовано skof
PHP Code:
i_Table InventTable::find(inventTable.ItemId); 
Если ItemId действительно непустое, то...
ИХМО стоит попробовать
PHP Code:
i_Table InventTable::find(inventTable.ItemIdtrue); 
Old 19.02.2003, 15:47   #11  
KVAx is offline
KVAx
Участник
 
11 / 10 (1) +
Join Date: 17.02.2003
To Warm
:-))
Old 19.02.2003, 15:51   #12  
Garic is offline
Garic
NavAx
Garic's Avatar
NavAx Club
 
393 / 63 (3) ++++
Join Date: 23.07.2002
Location: Москва
Quote:
Суть этого кода вот в чем - мы получили контейнер с InventTable из ДРУГОЙ компании (неважно как, и я не могу запихать в данном случае все в виртуальную компанию). Прочитали его в текущей (целевой) компании и теперь строку таблицы в целевой компании с таким же ItemId нам надо привести в соответсвие с тем что мы прочитали...
Так бы сразу и сказали

ИМХО тут всё дело в операторе data().
Попробуйте например сделать следующую вещь:
PHP Code:
    changecompany('c11')
    {
        
inventTable InventTable::find(itemId);
    }

    
changecompany('c12')
    {
        
inventTableNew.data(inventTable);
        
inventTableNew.insert();
    } 
Не даст вставить потому что связка dataArea + RecId не уникальна

Можно решить эту проблему например так:
PHP Code:
    DictTable   dictTable = new DictTable(tableNum(InventTable));
    
DictField   dictField;
    
FieldId     fieldId;
    
InventTable  InventTableOld;
    
InventTable  InventTable;
    
container   system  = ['RecId','dataAreaId','sequenceNum'];

    
changecompany('c15')
    {
        
InventTableOld InventTable::find('103.291.С15');
    }

    
changecompany('c16')
    {
        
fieldId dictTable.fieldNext(0);
        while (
fieldId)
        {

            
dictField = new DictField(tableNum(InventTable), fieldId);
            if (!
confind(systemdictField.name()))
            {
                
InventTable.(fieldId) = InventTableOld.(fieldId);
            }
            
fieldId dictTable.fieldNext(fieldId);
        }
        
InventTable.insert();
    } 
__________________
С уважением, Игорь Ласийчук.
Old 19.02.2003, 15:53   #13  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
to Muzzy
второй параметр в find говорит о том надо блокировать выбранную запись в таблице для обновления или нет. То есть в запросе на сервер будет присутствовать (UPDLOCK)
Old 19.02.2003, 16:03   #14  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Изначально опубликовано Wamr
второй параметр в find...
да, я об этом и говорил.

Скорее всего, я был неправ, поскольку загрузил старницу давно и не видел увлекательных историй о смене компаний. Буду читать этот сериал с огромным интересом.
Old 19.02.2003, 16:05   #15  
skof is offline
skof
NavAx
NavAx Club
 
100 / 12 (1) ++
Join Date: 09.01.2002
Location: РБ, Минск
Ну, народ вы даете!!!

1. метод DATA не переносит RecId и DataAreaId....
2. DataAreaId нельзя писать - только читать...
3. в целевой базе нет исходной компании...
4. переменные как вы видете мы обнуляем
5. блокировку записи мы пробовали - не помогует

Но, только что - мы решили проблему - угадайте как.... правда призов не обещаю - не в Америках живу - хотя какой нить приз придумать можно...

А вообще хотелось бы задать этот вопрос МБС - какого черта не работает - ведь по логике должно? Что она внутри там теряет? В отладчике мы смотрели - после строчки i_table.data(inventTable.data()); - данные в i_table новые а пресловутые DataAreaId и RecId старые...
Old 19.02.2003, 16:16   #16  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
а чего тянуть то?
говори, раз разобрались...
Old 19.02.2003, 16:22   #17  
KVAx is offline
KVAx
Участник
 
11 / 10 (1) +
Join Date: 17.02.2003
Да действительно - народ хочет знать правду
Old 19.02.2003, 16:36   #18  
Garic is offline
Garic
NavAx
Garic's Avatar
NavAx Club
 
393 / 63 (3) ++++
Join Date: 23.07.2002
Location: Москва
Quote:
Ну, народ вы даете!!!
1. метод DATA не переносит RecId и DataAreaId....
2. DataAreaId нельзя писать - только читать...
См. моё сообщение выше
1-ый вариант не работает
2-ой вариант работает
Я проверял перед тем как постить.
Хотя может дело тут и не в этом.
__________________
С уважением, Игорь Ласийчук.
Old 19.02.2003, 16:53   #19  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 868 (32) +++++++
Join Date: 15.01.2002
Location: Москва
Blog Entries: 7
Попробую угадать

i_Table.doDelete();
inventTable.doInsert();
Хотя, это вряд ли, слишком много deleteAction-ов на InventTable


Кстати, у меня RecId через data всегда переносился.
Old 19.02.2003, 17:05   #20  
skof is offline
skof
NavAx
NavAx Club
 
100 / 12 (1) ++
Join Date: 09.01.2002
Location: РБ, Минск
То Warm очень близко - мы использовали doDelete, doInsert
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Dianne Siebold: Rec Fields Required in AIF Partial Update Blog bot DAX Blogs 0 20.01.2009 09:05
epblog: How to update Data Set from User Control? Blog bot DAX Blogs 0 21.06.2008 13:05
Dianne Siebold: Update on the Dynamics AX SDK Team kashperuk DAX Blogs 1 16.10.2007 08:23
dynamicsusers: The Naked Business Part III - The site update Blog bot DAX Blogs 0 22.05.2007 04:42
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 11:26.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.