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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.04.2015, 13:00   #1  
JonAx is offline
JonAx
Участник
 
67 / 11 (1) +
Регистрация: 25.07.2014
:) Сложение))
Добрый день!! Подскажите пожалуйста, как правильно лучше написать job чтобы можно было сложить значения одной строки и во второе получить другое значения?
Например, я создал таблицу с двумя полями(NameId и NamaDi) в первом (NameId) я ввожу значения от 1 до 10, а во втором(NameDi) после запуска joba значения которые были введены в NameId должны увеличиться на 10, как это сделать, а то у меня не получается(( Помогите пожалуйста, буду благодарен))
Я остановился на этом((
X++:
static void Job29(Args _args)
{    
    TestInfo testInfo;
    while select testInfo

{
    where testInfo.NameDI=TestInfo.NamID+'10'

}
    }

Последний раз редактировалось JonAx; 06.04.2015 в 13:08.
Старый 06.04.2015, 13:07   #2  
online
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,742 / 404 (17) +++++++
Регистрация: 23.03.2006
X++:
str a,b;
a= "1";
b= a+a;
Старый 06.04.2015, 13:09   #3  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Не знаю, правильно ли Вас понял Ниже код. Вообще способов масса.

X++:
static void Job20(Args _args)
{
    str     str1, str2, str3;
    ;
    
    str1 = '1';
    
    str2 = strfmt('%1%1', str1);
    
    str3 = str1 + str1;
    
    info(str1);
    info(str2);
    info(str3);
}
Старый 06.04.2015, 13:14   #4  
JonAx is offline
JonAx
Участник
 
67 / 11 (1) +
Регистрация: 25.07.2014
Цитата:
Сообщение от FrolovAndy Посмотреть сообщение
Не знаю, правильно ли Вас понял Ниже код. Вообще способов масса.

X++:
static void Job20(Args _args)
{
    str     str1, str2, str3;
    ;
    
    str1 = '1';
    
    str2 = strfmt('%1%1', str1);
    
    str3 = str1 + str1;
    
    info(str1);
    info(str2);
    info(str3);
}
str str1, str2, str3 - я что то вот это не понял, а как мне указать мои поля)) и таблицу))
Старый 06.04.2015, 13:16   #5  
JonAx is offline
JonAx
Участник
 
67 / 11 (1) +
Регистрация: 25.07.2014
Цитата:
Сообщение от JonAx Посмотреть сообщение
str str1, str2, str3 - я что то вот это не понял, а как мне указать мои поля)) и таблицу))
static void Job29(Args _args)
{
str a, NameID, NameDI;


str = '10'

NameID = strfmt('%10%10', a);

NameDI = a + a;

info(str1);
info(str2);
info(str3);

}
вот так вот, надо?)
Старый 06.04.2015, 13:16   #6  
online
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,742 / 404 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от JonAx Посмотреть сообщение
str str1, str2, str3 - я что то вот это не понял, а как мне указать мои поля)) и таблицу))
это были ответы на ваше первоначальное сообщение.
Старый 06.04.2015, 13:19   #7  
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   #8  
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   #9  
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   #10  
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   #11  
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   #12  
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, 13:24   #13  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Ну тогда вообще нет проблем:

X++:
ttsbegin;
  
while select forupdate testInfo
{
    testInfo.NameDI = testInfo.NamID + 10;
    testInfo.update();
}
  
ttscommit;
Были б строковые, пришлось бы еще применять функции преобразования int2str и str2int, а так просто достаточно 10 прибавить.
Старый 06.04.2015, 13:29   #14  
JonAx is offline
JonAx
Участник
 
67 / 11 (1) +
Регистрация: 25.07.2014
Цитата:
Сообщение от FrolovAndy Посмотреть сообщение
Ну тогда вообще нет проблем:

X++:
ttsbegin;
  
while select forupdate testInfo
{
    testInfo.NameDI = testInfo.NamID + 10;
    testInfo.update();
}
  
ttscommit;
Были б строковые, пришлось бы еще применять функции преобразования int2str и str2int, а так просто достаточно 10 прибавить.
Окей, спасибо большое, я пол дня просидел с этой фигней, а оказывается просто надо было убрать кавычки)) Большое спасибо))
Старый 06.04.2015, 14:04   #15  
Art_Tanis is offline
Art_Tanis
Участник
 
225 / 36 (2) +++
Регистрация: 04.02.2014
Ух чую я будут БД из бэкапа восстанавливать)
Старый 07.04.2015, 12:10   #16  
FrolovAndy is offline
FrolovAndy
Участник
 
71 / 45 (2) +++
Регистрация: 13.09.2007
Вы все-таки постановку исходную опишите =) Иначе мы еще очень долго будем подбирать подходящий вариант решения задачи.
По коду я вижу, что вы хотите сначала сгенерить 10 записей, потом их обновить. Это то что требуется?
Вообще, всё работает нормально, и цикл проходит столько раз сколько нужно. Каких-то проблем не выявлено.
За это сообщение автора поблагодарили: JonAx (1).
Старый 07.04.2015, 12:28   #17  
JonAx is offline
JonAx
Участник
 
67 / 11 (1) +
Регистрация: 25.07.2014
Цитата:
Сообщение от FrolovAndy Посмотреть сообщение
Вы все-таки постановку исходную опишите =) Иначе мы еще очень долго будем подбирать подходящий вариант решения задачи.
По коду я вижу, что вы хотите сначала сгенерить 10 записей, потом их обновить. Это то что требуется?
Вообще, всё работает нормально, и цикл проходит столько раз сколько нужно. Каких-то проблем не выявлено.
Получается мне надо, чтобы создалось несколько записей от 1 до 10 в NameID, а в NameDI были сложены на 10))
X++:
    ttsbegin;

           while (i <= 10);
           {    
                newRecord.clear();
                newRecord.data(testInfo);
                newRecord.NameID = i;
                newRecord.insert();
                i++;
                

           }

      


    while select forupdate TestInfo
            where testInfo.NameID == 1 ||
                  testInfo.NameID == 2 ||
                  testInfo.NameID == 3



    {

        testInfo.NameDI = testInfo.NameID + 10;
        testInfo.update();
    }

    ttscommit;
цикл идет бесконечно и ax у меня зависает и выкидывает(( как сделать чтобы цикл остановился на 10? у меня создает 10 записей, но не по порядку, а просто 1 1 1 1 1 1 1 в столбик, а надо чтобы было 1 2 3 4 5 6...
Старый 07.04.2015, 12:47   #18  
JonAx is offline
JonAx
Участник
 
67 / 11 (1) +
Регистрация: 25.07.2014
Цитата:
Сообщение от FrolovAndy Посмотреть сообщение
Вы все-таки постановку исходную опишите =) Иначе мы еще очень долго будем подбирать подходящий вариант решения задачи.
По коду я вижу, что вы хотите сначала сгенерить 10 записей, потом их обновить. Это то что требуется?
Вообще, всё работает нормально, и цикл проходит столько раз сколько нужно. Каких-то проблем не выявлено.
Все спасибо большое разобрался, надо было удалить одну строчку))
Старый 07.04.2015, 16:34   #19  
Kiot is offline
Kiot
Участник
 
12 / 11 (1) +
Регистрация: 25.01.2012
Прислушайтесь к пользователю, который скинул Вам ссылку на книгу Ерёменко и Шашкова, там всё предельно доступно и с примерами разбираются основы разработки. Может я конечно не прав, но на первый взгляд Вам не помешало бы ещё для начала прочитать книгу по SQL http://www.pmbk.ru/lister/016/1/index.shtml - она писалась ещё в конце 80х, начале 90х, там предельно просто всё написано.
 


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

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

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