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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.02.2003, 12:49   #1  
skof is offline
skof
NavAx
NavAx Club
 
100 / 12 (1) ++
Регистрация: 09.01.2002
Адрес: РБ, Минск
Angry Не работает update !!!!
Люди!!! Помогите, многое видел но такого в Аксапте - не ожидал....
Не работает следующий код:
PHP код:
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();

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

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

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

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

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

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

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

Можно решить эту проблему например так:
PHP код:
    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();
    } 
__________________
С уважением, Игорь Ласийчук.
Старый 19.02.2003, 15:53   #13  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
to Muzzy
второй параметр в find говорит о том надо блокировать выбранную запись в таблице для обновления или нет. То есть в запросе на сервер будет присутствовать (UPDLOCK)
Старый 19.02.2003, 16:03   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Wamr
второй параметр в find...
да, я об этом и говорил.

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

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

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

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

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


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

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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

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

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

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