04.06.2008, 21:12 | #1 |
Участник
|
Присвоение значения полю активной записи по его имени
Вот столкнулся с задачей, есть несколько, например, 5 однотипных полей, с похожими названиями аля Field1, Field2, Field3 и т.д, то есть отличаются названия только индексами в конце, причём индексы идут подрят, тобишь 1..5. Поля эти должны програмно заполнятся по одной закономерности, таким образом естественно возникает желание организовать цикл, итерирующий индекс от 1..5 и заполняющий поля с именами 'Field'<ind> в соответствии с закономерностью. А теперь собственно вопрос, каким именно образом можно достучатся до значения поля активной записи по его имени. В этой связи только 2 идеи: либо формировать и выполнять запрос из строки, если в аксапте такое возможно, либо каким-то образом использовать fieldname2id.
Зарание благодарен любым ответам, кроме: "не парь мозги, делай всё по простому". Просто таких полей на самом деле 56 и вычисления значения зависит от индекса в конце названия поля.
__________________
Axapta has seduced me deadly! |
|
04.06.2008, 21:22 | #2 |
Участник
|
Просто интересно - что же в этих полях хранится?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
04.06.2008, 21:24 | #3 |
Участник
|
Не поверишь - псевдографика)
__________________
Axapta has seduced me deadly! |
|
04.06.2008, 21:34 | #4 |
Участник
|
А что тогда означает 1 запись в таблице?
Опишите задачу. Интересно.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0 |
|
04.06.2008, 21:36 | #5 |
Microsoft Dynamics
|
Ройте в направлении SysDictTable... SysDictField... И их прородителей DictTable и DictField.
А значение поля из записи можно получить таким образом SalesLine.(<fieldnum>); Ну, а <fieldnum> можно узнать у вышеозначенный классов... |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
04.06.2008, 21:39 | #6 |
Участник
|
Цитата:
X++: RPayTblDayHour calcSumRecord(boolean _dayHour) { int i; RPayTblDayHour value; fieldId ffieldId; for (i = 1; i <= 31 ; i++) { ffieldId = fieldName2Id(tableNum(RPayTblDayHourTrans),#DayHourTransFieldPrefix + int2str(i)); value += _dayHour ? this.(ffieldId) : RPayCalendarTable::HoursToDay(this.(ffieldId)) ; } return value; } Когда менее нормальный человек - Аксаптовед видит такую задачу, то сразу думает о типе-массиве. Но автор требует не парить ему мозги. Что ж, не буем парить. HorrR, ни в коем случае не смотрите на то как разработчики русской зарплаты извращались в дальнейшем с этой таблицей. Заполнение полей - это только начало. Вы еще полдня за ними бегать будете... |
|
|
За это сообщение автора поблагодарили: HorrR (1). |
04.06.2008, 21:44 | #7 |
Участник
|
За первый совет огромное спасибо! А насчёт второго маленькая поправка - есть условие не менять структуру данных, не менять дизайн форм, так как эту часть функционала делают другие "программисты"(индусы). Вот такая маца. Так что приходится выкручиваться(
__________________
Axapta has seduced me deadly! |
|
04.06.2008, 21:48 | #8 |
Участник
|
Они не поймут fieldname2id. Они не поймут, что где-то есть магическая константа 56.
пишите 56 строк в стиле table.field1 := mySuperValue... Copy-Paste - это сила. Опять же: "не парь мозги, делай всё по простому" |
|
04.06.2008, 21:53 | #9 |
Участник
|
Ну, индусы уже ничего не будут делать, они свою часть уже "сделали". Так что об этом можно не беспокоиться)
__________________
Axapta has seduced me deadly! |
|
06.06.2008, 12:13 | #10 |
Участник
|
Да что-то наподобоии скедьюлов в ганте. Наши "умницы" заказчики захотели, что бы всё было как в старой системе, тобишь псевдографикой в таблицах. А нам расхлёбывай.
__________________
Axapta has seduced me deadly! |
|
|
|