|
30.12.2010, 10:19 | #1 |
Участник
|
Вопрос новичка
Доброго всем дня, сразу к делу: Делаю некое контрольное задание на Microsoft Dynamics AX 2009, имеется форма с размещенным на ней гридом, грид связан с некой таблицей, имеется кнопка на форме, по нажатию на которую, необходимо изменить запись на которую в данный момент указывает курсор в гриде. Насколько я знаю вначале нужно выбрать запись оператором
X++: select forupdate table where |
|
30.12.2010, 10:27 | #2 |
северный Будда
|
У вас есть на форме некий датасоурс. Так вот, при его инициализации (когда открывается форма) система автоматом создаёт табличную переменную. Используйте её, там как раз будет значение строки, на которой стоит курсор. Например, если у вас в гриде датасоурсом стоит InventTrans, то вы спокойно можете прямо в коде использовать InventTrans.update().
Единственное НО - это работает только в методах самой формы
__________________
С уважением, Вячеслав Последний раз редактировалось pitersky; 30.12.2010 в 10:29. |
|
30.12.2010, 10:29 | #3 |
Участник
|
Текущая запись в гриде доступна в форме под именем DataSource(Table). Измените данные, вызовите Table_DS(это датасорс).write() или Table.update() и Table_DS.refresh().
|
|
30.12.2010, 10:30 | #4 |
Ищущий знания...
|
На форме есть DataSorce. Вот его значение и есть курсор (запись выделенная в гриде).
Update лучше написать методом на самой таблице, т.к. на форме нужно писать как можно меньше кода. Например в таблице создаем метод myUpdate() в нем пишем: X++: void myUpdate() { MyTable myTable; ; ttsbegin; myTable = MyTable::find(this.Code, true); // последний параметр это forUpdate myTable.Description = 'la la la'; if (myTable.validateWrite()) myTable.update(); ttscommit; } X++: Select forupdate myTable where myTable.Code == this.Code; X++: MyTable.myUpdate(); MyTable_ds.reread(); MyTable_ds.refresh();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
30.12.2010, 10:37 | #5 |
Участник
|
А если скажем я хочу обработать это не в методе формы а в классе, точнее в методе Main класса который вызывается по нажатию кнопки на форме, кнопка является MenuItemButton и связана с соответствующим MenuItem.
|
|
30.12.2010, 10:38 | #6 |
северный Будда
|
тогда надо пармить сам класс. Передавайте в new параметром _args.record() из main - он как раз содержит курсор. Ну или напишите в классе отдельный метод parmMyTable
__________________
С уважением, Вячеслав |
|
30.12.2010, 10:50 | #7 |
Ищущий знания...
|
Цитата:
в классе в ClassDeclaration() объявляем нашу таблицу X++: MyTable myTable; X++: void initFromArgs(Args _args) { ; if (_args && _args.record()) myTable = _args.record(); } X++: static void main(Args _args) { RunCalss runClass; ; runClass = new RunClass(); runClass.initFromArgs(_args); runClass.run(); } X++: void run() { MyTable myTableUpdate; ; ttsbegin; select forupdate myTableUpdate where myTableUpdate.Code == myTable.Code; myTableUpdate.Description = 'la la la'; if (myTableUpdate.validateWrite()) myTableUpdate.Update(); ttscommit; } X++: MyTable_ds.reread(); MyTable_ds.refresh();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 30.12.2010 в 12:03. |
|
30.12.2010, 11:50 | #8 |
Участник
|
X++: void run() { MyTable myTableUpdate; ; ttsbegin; select forupdate myTableUpdate where myTableUpdate.Code = myTable.Code; myTableUpdate.Description = 'la la la'; if (myTableUpdate.validateWrite()) myTableUpdate.Update(); ttscommit; } Последний раз редактировалось AngelDominantes; 30.12.2010 в 11:54. |
|
30.12.2010, 11:57 | #9 |
Ищущий знания...
|
Цитата:
Сообщение от AngelDominantes
X++: void run() { MyTable myTableUpdate; ; ttsbegin; select forupdate myTableUpdate where myTableUpdate.Code == myTable.Code; myTableUpdate.Description = 'la la la'; if (myTableUpdate.validateWrite()) myTableUpdate.Update(); ttscommit; } да, нужно ещё там проверку добавить на то что запись найдена. Т.е. в итоге метод run() должен выглядеть так: X++: void run() { MyTable myTableUpdate; ; ttsbegin; select forupdate myTableUpdate where myTableUpdate.Code == myTable.Code; if (myTableUpdate.RecId != 0) { myTableUpdate.Description = 'la la la'; if (myTableUpdate.validateWrite()) myTableUpdate.Update(); } ttscommit; }
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 30.12.2010 в 12:03. Причина: исправил по замечанию wamr |
|
30.12.2010, 11:56 | #10 |
----------------
|
это называется "совсем не понял смысла"
мне кажется, пора сходить на курсы... почитать доку, тренинги и т.п. P.S. вообще-то я добрый. |
|
30.12.2010, 11:59 | #11 |
----------------
|
и еще надо правильно в запросе условие написать
== |
|
30.12.2010, 12:03 | #12 |
Ищущий знания...
|
ага, опечатка.
исправил, спасибо
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
30.12.2010, 12:01 | #13 |
Участник
|
Что-то мне кажется, что куски кода это медвежья услуга. Тестовое задание наверное предполагает что человек почитает документацию и разберется, а не скопипастит с форума.
З.Ы. Мне кажется был здесь уже такой человек, задававший вопросы, ему отвечали кусками кода, а потом его таки выгнали из компании. |
|
|
За это сообщение автора поблагодарили: lev (2), S.Kuskov (4), pitersky (2). |
30.12.2010, 12:06 | #14 |
Ищущий знания...
|
Цитата:
Сообщение от greench
Что-то мне кажется, что куски кода это медвежья услуга. Тестовое задание наверное предполагает что человек почитает документацию и разберется, а не скопипастит с форума.
З.Ы. Мне кажется был здесь уже такой человек, задававший вопросы, ему отвечали кусками кода, а потом его таки выгнали из компании. но человек попросил помощи, вот по доброте душевной и пытаюсь помочь надеюсь что будет не тупой copy past, а осмысление того что делается. P.S. а вообще все мы с чего то начинали. хочу сказать, что тиоритические курсы не дали мне и четверть того, что я получил окунувшись в боевую среду. Я не утверждаю, что они не нужны, ещё как нужны! И читать нужно по максимому! Искать информацию, разбираться!
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 30.12.2010 в 12:09. |
|
30.12.2010, 13:26 | #15 |
Участник
|
всем спасибо кто ответил. книжки я конечно читал, но там совсем нет никакой информации по функциям и по классам, если дадите ссылочки на таковые буду только благодарен.
|
|
30.12.2010, 14:37 | #16 |
Участник
|
Напишите название книги, которая у вас есть, я вам скажу номер страницы.
|
|
30.12.2010, 16:23 | #17 |
Участник
|
-РАЗРАБОТКА БИЗНЕС-ПРИЛОЖЕНИЙ В MICROSOFT® BUSINESS SOLUTIONS АХАРТА® ВЕРСИИ 3.0
Алексей Ерёменко Руслан Шашков -Microsoft Dynamics AX 2009 Справочник Профессионала(Майкрософтовская книжка) А теперь по делу: Дабы не плодить темы скажите направление хотя бы куда копать по вот такому вопросу: При изменении определенной таблицы, в таблице проводок главной книги (LedgerTrans) должны формироваться проводки, какие проводки должны формироваться задано. |
|
30.12.2010, 16:48 | #18 |
Гость
|
У всех таблиц есть методы insert(), update(), delete().
Если у нужной таблицы в дереве AOT не видно таких методов, надо кликнуть правой кнопкой на узле с методами таблицы и выбрать "Перекрыть метод - update" к примеру. Система создаст метод update(), внутри будет вызов super(). В супере как раз выполняется обновление строки. Все что вызвать до, будет выполнено до обновления, все что после - после. Если весь код вместе с супером обрамить в транзакцию, то обновление таблицы и доп. действия какие мы запилим туда выполнятся как единое целое. С insert и delete та же тема. |
|
30.12.2010, 16:56 | #19 |
северный Будда
|
Даже не думайте делать такую ересь! Проводки по ГК должны делаться ТОЛЬКО по нажатию кнопки Разноска. И никак иначе.
__________________
С уважением, Вячеслав |
|
30.12.2010, 17:04 | #20 |
Гость
|
|
|
|
Похожие темы | ||||
Тема | Ответов | |||
Вопрос по Проектам | 35 | |||
Вопрос новичка: суммирование в отчетах | 3 | |||
Вопрос новичка про заголовки грида | 21 | |||
расчеты с персоналом. НДФЛ. вопрос чайника | 2 | |||
Вопрос новичка !!! | 9 |
|