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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.12.2010, 10:19   #1  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Вопрос новичка
Доброго всем дня, сразу к делу: Делаю некое контрольное задание на Microsoft Dynamics AX 2009, имеется форма с размещенным на ней гридом, грид связан с некой таблицей, имеется кнопка на форме, по нажатию на которую, необходимо изменить запись на которую в данный момент указывает курсор в гриде. Насколько я знаю вначале нужно выбрать запись оператором
X++:
select forupdate table where
но как выбрать именно ту запись на которой курсор к сожалению затрудняюсь. Спасибо заранее.
Старый 30.12.2010, 10:27   #2  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
У вас есть на форме некий датасоурс. Так вот, при его инициализации (когда открывается форма) система автоматом создаёт табличную переменную. Используйте её, там как раз будет значение строки, на которой стоит курсор. Например, если у вас в гриде датасоурсом стоит InventTrans, то вы спокойно можете прямо в коде использовать InventTrans.update().
Единственное НО - это работает только в методах самой формы
__________________
С уважением,
Вячеслав

Последний раз редактировалось pitersky; 30.12.2010 в 10:29.
Старый 30.12.2010, 10:29   #3  
VORP is offline
VORP
Участник
Аватар для VORP
 
146 / 95 (4) ++++
Регистрация: 26.05.2006
Текущая запись в гриде доступна в форме под именем DataSource(Table). Измените данные, вызовите Table_DS(это датасорс).write() или Table.update() и Table_DS.refresh().
Старый 30.12.2010, 10:30   #4  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
На форме есть 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;
}
если метода find на таблице нет (а он должен быть ) то можно написать просто:
X++:
Select forupdate myTable
where myTable.Code == this.Code;
на кнопке в форме перекрываем метод clicked() и пишем там:
X++:
MyTable.myUpdate();
MyTable_ds.reread();
MyTable_ds.refresh();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.12.2010, 10:37   #5  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
А если скажем я хочу обработать это не в методе формы а в классе, точнее в методе Main класса который вызывается по нажатию кнопки на форме, кнопка является MenuItemButton и связана с соответствующим MenuItem.
Старый 30.12.2010, 10:38   #6  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
А если скажем я хочу обработать это не в методе формы а в классе, точнее в методе Main класса который вызывается по нажатию кнопки на форме, кнопка является MenuItemButton и связана с соответствующим MenuItem.
тогда надо пармить сам класс. Передавайте в new параметром _args.record() из main - он как раз содержит курсор. Ну или напишите в классе отдельный метод parmMyTable
__________________
С уважением,
Вячеслав
Старый 30.12.2010, 10:50   #7  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
А если скажем я хочу обработать это не в методе формы а в классе, точнее в методе Main класса который вызывается по нажатию кнопки на форме, кнопка является MenuItemButton и связана с соответствующим MenuItem.
тогда в форме у кнопки выставляем в свойству dataSource нужную таблицу (просто если на форме несколько DataSource надо явно указывать кого будем передавать в args-e).
в классе в ClassDeclaration() объявляем нашу таблицу
X++:
MyTable myTable;
далее пишем в классе метод initFromArgs(Args _args):
X++:
void initFromArgs(Args _args)
{
;
if (_args && _args.record())
   myTable = _args.record();
}
потом в методе main() пишем примерно следующие:
X++:
static void main(Args _args)
{
RunCalss runClass;
;

runClass = new RunClass();
runClass.initFromArgs(_args);
runClass.run();
}
а в методе 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;
}
на форме у кнопки перекрываем метод clicked() у формы и после super пишем:
X++:
MyTable_ds.reread();
MyTable_ds.refresh();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем

Последний раз редактировалось lev; 30.12.2010 в 12:03.
Старый 30.12.2010, 11:50   #8  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
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;
}
Не совсем понял смысл, то есть мы создаем 2 переменные: myTableUpdate, myTable одной и той же таблицы и приравниваем поля "Code", но перед этим мы переменной MyTable присвоили указатель от Грида? так?

Последний раз редактировалось AngelDominantes; 30.12.2010 в 11:54.
Старый 30.12.2010, 11:57   #9  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от 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;
}
Не совсем понял смысл, то есть мы создаем 2 переменные: myTableUpdate, myTable одной и той же таблицы и приравниваем поля "Code"?
нет, первая переменная (myTable) для того что бы зафиксировать курсор, который пришел с формы. вторая переменная для апдейта. в методе run() мы выполняем ещё раз поиск нужной нам записи из БД (считаю это просто необходимым, потому как эту запись банально могли удалить. + таблица заблокируется непосредственно перед самим адейтом, не на долго )
да, нужно ещё там проверку добавить на то что запись найдена. Т.е. в итоге метод 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  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
это называется "совсем не понял смысла"
мне кажется, пора сходить на курсы... почитать доку, тренинги и т.п.


P.S. вообще-то я добрый.
Старый 30.12.2010, 11:59   #11  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
и еще надо правильно в запросе условие написать
==
Старый 30.12.2010, 12:03   #12  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Wamr Посмотреть сообщение
и еще надо правильно в запросе условие написать
==
ага, опечатка.
исправил, спасибо
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.12.2010, 12:01   #13  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Что-то мне кажется, что куски кода это медвежья услуга. Тестовое задание наверное предполагает что человек почитает документацию и разберется, а не скопипастит с форума.

З.Ы. Мне кажется был здесь уже такой человек, задававший вопросы, ему отвечали кусками кода, а потом его таки выгнали из компании.
За это сообщение автора поблагодарили: lev (2), S.Kuskov (4), pitersky (2).
Старый 30.12.2010, 12:06   #14  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от greench Посмотреть сообщение
Что-то мне кажется, что куски кода это медвежья услуга. Тестовое задание наверное предполагает что человек почитает документацию и разберется, а не скопипастит с форума.

З.Ы. Мне кажется был здесь уже такой человек, задававший вопросы, ему отвечали кусками кода, а потом его таки выгнали из компании.
ага, согласен.
но человек попросил помощи, вот по доброте душевной и пытаюсь помочь
надеюсь что будет не тупой copy past, а осмысление того что делается.

P.S. а вообще все мы с чего то начинали. хочу сказать, что тиоритические курсы не дали мне и четверть того, что я получил окунувшись в боевую среду.
Я не утверждаю, что они не нужны, ещё как нужны! И читать нужно по максимому! Искать информацию, разбираться!
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем

Последний раз редактировалось lev; 30.12.2010 в 12:09.
Старый 30.12.2010, 13:26   #15  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
всем спасибо кто ответил. книжки я конечно читал, но там совсем нет никакой информации по функциям и по классам, если дадите ссылочки на таковые буду только благодарен.
Старый 30.12.2010, 14:37   #16  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Напишите название книги, которая у вас есть, я вам скажу номер страницы.
Старый 30.12.2010, 16:23   #17  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
-РАЗРАБОТКА БИЗНЕС-ПРИЛОЖЕНИЙ В MICROSOFT® BUSINESS SOLUTIONS АХАРТА® ВЕРСИИ 3.0
Алексей Ерёменко
Руслан Шашков
-Microsoft Dynamics AX 2009 Справочник Профессионала(Майкрософтовская книжка)

А теперь по делу: Дабы не плодить темы скажите направление хотя бы куда копать по вот такому вопросу: При изменении определенной таблицы, в таблице проводок главной книги (LedgerTrans) должны формироваться проводки, какие проводки должны формироваться задано.
Старый 30.12.2010, 16:48   #18  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
При изменении определенной таблицы ...
У всех таблиц есть методы insert(), update(), delete().
Если у нужной таблицы в дереве AOT не видно таких методов, надо кликнуть правой кнопкой на узле с методами таблицы и выбрать "Перекрыть метод - update" к примеру. Система создаст метод update(), внутри будет вызов super(). В супере как раз выполняется обновление строки. Все что вызвать до, будет выполнено до обновления, все что после - после. Если весь код вместе с супером обрамить в транзакцию, то обновление таблицы и доп. действия какие мы запилим туда выполнятся как единое целое.
С insert и delete та же тема.
Старый 30.12.2010, 16:56   #19  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от AngelDominantes Посмотреть сообщение
При изменении определенной таблицы, в таблице проводок главной книги (LedgerTrans) должны формироваться проводки, какие проводки должны формироваться задано.
Даже не думайте делать такую ересь! Проводки по ГК должны делаться ТОЛЬКО по нажатию кнопки Разноска. И никак иначе.
__________________
С уважением,
Вячеслав
Старый 30.12.2010, 17:04   #20  
Кирилл
Гость
 
n/a
Цитата:
Сообщение от pitersky Посмотреть сообщение
Даже не думайте делать такую ересь! Проводки по ГК должны делаться ТОЛЬКО по нажатию кнопки Разноска. И никак иначе.
А если топикстартер при изменении определенной таблицы создаст журнал ГК, строки журнала и программно его разнесет это уже не будет ересь?
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26
Вопрос новичка: суммирование в отчетах aevi82 DAX: Программирование 3 05.07.2006 12:15
Вопрос новичка про заголовки грида Alex P DAX: Программирование 21 05.10.2004 19:25
расчеты с персоналом. НДФЛ. вопрос чайника shumelka DAX: Функционал 2 25.03.2004 11:36
Вопрос новичка !!! vfox DAX: Администрирование 9 29.02.2004 10:49

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

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

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