06.04.2015, 13:00 | #1 |
Участник
|
Сложение))
Добрый день!! Подскажите пожалуйста, как правильно лучше написать 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 |
Участник
|
X++: str a,b; a= "1"; b= a+a; |
|
06.04.2015, 13:09 | #3 |
Участник
|
Не знаю, правильно ли Вас понял Ниже код. Вообще способов масса.
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 |
Участник
|
str str1, str2, str3 - я что то вот это не понял, а как мне указать мои поля)) и таблицу))
|
|
06.04.2015, 13:16 | #5 |
Участник
|
|
|
06.04.2015, 13:16 | #6 |
Участник
|
|
|
06.04.2015, 13:19 | #7 |
Участник
|
Если судить по уточненному вопросу, то по-любому структура кода для изменения данных таблицы должна быть другой, в общем случае:
X++: ttsbegin; while select forupdate testInfo { testInfo.NameDI = // что-то; testInfo.update(); } ttscommit; |
|
06.04.2015, 13:20 | #8 |
Участник
|
Цитата:
Сообщение от FrolovAndy
Если судить по уточненному вопросу, то по-любому структура кода для изменения данных таблицы должна быть другой, в общем случае:
X++: ttsbegin; while select forupdate testInfo { testInfo.NameDI = // что-то; testInfo.update(); } ttscommit; |
|
06.04.2015, 13:24 | #9 |
Участник
|
Цитата:
Сообщение от FrolovAndy
Если судить по уточненному вопросу, то по-любому структура кода для изменения данных таблицы должна быть другой, в общем случае:
X++: ttsbegin; while select forupdate testInfo { testInfo.NameDI = // что-то; testInfo.update(); } ttscommit; X++: static void Job29(Args _args) { TestInfo testInfo; ttsbegin; while select forupdate TestInfo { testInfo.NameDI=testInfo.NameID+'10'; testInfo. } ttscommit; } |
|
06.04.2015, 13:24 | #10 |
Участник
|
Ну тогда вообще нет проблем:
X++: ttsbegin; while select forupdate testInfo { testInfo.NameDI = testInfo.NamID + 10; testInfo.update(); } ttscommit; |
|
06.04.2015, 13:29 | #11 |
Участник
|
Цитата:
Более того, для строковых вообще невозможна прямая арифметика, +'10' даст соединение двух строк, но никак не сложение. Вообще, очень рекомендую эту книжку: http://progbook.ru/x-axapta/589-erem...ii-axapta.html Большинство с неё начинали, она хоть и по AX3, но все базовые принципы X++ там изложены лучше некуда! |
|
06.04.2015, 13:29 | #12 |
Участник
|
Цитата:
|
|
06.04.2015, 13:49 | #13 |
Участник
|
Цитата:
Сообщение от FrolovAndy
Да, для int типов надо +10, а не +'10'
Более того, для строковых вообще невозможна прямая арифметика, +'10' даст соединение двух строк, но никак не сложение. Вообще, очень рекомендую эту книжку: http://progbook.ru/x-axapta/589-erem...ii-axapta.html Большинство с неё начинали, она хоть и по AX3, но все базовые принципы X++ там изложены лучше некуда! 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 | #14 |
Участник
|
Цитата:
Сообщение от 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; } X++: // where testInfo.NameID = "1" where testInfo.NameID == 1 2. Опять же, если int, то не == "1", а правильно будет == 1 Только вы про insert упомянули, так вам надо новые записи добавить, или изменить существующие? |
|
06.04.2015, 14:00 | #15 |
Участник
|
Цитата:
Сообщение от FrolovAndy
В условии "where" должно быть по-другому:
X++: // where testInfo.NameID = "1" where testInfo.NameID == 1 2. Опять же, если int, то не == "1", а правильно будет == 1 Только вы про insert упомянули, так вам надо новые записи добавить, или изменить существующие? |
|
06.04.2015, 14:04 | #16 |
Участник
|
Ух чую я будут БД из бэкапа восстанавливать)
|
|
06.04.2015, 14:12 | #17 |
Участник
|
Если уж совсем изящно, то лучше так: 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; } |
|
07.04.2015, 08:43 | #18 |
Участник
|
Цитата:
Сообщение от FrolovAndy
Если уж совсем изящно, то лучше так:
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; } |
|
07.04.2015, 09:45 | #19 |
Участник
|
Цитата:
Например, если на одну имеющуюся запись должно создаваться n новых, внутри while-цикла организуете for-цикл от 1 до n, на каждой итерации которого будет выполняться insert. Программирование - удивительно гибкая вещь, и основная проблема как правило это чёткое понимание того что же мы хотим получить =) |
|
07.04.2015, 11:27 | #20 |
Участник
|
Цитата:
Сообщение от FrolovAndy
Так от постановки зависит. Приведенный выше пример создает по одной новой записи на каждую существующую. Если требуется не одну а несколько, надо определиться с критериями задачи, с алгоритмом по которому записи должны создаваться.
Например, если на одну имеющуюся запись должно создаваться n новых, внутри while-цикла организуете for-цикл от 1 до n, на каждой итерации которого будет выполняться insert. Программирование - удивительно гибкая вещь, и основная проблема как правило это чёткое понимание того что же мы хотим получить =) У меня вот так вот получилось X++: ttsbegin; while (i <= 10) { newRecord.clear(); newRecord.data(testInfo); newRecord.NameID = 1; newRecord.insert(); i++; } while select forupdate TestInfo where testInfo.NameID == 1 { testInfo.NameDI=testInfo.NameID + 10; testInfo.update(); } ttscommit; |
|