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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.04.2015, 13:19   #1  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Если судить по уточненному вопросу, то по-любому структура кода для изменения данных таблицы должна быть другой, в общем случае:

X++:
 ttsbegin;
  
 while select forupdate testInfo
 {
     testInfo.NameDI = // что-то;
     testInfo.update();
 }
  
 ttscommit;
А как конкретно преобразовывать значения, это уже от типов зависит. У вас поля в таблице строковые или int?
Старый 06.04.2015, 13:20   #2  
JonAx is offline
JonAx
Участник
 
67 / 11 (1) +
Регистрация: 25.07.2014
Цитата:
Сообщение от FrolovAndy Посмотреть сообщение
Если судить по уточненному вопросу, то по-любому структура кода для изменения данных таблицы должна быть другой, в общем случае:

X++:
 ttsbegin;
  
 while select forupdate testInfo
 {
     testInfo.NameDI = // что-то;
     testInfo.update();
 }
  
 ttscommit;
А как конкретно преобразовывать значения, это уже от типов зависит. У вас поля в таблице строковые или int?
int
Старый 06.04.2015, 13:24   #3  
JonAx is offline
JonAx
Участник
 
67 / 11 (1) +
Регистрация: 25.07.2014
Цитата:
Сообщение от FrolovAndy Посмотреть сообщение
Если судить по уточненному вопросу, то по-любому структура кода для изменения данных таблицы должна быть другой, в общем случае:

X++:
 ttsbegin;
  
 while select forupdate testInfo
 {
     testInfo.NameDI = // что-то;
     testInfo.update();
 }
  
 ttscommit;
А как конкретно преобразовывать значения, это уже от типов зависит. У вас поля в таблице строковые или int?
X++:
static void Job29(Args _args)
{   TestInfo    testInfo;
    ttsbegin;
    while select forupdate TestInfo
        {
            testInfo.NameDI=testInfo.NameID+'10';
            testInfo.
            }
            ttscommit;
            

    }
я вот так вот делал, а он говорит что тип операндов не совместим с оператором((
Старый 06.04.2015, 13:29   #4  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Цитата:
Сообщение от JonAx Посмотреть сообщение
я вот так вот делал, а он говорит что тип операндов не совместим с оператором((
Да, для int типов надо +10, а не +'10'

Более того, для строковых вообще невозможна прямая арифметика, +'10' даст соединение двух строк, но никак не сложение.

Вообще, очень рекомендую эту книжку:
http://progbook.ru/x-axapta/589-erem...ii-axapta.html

Большинство с неё начинали, она хоть и по AX3, но все базовые принципы X++ там изложены лучше некуда!
Старый 06.04.2015, 13:49   #5  
JonAx is offline
JonAx
Участник
 
67 / 11 (1) +
Регистрация: 25.07.2014
Цитата:
Сообщение от FrolovAndy Посмотреть сообщение
Да, для int типов надо +10, а не +'10'

Более того, для строковых вообще невозможна прямая арифметика, +'10' даст соединение двух строк, но никак не сложение.

Вообще, очень рекомендую эту книжку:
http://progbook.ru/x-axapta/589-erem...ii-axapta.html

Большинство с неё начинали, она хоть и по AX3, но все базовые принципы X++ там изложены лучше некуда!
Можно еще один вопрос, как можно добавить данные через insert,чтобы в NameID я программно добавил данные а то я что то не могу понять, постоянно ошибка выходит, я вот так вот сделал))
X++:
static void TstInf(Args _args)
{
    TestInfo    testInfo;
    ;

    ttsbegin;
   

    while select forupdate TestInfo
        where testInfo.NameID = "1"
        
    {
        testInfo.NameDI=testInfo.NameID + 10;
        testInfo.update();
    }

    ttscommit;
}
Старый 06.04.2015, 13:57   #6  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Цитата:
Сообщение от JonAx Посмотреть сообщение
Можно еще один вопрос, как можно добавить данные через insert,чтобы в NameID я программно добавил данные а то я что то не могу понять, постоянно ошибка выходит, я вот так вот сделал))
X++:
static void TstInf(Args _args)
{
    TestInfo    testInfo;
    ;

    ttsbegin;
   

    while select forupdate TestInfo
        where testInfo.NameID = "1"
        
    {
        testInfo.NameDI=testInfo.NameID + 10;
        testInfo.update();
    }

    ttscommit;
}
В условии "where" должно быть по-другому:
X++:
     // where testInfo.NameID = "1"
     where testInfo.NameID == 1
1. В условных операторах равенство указывается '==' а не '='
2. Опять же, если int, то не == "1", а правильно будет == 1

Только вы про insert упомянули, так вам надо новые записи добавить, или изменить существующие?
Старый 06.04.2015, 14:00   #7  
JonAx is offline
JonAx
Участник
 
67 / 11 (1) +
Регистрация: 25.07.2014
Цитата:
Сообщение от FrolovAndy Посмотреть сообщение
В условии "where" должно быть по-другому:
X++:
     // where testInfo.NameID = "1"
     where testInfo.NameID == 1
1. В условных операторах равенство указывается '==' а не '='
2. Опять же, если int, то не == "1", а правильно будет == 1

Только вы про insert упомянули, так вам надо новые записи добавить, или изменить существующие?
Добавить новые записи))
Старый 06.04.2015, 14:12   #8  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Цитата:
Сообщение от JonAx Посмотреть сообщение
Добавить новые записи))

Если уж совсем изящно, то лучше так:
X++:
static void TstInf(Args _args)
{
    TestInfo    testInfo, // для выбора уже имеющихся строк
                newRecord; // для вставки новых
    ;
    ttsbegin;
   
    while select testInfo
        where testInfo.NameID == 1
        
    {
        newRecord.clear();
        newRecord.data(testInfo);
        newRecord.NameDI = testInfo.NameID + 10;
        newRecord.insert();
    }
 
    ttscommit;
}
Использование оператора newRecord.data(testInfo) опционально, всё зависит от того, должны ли в новую запись копироваться значения остальных полей из исходной записи.
 


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

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

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